@yongdall/core 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.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["get"],"sources":["../../packages/core/polyfill.mjs","../../packages/core/config.mjs","../../packages/core/hooks.mjs","../../packages/core/menu.mjs","../../packages/core/models.mjs","../../packages/core/tenant.mjs","../../packages/core/user.mjs","../../packages/core/permission/createPermissionMatches.mjs","../../packages/core/permission/testPermissionConstraints.mjs","../../packages/core/permission/filterPermissions.mjs","../../packages/core/permission/filterPermissionDocument.mjs","../../packages/core/permission/filterPermissionUpdate.mjs","../../packages/core/permission/testPermissions.mjs","../../packages/core/decorators/modelHook.mjs","../../packages/core/ServerError.mjs","../../packages/core/decorators/nestedSetTree.mjs","../../packages/core/toDocumentFields.mjs","../../packages/core/enumerations.mjs","../../packages/core/search2where/hook.mjs","../../packages/core/search2where/toWhere.mjs","../../packages/core/search2where/index.mjs","../../packages/core/index.mjs"],"sourcesContent":["if (!Symbol.metadata) {\n\tSymbol.metadata = Symbol.for(\"Symbol.metadata\");\n}\n","/** @import { Tenant } from '@yongdall/types' */\n/** @import { BootConfiguration } from '@yongdall/common' */\n\n\n\n/** @type {Tenant} */\nexport const mainTenant = {\n\tid: '',\n\tlabel: '拥道YongDall',\n\tsingle: false,\n\tproviders: {},\n\tsalt: 'YongDall',\n}\n/** @type {BootConfiguration} */\nexport const bootConfiguration = {\n\tpages: {},\n\ttheme: '@yongdall/theme#allSider',\n\tauthenticator: '',\n\t// route: '@yongdall/route-symbol',\n\tpath: '/workbench/',\n}\n/**\n * \n * @param {Partial<Omit<Tenant, 'id'>>} tenant \n * @param {object} boot \n * @returns \n */\nexport function initConfig({label, single, providers, salt}, boot) {\n\tObject.assign(bootConfiguration, boot);\n\n\tmainTenant.label = typeof label === 'string' && label || '拥道YongDall';\n\tmainTenant.single = Boolean(single);\n\tif (salt) { mainTenant.salt = salt; }\n\tmainTenant.providers = Object.fromEntries(\n\t\tObject.entries(typeof providers === 'object' && providers || {})\n\t\t.filter(([k,v]) => typeof v === 'string' && v),\n\t);\n}\n","import { Hook } from '@yongdall/common';\n/** @import { Hooks } from './types.mjs' */\n/** @type {Hook<Hooks>} */\nexport const hooks = new Hook();\n","/**\n * \n * @param {string} type \n * @param {string} [group] \n * @returns \n */\nexport function getMenus(type, group = '') {\n\t/** @type {any} */\n\tconst menus = [];\n\treturn menus\n}\n","/** @import { Permission } from '@yongdall/types' */\n/** @import { FieldDefine, Fields, ModelTable, TableDefine } from '@yongdall/model' */\n/** @import { Hooks } from './types.mjs' */\nimport { hooks } from './hooks.mjs';\nimport { expandModel, getDefinePermission } from '@yongdall/model';\nimport { createKeyStore } from '@yongdall/context';\n\n/** @type {Hooks['models']} */\nexport let models = Object.create(null);\n/** @type {Hooks['modelLoaders']} */\nexport let modelLoaders = Object.create(null);\n/** @type {((modelId: string, groupId?: string | null) => PromiseLike<Permission[] | null> | Permission[] | null)[]} */\nlet getModelPermissionsHooks = [];\n/** @type {WeakMap<ModelTable, ModelTable>} */\nlet modelMap = new WeakMap();\n/** @type {Record<string, Fields<TableDefine>>} */\nlet modelExpands = {};\nhooks.listen(() => {\n\tmodelMap = new WeakMap();\n\tmodels = hooks.get('models').named();\n\tmodelLoaders = hooks.get('modelLoaders').named();\n\tgetModelPermissionsHooks = [...hooks.get('getModelPermissions').values()].filter(v => typeof v === 'function');\n\tconst modelFields = [...hooks.get('modelExpands').entriesObject()]\n\t\t.flatMap(([p, modelId, fields]) => [fields].flatMap(v => {\n\t\t\tif (!v || typeof v !== 'object' || Array.isArray(v)) { return []; }\n\t\t\t/** @type {[modelId:string, fieldName:string, field: FieldDefine<TableDefine>][]} */\n\t\t\tconst data = Object.entries(v).map(([fieldName, field]) => [modelId, fieldName, field]);\n\t\t\treturn data;\n\t\t}));\n\tconst groups = Object.groupBy(modelFields, v => v[0]);\n\t/** @type {Record<string, Fields<TableDefine>>} */\n\tconst expands = {};\n\tfor (const [modelId, fields] of Object.entries(groups)) {\n\t\tif (!fields?.length) { continue; }\n\t\texpands[modelId] = Object.fromEntries(fields.map(([, fieldName, field]) => [fieldName, field]));\n\t}\n\tmodelExpands = expands;\n}, -1000000);\n\n\n/**\n * \n * @param {string | string[]} ident \n * @returns {Promise<ModelTable?>}\n */\nexport async function findModel(ident) {\n\tconst [model, ...collection] = (Array.isArray(ident) ? ident : ident.split(':')).filter(Boolean);\n\tif (!collection.length) {\n\t\tconst define = Object.hasOwn(models, model) && models[model];\n\t\treturn typeof define === 'object' && define || null;\n\t}\n\tconst loader = Object.hasOwn(modelLoaders, model) && modelLoaders[model];\n\tif (typeof loader !== 'function') { return null; }\n\tconst define = await loader(collection);\n\treturn typeof define === 'object' && define || null;\n}\n/**\n * \n * @param {string | string[]} ident \n * @returns {Promise<ModelTable?>}\n */\nexport async function getModel(ident) {\n\tconst model = await findModel(ident);\n\tif (!model) { return model; }\n\tconst define = modelMap.get(model);\n\tif (define) { return define; }\n\tconst modelIdent = Array.isArray(ident) ? ident.join(':') : ident;\n\tconst expandedModel = Object.hasOwn(modelExpands, modelIdent) ? modelExpands[modelIdent] : {};\n\tconst newDefine = expandModel(model, expandedModel);\n\t// TODO: 动态扩展不缓存\n\tmodelMap.set(model, newDefine);\n\treturn newDefine;\n}\n\n\n/** @type {(modelId: string, groupId?: string?) => Promise<Permission[]?>} */\nexport const getModelPermissions = createKeyStore(async (modelId, groupId) => {\n\tfor (const fn of getModelPermissionsHooks) {\n\t\tconst permissions = await fn(modelId, groupId);\n\t\tif (permissions) { return permissions; }\n\t}\n\tif (groupId) { return null; }\n\treturn getDefinePermission(await getModel(modelId));\n}, (modelId, groupId) => [modelId, groupId || ''].join('\\n'));\n\n/**\n * \n * @param {string} modelId \n * @param {string} authorization\n * @param {string?} [groupId] \n * @returns {Promise<Permission[]?>}\n */\nexport async function getModelAuthorizationPermissions(modelId, authorization, groupId) {\n\tconst permissions = await getModelPermissions(modelId, groupId);\n\tif (!permissions?.length) { return permissions; }\n\treturn permissions.filter(({ authorizations }) => {\n\t\tif (!authorizations) { return false; }\n\t\tif (Array.isArray(authorizations)) {\n\t\t\treturn authorizations.includes(authorization);\n\t\t}\n\t\tif (authorizations instanceof Set) {\n\t\t\treturn authorizations.has(authorization);\n\t\t}\n\t\treturn false;\n\t});\n}\n","import { createStoreSerializable } from '@yongdall/context';\nimport { hooks } from './hooks.mjs';\nimport { mainTenant } from './config.mjs';\n/** @import { Tenant } from '@yongdall/types' */\n\nconst [tenantGetter, tenantSetter] = createStoreSerializable('tenantStatus', async (/** @type {Promise<Tenant> | Tenant | null} */state) => {\n\tif (!state) { return null; }\n\treturn state\n}, (/** @type {Tenant?} */tenant) => {\n\treturn tenant ? Promise.resolve(tenant) : null;\n}, /** @type {Promise<Tenant > | null} */(null));\n\n\nfunction getTenantManager() {\n\tconst tenantManagers = [...hooks.get('tenantManager').values()].filter(Boolean);\n\treturn tenantManagers\n}\n\nlet tenantManagers = getTenantManager();\nhooks.listen(() => {\n\ttenantManagers = getTenantManager();\n}, -1000000);\n\n/**\n * \n * @returns {Promise<Tenant>}\n */\nasync function getCurrentTenant() {\n\tif (!tenantManagers.length) {\n\t\treturn mainTenant;\n\t}\n\tfor (const get of tenantManagers) {\n\t\tconst u = await get();\n\t\tif (!u) { continue; }\n\t\treturn u;\n\t}\n\tthrow new Error('[noTenant] 找不到租户');\n}\n\n\nasync function get() {\n\tlet state = tenantGetter();\n\tif (!state) {\n\t\tstate = getCurrentTenant();\n\t\ttenantSetter(state);\n\t}\n\treturn state;\n}\n\n/**\n * \n * @returns {Promise<Tenant>}\n */\nexport default function useTenant() {\n\treturn get();\n}\n","import { createKeyStore, createStoreSerializable } from '@yongdall/context';\nimport { isFunction } from '@yongdall/common';\nimport useTenant from './tenant.mjs';\nimport { hooks } from './hooks.mjs';\n/** @import { Tenant } from '@yongdall/types' */\n/** @import { UserManager, MaybePromise } from './types.mjs' */\n/**\n * @typedef {[result: string | null, UserManager['set'] | null, UserManager['exit'] | null, user: string | null, sUser: string | null]} State\n */\nconst [userGetter, userSetter] = createStoreSerializable('userStatus', async (/** @type {Promise<State> | State | null} */state) => {\n\tif (!state) { return null; }\n\tconst s = await state;\n\treturn { user: s[3], sUser: s[4] };\n}, (/** @type {{user?: string?;userSystem?: string?;sUser?: string?;sUserSystem?: string?;}?} */val) => {\n\tif (!val) { return null; }\n\tconst { user: userId, sUser: sUserId } = val;\n\treturn Promise.resolve(/** @type {State} */([null, null, null, userId, sUserId]));\n}, /** @type {Promise<State> | State | null} */(null));\n\n\nfunction getUserLoaders() {\n\t/** @type {[string, UserManager['load']][]} */\n\tconst userMangers = [...hooks.get('userManager').entries()].map(([k, v]) => [k, v?.loadPlugin]);\n\t/** @type {[string, UserManager['load']][]} */\n\tconst loaders = userMangers.filter(([, v]) => typeof v === 'function');\n\treturn loaders;\n}\nfunction getUserManagers() {\n\t/** @type {Partial<UserManager>[]} */\n\tconst userMangers = [...hooks.get('userManager').values()].filter(Boolean);\n\tconst defaultLogin = userMangers.find(v => typeof v.login === 'function')?.login || null;\n\tconst switchableList = userMangers.map(v => v.switchable).filter(isFunction);\n\t/** @type {(() => MaybePromise<string?>)[]} */\n\tconst suGets = userMangers.map(v => v.suGet).filter(isFunction);\n\t/** @type {[UserManager['get'], UserManager['set'] | null, UserManager['exit'] | null][]} */\n\tconst getLoggedUserFn = [];\n\t/** @type {Record<string, ((userId: string, password: string) => MaybePromise<number>)[]>} */\n\tconst verifiers = Object.create(null);\n\t/** @type {Record<string, ((userId: string, password: string?, deadline?: Date?) => MaybePromise<boolean>)[]>} */\n\tconst setVerifiers = Object.create(null);\n\tconst finders = userMangers.map(v => v.find).filter(v => typeof v === 'function');\n\tconst loaders = userMangers.map(v => v.load).filter(v => typeof v === 'function');\n\tconst existTesters = userMangers.map(v => v.exist).filter(v => typeof v === 'function');\n\tconst getPermissions = userMangers.map(v => v.getPermissions).filter(v => typeof v === 'function');\n\tconst getOrganizationPermissions = userMangers.map(v => v.getOrganizationPermissions).filter(v => typeof v === 'function');\n\tconst getOrganizationAllPermissions = userMangers.map(v => v.getOrganizationAllPermissions).filter(v => typeof v === 'function');\n\tfor (const { get, set, exit, find, verify, setVerify } of userMangers) {\n\t\tif (typeof get === 'function') {\n\t\t\tgetLoggedUserFn.push([get, set || null, exit || null]);\n\t\t}\n\t\tif (verify) {\n\t\t\tfor (const [k, v] of Object.entries(verify)) {\n\t\t\t\tconst list = verifiers[k];\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.push(v);\n\t\t\t\t} else {\n\t\t\t\t\tverifiers[k] = [v];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (setVerify) {\n\t\t\tfor (const [k, v] of Object.entries(setVerify)) {\n\t\t\t\tconst list = setVerifiers[k];\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.push(v);\n\t\t\t\t} else {\n\t\t\t\t\tsetVerifiers[k] = [v];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * @param {Tenant} tenant \n\t * @param {string} user \n\t * @param {string} sUser \n\t * @returns {Promise<boolean>}\n\t */\n\tasync function switchable(tenant, user, sUser) {\n\t\tif (!switchableList.length) { return false; }\n\t\tfor (const s of switchableList) {\n\t\t\tif (await s(user, sUser)) { continue; }\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\treturn {\n\t\tdefaultLogin, switchable, suGets, getLoggedUserFn,\n\t\tfinders, verifiers, setVerifiers,\n\t\tloaders, existTesters,\n\t\tgetPermissions, getOrganizationPermissions, getOrganizationAllPermissions,\n\t};\n}\n\nlet userPluginLoaders = getUserLoaders();\nlet {\n\tdefaultLogin, switchable, suGets, getLoggedUserFn,\n\tfinders, verifiers, setVerifiers,\n\tloaders, existTesters,\n\tgetPermissions, getOrganizationPermissions, getOrganizationAllPermissions,\n} = getUserManagers();\nhooks.listen(() => {\n\tuserPluginLoaders = getUserLoaders();\n\t({\n\t\tdefaultLogin, switchable, suGets, getLoggedUserFn,\n\t\tfinders, verifiers, setVerifiers,\n\t\tloaders, existTesters,\n\t\tgetPermissions, getOrganizationPermissions, getOrganizationAllPermissions,\n\t} = getUserManagers());\n}, -1000000);\n\n\n/**\n * \n * @param {string} userId \n * @param {boolean} [login] \n * @returns {Promise<boolean>}\n */\nexport async function existUser(userId, login) {\n\tfor (const fn of existTesters) {\n\t\tif (await fn(userId, login)) { return true; }\n\t}\n\treturn false;\n}\n\n/**\n * \n * @returns {Promise<State>}\n */\nasync function getLoggedUser() {\n\tconst tenant = await useTenant();\n\tif (tenant.single) {\n\t\tfor (const suGet of suGets) {\n\t\t\tconst suUser = await suGet();\n\t\t\tif (!suUser) { continue; }\n\t\t\tif (!await existUser(suUser)) { continue; }\n\t\t\treturn [null, null, null, null, suUser];\n\t\t}\n\t\treturn [null, null, null, null, null];\n\t}\n\n\n\n\t/** @type {UserManager['set']?} */\n\tlet setUser = null;\n\t/** @type {UserManager['exit']?} */\n\tlet exitUser = null;\n\t/** @type {string?} */\n\tlet user = null;\n\n\tfor (const [get, set, exit] of getLoggedUserFn) {\n\t\tconst u = await get();\n\t\tif (!u || !await existUser(u)) { continue; }\n\t\tuser = u;\n\t\tsetUser = set;\n\t\texitUser = exit;\n\t\tbreak;\n\t}\n\tif (!user) { return [null, defaultLogin, null, null, null]; }\n\tfor (const suGet of suGets) {\n\t\tconst suUser = await suGet();\n\t\tif (!suUser) { continue; }\n\t\tif (!await existUser(suUser)) { continue; }\n\t\tif (await switchable(tenant, user, suUser)) { continue; }\n\t\treturn [null, setUser, exitUser, user, suUser];\n\t}\n\treturn [null, setUser, exitUser, user, null];\n}\n\n\nasync function get() {\n\tlet state = userGetter();\n\tif (!state) {\n\t\tstate = getLoggedUser();\n\t\tuserSetter(state);\n\t}\n\treturn state;\n}\n/**\n * @param {boolean} [logged] \n * @returns {Promise<boolean>}\n */\nexport function isSingleUser(logged) {\n\tif (logged) {\n\t\treturn useTenant().then(g => g.single);\n\t}\n\treturn get().then(([, , , su]) => su ? false : useTenant().then(g => g.single));\n}\n\n\n/**\n * \n * @param {boolean?} [logged] 是否为登陆用户\n * @returns {Promise<string?>}\n */\nexport function getUser(logged) {\n\t// sudo 或自身\n\treturn get().then(([, , , current, su]) => {\n\t\tif (logged === false) { return su; }\n\t\tif (logged) { return current; }\n\t\treturn su || current;\n\t});\n}\n\n/**\n * \n * @param {string?} userId\n * @param {boolean?} [sudo]\n * @returns {Promise<string?>}\n */\nexport function setUser(userId, sudo) {\n\tlet state = Promise.resolve(userGetter() || getLoggedUser());\n\tif (sudo) {\n\t\tstate = state.then(async ([, set, exit, current]) => {\n\t\t\tif (!userId || !await existUser(userId)) { return [null, set, exit, current, null]; }\n\t\t\tif (current || await useTenant().then(t => t.single)) { return [userId, set, exit, current, userId]; }\n\t\t\treturn [null, set, exit, null, null];\n\t\t});\n\t} else {\n\t\tstate = state.then(async ([, set, exit, current, su]) => {\n\t\t\tif (!userId) {\n\t\t\t\tif (current && exit) {\n\t\t\t\t\tawait exit(current);\n\t\t\t\t}\n\t\t\t\treturn [null, set, exit, null, null];\n\t\t\t}\n\t\t\tif (!set) { return [current, set, exit, current, su]; }\n\t\t\tconst tenant = await useTenant();\n\t\t\tif (tenant.single) { return [null, set, exit, null, su]; }\n\t\t\t// TODO: 判断用户是否存在\n\t\t\tif (!await set(userId)) {\n\t\t\t\treturn [null, set, exit, current, su];\n\t\t\t}\n\t\t\treturn [userId, set, exit, userId, null];\n\t\t});\n\t}\n\tuserSetter(state);\n\treturn state.then(v => v[0]);\n}\n\n\n\n/**\n * \n * @param {string | Record<string, unknown>} loginName \n * @param {string | string[]} [loginType] \n * @returns {Promise<string>}\n */\nexport async function findUser(loginName, loginType) {\n\tconst types = new Set([loginType || ''].flat().filter(Boolean));\n\tfor (const fn of finders) {\n\t\tconst userId = await fn(loginName, types);\n\t\tif (userId) { return userId; }\n\t}\n\treturn '';\n}\n\n/**\n * \n * @param {string} userId \n * @param {string} password \n * @param {string} type \n * @param {boolean} [returnError] \n * @returns {Promise<number>}\n */\nexport async function verifyUser(userId, password, type, returnError) {\n\tfor (const fn of verifiers[type] || []) {\n\t\tconst res = await fn(userId, password);\n\t\tif (res < 0) { return returnError ? res : 0; }\n\t\tif (res > 0) { return res; }\n\t}\n\treturn 0;\n}\n\n/**\n * \n * @param {string} userId \n * @param {string} type \n * @param {string?} password \n * @param {Date?} [deadline] \n * @returns {Promise<boolean>}\n */\nexport async function setUserVerify(userId, type, password, deadline) {\n\tfor (const fn of setVerifiers[type] || []) {\n\t\tif (await fn(userId, password, deadline)) {return true; }\n\t}\n\treturn false;\n}\n\n/** @type {(user?: string?) => Promise<Set<string>>} */\nexport const loadUserPermissions = createKeyStore(async user => {\n\tif (!user) { return new Set(); }\n\tfor (const f of getPermissions) {\n\t\tconst r = await f(user);\n\t\tif (r) { return new Set(r); }\n\t}\n\treturn new Set();\n}, user => user || '');\n\n/**\n * \n * @param {boolean?} [logged] 是否为登陆用户\n * @returns {Promise<Set<string>>}\n */\nexport async function getUserPermissions(logged) {\n\treturn loadUserPermissions(await getUser(logged));\n}\n\n\n/** @type {(user?: string?) => Promise<Set<string>>} */\nexport const loadUserOrganizationAllPermissions = createKeyStore(async user => {\n\tif (!user) { return new Set(); }\n\tfor (const f of getOrganizationAllPermissions) {\n\t\tconst r = await f(user);\n\t\tif (r) { return new Set(r); }\n\t}\n\treturn new Set();\n}, user => user || '');\n\n\n/**\n * \n * @param {boolean?} [logged] 是否为登陆用户\n * @returns {Promise<Set<string>>}\n */\nexport async function getUserOrganizationAllPermissions(logged) {\n\treturn loadUserOrganizationAllPermissions(await getUser(logged));\n}\n\n/** @type {(user?: string?) => Promise<Record<string, Set<string>>>} */\nexport const loadUserOrganizationPermissions = createKeyStore(async user => {\n\tif (!user) { return Object.create(null); }\n\tfor (const f of getOrganizationPermissions) {\n\t\tconst r = await f(user);\n\t\tif (r) { return Object.fromEntries(Object.entries(r).map(([k, v]) => [k, new Set(v)])); }\n\t}\n\treturn Object.create(null);\n}, user => user || '');\n\n/**\n * \n * @param {boolean?} [logged] 是否为登陆用户\n * @returns {Promise<Record<string, Set<string>>>}\n */\nexport async function getUserOrganizationPermissions(logged) {\n\treturn loadUserOrganizationPermissions(await getUser(logged));\n}\n\n/**\n * \n * @param {string} userId \n * @returns {Promise<Record<string, any>>}\n */\nexport async function loadPluginUser(userId) {\n\tconst list2 = await Promise.all(userPluginLoaders.map(([p, f]) => Promise.all([p, f(userId)])));\n\tconst plugins = Object.fromEntries(Object.entries(Object.groupBy(list2, ([k]) => k)).map(([k,l]) => {\n\t\treturn [k, Object.assign({}, ...l?.map(v => v[1]) || [])];\n\t}));\n\treturn plugins\n}\n/**\n * \n * @param {string} userId \n * @returns {Promise<Record<string, any>>}\n */\nexport async function loadUser(userId, plugin = false) {\n\tconst [list, plugins, permissions] = await Promise.all([\n\t\tPromise.all(loaders.map(f => f(userId))),\n\t\tplugin ? loadPluginUser(userId) : {},\n\t\tloadUserPermissions(userId).then(p => [...p]),\n\t]);\n\treturn Object.assign({}, ...list, { id: userId, plugins, permissions });\n}\n","/** @import { Permission } from '@yongdall/types' */\n\nimport { Where } from '@yongdall/model';\nimport { getUser, getUserOrganizationAllPermissions, getUserOrganizationPermissions, getUserPermissions } from '../user.mjs';\n\n/**\n *\n * @param {Exclude<Permission['constraints'], void>?} [constraints]\n * @param {string?} [userId]\n * @returns {Iterable<[string, string, any]>}\n */\nfunction* yieldConstraintWheres(constraints, userId) {\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, '=', value];\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tyield [field, 'in', values];\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tyield [field, 'in', [...values]];\n\t\t} else if (user && userId) {\n\t\t\tyield [field, '=', userId];\n\t\t}\n\t}\n}\n\n\n\n\n/**\n * @param {Permission[]} permissions\n */\nexport default async function createPermissionMatches(permissions) {\n\tlet permissionInGlobal = permissions.filter(v => !v.organizationField);\n\tconst orWhere = new Where();\n\n\tif (permissionInGlobal.length) {\n\t\tconst permissions = await getUserPermissions();\n\t\tpermissionInGlobal = permissionInGlobal.filter(v => !v.permission || permissions.has(v.permission));\n\t}\n\tconst userId = await getUser();\n\tfor (const { constraints } of permissionInGlobal) {\n\t\tconst wheres = [...yieldConstraintWheres(constraints, userId)];\n\t\tif (!wheres.length) { return null; }\n\t\tconst where = new Where();\n\t\tfor (const v of wheres) {\n\t\t\twhere.and(...v);\n\t\t}\n\t\torWhere.or(where);\n\t}\n\tlet permissionInOrganization = permissions.filter(v => v.organizationField);\n\tif (permissionInOrganization.length) {\n\t\tconst organizationPermissions = await getUserOrganizationAllPermissions();\n\t\tpermissionInOrganization = permissionInOrganization.filter(v => !v.permission || organizationPermissions.has(v.permission));\n\t}\n\tif (!permissionInOrganization.length) { return orWhere; }\n\tif (permissionInOrganization.length) {\n\t\tconst organizationPermissions = Object.entries(await getUserOrganizationPermissions());\n\t\tfor (const { constraints, permission, organizationField } of permissionInOrganization) {\n\t\t\tconst organizations = permission ? organizationPermissions.filter(v => v[1].has(permission)).map(v => v[0]) : organizationPermissions.map(v => v[0]);\n\t\t\tif (!organizations.length) { continue; }\n\t\t\tconst where = Where.and(organizationField || '', 'in', organizations);\n\t\t\tfor (const v of yieldConstraintWheres(constraints, userId)) {\n\t\t\t\twhere.and(...v);\n\t\t\t}\n\t\t\torWhere.or(where);\n\t\t}\n\t}\n\treturn orWhere;\n}\n","/** @import { Permission } from '@yongdall/types' */\n/**\n *\n * @param {Exclude<Permission['constraints'], void>} constraints\n * @param {Record<string, any>} document\n * @param {string?} userId\n */\nexport default function testPermissionConstraints(constraints, document, userId) {\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tconst val = document[field];\n\t\tif (value !== undefined) {\n\t\t\tif (val !== value) { return false; }\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tif (!values.includes(val)) { return false; }\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tif (!values.has(val)) { return false; }\n\t\t} else if (user) {\n\t\t\tif (val !== userId) { return false; }\n\t\t}\n\t}\n\treturn true;\n\n}\n","/** @import { Permission } from '@yongdall/types' */\nimport { getUser, getUserOrganizationPermissions, getUserPermissions } from '../user.mjs';\nimport testPermissionConstraints from './testPermissionConstraints.mjs';\n\n\n/**\n *\n * @param {Permission[]} allPermissions\n * @param {Record<string, any>} document\n * @returns\n */\nexport default async function filterPermissions(allPermissions, document) {\n\tconst permissionInGlobal = allPermissions.filter(v => !v.organizationField);\n\tconst permissionInOrganization = allPermissions.filter(v => v.organizationField);\n\t/** @type {Permission[]} */\n\tconst filteredPermissions = [];\n\tconst userId = await getUser();\n\tif (permissionInGlobal.length) {\n\t\tconst permissions = await getUserPermissions();\n\t\tfor (const p of permissionInGlobal) {\n\t\t\tconst { permission, constraints } = p;\n\t\t\tif (permission && !permissions.has(permission)) { continue; }\n\t\t\tif (constraints && !testPermissionConstraints(constraints, document, userId)) { continue; }\n\t\t\tfilteredPermissions.push(p);\n\t\t}\n\t}\n\tif (permissionInOrganization.length) {\n\t\tconst permissions = await getUserOrganizationPermissions();\n\t\tfor (const p of permissionInOrganization) {\n\t\t\tconst { permission, organizationField, constraints } = p;\n\t\t\tif (constraints && !testPermissionConstraints(constraints, document, userId)) { continue; }\n\t\t\tconst organizationId = document[organizationField || ''];\n\t\t\tif (!organizationId) { continue; }\n\t\t\tconst organizationPermissions = permissions[organizationId];\n\t\t\tif (!organizationPermissions) { continue; }\n\t\t\tif (permission && !organizationPermissions.has(permission)) { continue; }\n\t\t\tfilteredPermissions.push(p);\n\t\t}\n\t}\n\treturn filteredPermissions;\n\n}\n","/** @import { Permission } from '@yongdall/types' */\n/** @import { ModelTable, FieldDefine } from '@yongdall/model' */\nimport filterPermissions from './filterPermissions.mjs';\n\n/**\n * @param {ModelTable} model\n * @param {Permission[]} permissions\n * @param {Record<string, any>} document\n */\nexport default async function filterPermissionDocument({ fields }, permissions, document) {\n\tconst userPermissions = await filterPermissions(permissions, document);\n\tif (userPermissions && !userPermissions.length) { return null; }\n\tlet groups = new Set(userPermissions.flatMap(v => v.group || ''));\n\tlet fieldsAuth = new Set(userPermissions.flatMap(v => v.fields || ''));\n\tgroups.delete('');\n\tfieldsAuth.delete('');\n\tif (!(groups.size + fieldsAuth.size)) { return null; }\n\n\t/**\n\t *\n\t * @param {[string, FieldDefine & {group?: string}][]} fields\n\t * @param {Record<string, any>} document\n\t * @param {string[]} parent\n\t * @returns\n\t */\n\tfunction filter(fields, document, parent) {\n\t\t/** @type {Record<string, any>} */\n\t\tconst value = {};\n\t\tfor (const [name, field] of fields) {\n\t\t\tif (!field) { continue; }\n\t\t\tconst fieldNames = [...parent, name];\n\t\t\tconst key = fieldNames.join('.');\n\t\t\tif (!field.primary && !groups.has(field.group || '') && !fieldsAuth.has(key) && !fieldsAuth.has('*')) { continue; }\n\t\t\tconst { type } = field;\n\t\t\tif (!type || typeof type !== 'object' || !type.table) {\n\t\t\t\tvalue[name] = document[name];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst subDocument = document[name];\n\t\t\tconst list = Object.entries(type.fields);\n\t\t\tif (field.array) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue[name] = (Array.isArray(subDocument) ? subDocument : subDocument ? [subDocument] : []).map(doc => filter(list, doc, key));\n\t\t\t} else if (subDocument && !Array.isArray(subDocument)) {\n\t\t\t\tconst val = filter(list, subDocument, fieldNames);\n\t\t\t\tif (!Object.keys(val)) { continue; }\n\t\t\t\tvalue[name] = val;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\n\t}\n\treturn filter(Object.entries(fields), document, []);\n}\n","/** @import { FieldDefine, ModelTable } from '@yongdall/model' */\n/** @import { Permission } from '@yongdall/types' */\nimport filterPermissions from './filterPermissions.mjs';\n\n/**\n * @param {ModelTable} model\n * @param {Permission[]} permissions\n * @param {Record<string, any>} document\n * @param {Record<string, any>} newDocument\n */\nexport default async function filterPermissionUpdate({ fields }, permissions, document, newDocument) {\n\tlet newData = newDocument;\n\tconst userPermissions = await filterPermissions(permissions, { ...document, ...newData });\n\tif (userPermissions && !userPermissions.length) { return null; }\n\tlet groups = new Set(userPermissions.flatMap(v => v.group || ''));\n\tlet fieldsAuth = new Set(userPermissions.flatMap(v => v.fields || ''));\n\tgroups.delete('');\n\tfieldsAuth.delete('');\n\twhile (groups.size + fieldsAuth.size) {\n\t\tconst oldData = newData;\n\t\tnewData = {};\n\t\tfor (const [key, value] of Object.entries(oldData)) {\n\t\t\t/** @type {FieldDefine & {group?: string}?} */\n\t\t\tconst field = fields[key];\n\t\t\tif (!field) { continue; }\n\t\t\tif (!groups.has(field.group || '') && !fieldsAuth.has(key)) { continue; }\n\t\t\tnewData[key] = value;\n\t\t}\n\t\tconst newPermissionGroups = await filterPermissions(permissions, { ...document, ...newData });\n\t\tif (newPermissionGroups && !newPermissionGroups.length) { return null; }\n\t\tconst newGroups = new Set(newPermissionGroups.flatMap(v => v.group || ''));\n\t\tconst newFieldsAuth = new Set(newPermissionGroups.flatMap(v => v.fields || ''));\n\t\tnewGroups.delete('');\n\t\tnewFieldsAuth.delete('');\n\t\tif (newGroups.size === groups.size && newFieldsAuth.size === fieldsAuth.size) { break; }\n\t\tgroups = newGroups;\n\t\tfieldsAuth = newFieldsAuth;\n\t}\n\tif (!(groups.size + fieldsAuth.size)) { return null; }\n\n\t/**\n\t *\n\t * @param {[string, FieldDefine & {group?: string}][]} fields\n\t * @param {Record<string, any>} document\n\t * @param {string[]} parent\n\t * @returns\n\t */\n\tfunction filter(fields, document, parent) {\n\t\t/** @type {Record<string, any>} */\n\t\tconst value = {};\n\t\tfor (const [name, field] of fields) {\n\t\t\tif (!field) { continue; }\n\t\t\tconst fieldNames = [...parent, name];\n\t\t\tconst key = fieldNames.join('.');\n\t\t\tif ((parent ? !field.primary : true) && !groups.has(field.group || '') && !fieldsAuth.has(key) && !fieldsAuth.has('*')) { continue; }\n\t\t\tif (!Object.hasOwn(document, name)) { continue; }\n\t\t\tconst { type } = field;\n\t\t\tif (!type || typeof type !== 'object' || !type.table) {\n\t\t\t\tvalue[name] = document[name];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst subDocument = document[name];\n\t\t\tconst list = Object.entries(type.fields);\n\t\t\tif (field.array) {\n\t\t\t\tvalue[name] = (Array.isArray(subDocument) ? subDocument : [subDocument]).map(doc => filter(list, doc, fieldNames));\n\t\t\t} else if (subDocument && !Array.isArray(subDocument)) {\n\t\t\t\tconst val = filter(list, subDocument, fieldNames);\n\t\t\t\tif (!Object.keys(val)) { continue; }\n\t\t\t\tvalue[name] = val;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\treturn filter(Object.entries(fields), newDocument, []);\n}\n","import { getUser, getUserOrganizationAllPermissions, getUserOrganizationPermissions, getUserPermissions, isSingleUser } from '../user.mjs';\nimport testPermissionConstraints from './testPermissionConstraints.mjs';\n/** @import { Permission } from '@yongdall/types' */\n/**\n *\n * @param {Permission[]?} [allPermissions]\n * @param {Record<string, any>} [document]\n * @returns\n */\nexport default async function testPermissions(allPermissions, document) {\n\tif (await isSingleUser()) { return true; }\n\tif (!allPermissions?.length) { return false; }\n\tconst permissionInGlobal = allPermissions.filter(v => !v.organizationField);\n\tconst permissionInOrganization = allPermissions.filter(v => v.organizationField);\n\tif (!document) {\n\t\tif (permissionInGlobal.length) {\n\t\t\tconst permissions = await getUserPermissions();\n\t\t\tfor (const { permission } of permissionInGlobal) {\n\t\t\t\tif (permission && !permissions.has(permission)) { continue; }\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tif (permissionInOrganization.length) {\n\t\t\tconst permissions = await getUserOrganizationAllPermissions();\n\t\t\tfor (const { permission } of permissionInOrganization) {\n\t\t\t\tif (permission && !permissions.has(permission)) { continue; }\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tconst userId = await getUser();\n\tif (permissionInGlobal.length) {\n\t\tconst permissions = await getUserPermissions();\n\t\tfor (const {permission, constraints} of permissionInGlobal) {\n\t\t\tif (permission && !permissions.has(permission)) { continue; }\n\t\t\tif (constraints && !testPermissionConstraints(constraints, document, userId)) { continue; }\n\t\t\treturn true;\n\t\t}\n\t}\n\tif (permissionInOrganization.length) {\n\t\tconst permissions = await getUserOrganizationPermissions();\n\t\tfor (const {permission, organizationField, constraints} of permissionInOrganization) {\n\t\t\tif (constraints && !testPermissionConstraints(constraints, document, userId)) { continue; }\n\t\t\tconst organizationId = document[organizationField || ''];\n\t\t\tif (!organizationId) { continue }\n\t\t\tconst organizationPermissions = permissions[organizationId];\n\t\t\tif (!organizationPermissions) { continue; }\n\t\t\tif (permission && !organizationPermissions.has(permission)) { continue; }\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false;\n\n}\n","import { afterCreate, afterCreateMany, afterDelete, afterUpdate, beforeCreate, beforeCreateMany, beforeDelete, beforeUpdate } from '@yongdall/model';\nimport { hooks } from '../hooks.mjs';\n/** @import { Hooks, ClassDecorator } from '@yongdall/model' */\n\n\n/** @returns {{[K in keyof Hooks]: Record<string, Hooks[K][]>}} */\nfunction loadHooks() {\n\t/** @returns {{[K in keyof Hooks]: Record<string, Hooks[K][]>}} */\n\tconst modelHooks = Object.create(null);\n\tfor (const [, model, v] of hooks.get('modelHook').entriesObject()) {\n\t\tfor (const [name, fn] of Object.entries(v)) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tconst list = modelHooks[name] ||= Object.create(null);\n\t\t\t(list[model] ||= []).push(fn);\n\t\t}\n\t}\n\treturn modelHooks;\n}\nconst modelHooks = loadHooks();\n/**\n * \n * @param {Partial<Hooks>} hooks \n * @param {...string | string[]} hookNames \n * @returns {Hooks}\n */\nexport function bindModelHooks({\n\twhere, \n\tbeforeCreateMany, afterCreateMany,\n\tbeforeCreate, afterCreate,\n\tbeforeUpdate, afterUpdate,\n\tbeforeDelete, afterDelete,\n}, ...hookNames) {\n\t/** @type {string[]} */\n\tconst names = hookNames.flat(21);\n\treturn {\n\t\twhere: where || (() => {}),\n\t\tasync beforeCreateMany(conn, model, record) {\n\t\t\tlet data = record;\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeCreateMany[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tdata = await hook(conn, model, data) || data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof beforeCreateMany === 'function') {\n\t\t\t\tdata = await beforeCreateMany(conn, model, data) || data;\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\t\tasync afterCreateMany(conn, model, record) {\n\t\t\tif (typeof afterCreateMany === 'function') {\n\t\t\t\tawait afterCreateMany(conn, model, record);\n\t\t\t}\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterCreateMany[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync beforeCreate(conn, model, record) {\n\t\t\tlet data = record;\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeCreate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tdata = await hook(conn, model, data) || data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof beforeCreate === 'function') {\n\t\t\t\tdata = await beforeCreate(conn, model, data) || data;\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\t\tasync afterCreate(conn, model, record) {\n\t\t\tif (typeof afterCreate === 'function') {\n\t\t\t\tawait afterCreate(conn, model, record);\n\t\t\t}\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterCreate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync beforeUpdate(conn, model, record, set) {\n\t\t\tlet data = set;\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeUpdate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tdata = await hook(conn, model, record, data) || data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof beforeUpdate === 'function') {\n\t\t\t\tdata = await beforeUpdate(conn, model, record, data) || data;\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\t\tasync afterUpdate(conn, model, record, oldRecord) {\n\t\t\tif (typeof afterUpdate === 'function') {\n\t\t\t\tawait afterUpdate(conn, model, record, oldRecord);\n\t\t\t}\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterUpdate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record, oldRecord);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync beforeDelete(conn, model, record, update) {\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeDelete[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record, update);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof beforeDelete === 'function') {\n\t\t\t\tawait beforeDelete(conn, model, record, update);\n\t\t\t}\n\t\t},\n\t\tasync afterDelete(conn, model, record, update) {\n\t\t\tif (typeof afterDelete === 'function') {\n\t\t\t\tawait afterDelete(conn, model, record, update);\n\t\t\t}\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterDelete[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record, update);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}\n}\n/**\n * \n * @param {...string | string[]} hookNames \n * @returns {ClassDecorator}\n */\nexport default function modelHook(...hookNames) {\n\t/** @type {string[]} */\n\tconst names = hookNames.flat(21);\n\treturn (Model, ctx) => {\n\t\tif (!names.length) { return; }\n\t\tbeforeCreateMany(Model, async (conn, model, record) => {\n\t\t\tlet data = record;\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeCreateMany[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tdata = await hook(conn, model, data) || data;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data;\n\t\t});\n\t\tafterCreateMany(Model, async (conn, model, record) => {\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterCreateMany[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tbeforeCreate(Model, async (conn, model, record) => {\n\t\t\tlet data = record;\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeCreate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tdata = await hook(conn, model, data) || data;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data;\n\t\t});\n\t\tafterCreate(Model, async (conn, model, record) => {\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterCreate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tbeforeUpdate(Model, async (conn, model, record, set) => {\n\t\t\tlet data = set;\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeUpdate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tdata = await hook(conn, model, record, data) || data;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data;\n\t\t});\n\t\tafterUpdate(Model, async (conn, model, record, oldRecord) => {\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterUpdate[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record, oldRecord);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tbeforeDelete(Model, async (conn, model, record, update) => {\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.beforeDelete[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record, update);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tafterDelete(Model, async (conn, model, record, update) => {\n\t\t\tfor (const name of names) {\n\t\t\t\tfor (const hook of modelHooks.afterDelete[name] || []) {\n\t\t\t\t\tif (typeof hook !== 'function') { continue; }\n\t\t\t\t\tawait hook(conn, model, record, update);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}\n","export default class ServerError extends Error {\n\tstatus = 500;\n\t/**\n\t * \n\t * @param {string} message \n\t * @param {number} [status] \n\t */\n\tconstructor(message, status = 500) {\n\t\tsuper(message);\n\t\tthis.status = status;\n\t}\n}\n","import { beforeCreate, beforeUpdate, increment, multiply, Query, Where, coefficient, decrement, Connection } from '@yongdall/model';\nimport ServerError from '../ServerError.mjs';\n\n\n\n\n\n\n/**\n * \n * @param {Connection} conn \n * @param {any} Model \n * @param {number} id \n * @param {number} lftValue \n * @param {number} rgtValue \n * @param {string} idField \n * @param {string} lftField \n * @param {string} rgtField \n */\nexport async function treeValidateLoop(conn, Model, id, lftValue, rgtValue, idField, lftField, rgtField) {\n\tconst t = await conn.select(\n\t\tnew Query(Model).select(idField)\n\t\t\t.where(lftField, '<=', lftValue)\n\t\t\t.where(rgtField, '>=', rgtValue)\n\t\t\t.where({ [idField]: id })\n\t\t\t.limit(1)\n\t);\n\tif (t.length) { throw new ServerError('项目不能被添加到自己的后代'); }\n}\n/**\n * \n * @param {string} parentField \n * @param {string} lftField \n * @param {string} rgtField \n * @param {string} idField \n * @param {...string} groupFields \n */\nexport default function nestedSetTree(parentField, lftField = 'lft', rgtField = 'rgt', idField = 'id', ...groupFields) {\n\t/**\n\t * \n\t * @param {any} Model \n\t * @param {ClassDecoratorContext} ctx \n\t */\n\treturn function (Model, ctx) {\n\t\tbeforeCreate(Model, async (conn, record) => {\n\t\t\t// 树状结构调整 lft、rgt\n\t\t\tlet begin = 1;\n\t\t\tconst parent = record[parentField];\n\t\t\tconst where = new Where();\n\t\t\tfor (const g of groupFields) {\n\t\t\t\twhere.and(g, record[g]);\n\t\t\t}\n\t\t\tif (parent) {\n\t\t\t\tconst [{ [rgtField]: rgtValue }] = await conn.select(\n\t\t\t\t\tnew Query(Model, true).select(rgtField).where(where).where({ [idField]: parent }).limit(1)\n\t\t\t\t);\n\t\t\t\tbegin = rgtValue;\n\t\t\t\tawait conn.update(new Query(Model).where(where).where(rgtField, '>=', begin), { [rgtField]: increment(2) });\n\t\t\t\tawait conn.update(new Query(Model).where(where).where(lftField, '>=', begin), { [lftField]: increment(2) });\n\t\t\t} else {\n\n\t\t\t\t/** @type {{r: number}[]} */\n\t\t\t\tconst [{ r } = { r: 0 }] = await conn.select(\n\t\t\t\t\tnew Query(Model, true)\n\t\t\t\t\t\t.select({ r: rgtField })\n\t\t\t\t\t\t.where(where).where({ [idField]: parent })\n\t\t\t\t\t\t.limit(1).sort(rgtField, true)\n\t\t\t\t);\n\t\t\t\tbegin = r + 1;\n\t\t\t}\n\t\t\trecord[lftField] = begin;\n\t\t\trecord[rgtField] = begin + 1;\n\t\t}, true);\n\t\tbeforeUpdate(Model, async (conn, oldDocument, updatedData) => {\n\n\t\t\tconst parentId = parentField in updatedData ? updatedData[parentField] : oldDocument[parentField];\n\t\t\tif (parentId === oldDocument[parentField]) {\n\t\t\t\tupdatedData[lftField] = oldDocument[lftField];\n\t\t\t\tupdatedData[rgtField] = oldDocument[rgtField];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst where = new Where();\n\t\t\tfor (const g of groupFields) {\n\t\t\t\twhere.and(g, updatedData[g] ?? oldDocument[g]);\n\t\t\t}\n\t\t\tif (parentId) {\n\t\t\t\tconst [parent] = await conn.select(\n\t\t\t\t\tnew Query(Model).select({ lft: lftField, rgt: rgtField }).where(where).where({ [idField]: parentId })\n\t\t\t\t);\n\t\t\t\tconst { lft, rgt } = parent;\n\t\t\t\t// TODO:\n\t\t\t\tawait treeValidateLoop(conn, Model, oldDocument[idField], lft, rgt, idField, lftField, rgtField);\n\t\t\t}\n\n\t\t\tawait conn.update(new Query(Model).where(where).where(lftField, '>=', oldDocument[rgtField]).where(rgtField, '<=', oldDocument[rgtField]), {\n\t\t\t\t[rgtField]: multiply(-1),\n\t\t\t\t[rgtField]: multiply(-1),\n\n\t\t\t});\n\n\t\t\tconst diff = oldDocument[rgtField] - oldDocument[lftField] + 1;\n\t\t\tawait conn.update(new Query(Model).where(where).where(lftField, '>', oldDocument[rgtField]), {\n\t\t\t\t[lftField]: decrement(diff)\n\t\t\t});\n\t\t\tawait conn.update(new Query(Model).where(where).where(rgtField, '>', oldDocument[rgtField]), {\n\t\t\t\t[rgtField]: decrement(diff)\n\t\t\t});\n\t\t\tlet newLft = 0;\n\t\t\tif (parentId) {\n\t\t\t\tconst [{ [rgtField]: rgtValue }] = await conn.select(new Query(Model).select(rgtField).where(where).where({ [idField]: parentId }));\n\t\t\t\tawait conn.update(new Query(Model).where(where).where(rgtField, '>=', rgtValue), {\n\t\t\t\t\t[rgtField]: increment(diff)\n\t\t\t\t});\n\t\t\t\tawait conn.update(new Query(Model).where(where).where(lftField, '>=', rgtValue), {\n\t\t\t\t\t[lftField]: increment(diff)\n\t\t\t\t});\n\t\t\t\tnewLft = rgtValue;\n\t\t\t} else {\n\t\t\t\t/** @type {{r: number}[]} */\n\t\t\t\tconst [{ r } = { r: 0 }] = await conn.select(\n\t\t\t\t\tnew Query(Model, true)\n\t\t\t\t\t\t.select({ r: rgtField })\n\t\t\t\t\t\t.where(where).where({ [idField]: parent })\n\t\t\t\t\t\t.limit(1).sort(rgtField, true)\n\t\t\t\t);\n\t\t\t\tnewLft = r + 1;\n\t\t\t}\n\n\t\t\tconst val = newLft - oldDocument[lftField];\n\t\t\tawait conn.update(new Query(Model).where(where).where(lftField, '<', 0), {\n\t\t\t\t[lftField]: coefficient(val, -1),\n\t\t\t\t[rgtField]: coefficient(val, -1),\n\t\t\t});\n\t\t\tupdatedData[lftField] = oldDocument[lftField] + val;\n\t\t\tupdatedData[rgtField] = oldDocument[rgtField] + val;\n\n\t\t}, true);\n\t};\n}\n","/** @import { Field } from '@yongdall/types' */\n/** @import { FieldDefine } from '@yongdall/model' */\n\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @param {Set<string>} ignore \n * @returns {Record<string, Field>?}\n */\nfunction toSubDocumentFields(fields, ignore) {\n\t/** @type {Record<string, Field>} */\n\tconst res = {};\n\n\tfor (const [name, { type, ...field }] of Object.entries(fields)) {\n\t\tif (ignore.has(name)) { continue; }\n\t\tif (!type) { continue; }\n\t\tif (typeof type !== 'object' && typeof type !== 'function') {\n\t\t\tres[name] = {\n\t\t\t\ttype,\n\t\t\t\tarray: field.array,\n\t\t\t\tnullable: field.nullable,\n\t\t\t\tdefault: field.default,\n\t\t\t\tscale: field.scale,\n\n\n\t\t\t\tprimary: field.primary,\n\n\t\t\t\tuncreatable: Boolean(field.uncreatable || field.updating || field.creating || field.fixedValue),\n\t\t\t\timmutable: Boolean(field.primary || field.immutable || field.updating || field.creating || field.fixedValue),\n\n\t\t\t\tlayoutOrder: field.layoutOrder,\n\t\t\t\tlabel: field.label,\n\t\t\t\tdescription: field.description,\n\t\t\t\tplaceholder: field.placeholder,\n\n\t\t\t\tstep: field.step,\n\t\t\t\tmax: field.max,\n\t\t\t\tmin: field.min,\n\n\t\t\t\treadonly: field.readonly,\n\t\t\t\trequired: field.required,\n\t\t\t\tclearable: field.clearable,\n\t\t\t\tdisabled: field.disabled,\n\n\t\t\t\tgroup: field.group,\n\t\t\t\trenderer: field.renderer,\n\t\t\t\tscripts: field.scripts,\n\t\t\t\tlayout: field.layout,\n\t\t\t\tmodel: field.model,\n\t\t\t\tsort: field.sort,\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\n\n\t\tconst fields = type.fields;\n\t\tif (!fields) { continue; }\n\n\t\tconst names = new Set(Object.keys(field.constraints || {}));\n\t\tconst subFields = toSubDocumentFields(fields, names);\n\t\tif (!subFields) { continue; }\n\t\tres[name] = {\n\t\t\ttype: subFields,\n\t\t\tarray: field.array,\n\t\t\tdefault: field.default,\n\n\t\t\tuncreatable: Boolean(field.uncreatable),\n\t\t\timmutable: Boolean(field.immutable),\n\n\t\t\tlayoutOrder: field.layoutOrder,\n\t\t\tlabel: field.label,\n\t\t\tdescription: field.description,\n\t\t\tplaceholder: field.placeholder,\n\t\t\treadonly: field.readonly,\n\t\t\trequired: field.required,\n\t\t\tclearable: field.clearable,\n\t\t\tdisabled: field.disabled,\n\t\t\tgroup: field.group,\n\t\t\trenderer: field.renderer,\n\t\t\tscripts: field.scripts,\n\t\t\tlayout: field.layout,\n\t\t};\n\t}\n\tif (!Object.keys(res).length) { return null; }\n\treturn res;\n}\n\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @returns {Record<string, Field>}\n */\nexport default function toDocumentFields(fields) {\n\treturn toSubDocumentFields(fields, new Set()) || {};\n}\n","import { hooks } from './hooks.mjs';\n/** @import { MaybePromise } from './types.mjs' */\n\n/** @type {Record<string, (Record<string, any> | (() => MaybePromise<Record<string, any>[]>))[]>} */\nlet enumerations = {};\nhooks.listen(() => {\n\tconst groups = Object.groupBy([...hooks.get('enumerations').values()].flatMap(v => Object.entries(v)), ([k]) => k);\n\tenumerations = Object.fromEntries(Object.entries(groups).map(([k,v]) => [k, v?.map(v => v[1]).flat(2) || []]));\n}, -1000000);\n/**\n * \n * @param {string} name \n * @returns {Promise<Record<string, any>[]>}\n */\nexport async function getEnumerations(name) {\n\tif (!Object.hasOwn(enumerations, name)) { return []; }\n/** @type {(Record<string, any> | Record<string, any>[])[]} */\n\tconst list = await Promise.all(enumerations[name].map(v => typeof v === 'function' ? v() : v))\n\treturn list.flat();\n}\n","/** @import { MaybePromise, WhereHook } from '../types.mjs' */\n\nimport { Where } from '@yongdall/model';\nimport { hooks } from '../hooks.mjs';\n\n\n/**\n * \n * @param {MaybePromise<Where?>} [where] \n */\nasync function toNot(where) {\n\tconst w = await where;\n\tif (!w) { return null; }\n\treturn Where.not(w);\n\n}\n/**\n * @template T\n * @param {Record<string, T>} map \n * @param {string} key \n * @param {() => T} create \n */\nfunction select(map, key, create) {\n\tif (Object.hasOwn(map, key)) { return map[key]; }\n\treturn map[key] = create();\n}\n/**\n * @typedef WhereDefine\n * @property {string} label\n * @property {string} notLabel\n * @property {WhereHook.Value[]} value\n * @property {WhereHook.Value[]} notValue\n * @property {WhereHook.Named[]} named\n * @property {WhereHook.Named[]} notNamed\n * @property {WhereHook.Field[]} field\n * @property {WhereHook.Field[]} notField\n */\n/**\n * \n * @returns {WhereDefine}\n */\nfunction createWhereDefine() {\n\treturn { label: '', notLabel: '', value: [], notValue: [], named: [], notNamed: [], field: [], notField: [] };\n\n}\nfunction getWhere() {\n\t/** @type {Record<string, Record<string, WhereDefine>>} */\n\tconst filterMap = {};\n\t/** @type {Record<string, Record<string, WhereDefine>>} */\n\tconst notFilterMap = {};\n\tfor (const [, type, fieldWhere] of hooks.get('where').entriesObject()) {\n\t\tif (!fieldWhere || typeof fieldWhere !== 'object') { continue; }\n\t\tconst typeFilters = select(filterMap, type, () => /** @type {Record<string, WhereDefine>} */({}));\n\t\tconst notTypeFilters = select(notFilterMap, type, () => /** @type {Record<string, WhereDefine>} */({}));\n\n\t\tfor (const [op, filters] of Object.entries(fieldWhere)) {\n\n\t\t\tfor (const filter of [filters].flat()) {\n\t\t\t\tif (!filter || typeof filter !== 'object') { continue; }\n\t\t\t\tlet { label, notLabel, not, value, notValue, named, notNamed, field, notField } = filter;\n\t\t\t\tif (not) {\n\t\t\t\t\tif (typeof value === 'function' && typeof typeof notValue !== 'function') {\n\t\t\t\t\t\tnotValue = (...p) => toNot(value(...p));\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof field === 'function' && typeof typeof notField !== 'function') {\n\t\t\t\t\t\tnotField = (...p) => toNot(field(...p));\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof named === 'function' && typeof typeof notNamed !== 'function') {\n\t\t\t\t\t\tnotNamed = (...p) => toNot(named(...p));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst typeFilter = select(typeFilters, op, createWhereDefine);\n\t\t\t\tif (label && typeof label === 'string') { typeFilter.label = label; }\n\t\t\t\tif (notLabel && typeof notLabel === 'string') { typeFilter.notLabel = notLabel; }\n\t\t\t\tif (typeof value === 'function') { typeFilter.value.push(value); }\n\t\t\t\tif (typeof notValue === 'function') { typeFilter.notValue.push(notValue); }\n\t\t\t\tif (typeof named === 'function') { typeFilter.named.push(named); }\n\t\t\t\tif (typeof notNamed === 'function') { typeFilter.notNamed.push(notNamed); }\n\t\t\t\tif (typeof field === 'function') { typeFilter.field.push(field); }\n\t\t\t\tif (typeof notField === 'function') { typeFilter.notField.push(notField); }\n\t\t\t\tconst notOp = typeof not === 'string' && not || '';\n\t\t\t\tif (!notOp) { continue; }\n\t\t\t\tconst notTypeFilter = select(notTypeFilters, notOp, createWhereDefine);\n\n\n\t\t\t\tif (label && typeof label === 'string') { notTypeFilter.notLabel = label; }\n\t\t\t\tif (notLabel && typeof notLabel === 'string') { notTypeFilter.label = notLabel; }\n\t\t\t\tif (typeof value === 'function') { notTypeFilter.notValue.push(value); }\n\t\t\t\tif (typeof notValue === 'function') { notTypeFilter.value.push(notValue); }\n\t\t\t\tif (typeof named === 'function') { notTypeFilter.notNamed.push(named); }\n\t\t\t\tif (typeof notNamed === 'function') { notTypeFilter.named.push(notNamed); }\n\t\t\t\tif (typeof field === 'function') { notTypeFilter.notField.push(field); }\n\t\t\t\tif (typeof notField === 'function') { notTypeFilter.field.push(notField); }\n\n\t\t\t}\n\t\t}\n\t}\n\tfor (const type of Object.keys({ ...filterMap, ...notFilterMap })) {\n\t\tlet typeFilters = Object.hasOwn(filterMap, type) && filterMap[type] || null;\n\t\tlet notTypeFilters = Object.hasOwn(notFilterMap, type) && notFilterMap[type] || null;\n\t\tif (!typeFilters && notTypeFilters) {\n\t\t\ttypeFilters = notTypeFilters;\n\t\t\tfilterMap[type] = typeFilters;\n\t\t}\n\t\tif (!typeFilters) { continue; }\n\n\t\tfor (const op of Object.keys({ ...typeFilters, ...notTypeFilters })) {\n\t\t\tlet opFilters = Object.hasOwn(typeFilters, op) && typeFilters[op] || null;\n\t\t\tlet notOpFilters = notTypeFilters && Object.hasOwn(notTypeFilters, op) && notTypeFilters[op] || null;\n\t\t\tif (!opFilters && notOpFilters) {\n\t\t\t\topFilters = notOpFilters;\n\t\t\t\ttypeFilters[type] = opFilters;\n\t\t\t}\n\t\t\tif (!opFilters) { continue; }\n\t\t\tif (!opFilters.label) { opFilters.label = notOpFilters?.label || op; }\n\t\t\tif (!opFilters.notLabel) { opFilters.notLabel = notOpFilters?.notLabel || `!${op}`; }\n\t\t\tif (!notOpFilters) { continue; }\n\t\t\tfor (const fn of notOpFilters.value) { opFilters.value.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notValue) { opFilters.notValue.push(fn); }\n\t\t\tfor (const fn of notOpFilters.named) { opFilters.named.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notNamed) { opFilters.notNamed.push(fn); }\n\t\t\tfor (const fn of notOpFilters.field) { opFilters.field.push(fn); }\n\t\t\tfor (const fn of notOpFilters.notField) { opFilters.notField.push(fn); }\n\n\t\t}\n\n\t}\n\treturn filterMap;\n}\n/**\n * \n * @param {ReturnType<typeof getWhere>} filterMap \n */\nfunction toWhereList(filterMap) {\n\t/** @type {{type: string; operator: string; label: string; notLabel: string; value: boolean; notValue: boolean; named: boolean; notNamed: boolean; field: boolean; notField: boolean}[]} */\n\tconst list = [];\n\tfor (const [type, filters] of Object.entries(filterMap)) {\n\n\t\tfor (const [operator, filter] of Object.entries(filters)) {\n\t\t\tlist.push({\n\t\t\t\ttype, operator,\n\t\t\t\tlabel: filter.label,\n\t\t\t\tnotLabel: filter.notLabel,\n\t\t\t\tvalue: Boolean(filter.value.length),\n\t\t\t\tnotValue: Boolean(filter.notValue.length),\n\t\t\t\tnamed: Boolean(filter.named.length),\n\t\t\t\tnotNamed: Boolean(filter.notNamed.length),\n\t\t\t\tfield: Boolean(filter.field.length),\n\t\t\t\tnotField: Boolean(filter.notField.length),\n\n\t\t\t});\n\n\t\t}\n\n\t}\n\n}\n\nexport let allWhere = getWhere();\nexport let whereList = toWhereList(allWhere);\nhooks.listen(() => {\n\tallWhere = getWhere();\n\twhereList = toWhereList(allWhere);\n});\n","/** @import { RecursiveArray } from '@yongdall/common' */\nimport { Search } from '@yongdall/common';\n/** @import { FieldDefine } from '@yongdall/model' */\n/** @import { MaybePromise } from '../types.mjs' */\n\nimport { Where } from '@yongdall/model';\nimport { hooks } from '../hooks.mjs';\n\n/**\n * @typedef {object} WhereParam.Value\n * @property {'value'} type\n * @property {FieldDefine} define\n * @property {string} name\n * @property {string?} operator\n * @property {boolean} not\n * @property {string | RecursiveArray<string> | null} value\n */\n/**\n * @typedef {object} WhereParam.Field\n * @property {'field'} type\n * @property {FieldDefine} define\n * @property {string} name\n * @property {FieldDefine} fieldDefine\n * @property {string} field\n * @property {string?} operator\n * @property {boolean} not\n */\n/**\n * @typedef {WhereParam.Value | WhereParam.Field} WhereParam\n */\n\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @param {string[]} path \n * @param {Search.Match | Search.Children} and\n * @returns {Generator<WhereParam, Where?, Where?>}\n */\nfunction* runItemWhere(fields, path, and) {\n\tconst name = path.shift();\n\tif (!name) { return null; }\n\tconst define = Object.hasOwn(fields, name) && fields[name];\n\tif (!define) { return null; }\n\tconst type = define.type;\n\tif (!type) { return null; }\n\n\tif (path.length) {\n\t\tif (typeof type !== 'object') { return null; }\n\t\tconst table = type.table;\n\t\tif (!table) { return null; }\n\t\t// TODO:\n\t\treturn null;\n\t}\n\n\tif (and.length === 2) {\n\t\tif (typeof type !== 'object') { return null; }\n\t\tconst table = type.table;\n\t\tif (!table) { return null; }\n\t\t// TODO:\n\t\treturn null;\n\t}\n\tif (typeof type !== 'string' && (typeof type !== 'object' || type.table)) {\n\t\treturn null;\n\t}\n\n\tconst [, value, operator, sign] = and;\n\tif (operator === null) {\n\t\treturn yield { type: 'value', define, name: define.column || name, value: null, operator, not: Boolean(sign) };\n\t}\n\tif (!value || typeof value !== 'object' || Array.isArray(value)) {\n\t\treturn yield { type: 'value', define, name: define.column || name, value, operator, not: Boolean(sign) };\n\t}\n\tconst { field, table, value: rValue } = value;\n\tif (rValue) {\n\t\treturn yield { type: 'value', define, name: define.column || name, value: rValue, operator, not: Boolean(sign) };\n\n\t}\n\n\tif (field) {\n\t\tif (table) { return null; }\n\t\tconst fieldDefine = Object.hasOwn(fields, name) && fields[field];\n\t\tif (!fieldDefine) { return null; }\n\t\tconst type = fieldDefine.type;\n\t\tif (!type) { return null; }\n\t\tif (typeof type !== 'string' && (typeof type !== 'object' || type.table)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn yield { type: 'field', define, name: define.column || name, field: fieldDefine.column || field, fieldDefine, operator, not: Boolean(sign) };\n\t}\n\n\n\n\treturn null;\n\n}\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @param {Search.Match | Search.Children} and\n * @returns {Generator<WhereParam, Where?, Where?>}\n */\nfunction* toItemWhere(fields, and) {\n\tconst path = and[0];\n\tif (path.find(v => Array.isArray(v) && v.length)) { return null; }\n\treturn yield* runItemWhere(fields, path.map(v => typeof v === 'string' ? v : v[0]), and);\n\n}\n\n\n\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @param {Search.OrList} or\n * @returns {Generator<WhereParam, Where?, Where?>}\n */\nfunction* toOrWhere(fields, or) {\n\t/** @type {Where?} */\n\tlet where = null;\n\tfor (const item of or) {\n\t\tif (Array.isArray(item)) {\n\t\t\tconst w = yield* toItemWhere(fields, item);\n\t\t\tif (w) { where = (where || new Where()).or(w); }\n\t\t} else {\n\t\t\tconst w = yield* toWhere(fields, item.and, item.or);\n\t\t\tif (w) { where = (where || new Where()).or(w); }\n\n\t\t}\n\n\t}\n\treturn where;\n\n}\n\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<WhereParam, Where?, Where?>}\n */\nexport function* toWhere(fields, and, ...orList) {\n\t/** @type {Where?} */\n\tlet where = null;\n\tif (and) {\n\t\tfor (const item of and) {\n\t\t\tconst w = yield* toItemWhere(fields, item);\n\t\t\tif (w) { where = (where || new Where()).and(w); }\n\t\t}\n\t}\n\tfor (const or of orList) {\n\t\tif (!or) { continue; }\n\t\tconst w = yield* toOrWhere(fields, or);\n\t\tif (w) { where = (where || new Where()).and(w); }\n\t}\n\treturn where;\n}\n","/** @import { RecursiveArray } from '@yongdall/common' */\nimport { Search } from '@yongdall/common';\n/** @import { FieldDefine } from '@yongdall/model' */\n/** @import { MaybePromise } from '../types.mjs' */\n\nimport { Where } from '@yongdall/model';\nimport { hooks } from '../hooks.mjs';\nimport { allWhere } from './hook.mjs';\n\n\n\n/** @import { WhereParam } from './toWhere.mjs' */\nimport { toWhere } from './toWhere.mjs';\n/** @import { FieldScriptConfiguration } from '../services/model.mjs' */\n\n\n/**\n * \n * @param {string} type\n * @param {string} [renderer] \n * @returns \n */\nfunction getSetKey(type, renderer) {\n\tif (!type || type === '.') {\n\t\tif (!renderer) { return; }\n\t\treturn `:${renderer}`;\n\t}\n\tif (type[0] === '#') { return; }\n\tif (!renderer) { return type; }\n\treturn `${type}:${renderer}`;\n}\n\n/**\n * \n * @param {string | {component: string; [k: string]: any} | (string | {component: string; [k: string]: any})[]} [def] \n * @returns {Iterable<string>}\n */\nfunction* getRenderer(def) {\n\tif (!def) { return; }\n\tfor (const s of Array.isArray(def) ? def : [def]) {\n\t\tif (!s) { continue; }\n\t\tif (typeof s === 'string') {\n\t\t\tyield s;\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof s !== 'object') { continue; }\n\t\tconst component = s.component;\n\t\tif (!component || typeof component !== 'string') { continue; }\n\t\tyield component;\n\t}\n}\n/**\n * \n * @param {FieldDefine} field \n * @returns {Iterable<string>}\n */\nfunction* getKey(field) {\n\tconst type = field.type;\n\tconst renderers = field.renderer;\n\tconst array = field.array ? '[]' : '';\n\tif (typeof type === 'object') { return; }\n\tif (!type) {\n\t\tfor (const renderer of getRenderer(renderers)) {\n\t\t\tyield `:${renderer}${array}`;\n\t\t\tyield `${renderer}${array}`;\n\t\t}\n\t\t\tyield `${array}`;\n\t\treturn;\n\t}\n\tfor (const renderer of getRenderer(renderers)) {\n\t\tyield `${type}:${renderer}${array}`;\n\t\tyield `${renderer}${array}`;\n\t}\n\tyield `${type}${array}`;\n\tyield `${array}`;\n}\n\n/**\n * \n * @param {WhereParam} param \n */\nasync function execWhere(param) {\n\tconst operator = param.operator;\n\tif (operator === null) {\n\t\treturn Where.and(param.name, '=', null, param.not);\n\t}\n\tfor (const k of getKey(param.define)) {\n\t\tconst typeWhere = Object.hasOwn(allWhere, k) && allWhere[k];\n\t\tif (!typeWhere) { continue; }\n\t\tconst op = Object.hasOwn(typeWhere, operator) && typeWhere[operator];\n\t\tif (!op) { continue; }\n\t\tif (param.type === 'value') {\n\t\t\tfor (const fn of param.not ? op.notValue : op.value) {\n\t\t\t\tconst w = await fn(param.name, param.value, param.define);\n\t\t\t\tif (w) { return w; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (param.type === 'field') {\n\t\t\tfor (const fn of param.not ? op.notField : op.field) {\n\t\t\t\tconst w = await fn(param.name, param.field, param.define, param.fieldDefine);\n\t\t\t\tif (w) { return w; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t}\n\tif (param.type === 'field') {\n\t\tfor (const k of getKey(param.fieldDefine)) {\n\t\t\tconst typeWhere = Object.hasOwn(allWhere, k) && allWhere[k];\n\t\t\tif (!typeWhere) { continue; }\n\t\t\tconst op = Object.hasOwn(typeWhere, operator) && typeWhere[operator];\n\t\t\tif (!op) { continue; }\n\t\t\tfor (const fn of param.not ? op.notField : op.field) {\n\t\t\t\tconst w = await fn(param.field, param.name, param.fieldDefine, param.define);\n\t\t\t\tif (w) { return w; }\n\t\t\t}\n\n\t\t}\n\t}\n\treturn null;\n\n}\n/**\n * \n * @param {Record<string, FieldDefine>} fields \n * @param {Search.AndList} [and] \n * @param {Search.OrList} [or] \n * @param {Search.OrList} [or2] \n * @returns {Promise<Where?>}\n */\nexport async function search2where(fields, and, or, or2) {\n\treturn Search.asyncRunGenerator(toWhere(fields, and, or, or2), execWhere, null);\n}\n","/** @import { Tenant } from '@yongdall/types' */\n/** @import {Hooks} from './types.mjs' */\nimport './polyfill.mjs';\nimport { initConfig } from './config.mjs';\nimport { hooks } from './hooks.mjs';\nimport { Hook } from '@yongdall/common';\nexport { hooks } from './hooks.mjs';\nexport * from './config.mjs';\nexport * from './menu.mjs';\nexport * from './models.mjs';\nexport { default as useTenant } from './tenant.mjs';\nexport * from './user.mjs';\nexport * from './permission/index.mjs';\nexport * from './decorators/index.mjs';\nexport { default as ServerError } from './ServerError.mjs';\nexport { default as toDocumentFields } from './toDocumentFields.mjs'\nexport { getEnumerations } from './enumerations.mjs'\nexport { search2where } from './search2where/index.mjs'\n\n\n\n/**\n * \n * @param {Partial<Omit<Tenant, 'id'>>} tenant \n * @param {object} boot \n * @param {Record<string, Partial<Hooks>>} pluginHooks \n * @returns \n */\nexport default function initSystem(tenant, boot, pluginHooks) {\n\tinitConfig(tenant, boot);\n\tHook.update(hooks, pluginHooks);\n}\n"],"mappings":";;;;;AAAA,IAAI,CAAC,OAAO,SACX,QAAO,WAAW,OAAO,IAAI,kBAAkB;;;;;;;ACKhD,MAAa,aAAa;CACzB,IAAI;CACJ,OAAO;CACP,QAAQ;CACR,WAAW,EAAE;CACb,MAAM;CACN;;AAED,MAAa,oBAAoB;CAChC,OAAO,EAAE;CACT,OAAO;CACP,eAAe;CAEf,MAAM;CACN;;;;;;;AAOD,SAAgB,WAAW,EAAC,OAAO,QAAQ,WAAW,QAAO,MAAM;AAClE,QAAO,OAAO,mBAAmB,KAAK;AAEtC,YAAW,QAAQ,OAAO,UAAU,YAAY,SAAS;AACzD,YAAW,SAAS,QAAQ,OAAO;AACnC,KAAI,KAAQ,YAAW,OAAO;AAC9B,YAAW,YAAY,OAAO,YAC7B,OAAO,QAAQ,OAAO,cAAc,YAAY,aAAa,EAAE,CAAC,CAC/D,QAAQ,CAAC,GAAE,OAAO,OAAO,MAAM,YAAY,EAAE,CAC9C;;;;;;;ACjCF,MAAa,QAAQ,IAAI,MAAM;;;;;;;;;;ACG/B,SAAgB,SAAS,MAAM,QAAQ,IAAI;AAG1C,QADc,EAAE;;;;;;;;;ACAjB,IAAW,SAAS,OAAO,OAAO,KAAK;;AAEvC,IAAW,eAAe,OAAO,OAAO,KAAK;;AAE7C,IAAI,2BAA2B,EAAE;;AAEjC,IAAI,2BAAW,IAAI,SAAS;;AAE5B,IAAI,eAAe,EAAE;AACrB,MAAM,aAAa;AAClB,4BAAW,IAAI,SAAS;AACxB,UAAS,MAAM,IAAI,SAAS,CAAC,OAAO;AACpC,gBAAe,MAAM,IAAI,eAAe,CAAC,OAAO;AAChD,4BAA2B,CAAC,GAAG,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;CAC9G,MAAM,cAAc,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,eAAe,CAAC,CAChE,SAAS,CAAC,GAAG,SAAS,YAAY,CAAC,OAAO,CAAC,SAAQ,MAAK;AACxD,MAAI,CAAC,KAAK,OAAO,MAAM,YAAY,MAAM,QAAQ,EAAE,CAAI,QAAO,EAAE;AAGhE,SADa,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,WAAW;GAAC;GAAS;GAAW;GAAM,CAAC;GAEtF,CAAC;CACJ,MAAM,SAAS,OAAO,QAAQ,cAAa,MAAK,EAAE,GAAG;;CAErD,MAAM,UAAU,EAAE;AAClB,MAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,OAAO,EAAE;AACvD,MAAI,CAAC,QAAQ,OAAU;AACvB,UAAQ,WAAW,OAAO,YAAY,OAAO,KAAK,GAAG,WAAW,WAAW,CAAC,WAAW,MAAM,CAAC,CAAC;;AAEhG,gBAAe;GACb,KAAS;;;;;;AAQZ,eAAsB,UAAU,OAAO;CACtC,MAAM,CAAC,OAAO,GAAG,eAAe,MAAM,QAAQ,MAAM,GAAG,QAAQ,MAAM,MAAM,IAAI,EAAE,OAAO,QAAQ;AAChG,KAAI,CAAC,WAAW,QAAQ;EACvB,MAAM,SAAS,OAAO,OAAO,QAAQ,MAAM,IAAI,OAAO;AACtD,SAAO,OAAO,WAAW,YAAY,UAAU;;CAEhD,MAAM,SAAS,OAAO,OAAO,cAAc,MAAM,IAAI,aAAa;AAClE,KAAI,OAAO,WAAW,WAAc,QAAO;CAC3C,MAAM,SAAS,MAAM,OAAO,WAAW;AACvC,QAAO,OAAO,WAAW,YAAY,UAAU;;;;;;;AAOhD,eAAsB,SAAS,OAAO;CACrC,MAAM,QAAQ,MAAM,UAAU,MAAM;AACpC,KAAI,CAAC,MAAS,QAAO;CACrB,MAAM,SAAS,SAAS,IAAI,MAAM;AAClC,KAAI,OAAU,QAAO;CACrB,MAAM,aAAa,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG;CAE5D,MAAM,YAAY,YAAY,OADR,OAAO,OAAO,cAAc,WAAW,GAAG,aAAa,cAAc,EAAE,CAC1C;AAEnD,UAAS,IAAI,OAAO,UAAU;AAC9B,QAAO;;;AAKR,MAAa,sBAAsB,eAAe,OAAO,SAAS,YAAY;AAC7E,MAAK,MAAM,MAAM,0BAA0B;EAC1C,MAAM,cAAc,MAAM,GAAG,SAAS,QAAQ;AAC9C,MAAI,YAAe,QAAO;;AAE3B,KAAI,QAAW,QAAO;AACtB,QAAO,oBAAoB,MAAM,SAAS,QAAQ,CAAC;IAChD,SAAS,YAAY,CAAC,SAAS,WAAW,GAAG,CAAC,KAAK,KAAK,CAAC;;;;;;;;AAS7D,eAAsB,iCAAiC,SAAS,eAAe,SAAS;CACvF,MAAM,cAAc,MAAM,oBAAoB,SAAS,QAAQ;AAC/D,KAAI,CAAC,aAAa,OAAU,QAAO;AACnC,QAAO,YAAY,QAAQ,EAAE,qBAAqB;AACjD,MAAI,CAAC,eAAkB,QAAO;AAC9B,MAAI,MAAM,QAAQ,eAAe,CAChC,QAAO,eAAe,SAAS,cAAc;AAE9C,MAAI,0BAA0B,IAC7B,QAAO,eAAe,IAAI,cAAc;AAEzC,SAAO;GACN;;;;;;ACnGH,MAAM,CAAC,cAAc,gBAAgB,wBAAwB,gBAAgB,OAAqD,UAAU;AAC3I,KAAI,CAAC,MAAS,QAAO;AACrB,QAAO;IACkB,WAAW;AACpC,QAAO,SAAS,QAAQ,QAAQ,OAAO,GAAG;GACD,KAAM;AAGhD,SAAS,mBAAmB;AAE3B,QADuB,CAAC,GAAG,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,QAAQ;;AAIhF,IAAI,iBAAiB,kBAAkB;AACvC,MAAM,aAAa;AAClB,kBAAiB,kBAAkB;GACjC,KAAS;;;;;AAMZ,eAAe,mBAAmB;AACjC,KAAI,CAAC,eAAe,OACnB,QAAO;AAER,MAAK,MAAM,OAAO,gBAAgB;EACjC,MAAM,IAAI,MAAM,KAAK;AACrB,MAAI,CAAC,EAAK;AACV,SAAO;;AAER,OAAM,IAAI,MAAM,mBAAmB;;AAIpC,eAAeA,QAAM;CACpB,IAAI,QAAQ,cAAc;AAC1B,KAAI,CAAC,OAAO;AACX,UAAQ,kBAAkB;AAC1B,eAAa,MAAM;;AAEpB,QAAO;;;;;;AAOR,SAAwB,YAAY;AACnC,QAAOA,OAAK;;;;;;;;;;AC7Cb,MAAM,CAAC,YAAY,cAAc,wBAAwB,cAAc,OAAmD,UAAU;AACnI,KAAI,CAAC,MAAS,QAAO;CACrB,MAAM,IAAI,MAAM;AAChB,QAAO;EAAE,MAAM,EAAE;EAAI,OAAO,EAAE;EAAI;IAC6D,QAAQ;AACvG,KAAI,CAAC,IAAO,QAAO;CACnB,MAAM,EAAE,MAAM,QAAQ,OAAO,YAAY;AACzC,QAAO,QAAQ,QAA6B;EAAC;EAAM;EAAM;EAAM;EAAQ;EAAQ,CAAE;GAClC,KAAM;AAGtD,SAAS,iBAAiB;AAKzB,QAHoB,CAAC,GAAG,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC,CAEnE,QAAQ,GAAG,OAAO,OAAO,MAAM,WAAW;;AAGvE,SAAS,kBAAkB;;CAE1B,MAAM,cAAc,CAAC,GAAG,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,OAAO,QAAQ;CAC1E,MAAM,eAAe,YAAY,MAAK,MAAK,OAAO,EAAE,UAAU,WAAW,EAAE,SAAS;CACpF,MAAM,iBAAiB,YAAY,KAAI,MAAK,EAAE,WAAW,CAAC,OAAO,WAAW;;CAE5E,MAAM,SAAS,YAAY,KAAI,MAAK,EAAE,MAAM,CAAC,OAAO,WAAW;;CAE/D,MAAM,kBAAkB,EAAE;;CAE1B,MAAM,YAAY,OAAO,OAAO,KAAK;;CAErC,MAAM,eAAe,OAAO,OAAO,KAAK;CACxC,MAAM,UAAU,YAAY,KAAI,MAAK,EAAE,KAAK,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;CACjF,MAAM,UAAU,YAAY,KAAI,MAAK,EAAE,KAAK,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;CACjF,MAAM,eAAe,YAAY,KAAI,MAAK,EAAE,MAAM,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;CACvF,MAAM,iBAAiB,YAAY,KAAI,MAAK,EAAE,eAAe,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;CAClG,MAAM,6BAA6B,YAAY,KAAI,MAAK,EAAE,2BAA2B,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;CAC1H,MAAM,gCAAgC,YAAY,KAAI,MAAK,EAAE,8BAA8B,CAAC,QAAO,MAAK,OAAO,MAAM,WAAW;AAChI,MAAK,MAAM,EAAE,KAAK,KAAK,MAAM,MAAM,QAAQ,eAAe,aAAa;AACtE,MAAI,OAAO,QAAQ,WAClB,iBAAgB,KAAK;GAAC;GAAK,OAAO;GAAM,QAAQ;GAAK,CAAC;AAEvD,MAAI,OACH,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,EAAE;GAC5C,MAAM,OAAO,UAAU;AACvB,OAAI,KACH,MAAK,KAAK,EAAE;OAEZ,WAAU,KAAK,CAAC,EAAE;;AAIrB,MAAI,UACH,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,UAAU,EAAE;GAC/C,MAAM,OAAO,aAAa;AAC1B,OAAI,KACH,MAAK,KAAK,EAAE;OAEZ,cAAa,KAAK,CAAC,EAAE;;;;;;;;;CAWzB,eAAe,WAAW,QAAQ,MAAM,OAAO;AAC9C,MAAI,CAAC,eAAe,OAAU,QAAO;AACrC,OAAK,MAAM,KAAK,gBAAgB;AAC/B,OAAI,MAAM,EAAE,MAAM,MAAM,CAAI;AAC5B,UAAO;;AAER,SAAO;;AAGR,QAAO;EACN;EAAc;EAAY;EAAQ;EAClC;EAAS;EAAW;EACpB;EAAS;EACT;EAAgB;EAA4B;EAC5C;;AAGF,IAAI,oBAAoB,gBAAgB;AACxC,IAAI,EACH,cAAc,YAAY,QAAQ,iBAClC,SAAS,WAAW,cACpB,SAAS,cACT,gBAAgB,4BAA4B,kCACzC,iBAAiB;AACrB,MAAM,aAAa;AAClB,qBAAoB,gBAAgB;AACpC,EAAC,CACA,cAAc,YAAY,QAAQ,iBAClC,SAAS,WAAW,cACpB,SAAS,cACT,gBAAgB,4BAA4B,iCACzC,iBAAiB;GACnB,KAAS;;;;;;;AASZ,eAAsB,UAAU,QAAQ,OAAO;AAC9C,MAAK,MAAM,MAAM,aAChB,KAAI,MAAM,GAAG,QAAQ,MAAM,CAAI,QAAO;AAEvC,QAAO;;;;;;AAOR,eAAe,gBAAgB;CAC9B,MAAM,SAAS,MAAM,WAAW;AAChC,KAAI,OAAO,QAAQ;AAClB,OAAK,MAAM,SAAS,QAAQ;GAC3B,MAAM,SAAS,MAAM,OAAO;AAC5B,OAAI,CAAC,OAAU;AACf,OAAI,CAAC,MAAM,UAAU,OAAO,CAAI;AAChC,UAAO;IAAC;IAAM;IAAM;IAAM;IAAM;IAAO;;AAExC,SAAO;GAAC;GAAM;GAAM;GAAM;GAAM;GAAK;;;CAMtC,IAAI,UAAU;;CAEd,IAAI,WAAW;;CAEf,IAAI,OAAO;AAEX,MAAK,MAAM,CAAC,KAAK,KAAK,SAAS,iBAAiB;EAC/C,MAAM,IAAI,MAAM,KAAK;AACrB,MAAI,CAAC,KAAK,CAAC,MAAM,UAAU,EAAE,CAAI;AACjC,SAAO;AACP,YAAU;AACV,aAAW;AACX;;AAED,KAAI,CAAC,KAAQ,QAAO;EAAC;EAAM;EAAc;EAAM;EAAM;EAAK;AAC1D,MAAK,MAAM,SAAS,QAAQ;EAC3B,MAAM,SAAS,MAAM,OAAO;AAC5B,MAAI,CAAC,OAAU;AACf,MAAI,CAAC,MAAM,UAAU,OAAO,CAAI;AAChC,MAAI,MAAM,WAAW,QAAQ,MAAM,OAAO,CAAI;AAC9C,SAAO;GAAC;GAAM;GAAS;GAAU;GAAM;GAAO;;AAE/C,QAAO;EAAC;EAAM;EAAS;EAAU;EAAM;EAAK;;AAI7C,eAAe,MAAM;CACpB,IAAI,QAAQ,YAAY;AACxB,KAAI,CAAC,OAAO;AACX,UAAQ,eAAe;AACvB,aAAW,MAAM;;AAElB,QAAO;;;;;;AAMR,SAAgB,aAAa,QAAQ;AACpC,KAAI,OACH,QAAO,WAAW,CAAC,MAAK,MAAK,EAAE,OAAO;AAEvC,QAAO,KAAK,CAAC,MAAM,OAAO,QAAQ,KAAK,QAAQ,WAAW,CAAC,MAAK,MAAK,EAAE,OAAO,CAAC;;;;;;;AAShF,SAAgB,QAAQ,QAAQ;AAE/B,QAAO,KAAK,CAAC,MAAM,OAAO,SAAS,QAAQ;AAC1C,MAAI,WAAW,MAAS,QAAO;AAC/B,MAAI,OAAU,QAAO;AACrB,SAAO,MAAM;GACZ;;;;;;;;AASH,SAAgB,QAAQ,QAAQ,MAAM;CACrC,IAAI,QAAQ,QAAQ,QAAQ,YAAY,IAAI,eAAe,CAAC;AAC5D,KAAI,KACH,SAAQ,MAAM,KAAK,OAAO,GAAG,KAAK,MAAM,aAAa;AACpD,MAAI,CAAC,UAAU,CAAC,MAAM,UAAU,OAAO,CAAI,QAAO;GAAC;GAAM;GAAK;GAAM;GAAS;GAAK;AAClF,MAAI,WAAW,MAAM,WAAW,CAAC,MAAK,MAAK,EAAE,OAAO,CAAI,QAAO;GAAC;GAAQ;GAAK;GAAM;GAAS;GAAO;AACnG,SAAO;GAAC;GAAM;GAAK;GAAM;GAAM;GAAK;GACnC;KAEF,SAAQ,MAAM,KAAK,OAAO,GAAG,KAAK,MAAM,SAAS,QAAQ;AACxD,MAAI,CAAC,QAAQ;AACZ,OAAI,WAAW,KACd,OAAM,KAAK,QAAQ;AAEpB,UAAO;IAAC;IAAM;IAAK;IAAM;IAAM;IAAK;;AAErC,MAAI,CAAC,IAAO,QAAO;GAAC;GAAS;GAAK;GAAM;GAAS;GAAG;AAEpD,OADe,MAAM,WAAW,EACrB,OAAU,QAAO;GAAC;GAAM;GAAK;GAAM;GAAM;GAAG;AAEvD,MAAI,CAAC,MAAM,IAAI,OAAO,CACrB,QAAO;GAAC;GAAM;GAAK;GAAM;GAAS;GAAG;AAEtC,SAAO;GAAC;GAAQ;GAAK;GAAM;GAAQ;GAAK;GACvC;AAEH,YAAW,MAAM;AACjB,QAAO,MAAM,MAAK,MAAK,EAAE,GAAG;;;;;;;;AAW7B,eAAsB,SAAS,WAAW,WAAW;CACpD,MAAM,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC;AAC/D,MAAK,MAAM,MAAM,SAAS;EACzB,MAAM,SAAS,MAAM,GAAG,WAAW,MAAM;AACzC,MAAI,OAAU,QAAO;;AAEtB,QAAO;;;;;;;;;;AAWR,eAAsB,WAAW,QAAQ,UAAU,MAAM,aAAa;AACrE,MAAK,MAAM,MAAM,UAAU,SAAS,EAAE,EAAE;EACvC,MAAM,MAAM,MAAM,GAAG,QAAQ,SAAS;AACtC,MAAI,MAAM,EAAK,QAAO,cAAc,MAAM;AAC1C,MAAI,MAAM,EAAK,QAAO;;AAEvB,QAAO;;;;;;;;;;AAWR,eAAsB,cAAc,QAAQ,MAAM,UAAU,UAAU;AACrE,MAAK,MAAM,MAAM,aAAa,SAAS,EAAE,CACxC,KAAI,MAAM,GAAG,QAAQ,UAAU,SAAS,CAAG,QAAO;AAEnD,QAAO;;;AAIR,MAAa,sBAAsB,eAAe,OAAM,SAAQ;AAC/D,KAAI,CAAC,KAAQ,wBAAO,IAAI,KAAK;AAC7B,MAAK,MAAM,KAAK,gBAAgB;EAC/B,MAAM,IAAI,MAAM,EAAE,KAAK;AACvB,MAAI,EAAK,QAAO,IAAI,IAAI,EAAE;;AAE3B,wBAAO,IAAI,KAAK;IACd,SAAQ,QAAQ,GAAG;;;;;;AAOtB,eAAsB,mBAAmB,QAAQ;AAChD,QAAO,oBAAoB,MAAM,QAAQ,OAAO,CAAC;;;AAKlD,MAAa,qCAAqC,eAAe,OAAM,SAAQ;AAC9E,KAAI,CAAC,KAAQ,wBAAO,IAAI,KAAK;AAC7B,MAAK,MAAM,KAAK,+BAA+B;EAC9C,MAAM,IAAI,MAAM,EAAE,KAAK;AACvB,MAAI,EAAK,QAAO,IAAI,IAAI,EAAE;;AAE3B,wBAAO,IAAI,KAAK;IACd,SAAQ,QAAQ,GAAG;;;;;;AAQtB,eAAsB,kCAAkC,QAAQ;AAC/D,QAAO,mCAAmC,MAAM,QAAQ,OAAO,CAAC;;;AAIjE,MAAa,kCAAkC,eAAe,OAAM,SAAQ;AAC3E,KAAI,CAAC,KAAQ,QAAO,OAAO,OAAO,KAAK;AACvC,MAAK,MAAM,KAAK,4BAA4B;EAC3C,MAAM,IAAI,MAAM,EAAE,KAAK;AACvB,MAAI,EAAK,QAAO,OAAO,YAAY,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;;AAEvF,QAAO,OAAO,OAAO,KAAK;IACxB,SAAQ,QAAQ,GAAG;;;;;;AAOtB,eAAsB,+BAA+B,QAAQ;AAC5D,QAAO,gCAAgC,MAAM,QAAQ,OAAO,CAAC;;;;;;;AAQ9D,eAAsB,eAAe,QAAQ;CAC5C,MAAM,QAAQ,MAAM,QAAQ,IAAI,kBAAkB,KAAK,CAAC,GAAG,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAI/F,QAHgB,OAAO,YAAY,OAAO,QAAQ,OAAO,QAAQ,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAE,OAAO;AACnG,SAAO,CAAC,GAAG,OAAO,OAAO,EAAE,EAAE,GAAG,GAAG,KAAI,MAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;GACxD,CAAC;;;;;;;AAQJ,eAAsB,SAAS,QAAQ,SAAS,OAAO;CACtD,MAAM,CAAC,MAAM,SAAS,eAAe,MAAM,QAAQ,IAAI;EACtD,QAAQ,IAAI,QAAQ,KAAI,MAAK,EAAE,OAAO,CAAC,CAAC;EACxC,SAAS,eAAe,OAAO,GAAG,EAAE;EACpC,oBAAoB,OAAO,CAAC,MAAK,MAAK,CAAC,GAAG,EAAE,CAAC;EAC7C,CAAC;AACF,QAAO,OAAO,OAAO,EAAE,EAAE,GAAG,MAAM;EAAE,IAAI;EAAQ;EAAS;EAAa,CAAC;;;;;;;;;;;;ACxWxE,UAAU,sBAAsB,aAAa,QAAQ;AACpD,KAAI,CAAC,YAAe;AACpB,MAAK,MAAM,CAAC,OAAO,eAAe,OAAO,QAAQ,YAAY,EAAE;AAC9D,MAAI,CAAC,WAAc;EACnB,MAAM,EAAE,OAAO,QAAQ,SAAS;AAChC,MAAI,UAAU,OACb,OAAM;GAAC;GAAO;GAAK;GAAM;WACf,MAAM,QAAQ,OAAO,IAAI,OAAO,OAC1C,OAAM;GAAC;GAAO;GAAM;GAAO;WACjB,kBAAkB,OAAO,OAAO,KAC1C,OAAM;GAAC;GAAO;GAAM,CAAC,GAAG,OAAO;GAAC;WACtB,QAAQ,OAClB,OAAM;GAAC;GAAO;GAAK;GAAO;;;;;;AAW7B,eAA8B,wBAAwB,aAAa;CAClE,IAAI,qBAAqB,YAAY,QAAO,MAAK,CAAC,EAAE,kBAAkB;CACtE,MAAM,UAAU,IAAI,OAAO;AAE3B,KAAI,mBAAmB,QAAQ;EAC9B,MAAM,cAAc,MAAM,oBAAoB;AAC9C,uBAAqB,mBAAmB,QAAO,MAAK,CAAC,EAAE,cAAc,YAAY,IAAI,EAAE,WAAW,CAAC;;CAEpG,MAAM,SAAS,MAAM,SAAS;AAC9B,MAAK,MAAM,EAAE,iBAAiB,oBAAoB;EACjD,MAAM,SAAS,CAAC,GAAG,sBAAsB,aAAa,OAAO,CAAC;AAC9D,MAAI,CAAC,OAAO,OAAU,QAAO;EAC7B,MAAM,QAAQ,IAAI,OAAO;AACzB,OAAK,MAAM,KAAK,OACf,OAAM,IAAI,GAAG,EAAE;AAEhB,UAAQ,GAAG,MAAM;;CAElB,IAAI,2BAA2B,YAAY,QAAO,MAAK,EAAE,kBAAkB;AAC3E,KAAI,yBAAyB,QAAQ;EACpC,MAAM,0BAA0B,MAAM,mCAAmC;AACzE,6BAA2B,yBAAyB,QAAO,MAAK,CAAC,EAAE,cAAc,wBAAwB,IAAI,EAAE,WAAW,CAAC;;AAE5H,KAAI,CAAC,yBAAyB,OAAU,QAAO;AAC/C,KAAI,yBAAyB,QAAQ;EACpC,MAAM,0BAA0B,OAAO,QAAQ,MAAM,gCAAgC,CAAC;AACtF,OAAK,MAAM,EAAE,aAAa,YAAY,uBAAuB,0BAA0B;GACtF,MAAM,gBAAgB,aAAa,wBAAwB,QAAO,MAAK,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC,KAAI,MAAK,EAAE,GAAG,GAAG,wBAAwB,KAAI,MAAK,EAAE,GAAG;AACpJ,OAAI,CAAC,cAAc,OAAU;GAC7B,MAAM,QAAQ,MAAM,IAAI,qBAAqB,IAAI,MAAM,cAAc;AACrE,QAAK,MAAM,KAAK,sBAAsB,aAAa,OAAO,CACzD,OAAM,IAAI,GAAG,EAAE;AAEhB,WAAQ,GAAG,MAAM;;;AAGnB,QAAO;;;;;;;;;;;;AC/DR,SAAwB,0BAA0B,aAAa,UAAU,QAAQ;AAChF,MAAK,MAAM,CAAC,OAAO,eAAe,OAAO,QAAQ,YAAY,EAAE;AAC9D,MAAI,CAAC,WAAc;EACnB,MAAM,EAAE,OAAO,QAAQ,SAAS;EAChC,MAAM,MAAM,SAAS;AACrB,MAAI,UAAU,QACb;OAAI,QAAQ,MAAS,QAAO;aAClB,MAAM,QAAQ,OAAO,IAAI,OAAO,QAC1C;OAAI,CAAC,OAAO,SAAS,IAAI,CAAI,QAAO;aAC1B,kBAAkB,OAAO,OAAO,MAC1C;OAAI,CAAC,OAAO,IAAI,IAAI,CAAI,QAAO;aACrB,MACV;OAAI,QAAQ,OAAU,QAAO;;;AAG/B,QAAO;;;;;;;;;;;;ACXR,eAA8B,kBAAkB,gBAAgB,UAAU;CACzE,MAAM,qBAAqB,eAAe,QAAO,MAAK,CAAC,EAAE,kBAAkB;CAC3E,MAAM,2BAA2B,eAAe,QAAO,MAAK,EAAE,kBAAkB;;CAEhF,MAAM,sBAAsB,EAAE;CAC9B,MAAM,SAAS,MAAM,SAAS;AAC9B,KAAI,mBAAmB,QAAQ;EAC9B,MAAM,cAAc,MAAM,oBAAoB;AAC9C,OAAK,MAAM,KAAK,oBAAoB;GACnC,MAAM,EAAE,YAAY,gBAAgB;AACpC,OAAI,cAAc,CAAC,YAAY,IAAI,WAAW,CAAI;AAClD,OAAI,eAAe,CAAC,0BAA0B,aAAa,UAAU,OAAO,CAAI;AAChF,uBAAoB,KAAK,EAAE;;;AAG7B,KAAI,yBAAyB,QAAQ;EACpC,MAAM,cAAc,MAAM,gCAAgC;AAC1D,OAAK,MAAM,KAAK,0BAA0B;GACzC,MAAM,EAAE,YAAY,mBAAmB,gBAAgB;AACvD,OAAI,eAAe,CAAC,0BAA0B,aAAa,UAAU,OAAO,CAAI;GAChF,MAAM,iBAAiB,SAAS,qBAAqB;AACrD,OAAI,CAAC,eAAkB;GACvB,MAAM,0BAA0B,YAAY;AAC5C,OAAI,CAAC,wBAA2B;AAChC,OAAI,cAAc,CAAC,wBAAwB,IAAI,WAAW,CAAI;AAC9D,uBAAoB,KAAK,EAAE;;;AAG7B,QAAO;;;;;;;;;;;;AC9BR,eAA8B,yBAAyB,EAAE,UAAU,aAAa,UAAU;CACzF,MAAM,kBAAkB,MAAM,kBAAkB,aAAa,SAAS;AACtE,KAAI,mBAAmB,CAAC,gBAAgB,OAAU,QAAO;CACzD,IAAI,SAAS,IAAI,IAAI,gBAAgB,SAAQ,MAAK,EAAE,SAAS,GAAG,CAAC;CACjE,IAAI,aAAa,IAAI,IAAI,gBAAgB,SAAQ,MAAK,EAAE,UAAU,GAAG,CAAC;AACtE,QAAO,OAAO,GAAG;AACjB,YAAW,OAAO,GAAG;AACrB,KAAI,EAAE,OAAO,OAAO,WAAW,MAAS,QAAO;;;;;;;;CAS/C,SAAS,OAAO,QAAQ,UAAU,QAAQ;;EAEzC,MAAM,QAAQ,EAAE;AAChB,OAAK,MAAM,CAAC,MAAM,UAAU,QAAQ;AACnC,OAAI,CAAC,MAAS;GACd,MAAM,aAAa,CAAC,GAAG,QAAQ,KAAK;GACpC,MAAM,MAAM,WAAW,KAAK,IAAI;AAChC,OAAI,CAAC,MAAM,WAAW,CAAC,OAAO,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAI;GACxG,MAAM,EAAE,SAAS;AACjB,OAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,CAAC,KAAK,OAAO;AACrD,UAAM,QAAQ,SAAS;AACvB;;GAED,MAAM,cAAc,SAAS;GAC7B,MAAM,OAAO,OAAO,QAAQ,KAAK,OAAO;AACxC,OAAI,MAAM,MAET,OAAM,SAAS,MAAM,QAAQ,YAAY,GAAG,cAAc,cAAc,CAAC,YAAY,GAAG,EAAE,EAAE,KAAI,QAAO,OAAO,MAAM,KAAK,IAAI,CAAC;YACpH,eAAe,CAAC,MAAM,QAAQ,YAAY,EAAE;IACtD,MAAM,MAAM,OAAO,MAAM,aAAa,WAAW;AACjD,QAAI,CAAC,OAAO,KAAK,IAAI,CAAI;AACzB,UAAM,QAAQ;;;AAGhB,SAAO;;AAGR,QAAO,OAAO,OAAO,QAAQ,OAAO,EAAE,UAAU,EAAE,CAAC;;;;;;;;;;;;;AC1CpD,eAA8B,uBAAuB,EAAE,UAAU,aAAa,UAAU,aAAa;CACpG,IAAI,UAAU;CACd,MAAM,kBAAkB,MAAM,kBAAkB,aAAa;EAAE,GAAG;EAAU,GAAG;EAAS,CAAC;AACzF,KAAI,mBAAmB,CAAC,gBAAgB,OAAU,QAAO;CACzD,IAAI,SAAS,IAAI,IAAI,gBAAgB,SAAQ,MAAK,EAAE,SAAS,GAAG,CAAC;CACjE,IAAI,aAAa,IAAI,IAAI,gBAAgB,SAAQ,MAAK,EAAE,UAAU,GAAG,CAAC;AACtE,QAAO,OAAO,GAAG;AACjB,YAAW,OAAO,GAAG;AACrB,QAAO,OAAO,OAAO,WAAW,MAAM;EACrC,MAAM,UAAU;AAChB,YAAU,EAAE;AACZ,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE;;GAEnD,MAAM,QAAQ,OAAO;AACrB,OAAI,CAAC,MAAS;AACd,OAAI,CAAC,OAAO,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAI;AAC9D,WAAQ,OAAO;;EAEhB,MAAM,sBAAsB,MAAM,kBAAkB,aAAa;GAAE,GAAG;GAAU,GAAG;GAAS,CAAC;AAC7F,MAAI,uBAAuB,CAAC,oBAAoB,OAAU,QAAO;EACjE,MAAM,YAAY,IAAI,IAAI,oBAAoB,SAAQ,MAAK,EAAE,SAAS,GAAG,CAAC;EAC1E,MAAM,gBAAgB,IAAI,IAAI,oBAAoB,SAAQ,MAAK,EAAE,UAAU,GAAG,CAAC;AAC/E,YAAU,OAAO,GAAG;AACpB,gBAAc,OAAO,GAAG;AACxB,MAAI,UAAU,SAAS,OAAO,QAAQ,cAAc,SAAS,WAAW,KAAQ;AAChF,WAAS;AACT,eAAa;;AAEd,KAAI,EAAE,OAAO,OAAO,WAAW,MAAS,QAAO;;;;;;;;CAS/C,SAAS,OAAO,QAAQ,UAAU,QAAQ;;EAEzC,MAAM,QAAQ,EAAE;AAChB,OAAK,MAAM,CAAC,MAAM,UAAU,QAAQ;AACnC,OAAI,CAAC,MAAS;GACd,MAAM,aAAa,CAAC,GAAG,QAAQ,KAAK;GACpC,MAAM,MAAM,WAAW,KAAK,IAAI;AAChC,QAAK,SAAS,CAAC,MAAM,UAAU,SAAS,CAAC,OAAO,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAI;AAC1H,OAAI,CAAC,OAAO,OAAO,UAAU,KAAK,CAAI;GACtC,MAAM,EAAE,SAAS;AACjB,OAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,CAAC,KAAK,OAAO;AACrD,UAAM,QAAQ,SAAS;AACvB;;GAED,MAAM,cAAc,SAAS;GAC7B,MAAM,OAAO,OAAO,QAAQ,KAAK,OAAO;AACxC,OAAI,MAAM,MACT,OAAM,SAAS,MAAM,QAAQ,YAAY,GAAG,cAAc,CAAC,YAAY,EAAE,KAAI,QAAO,OAAO,MAAM,KAAK,WAAW,CAAC;YACxG,eAAe,CAAC,MAAM,QAAQ,YAAY,EAAE;IACtD,MAAM,MAAM,OAAO,MAAM,aAAa,WAAW;AACjD,QAAI,CAAC,OAAO,KAAK,IAAI,CAAI;AACzB,UAAM,QAAQ;;;AAGhB,SAAO;;AAER,QAAO,OAAO,OAAO,QAAQ,OAAO,EAAE,aAAa,EAAE,CAAC;;;;;;;;;;;;AChEvD,eAA8B,gBAAgB,gBAAgB,UAAU;AACvE,KAAI,MAAM,cAAc,CAAI,QAAO;AACnC,KAAI,CAAC,gBAAgB,OAAU,QAAO;CACtC,MAAM,qBAAqB,eAAe,QAAO,MAAK,CAAC,EAAE,kBAAkB;CAC3E,MAAM,2BAA2B,eAAe,QAAO,MAAK,EAAE,kBAAkB;AAChF,KAAI,CAAC,UAAU;AACd,MAAI,mBAAmB,QAAQ;GAC9B,MAAM,cAAc,MAAM,oBAAoB;AAC9C,QAAK,MAAM,EAAE,gBAAgB,oBAAoB;AAChD,QAAI,cAAc,CAAC,YAAY,IAAI,WAAW,CAAI;AAClD,WAAO;;;AAGT,MAAI,yBAAyB,QAAQ;GACpC,MAAM,cAAc,MAAM,mCAAmC;AAC7D,QAAK,MAAM,EAAE,gBAAgB,0BAA0B;AACtD,QAAI,cAAc,CAAC,YAAY,IAAI,WAAW,CAAI;AAClD,WAAO;;;AAGT,SAAO;;CAER,MAAM,SAAS,MAAM,SAAS;AAC9B,KAAI,mBAAmB,QAAQ;EAC9B,MAAM,cAAc,MAAM,oBAAoB;AAC9C,OAAK,MAAM,EAAC,YAAY,iBAAgB,oBAAoB;AAC3D,OAAI,cAAc,CAAC,YAAY,IAAI,WAAW,CAAI;AAClD,OAAI,eAAe,CAAC,0BAA0B,aAAa,UAAU,OAAO,CAAI;AAChF,UAAO;;;AAGT,KAAI,yBAAyB,QAAQ;EACpC,MAAM,cAAc,MAAM,gCAAgC;AAC1D,OAAK,MAAM,EAAC,YAAY,mBAAmB,iBAAgB,0BAA0B;AACpF,OAAI,eAAe,CAAC,0BAA0B,aAAa,UAAU,OAAO,CAAI;GAChF,MAAM,iBAAiB,SAAS,qBAAqB;AACrD,OAAI,CAAC,eAAkB;GACvB,MAAM,0BAA0B,YAAY;AAC5C,OAAI,CAAC,wBAA2B;AAChC,OAAI,cAAc,CAAC,wBAAwB,IAAI,WAAW,CAAI;AAC9D,UAAO;;;AAGT,QAAO;;;;;;;AC9CR,SAAS,YAAY;;CAEpB,MAAM,aAAa,OAAO,OAAO,KAAK;AACtC,MAAK,MAAM,GAAG,OAAO,MAAM,MAAM,IAAI,YAAY,CAAC,eAAe,CAChE,MAAK,MAAM,CAAC,MAAM,OAAO,OAAO,QAAQ,EAAE,EAAE;AAC3C,MAAI,OAAO,OAAO,WAAc;EAChC,MAAM,OAAO,WAAW,UAAU,OAAO,OAAO,KAAK;AACrD,GAAC,KAAK,WAAW,EAAE,EAAE,KAAK,GAAG;;AAG/B,QAAO;;AAER,MAAM,aAAa,WAAW;;;;;;;AAO9B,SAAgB,eAAe,EAC9B,OACA,kBAAmB,iBACnB,cAAc,aACd,cAAc,aACd,cAAc,eACZ,GAAG,WAAW;;CAEhB,MAAM,QAAQ,UAAU,KAAK,GAAG;AAChC,QAAO;EACN,OAAO,gBAAgB;EACvB,MAAM,iBAAiB,MAAM,OAAO,QAAQ;GAC3C,IAAI,OAAO;AACX,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,iBAAiB,SAAS,EAAE,EAAE;AAC3D,QAAI,OAAO,SAAS,WAAc;AAClC,WAAO,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI;;AAG1C,OAAI,OAAO,qBAAqB,WAC/B,QAAO,MAAM,iBAAiB,MAAM,OAAO,KAAK,IAAI;AAErD,UAAO;;EAER,MAAM,gBAAgB,MAAM,OAAO,QAAQ;AAC1C,OAAI,OAAO,oBAAoB,WAC9B,OAAM,gBAAgB,MAAM,OAAO,OAAO;AAE3C,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,gBAAgB,SAAS,EAAE,EAAE;AAC1D,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,OAAO;;;EAIlC,MAAM,aAAa,MAAM,OAAO,QAAQ;GACvC,IAAI,OAAO;AACX,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,aAAa,SAAS,EAAE,EAAE;AACvD,QAAI,OAAO,SAAS,WAAc;AAClC,WAAO,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI;;AAG1C,OAAI,OAAO,iBAAiB,WAC3B,QAAO,MAAM,aAAa,MAAM,OAAO,KAAK,IAAI;AAEjD,UAAO;;EAER,MAAM,YAAY,MAAM,OAAO,QAAQ;AACtC,OAAI,OAAO,gBAAgB,WAC1B,OAAM,YAAY,MAAM,OAAO,OAAO;AAEvC,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,YAAY,SAAS,EAAE,EAAE;AACtD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,OAAO;;;EAIlC,MAAM,aAAa,MAAM,OAAO,QAAQ,KAAK;GAC5C,IAAI,OAAO;AACX,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,aAAa,SAAS,EAAE,EAAE;AACvD,QAAI,OAAO,SAAS,WAAc;AAClC,WAAO,MAAM,KAAK,MAAM,OAAO,QAAQ,KAAK,IAAI;;AAGlD,OAAI,OAAO,iBAAiB,WAC3B,QAAO,MAAM,aAAa,MAAM,OAAO,QAAQ,KAAK,IAAI;AAEzD,UAAO;;EAER,MAAM,YAAY,MAAM,OAAO,QAAQ,WAAW;AACjD,OAAI,OAAO,gBAAgB,WAC1B,OAAM,YAAY,MAAM,OAAO,QAAQ,UAAU;AAElD,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,YAAY,SAAS,EAAE,EAAE;AACtD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,QAAQ,UAAU;;;EAI7C,MAAM,aAAa,MAAM,OAAO,QAAQ,QAAQ;AAC/C,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,aAAa,SAAS,EAAE,EAAE;AACvD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,QAAQ,OAAO;;AAGzC,OAAI,OAAO,iBAAiB,WAC3B,OAAM,aAAa,MAAM,OAAO,QAAQ,OAAO;;EAGjD,MAAM,YAAY,MAAM,OAAO,QAAQ,QAAQ;AAC9C,OAAI,OAAO,gBAAgB,WAC1B,OAAM,YAAY,MAAM,OAAO,QAAQ,OAAO;AAE/C,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,YAAY,SAAS,EAAE,EAAE;AACtD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,QAAQ,OAAO;;;EAI1C;;;;;;;AAOF,SAAwB,UAAU,GAAG,WAAW;;CAE/C,MAAM,QAAQ,UAAU,KAAK,GAAG;AAChC,SAAQ,OAAO,QAAQ;AACtB,MAAI,CAAC,MAAM,OAAU;AACrB,mBAAiB,OAAO,OAAO,MAAM,OAAO,WAAW;GACtD,IAAI,OAAO;AACX,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,iBAAiB,SAAS,EAAE,EAAE;AAC3D,QAAI,OAAO,SAAS,WAAc;AAClC,WAAO,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI;;AAG1C,UAAO;IACN;AACF,kBAAgB,OAAO,OAAO,MAAM,OAAO,WAAW;AACrD,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,gBAAgB,SAAS,EAAE,EAAE;AAC1D,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,OAAO;;IAGhC;AACF,eAAa,OAAO,OAAO,MAAM,OAAO,WAAW;GAClD,IAAI,OAAO;AACX,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,aAAa,SAAS,EAAE,EAAE;AACvD,QAAI,OAAO,SAAS,WAAc;AAClC,WAAO,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI;;AAG1C,UAAO;IACN;AACF,cAAY,OAAO,OAAO,MAAM,OAAO,WAAW;AACjD,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,YAAY,SAAS,EAAE,EAAE;AACtD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,OAAO;;IAGhC;AACF,eAAa,OAAO,OAAO,MAAM,OAAO,QAAQ,QAAQ;GACvD,IAAI,OAAO;AACX,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,aAAa,SAAS,EAAE,EAAE;AACvD,QAAI,OAAO,SAAS,WAAc;AAClC,WAAO,MAAM,KAAK,MAAM,OAAO,QAAQ,KAAK,IAAI;;AAGlD,UAAO;IACN;AACF,cAAY,OAAO,OAAO,MAAM,OAAO,QAAQ,cAAc;AAC5D,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,YAAY,SAAS,EAAE,EAAE;AACtD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,QAAQ,UAAU;;IAG3C;AACF,eAAa,OAAO,OAAO,MAAM,OAAO,QAAQ,WAAW;AAC1D,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,aAAa,SAAS,EAAE,EAAE;AACvD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,QAAQ,OAAO;;IAGxC;AACF,cAAY,OAAO,OAAO,MAAM,OAAO,QAAQ,WAAW;AACzD,QAAK,MAAM,QAAQ,MAClB,MAAK,MAAM,QAAQ,WAAW,YAAY,SAAS,EAAE,EAAE;AACtD,QAAI,OAAO,SAAS,WAAc;AAClC,UAAM,KAAK,MAAM,OAAO,QAAQ,OAAO;;IAGxC;;;;;;ACnNJ,IAAqB,cAArB,cAAyC,MAAM;CAC9C,SAAS;;;;;;CAMT,YAAY,SAAS,SAAS,KAAK;AAClC,QAAM,QAAQ;AACd,OAAK,SAAS;;;;;;;;;;;;;;;;;ACUhB,eAAsB,iBAAiB,MAAM,OAAO,IAAI,UAAU,UAAU,SAAS,UAAU,UAAU;AAQxG,MAPU,MAAM,KAAK,OACpB,IAAI,MAAM,MAAM,CAAC,OAAO,QAAQ,CAC9B,MAAM,UAAU,MAAM,SAAS,CAC/B,MAAM,UAAU,MAAM,SAAS,CAC/B,MAAM,GAAG,UAAU,IAAI,CAAC,CACxB,MAAM,EAAE,CACV,EACK,OAAU,OAAM,IAAI,YAAY,gBAAgB;;;;;;;;;;AAUvD,SAAwB,cAAc,aAAa,WAAW,OAAO,WAAW,OAAO,UAAU,MAAM,GAAG,aAAa;;;;;;AAMtH,QAAO,SAAU,OAAO,KAAK;AAC5B,eAAa,OAAO,OAAO,MAAM,WAAW;GAE3C,IAAI,QAAQ;GACZ,MAAM,SAAS,OAAO;GACtB,MAAM,QAAQ,IAAI,OAAO;AACzB,QAAK,MAAM,KAAK,YACf,OAAM,IAAI,GAAG,OAAO,GAAG;AAExB,OAAI,QAAQ;IACX,MAAM,CAAC,GAAG,WAAW,cAAc,MAAM,KAAK,OAC7C,IAAI,MAAM,OAAO,KAAK,CAAC,OAAO,SAAS,CAAC,MAAM,MAAM,CAAC,MAAM,GAAG,UAAU,QAAQ,CAAC,CAAC,MAAM,EAAE,CAC1F;AACD,YAAQ;AACR,UAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,MAAM,MAAM,EAAE,GAAG,WAAW,UAAU,EAAE,EAAE,CAAC;AAC3G,UAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,MAAM,MAAM,EAAE,GAAG,WAAW,UAAU,EAAE,EAAE,CAAC;UACrG;;IAGN,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM,KAAK,OACrC,IAAI,MAAM,OAAO,KAAK,CACpB,OAAO,EAAE,GAAG,UAAU,CAAC,CACvB,MAAM,MAAM,CAAC,MAAM,GAAG,UAAU,QAAQ,CAAC,CACzC,MAAM,EAAE,CAAC,KAAK,UAAU,KAAK,CAC/B;AACD,YAAQ,IAAI;;AAEb,UAAO,YAAY;AACnB,UAAO,YAAY,QAAQ;KACzB,KAAK;AACR,eAAa,OAAO,OAAO,MAAM,aAAa,gBAAgB;GAE7D,MAAM,WAAW,eAAe,cAAc,YAAY,eAAe,YAAY;AACrF,OAAI,aAAa,YAAY,cAAc;AAC1C,gBAAY,YAAY,YAAY;AACpC,gBAAY,YAAY,YAAY;AACpC;;GAED,MAAM,QAAQ,IAAI,OAAO;AACzB,QAAK,MAAM,KAAK,YACf,OAAM,IAAI,GAAG,YAAY,MAAM,YAAY,GAAG;AAE/C,OAAI,UAAU;IACb,MAAM,CAAC,UAAU,MAAM,KAAK,OAC3B,IAAI,MAAM,MAAM,CAAC,OAAO;KAAE,KAAK;KAAU,KAAK;KAAU,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,GAAG,UAAU,UAAU,CAAC,CACrG;IACD,MAAM,EAAE,KAAK,QAAQ;AAErB,UAAM,iBAAiB,MAAM,OAAO,YAAY,UAAU,KAAK,KAAK,SAAS,UAAU,SAAS;;AAGjG,SAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,MAAM,YAAY,UAAU,CAAC,MAAM,UAAU,MAAM,YAAY,UAAU,EAAE;KACzI,WAAW,SAAS,GAAG;KACvB,WAAW,SAAS,GAAG;IAExB,CAAC;GAEF,MAAM,OAAO,YAAY,YAAY,YAAY,YAAY;AAC7D,SAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,KAAK,YAAY,UAAU,EAAE,GAC3F,WAAW,UAAU,KAAK,EAC3B,CAAC;AACF,SAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,KAAK,YAAY,UAAU,EAAE,GAC3F,WAAW,UAAU,KAAK,EAC3B,CAAC;GACF,IAAI,SAAS;AACb,OAAI,UAAU;IACb,MAAM,CAAC,GAAG,WAAW,cAAc,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,OAAO,SAAS,CAAC,MAAM,MAAM,CAAC,MAAM,GAAG,UAAU,UAAU,CAAC,CAAC;AACnI,UAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,MAAM,SAAS,EAAE,GAC/E,WAAW,UAAU,KAAK,EAC3B,CAAC;AACF,UAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,MAAM,SAAS,EAAE,GAC/E,WAAW,UAAU,KAAK,EAC3B,CAAC;AACF,aAAS;UACH;;IAEN,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM,KAAK,OACrC,IAAI,MAAM,OAAO,KAAK,CACpB,OAAO,EAAE,GAAG,UAAU,CAAC,CACvB,MAAM,MAAM,CAAC,MAAM,GAAG,UAAU,QAAQ,CAAC,CACzC,MAAM,EAAE,CAAC,KAAK,UAAU,KAAK,CAC/B;AACD,aAAS,IAAI;;GAGd,MAAM,MAAM,SAAS,YAAY;AACjC,SAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,UAAU,KAAK,EAAE,EAAE;KACvE,WAAW,YAAY,KAAK,GAAG;KAC/B,WAAW,YAAY,KAAK,GAAG;IAChC,CAAC;AACF,eAAY,YAAY,YAAY,YAAY;AAChD,eAAY,YAAY,YAAY,YAAY;KAE9C,KAAK;;;;;;;;;;;;;;AC/HV,SAAS,oBAAoB,QAAQ,QAAQ;;CAE5C,MAAM,MAAM,EAAE;AAEd,MAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,OAAO,QAAQ,OAAO,EAAE;AAChE,MAAI,OAAO,IAAI,KAAK,CAAI;AACxB,MAAI,CAAC,KAAQ;AACb,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;AAC3D,OAAI,QAAQ;IACX;IACA,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,SAAS,MAAM;IACf,OAAO,MAAM;IAGb,SAAS,MAAM;IAEf,aAAa,QAAQ,MAAM,eAAe,MAAM,YAAY,MAAM,YAAY,MAAM,WAAW;IAC/F,WAAW,QAAQ,MAAM,WAAW,MAAM,aAAa,MAAM,YAAY,MAAM,YAAY,MAAM,WAAW;IAE5G,aAAa,MAAM;IACnB,OAAO,MAAM;IACb,aAAa,MAAM;IACnB,aAAa,MAAM;IAEnB,MAAM,MAAM;IACZ,KAAK,MAAM;IACX,KAAK,MAAM;IAEX,UAAU,MAAM;IAChB,UAAU,MAAM;IAChB,WAAW,MAAM;IACjB,UAAU,MAAM;IAEhB,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,SAAS,MAAM;IACf,QAAQ,MAAM;IACd,OAAO,MAAM;IACb,MAAM,MAAM;IACZ;AACD;;EAID,MAAM,SAAS,KAAK;AACpB,MAAI,CAAC,OAAU;EAGf,MAAM,YAAY,oBAAoB,QADxB,IAAI,IAAI,OAAO,KAAK,MAAM,eAAe,EAAE,CAAC,CAAC,CACP;AACpD,MAAI,CAAC,UAAa;AAClB,MAAI,QAAQ;GACX,MAAM;GACN,OAAO,MAAM;GACb,SAAS,MAAM;GAEf,aAAa,QAAQ,MAAM,YAAY;GACvC,WAAW,QAAQ,MAAM,UAAU;GAEnC,aAAa,MAAM;GACnB,OAAO,MAAM;GACb,aAAa,MAAM;GACnB,aAAa,MAAM;GACnB,UAAU,MAAM;GAChB,UAAU,MAAM;GAChB,WAAW,MAAM;GACjB,UAAU,MAAM;GAChB,OAAO,MAAM;GACb,UAAU,MAAM;GAChB,SAAS,MAAM;GACf,QAAQ,MAAM;GACd;;AAEF,KAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAU,QAAO;AACvC,QAAO;;;;;;;AAQR,SAAwB,iBAAiB,QAAQ;AAChD,QAAO,oBAAoB,wBAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;;;;;;;ACzFpD,IAAI,eAAe,EAAE;AACrB,MAAM,aAAa;CAClB,MAAM,SAAS,OAAO,QAAQ,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,SAAQ,MAAK,OAAO,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE;AAClH,gBAAe,OAAO,YAAY,OAAO,QAAQ,OAAO,CAAC,KAAK,CAAC,GAAE,OAAO,CAAC,GAAG,GAAG,KAAI,MAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;GAC5G,KAAS;;;;;;AAMZ,eAAsB,gBAAgB,MAAM;AAC3C,KAAI,CAAC,OAAO,OAAO,cAAc,KAAK,CAAI,QAAO,EAAE;AAGnD,SADa,MAAM,QAAQ,IAAI,aAAa,MAAM,KAAI,MAAK,OAAO,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,EAClF,MAAM;;;;;;;;;;ACRnB,eAAe,MAAM,OAAO;CAC3B,MAAM,IAAI,MAAM;AAChB,KAAI,CAAC,EAAK,QAAO;AACjB,QAAO,MAAM,IAAI,EAAE;;;;;;;;AASpB,SAAS,OAAO,KAAK,KAAK,QAAQ;AACjC,KAAI,OAAO,OAAO,KAAK,IAAI,CAAI,QAAO,IAAI;AAC1C,QAAO,IAAI,OAAO,QAAQ;;;;;;;;;;;;;;;;;AAiB3B,SAAS,oBAAoB;AAC5B,QAAO;EAAE,OAAO;EAAI,UAAU;EAAI,OAAO,EAAE;EAAE,UAAU,EAAE;EAAE,OAAO,EAAE;EAAE,UAAU,EAAE;EAAE,OAAO,EAAE;EAAE,UAAU,EAAE;EAAE;;AAG9G,SAAS,WAAW;;CAEnB,MAAM,YAAY,EAAE;;CAEpB,MAAM,eAAe,EAAE;AACvB,MAAK,MAAM,GAAG,MAAM,eAAe,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE;AACtE,MAAI,CAAC,cAAc,OAAO,eAAe,SAAY;EACrD,MAAM,cAAc,OAAO,WAAW,aAAuD,EAAE,EAAE;EACjG,MAAM,iBAAiB,OAAO,cAAc,aAAuD,EAAE,EAAE;AAEvG,OAAK,MAAM,CAAC,IAAI,YAAY,OAAO,QAAQ,WAAW,CAErD,MAAK,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE;AACtC,OAAI,CAAC,UAAU,OAAO,WAAW,SAAY;GAC7C,IAAI,EAAE,OAAO,UAAU,KAAK,OAAO,UAAU,OAAO,UAAU,OAAO,aAAa;AAClF,OAAI,KAAK;AACR,QAAI,OAAO,UAAU,cAAc,KAClC,aAAY,GAAG,MAAM,MAAM,MAAM,GAAG,EAAE,CAAC;AAExC,QAAI,OAAO,UAAU,cAAc,KAClC,aAAY,GAAG,MAAM,MAAM,MAAM,GAAG,EAAE,CAAC;AAExC,QAAI,OAAO,UAAU,cAAc,KAClC,aAAY,GAAG,MAAM,MAAM,MAAM,GAAG,EAAE,CAAC;;GAGzC,MAAM,aAAa,OAAO,aAAa,IAAI,kBAAkB;AAC7D,OAAI,SAAS,OAAO,UAAU,SAAY,YAAW,QAAQ;AAC7D,OAAI,YAAY,OAAO,aAAa,SAAY,YAAW,WAAW;AACtE,OAAI,OAAO,UAAU,WAAc,YAAW,MAAM,KAAK,MAAM;AAC/D,OAAI,OAAO,aAAa,WAAc,YAAW,SAAS,KAAK,SAAS;AACxE,OAAI,OAAO,UAAU,WAAc,YAAW,MAAM,KAAK,MAAM;AAC/D,OAAI,OAAO,aAAa,WAAc,YAAW,SAAS,KAAK,SAAS;AACxE,OAAI,OAAO,UAAU,WAAc,YAAW,MAAM,KAAK,MAAM;AAC/D,OAAI,OAAO,aAAa,WAAc,YAAW,SAAS,KAAK,SAAS;GACxE,MAAM,QAAQ,OAAO,QAAQ,YAAY,OAAO;AAChD,OAAI,CAAC,MAAS;GACd,MAAM,gBAAgB,OAAO,gBAAgB,OAAO,kBAAkB;AAGtE,OAAI,SAAS,OAAO,UAAU,SAAY,eAAc,WAAW;AACnE,OAAI,YAAY,OAAO,aAAa,SAAY,eAAc,QAAQ;AACtE,OAAI,OAAO,UAAU,WAAc,eAAc,SAAS,KAAK,MAAM;AACrE,OAAI,OAAO,aAAa,WAAc,eAAc,MAAM,KAAK,SAAS;AACxE,OAAI,OAAO,UAAU,WAAc,eAAc,SAAS,KAAK,MAAM;AACrE,OAAI,OAAO,aAAa,WAAc,eAAc,MAAM,KAAK,SAAS;AACxE,OAAI,OAAO,UAAU,WAAc,eAAc,SAAS,KAAK,MAAM;AACrE,OAAI,OAAO,aAAa,WAAc,eAAc,MAAM,KAAK,SAAS;;;AAK3E,MAAK,MAAM,QAAQ,OAAO,KAAK;EAAE,GAAG;EAAW,GAAG;EAAc,CAAC,EAAE;EAClE,IAAI,cAAc,OAAO,OAAO,WAAW,KAAK,IAAI,UAAU,SAAS;EACvE,IAAI,iBAAiB,OAAO,OAAO,cAAc,KAAK,IAAI,aAAa,SAAS;AAChF,MAAI,CAAC,eAAe,gBAAgB;AACnC,iBAAc;AACd,aAAU,QAAQ;;AAEnB,MAAI,CAAC,YAAe;AAEpB,OAAK,MAAM,MAAM,OAAO,KAAK;GAAE,GAAG;GAAa,GAAG;GAAgB,CAAC,EAAE;GACpE,IAAI,YAAY,OAAO,OAAO,aAAa,GAAG,IAAI,YAAY,OAAO;GACrE,IAAI,eAAe,kBAAkB,OAAO,OAAO,gBAAgB,GAAG,IAAI,eAAe,OAAO;AAChG,OAAI,CAAC,aAAa,cAAc;AAC/B,gBAAY;AACZ,gBAAY,QAAQ;;AAErB,OAAI,CAAC,UAAa;AAClB,OAAI,CAAC,UAAU,MAAS,WAAU,QAAQ,cAAc,SAAS;AACjE,OAAI,CAAC,UAAU,SAAY,WAAU,WAAW,cAAc,YAAY,IAAI;AAC9E,OAAI,CAAC,aAAgB;AACrB,QAAK,MAAM,MAAM,aAAa,MAAS,WAAU,MAAM,KAAK,GAAG;AAC/D,QAAK,MAAM,MAAM,aAAa,SAAY,WAAU,SAAS,KAAK,GAAG;AACrE,QAAK,MAAM,MAAM,aAAa,MAAS,WAAU,MAAM,KAAK,GAAG;AAC/D,QAAK,MAAM,MAAM,aAAa,SAAY,WAAU,SAAS,KAAK,GAAG;AACrE,QAAK,MAAM,MAAM,aAAa,MAAS,WAAU,MAAM,KAAK,GAAG;AAC/D,QAAK,MAAM,MAAM,aAAa,SAAY,WAAU,SAAS,KAAK,GAAG;;;AAKvE,QAAO;;;;;;AAMR,SAAS,YAAY,WAAW;;CAE/B,MAAM,OAAO,EAAE;AACf,MAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,UAAU,CAEtD,MAAK,MAAM,CAAC,UAAU,WAAW,OAAO,QAAQ,QAAQ,CACvD,MAAK,KAAK;EACT;EAAM;EACN,OAAO,OAAO;EACd,UAAU,OAAO;EACjB,OAAO,QAAQ,OAAO,MAAM,OAAO;EACnC,UAAU,QAAQ,OAAO,SAAS,OAAO;EACzC,OAAO,QAAQ,OAAO,MAAM,OAAO;EACnC,UAAU,QAAQ,OAAO,SAAS,OAAO;EACzC,OAAO,QAAQ,OAAO,MAAM,OAAO;EACnC,UAAU,QAAQ,OAAO,SAAS,OAAO;EAEzC,CAAC;;AAQL,IAAW,WAAW,UAAU;AAChC,IAAW,YAAY,YAAY,SAAS;AAC5C,MAAM,aAAa;AAClB,YAAW,UAAU;AACrB,aAAY,YAAY,SAAS;EAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7HF,UAAU,aAAa,QAAQ,MAAM,KAAK;CACzC,MAAM,OAAO,KAAK,OAAO;AACzB,KAAI,CAAC,KAAQ,QAAO;CACpB,MAAM,SAAS,OAAO,OAAO,QAAQ,KAAK,IAAI,OAAO;AACrD,KAAI,CAAC,OAAU,QAAO;CACtB,MAAM,OAAO,OAAO;AACpB,KAAI,CAAC,KAAQ,QAAO;AAEpB,KAAI,KAAK,QAAQ;AAChB,MAAI,OAAO,SAAS,SAAY,QAAO;AAEvC,MAAI,CADU,KAAK,MACL,QAAO;AAErB,SAAO;;AAGR,KAAI,IAAI,WAAW,GAAG;AACrB,MAAI,OAAO,SAAS,SAAY,QAAO;AAEvC,MAAI,CADU,KAAK,MACL,QAAO;AAErB,SAAO;;AAER,KAAI,OAAO,SAAS,aAAa,OAAO,SAAS,YAAY,KAAK,OACjE,QAAO;CAGR,MAAM,GAAG,OAAO,UAAU,QAAQ;AAClC,KAAI,aAAa,KAChB,QAAO,MAAM;EAAE,MAAM;EAAS;EAAQ,MAAM,OAAO,UAAU;EAAM,OAAO;EAAM;EAAU,KAAK,QAAQ,KAAK;EAAE;AAE/G,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC9D,QAAO,MAAM;EAAE,MAAM;EAAS;EAAQ,MAAM,OAAO,UAAU;EAAM;EAAO;EAAU,KAAK,QAAQ,KAAK;EAAE;CAEzG,MAAM,EAAE,OAAO,OAAO,OAAO,WAAW;AACxC,KAAI,OACH,QAAO,MAAM;EAAE,MAAM;EAAS;EAAQ,MAAM,OAAO,UAAU;EAAM,OAAO;EAAQ;EAAU,KAAK,QAAQ,KAAK;EAAE;AAIjH,KAAI,OAAO;AACV,MAAI,MAAS,QAAO;EACpB,MAAM,cAAc,OAAO,OAAO,QAAQ,KAAK,IAAI,OAAO;AAC1D,MAAI,CAAC,YAAe,QAAO;EAC3B,MAAM,OAAO,YAAY;AACzB,MAAI,CAAC,KAAQ,QAAO;AACpB,MAAI,OAAO,SAAS,aAAa,OAAO,SAAS,YAAY,KAAK,OACjE,QAAO;AAER,SAAO,MAAM;GAAE,MAAM;GAAS;GAAQ,MAAM,OAAO,UAAU;GAAM,OAAO,YAAY,UAAU;GAAO;GAAa;GAAU,KAAK,QAAQ,KAAK;GAAE;;AAKnJ,QAAO;;;;;;;;AASR,UAAU,YAAY,QAAQ,KAAK;CAClC,MAAM,OAAO,IAAI;AACjB,KAAI,KAAK,MAAK,MAAK,MAAM,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAI,QAAO;AAC3D,QAAO,OAAO,aAAa,QAAQ,KAAK,KAAI,MAAK,OAAO,MAAM,WAAW,IAAI,EAAE,GAAG,EAAE,IAAI;;;;;;;;AAYzF,UAAU,UAAU,QAAQ,IAAI;;CAE/B,IAAI,QAAQ;AACZ,MAAK,MAAM,QAAQ,GAClB,KAAI,MAAM,QAAQ,KAAK,EAAE;EACxB,MAAM,IAAI,OAAO,YAAY,QAAQ,KAAK;AAC1C,MAAI,EAAK,UAAS,SAAS,IAAI,OAAO,EAAE,GAAG,EAAE;QACvC;EACN,MAAM,IAAI,OAAO,QAAQ,QAAQ,KAAK,KAAK,KAAK,GAAG;AACnD,MAAI,EAAK,UAAS,SAAS,IAAI,OAAO,EAAE,GAAG,EAAE;;AAK/C,QAAO;;;;;;;;;AAWR,UAAiB,QAAQ,QAAQ,KAAK,GAAG,QAAQ;;CAEhD,IAAI,QAAQ;AACZ,KAAI,IACH,MAAK,MAAM,QAAQ,KAAK;EACvB,MAAM,IAAI,OAAO,YAAY,QAAQ,KAAK;AAC1C,MAAI,EAAK,UAAS,SAAS,IAAI,OAAO,EAAE,IAAI,EAAE;;AAGhD,MAAK,MAAM,MAAM,QAAQ;AACxB,MAAI,CAAC,GAAM;EACX,MAAM,IAAI,OAAO,UAAU,QAAQ,GAAG;AACtC,MAAI,EAAK,UAAS,SAAS,IAAI,OAAO,EAAE,IAAI,EAAE;;AAE/C,QAAO;;;;;;;;;;;;;;ACtHR,UAAU,YAAY,KAAK;AAC1B,KAAI,CAAC,IAAO;AACZ,MAAK,MAAM,KAAK,MAAM,QAAQ,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE;AACjD,MAAI,CAAC,EAAK;AACV,MAAI,OAAO,MAAM,UAAU;AAC1B,SAAM;AACN;;AAED,MAAI,OAAO,MAAM,SAAY;EAC7B,MAAM,YAAY,EAAE;AACpB,MAAI,CAAC,aAAa,OAAO,cAAc,SAAY;AACnD,QAAM;;;;;;;;AAQR,UAAU,OAAO,OAAO;CACvB,MAAM,OAAO,MAAM;CACnB,MAAM,YAAY,MAAM;CACxB,MAAM,QAAQ,MAAM,QAAQ,OAAO;AACnC,KAAI,OAAO,SAAS,SAAY;AAChC,KAAI,CAAC,MAAM;AACV,OAAK,MAAM,YAAY,YAAY,UAAU,EAAE;AAC9C,SAAM,IAAI,WAAW;AACrB,SAAM,GAAG,WAAW;;AAEpB,QAAM,GAAG;AACV;;AAED,MAAK,MAAM,YAAY,YAAY,UAAU,EAAE;AAC9C,QAAM,GAAG,KAAK,GAAG,WAAW;AAC5B,QAAM,GAAG,WAAW;;AAErB,OAAM,GAAG,OAAO;AAChB,OAAM,GAAG;;;;;;AAOV,eAAe,UAAU,OAAO;CAC/B,MAAM,WAAW,MAAM;AACvB,KAAI,aAAa,KAChB,QAAO,MAAM,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAEnD,MAAK,MAAM,KAAK,OAAO,MAAM,OAAO,EAAE;EACrC,MAAM,YAAY,OAAO,OAAO,UAAU,EAAE,IAAI,SAAS;AACzD,MAAI,CAAC,UAAa;EAClB,MAAM,KAAK,OAAO,OAAO,WAAW,SAAS,IAAI,UAAU;AAC3D,MAAI,CAAC,GAAM;AACX,MAAI,MAAM,SAAS,SAAS;AAC3B,QAAK,MAAM,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,OAAO;IACpD,MAAM,IAAI,MAAM,GAAG,MAAM,MAAM,MAAM,OAAO,MAAM,OAAO;AACzD,QAAI,EAAK,QAAO;;AAEjB;;AAED,MAAI,MAAM,SAAS,SAAS;AAC3B,QAAK,MAAM,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,OAAO;IACpD,MAAM,IAAI,MAAM,GAAG,MAAM,MAAM,MAAM,OAAO,MAAM,QAAQ,MAAM,YAAY;AAC5E,QAAI,EAAK,QAAO;;AAEjB;;;AAIF,KAAI,MAAM,SAAS,QAClB,MAAK,MAAM,KAAK,OAAO,MAAM,YAAY,EAAE;EAC1C,MAAM,YAAY,OAAO,OAAO,UAAU,EAAE,IAAI,SAAS;AACzD,MAAI,CAAC,UAAa;EAClB,MAAM,KAAK,OAAO,OAAO,WAAW,SAAS,IAAI,UAAU;AAC3D,MAAI,CAAC,GAAM;AACX,OAAK,MAAM,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,OAAO;GACpD,MAAM,IAAI,MAAM,GAAG,MAAM,OAAO,MAAM,MAAM,MAAM,aAAa,MAAM,OAAO;AAC5E,OAAI,EAAK,QAAO;;;AAKnB,QAAO;;;;;;;;;;AAWR,eAAsB,aAAa,QAAQ,KAAK,IAAI,KAAK;AACxD,QAAO,OAAO,kBAAkB,QAAQ,QAAQ,KAAK,IAAI,IAAI,EAAE,WAAW,KAAK;;;;;;;;;;;;ACxGhF,SAAwB,WAAW,QAAQ,MAAM,aAAa;AAC7D,YAAW,QAAQ,KAAK;AACxB,MAAK,OAAO,OAAO,YAAY"}
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@yongdall/core",
3
+ "type": "module",
4
+ "main": "./index.mjs",
5
+ "exports": {
6
+ ".": "./index.mjs"
7
+ },
8
+ "version": "0.1.0",
9
+ "description": "",
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC",
13
+ "dependencies": {
14
+ "@yongdall/common": "^0.1.0",
15
+ "@yongdall/context": "^0.1.0",
16
+ "@yongdall/model": "^0.1.0"
17
+ },
18
+ "devDependencies": {
19
+ "@yongdall/types": "^0.1.0"
20
+ }
21
+ }