@yongdall/common 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.mjs +1158 -0
- package/index.mjs.map +1 -0
- package/package.json +12 -0
- package/types.d.mts +391 -0
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#config","#hooks","#stringTag","#keys"],"sources":["../../packages/common/Search/util.mjs","../../packages/common/Search/exec.mjs","../../packages/common/Search/fill.mjs","../../packages/common/Search/parse.mjs","../../packages/common/Search/merge.mjs","../../packages/common/Search/stringify.mjs","../../packages/common/Search/index.mjs","../../packages/common/Hook.mjs","../../packages/common/model.mjs","../../packages/common/yieldPermissionConstraintFields.mjs","../../packages/common/index.mjs"],"sourcesContent":["\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => TNext} run \n * @param {TNext} def \n */\nexport function runGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = run(result.value);\n\t}\n}\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => PromiseLike<TNext> | TNext} run \n * @param {TNext} def \n */\nexport async function asyncRunGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = await run(result.value);\n\t}\n}\n","/** @import { Children, Field, Match, Or } from './types.mjs' */\nimport { asyncRunGenerator, runGenerator } from './util.mjs';\n\n\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} fields \n * @returns {any[]}\n */\nfunction select(data, fields) {\n\tlet list = data;\n\tfor (let item of fields) {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\n\t\tif (!list.length) { continue; }\n\t\t/** @type {any[]} */\n\t\tconst subList = [];\n\t\tit: for (const item of list) {\n\t\t\tif (!item || typeof item !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\t\tlet value = item[field];\n\t\t\tfor (const index of sub) {\n\t\t\t\tif (!Array.isArray(value)) { continue it; }\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tsubList.push(value);\n\t\t}\n\t\tlist = subList.flat(Infinity).filter(v => v && typeof v === 'object');\n\t}\n\treturn list;\n\n}\n\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string} field \n * @returns {any[]}\n */\nfunction selectValue(list, field) {\n\t/** @type {any[]} */\n\tconst subList = [];\n\tfor (const item of list) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tsubList.push(item[field]);\n\t}\n\treturn subList;\n\n}\n/**\n * @typedef {object} ExecParam\n * @property {string[]} fields\n * @property {string} operator\n * @property {string?} [sign]\n * @property {any} value\n * @property {any[]} values\n */\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {string[]} parentFields \n * @param {Match} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execMatch(data, parentFields, match) {\n\tconst fields = [...match[0]];\n\tconst currentFields = [...parentFields, ...fields.map(v => typeof v === 'string' ? v : v[0])];\n\tconst last = fields.pop();\n\tif (!last) { return null; }\n\tconst lastField = typeof last === 'string' ? last : last[0];\n\tconst records = select(data, fields);\n\tif (!records.length) { return false; }\n\tconst [, value, operator, sign] = match;\n\tif (operator === null) {\n\t\tconst values = selectValue(records, lastField);\n\t\treturn sign ? values.find(v => v === null) : values.find(v => v !== null);\n\t}\n\tif (typeof value !== 'object' || !value || Array.isArray(value)) {\n\n\t\tconst values = selectValue(records, lastField);\n\t\tif (!values.length) { return false; }\n\n\t\treturn yield ({ fields: currentFields, operator, sign, value, values });\n\t}\n\n\tif (value.filter || value.table || value.placeholder) { return null; }\n\tconst field = value.field;\n\tif (!field) { return null; }\n\n\t/** @type {boolean?} */\n\tlet defResult = false;\n\tfor (const item of records) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tif (!Object.hasOwn(item, lastField)) { continue; }\n\t\tdefResult = null;\n\t\tconst result = yield ({ fields: currentFields, operator, sign, value: item[field], values: [item[lastField]] });\n\t\tif (result === null) { continue; }\n\t\treturn result;\n\t}\n\treturn defResult;\n\n}\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {string[]} parentFields \n * @param {Match | Children | Or} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execItem(data, parentFields, match) {\n\tif (!Array.isArray(match)) {\n\t\tconst { and, or } = match;\n\t\treturn yield* execOr(data, parentFields, and, or);\n\t}\n\tif (match.length !== 2) {\n\t\treturn yield* execMatch(data, parentFields, match);\n\n\t}\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tconst values = select(data, match[0]);\n\tif (!values.length) { return false; }\n\tconst fields = [...parentFields, ...match[0].map(v => typeof v === 'string' ? v : v[0])];\n\tfor (const item of match[1]) {\n\t\tconst result = yield* execItem(values, fields, item);\n\t\tif (result === null) { continue; }\n\t\tif (!result) { return false; }\n\t\tdefResult = true;\n\t}\n\treturn defResult;\n}\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string[]} parentFields \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execOr(list, parentFields, and, or) {\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tif (Array.isArray(and)) {\n\t\tfor (const item of and) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (!result) { return false; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\tif (Array.isArray(or)) {\n\t\tfor (const item of or) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (result) { return true; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\treturn defResult;\n\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport function exec(data, exec, and, or) {\n\treturn runGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => PromiseLike<boolean?> | boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport async function asyncExec(data, exec, and, or) {\n\treturn asyncRunGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n","/** @import { Value } from './types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or } from './types.mjs' */\n\nimport { runGenerator } from './util.mjs';\n\n\n\n\n\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}\n */\nfunction* fillList(match) {\n\t/** @type {T[]} */\n\tlet list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T} match \n * @returns {Generator<Value | (() => Value), T?, Value | (() => string | null) | null>}\n */\nfunction* fillMatch(match) {\n\tif (!Array.isArray(match)) {\n\t\tconst and = match.and && (yield* fillMatches(match.and));\n\t\tconst or = match.or && (yield* fillMatches(match.or));\n\t\tif (!and && !or) { return null; }\n\t\t/** @type {Or} */\n\t\tconst item = { and: and || match.and, or: or || match.or };\n\t\treturn /** @type {T} */(item);\n\t}\n\tif (match.length === 2) {\n\t\tlet children = yield* fillMatches(match[1]);\n\t\tif (!children) { return null; }\n\t\t/** @type {Children} */\n\t\tconst item = [match[0], match[1]];\n\t\treturn /** @type {T} */(item);\n\t}\n\tconst value = yield match[1];\n\tif (value === null) { return null; }\n\t/** @type {Match} */\n\tconst item = [match[0], value, match[2], match[3]];\n\treturn /** @type {T} */(item);\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}\n */\nexport function* fillMatches(match) {\n\t/** @type {T[]} */\n\tconst list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[] | null | undefined} match \n * @param {(placeholder: string) => string | (() => string | null) | null} getPlaceholder \n * @returns {T[]}\n */\nexport function fill(match, getPlaceholder) {\n\tif (!match) { return []; }\n\t/**\n\t * \n\t * @template {Value | (() => Value)} T \n\t * @param {T} match \n\t * @returns {Value | (() => string | null) | null}\n\t */\n\tfunction fillValue(match) {\n\t\tif (!match || typeof match !== 'object') { return null; }\n\t\tif (Array.isArray(match)) { return null; }\n\t\tconst placeholder = match.placeholder;\n\t\tif (!placeholder || typeof placeholder !== 'string') { return null; }\n\t\treturn getPlaceholder(placeholder);\n\t}\n\treturn runGenerator(fillList(match), fillValue, null) || match;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, Match, Or, Param, Value } from './types.mjs' */\n\n\n\n/**\n * @typedef {object} Parse.Field\n * @property {string} field\n * @property {string?} [group]\n * @property {number[]} sub\n */\n/**\n * @typedef {object} Parse.Match\n * @property {null} [children]\n * @property {Parse.Field[]} fields\n * @property {string?} operator\n * @property {string} [sign]\n * @property {Value} value\n */\n\n\n/**\n * @typedef {object} Parse.Children\n * @property {Parse.Field[]} fields\n * @property {(Parse.Match | Parse.Children)[]} children\n */\n\n/**\n * \n * @param {Parse.Field[]} fields \n * @returns {Field[]}\n */\nfunction compressFields(fields) {\n\treturn fields.map(\n\t\t({ field, sub }) => sub.length ? [field, ...sub] : field\n\t);\n}\n\n/**\n * \n * @param {Parse.Match | Parse.Children} v \n * @returns {Match | Children}\n */\nfunction compressAndItem(v) {\n\tif (v.children) {\n\treturn [compressFields(v.fields), v.children.map(compressAndItem)];\n\n\t}\n\tconst { fields, operator, value, sign } = v;\n\treturn [compressFields(fields), value, operator, sign];\n}\n\nconst fieldParserRegex = /^([-_\\d\\p{L}]+)((?:\\[-?\\d+\\])*)$/u;\n/**\n * \n * @param {string} l \n */\nfunction parseFields(l) {\n\t/** @type {Parse.Field[]} */\n\tconst fields = [];\n\tfor (const v of l.split('.')) {\n\t\tif (!v || v[0] === '?') { return null; }\n\t\tconst index = v.indexOf('?');\n\t\tconst r = fieldParserRegex.exec(index > 0 ? v.slice(0, index) : v);\n\t\tif (!r) { return null; }\n\t\tconst sub = r[2]?.split(/\\[|\\]/).filter(Boolean).map(v => parseInt(v) || 0) || [];\n\t\tconst group = index > 0 ? v.slice(index) : undefined;\n\t\tfields.push({ field: r[1], group, sub });\n\t}\n\treturn fields;\n\n}\n\n\n/** @param {string} v */\nconst decodeValue = v => decodeURIComponent(v.replaceAll('+', ' '));\n/**\n * \n * @param {string} s \n * @returns {string | RecursiveArray<string>?}\n */\nfunction parseArrayValue(s) {\n\t/** @type {(string | RecursiveArray<string>)[]} */\n\tconst root = [];\n\t/** @type {(string | RecursiveArray<string>)[][]} */\n\tconst stack = [];\n\tlet current = root;\n\t/** @type {string[]} */\n\tlet strings = [];\n\tlet end = false;\n\tlet must = true;\n\tfunction add() {\n\t\tcurrent.push(decodeValue(strings.join()));\n\t\tstrings = [];\n\t}\n\n\tfor (const c of s) {\n\t\tif (c === ',') {\n\t\t\tif (end) {\n\t\t\t\tend = false;\n\t\t\t} else {\n\t\t\t\tadd();\n\t\t\t}\n\t\t\tmust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === ')') {\n\t\t\tif (must || strings.length) {\n\t\t\t\tadd();\n\t\t\t\tmust = false;\n\t\t\t}\n\t\t\tconst last = stack.pop();\n\t\t\tif (!last) { return null; }\n\t\t\tlast.push(current);\n\t\t\tcurrent = last;\n\t\t\tend = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (end) { return null; }\n\t\tmust = false;\n\t\tif (c !== '(') {\n\t\t\tstrings.push(c);\n\t\t\tcontinue;\n\t\t}\n\t\tif (strings.length) { return null; }\n\t\tstack.push(current);\n\t\tcurrent = [];\n\t}\n\tif (must || strings.length) {\n\t\tadd();\n\t}\n\tif (stack.length) { return null; }\n\treturn root.length === 1 ? root[0] : root;\n}\n\nconst valueQRegex = /^([-_\\d\\p{L}]+)@([-_\\d\\p{L}]+)/u;\n\n\n/**\n * \n * @param {string?} v \n * @returns {Value | true}\n */\nfunction parseValue(v) {\n\tif (v === null) { return true; }\n\tif (v[0] === '?') {\n\t\treturn { placeholder: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === ':') {\n\t\treturn { field: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === '@') {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tconst vq = valueQRegex.test(v);\n\tif (vq) {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tif (v.includes('(') || v.includes(')')) {\n\t\tconst list = parseArrayValue(v);\n\t\tif (list) { return list; }\n\t}\n\tif (v.includes(',')) {\n\t\treturn v.split(',').map(v => decodeValue(v.replaceAll('+', ' ')));\n\t}\n\treturn decodeValue(v);\n}\n/**\n * \n * @param {(Parse.Match | Parse.Children)[]} list \n * @returns {Iterable<Match | Children>}\n */\nfunction* toAnd(list) {\n\t/** @type {[(Parse.Match | Parse.Children), Parse.Field[], Parse.Field[]][]} */\n\tconst values = list.map(v => {\n\t\tconst fields = v.fields;\n\t\tconst index = fields.findLastIndex(v => v.group);\n\t\tif (index < 0 || index >= fields.length - 1) {\n\t\t\treturn [v, [], []];\n\t\t}\n\t\tconst field = fields[index];\n\t\tif (!field) { return [v, [], []]; }\n\t\treturn [{ ...v, fields: fields.slice(index + 1) }, fields.slice(0, index + 1), [...fields.slice(0, index), { ...field, group: undefined }]];\n\t});\n\tconst map = Object.groupBy(values, v => JSON.stringify(v[1]));\n\tyield* map['[]']?.map(v => compressAndItem(v[0])) || [];\n\tdelete map['[]'];\n\t/** @type {Parse.Children[]} */\n\tconst result = Object.values(map).filter(Boolean).map((list = []) => {\n\t\tif (!list?.length) { return { fields: [], children: [] }; }\n\t\treturn { fields: list[0][2] || [], children: list.map(v => v[0]) };\n\t}).filter(v => v.fields.length);\n\tif (!result.length) { return; }\n\n\tyield* toAnd(result);\n}\n\n/**\n * \n * @param {(Parse.Match & {groups: string[]})[]} list \n * @returns {Or}\n */\nfunction toOr(list) {\n\tconst map = Map.groupBy(list, v => v.groups.shift() ?? null);\n\tconst and = map.get(null) || [];\n\tconst baseOr = map.get('') || [];\n\tmap.delete(null);\n\tmap.delete('');\n\n\treturn {\n\t\tor: [\n\t\t\t...baseOr.map(v => compressAndItem(v)),\n\t\t\t...[...map.values()].map(v => toOr(v)),\n\t\t],\n\t\tand: [...toAnd(and)],\n\t};\n}\n/**\n * \n * @param {string} search \n * @returns {Param}\n */\nexport function parse(search, split = '&') {\n\t/** @type {string[]} */\n\tconst values = [];\n\t/** @type {string[]} */\n\tconst select = [];\n\t/** @type {[field: string, desc?: boolean][]} */\n\tconst sorts = [];\n\tlet limit = 0;\n\tlet offset = 0;\n\tlet page = 0;\n\t/** @type {Record<string, string>} */\n\tconst placeholders = {};\n\n\n\t/** @type {(Parse.Match & {groups: string[]})[]} */\n\tconst allMatches = [];\n\n\tfor (const s of search.split(split)) {\n\t\tif (s[0] === '=') {\n\t\t\tvalues.push(s.slice(1));\n\t\t\tcontinue;\n\t\t}\n\t\tconst index = s.indexOf('=');\n\t\tconst key = index < 0 ? s : s.slice(0, index);\n\t\tconst val = index < 0 ? null : s.slice(index + 1);\n\t\tif (index <= 0) { continue; }\n\t\tif (`.!@^*<>{}[]()+|;,\"'\\`\\\\/`.includes(key[0])) { continue; }\n\t\tif (key[0] === '?') {\n\t\t\tplaceholders[decodeValue(key.slice(1))] = decodeValue(val || '');\n\t\t\tcontinue;\n\t\t}\n\t\tif (key[0] === ':') {\n\t\t\tconst name = key.slice(1);\n\t\t\tif (!val) { continue; }\n\t\t\tif (name === 'sort') {\n\t\t\t\tsorts.push(...val.split(',').filter(Boolean).map(v => {\n\t\t\t\t\tconst desc = v[0] === '-';\n\t\t\t\t\tconst name = desc ? v.slice(1) : v;\n\t\t\t\t\treturn /** @type {[field: string, desc?: boolean]} */([decodeValue(name), desc]);\n\t\t\t\t}).filter(Boolean));\n\t\t\t} else if (name === 'select') {\n\t\t\t\tselect.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'limit') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { limit = parseInt(val); }\n\t\t\t} else if (name === 'offset') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { offset = parseInt(val); }\n\t\t\t} else if (name === 'page') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { page = parseInt(val); }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst sg = key.split('~');\n\t\tlet field = sg.pop() || '';\n\t\tlet sign = '';\n\t\tif ('!'.includes(field[field.length - 1])) {\n\t\t\tsign = '!';\n\t\t\tfield = field.slice(0, -1);\n\t\t}\n\n\t\tconst l = field.split(':', 3);\n\t\tif (l.length > 2) { continue; }\n\t\tconst fields = parseFields(l[0]);\n\t\tif (!fields) { continue; }\n\t\tconst value = parseValue(val);\n\t\tif (value === null) { continue; }\n\n\t\tconst operator = decodeValue(l[1] || '');\n\t\tconst groupIndex = sg.indexOf('');\n\t\tconst groups = groupIndex < 0 ? sg : sg.slice(0, groupIndex + 1);\n\t\tallMatches.push({\n\t\t\tgroups,\n\t\t\tfields,\n\t\t\toperator: !operator && value === true ? null : operator,\n\t\t\tsign,\n\t\t\tvalue: value === true ? null : value\n\t\t});\n\t}\n\n\tconst { and, or } = toOr(allMatches);\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sorts?.length) {\n\t\tresult.sort = sorts;\n\t}\n\tconst where = and;\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tconst orWhere = or;\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (Array.isArray(placeholders) && placeholders.length) {\n\t\tresult.placeholders = placeholders;\n\t}\n\n\n\treturn result\n}\n","/** @import { Param } from './types.mjs' */\n\n/**\n * \n * @param {Partial<Param>} a \n * @param {Partial<Param>} b \n * @returns {Param}\n */\nexport function merge(a, b) {\n\tconst limit = b.limit || a.limit || 10;\n\tconst page = b.page ?? a.page;\n\tconst offset = \n\tb.offset ?? (b.limit && (b.page || b.page === 0) ? (Math.floor(Math.max(b.page || 0, 1)) - 1) * b.limit : null)\n\t?? a.offset ?? (a.limit && (a.page || a.page === 0) ? (Math.floor(Math.max(a.page || 0, 1)) - 1) * a.limit : null)\n\t?? (Math.floor(Math.max(page || 0, 1)) - 1) * limit;\n\n\tconst values = [...a.values || [], ...b.values || []]\n\tconst sort = [...a.sort || [], ...b.sort || []]\n\tconst select = [...a.select || [], ...b.select || []]\n\tconst where = [...a.where || [], ...b.where || []]\n\tconst orWhere = [...a.orWhere || [], ...b.orWhere || []]\n\tconst or = [...a.or || [], ...b.or || []]\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sort?.length) {\n\t\tresult.sort = sort;\n\t}\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (or?.length) {\n\t\tresult.or = or;\n\t}\n\n\treturn result;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or, Param } from './types.mjs' */\n\n/** @param {string} v */\nconst encodeValue = v => encodeURIComponent(v).replaceAll('%20', '+');\n\n/**\n * \n * @param {string | RecursiveArray<string> | FieldValue} value \n */\nfunction stringifyValue(value) {\n\tif (Array.isArray(value)) {\n\t\t/**\n\t\t * \n\t\t * @param {string | RecursiveArray<string>} v \n\t\t * @returns {string}\n\t\t */\n\t\tfunction s(v) {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\treturn `(${v.map(s).join(',')})`;\n\t\t\t}\n\t\t\treturn encodeValue(v);\n\t\t}\n\t\tconst val = value.map(s).join(',');\n\t\tif (value.length > 1) { return val; }\n\t\treturn `(${val})`;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn encodeValue(value);\n\t}\n\tconst { field, placeholder } = value;\n\tif (placeholder) {\n\t\treturn `?${encodeValue(placeholder)}`;\n\t}\n\tif (field) {\n\t\treturn `:${encodeValue(field)}`;\n\t}\n\t// TODO:\n\treturn '';\n}\n\n/**\n * \n * @param {Field[]} fields \n */\nfunction stringifyFields(fields) {\n\treturn fields.map(item => {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\t\t\treturn `${encodeValue(field)}${sub.map(() => `[k]`).join('')}`;\n\t\t}\n\t).join('.');\n}\n/**\n * \n * @param {Match} define \n */\nfunction stringifyDefine([fields, value, operator, sign]) {\n\tconst key = operator\n\t\t? `${stringifyFields(fields)}:${encodeValue(operator)}${sign || ''}`\n\t\t: `${stringifyFields(fields)}${sign || ''}`;\n\tif (operator === null) { return key; }\n\tif (value === null) { return ''; }\n\tif (typeof value === 'function') { return''; }\n\treturn `${key}=${stringifyValue(value)}`;\n}\n/**\n * \n * @param {(Match | Children)[]} list \n * @returns {string[]}\n */\nfunction stringifyAnd(list) {\n\tlet index = 0;\n\treturn list.flatMap(v => {\n\t\tif (v.length !== 2) {\n\t\t\treturn stringifyDefine(v);\n\t\t}\n\t\tconst list = stringifyAnd(v[1]);\n\t\tif (!list.length) { return []; }\n\t\tlet key = stringifyFields(v[0]);\n\t\tif (list.length > 1) {\n\t\t\tkey += `?${(index++).toString(36)}`;\n\t\t}\n\t\treturn list.map(v => `${key}.${v}`);\n\t}).filter(Boolean);\n}\n\n/**\n * \n * @param {(Match | Children | Or)[]} list \n * @returns {string[]}\n */\nfunction stringifyOr(list) {\n\tlet index = 0;\n\treturn list.map(v => {\n\t\tif (Array.isArray(v)) {\n\t\t\treturn stringifyAnd([v]);\n\n\t\t}\n\t\treturn [\n\t\t\t...stringifyAnd(v.and || []),\n\t\t\t...stringifyOr(v.or || []),\n\t\t];\n\t}).flatMap(list => {\n\t\tif (!list) { return []; }\n\t\tconst key = list.length === 1 ? `~` : `${(index++).toString(36)}~`;\n\t\treturn list.map(v => `${key}${v}`);\n\t});\n}\n/**\n * \n * @param {Partial<Param>} query \n * @param {boolean} [usePage] \n */\nexport function stringify({\n\tvalues,\n\twhere,\n\torWhere,\n\tsort,\n\tselect,\n\tlimit, offset, page,\n\tplaceholders,\n}, usePage) {\n\t/** @type {string[]} */\n\tlet queries = [];\n\tfor (const v of values || []) {\n\t\tif (!v) { continue; }\n\t\tqueries.push(`=${encodeValue(v)}`);\n\t}\n\tif (limit && limit > 0) {\n\t\tqueries.push(`:limit=${limit}`);\n\t}\n\tif (usePage) {\n\t\tif (page && page > 0) {\n\t\t\tqueries.push(`:page=${page}`);\n\t\t}\n\t} else {\n\t\tif (offset && offset > 0) {\n\t\t\tqueries.push(`:offset=${offset}`);\n\t\t}\n\t}\n\tif (select) {\n\t\tconst val = select.filter(Boolean).map(encodeValue).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`.select=${val}`);\n\t\t}\n\t}\n\tif (sort) {\n\t\tconst val = sort.filter(Boolean).map(v => {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\tconst [field, desc] = v;\n\t\t\t\tif (field) {\n\t\t\t\t\treturn `${desc ? '-' : ''}${encodeValue(field)}`;\n\t\t\t\t}\n\t\t\t} else if (v) {\n\t\t\t\treturn encodeValue(v);\n\t\t\t}\n\t\t\treturn '';\n\t\t}).filter(Boolean).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`.sort=${val}`);\n\t\t}\n\t}\n\tif (placeholders && typeof placeholders === 'object' && !Array.isArray(placeholders)) {\n\t\tfor (const [k, v] of Object.entries(placeholders)) {\n\t\t\tqueries.push(`?${encodeValue(k)}=${encodeValue(v)}`);\n\n\t\t}\n\t}\n\tfor (const v of stringifyAnd(where || [])) {\n\t\tqueries.push(v);\n\t}\n\tfor (const v of stringifyOr(orWhere || [])) {\n\t\tqueries.push(v);\n\t}\n\treturn queries.join('&');\n}\n","export * from './exec.mjs';\nexport * from './fill.mjs';\nexport { parse } from './parse.mjs';\nexport * from './merge.mjs';\nexport * from './stringify.mjs';\nexport * from './types.mjs';\nexport * from './util.mjs';\nexport * from './WhereLike.mjs';\n","/**\n * @template T\n * @typedef {T | readonly T[]} Hook.MaybeArray\n */\n/**\n * @template T\n * @typedef {T extends readonly any[] ? Readonly<T>\n * : T extends Record<string, any> ? Hook.MaybeArray<Hook.Define<T> | T>\n * : T extends object ? Hook.MaybeArray<Hook.Define<T> | T>\n * : Hook.MaybeArray<T>\n * } Hook.Item\n */\n/**\n * @template T\n * @typedef {T extends Record<string, any> ? { [k in keyof T]?: Hook.Item<T[k]> } : T} Hook.Define\n*/\n\n\n\n\n/** @type {*} */\nconst noopFilter = () => true;\n\n\n\n\n/**\n * \n * @param {Record<string, any>} plugin \n * @param {string[]} name \n * @returns {*[]}\n */\nfunction findHook(plugin, name) {\n\tlet list = [plugin].flat();\n\tfor (const k of name.filter(Boolean)) {\n\t\tconst values = [];\n\t\tfor (const it of list) {\n\t\t\tif (!it || typeof it !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(it, k)) { continue; }\n\t\t\tvalues.push(it[k]);\n\t\t}\n\t\tif (!values.length) { return []; }\n\t\tlist = values.flat();\n\t}\n\treturn list;\n}\n\n/**\n * \n * @template T\n * @param {any} plugin \n * @param {string[]} names \n * @returns {T | void}\n */\nfunction first(plugin, names) {\n\tif (!names.length) { return plugin; }\n\tif (!plugin || typeof plugin !== 'object') { return; }\n\tconst [name, ...keys] = names;\n\tfor (const v of [plugin].flat()) {\n\t\tconst val = first(v[name], keys);\n\t\tif (val !== undefined) { return val; }\n\t}\n}\n\n/**\n * \n * @template T\n * @param {Record<string, any>} hooks \n * @param {string[]} name \n * @returns {IterableIterator<T>}\n */\nfunction* values(hooks, name) {\n\tfor (const it of Object.values(hooks)) {\n\t\tfor (const value of findHook(it, name)) {\n\t\t\tyield value;\n\t\t}\n\t}\n}\n\n\n\n\n/**\n * @template T\n */\nexport class Hook {\n\t/**\n\t * @template {object} T\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t * @return {Hook<T>}\n\t */\n\tstatic build(options) {\n\t\tconst hook = new Hook();\n\t\treturn Hook.update(hook, options);\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t */\n\tstatic update(hook, options) {\n\t\tlet updated = false;\n\t\tif (typeof options === 'function') {\n\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst r = options();\n\t\t\t\t\treturn typeof r === 'object' && r || {};\n\t\t\t\t},\n\t\t\t});\n\t\t\tupdated = true;\n\t\t} else {\n\t\t\tif (options && typeof options === 'object') {\n\t\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tvalue: options,\n\t\t\t\t});\n\t\t\t\tupdated = true;\n\t\t\t}\n\t\t}\n\t\tif (updated) {\n\t\t\tHook.reset(hook);\n\t\t}\n\t\treturn hook;\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t */\n\tstatic reset(hook) {\n\t\tconst hooks = hook.#hooks;\n\t\tconst resetFn = hook.#config.resetFn;\n\t\tresetFn.sort(([, a], [, b]) => a - b);\n\t\tconst before = resetFn.filter(([, p]) => p <= 0);\n\t\tconst after = resetFn.filter(([, p]) => p > 0);\n\t\tfor (const [fn] of before) { fn(); }\n\t\tfor (const fn of values(hooks, ['reset'])) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn();\n\t\t}\n\t\tfor (const [fn] of after) { fn(); }\n\t}\n\n\t/** @type {{hooks: any; resetFn: [fn: () => void, hysteresis: number][]}} */\n\t#config = { hooks: Object.create(null), resetFn: [] };\n\t/** @type {string[]} */\n\t#keys = [];\n\t#stringTag = 'Hook';\n\t[Symbol.iterator]() { return this.entries(); }\n\t[Symbol.toStringTag]() { return this.#stringTag; }\n\t/** @param {string} hint */\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === 'number') { return NaN; }\n\t\treturn `[${this[Symbol.toStringTag]()}]`;\n\t}\n\n\tget #hooks() { return this.#config.hooks; };\n\t/**\n\t * @template {T extends readonly any[] ? never : T extends object ? string & keyof T : never} K\n\t * @param {K} key \n\t * @returns {Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] :never, void | undefined>>}\n\t */\n\tget(key) {\n\t\tconst keys = [...this.#keys, key];\n\t\tconst hook = new Hook();\n\t\thook.#config = this.#config;\n\t\thook.#keys = keys;\n\t\thook.#stringTag = `Hook(${keys.join('.')})`;\n\t\treturn hook;\n\t}\n\t/**\n\t * @param {T extends (...args: infer A) => any ? A : []} args \n\t * @returns \n\t */\n\tcall(...args) {\n\t\tfor (const fn of this.values()) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn(...args);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {T | void}\n\t */\n\tfirst(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\treturn first(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\t*plugin(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\tyield* findHook(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\tvalues() { return values(this.#hooks, this.#keys); }\n\n\t/**\n\t * \n\t * @returns {IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>}\n\t */\n\t*entries() {\n\t\tconst hooks = this.#hooks;\n\t\tconst name = this.#keys;\n\t\tfor (const [plugin, it] of Object.entries(hooks)) {\n\t\t\tfor (const value of findHook(it, name)) {\n\t\t\t\tyield [plugin, value];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * \n\t * @template [TX=(T extends Record<string, infer TT>? TT extends readonly (infer V)[] ? V : TT : never)]\n\t * @param {(v: *)=>v is TX} filter \n\t * @returns {IterableIterator<[plugin: string, key: string, value: TX]>}\n\t */\n\t*entriesObject(filter = noopFilter) {\n\t\tfor (const [plugin, hooksMap] of this.entries()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tyield [plugin, k, v];\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * @template [TT=(T extends Record<string, infer TT> ? TT : never)]\n\t * @param {(v: *)=>v is TT} [filter] \n\t * @returns {Record<string, TT>}\n\t */\n\tnamed(filter = noopFilter) {\n\t\t/** @type {Record<string, TT>} */\n\t\tconst result = Object.create(null);\n\t\tfor (const hooksMap of this.values()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tresult[k] = v;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * \n\t * @param {() => void} fn \n\t * @param {number} [hysteresis] \n\t * @returns \n\t */\n\tlisten(fn, hysteresis) {\n\t\tif (typeof fn !== 'function') { return () => { }; }\n\t\tconst resetFn = this.#config.resetFn;\n\t\t/** @type {[() => void, number]} */\n\t\tconst it = [fn, Number.isFinite(hysteresis) && hysteresis || 0];\n\t\tresetFn.push(it);\n\t\tresetFn.sort(([, a], [, b]) => b - a);\n\t\treturn () => {\n\t\t\tconst index = resetFn.findIndex(v => v === it);\n\t\t\tif (index >= 0) {\n\t\t\t\tresetFn.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n}\n","const regex = /\\{([^}{}]+)\\}/g\n/**\n * \n * @param {string?} [pattern] \n */\nexport function getPatternFields(pattern) {\n\tif (!pattern || typeof pattern !== 'string') { return []; }\n\t/** @type {string[]} */\n\tconst fields = [];\n\tfor(let result = regex.exec(pattern); result; result = regex.exec(pattern)) {\n\t\tfields.push(result[1]);\n\t}\n\treturn fields;\n}\n\n/**\n * \n * @param {string?} [pattern] \n * @param {Record<string, any>?} [document] \n * @returns \n */\nexport function runPattern(pattern, document) {\n\tif (!pattern || typeof pattern !== 'string') { return ''; }\n\tconst doc = typeof document === 'object' && document || {};\n\treturn pattern.replace(regex, (_, v) => {\n\t\tif (Object.hasOwn(doc, v)) { return doc[v] ?? ''; }\n\t\treturn `{${v}}`;\n\t});\n}\n","/** @import { Permission } from '@yongdall/types' */\n\n\n\n\n\n/**\n *\n * @param {Permission} permission\n * @returns {Iterable<string>}\n */\nexport default function* yieldPermissionConstraintFields({ constraints, organizationField }) {\n\tif (organizationField) { yield organizationField; }\n\tif (!constraints) { return; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tif (value !== undefined) {\n\t\t\tyield field;\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tyield field;\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tyield field;\n\t\t} else if (user) {\n\t\t\tyield field;\n\t\t}\n\t}\n}\n","export * as Search from './Search/index.mjs';\nexport { Hook } from './Hook.mjs';\nexport * from './model.mjs';\nexport { default as yieldPermissionConstraintFields } from './yieldPermissionConstraintFields.mjs';\n\n\nexport const pluginIdRegex = /^(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+)$/;\nexport const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+))(?:\\/(?<path>[^#]*))?(?:#(?<hash>.*))?$/;\n\n/**\n * @typedef {object} Plugin\n * @property {string} [version]\n * @property {Record<string, string>} [assets]\n * @property {string} [hooks]\n * @property {string[]} [styles]\n */\n/**\n * @typedef {object} BootConfiguration\n * @property {string} [route] 路由管理器\n * @property {string} [theme] 界面主题\n * @property {string} [authenticator] 登陆器\n * @property {boolean} [authRequired] 是否强制登陆\n * @property {string} [skin]\n * @property {boolean} [single] \n * @property {string} [application] \n * @property {string} [domain] \n * @property {string | number} [port] \n * @property {string} [path] \n * @property {Record<string, string>} [pages]\n * @property {Record<string, string>} [configurationPages]\n * \n * \n * @property {string} [logo] \n * @property {string} [title] \n * @property {string} [company] \n * @property {string} [type] \n * @property {string} [help] 帮助链接\n * @property {any[]} [userMenus]\n */\n/**\n * @typedef {object} Importmap\n * @property {Record<string, string>} imports\n * @property {Record<string, Record<string, string>>} scopes\n */\n/**\n * @typedef {object} Indicator\n * @property {string} color\n * @property {string} label\n * @property {unknown} [filters]\n */\n\n/**\n *\n * @param {*} v\n * @returns {v is (...p: any[]) => any}\n */\nexport function isFunction(v) {\n\treturn typeof v === 'function';\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
package/types.d.mts
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { Permission } from "@yongdall/types";
|
|
2
|
+
|
|
3
|
+
//#region \0rolldown/runtime.js
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region packages/common/types/types.d.mts
|
|
6
|
+
type RecursiveArray<T> = (T | RecursiveArray<T>)[];
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region packages/common/Search/types.d.mts
|
|
9
|
+
type FieldValue = {
|
|
10
|
+
filter?: string | undefined;
|
|
11
|
+
params?: Record<string, string | RecursiveArray<string>> | undefined;
|
|
12
|
+
field?: string | undefined;
|
|
13
|
+
table?: string | undefined;
|
|
14
|
+
where?: AndList | undefined;
|
|
15
|
+
orWhere?: OrList | undefined;
|
|
16
|
+
sort?: [field: string, desc?: boolean | undefined][] | undefined;
|
|
17
|
+
offset?: number | undefined;
|
|
18
|
+
limit?: number | undefined;
|
|
19
|
+
page?: number | undefined;
|
|
20
|
+
value?: any;
|
|
21
|
+
placeholder?: string | undefined;
|
|
22
|
+
};
|
|
23
|
+
type Value = string | RecursiveArray<string> | FieldValue | null;
|
|
24
|
+
type Field = string | [string, ...number[]];
|
|
25
|
+
type Match = [fields: Field[], value: Value | (() => Value), operator: string | null, sign?: string];
|
|
26
|
+
type Children = [fields: Field[], children: AndList];
|
|
27
|
+
type Or = {
|
|
28
|
+
or?: OrList | undefined;
|
|
29
|
+
and?: AndList | undefined;
|
|
30
|
+
};
|
|
31
|
+
type OrItem = Match | Children | Or;
|
|
32
|
+
type OrList = OrItem[];
|
|
33
|
+
type AndItem = Match | Children;
|
|
34
|
+
type AndList = AndItem[];
|
|
35
|
+
type Param = {
|
|
36
|
+
values?: string[] | undefined;
|
|
37
|
+
where?: AndList | undefined;
|
|
38
|
+
orWhere?: OrList | undefined;
|
|
39
|
+
or?: OrList | undefined;
|
|
40
|
+
sort?: [field: string, desc?: boolean | undefined][] | undefined;
|
|
41
|
+
select?: string[] | undefined;
|
|
42
|
+
offset?: number | undefined;
|
|
43
|
+
limit?: number | undefined;
|
|
44
|
+
page?: number | undefined;
|
|
45
|
+
placeholders?: Record<string, string> | undefined;
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region packages/common/Search/exec.d.mts
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
* @param {Record<string, any>} data
|
|
52
|
+
* @param {(value: ExecParam) => boolean?} exec
|
|
53
|
+
* @param {(Match | Children)[]} [and]
|
|
54
|
+
* @param {(Match | Children | Or)[]} [or]
|
|
55
|
+
*/
|
|
56
|
+
declare function exec(data: Record<string, any>, exec: (value: ExecParam) => boolean | null, and?: (Match | Children)[], or?: (Match | Children | Or)[]): boolean | null;
|
|
57
|
+
/**
|
|
58
|
+
*
|
|
59
|
+
* @param {Record<string, any>} data
|
|
60
|
+
* @param {(value: ExecParam) => PromiseLike<boolean?> | boolean?} exec
|
|
61
|
+
* @param {(Match | Children)[]} [and]
|
|
62
|
+
* @param {(Match | Children | Or)[]} [or]
|
|
63
|
+
*/
|
|
64
|
+
declare function asyncExec(data: Record<string, any>, exec: (value: ExecParam) => PromiseLike<boolean | null> | (boolean | null), and?: (Match | Children)[], or?: (Match | Children | Or)[]): Promise<boolean | null>;
|
|
65
|
+
type ExecParam = {
|
|
66
|
+
fields: string[];
|
|
67
|
+
operator: string;
|
|
68
|
+
sign?: string | null | undefined;
|
|
69
|
+
value: any;
|
|
70
|
+
values: any[];
|
|
71
|
+
};
|
|
72
|
+
//#endregion
|
|
73
|
+
//#region packages/common/Search/fill.d.mts
|
|
74
|
+
/**
|
|
75
|
+
*
|
|
76
|
+
* @template {Match | Children | Or} T
|
|
77
|
+
* @param {T[]} match
|
|
78
|
+
* @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}
|
|
79
|
+
*/
|
|
80
|
+
declare function fillMatches<T extends Match | Children | Or>(match: T[]): Generator<Value | (() => Value), T[] | null, Value | (() => string | null) | null>;
|
|
81
|
+
/**
|
|
82
|
+
*
|
|
83
|
+
* @template {Match | Children | Or} T
|
|
84
|
+
* @param {T[] | null | undefined} match
|
|
85
|
+
* @param {(placeholder: string) => string | (() => string | null) | null} getPlaceholder
|
|
86
|
+
* @returns {T[]}
|
|
87
|
+
*/
|
|
88
|
+
declare function fill<T extends Match | Children | Or>(match: T[] | null | undefined, getPlaceholder: (placeholder: string) => string | (() => string | null) | null): T[];
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region packages/common/Search/merge.d.mts
|
|
91
|
+
/** @import { Param } from './types.mjs' */
|
|
92
|
+
/**
|
|
93
|
+
*
|
|
94
|
+
* @param {Partial<Param>} a
|
|
95
|
+
* @param {Partial<Param>} b
|
|
96
|
+
* @returns {Param}
|
|
97
|
+
*/
|
|
98
|
+
declare function merge(a: Partial<Param>, b: Partial<Param>): Param;
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region packages/common/Search/stringify.d.mts
|
|
101
|
+
/**
|
|
102
|
+
*
|
|
103
|
+
* @param {Partial<Param>} query
|
|
104
|
+
* @param {boolean} [usePage]
|
|
105
|
+
*/
|
|
106
|
+
declare function stringify({
|
|
107
|
+
values,
|
|
108
|
+
where,
|
|
109
|
+
orWhere,
|
|
110
|
+
sort,
|
|
111
|
+
select,
|
|
112
|
+
limit,
|
|
113
|
+
offset,
|
|
114
|
+
page,
|
|
115
|
+
placeholders
|
|
116
|
+
}: Partial<Param>, usePage?: boolean): string;
|
|
117
|
+
//#endregion
|
|
118
|
+
//#region packages/common/Search/util.d.mts
|
|
119
|
+
/**
|
|
120
|
+
* @template T
|
|
121
|
+
* @template TReturn
|
|
122
|
+
* @template TNext
|
|
123
|
+
* @param {Generator<T, TReturn, TNext>} generator
|
|
124
|
+
* @param {(value: T) => TNext} run
|
|
125
|
+
* @param {TNext} def
|
|
126
|
+
*/
|
|
127
|
+
declare function runGenerator<T, TReturn, TNext>(generator: Generator<T, TReturn, TNext>, run: (value: T) => TNext, def: TNext): TReturn;
|
|
128
|
+
/**
|
|
129
|
+
* @template T
|
|
130
|
+
* @template TReturn
|
|
131
|
+
* @template TNext
|
|
132
|
+
* @param {Generator<T, TReturn, TNext>} generator
|
|
133
|
+
* @param {(value: T) => PromiseLike<TNext> | TNext} run
|
|
134
|
+
* @param {TNext} def
|
|
135
|
+
*/
|
|
136
|
+
declare function asyncRunGenerator<T, TReturn, TNext>(generator: Generator<T, TReturn, TNext>, run: (value: T) => PromiseLike<TNext> | TNext, def: TNext): Promise<TReturn>;
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region packages/common/Search/WhereLike.d.mts
|
|
139
|
+
interface WhereLike {
|
|
140
|
+
and(where: this): this;
|
|
141
|
+
or(where: this): this;
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region packages/common/Search/parse.d.mts
|
|
145
|
+
/**
|
|
146
|
+
*
|
|
147
|
+
* @param {string} search
|
|
148
|
+
* @returns {Param}
|
|
149
|
+
*/
|
|
150
|
+
declare function parse(search: string, split?: string): Param;
|
|
151
|
+
declare namespace index_d_exports {
|
|
152
|
+
export { AndItem, AndList, Children, ExecParam, Field, FieldValue, Match, Or, OrItem, OrList, Param, Value, WhereLike, asyncExec, asyncRunGenerator, exec, fill, fillMatches, merge, parse, runGenerator, stringify };
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
//#region packages/common/Hook.d.mts
|
|
156
|
+
/**
|
|
157
|
+
* @template T
|
|
158
|
+
*/
|
|
159
|
+
declare class Hook<T> {
|
|
160
|
+
/**
|
|
161
|
+
* @template {object} T
|
|
162
|
+
* @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]
|
|
163
|
+
* @return {Hook<T>}
|
|
164
|
+
*/
|
|
165
|
+
static build<T_1 extends object>(options?: Record<string, Hook.Define<T_1>> | (() => Record<string, Hook.Define<T_1>>)): Hook<T_1>;
|
|
166
|
+
/**
|
|
167
|
+
*
|
|
168
|
+
* @template T
|
|
169
|
+
* @param {Hook<T>} hook
|
|
170
|
+
* @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]
|
|
171
|
+
*/
|
|
172
|
+
static update<T_1>(hook: Hook<T_1>, options?: Record<string, Hook.Define<T_1>> | (() => Record<string, Hook.Define<T_1>>)): Hook<T_1>;
|
|
173
|
+
/**
|
|
174
|
+
*
|
|
175
|
+
* @template T
|
|
176
|
+
* @param {Hook<T>} hook
|
|
177
|
+
*/
|
|
178
|
+
static reset<T_1>(hook: Hook<T_1>): void;
|
|
179
|
+
/**
|
|
180
|
+
* @template {T extends readonly any[] ? never : T extends object ? string & keyof T : never} K
|
|
181
|
+
* @param {K} key
|
|
182
|
+
* @returns {Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] :never, void | undefined>>}
|
|
183
|
+
*/
|
|
184
|
+
get<K extends (T extends readonly any[] ? never : T extends object ? string & keyof T : never)>(key: K): Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] : never, void | undefined>>;
|
|
185
|
+
/**
|
|
186
|
+
* @param {T extends (...args: infer A) => any ? A : []} args
|
|
187
|
+
* @returns
|
|
188
|
+
*/
|
|
189
|
+
call(...args: T extends ((...args: infer A) => any) ? A : []): void;
|
|
190
|
+
/**
|
|
191
|
+
*
|
|
192
|
+
* @param {string} plugin
|
|
193
|
+
* @returns {T | void}
|
|
194
|
+
*/
|
|
195
|
+
first(plugin: string): T | void;
|
|
196
|
+
/**
|
|
197
|
+
*
|
|
198
|
+
* @param {string} plugin
|
|
199
|
+
* @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}
|
|
200
|
+
*/
|
|
201
|
+
plugin(plugin: string): IterableIterator<T extends readonly (infer V)[] ? V : T>;
|
|
202
|
+
/**
|
|
203
|
+
*
|
|
204
|
+
* @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}
|
|
205
|
+
*/
|
|
206
|
+
values(): IterableIterator<T extends readonly (infer V)[] ? V : T>;
|
|
207
|
+
/**
|
|
208
|
+
*
|
|
209
|
+
* @returns {IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>}
|
|
210
|
+
*/
|
|
211
|
+
entries(): IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>;
|
|
212
|
+
/**
|
|
213
|
+
*
|
|
214
|
+
* @template [TX=(T extends Record<string, infer TT>? TT extends readonly (infer V)[] ? V : TT : never)]
|
|
215
|
+
* @param {(v: *)=>v is TX} filter
|
|
216
|
+
* @returns {IterableIterator<[plugin: string, key: string, value: TX]>}
|
|
217
|
+
*/
|
|
218
|
+
entriesObject<TX = (T extends Record<string, infer TT> ? TT extends readonly (infer V)[] ? V : TT : never)>(filter?: (v: any) => v is TX): IterableIterator<[plugin: string, key: string, value: TX]>;
|
|
219
|
+
/**
|
|
220
|
+
* @template [TT=(T extends Record<string, infer TT> ? TT : never)]
|
|
221
|
+
* @param {(v: *)=>v is TT} [filter]
|
|
222
|
+
* @returns {Record<string, TT>}
|
|
223
|
+
*/
|
|
224
|
+
named<TT = (T extends Record<string, infer TT_1> ? TT_1 : never)>(filter?: (v: any) => v is TT): Record<string, TT>;
|
|
225
|
+
/**
|
|
226
|
+
*
|
|
227
|
+
* @param {() => void} fn
|
|
228
|
+
* @param {number} [hysteresis]
|
|
229
|
+
* @returns
|
|
230
|
+
*/
|
|
231
|
+
listen(fn: () => void, hysteresis?: number): () => void;
|
|
232
|
+
[Symbol.iterator](): IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>;
|
|
233
|
+
[Symbol.toStringTag](): string;
|
|
234
|
+
/** @param {string} hint */
|
|
235
|
+
[Symbol.toPrimitive](hint: string): string | number;
|
|
236
|
+
#private;
|
|
237
|
+
}
|
|
238
|
+
declare namespace Hook {
|
|
239
|
+
type MaybeArray<T_1> = T_1 | readonly T_1[];
|
|
240
|
+
type Item<T_1> = T_1 extends readonly any[] ? Readonly<T_1> : T_1 extends Record<string, any> ? Hook.MaybeArray<Hook.Define<T_1> | T_1> : T_1 extends object ? Hook.MaybeArray<Hook.Define<T_1> | T_1> : Hook.MaybeArray<T_1>;
|
|
241
|
+
type Define<T_1> = T_1 extends Record<string, any> ? { [k in keyof T_1]?: Hook.Item<T_1[k]> } : T_1;
|
|
242
|
+
}
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region packages/common/model.d.mts
|
|
245
|
+
/**
|
|
246
|
+
*
|
|
247
|
+
* @param {string?} [pattern]
|
|
248
|
+
*/
|
|
249
|
+
declare function getPatternFields(pattern?: string | null): string[];
|
|
250
|
+
/**
|
|
251
|
+
*
|
|
252
|
+
* @param {string?} [pattern]
|
|
253
|
+
* @param {Record<string, any>?} [document]
|
|
254
|
+
* @returns
|
|
255
|
+
*/
|
|
256
|
+
declare function runPattern(pattern?: string | null, document?: Record<string, any> | null): string;
|
|
257
|
+
//#endregion
|
|
258
|
+
//#region packages/common/yieldPermissionConstraintFields.d.mts
|
|
259
|
+
/** @import { Permission } from '@yongdall/types' */
|
|
260
|
+
/**
|
|
261
|
+
*
|
|
262
|
+
* @param {Permission} permission
|
|
263
|
+
* @returns {Iterable<string>}
|
|
264
|
+
*/
|
|
265
|
+
declare function yieldPermissionConstraintFields({
|
|
266
|
+
constraints,
|
|
267
|
+
organizationField
|
|
268
|
+
}: Permission): Iterable<string>;
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region packages/common/index.d.mts
|
|
271
|
+
/**
|
|
272
|
+
* @typedef {object} Plugin
|
|
273
|
+
* @property {string} [version]
|
|
274
|
+
* @property {Record<string, string>} [assets]
|
|
275
|
+
* @property {string} [hooks]
|
|
276
|
+
* @property {string[]} [styles]
|
|
277
|
+
*/
|
|
278
|
+
/**
|
|
279
|
+
* @typedef {object} BootConfiguration
|
|
280
|
+
* @property {string} [route] 路由管理器
|
|
281
|
+
* @property {string} [theme] 界面主题
|
|
282
|
+
* @property {string} [authenticator] 登陆器
|
|
283
|
+
* @property {boolean} [authRequired] 是否强制登陆
|
|
284
|
+
* @property {string} [skin]
|
|
285
|
+
* @property {boolean} [single]
|
|
286
|
+
* @property {string} [application]
|
|
287
|
+
* @property {string} [domain]
|
|
288
|
+
* @property {string | number} [port]
|
|
289
|
+
* @property {string} [path]
|
|
290
|
+
* @property {Record<string, string>} [pages]
|
|
291
|
+
* @property {Record<string, string>} [configurationPages]
|
|
292
|
+
*
|
|
293
|
+
*
|
|
294
|
+
* @property {string} [logo]
|
|
295
|
+
* @property {string} [title]
|
|
296
|
+
* @property {string} [company]
|
|
297
|
+
* @property {string} [type]
|
|
298
|
+
* @property {string} [help] 帮助链接
|
|
299
|
+
* @property {any[]} [userMenus]
|
|
300
|
+
*/
|
|
301
|
+
/**
|
|
302
|
+
* @typedef {object} Importmap
|
|
303
|
+
* @property {Record<string, string>} imports
|
|
304
|
+
* @property {Record<string, Record<string, string>>} scopes
|
|
305
|
+
*/
|
|
306
|
+
/**
|
|
307
|
+
* @typedef {object} Indicator
|
|
308
|
+
* @property {string} color
|
|
309
|
+
* @property {string} label
|
|
310
|
+
* @property {unknown} [filters]
|
|
311
|
+
*/
|
|
312
|
+
/**
|
|
313
|
+
*
|
|
314
|
+
* @param {*} v
|
|
315
|
+
* @returns {v is (...p: any[]) => any}
|
|
316
|
+
*/
|
|
317
|
+
declare function isFunction(v: any): v is (...p: any[]) => any;
|
|
318
|
+
declare const pluginIdRegex: RegExp;
|
|
319
|
+
declare const findPluginIdRegex: RegExp;
|
|
320
|
+
type Plugin = {
|
|
321
|
+
version?: string | undefined;
|
|
322
|
+
assets?: Record<string, string> | undefined;
|
|
323
|
+
hooks?: string | undefined;
|
|
324
|
+
styles?: string[] | undefined;
|
|
325
|
+
};
|
|
326
|
+
type BootConfiguration = {
|
|
327
|
+
/**
|
|
328
|
+
* 路由管理器
|
|
329
|
+
*/
|
|
330
|
+
route?: string | undefined;
|
|
331
|
+
/**
|
|
332
|
+
* 界面主题
|
|
333
|
+
*/
|
|
334
|
+
theme?: string | undefined;
|
|
335
|
+
/**
|
|
336
|
+
* 登陆器
|
|
337
|
+
*/
|
|
338
|
+
authenticator?: string | undefined;
|
|
339
|
+
/**
|
|
340
|
+
* 是否强制登陆
|
|
341
|
+
*/
|
|
342
|
+
authRequired?: boolean | undefined;
|
|
343
|
+
skin?: string | undefined;
|
|
344
|
+
single?: boolean | undefined;
|
|
345
|
+
application?: string | undefined;
|
|
346
|
+
domain?: string | undefined;
|
|
347
|
+
port?: string | number | undefined;
|
|
348
|
+
path?: string | undefined;
|
|
349
|
+
pages?: Record<string, string> | undefined;
|
|
350
|
+
configurationPages?: Record<string, string> | undefined;
|
|
351
|
+
logo?: string | undefined;
|
|
352
|
+
title?: string | undefined;
|
|
353
|
+
company?: string | undefined;
|
|
354
|
+
type?: string | undefined;
|
|
355
|
+
/**
|
|
356
|
+
* 帮助链接
|
|
357
|
+
*/
|
|
358
|
+
help?: string | undefined;
|
|
359
|
+
userMenus?: any[] | undefined;
|
|
360
|
+
};
|
|
361
|
+
type Importmap = {
|
|
362
|
+
imports: Record<string, string>;
|
|
363
|
+
scopes: Record<string, Record<string, string>>;
|
|
364
|
+
};
|
|
365
|
+
type Indicator = {
|
|
366
|
+
color: string;
|
|
367
|
+
label: string;
|
|
368
|
+
filters?: unknown;
|
|
369
|
+
};
|
|
370
|
+
//#endregion
|
|
371
|
+
//#region packages/common/types/Pages.d.mts
|
|
372
|
+
declare namespace Pages {
|
|
373
|
+
type Continuation = {
|
|
374
|
+
main?: string | undefined;
|
|
375
|
+
details?: string | undefined;
|
|
376
|
+
setting?: string | undefined;
|
|
377
|
+
edit?: string | undefined;
|
|
378
|
+
input?: string | undefined;
|
|
379
|
+
};
|
|
380
|
+
type Workspace = {
|
|
381
|
+
main?: string | undefined;
|
|
382
|
+
details?: string | undefined;
|
|
383
|
+
setting?: string | undefined;
|
|
384
|
+
edit?: string | undefined;
|
|
385
|
+
input?: string | undefined;
|
|
386
|
+
scope?: boolean | undefined;
|
|
387
|
+
continuations?: Record<string, Pages.Continuation> | undefined;
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
//#endregion
|
|
391
|
+
export { BootConfiguration, Hook, Importmap, Indicator, Pages, Plugin, RecursiveArray, index_d_exports as Search, findPluginIdRegex, getPatternFields, isFunction, pluginIdRegex, runPattern, yieldPermissionConstraintFields };
|