123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import { isNil, isPlainObject, set, startCase, transform } from 'lodash-es'
- import crypto from 'node:crypto'
- /* eslint-disable promise/param-names */
- export function createDeferred () {
- let result, resolve, reject
- return {
- resolve: function (value) {
- if (resolve) {
- resolve(value)
- } else {
- result = result || new Promise(function (r) { r(value) })
- }
- },
- reject: function (reason) {
- if (reject) {
- reject(reason)
- } else {
- result = result || new Promise(function (x, j) { j(reason) })
- }
- },
- promise: new Promise(function (r, j) {
- if (result) {
- r(result)
- } else {
- resolve = r
- reject = j
- }
- })
- }
- }
- /**
- * Decode a tree path
- *
- * @param {string} str String to decode
- * @returns Decoded tree path
- */
- export function decodeTreePath (str) {
- return str?.replaceAll('.', '/')
- }
- /**
- * Encode a tree path
- *
- * @param {string} str String to encode
- * @returns Encoded tree path
- */
- export function encodeTreePath (str) {
- return str?.toLowerCase()?.replaceAll('/', '.') || ''
- }
- /**
- * Encode a folder path (to support legacy PostgresSQL ltree)
- *
- * @param {string} val String to encode
- * @returns Encoded folder path
- */
- export function encodeFolderPath (val) {
- return WIKI.db.LEGACY ? val?.replaceAll('-', '_') : val
- }
- /**
- * Decode a folder path (to support legacy PostgresSQL ltree)
- *
- * @param {string} val String to decode
- * @returns Decoded folder path
- */
- export function decodeFolderPath (val) {
- return WIKI.db.LEGACY ? val?.replaceAll('_', '-') : val
- }
- /**
- * Generate SHA-1 Hash of a string
- *
- * @param {string} str String to hash
- * @returns Hashed string
- */
- export function generateHash (str) {
- return crypto.createHash('sha1').update(str).digest('hex')
- }
- /**
- * Get default value of type
- *
- * @param {any} type primitive type name
- * @returns Default value
- */
- export function getTypeDefaultValue (type) {
- switch (type.toLowerCase()) {
- case 'string':
- return ''
- case 'number':
- return 0
- case 'boolean':
- return false
- }
- }
- export function parseModuleProps (props) {
- return transform(props, (result, value, key) => {
- let defaultValue = ''
- if (isPlainObject(value)) {
- defaultValue = !isNil(value.default) ? value.default : getTypeDefaultValue(value.type)
- } else {
- defaultValue = getTypeDefaultValue(value)
- }
- set(result, key, {
- default: defaultValue,
- type: (value.type || value).toLowerCase(),
- title: value.title || startCase(key),
- hint: value.hint || '',
- enum: value.enum || false,
- enumDisplay: value.enumDisplay || 'select',
- multiline: value.multiline || false,
- sensitive: value.sensitive || false,
- icon: value.icon || 'rename',
- order: value.order || 100,
- if: value.if ?? []
- })
- return result
- }, {})
- }
- export function getDictNameFromLocale (locale) {
- const loc = locale.length > 2 ? locale.substring(0, 2) : locale
- if (loc in WIKI.config.search.dictOverrides) {
- return WIKI.config.search.dictOverrides[loc]
- } else {
- return WIKI.data.tsDictMappings[loc] ?? 'simple'
- }
- }
|