@yongdall/api-model 0.5.0 → 0.5.1
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/package.json +1 -1
- package/routers.yongdall.mjs +2 -2
- package/routers.yongdall.mjs.map +1 -1
package/package.json
CHANGED
package/routers.yongdall.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as useModelId, i as useModel, n as useDocument, r as modelId, t as documentId } from "./useDocument-Bsmiy9SB.mjs";
|
|
2
|
-
import { Search, getPatternFields,
|
|
2
|
+
import { Pattern, Search, getPatternFields, yieldPermissionConstraintFields } from "@yongdall/common";
|
|
3
3
|
import { Query, Where, getLabelPattern, getModelOptions } from "@yongdall/model";
|
|
4
4
|
import { ApiRouter, Param, e404, enumRouter, k99Context, useBody } from "@yongdall/http";
|
|
5
5
|
import { createStore } from "@yongdall/context";
|
|
@@ -42,7 +42,7 @@ async function loadDocumentLabel(list, model, databaseId) {
|
|
|
42
42
|
}
|
|
43
43
|
const result = await useDatabase(databaseId).select(query.where(where));
|
|
44
44
|
if (!result.length) return;
|
|
45
|
-
const labels = Object.fromEntries(result.map((v) => [primaryFields.map((f) => v[f]).join("$"),
|
|
45
|
+
const labels = Object.fromEntries(result.map((v) => [primaryFields.map((f) => v[f]).join("$"), Pattern.generate(labelPattern, v)]));
|
|
46
46
|
for (const [, id, data, field] of list) {
|
|
47
47
|
const label = Object.hasOwn(labels, id) && labels[id];
|
|
48
48
|
if (!label) continue;
|
package/routers.yongdall.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routers.yongdall.mjs","names":["documentRouter","modelsRouter","modelServicesRouter","documentsRouter","optionsRouter","documentRouter"],"sources":["../../api/api-model/utils.mjs","../../api/api-model/routers/useModelService.mjs","../../api/api-model/routers/model.documents.mjs","../../api/api-model/routers/models.mjs","../../api/api-model/routers/model.document.mjs","../../api/api-model/routers/model.options.mjs","../../api/api-model/routers/modelServices.mjs","../../api/api-model/routers/index.mjs"],"sourcesContent":["/** @import { ModelTable, TableDefine } from '@yongdall/model'*/\nimport { getPatternFields, runPattern } from '@yongdall/common';\nimport { Query, getLabelPattern, Where } from '@yongdall/model';\nimport { useDatabase } from '@yongdall/connection';\nimport { getModel } from '@yongdall/core';\n\n\n/**\n * \n * @param {[model: string, id: any, data: Record<string, any>, field: string][]} list\n * @param {TableDefine} model\n * @param {string?} [databaseId]\n */\nasync function loadDocumentLabel(list, model, databaseId) {\n\tconst labelPattern = getLabelPattern(model);\n\tif (!labelPattern) { return; }\n\tconst labelFields = getPatternFields(labelPattern);\n\tif (!labelFields.length) { return; }\n\tconst primaryFields = Object.entries(model.fields)\n\t\t.filter(([, v]) => v.primary)\n\t\t.sort(([, a], [, b]) => Number(a.primary) - Number(b.primary))\n\t\t.map(([v]) => v);\n\tif (!primaryFields.length) { return; }\n\tlet query = new Query(model, true);\n\tquery = query.select(primaryFields).select(labelFields);\n\tconst ids = [...new Set(list.map(([, id]) => id))];\n\tlet where = new Where();\n\tif (primaryFields.length === 1) {\n\t\tconst [field] = primaryFields;\n\t\twhere = where.and(field, 'in', ids);\n\t} else {\n\t\t/** @type {} */\n\t\tconst idsMap = [];\n\t\tids.map(v => `${v}`.split('$'));\n\t\tfor (const id of ids) {\n\t\t\tconst values = `${id}`.split('$');\n\t\t\tif (values.length !== primaryFields.length) { continue; }\n\t\t\tidsMap.push([values]);\n\t\t}\n\t\tif (!idsMap.length) { return; }\n\t\twhere = where.and(primaryFields, 'in', idsMap);\n\n\n\t}\n\tconst result = await useDatabase(databaseId).select(query.where(where));\n\tif (!result.length) { return; }\n\tconst labels = Object.fromEntries(result.map(v => [\n\t\tprimaryFields.map(f => v[f]).join('$'),\n\t\trunPattern(labelPattern, v)\n\t]));\n\tfor (const [, id, data, field] of list) {\n\t\tconst label = Object.hasOwn(labels, id) && labels[id];\n\t\tif (!label) { continue; }\n\t\tdata[`${field}~label`] = label;\n\t}\n}\n/**\n * \n * @param {(Record<string, any> | null)[]} list \n * @param {ModelTable} model \n */\nexport async function loadDocumentsLabel(list, model) {\n\t/** @type {[model: string, id: any, data: Record<string, any>, field: string][]} */\n\tconst setList = [];\n\t/** @type {[model: ModelTable, list: (Record<string, any> | null)[]][]} */\n\tconst queue = [[model, list]];\n\tfor (let line = queue.shift(); line; line = queue.shift()) {\n\t\tconst [model, list] = line;\n\t\tfor (const [name, field] of Object.entries(model.fields)) {\n\t\t\tconst type = field.type;\n\t\t\tif (!type) { continue; }\n\t\t\tif (typeof type === 'object') {\n\t\t\t\tqueue.push([type, list.flatMap(v => v?.[name] || [])]);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst modelName = field.model;\n\t\t\tif (!modelName) { continue; }\n\t\t\tfor (const item of list) {\n\t\t\t\tif (!item) { continue; }\n\t\t\t\tconst id = item[name];\n\t\t\t\tif (!id) { continue; }\n\t\t\t\tsetList.push([modelName, id, item, name]);\n\t\t\t}\n\t\t}\n\t}\n\tconst promises = [];\n\tfor (const [modelName, list] of Object.entries(Object.groupBy(setList, v => v[0]))) {\n\t\tif (!list) { continue; }\n\t\tpromises.push(\n\t\t\tgetModel(modelName)\n\t\t\t\t.then(model => model && loadDocumentLabel(list, model, model.databaseId)),\n\t\t);\n\t}\n\tawait Promise.all(promises);\n\n}\n","/** @import { ModelService } from '@yongdall/types' */\nimport { k99Context } from '@yongdall/http';\nimport { createStore } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { Param } from '@yongdall/http';\nimport { useDatabase } from '@yongdall/connection';\nimport { useModelId } from './useModel.mjs';\n\n\n\nexport const modelServiceParam = new Param();\nconst [getter, setter] = createStore(/** @type {Promise<[ModelService, string]?>?} */(null));\n\n/**\n * \n * @returns {Promise<[ModelService, string]?>}\n */\nasync function loadModelService() {\n\tconst ctx = k99Context();\n\tif (!ctx) { return null}\n\tconst serviceId = modelServiceParam.param(ctx) || '';\n\tif (!serviceId) { return null}\n\tconst modelId = await useModelId()\n\tconst model = await getModel('modelService');\n\tif (!model) { return null; }\n\t\tconst database = useDatabase(model.databaseId);\n\tlet sql = new Query(model, true).where('id', serviceId);\n\tconst modelField = model.fields.model;\n\tif (modelField && typeof modelField.type === 'string' && !modelField.array) {\n\t\tsql = sql.where(modelField.column || 'model', modelId);\n\t}\n\tconst service = await database.first(sql);\n\tif (!service) { return null; }\n\treturn [service, serviceId];\n\n}\nexport default function useModelService() {\n\tlet s = getter();\n\tif (!s) {\n\t\ts = loadModelService()\n\t\tsetter(s);\n\t}\n\treturn s.then(v => v?.[0] || null);\n}\n","import { Search, yieldPermissionConstraintFields } from '@yongdall/common';\nimport { Query } from '@yongdall/model';\nimport { useBody, e404, enumRouter } from '@yongdall/http';\nimport { ApiRouter } from '@yongdall/http';\nimport useDocument, { documentId } from './useDocument.mjs';\nimport { useDatabase } from '@yongdall/connection';\nimport useModel, { useModelId } from './useModel.mjs';\nimport { createPermissionMatches, getModelAuthorizationPermissions, filterPermissionDocument, search2where } from '@yongdall/core';\nimport { loadDocumentsLabel } from '../utils.mjs';\nimport useModelService from './useModelService.mjs';\n\nconst documentsRouter = new ApiRouter();\n\n\n\ndocumentsRouter.get(async function (ctx) {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'query', modelService?.permissionGroupId);\n\tif (!permissions?.length) { return e404(); }\n\tconst { sort, offset, limit, select, where, orWhere, or, primary, total: hasTotal } = Search.merge(\n\t\tSearch.parse(ctx.url.search.slice(1)),\n\t\tawait useBody() || {},\n\t);\n\n\tconst permissionMatches = await createPermissionMatches(permissions);\n\n\tlet modelQuery = new Query(model, true).offset(offset).limit(limit);\n\tif (permissionMatches) {\n\t\tmodelQuery = modelQuery.where(permissionMatches);\n\t}\n\tif (primary?.length) {\n\t\tmodelQuery = modelQuery.primary(primary);\n\t}\n\tconst searchWhere = await search2where(model.fields, where, orWhere, or);\n\tif (searchWhere) { modelQuery = modelQuery.where(searchWhere); }\n\n\tmodelQuery = modelQuery.sort();\n\tif (sort) { modelQuery = modelQuery.sort(...sort); }\n\tconst allFields = [\n\t\tselect || [],\n\t\tObject.entries(model.fields).filter(v => v[1].primary).map(v => v[0]),\n\t\tpermissionMatches && permissions.flatMap(v => [...yieldPermissionConstraintFields(v)]) || [],\n\t].flat();\n\n\tconst [result, total] = await useDatabase(model.databaseId).transaction(t => Promise.all([\n\t\tt.search(modelQuery, allFields),\n\t\thasTotal ? t.count(modelQuery) : -1,\n\t]));\n\n\tconst documents = await Promise.all(result.map(v => filterPermissionDocument(model, permissions, v)));\n\tawait loadDocumentsLabel(documents, model);\n\treturn { documents, total };\n});\n\ndocumentsRouter.post(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'create', modelService?.permissionGroupId);\n\tif (!permissions?.length) { return e404(); }\n\tconst data = await useBody() || {};\n\tconst newDocument = data.document;\n\tif (!newDocument) { return e404(); }\n\tconst document = await filterPermissionDocument(model, permissions, newDocument);\n\tif (!document) { return e404(); }\n\tconst doc = await useDatabase(model.databaseId).create(model, document);\n\treturn doc;\n});\n\nconst documentRouter = documentsRouter.route`${documentId}`();\ndocumentRouter.guard(async (ctx) => {\n\tconst doc = await useDocument();\n\tif (doc) { return; }\n\treturn e404();\n});\n\ndocumentRouter.route(enumRouter('documentApi'));\n\nexport default documentsRouter;\n","import { ApiRouter } from '@yongdall/http';\nimport { e404, enumRouter } from '@yongdall/http';\nimport {getModelPermissions, toDocumentFields} from '@yongdall/core';\nimport useModel, { modelId, useModelId } from './useModel.mjs';\nimport { getModelOptions } from '@yongdall/model';\n\n\n\nconst modelsRouter = new ApiRouter();\nconst modelRouter = modelsRouter.route`${modelId}`();\n\nmodelRouter.get(async function getDefine(ctx) {\n\tconst [model, modelId] = await Promise.all([\n\t\tuseModel(),\n\t\tuseModelId(),\n\t]);\n\tif (!modelId || !model) { return null; }\n\treturn {\n\t\t...getModelOptions(model),\n\t\tid: modelId,\n\t\tfields: toDocumentFields(model.fields),\n\t\tpermissions: await getModelPermissions(modelId) || [],\n\t\n\t}\n});\nmodelRouter.route(enumRouter('modelApi'));\nmodelRouter.route(enumRouter('modelServiceApi'));\n\nexport default modelsRouter;\n","import { e404, Param, useBody } from '@yongdall/http';\nimport { ApiRouter } from '@yongdall/http';\nimport useDocument from './useDocument.mjs';\nimport { useDatabase } from '@yongdall/connection';\nimport useModel, { useModelId } from './useModel.mjs';\nimport { filterPermissionDocument, filterPermissionUpdate, getModelAuthorizationPermissions, testPermissions } from '@yongdall/core';\nimport useModelService from './useModelService.mjs';\n\n\nconst documentRouter = new ApiRouter();\n\n\ndocumentRouter.get(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst readPermissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!readPermissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst doc = await filterPermissionDocument(model, readPermissions, document);\n\tif (!doc) { return e404(); }\n\treturn { document: doc };\n});\n\ndocumentRouter.put(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst updatePermissions = await getModelAuthorizationPermissions(modelId, 'update', modelService?.permissionGroupId);\n\tif (!updatePermissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst data = await useBody();\n\tif (!data) { return; }\n\tconst newValue = data.document;\n\tif (!newValue) { return; }\n\tconst newData = await filterPermissionUpdate(model, updatePermissions, document, newValue);\n\tconst result = newData && Object.keys(newData).length\n\t\t? await useDatabase(model.databaseId).save(model, document, newData)\n\t\t: document;\n\tif (!result) { return {}; }\n\tconst readPermissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!readPermissions?.length) { return {}; }\n\n\treturn await filterPermissionDocument(model, readPermissions, result);\n});\n\ndocumentRouter.delete(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!permissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tif (!await testPermissions(permissions, document)) { return e404(); }\n\tawait useDatabase(model.databaseId).destroy(model, document).then(Boolean);\n\tctx.status = 204;\n});\n\n\nconst fieldParam = new Param();\n\n// TODO: GET :field\n// TODO: POST :field\n// TODO: PUT :field\n// TODO: DELETE :field\nconst documentFieldsRouter = documentRouter.route`fields/${fieldParam}`();\ndocumentFieldsRouter.get(async ctx => {\n\tconst fieldName = fieldParam.param(ctx);\n\tif (!fieldName) { return e404(); }\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst { fields } = model;\n\tif (!Object.hasOwn(fields, fieldName)) { return e404(); }\n\tconst field = fields[fieldName];\n\tif (!field) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst readPermissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!readPermissions?.length) { return e404(); }\n\tif (readPermissions) {\n\t\tconst group = field.group;\n\t\tif (!readPermissions.find(v => {\n\t\t\tconst field = v.fields;\n\t\t\tif (field === fieldName || field === '*' || Array.isArray(field) && (field.includes(fieldName) || field.includes('*'))) { return true; }\n\t\t\tif (!group || v.group) { return false; }\n\t\t\tif (v.group === group || Array.isArray(v.group) && v.group.includes(group)) { return true; }\n\t\t})) { return e404(); }\n\t}\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst doc = await filterPermissionDocument(model, readPermissions, document);\n\tif (!doc) { return e404(); }\n\tif (!Object.hasOwn(doc, fieldName)) { return e404(); }\n\treturn { value: doc[fieldName] };\n\n});\n\n// TODO: GET :value\n// TODO: POST :value\n// TODO: PUT :value\n// TODO: DELETE :field\nconst documentValuesRouter = documentRouter.route`values`();\n\n// TODO: GET :dataset/records\n// TODO: POST :dataset/records\n// TODO: GET :dataset/records/:record\n// TODO: PUT :dataset/records/:record\n// TODO: DELETE :dataset/records/:record\nconst documentDatasetsRouter = documentRouter.route`datasets`();\n\n\n\n\nexport default documentRouter;\n","import { useBody } from '@yongdall/http';\nimport { Search, yieldPermissionConstraintFields } from '@yongdall/common';\nimport { Query } from '@yongdall/model';\nimport { ApiRouter } from '@yongdall/http';\nimport useDocument, { documentId } from './useDocument.mjs';\nimport { useDatabase } from '@yongdall/connection';\nimport useModel, { useModelId } from './useModel.mjs';\nimport { createPermissionMatches, getModelAuthorizationPermissions, filterPermissionDocument, search2where } from '@yongdall/core';\nimport { e404 } from '@yongdall/http';\nimport { loadDocumentsLabel } from '../utils.mjs';\n\n\n\n\nconst optionsRouter = new ApiRouter();\n\n\n\noptionsRouter.get(async function (ctx) {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'options');\n\tif (!permissions?.length) { return e404(); }\n\tconst { sort, offset, limit, select, where, orWhere, or, primary, total: hasTotal } = Search.merge(\n\t\tSearch.parse(ctx.url.search.slice(1)),\n\t\tawait useBody() || {},\n\t);\n\n\tconst permissionMatches = await createPermissionMatches(permissions);\n\n\tlet modelQuery = new Query(model, true).offset(offset).limit(limit);\n\tif (permissionMatches) {\n\t\tmodelQuery = modelQuery.where(permissionMatches);\n\t}\n\tif (primary?.length) {\n\t\tmodelQuery = modelQuery.primary(primary);\n\t}\n\tconst searchWhere = await search2where(model.fields, where, orWhere, or);\n\tif (searchWhere) { modelQuery = modelQuery.where(searchWhere); }\n\n\tmodelQuery = modelQuery.sort();\n\tif (sort) { modelQuery = modelQuery.sort(...sort); }\n\tmodelQuery = modelQuery.select([...new Set([\n\t\tselect || [],\n\t\tObject.entries(model.fields).filter(([, { type }]) => type && typeof type === 'string').map(v => v[0]),\n\t\tpermissionMatches && permissions.flatMap(v => [...yieldPermissionConstraintFields(v)]) || [],\n\t].flat())]);\n\n\tconst [documents, total] = await useDatabase(model.databaseId).transaction(t => Promise.all([\n\t\tt.select(modelQuery),\n\t\thasTotal ? t.count(modelQuery) : -1,\n\t]));\n\n\tconst options = await Promise.all(documents.map(v => filterPermissionDocument(model, permissions, v)));\n\tawait loadDocumentsLabel(options, model);\n\treturn { options, total };\n});\n\n\noptionsRouter.get`${documentId}`(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'options');\n\tif (!permissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst option = await filterPermissionDocument(model, permissions, document);\n\tif (!option) { return e404(); }\n\treturn { option };\n});\n\nexport default optionsRouter;\n","import { ApiRouter } from '@yongdall/http';\nimport { e404, enumRouter } from '@yongdall/http';\nimport {getModelPermissions, toDocumentFields} from '@yongdall/core';\nimport useModel, { modelId, useModelId } from './useModel.mjs';\nimport { getModelOptions } from '@yongdall/model';\nimport useModelService, { modelServiceParam } from './useModelService.mjs';\n\n\n\nconst modelServicesRouter = new ApiRouter();\nconst modelServiceRouter = modelServicesRouter.route`${modelServiceParam}`();\n\nmodelServiceRouter.get(async function getDefine(ctx) {\n\tconst [model, modelId, modelService] = await Promise.all([\n\t\tuseModel(),\n\t\tuseModelId(),\n\t\tuseModelService(),\n\t]);\n\tif (!modelId || !model || !modelService) { return null; }\n\treturn {\n\t\t...getModelOptions(model),\n\t\tid: modelId,\n\t\tfields: toDocumentFields(model.fields),\n\t\tpermissions: await getModelPermissions(modelId, modelService?.permissionGroupId) || [],\n\t\n\t}\n});\nmodelServiceRouter.route(enumRouter('modelApi'));\nmodelServiceRouter.route(enumRouter('modelServiceApi'));\n\nexport default modelServicesRouter;\n","import documentsRouter from './model.documents.mjs';\n\nimport modelsRouter from './models.mjs';\nimport documentRouter from './model.document.mjs';\nimport optionsRouter from './model.options.mjs';\nimport modelServicesRouter from './modelServices.mjs';\n\nexport const api = {\n\tmodels: modelsRouter,\n}\nexport const modelApi = {\n\tservices: modelServicesRouter,\n}\nexport const modelServiceApi = {\n\tdocuments: documentsRouter,\n\toptions: optionsRouter,\n}\nexport const documentApi = {\n\t'': documentRouter,\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routers.yongdall.mjs","names":["documentRouter","modelsRouter","modelServicesRouter","documentsRouter","optionsRouter","documentRouter"],"sources":["../../api/api-model/utils.mjs","../../api/api-model/routers/useModelService.mjs","../../api/api-model/routers/model.documents.mjs","../../api/api-model/routers/models.mjs","../../api/api-model/routers/model.document.mjs","../../api/api-model/routers/model.options.mjs","../../api/api-model/routers/modelServices.mjs","../../api/api-model/routers/index.mjs"],"sourcesContent":["/** @import { ModelTable, TableDefine } from '@yongdall/model'*/\nimport { getPatternFields, Pattern } from '@yongdall/common';\nimport { Query, getLabelPattern, Where } from '@yongdall/model';\nimport { useDatabase } from '@yongdall/connection';\nimport { getModel } from '@yongdall/core';\n\n\n/**\n * \n * @param {[model: string, id: any, data: Record<string, any>, field: string][]} list\n * @param {TableDefine} model\n * @param {string?} [databaseId]\n */\nasync function loadDocumentLabel(list, model, databaseId) {\n\tconst labelPattern = getLabelPattern(model);\n\tif (!labelPattern) { return; }\n\tconst labelFields = getPatternFields(labelPattern);\n\tif (!labelFields.length) { return; }\n\tconst primaryFields = Object.entries(model.fields)\n\t\t.filter(([, v]) => v.primary)\n\t\t.sort(([, a], [, b]) => Number(a.primary) - Number(b.primary))\n\t\t.map(([v]) => v);\n\tif (!primaryFields.length) { return; }\n\tlet query = new Query(model, true);\n\tquery = query.select(primaryFields).select(labelFields);\n\tconst ids = [...new Set(list.map(([, id]) => id))];\n\tlet where = new Where();\n\tif (primaryFields.length === 1) {\n\t\tconst [field] = primaryFields;\n\t\twhere = where.and(field, 'in', ids);\n\t} else {\n\t\t/** @type {} */\n\t\tconst idsMap = [];\n\t\tids.map(v => `${v}`.split('$'));\n\t\tfor (const id of ids) {\n\t\t\tconst values = `${id}`.split('$');\n\t\t\tif (values.length !== primaryFields.length) { continue; }\n\t\t\tidsMap.push([values]);\n\t\t}\n\t\tif (!idsMap.length) { return; }\n\t\twhere = where.and(primaryFields, 'in', idsMap);\n\n\n\t}\n\tconst result = await useDatabase(databaseId).select(query.where(where));\n\tif (!result.length) { return; }\n\tconst labels = Object.fromEntries(result.map(v => [\n\t\tprimaryFields.map(f => v[f]).join('$'),\n\t\tPattern.generate(labelPattern, v),\n\t]));\n\tfor (const [, id, data, field] of list) {\n\t\tconst label = Object.hasOwn(labels, id) && labels[id];\n\t\tif (!label) { continue; }\n\t\tdata[`${field}~label`] = label;\n\t}\n}\n/**\n * \n * @param {(Record<string, any> | null)[]} list \n * @param {ModelTable} model \n */\nexport async function loadDocumentsLabel(list, model) {\n\t/** @type {[model: string, id: any, data: Record<string, any>, field: string][]} */\n\tconst setList = [];\n\t/** @type {[model: ModelTable, list: (Record<string, any> | null)[]][]} */\n\tconst queue = [[model, list]];\n\tfor (let line = queue.shift(); line; line = queue.shift()) {\n\t\tconst [model, list] = line;\n\t\tfor (const [name, field] of Object.entries(model.fields)) {\n\t\t\tconst type = field.type;\n\t\t\tif (!type) { continue; }\n\t\t\tif (typeof type === 'object') {\n\t\t\t\tqueue.push([type, list.flatMap(v => v?.[name] || [])]);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst modelName = field.model;\n\t\t\tif (!modelName) { continue; }\n\t\t\tfor (const item of list) {\n\t\t\t\tif (!item) { continue; }\n\t\t\t\tconst id = item[name];\n\t\t\t\tif (!id) { continue; }\n\t\t\t\tsetList.push([modelName, id, item, name]);\n\t\t\t}\n\t\t}\n\t}\n\tconst promises = [];\n\tfor (const [modelName, list] of Object.entries(Object.groupBy(setList, v => v[0]))) {\n\t\tif (!list) { continue; }\n\t\tpromises.push(\n\t\t\tgetModel(modelName)\n\t\t\t\t.then(model => model && loadDocumentLabel(list, model, model.databaseId)),\n\t\t);\n\t}\n\tawait Promise.all(promises);\n\n}\n","/** @import { ModelService } from '@yongdall/types' */\nimport { k99Context } from '@yongdall/http';\nimport { createStore } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { Param } from '@yongdall/http';\nimport { useDatabase } from '@yongdall/connection';\nimport { useModelId } from './useModel.mjs';\n\n\n\nexport const modelServiceParam = new Param();\nconst [getter, setter] = createStore(/** @type {Promise<[ModelService, string]?>?} */(null));\n\n/**\n * \n * @returns {Promise<[ModelService, string]?>}\n */\nasync function loadModelService() {\n\tconst ctx = k99Context();\n\tif (!ctx) { return null}\n\tconst serviceId = modelServiceParam.param(ctx) || '';\n\tif (!serviceId) { return null}\n\tconst modelId = await useModelId()\n\tconst model = await getModel('modelService');\n\tif (!model) { return null; }\n\t\tconst database = useDatabase(model.databaseId);\n\tlet sql = new Query(model, true).where('id', serviceId);\n\tconst modelField = model.fields.model;\n\tif (modelField && typeof modelField.type === 'string' && !modelField.array) {\n\t\tsql = sql.where(modelField.column || 'model', modelId);\n\t}\n\tconst service = await database.first(sql);\n\tif (!service) { return null; }\n\treturn [service, serviceId];\n\n}\nexport default function useModelService() {\n\tlet s = getter();\n\tif (!s) {\n\t\ts = loadModelService()\n\t\tsetter(s);\n\t}\n\treturn s.then(v => v?.[0] || null);\n}\n","import { Search, yieldPermissionConstraintFields } from '@yongdall/common';\nimport { Query } from '@yongdall/model';\nimport { useBody, e404, enumRouter } from '@yongdall/http';\nimport { ApiRouter } from '@yongdall/http';\nimport useDocument, { documentId } from './useDocument.mjs';\nimport { useDatabase } from '@yongdall/connection';\nimport useModel, { useModelId } from './useModel.mjs';\nimport { createPermissionMatches, getModelAuthorizationPermissions, filterPermissionDocument, search2where } from '@yongdall/core';\nimport { loadDocumentsLabel } from '../utils.mjs';\nimport useModelService from './useModelService.mjs';\n\nconst documentsRouter = new ApiRouter();\n\n\n\ndocumentsRouter.get(async function (ctx) {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'query', modelService?.permissionGroupId);\n\tif (!permissions?.length) { return e404(); }\n\tconst { sort, offset, limit, select, where, orWhere, or, primary, total: hasTotal } = Search.merge(\n\t\tSearch.parse(ctx.url.search.slice(1)),\n\t\tawait useBody() || {},\n\t);\n\n\tconst permissionMatches = await createPermissionMatches(permissions);\n\n\tlet modelQuery = new Query(model, true).offset(offset).limit(limit);\n\tif (permissionMatches) {\n\t\tmodelQuery = modelQuery.where(permissionMatches);\n\t}\n\tif (primary?.length) {\n\t\tmodelQuery = modelQuery.primary(primary);\n\t}\n\tconst searchWhere = await search2where(model.fields, where, orWhere, or);\n\tif (searchWhere) { modelQuery = modelQuery.where(searchWhere); }\n\n\tmodelQuery = modelQuery.sort();\n\tif (sort) { modelQuery = modelQuery.sort(...sort); }\n\tconst allFields = [\n\t\tselect || [],\n\t\tObject.entries(model.fields).filter(v => v[1].primary).map(v => v[0]),\n\t\tpermissionMatches && permissions.flatMap(v => [...yieldPermissionConstraintFields(v)]) || [],\n\t].flat();\n\n\tconst [result, total] = await useDatabase(model.databaseId).transaction(t => Promise.all([\n\t\tt.search(modelQuery, allFields),\n\t\thasTotal ? t.count(modelQuery) : -1,\n\t]));\n\n\tconst documents = await Promise.all(result.map(v => filterPermissionDocument(model, permissions, v)));\n\tawait loadDocumentsLabel(documents, model);\n\treturn { documents, total };\n});\n\ndocumentsRouter.post(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'create', modelService?.permissionGroupId);\n\tif (!permissions?.length) { return e404(); }\n\tconst data = await useBody() || {};\n\tconst newDocument = data.document;\n\tif (!newDocument) { return e404(); }\n\tconst document = await filterPermissionDocument(model, permissions, newDocument);\n\tif (!document) { return e404(); }\n\tconst doc = await useDatabase(model.databaseId).create(model, document);\n\treturn doc;\n});\n\nconst documentRouter = documentsRouter.route`${documentId}`();\ndocumentRouter.guard(async (ctx) => {\n\tconst doc = await useDocument();\n\tif (doc) { return; }\n\treturn e404();\n});\n\ndocumentRouter.route(enumRouter('documentApi'));\n\nexport default documentsRouter;\n","import { ApiRouter } from '@yongdall/http';\nimport { e404, enumRouter } from '@yongdall/http';\nimport {getModelPermissions, toDocumentFields} from '@yongdall/core';\nimport useModel, { modelId, useModelId } from './useModel.mjs';\nimport { getModelOptions } from '@yongdall/model';\n\n\n\nconst modelsRouter = new ApiRouter();\nconst modelRouter = modelsRouter.route`${modelId}`();\n\nmodelRouter.get(async function getDefine(ctx) {\n\tconst [model, modelId] = await Promise.all([\n\t\tuseModel(),\n\t\tuseModelId(),\n\t]);\n\tif (!modelId || !model) { return null; }\n\treturn {\n\t\t...getModelOptions(model),\n\t\tid: modelId,\n\t\tfields: toDocumentFields(model.fields),\n\t\tpermissions: await getModelPermissions(modelId) || [],\n\t\n\t}\n});\nmodelRouter.route(enumRouter('modelApi'));\nmodelRouter.route(enumRouter('modelServiceApi'));\n\nexport default modelsRouter;\n","import { e404, Param, useBody } from '@yongdall/http';\nimport { ApiRouter } from '@yongdall/http';\nimport useDocument from './useDocument.mjs';\nimport { useDatabase } from '@yongdall/connection';\nimport useModel, { useModelId } from './useModel.mjs';\nimport { filterPermissionDocument, filterPermissionUpdate, getModelAuthorizationPermissions, testPermissions } from '@yongdall/core';\nimport useModelService from './useModelService.mjs';\n\n\nconst documentRouter = new ApiRouter();\n\n\ndocumentRouter.get(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst readPermissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!readPermissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst doc = await filterPermissionDocument(model, readPermissions, document);\n\tif (!doc) { return e404(); }\n\treturn { document: doc };\n});\n\ndocumentRouter.put(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst updatePermissions = await getModelAuthorizationPermissions(modelId, 'update', modelService?.permissionGroupId);\n\tif (!updatePermissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst data = await useBody();\n\tif (!data) { return; }\n\tconst newValue = data.document;\n\tif (!newValue) { return; }\n\tconst newData = await filterPermissionUpdate(model, updatePermissions, document, newValue);\n\tconst result = newData && Object.keys(newData).length\n\t\t? await useDatabase(model.databaseId).save(model, document, newData)\n\t\t: document;\n\tif (!result) { return {}; }\n\tconst readPermissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!readPermissions?.length) { return {}; }\n\n\treturn await filterPermissionDocument(model, readPermissions, result);\n});\n\ndocumentRouter.delete(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!permissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tif (!await testPermissions(permissions, document)) { return e404(); }\n\tawait useDatabase(model.databaseId).destroy(model, document).then(Boolean);\n\tctx.status = 204;\n});\n\n\nconst fieldParam = new Param();\n\n// TODO: GET :field\n// TODO: POST :field\n// TODO: PUT :field\n// TODO: DELETE :field\nconst documentFieldsRouter = documentRouter.route`fields/${fieldParam}`();\ndocumentFieldsRouter.get(async ctx => {\n\tconst fieldName = fieldParam.param(ctx);\n\tif (!fieldName) { return e404(); }\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst { fields } = model;\n\tif (!Object.hasOwn(fields, fieldName)) { return e404(); }\n\tconst field = fields[fieldName];\n\tif (!field) { return e404(); }\n\tconst modelService = await useModelService();\n\tconst readPermissions = await getModelAuthorizationPermissions(modelId, 'read', modelService?.permissionGroupId);\n\tif (!readPermissions?.length) { return e404(); }\n\tif (readPermissions) {\n\t\tconst group = field.group;\n\t\tif (!readPermissions.find(v => {\n\t\t\tconst field = v.fields;\n\t\t\tif (field === fieldName || field === '*' || Array.isArray(field) && (field.includes(fieldName) || field.includes('*'))) { return true; }\n\t\t\tif (!group || v.group) { return false; }\n\t\t\tif (v.group === group || Array.isArray(v.group) && v.group.includes(group)) { return true; }\n\t\t})) { return e404(); }\n\t}\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst doc = await filterPermissionDocument(model, readPermissions, document);\n\tif (!doc) { return e404(); }\n\tif (!Object.hasOwn(doc, fieldName)) { return e404(); }\n\treturn { value: doc[fieldName] };\n\n});\n\n// TODO: GET :value\n// TODO: POST :value\n// TODO: PUT :value\n// TODO: DELETE :field\nconst documentValuesRouter = documentRouter.route`values`();\n\n// TODO: GET :dataset/records\n// TODO: POST :dataset/records\n// TODO: GET :dataset/records/:record\n// TODO: PUT :dataset/records/:record\n// TODO: DELETE :dataset/records/:record\nconst documentDatasetsRouter = documentRouter.route`datasets`();\n\n\n\n\nexport default documentRouter;\n","import { useBody } from '@yongdall/http';\nimport { Search, yieldPermissionConstraintFields } from '@yongdall/common';\nimport { Query } from '@yongdall/model';\nimport { ApiRouter } from '@yongdall/http';\nimport useDocument, { documentId } from './useDocument.mjs';\nimport { useDatabase } from '@yongdall/connection';\nimport useModel, { useModelId } from './useModel.mjs';\nimport { createPermissionMatches, getModelAuthorizationPermissions, filterPermissionDocument, search2where } from '@yongdall/core';\nimport { e404 } from '@yongdall/http';\nimport { loadDocumentsLabel } from '../utils.mjs';\n\n\n\n\nconst optionsRouter = new ApiRouter();\n\n\n\noptionsRouter.get(async function (ctx) {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'options');\n\tif (!permissions?.length) { return e404(); }\n\tconst { sort, offset, limit, select, where, orWhere, or, primary, total: hasTotal } = Search.merge(\n\t\tSearch.parse(ctx.url.search.slice(1)),\n\t\tawait useBody() || {},\n\t);\n\n\tconst permissionMatches = await createPermissionMatches(permissions);\n\n\tlet modelQuery = new Query(model, true).offset(offset).limit(limit);\n\tif (permissionMatches) {\n\t\tmodelQuery = modelQuery.where(permissionMatches);\n\t}\n\tif (primary?.length) {\n\t\tmodelQuery = modelQuery.primary(primary);\n\t}\n\tconst searchWhere = await search2where(model.fields, where, orWhere, or);\n\tif (searchWhere) { modelQuery = modelQuery.where(searchWhere); }\n\n\tmodelQuery = modelQuery.sort();\n\tif (sort) { modelQuery = modelQuery.sort(...sort); }\n\tmodelQuery = modelQuery.select([...new Set([\n\t\tselect || [],\n\t\tObject.entries(model.fields).filter(([, { type }]) => type && typeof type === 'string').map(v => v[0]),\n\t\tpermissionMatches && permissions.flatMap(v => [...yieldPermissionConstraintFields(v)]) || [],\n\t].flat())]);\n\n\tconst [documents, total] = await useDatabase(model.databaseId).transaction(t => Promise.all([\n\t\tt.select(modelQuery),\n\t\thasTotal ? t.count(modelQuery) : -1,\n\t]));\n\n\tconst options = await Promise.all(documents.map(v => filterPermissionDocument(model, permissions, v)));\n\tawait loadDocumentsLabel(options, model);\n\treturn { options, total };\n});\n\n\noptionsRouter.get`${documentId}`(async ctx => {\n\tconst model = await useModel();\n\tconst modelId = await useModelId();\n\tif (!model || !modelId) { return e404(); }\n\tconst permissions = await getModelAuthorizationPermissions(modelId, 'options');\n\tif (!permissions?.length) { return e404(); }\n\tconst document = await useDocument();\n\tif (!document) { return e404(); }\n\tconst option = await filterPermissionDocument(model, permissions, document);\n\tif (!option) { return e404(); }\n\treturn { option };\n});\n\nexport default optionsRouter;\n","import { ApiRouter } from '@yongdall/http';\nimport { e404, enumRouter } from '@yongdall/http';\nimport {getModelPermissions, toDocumentFields} from '@yongdall/core';\nimport useModel, { modelId, useModelId } from './useModel.mjs';\nimport { getModelOptions } from '@yongdall/model';\nimport useModelService, { modelServiceParam } from './useModelService.mjs';\n\n\n\nconst modelServicesRouter = new ApiRouter();\nconst modelServiceRouter = modelServicesRouter.route`${modelServiceParam}`();\n\nmodelServiceRouter.get(async function getDefine(ctx) {\n\tconst [model, modelId, modelService] = await Promise.all([\n\t\tuseModel(),\n\t\tuseModelId(),\n\t\tuseModelService(),\n\t]);\n\tif (!modelId || !model || !modelService) { return null; }\n\treturn {\n\t\t...getModelOptions(model),\n\t\tid: modelId,\n\t\tfields: toDocumentFields(model.fields),\n\t\tpermissions: await getModelPermissions(modelId, modelService?.permissionGroupId) || [],\n\t\n\t}\n});\nmodelServiceRouter.route(enumRouter('modelApi'));\nmodelServiceRouter.route(enumRouter('modelServiceApi'));\n\nexport default modelServicesRouter;\n","import documentsRouter from './model.documents.mjs';\n\nimport modelsRouter from './models.mjs';\nimport documentRouter from './model.document.mjs';\nimport optionsRouter from './model.options.mjs';\nimport modelServicesRouter from './modelServices.mjs';\n\nexport const api = {\n\tmodels: modelsRouter,\n}\nexport const modelApi = {\n\tservices: modelServicesRouter,\n}\nexport const modelServiceApi = {\n\tdocuments: documentsRouter,\n\toptions: optionsRouter,\n}\nexport const documentApi = {\n\t'': documentRouter,\n}\n"],"mappings":"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"}
|