akanjs 0.0.1 → 2.0.0-beta.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/CODE_OF_CONDUCT.md +54 -0
- package/CONTRIBUTING.md +83 -0
- package/LICENSE +21 -0
- package/README.ko.md +244 -0
- package/README.md +237 -6
- package/base/base.ts +194 -0
- package/base/baseEnv.ts +162 -0
- package/base/index.ts +6 -0
- package/base/primitiveRegistry.ts +342 -0
- package/base/symbols.ts +11 -0
- package/base/types.ts +137 -0
- package/base/utils.ts +30 -0
- package/cli/application/application.command.ts +213 -0
- package/cli/application/application.interface.tsx +225 -0
- package/cli/application/application.runner.ts +359 -0
- package/cli/application/application.script.ts +244 -0
- package/cli/build.ts +25 -0
- package/cli/cloud/cloud.command.ts +48 -0
- package/cli/cloud/cloud.runner.ts +158 -0
- package/cli/cloud/cloud.script.ts +40 -0
- package/cli/guideline/guideline.command.ts +31 -0
- package/cli/guideline/guideline.prompt.ts +212 -0
- package/cli/guideline/guideline.runner.ts +53 -0
- package/cli/guideline/guideline.script.ts +33 -0
- package/cli/guidelines/___library/sharedUiStructureDescription.en.md +767 -0
- package/cli/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/cli/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/cli/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/cli/guidelines/componentRule/componentRule.generate.json +131 -0
- package/cli/guidelines/componentRule/componentRule.instruction.md +637 -0
- package/cli/guidelines/cssRule/cssRule.generate.json +93 -0
- package/cli/guidelines/cssRule/cssRule.instruction.md +435 -0
- package/cli/guidelines/databaseModule/databaseModule.generate.json +51 -0
- package/cli/guidelines/databaseModule/databaseModule.instruction.md +612 -0
- package/cli/guidelines/docPageRule/docPageRule.generate.json +72 -0
- package/cli/guidelines/docPageRule/docPageRule.instruction.md +389 -0
- package/cli/guidelines/enumConstant/enumConstant.generate.json +24 -0
- package/cli/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/cli/guidelines/framework/framework.generate.json +119 -0
- package/cli/guidelines/framework/framework.instruction.md +1110 -0
- package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
- package/cli/guidelines/modelConstant/modelConstant.generate.json +128 -0
- package/cli/guidelines/modelConstant/modelConstant.instruction.md +506 -0
- package/cli/guidelines/modelDictionary/modelDictionary.generate.json +108 -0
- package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +547 -0
- package/cli/guidelines/modelDocument/modelDocument.generate.json +129 -0
- package/cli/guidelines/modelDocument/modelDocument.instruction.md +536 -0
- package/cli/guidelines/modelService/modelService.generate.json +135 -0
- package/cli/guidelines/modelService/modelService.instruction.md +708 -0
- package/cli/guidelines/modelSignal/modelSignal.generate.json +201 -0
- package/cli/guidelines/modelSignal/modelSignal.instruction.md +552 -0
- package/cli/guidelines/modelStore/modelStore.generate.json +130 -0
- package/cli/guidelines/modelStore/modelStore.instruction.md +585 -0
- package/cli/guidelines/modelTemplate/modelTemplate.generate.json +104 -0
- package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +604 -0
- package/cli/guidelines/modelUnit/modelUnit.generate.json +92 -0
- package/cli/guidelines/modelUnit/modelUnit.instruction.md +541 -0
- package/cli/guidelines/modelUtil/modelUtil.generate.json +93 -0
- package/cli/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/cli/guidelines/modelView/modelView.generate.json +80 -0
- package/cli/guidelines/modelView/modelView.instruction.md +1005 -0
- package/cli/guidelines/modelZone/modelZone.generate.json +126 -0
- package/cli/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/cli/guidelines/scalarConstant/scalarConstant.generate.json +106 -0
- package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +442 -0
- package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +83 -0
- package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +273 -0
- package/cli/guidelines/scalarModule/scalarModule.generate.json +35 -0
- package/cli/guidelines/scalarModule/scalarModule.instruction.md +81 -0
- package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +108 -0
- package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +310 -0
- package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +140 -0
- package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/cli/index.js +11401 -0
- package/cli/index.ts +24 -0
- package/cli/library/library.command.ts +28 -0
- package/cli/library/library.runner.ts +69 -0
- package/cli/library/library.script.ts +39 -0
- package/cli/module/module.command.ts +35 -0
- package/cli/module/module.prompt.ts +18 -0
- package/cli/module/module.request.ts +319 -0
- package/cli/module/module.runner.ts +76 -0
- package/cli/module/module.script.ts +161 -0
- package/cli/package/package.command.ts +32 -0
- package/cli/package/package.runner.ts +64 -0
- package/cli/package/package.script.ts +35 -0
- package/cli/page/page.command.ts +14 -0
- package/cli/page/page.runner.ts +14 -0
- package/cli/page/page.script.ts +12 -0
- package/cli/scalar/scalar.command.ts +21 -0
- package/cli/scalar/scalar.prompt.ts +131 -0
- package/cli/scalar/scalar.runner.ts +38 -0
- package/cli/scalar/scalar.script.ts +16 -0
- package/cli/templates/__scalar/__model__/__model__.constant.ts +15 -0
- package/cli/templates/__scalar/__model__/__model__.dictionary.ts +19 -0
- package/cli/templates/__scalar/__model__/__model__.document.ts +15 -0
- package/cli/templates/app/akan.config.ts +14 -0
- package/cli/templates/app/capacitor.config.ts.template +8 -0
- package/cli/templates/app/common/commonLogic.ts +12 -0
- package/cli/templates/app/common/index.ts +10 -0
- package/cli/templates/app/env/env.client.debug.ts.template +7 -0
- package/cli/templates/app/env/env.client.develop.ts.template +7 -0
- package/cli/templates/app/env/env.client.local.ts.template +7 -0
- package/cli/templates/app/env/env.client.main.ts.template +7 -0
- package/cli/templates/app/env/env.client.testing.ts.template +7 -0
- package/cli/templates/app/env/env.client.ts +21 -0
- package/cli/templates/app/env/env.client.type.ts +16 -0
- package/cli/templates/app/env/env.server.debug.ts.template +7 -0
- package/cli/templates/app/env/env.server.develop.ts.template +9 -0
- package/cli/templates/app/env/env.server.local.ts.template +14 -0
- package/cli/templates/app/env/env.server.main.ts.template +9 -0
- package/cli/templates/app/env/env.server.testing.ts.template +6 -0
- package/cli/templates/app/env/env.server.ts +20 -0
- package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +17 -0
- package/cli/templates/app/lib/___appName__/__appName__.service.ts +13 -0
- package/cli/templates/app/lib/___appName__/__appName__.signal.ts +17 -0
- package/cli/templates/app/lib/___appName__/__appName__.store.ts +15 -0
- package/cli/templates/app/lib/option.ts +17 -0
- package/cli/templates/app/main.ts +16 -0
- package/cli/templates/app/package.json.template +5 -0
- package/cli/templates/app/page/_index.tsx +172 -0
- package/cli/templates/app/page/_layout.tsx +32 -0
- package/cli/templates/app/page/styles.css.template +53 -0
- package/cli/templates/app/public/favicon.ico +0 -0
- package/cli/templates/app/public/logo.png +0 -0
- package/cli/templates/app/srvkit/backendLogic.ts +12 -0
- package/cli/templates/app/srvkit/index.ts +10 -0
- package/cli/templates/app/tsconfig.json.template +21 -0
- package/cli/templates/app/ui/UiComponent.ts +16 -0
- package/cli/templates/app/ui/index.ts +10 -0
- package/cli/templates/app/webkit/frontendLogic.ts +12 -0
- package/cli/templates/app/webkit/index.ts +10 -0
- package/cli/templates/client.ts +46 -0
- package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +47 -0
- package/cli/templates/crudPages/[__model__Id]/page.tsx +52 -0
- package/cli/templates/crudPages/new/page.tsx +42 -0
- package/cli/templates/crudPages/page.tsx +43 -0
- package/cli/templates/crudSinglePage/page.tsx +37 -0
- package/cli/templates/env/_env.server.type.ts +16 -0
- package/cli/templates/facetIndex/index.ts +32 -0
- package/cli/templates/index.ts +10 -0
- package/cli/templates/lib/__lib/lib.constant.ts +38 -0
- package/cli/templates/lib/__lib/lib.dictionary.ts +33 -0
- package/cli/templates/lib/__lib/lib.document.ts +35 -0
- package/cli/templates/lib/__lib/lib.service.ts +33 -0
- package/cli/templates/lib/__lib/lib.signal.ts +34 -0
- package/cli/templates/lib/__lib/lib.store.ts +33 -0
- package/cli/templates/lib/cnst.ts +29 -0
- package/cli/templates/lib/db.ts +32 -0
- package/cli/templates/lib/dict.ts +49 -0
- package/cli/templates/lib/sig.ts +60 -0
- package/cli/templates/lib/srv.ts +34 -0
- package/cli/templates/lib/st.ts +31 -0
- package/cli/templates/lib/useClient.ts +19 -0
- package/cli/templates/lib/useServer.ts +7 -0
- package/cli/templates/libRoot/.gitignore.template +16 -0
- package/cli/templates/libRoot/akan.config.ts +12 -0
- package/cli/templates/libRoot/base/baseLogic.ts +10 -0
- package/cli/templates/libRoot/base/index.ts +8 -0
- package/cli/templates/libRoot/common/commonLogic.ts +10 -0
- package/cli/templates/libRoot/common/index.ts +8 -0
- package/cli/templates/libRoot/env/env.server.example.ts.template +6 -0
- package/cli/templates/libRoot/env/env.server.testing.ts.template +6 -0
- package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +15 -0
- package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +11 -0
- package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +13 -0
- package/cli/templates/libRoot/lib/option.ts +17 -0
- package/cli/templates/libRoot/package.json.template +5 -0
- package/cli/templates/libRoot/srvkit/backendLogic.ts +10 -0
- package/cli/templates/libRoot/srvkit/index.ts +8 -0
- package/cli/templates/libRoot/tsconfig.json.template +11 -0
- package/cli/templates/libRoot/ui/index.ts +7 -0
- package/cli/templates/libRoot/webkit/frontendLogic.ts +10 -0
- package/cli/templates/libRoot/webkit/index.ts +8 -0
- package/cli/templates/localDev/docker-compose.yaml.template +37 -0
- package/cli/templates/module/__Model__.Template.tsx +36 -0
- package/cli/templates/module/__Model__.Unit.tsx +26 -0
- package/cli/templates/module/__Model__.Util.tsx +30 -0
- package/cli/templates/module/__Model__.View.tsx +29 -0
- package/cli/templates/module/__Model__.Zone.tsx +43 -0
- package/cli/templates/module/__model__.constant.ts +24 -0
- package/cli/templates/module/__model__.dictionary.ts +30 -0
- package/cli/templates/module/__model__.document.ts +23 -0
- package/cli/templates/module/__model__.service.ts +16 -0
- package/cli/templates/module/__model__.signal.ts +27 -0
- package/cli/templates/module/__model__.store.ts +19 -0
- package/cli/templates/module/index.tsx +44 -0
- package/cli/templates/moduleRoot/index.tsx +31 -0
- package/cli/templates/pkgRoot/tsconfig.json.template +10 -0
- package/cli/templates/server.ts +45 -0
- package/cli/templates/workspaceRoot/.env.template +14 -0
- package/cli/templates/workspaceRoot/.gitignore.template +130 -0
- package/cli/templates/workspaceRoot/.vscode/settings.json.template +23 -0
- package/cli/templates/workspaceRoot/biome.json.template +175 -0
- package/cli/templates/workspaceRoot/bunfig.toml +4 -0
- package/cli/templates/workspaceRoot/infra/app/Chart.yaml.template +6 -0
- package/cli/templates/workspaceRoot/infra/app/templates/frontend.yaml.template +182 -0
- package/cli/templates/workspaceRoot/infra/app/values/_common-values.yaml.template +183 -0
- package/cli/templates/workspaceRoot/package.json.template +7 -0
- package/cli/templates/workspaceRoot/tsconfig.json.template +26 -0
- package/cli/testHelpers.ts +171 -0
- package/cli/workspace/workspace.command.ts +60 -0
- package/cli/workspace/workspace.runner.ts +57 -0
- package/cli/workspace/workspace.script.ts +68 -0
- package/client/capacitor.ts +68 -0
- package/client/clientRuntime.ts +141 -0
- package/client/cookie.ts +121 -0
- package/client/createFont.ts +8 -0
- package/client/csrTypes.ts +259 -0
- package/client/decorators.ts +25 -0
- package/client/device.ts +147 -0
- package/client/fetch.ts +1 -0
- package/client/index.ts +15 -0
- package/client/locale.ts +4 -0
- package/client/makePageProto.tsx +178 -0
- package/client/router.ts +286 -0
- package/client/rscNavigation.ts +19 -0
- package/client/storage.ts +33 -0
- package/client/translator.ts +43 -0
- package/client/types.ts +228 -0
- package/client/useClient.ts +1 -0
- package/common/Logger.ts +177 -0
- package/common/applyMixins.ts +14 -0
- package/common/capitalize.ts +4 -0
- package/common/deepObjectify.ts +27 -0
- package/common/formatNumber.ts +14 -0
- package/common/formatPhone.ts +7 -0
- package/common/getAllPropertyDescriptors.ts +13 -0
- package/common/hmrPhase.ts +17 -0
- package/common/httpClient.ts +101 -0
- package/common/index.ts +50 -0
- package/common/isDayjs.ts +3 -0
- package/common/isEmail.ts +2 -0
- package/common/isPhoneNumber.ts +8 -0
- package/common/isQueryEqual.ts +23 -0
- package/common/isValidDate.ts +14 -0
- package/common/localeConfig.ts +41 -0
- package/common/lowerlize.ts +4 -0
- package/common/mergeVersion.ts +10 -0
- package/common/objectify.ts +7 -0
- package/common/pathGet.ts +13 -0
- package/common/pathSet.ts +16 -0
- package/common/randomPick.ts +1 -0
- package/common/randomPicks.ts +12 -0
- package/common/routeConvention.ts +203 -0
- package/common/sleep.ts +8 -0
- package/common/splitVersion.ts +11 -0
- package/common/subRoute.ts +34 -0
- package/common/types.ts +15 -0
- package/constant/constantRegistry.ts +334 -0
- package/constant/crystalize.ts +45 -0
- package/constant/deserialize.ts +70 -0
- package/constant/fieldInfo.ts +415 -0
- package/constant/getDefault.ts +18 -0
- package/constant/immerify.ts +16 -0
- package/constant/index.ts +10 -0
- package/constant/purify.ts +118 -0
- package/constant/serialize.ts +87 -0
- package/constant/types.ts +105 -0
- package/constant/via.ts +360 -0
- package/devkit/aiEditor.ts +299 -0
- package/devkit/akanApp/akanApp.host.ts +356 -0
- package/devkit/akanApp/index.ts +1 -0
- package/devkit/akanConfig/akanConfig.ts +332 -0
- package/devkit/akanConfig/index.ts +2 -0
- package/devkit/akanConfig/types.ts +187 -0
- package/devkit/applicationBuildReporter.ts +69 -0
- package/devkit/applicationBuildRunner.ts +302 -0
- package/devkit/applicationReleasePackager.ts +205 -0
- package/devkit/artifact/implicitRootLayout.ts +155 -0
- package/devkit/artifact/index.ts +1 -0
- package/devkit/artifact/routeSeedIndex.ts +128 -0
- package/devkit/auth.ts +41 -0
- package/devkit/builder.ts +164 -0
- package/devkit/capacitor.base.config.ts +74 -0
- package/devkit/capacitorApp.ts +385 -0
- package/devkit/commandDecorators/argMeta.ts +88 -0
- package/devkit/commandDecorators/command.ts +314 -0
- package/devkit/commandDecorators/commandBuilder.ts +188 -0
- package/devkit/commandDecorators/commandMeta.ts +6 -0
- package/devkit/commandDecorators/dependencyBuilder.ts +100 -0
- package/devkit/commandDecorators/helpFormatter.ts +217 -0
- package/devkit/commandDecorators/index.ts +8 -0
- package/devkit/commandDecorators/targetMeta.ts +31 -0
- package/devkit/commandDecorators/types.ts +10 -0
- package/devkit/constants.ts +25 -0
- package/devkit/createTunnel.ts +36 -0
- package/devkit/dependencyScanner.ts +339 -0
- package/devkit/executors.ts +1326 -0
- package/devkit/extractDeps.ts +85 -0
- package/devkit/fileEditor.ts +106 -0
- package/devkit/fileSys.ts +39 -0
- package/devkit/frontendBuild/allRoutesBuilder.ts +103 -0
- package/devkit/frontendBuild/clientBuildTypes.ts +114 -0
- package/devkit/frontendBuild/clientEntriesBundler.ts +300 -0
- package/devkit/frontendBuild/clientEntryDiscovery.ts +196 -0
- package/devkit/frontendBuild/csrArtifactBuilder.ts +237 -0
- package/devkit/frontendBuild/cssCompiler.ts +279 -0
- package/devkit/frontendBuild/cssImportResolver.ts +116 -0
- package/devkit/frontendBuild/fontOptimizer.ts +427 -0
- package/devkit/frontendBuild/hmrChangeClassifier.ts +28 -0
- package/devkit/frontendBuild/hmrWatcher.ts +101 -0
- package/devkit/frontendBuild/index.ts +18 -0
- package/devkit/frontendBuild/pagesBundleBuilder.ts +137 -0
- package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +37 -0
- package/devkit/frontendBuild/precompressArtifacts.ts +59 -0
- package/devkit/frontendBuild/routeClientBuilder.ts +290 -0
- package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +62 -0
- package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +139 -0
- package/devkit/frontendBuild/vendorSpecifiers.ts +16 -0
- package/devkit/frontendBuild/watchRootResolver.ts +28 -0
- package/devkit/getCredentials.ts +19 -0
- package/devkit/getDirname.ts +3 -0
- package/devkit/getModelFileData.ts +59 -0
- package/devkit/getRelatedCnsts.ts +300 -0
- package/devkit/guideline.ts +19 -0
- package/devkit/incrementalBuilder/incrementalBuilder.host.ts +78 -0
- package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +330 -0
- package/devkit/incrementalBuilder/index.ts +1 -0
- package/devkit/index.ts +36 -0
- package/devkit/lint/no-import-client-functions.grit +32 -0
- package/devkit/lint/no-import-external-library.grit +21 -0
- package/devkit/lint/no-js-private-class-method.grit +42 -0
- package/devkit/lint/no-use-client-in-server.grit +7 -0
- package/devkit/lint/non-scalar-props-restricted.grit +13 -0
- package/devkit/linter.ts +248 -0
- package/devkit/mobile/index.ts +1 -0
- package/devkit/mobile/mobileTarget.ts +47 -0
- package/devkit/prompter.ts +71 -0
- package/devkit/scanInfo.ts +605 -0
- package/devkit/selectModel.ts +11 -0
- package/devkit/spinner.ts +54 -0
- package/devkit/sshTunnel.ts +151 -0
- package/devkit/streamAi.ts +45 -0
- package/devkit/transforms/barrelAnalyzer.ts +249 -0
- package/devkit/transforms/barrelImportsPlugin.ts +451 -0
- package/devkit/transforms/externalizeFrameworkPlugin.ts +159 -0
- package/devkit/transforms/index.ts +5 -0
- package/devkit/transforms/rscUseClientTransform.ts +52 -0
- package/devkit/transforms/useClientBundlePlugin.ts +47 -0
- package/devkit/typeChecker.ts +260 -0
- package/devkit/types.ts +42 -0
- package/devkit/ui/MultiScrollList.tsx +228 -0
- package/devkit/ui/ScrollList.tsx +106 -0
- package/devkit/ui/index.ts +2 -0
- package/devkit/uploadRelease.ts +95 -0
- package/devkit/useStdoutDimensions.ts +20 -0
- package/dictionary/base.dictionary.ts +91 -0
- package/dictionary/dictInfo.ts +1079 -0
- package/dictionary/dictionary.ts +10 -0
- package/dictionary/index.ts +12 -0
- package/dictionary/locale.ts +230 -0
- package/dictionary/trans.ts +196 -0
- package/document/by.ts +39 -0
- package/document/dataLoader.ts +91 -0
- package/document/database.ts +168 -0
- package/document/databaseRegistry.ts +113 -0
- package/document/documentQuery.ts +143 -0
- package/document/documentSchema.ts +91 -0
- package/document/filterMeta.ts +210 -0
- package/document/index.ts +11 -0
- package/document/into.ts +169 -0
- package/document/loaderInfo.ts +50 -0
- package/document/schema.ts +24 -0
- package/document/types.ts +41 -0
- package/fetch/client/fetchClient.ts +600 -0
- package/fetch/client/httpClient.ts +157 -0
- package/fetch/client/index.ts +3 -0
- package/fetch/client/wsClient.ts +246 -0
- package/fetch/fetchType/appliedReturn.type.ts +108 -0
- package/fetch/fetchType/buildFetch.type.ts +24 -0
- package/fetch/fetchType/clientSignal.type.ts +22 -0
- package/fetch/fetchType/endpointFetch.type.ts +56 -0
- package/fetch/fetchType/index.ts +5 -0
- package/fetch/fetchType/sliceFetch.type.ts +173 -0
- package/fetch/index.ts +4 -0
- package/fetch/requestStorage.ts +127 -0
- package/fetch/serializer/fetch.serializer.ts +131 -0
- package/fetch/serializer/index.ts +1 -0
- package/fetch/types.ts +28 -0
- package/package.json +202 -5
- package/server/SSR_MEMORY_DIAGNOSIS.md +107 -0
- package/server/akanApp.ts +855 -0
- package/server/akanLib.ts +43 -0
- package/server/akanOption.ts +42 -0
- package/server/akanServer.ts +369 -0
- package/server/artifact/builderRpc.ts +124 -0
- package/server/artifact/index.ts +6 -0
- package/server/artifact/ipcTypes.ts +46 -0
- package/server/artifact/manifestTypes.ts +19 -0
- package/server/artifact/routeClientCache.ts +224 -0
- package/server/artifact/routeSeedIndexStore.ts +89 -0
- package/server/artifact/routesManifestStore.ts +120 -0
- package/server/decorators.ts +95 -0
- package/server/di/diLifecycle.ts +520 -0
- package/server/di/index.ts +4 -0
- package/server/di/predefinedAdaptor.ts +77 -0
- package/server/di/resolveAdaptorHierarchy.ts +82 -0
- package/server/di/resolveHierarchy.ts +89 -0
- package/server/di/resolveServiceHierarchy.ts +47 -0
- package/server/di/utils.ts +40 -0
- package/server/hmr/changeBatch.ts +14 -0
- package/server/hmr/clientScript.ts +310 -0
- package/server/hmr/devHmrController.ts +395 -0
- package/server/hmr/index.ts +4 -0
- package/server/hmr/wsHub.ts +56 -0
- package/server/imageOptimizer.ts +427 -0
- package/server/imageOptimizerError.ts +8 -0
- package/server/index.ts +14 -0
- package/server/lifecycle/shutdownManager.ts +52 -0
- package/server/logging/rotatingLogWriter.ts +190 -0
- package/server/processMetricsCollector.ts +78 -0
- package/server/proxy/akanResponse.ts +16 -0
- package/server/proxy/bunRequestFields.ts +12 -0
- package/server/proxy/hostBasePathWebProxy.ts +112 -0
- package/server/proxy/index.ts +15 -0
- package/server/proxy/localeWebProxy.ts +71 -0
- package/server/proxy/types.ts +41 -0
- package/server/proxy/webProxyRunner.ts +90 -0
- package/server/resolver/database.resolver.ts +340 -0
- package/server/resolver/index.ts +3 -0
- package/server/resolver/resolver.contract.fixture.ts +222 -0
- package/server/resolver/service.resolver.ts +176 -0
- package/server/resolver/signal.resolver.ts +386 -0
- package/server/robots.ts +32 -0
- package/server/routeElementComposer.tsx +91 -0
- package/server/routeTreeBuilder.ts +279 -0
- package/server/routing/apiRouter.ts +226 -0
- package/server/rscClient.tsx +140 -0
- package/server/rscWorker.tsx +625 -0
- package/server/rscWorkerHost.ts +616 -0
- package/server/sitemap.ts +90 -0
- package/server/ssrFromRscRenderer.tsx +285 -0
- package/server/ssrTypes.ts +48 -0
- package/server/types/react-server-dom-webpack.d.ts +91 -0
- package/server/types.tsx +109 -0
- package/server/vendor/akanjs-base.ts +1 -0
- package/server/vendor/akanjs-common.ts +1 -0
- package/server/vendor/akanjs-constant.ts +1 -0
- package/server/vendor/akanjs-store.ts +1 -0
- package/server/vendor/react-dom-client.ts +5 -0
- package/server/vendor/react-dom.ts +21 -0
- package/server/vendor/react-jsx-dev-runtime.ts +5 -0
- package/server/vendor/react-jsx-runtime.ts +5 -0
- package/server/vendor/react-refresh-runtime.ts +6 -0
- package/server/vendor/react-server-dom-webpack-client-browser.ts +12 -0
- package/server/vendor/react.ts +51 -0
- package/server/vendor/scheduler.ts +23 -0
- package/server/webRouter.ts +712 -0
- package/service/adapt.ts +47 -0
- package/service/base.service.ts +18 -0
- package/service/index.ts +10 -0
- package/service/injectInfo.ts +393 -0
- package/service/ipcTypes.ts +127 -0
- package/service/predefinedAdaptor/cache.adaptor.ts +105 -0
- package/service/predefinedAdaptor/compress.adaptor.ts +357 -0
- package/service/predefinedAdaptor/database.adaptor.ts +1310 -0
- package/service/predefinedAdaptor/index.ts +13 -0
- package/service/predefinedAdaptor/logging.adaptor.ts +36 -0
- package/service/predefinedAdaptor/queue.adaptor.ts +42 -0
- package/service/predefinedAdaptor/role.adaptor.ts +18 -0
- package/service/predefinedAdaptor/schedule.adaptor.ts +188 -0
- package/service/predefinedAdaptor/solidCache.adaptor.ts +143 -0
- package/service/predefinedAdaptor/solidPubsub.adaptor.ts +98 -0
- package/service/predefinedAdaptor/solidQueue.adaptor.ts +203 -0
- package/service/predefinedAdaptor/solidSqlite.ts +85 -0
- package/service/predefinedAdaptor/sqlitePath.ts +20 -0
- package/service/predefinedAdaptor/storage.adaptor.ts +121 -0
- package/service/predefinedAdaptor/websocket.adaptor.ts +313 -0
- package/service/serve.ts +223 -0
- package/service/serviceModule.ts +221 -0
- package/service/serviceRegistry.ts +26 -0
- package/service/types.ts +113 -0
- package/signal/base.signal.ts +46 -0
- package/signal/endpoint.ts +122 -0
- package/signal/endpointInfo.ts +374 -0
- package/signal/exception.ts +50 -0
- package/signal/guard.ts +18 -0
- package/signal/guards.ts +16 -0
- package/signal/index.ts +18 -0
- package/signal/intercept.ts +39 -0
- package/signal/internal.ts +56 -0
- package/signal/internalArg.ts +38 -0
- package/signal/internalInfo.ts +208 -0
- package/signal/middleware.ts +108 -0
- package/signal/serializer/fetch.serializer.ts +128 -0
- package/signal/serializer/index.ts +1 -0
- package/signal/serverSignal.ts +114 -0
- package/signal/signalContext.ts +446 -0
- package/signal/signalRegistry.ts +82 -0
- package/signal/slice.ts +158 -0
- package/signal/sliceInfo.ts +254 -0
- package/signal/types.ts +131 -0
- package/store/action.ts +1067 -0
- package/store/baseSt.ts +81 -0
- package/store/hooks.ts +2 -0
- package/store/index.ts +8 -0
- package/store/rootStore.ts +26 -0
- package/store/state.ts +226 -0
- package/store/stateBuilder.ts +429 -0
- package/store/stateInfo.ts +66 -0
- package/store/store.ts +194 -0
- package/store/storeInstance.ts +382 -0
- package/store/storeRegistry.ts +84 -0
- package/store/types.ts +69 -0
- package/store/withSelector.ts +62 -0
- package/test/index.ts +16 -0
- package/test/playwright.config.base.ts +48 -0
- package/test/playwright.pageAgent.ts +41 -0
- package/test/sample.ts +19 -0
- package/test/sampleOf.ts +70 -0
- package/test/signalTest.preload.ts +10 -0
- package/test/signalTestRuntime.ts +126 -0
- package/test/testServer.ts +187 -0
- package/ui/BottomSheet.tsx +103 -0
- package/ui/Button.tsx +70 -0
- package/ui/ClientSide.tsx +11 -0
- package/ui/Clipboard.tsx +49 -0
- package/ui/Constant/Doc.tsx +696 -0
- package/ui/Constant/Mermaid.tsx +149 -0
- package/ui/Constant/index.ts +6 -0
- package/ui/Constant/schemaDoc.ts +324 -0
- package/ui/Copy.tsx +27 -0
- package/ui/CsrImage.tsx +38 -0
- package/ui/Data/CardList.tsx +141 -0
- package/ui/Data/Dashboard.tsx +72 -0
- package/ui/Data/Insight.tsx +35 -0
- package/ui/Data/Item.tsx +285 -0
- package/ui/Data/ListContainer.tsx +320 -0
- package/ui/Data/Pagination.tsx +54 -0
- package/ui/Data/QueryMaker.tsx +21 -0
- package/ui/Data/TableList.tsx +161 -0
- package/ui/Data/index.ts +11 -0
- package/ui/Data/index_.tsx +11 -0
- package/ui/DatePicker.tsx +184 -0
- package/ui/Dialog/Action.tsx +15 -0
- package/ui/Dialog/Close.tsx +22 -0
- package/ui/Dialog/Content.tsx +11 -0
- package/ui/Dialog/Modal.tsx +137 -0
- package/ui/Dialog/Provider.tsx +33 -0
- package/ui/Dialog/Title.tsx +15 -0
- package/ui/Dialog/Trigger.tsx +22 -0
- package/ui/Dialog/context.ts +20 -0
- package/ui/Dialog/index.tsx +15 -0
- package/ui/DragAction.tsx +129 -0
- package/ui/DraggableList.tsx +230 -0
- package/ui/Dropdown.tsx +51 -0
- package/ui/Empty.tsx +32 -0
- package/ui/Field.tsx +1556 -0
- package/ui/FontFace.tsx +26 -0
- package/ui/Image.tsx +185 -0
- package/ui/InfiniteScroll.tsx +67 -0
- package/ui/Input.tsx +636 -0
- package/ui/KeyboardAvoiding.tsx +62 -0
- package/ui/Layout/BottomAction.tsx +15 -0
- package/ui/Layout/BottomInset.tsx +42 -0
- package/ui/Layout/BottomTab.tsx +71 -0
- package/ui/Layout/Header.tsx +38 -0
- package/ui/Layout/LeftSider.tsx +34 -0
- package/ui/Layout/Navbar.tsx +46 -0
- package/ui/Layout/RightSider.tsx +41 -0
- package/ui/Layout/Sider.tsx +69 -0
- package/ui/Layout/Template.tsx +11 -0
- package/ui/Layout/TopLeftAction.tsx +28 -0
- package/ui/Layout/Unit.tsx +19 -0
- package/ui/Layout/View.tsx +12 -0
- package/ui/Layout/Zone.tsx +10 -0
- package/ui/Layout/index.ts +27 -0
- package/ui/Link/Back.tsx +15 -0
- package/ui/Link/Close.tsx +20 -0
- package/ui/Link/CsrLink.tsx +41 -0
- package/ui/Link/Lang.tsx +16 -0
- package/ui/Link/SsrLink.tsx +68 -0
- package/ui/Link/index.tsx +32 -0
- package/ui/Link/types.ts +47 -0
- package/ui/Load/Edit.tsx +19 -0
- package/ui/Load/Edit_Client.tsx +120 -0
- package/ui/Load/Page.tsx +40 -0
- package/ui/Load/PageCSR.tsx +39 -0
- package/ui/Load/Pagination.tsx +89 -0
- package/ui/Load/Units.tsx +330 -0
- package/ui/Load/View.tsx +115 -0
- package/ui/Load/index.ts +11 -0
- package/ui/Load/index_.tsx +6 -0
- package/ui/Loading/Area.tsx +10 -0
- package/ui/Loading/Button.tsx +17 -0
- package/ui/Loading/Input.tsx +17 -0
- package/ui/Loading/ProgressBar.tsx +14 -0
- package/ui/Loading/Skeleton.tsx +22 -0
- package/ui/Loading/Spin.tsx +22 -0
- package/ui/Loading/index.tsx +8 -0
- package/ui/Menu.tsx +273 -0
- package/ui/Modal.tsx +87 -0
- package/ui/Model/AdminPanel.tsx +51 -0
- package/ui/Model/Edit.tsx +46 -0
- package/ui/Model/EditModal.tsx +301 -0
- package/ui/Model/EditWrapper.tsx +48 -0
- package/ui/Model/LoadInit.tsx +11 -0
- package/ui/Model/New.tsx +46 -0
- package/ui/Model/NewWrapper.tsx +20 -0
- package/ui/Model/NewWrapper_Client.tsx +57 -0
- package/ui/Model/Remove.tsx +75 -0
- package/ui/Model/RemoveWrapper.tsx +38 -0
- package/ui/Model/SureToRemove.tsx +108 -0
- package/ui/Model/View.tsx +65 -0
- package/ui/Model/ViewEditModal.tsx +125 -0
- package/ui/Model/ViewModal.tsx +71 -0
- package/ui/Model/ViewWrapper.tsx +38 -0
- package/ui/Model/index.ts +33 -0
- package/ui/Model/index_.tsx +16 -0
- package/ui/More.tsx +56 -0
- package/ui/ObjectId.tsx +29 -0
- package/ui/Pagination.tsx +120 -0
- package/ui/Popconfirm.tsx +135 -0
- package/ui/Portal.tsx +10 -0
- package/ui/Radio.tsx +53 -0
- package/ui/RecentTime.tsx +123 -0
- package/ui/Refresh.tsx +24 -0
- package/ui/ScreenNavigator.tsx +129 -0
- package/ui/Select.tsx +322 -0
- package/ui/Signal/Arg.tsx +352 -0
- package/ui/Signal/Doc.tsx +231 -0
- package/ui/Signal/Listener.tsx +74 -0
- package/ui/Signal/Message.tsx +267 -0
- package/ui/Signal/Object.tsx +131 -0
- package/ui/Signal/PubSub.tsx +247 -0
- package/ui/Signal/Request.tsx +30 -0
- package/ui/Signal/Response.tsx +76 -0
- package/ui/Signal/RestApi.tsx +390 -0
- package/ui/Signal/WebSocket.tsx +47 -0
- package/ui/Signal/index.ts +10 -0
- package/ui/Signal/makeExample.ts +75 -0
- package/ui/System/CSR.tsx +420 -0
- package/ui/System/Client.tsx +296 -0
- package/ui/System/Common.tsx +83 -0
- package/ui/System/DevModeToggle.tsx +21 -0
- package/ui/System/Gtag.tsx +69 -0
- package/ui/System/Messages.tsx +175 -0
- package/ui/System/Reconnect.tsx +156 -0
- package/ui/System/Root.tsx +10 -0
- package/ui/System/SSR.tsx +163 -0
- package/ui/System/SelectLanguage.tsx +47 -0
- package/ui/System/ThemeToggle.tsx +98 -0
- package/ui/System/index.tsx +23 -0
- package/ui/Tab/Menu.tsx +56 -0
- package/ui/Tab/Menus.tsx +10 -0
- package/ui/Tab/Panel.tsx +25 -0
- package/ui/Tab/Provider.tsx +25 -0
- package/ui/Tab/context.ts +16 -0
- package/ui/Tab/index.tsx +11 -0
- package/ui/Table.tsx +131 -0
- package/ui/ToggleSelect.tsx +144 -0
- package/ui/Unauthorized.tsx +29 -0
- package/ui/animated.tsx +8 -0
- package/ui/fontCss.ts +86 -0
- package/ui/index.ts +44 -0
- package/ui/styles.css +617 -0
- package/webkit/bootCsr.tsx +275 -0
- package/webkit/createRobotPage.ts +15 -0
- package/webkit/createSitemapPage.ts +4 -0
- package/webkit/index.ts +19 -0
- package/webkit/lazy.tsx +37 -0
- package/webkit/types.ts +7 -0
- package/webkit/useCamera.tsx +99 -0
- package/webkit/useCodepush.tsx +99 -0
- package/webkit/useContact.tsx +48 -0
- package/webkit/useCsrValues.ts +661 -0
- package/webkit/useDebounce.ts +24 -0
- package/webkit/useFetch.ts +48 -0
- package/webkit/useGeoLocation.tsx +24 -0
- package/webkit/useHistory.ts +76 -0
- package/webkit/useInterval.ts +21 -0
- package/webkit/useLocation.ts +69 -0
- package/webkit/usePurchase.tsx +156 -0
- package/webkit/usePushNoti.tsx +48 -0
- package/webkit/useThrottle.ts +22 -0
- package/src/index.js +0 -2
- package/src/index.js.map +0 -1
- package/src/lib/akan2.js +0 -4
- package/src/lib/akan2.js.map +0 -1
- package/src/run.js +0 -4
- package/src/run.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BaseEndpoint } from "akanjs/signal";
|
|
2
|
+
|
|
3
|
+
import { baseDictionary } from "./base.dictionary";
|
|
4
|
+
import { registerServiceTrans } from "./locale";
|
|
5
|
+
import { makeTrans } from "./trans";
|
|
6
|
+
|
|
7
|
+
export const dictionary = { base: registerServiceTrans<"base", BaseEndpoint, typeof baseDictionary>(baseDictionary) };
|
|
8
|
+
|
|
9
|
+
export const { Err, translate, msg, getDictionary, getAllDictionary, __Dict_Key__, __Error_Key__ } =
|
|
10
|
+
makeTrans(dictionary);
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import type { GetStateObject, MergedValues } from "akanjs/base";
|
|
2
|
+
import type { BaseInsight, BaseObject } from "akanjs/constant";
|
|
3
|
+
import type { FilterInfo, FilterInstance } from "akanjs/document";
|
|
4
|
+
import type { EndpointInfo, SliceInfo } from "akanjs/signal";
|
|
5
|
+
import type { ModelDictInfo, ScalarDictInfo, ServiceDictInfo } from ".";
|
|
6
|
+
|
|
7
|
+
interface Trans {
|
|
8
|
+
t: string;
|
|
9
|
+
}
|
|
10
|
+
interface FieldTrans {
|
|
11
|
+
t: string;
|
|
12
|
+
desc?: string;
|
|
13
|
+
}
|
|
14
|
+
interface FnTrans<ArgKey extends string> {
|
|
15
|
+
t: string;
|
|
16
|
+
desc?: string;
|
|
17
|
+
arg?: { [key in ArgKey]: FieldTrans };
|
|
18
|
+
}
|
|
19
|
+
type FilterTranslatorKey<Filter extends FilterInstance> = {
|
|
20
|
+
[Key in keyof Filter["query"] & string]:
|
|
21
|
+
| `${Key}`
|
|
22
|
+
| `${Key}.desc`
|
|
23
|
+
| (Filter["query"][Key] extends FilterInfo<infer ArgNames, any>
|
|
24
|
+
? ArgNames[number] extends string
|
|
25
|
+
? `${Key}.arg.${ArgNames[number]}` | `${Key}.arg.${ArgNames[number]}.desc`
|
|
26
|
+
: never
|
|
27
|
+
: never);
|
|
28
|
+
}[keyof Filter["query"] & string];
|
|
29
|
+
type EndpointTranslatorKey<Endpoint extends { [key: string]: EndpointInfo }> = {
|
|
30
|
+
[Key in keyof Endpoint & string]:
|
|
31
|
+
| `${Key}`
|
|
32
|
+
| `${Key}.desc`
|
|
33
|
+
| `${Key}.arg.${Endpoint[Key]["argNames"][number]}`
|
|
34
|
+
| `${Key}.arg.${Endpoint[Key]["argNames"][number]}.desc`;
|
|
35
|
+
}[keyof Endpoint & string];
|
|
36
|
+
type SliceTranslatorKey<Slice> = {
|
|
37
|
+
[Key in keyof Slice & string]: Slice[Key] extends SliceInfo<
|
|
38
|
+
infer T,
|
|
39
|
+
any,
|
|
40
|
+
any,
|
|
41
|
+
any,
|
|
42
|
+
any,
|
|
43
|
+
any,
|
|
44
|
+
any,
|
|
45
|
+
infer ArgNames,
|
|
46
|
+
any,
|
|
47
|
+
any,
|
|
48
|
+
any
|
|
49
|
+
>
|
|
50
|
+
?
|
|
51
|
+
| `${T}List${Capitalize<Key>}`
|
|
52
|
+
| `${T}List${Capitalize<Key>}.desc`
|
|
53
|
+
| `${T}List${Capitalize<Key>}.arg.${ArgNames[number] | "skip" | "limit" | "sort"}`
|
|
54
|
+
| `${T}List${Capitalize<Key>}.arg.${ArgNames[number] | "skip" | "limit" | "sort"}.desc`
|
|
55
|
+
| `${T}Insight${Capitalize<Key>}`
|
|
56
|
+
| `${T}Insight${Capitalize<Key>}.desc`
|
|
57
|
+
| `${T}Insight${Capitalize<Key>}.arg.${ArgNames[number]}`
|
|
58
|
+
| `${T}Insight${Capitalize<Key>}.arg.${ArgNames[number]}.desc`
|
|
59
|
+
: never;
|
|
60
|
+
}[keyof Slice & string];
|
|
61
|
+
|
|
62
|
+
type SliceApiTrans<
|
|
63
|
+
T extends string,
|
|
64
|
+
Suffix extends string,
|
|
65
|
+
ArgName extends string,
|
|
66
|
+
_CapitalizedSuffix extends string = Capitalize<Suffix>,
|
|
67
|
+
> = {
|
|
68
|
+
[K in `${T}List${_CapitalizedSuffix}`]: FnTrans<ArgName | "skip" | "limit" | "sort">;
|
|
69
|
+
} & {
|
|
70
|
+
[K in `${T}Insight${_CapitalizedSuffix}`]: FnTrans<ArgName>;
|
|
71
|
+
};
|
|
72
|
+
type BaseModelCrudGetApiTrans<T extends string> = {
|
|
73
|
+
[K in T]: FnTrans<`${T}Id`>;
|
|
74
|
+
} & {
|
|
75
|
+
[K in `light${T}`]: FnTrans<`${T}Id`>;
|
|
76
|
+
} & {
|
|
77
|
+
[K in `create${T}`]: FnTrans<"data">;
|
|
78
|
+
} & {
|
|
79
|
+
[K in `update${T}`]: FnTrans<`${T}Id` | "data">;
|
|
80
|
+
} & {
|
|
81
|
+
[K in `remove${T}`]: FnTrans<`${T}Id`>;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type ModelTrans<
|
|
85
|
+
T extends string,
|
|
86
|
+
Model extends BaseObject,
|
|
87
|
+
Insight extends BaseInsight,
|
|
88
|
+
Filter extends FilterInstance,
|
|
89
|
+
Slice extends { [key: string]: SliceInfo },
|
|
90
|
+
Endpoint extends { [key: string]: EndpointInfo },
|
|
91
|
+
ErrorKey extends string,
|
|
92
|
+
EtcKey extends string,
|
|
93
|
+
> = {
|
|
94
|
+
modelName: Trans;
|
|
95
|
+
modelDesc: Trans;
|
|
96
|
+
model: { [K in keyof GetStateObject<Model>]: FieldTrans };
|
|
97
|
+
insight: { [K in keyof GetStateObject<Insight>]: FieldTrans };
|
|
98
|
+
query: {
|
|
99
|
+
[K in keyof Filter["query"]]: Filter["query"][K] extends FilterInfo<infer ArgNames, any>
|
|
100
|
+
? FnTrans<ArgNames[number]>
|
|
101
|
+
: never;
|
|
102
|
+
};
|
|
103
|
+
sort: { [K in keyof Filter["sort"]]: FieldTrans };
|
|
104
|
+
api: {
|
|
105
|
+
[K in keyof Endpoint]: FnTrans<Endpoint[K]["argNames"][number]>;
|
|
106
|
+
} & BaseModelCrudGetApiTrans<T> &
|
|
107
|
+
MergedValues<{
|
|
108
|
+
[K in keyof Slice]: SliceApiTrans<Slice[K]["refName"], K & string, Slice[K]["argNames"][number]>;
|
|
109
|
+
}>;
|
|
110
|
+
error: { [K in ErrorKey]: Trans };
|
|
111
|
+
} & { [K in EtcKey]: Trans };
|
|
112
|
+
export type ModelTranslatorKey<
|
|
113
|
+
T extends string,
|
|
114
|
+
Model,
|
|
115
|
+
Insight,
|
|
116
|
+
Filter extends FilterInstance,
|
|
117
|
+
Slice extends { [key: string]: SliceInfo },
|
|
118
|
+
Endpoint extends { [key: string]: EndpointInfo },
|
|
119
|
+
EtcKey extends string,
|
|
120
|
+
> =
|
|
121
|
+
| `${T}.modelName`
|
|
122
|
+
| `${T}.modelDesc`
|
|
123
|
+
| `${T}.${keyof GetStateObject<Model> & string}${"" | ".desc"}`
|
|
124
|
+
| `${T}.insight.${keyof GetStateObject<Insight> & string}${"" | ".desc"}`
|
|
125
|
+
| `${T}.query.${FilterTranslatorKey<Filter>}`
|
|
126
|
+
| `${T}.sort.${keyof Filter["sort"] & string}${"" | ".desc"}`
|
|
127
|
+
| `${T}.signal.${EndpointTranslatorKey<Endpoint> | SliceTranslatorKey<Slice>}`
|
|
128
|
+
| `${T}.${EtcKey}`;
|
|
129
|
+
|
|
130
|
+
export type ScalarTrans<T extends string, Model, ErrorKey extends string, EtcKey extends string> = {
|
|
131
|
+
name: Trans;
|
|
132
|
+
desc: Trans;
|
|
133
|
+
model: { [K in keyof GetStateObject<Model>]: FieldTrans };
|
|
134
|
+
error: { [K in ErrorKey]: Trans };
|
|
135
|
+
} & { [K in EtcKey]: Trans };
|
|
136
|
+
export type ScalarTranslatorKey<T extends string, Model, EtcKey extends string> =
|
|
137
|
+
| `${T}.modelName`
|
|
138
|
+
| `${T}.modelDesc`
|
|
139
|
+
| `${T}.${keyof GetStateObject<Model> & string}${"" | ".desc"}`
|
|
140
|
+
| `${T}.${EtcKey}`;
|
|
141
|
+
|
|
142
|
+
export type ServiceTrans<
|
|
143
|
+
T extends string,
|
|
144
|
+
Endpoint extends { [key: string]: EndpointInfo },
|
|
145
|
+
ErrorKey extends string,
|
|
146
|
+
EtcKey extends string,
|
|
147
|
+
> = {
|
|
148
|
+
api: {
|
|
149
|
+
[K in keyof Endpoint]: FnTrans<Endpoint[K]["argNames"][number]>;
|
|
150
|
+
};
|
|
151
|
+
error: { [K in ErrorKey]: Trans };
|
|
152
|
+
} & { [K in EtcKey]: Trans };
|
|
153
|
+
export type ServiceTranslatorKey<
|
|
154
|
+
T extends string,
|
|
155
|
+
Endpoint extends { [key: string]: EndpointInfo },
|
|
156
|
+
EtcKey extends string,
|
|
157
|
+
> = `${T}.signal.${EndpointTranslatorKey<Endpoint>}` | `${T}.${EtcKey}`;
|
|
158
|
+
|
|
159
|
+
export type EnumTrans<EnumValue extends string | number> = {
|
|
160
|
+
[key in EnumValue]: Trans;
|
|
161
|
+
};
|
|
162
|
+
export type EnumTranslatorKey<EnumKey extends string> = `${EnumKey}.${string}${"" | ".desc"}`;
|
|
163
|
+
|
|
164
|
+
export interface DictModule<DictKey extends string, ErrorKey extends string> {
|
|
165
|
+
__Dict_Key__: DictKey;
|
|
166
|
+
__Error_Key__: ErrorKey;
|
|
167
|
+
dict: ModelDictInfo<any> | ScalarDictInfo<any> | ServiceDictInfo<any>;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export const registerModelTrans = <
|
|
171
|
+
RefName extends string,
|
|
172
|
+
Model extends BaseObject,
|
|
173
|
+
Insight extends BaseInsight,
|
|
174
|
+
Filter extends FilterInstance,
|
|
175
|
+
Slice extends { [key: string]: SliceInfo },
|
|
176
|
+
Endpoint extends { [key: string]: EndpointInfo },
|
|
177
|
+
ModelDict extends ModelDictInfo<any>,
|
|
178
|
+
>(
|
|
179
|
+
modelDict: ModelDict,
|
|
180
|
+
): ModelDict extends ModelDictInfo<any, any, any, any, any, infer EnumKey, any, any, any, infer ErrorKey, infer EtcKey>
|
|
181
|
+
? DictModule<
|
|
182
|
+
ModelTranslatorKey<RefName, Model, Insight, Filter, Slice, Endpoint, EtcKey> | EnumTranslatorKey<EnumKey>,
|
|
183
|
+
`${RefName}.error.${ErrorKey}`
|
|
184
|
+
>
|
|
185
|
+
: never => {
|
|
186
|
+
return { dict: modelDict } as unknown as ModelDict extends ModelDictInfo<
|
|
187
|
+
any,
|
|
188
|
+
any,
|
|
189
|
+
any,
|
|
190
|
+
any,
|
|
191
|
+
any,
|
|
192
|
+
infer EnumKey,
|
|
193
|
+
any,
|
|
194
|
+
any,
|
|
195
|
+
any,
|
|
196
|
+
infer ErrorKey,
|
|
197
|
+
infer EtcKey
|
|
198
|
+
>
|
|
199
|
+
? DictModule<
|
|
200
|
+
ModelTranslatorKey<RefName, Model, Insight, Filter, Slice, Endpoint, EtcKey> | EnumTranslatorKey<EnumKey>,
|
|
201
|
+
`${RefName}.error.${ErrorKey}`
|
|
202
|
+
>
|
|
203
|
+
: never;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export const registerScalarTrans = <T extends string, Model, ScalarDict>(
|
|
207
|
+
scalarDict: ScalarDict,
|
|
208
|
+
): ScalarDict extends ScalarDictInfo<any, any, infer EnumKey, infer ErrorKey, infer EtcKey>
|
|
209
|
+
? DictModule<ScalarTranslatorKey<T, Model, EtcKey> | EnumTranslatorKey<EnumKey>, `${T}.error.${ErrorKey}`>
|
|
210
|
+
: never => {
|
|
211
|
+
return { dict: scalarDict } as unknown as ScalarDict extends ScalarDictInfo<
|
|
212
|
+
any,
|
|
213
|
+
any,
|
|
214
|
+
infer EnumKey,
|
|
215
|
+
infer ErrorKey,
|
|
216
|
+
infer EtcKey
|
|
217
|
+
>
|
|
218
|
+
? DictModule<ScalarTranslatorKey<T, Model, EtcKey> | EnumTranslatorKey<EnumKey>, `${T}.error.${ErrorKey}`>
|
|
219
|
+
: never;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
export const registerServiceTrans = <T extends string, Endpoint extends { [key: string]: EndpointInfo }, ServiceDict>(
|
|
223
|
+
serviceDict: ServiceDict,
|
|
224
|
+
): ServiceDict extends ServiceDictInfo<any, any, infer ErrorKey, infer EtcKey>
|
|
225
|
+
? DictModule<ServiceTranslatorKey<T, Endpoint, EtcKey>, `${T}.error.${ErrorKey}`>
|
|
226
|
+
: never => {
|
|
227
|
+
return { dict: serviceDict } as unknown as ServiceDict extends ServiceDictInfo<any, any, infer ErrorKey, infer EtcKey>
|
|
228
|
+
? DictModule<ServiceTranslatorKey<T, Endpoint, EtcKey>, `${T}.error.${ErrorKey}`>
|
|
229
|
+
: never;
|
|
230
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { GetStateObject, ObjectAssign, Prettify } from "akanjs/base";
|
|
2
|
+
import { pathGet } from "akanjs/common";
|
|
3
|
+
|
|
4
|
+
import type { DictModule } from "./locale";
|
|
5
|
+
|
|
6
|
+
type TranslationSingle = readonly [string, string] | readonly [string, string, string, string];
|
|
7
|
+
type TranslationWithParam = readonly [string, string, { [key: string]: string | number }];
|
|
8
|
+
export type Translation = TranslationSingle | TranslationWithParam;
|
|
9
|
+
export type TranslationData = Record<string, unknown>;
|
|
10
|
+
export type DictionaryNode = Record<string, unknown>;
|
|
11
|
+
export type RootDictionary = Record<string, Record<string, DictionaryNode>>;
|
|
12
|
+
|
|
13
|
+
export type Translate<Checker> = {
|
|
14
|
+
[K in keyof GetStateObject<Checker>]: Translation;
|
|
15
|
+
} & Record<string, Translation> & { modelName: Translation };
|
|
16
|
+
|
|
17
|
+
export type TransMessage<Locale extends Record<string, unknown>> = {
|
|
18
|
+
[K in keyof Locale]-?: `${K & string}${Locale[K] extends Record<string, unknown> ? `.${keyof Locale[K] extends string ? keyof Locale[K] : never}` : ""}`;
|
|
19
|
+
}[keyof Locale];
|
|
20
|
+
|
|
21
|
+
export const makeDictionary = <Dicts extends Record<string, unknown>[]>(
|
|
22
|
+
...dicts: Dicts
|
|
23
|
+
): Prettify<ObjectAssign<Dicts>> => {
|
|
24
|
+
return Object.assign(...(dicts as unknown as [object, object])) as Prettify<ObjectAssign<Dicts>>;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const languages = ["en", "ko", "zhChs", "zhCht", "ja"] as const;
|
|
28
|
+
|
|
29
|
+
type Language = (typeof languages)[number];
|
|
30
|
+
export interface TransMessageOption {
|
|
31
|
+
key?: string;
|
|
32
|
+
duration?: number;
|
|
33
|
+
data?: TranslationData;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ErrRestoreOption {
|
|
37
|
+
statusCode?: number;
|
|
38
|
+
details?: unknown;
|
|
39
|
+
path?: string;
|
|
40
|
+
timestamp?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface ErrPayload extends ErrRestoreOption {
|
|
44
|
+
error: string;
|
|
45
|
+
data?: TranslationData;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type ErrInstance = Error & {
|
|
49
|
+
readonly error: string;
|
|
50
|
+
readonly statusCode: number;
|
|
51
|
+
readonly details?: unknown;
|
|
52
|
+
readonly data?: TranslationData;
|
|
53
|
+
readonly path?: string;
|
|
54
|
+
readonly timestamp?: string;
|
|
55
|
+
toJSON(): ErrPayload & { statusCode: number };
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export type ErrConstructor<ErrorKey extends string> = {
|
|
59
|
+
new (key: ErrorKey, data?: TranslationData, option?: ErrRestoreOption): ErrInstance;
|
|
60
|
+
prototype: ErrInstance;
|
|
61
|
+
fromJSON(payload: ErrPayload): ErrInstance;
|
|
62
|
+
BadRequest: new (key: ErrorKey, data?: TranslationData, option?: ErrRestoreOption) => ErrInstance;
|
|
63
|
+
Unauthorized: new (key: ErrorKey, data?: TranslationData, option?: ErrRestoreOption) => ErrInstance;
|
|
64
|
+
Forbidden: new (key: ErrorKey, data?: TranslationData, option?: ErrRestoreOption) => ErrInstance;
|
|
65
|
+
NotFound: new (key: ErrorKey, data?: TranslationData, option?: ErrRestoreOption) => ErrInstance;
|
|
66
|
+
Conflict: new (key: ErrorKey, data?: TranslationData, option?: ErrRestoreOption) => ErrInstance;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const msg = {
|
|
70
|
+
info: () => null,
|
|
71
|
+
success: () => null,
|
|
72
|
+
error: () => null,
|
|
73
|
+
warning: () => null,
|
|
74
|
+
loading: () => null,
|
|
75
|
+
} as {
|
|
76
|
+
info: (key: TransMessage<Record<string, unknown>>, option?: TransMessageOption) => void;
|
|
77
|
+
success: (key: TransMessage<Record<string, unknown>>, option?: TransMessageOption) => void;
|
|
78
|
+
error: (key: TransMessage<Record<string, unknown>>, option?: TransMessageOption) => void;
|
|
79
|
+
warning: (key: TransMessage<Record<string, unknown>>, option?: TransMessageOption) => void;
|
|
80
|
+
loading: (key: TransMessage<Record<string, unknown>>, option?: TransMessageOption) => void;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const rootDictionary = {} as RootDictionary;
|
|
84
|
+
export const makeTrans = <
|
|
85
|
+
GlobalTransMap extends Record<string, DictModule<string, string>>,
|
|
86
|
+
_DictKey extends string = GlobalTransMap[keyof GlobalTransMap]["__Dict_Key__"],
|
|
87
|
+
_ErrorKey extends string = GlobalTransMap[keyof GlobalTransMap]["__Error_Key__"],
|
|
88
|
+
>(
|
|
89
|
+
transMap: GlobalTransMap,
|
|
90
|
+
{ build = false }: { build?: boolean } = {},
|
|
91
|
+
): {
|
|
92
|
+
Err: ErrConstructor<_ErrorKey>;
|
|
93
|
+
translate: (lang: Language, key: _DictKey, data?: TranslationData) => string;
|
|
94
|
+
msg: {
|
|
95
|
+
info: (key: _DictKey, option?: TransMessageOption) => void;
|
|
96
|
+
success: (key: _DictKey, option?: TransMessageOption) => void;
|
|
97
|
+
error: (key: _DictKey, option?: TransMessageOption) => void;
|
|
98
|
+
warning: (key: _DictKey, option?: TransMessageOption) => void;
|
|
99
|
+
loading: (key: _DictKey, option?: TransMessageOption) => void;
|
|
100
|
+
};
|
|
101
|
+
getDictionary: (lang: Language) => object;
|
|
102
|
+
getAllDictionary: () => RootDictionary;
|
|
103
|
+
__Dict_Key__: _DictKey;
|
|
104
|
+
__Error_Key__: _ErrorKey;
|
|
105
|
+
} => {
|
|
106
|
+
Object.entries(transMap).forEach(([refName, trans]) => {
|
|
107
|
+
trans.dict._registerToRoot(refName, rootDictionary);
|
|
108
|
+
});
|
|
109
|
+
class Err extends Error {
|
|
110
|
+
readonly error: string;
|
|
111
|
+
readonly statusCode: number;
|
|
112
|
+
readonly details?: unknown;
|
|
113
|
+
readonly data?: TranslationData;
|
|
114
|
+
readonly path?: string;
|
|
115
|
+
readonly timestamp?: string;
|
|
116
|
+
|
|
117
|
+
constructor(key: _ErrorKey, data?: TranslationData, option: ErrRestoreOption = {}) {
|
|
118
|
+
super(key as string);
|
|
119
|
+
this.name = this.constructor.name;
|
|
120
|
+
this.error = key as string;
|
|
121
|
+
this.statusCode = option.statusCode ?? 400;
|
|
122
|
+
this.details = option.details;
|
|
123
|
+
this.data = data;
|
|
124
|
+
this.path = option.path;
|
|
125
|
+
this.timestamp = option.timestamp;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
toJSON() {
|
|
129
|
+
return {
|
|
130
|
+
error: this.message,
|
|
131
|
+
statusCode: this.statusCode,
|
|
132
|
+
...(this.details !== undefined ? { details: this.details } : {}),
|
|
133
|
+
...(this.data !== undefined ? { data: this.data } : {}),
|
|
134
|
+
...(this.path !== undefined ? { path: this.path } : {}),
|
|
135
|
+
...(this.timestamp !== undefined ? { timestamp: this.timestamp } : {}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
static fromJSON(payload: ErrPayload) {
|
|
140
|
+
return new Err(payload.error as _ErrorKey, payload.data, payload);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static BadRequest = class BadRequestErr extends Err {
|
|
144
|
+
constructor(key: _ErrorKey, data?: TranslationData, option: ErrRestoreOption = {}) {
|
|
145
|
+
super(key, data, { ...option, statusCode: 400 });
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
static Unauthorized = class UnauthorizedErr extends Err {
|
|
150
|
+
constructor(key: _ErrorKey, data?: TranslationData, option: ErrRestoreOption = {}) {
|
|
151
|
+
super(key, data, { ...option, statusCode: 401 });
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
static Forbidden = class ForbiddenErr extends Err {
|
|
156
|
+
constructor(key: _ErrorKey, data?: TranslationData, option: ErrRestoreOption = {}) {
|
|
157
|
+
super(key, data, { ...option, statusCode: 403 });
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
static NotFound = class NotFoundErr extends Err {
|
|
162
|
+
constructor(key: _ErrorKey, data?: TranslationData, option: ErrRestoreOption = {}) {
|
|
163
|
+
super(key, data, { ...option, statusCode: 404 });
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
static Conflict = class ConflictErr extends Err {
|
|
168
|
+
constructor(key: _ErrorKey, data?: TranslationData, option: ErrRestoreOption = {}) {
|
|
169
|
+
super(key, data, { ...option, statusCode: 409 });
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const translate = (lang: Language, key: _DictKey, data?: TranslationData) => {
|
|
174
|
+
const [modelName, ...msgKeys] = key.split(".");
|
|
175
|
+
const msgKey = msgKeys.join(".");
|
|
176
|
+
const langDict = rootDictionary[lang] ?? {};
|
|
177
|
+
const model = langDict[modelName as string] ?? {};
|
|
178
|
+
const message = pathGet(msgKey as string, model, ".", { t: key }) as { t: string };
|
|
179
|
+
return message.t;
|
|
180
|
+
};
|
|
181
|
+
const getDictionary = (lang: Language) => {
|
|
182
|
+
return rootDictionary[lang];
|
|
183
|
+
};
|
|
184
|
+
const getAllDictionary = () => {
|
|
185
|
+
return rootDictionary;
|
|
186
|
+
};
|
|
187
|
+
return {
|
|
188
|
+
Err,
|
|
189
|
+
translate,
|
|
190
|
+
msg,
|
|
191
|
+
getDictionary,
|
|
192
|
+
getAllDictionary,
|
|
193
|
+
__Dict_Key__: null as unknown as _DictKey,
|
|
194
|
+
__Error_Key__: null as unknown as _ErrorKey,
|
|
195
|
+
};
|
|
196
|
+
};
|
package/document/by.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Cls, FIELD_META, type MergeAllActionTypes, type UnCls } from "akanjs/base";
|
|
2
|
+
import { applyMixins } from "akanjs/common";
|
|
3
|
+
import {
|
|
4
|
+
type BaseObject,
|
|
5
|
+
type ConstantCls,
|
|
6
|
+
ConstantRegistry,
|
|
7
|
+
type DocumentModel,
|
|
8
|
+
type FieldObject,
|
|
9
|
+
} from "akanjs/constant";
|
|
10
|
+
|
|
11
|
+
export type DatabaseCls<Schema = any> = Cls<Schema, { refName: string; [FIELD_META]: FieldObject }>;
|
|
12
|
+
|
|
13
|
+
export interface DefaultDocMtds<TDocument> {
|
|
14
|
+
refresh(): Promise<this>;
|
|
15
|
+
isModified(field?: keyof TDocument & string): boolean;
|
|
16
|
+
set(data: Partial<TDocument>): this;
|
|
17
|
+
save(): Promise<this>;
|
|
18
|
+
toJSON(): DocumentModel<TDocument>;
|
|
19
|
+
toObject(): DocumentModel<TDocument>;
|
|
20
|
+
}
|
|
21
|
+
type HydratedDocumentWithId<TDocument> = TDocument & { id: string } & DefaultDocMtds<TDocument>;
|
|
22
|
+
export type Doc<M = any> = HydratedDocumentWithId<DocumentModel<M>>;
|
|
23
|
+
|
|
24
|
+
export const by = <
|
|
25
|
+
ModelCls,
|
|
26
|
+
AddDbModels extends DatabaseCls[],
|
|
27
|
+
_DocModel = UnCls<ModelCls> extends BaseObject ? Doc<UnCls<ModelCls>> : DocumentModel<UnCls<ModelCls>>,
|
|
28
|
+
>(
|
|
29
|
+
modelRef: ModelCls,
|
|
30
|
+
...addRefs: AddDbModels
|
|
31
|
+
): DatabaseCls<MergeAllActionTypes<AddDbModels, keyof _DocModel & string> & _DocModel> => {
|
|
32
|
+
const refName = ConstantRegistry.getRefName(modelRef as Cls);
|
|
33
|
+
const databaseCls = class DatabaseCls {
|
|
34
|
+
static refName = refName;
|
|
35
|
+
static [FIELD_META] = (modelRef as ConstantCls)[FIELD_META];
|
|
36
|
+
};
|
|
37
|
+
applyMixins(databaseCls as Cls, addRefs);
|
|
38
|
+
return databaseCls as any;
|
|
39
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { QueryOf } from "akanjs/constant";
|
|
2
|
+
import DataLoader from "dataloader";
|
|
3
|
+
import { get, groupBy, keyBy } from "lodash";
|
|
4
|
+
|
|
5
|
+
export const Id = String;
|
|
6
|
+
export const ObjectId = String;
|
|
7
|
+
export const Mixed = Object;
|
|
8
|
+
export { DataLoader };
|
|
9
|
+
|
|
10
|
+
type LoaderItem = Record<string, unknown>;
|
|
11
|
+
type LoaderModel = {
|
|
12
|
+
find: (query: QueryOf<unknown>) => Promise<LoaderItem[]> | { then: Promise<LoaderItem[]>["then"] };
|
|
13
|
+
};
|
|
14
|
+
type ArrayElementLoaderItem = LoaderItem & { key: unknown };
|
|
15
|
+
type QueryRecord = Record<string, unknown>;
|
|
16
|
+
|
|
17
|
+
const setQueryOperator = (query: QueryOf<unknown>, fieldName: string, op: "oneOf" | "has", value: unknown) => {
|
|
18
|
+
(query as QueryRecord)[fieldName] = { kind: "op", op, value };
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const createLoader = <Key, Value>(model: LoaderModel, fieldName = "id", defaultQuery: QueryOf<unknown> = {}) => {
|
|
22
|
+
return new DataLoader<Key, Value>(
|
|
23
|
+
(fields) => {
|
|
24
|
+
const query: QueryOf<unknown> = { ...defaultQuery };
|
|
25
|
+
setQueryOperator(query, fieldName, "oneOf", fields);
|
|
26
|
+
const data = Promise.resolve(model.find(query)).then((list) => {
|
|
27
|
+
const listByKey = keyBy(list, fieldName);
|
|
28
|
+
return fields.map((id: unknown) => get(listByKey, String(id), null));
|
|
29
|
+
});
|
|
30
|
+
return data as unknown as Promise<Value[]>;
|
|
31
|
+
},
|
|
32
|
+
{ name: "dataloader", cache: false },
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
export const createArrayLoader = <K, V>(model: LoaderModel, fieldName = "id", defaultQuery: QueryOf<unknown> = {}) => {
|
|
36
|
+
return new DataLoader<K, V>((fields) => {
|
|
37
|
+
const query: QueryOf<unknown> = { ...defaultQuery };
|
|
38
|
+
setQueryOperator(query, fieldName, "has", fields);
|
|
39
|
+
const data = Promise.resolve(model.find(query)).then((list) => {
|
|
40
|
+
return fields.map((field) => list.filter((item) => field === item[fieldName]));
|
|
41
|
+
});
|
|
42
|
+
return data as unknown as Promise<V[]>;
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
export const createArrayElementLoader = <K, V>(
|
|
46
|
+
model: LoaderModel,
|
|
47
|
+
fieldName = "id",
|
|
48
|
+
defaultQuery: QueryOf<unknown> = {},
|
|
49
|
+
) => {
|
|
50
|
+
return new DataLoader<K, V>(
|
|
51
|
+
(fields) => {
|
|
52
|
+
const query: QueryOf<unknown> = { ...defaultQuery };
|
|
53
|
+
setQueryOperator(query, fieldName, "oneOf", fields);
|
|
54
|
+
const data = Promise.resolve(model.find(query)).then((list) => {
|
|
55
|
+
const flat: ArrayElementLoaderItem[] = list.flatMap((datum) => {
|
|
56
|
+
const values = Array.isArray(datum[fieldName]) ? datum[fieldName] : [];
|
|
57
|
+
return values.map((datField: unknown) => ({
|
|
58
|
+
...datum,
|
|
59
|
+
key: datField,
|
|
60
|
+
}));
|
|
61
|
+
});
|
|
62
|
+
const listByKey = groupBy(flat, (dat) => dat.key);
|
|
63
|
+
return fields.map((id) => get(listByKey, String(id), null));
|
|
64
|
+
});
|
|
65
|
+
return data as unknown as Promise<V[]>;
|
|
66
|
+
},
|
|
67
|
+
{ name: "dataloader", cache: false },
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const createQueryLoader = <Key, Value>(
|
|
72
|
+
model: LoaderModel,
|
|
73
|
+
queryKeys: string[],
|
|
74
|
+
defaultQuery: QueryOf<unknown> = {},
|
|
75
|
+
) => {
|
|
76
|
+
return new DataLoader<Key, Value, Key>(
|
|
77
|
+
(queries) => {
|
|
78
|
+
const query = { kind: "all", queries: [{ kind: "any", queries }, defaultQuery] } as QueryOf<unknown>;
|
|
79
|
+
const getQueryKey = (query: QueryOf<unknown>) =>
|
|
80
|
+
queryKeys.map((key) => String((query as QueryRecord)[key])).join("");
|
|
81
|
+
const data = Promise.resolve(model.find(query)).then((list) => {
|
|
82
|
+
const listByKey = keyBy(list, getQueryKey);
|
|
83
|
+
return queries.map((query: QueryOf<unknown>) => get(listByKey, getQueryKey(query), null));
|
|
84
|
+
});
|
|
85
|
+
return data as unknown as Promise<Value[]>;
|
|
86
|
+
},
|
|
87
|
+
{ name: "dataloader", cache: false },
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export type Loader<Field, Value> = DataLoader<Field, Value | null>;
|