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,334 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Cls,
|
|
3
|
+
type EnumInstance,
|
|
4
|
+
FIELD_META,
|
|
5
|
+
type GetStateObject,
|
|
6
|
+
isEnum,
|
|
7
|
+
PrimitiveRegistry,
|
|
8
|
+
type PrimitiveScalar,
|
|
9
|
+
type PrimitiveValue,
|
|
10
|
+
} from "akanjs/base";
|
|
11
|
+
import { capitalize, lowerlize } from "akanjs/common";
|
|
12
|
+
import { type ConstantCls, deserialize, type FieldObject, type PurifiedModel, serialize } from ".";
|
|
13
|
+
import type { ConstantType, DefaultOf, DocumentModel, QueryOf } from "./types";
|
|
14
|
+
|
|
15
|
+
type ConstantModelRef<FieldObj extends FieldObject = FieldObject> = Cls<
|
|
16
|
+
unknown,
|
|
17
|
+
{ [FIELD_META]: FieldObj; modelType: ConstantType }
|
|
18
|
+
>;
|
|
19
|
+
|
|
20
|
+
/** Runtime registry for Akan constant model metadata, refs, enums, and generated model contracts. */
|
|
21
|
+
export class ConstantRegistry {
|
|
22
|
+
static database = new Map<string, ConstantModel>();
|
|
23
|
+
static scalar = new Map<string, ScalarConstantModel>();
|
|
24
|
+
static enum = new Map<string, EnumInstance>();
|
|
25
|
+
static value = new Map<string, unknown>();
|
|
26
|
+
static modelRefNameMap = new Map<Cls, string>();
|
|
27
|
+
static has(modelRef: Cls): boolean {
|
|
28
|
+
return ConstantRegistry.modelRefNameMap.has(modelRef);
|
|
29
|
+
}
|
|
30
|
+
static getRefName<AllowEmpty extends boolean = false>(
|
|
31
|
+
modelRef: Cls,
|
|
32
|
+
{ allowEmpty }: { allowEmpty?: AllowEmpty } = {},
|
|
33
|
+
): AllowEmpty extends true ? string | undefined : string {
|
|
34
|
+
const refName = ConstantRegistry.modelRefNameMap.get(modelRef);
|
|
35
|
+
if (!refName && !allowEmpty) throw new Error(`No ref name for modelRef: ${modelRef}`);
|
|
36
|
+
return refName as AllowEmpty extends true ? string | undefined : string;
|
|
37
|
+
}
|
|
38
|
+
static getModelName(modelRef: Cls): string {
|
|
39
|
+
if (PrimitiveRegistry.has(modelRef)) return PrimitiveRegistry.getName(modelRef as typeof PrimitiveScalar);
|
|
40
|
+
const refName = ConstantRegistry.getRefName(modelRef);
|
|
41
|
+
const capRefName = capitalize(refName);
|
|
42
|
+
const modelType = (modelRef as ConstantCls).modelType;
|
|
43
|
+
switch (modelType) {
|
|
44
|
+
case "input":
|
|
45
|
+
return `${capRefName}Input`;
|
|
46
|
+
case "object":
|
|
47
|
+
return `${capRefName}Object`;
|
|
48
|
+
case "full":
|
|
49
|
+
return capRefName;
|
|
50
|
+
case "light":
|
|
51
|
+
return `Light${capRefName}`;
|
|
52
|
+
case "insight":
|
|
53
|
+
return `${capRefName}Insight`;
|
|
54
|
+
case "scalar":
|
|
55
|
+
return capRefName;
|
|
56
|
+
default:
|
|
57
|
+
throw new Error(`Invalid model type: ${modelType}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
static isObject(modelRef: Cls<unknown, { modelType?: ConstantType }>) {
|
|
61
|
+
return modelRef.modelType === "object";
|
|
62
|
+
}
|
|
63
|
+
static isFull(modelRef: Cls<unknown, { modelType?: ConstantType }>) {
|
|
64
|
+
return modelRef.modelType === "full";
|
|
65
|
+
}
|
|
66
|
+
static isLight(modelRef: Cls<unknown, { modelType?: ConstantType }>) {
|
|
67
|
+
return modelRef.modelType === "light";
|
|
68
|
+
}
|
|
69
|
+
static isInsight(modelRef: Cls<unknown, { modelType?: ConstantType }>) {
|
|
70
|
+
return modelRef.modelType === "insight";
|
|
71
|
+
}
|
|
72
|
+
static isScalar(modelRef: Cls<unknown, { modelType?: ConstantType }>) {
|
|
73
|
+
return modelRef.modelType === "scalar";
|
|
74
|
+
}
|
|
75
|
+
static setDatabase(refName: string, cnst: ConstantModel) {
|
|
76
|
+
ConstantRegistry.database.set(refName, cnst);
|
|
77
|
+
}
|
|
78
|
+
static getDatabase<AllowEmpty extends boolean = false>(
|
|
79
|
+
refName: string,
|
|
80
|
+
{ allowEmpty }: { allowEmpty?: AllowEmpty } = {},
|
|
81
|
+
): AllowEmpty extends true ? ConstantModel | undefined : ConstantModel {
|
|
82
|
+
const info = ConstantRegistry.database.get(refName);
|
|
83
|
+
if (!info && !allowEmpty) throw new Error(`No database constant model info for ${refName}`);
|
|
84
|
+
return info as AllowEmpty extends true ? ConstantModel | undefined : ConstantModel;
|
|
85
|
+
}
|
|
86
|
+
static setScalar(refName: string, cnst: ScalarConstantModel) {
|
|
87
|
+
if (ConstantRegistry.scalar.has(refName)) return;
|
|
88
|
+
ConstantRegistry.scalar.set(refName, cnst);
|
|
89
|
+
}
|
|
90
|
+
static getScalar<AllowEmpty extends boolean = false>(
|
|
91
|
+
refName: string,
|
|
92
|
+
{ allowEmpty }: { allowEmpty?: AllowEmpty } = {},
|
|
93
|
+
): AllowEmpty extends true ? ScalarConstantModel | undefined : ScalarConstantModel {
|
|
94
|
+
const model = ConstantRegistry.scalar.get(refName);
|
|
95
|
+
if (!model && !allowEmpty) throw new Error(`No scalar constant model for ${refName}`);
|
|
96
|
+
return model as AllowEmpty extends true ? ScalarConstantModel | undefined : ScalarConstantModel;
|
|
97
|
+
}
|
|
98
|
+
static getModelRef(refName: string, modelType?: ConstantType): Cls | typeof PrimitiveScalar {
|
|
99
|
+
if (!modelType) {
|
|
100
|
+
if (PrimitiveRegistry.hasName(refName)) return PrimitiveRegistry.get(refName) as typeof PrimitiveScalar;
|
|
101
|
+
else throw new Error(`No model ref found for ${refName}`);
|
|
102
|
+
} else if (modelType === "scalar") return ConstantRegistry.getScalar(refName).model;
|
|
103
|
+
else return ConstantRegistry.getDatabase(refName)[modelType];
|
|
104
|
+
}
|
|
105
|
+
static buildModel<
|
|
106
|
+
T extends string,
|
|
107
|
+
InputRef extends ConstantModelRef,
|
|
108
|
+
ObjectRef extends ConstantModelRef,
|
|
109
|
+
FullFieldObj extends FieldObject,
|
|
110
|
+
FullRef extends ConstantModelRef<FullFieldObj>,
|
|
111
|
+
LightRef extends ConstantModelRef,
|
|
112
|
+
InsightRef extends ConstantModelRef,
|
|
113
|
+
Input = InstanceType<InputRef>,
|
|
114
|
+
Obj = InstanceType<ObjectRef>,
|
|
115
|
+
Full = InstanceType<FullRef>,
|
|
116
|
+
Light = InstanceType<LightRef>,
|
|
117
|
+
Insight = InstanceType<InsightRef>,
|
|
118
|
+
>(
|
|
119
|
+
refName: T,
|
|
120
|
+
inputRef: InputRef,
|
|
121
|
+
objectRef: ObjectRef,
|
|
122
|
+
fullRef: FullRef,
|
|
123
|
+
lightRef: LightRef,
|
|
124
|
+
insightRef: InsightRef,
|
|
125
|
+
constExports: Record<string, unknown>,
|
|
126
|
+
): ConstantModel<
|
|
127
|
+
T,
|
|
128
|
+
Input,
|
|
129
|
+
Obj,
|
|
130
|
+
Full,
|
|
131
|
+
Light,
|
|
132
|
+
Insight,
|
|
133
|
+
FullFieldObj,
|
|
134
|
+
Capitalize<T>,
|
|
135
|
+
DefaultOf<Full>,
|
|
136
|
+
DefaultOf<Input>,
|
|
137
|
+
GetStateObject<Full>,
|
|
138
|
+
GetStateObject<Input>,
|
|
139
|
+
DefaultOf<Insight>,
|
|
140
|
+
PurifiedModel<Input>,
|
|
141
|
+
DocumentModel<Full>,
|
|
142
|
+
DocumentModel<Input>,
|
|
143
|
+
QueryOf<DocumentModel<Full>>,
|
|
144
|
+
GetStateObject<Light>,
|
|
145
|
+
GetStateObject<Insight>
|
|
146
|
+
> {
|
|
147
|
+
const modelRefSet = new Set([inputRef, objectRef, fullRef, lightRef, insightRef]);
|
|
148
|
+
modelRefSet.forEach((modelRef) => {
|
|
149
|
+
ConstantRegistry.modelRefNameMap.set(modelRef, refName);
|
|
150
|
+
});
|
|
151
|
+
inputRef.modelType = "input";
|
|
152
|
+
objectRef.modelType = "object";
|
|
153
|
+
fullRef.modelType = "full";
|
|
154
|
+
lightRef.modelType = "light";
|
|
155
|
+
insightRef.modelType = "insight";
|
|
156
|
+
type Doc = DocumentModel<Full>;
|
|
157
|
+
type DocInput = DocumentModel<Input>;
|
|
158
|
+
const cnst: ConstantModel<
|
|
159
|
+
T,
|
|
160
|
+
Input,
|
|
161
|
+
Obj,
|
|
162
|
+
Full,
|
|
163
|
+
Light,
|
|
164
|
+
Insight,
|
|
165
|
+
FullFieldObj,
|
|
166
|
+
Capitalize<T>,
|
|
167
|
+
DefaultOf<Full>,
|
|
168
|
+
DefaultOf<Input>,
|
|
169
|
+
GetStateObject<Full>,
|
|
170
|
+
GetStateObject<Input>,
|
|
171
|
+
DefaultOf<Insight>,
|
|
172
|
+
PurifiedModel<Input>,
|
|
173
|
+
Doc,
|
|
174
|
+
DocInput,
|
|
175
|
+
QueryOf<any>,
|
|
176
|
+
GetStateObject<Light>,
|
|
177
|
+
GetStateObject<Insight>
|
|
178
|
+
> = {
|
|
179
|
+
refName,
|
|
180
|
+
input: inputRef as unknown as ConstantCls<Input>,
|
|
181
|
+
object: objectRef as unknown as ConstantCls<Obj>,
|
|
182
|
+
full: fullRef as unknown as ConstantCls<Full, FullFieldObj>,
|
|
183
|
+
light: lightRef as unknown as ConstantCls<Light>,
|
|
184
|
+
insight: insightRef as unknown as ConstantCls<Insight>,
|
|
185
|
+
_CapitalizedRefName: null as unknown as Capitalize<T>,
|
|
186
|
+
_Input: null as unknown as Input,
|
|
187
|
+
_Obj: null as unknown as Obj,
|
|
188
|
+
_Full: null as unknown as Full,
|
|
189
|
+
_Light: null as unknown as Light,
|
|
190
|
+
_Insight: null as unknown as Insight,
|
|
191
|
+
_Default: null as unknown as DefaultOf<Full>,
|
|
192
|
+
_DefaultInput: null as unknown as DefaultOf<Input>,
|
|
193
|
+
_DefaultState: null as unknown as GetStateObject<Full>,
|
|
194
|
+
_DefaultStateInput: null as unknown as GetStateObject<Input>,
|
|
195
|
+
_DefaultInsight: null as unknown as DefaultOf<Insight>,
|
|
196
|
+
_PurifiedInput: null as unknown as PurifiedModel<Input>,
|
|
197
|
+
_Doc: null as unknown as DocumentModel<Full>,
|
|
198
|
+
_DocInput: null as unknown as DocumentModel<Input>,
|
|
199
|
+
_QueryOfDoc: null as unknown as QueryOf<any>,
|
|
200
|
+
_StateLight: null as unknown as GetStateObject<Light>,
|
|
201
|
+
_StateInsight: null as unknown as GetStateObject<Insight>,
|
|
202
|
+
};
|
|
203
|
+
ConstantRegistry.setDatabase(refName, cnst);
|
|
204
|
+
Object.entries(constExports).forEach(([key, value]) => {
|
|
205
|
+
if ((modelRefSet as Set<unknown>).has(value)) return;
|
|
206
|
+
else if (typeof value === "function" && isEnum(value as Cls))
|
|
207
|
+
ConstantRegistry.enum.set(lowerlize(key), value as EnumInstance);
|
|
208
|
+
else ConstantRegistry.value.set(key, value);
|
|
209
|
+
});
|
|
210
|
+
return cnst;
|
|
211
|
+
}
|
|
212
|
+
static buildScalar<T extends string, Model>(
|
|
213
|
+
refName: T,
|
|
214
|
+
Model: Cls<Model>,
|
|
215
|
+
constExports: Record<string, unknown>,
|
|
216
|
+
): ScalarConstantModel<T, Model, DefaultOf<Model>, DocumentModel<Model>, PurifiedModel<Model>> {
|
|
217
|
+
ConstantRegistry.modelRefNameMap.set(Model, refName);
|
|
218
|
+
const cnst = {
|
|
219
|
+
refName,
|
|
220
|
+
model: Model as unknown as ConstantCls<Model>,
|
|
221
|
+
_Default: null as unknown as DefaultOf<Model>,
|
|
222
|
+
_Doc: null as unknown as DocumentModel<Model>,
|
|
223
|
+
_PurifiedInput: null as unknown as PurifiedModel<Model>,
|
|
224
|
+
};
|
|
225
|
+
ConstantRegistry.setScalar(refName, cnst as unknown as ScalarConstantModel);
|
|
226
|
+
Object.entries(constExports).forEach(([key, value]) => {
|
|
227
|
+
if (value === Model) return;
|
|
228
|
+
else if (typeof value === "function" && isEnum(value as Cls))
|
|
229
|
+
ConstantRegistry.enum.set(lowerlize(key), value as EnumInstance);
|
|
230
|
+
else ConstantRegistry.value.set(key, value);
|
|
231
|
+
});
|
|
232
|
+
return cnst as unknown as ScalarConstantModel<
|
|
233
|
+
T,
|
|
234
|
+
Model,
|
|
235
|
+
DefaultOf<Model>,
|
|
236
|
+
DocumentModel<Model>,
|
|
237
|
+
PurifiedModel<Model>
|
|
238
|
+
>;
|
|
239
|
+
}
|
|
240
|
+
static serialize<Value>(modelRef: Cls | Cls[], value: Value, nullable: boolean = false): Value {
|
|
241
|
+
if (Array.isArray(value) && Array.isArray(modelRef)) {
|
|
242
|
+
const singleModelRef = modelRef.at(0);
|
|
243
|
+
if (!singleModelRef) throw new Error("No model ref found");
|
|
244
|
+
return value.map((v: object) => ConstantRegistry.serialize(singleModelRef as Cls, v)) as unknown as Value;
|
|
245
|
+
} else if (modelRef === Map && value instanceof Map) {
|
|
246
|
+
return Object.fromEntries(
|
|
247
|
+
[...value.entries()].map(([key, value]: [string, unknown]) => {
|
|
248
|
+
return [key, ConstantRegistry.serialize(value as Cls, value)];
|
|
249
|
+
}),
|
|
250
|
+
) as unknown as Value;
|
|
251
|
+
} else if (PrimitiveRegistry.has(modelRef as Cls)) {
|
|
252
|
+
return (modelRef as typeof PrimitiveScalar)._serialize(value as PrimitiveValue) as unknown as Value;
|
|
253
|
+
} else if (ConstantRegistry.modelRefNameMap.has(modelRef as Cls)) {
|
|
254
|
+
return serialize(modelRef as ConstantCls, 0, value, "object", { nullable }) as unknown as Value;
|
|
255
|
+
} else throw new Error(`No serialize function for modelRef: ${modelRef}`);
|
|
256
|
+
}
|
|
257
|
+
static deserialize<Value>(modelRef: Cls | Cls[], value: Value, nullable: boolean = false): Value {
|
|
258
|
+
if (Array.isArray(value) && Array.isArray(modelRef)) {
|
|
259
|
+
const singleModelRef = modelRef.at(0);
|
|
260
|
+
if (!singleModelRef) throw new Error("No model ref found");
|
|
261
|
+
return value.map((v: object) => ConstantRegistry.deserialize(singleModelRef as Cls, v)) as unknown as Value;
|
|
262
|
+
} else if (modelRef === Map && value instanceof Map) {
|
|
263
|
+
return new Map(
|
|
264
|
+
Object.entries(value).map(([key, value]: [string, unknown]) => {
|
|
265
|
+
return [key, ConstantRegistry.deserialize(value as Cls, value)];
|
|
266
|
+
}),
|
|
267
|
+
) as unknown as Value;
|
|
268
|
+
} else if (PrimitiveRegistry.has(modelRef as Cls)) {
|
|
269
|
+
return (modelRef as typeof PrimitiveScalar)._parse(value as PrimitiveValue) as unknown as Value;
|
|
270
|
+
} else if (ConstantRegistry.modelRefNameMap.has(modelRef as Cls)) {
|
|
271
|
+
return deserialize(modelRef as ConstantCls, 0, value, { nullable }) as unknown as Value;
|
|
272
|
+
} else throw new Error(`No deserialize function for modelRef: ${modelRef}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export interface ConstantModel<
|
|
277
|
+
T extends string = string,
|
|
278
|
+
Input = any,
|
|
279
|
+
Obj = any,
|
|
280
|
+
Full = any,
|
|
281
|
+
Light = any,
|
|
282
|
+
Insight = any,
|
|
283
|
+
FullFieldObj extends FieldObject = FieldObject,
|
|
284
|
+
_CapitalizedRefName extends string = Capitalize<T>,
|
|
285
|
+
_Default = DefaultOf<Full>,
|
|
286
|
+
_DefaultInput = DefaultOf<Input>,
|
|
287
|
+
_DefaultState = GetStateObject<Full>,
|
|
288
|
+
_DefaultStateInput = GetStateObject<Input>,
|
|
289
|
+
_DefaultInsight = DefaultOf<Insight>,
|
|
290
|
+
_PurifiedInput = PurifiedModel<Input>,
|
|
291
|
+
_Doc = DocumentModel<Full>,
|
|
292
|
+
_DocInput = DocumentModel<Input>,
|
|
293
|
+
_QueryOfDoc = QueryOf<_Doc>,
|
|
294
|
+
_StateLight = GetStateObject<Light>,
|
|
295
|
+
_StateInsight = GetStateObject<Insight>,
|
|
296
|
+
> {
|
|
297
|
+
refName: T;
|
|
298
|
+
input: ConstantCls<Input>;
|
|
299
|
+
object: ConstantCls<Obj>;
|
|
300
|
+
full: ConstantCls<Full, FullFieldObj>;
|
|
301
|
+
light: ConstantCls<Light>;
|
|
302
|
+
insight: ConstantCls<Insight>;
|
|
303
|
+
_CapitalizedRefName: _CapitalizedRefName;
|
|
304
|
+
_Input: Input;
|
|
305
|
+
_Obj: Obj;
|
|
306
|
+
_Full: Full;
|
|
307
|
+
_Light: Light;
|
|
308
|
+
_Insight: Insight;
|
|
309
|
+
_Default: _Default;
|
|
310
|
+
_DefaultInput: _DefaultInput;
|
|
311
|
+
_DefaultState: _DefaultState;
|
|
312
|
+
_DefaultStateInput: _DefaultStateInput;
|
|
313
|
+
_DefaultInsight: _DefaultInsight;
|
|
314
|
+
_PurifiedInput: _PurifiedInput;
|
|
315
|
+
_Doc: _Doc;
|
|
316
|
+
_DocInput: _DocInput;
|
|
317
|
+
_QueryOfDoc: _QueryOfDoc;
|
|
318
|
+
_StateLight: _StateLight;
|
|
319
|
+
_StateInsight: _StateInsight;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export interface ScalarConstantModel<
|
|
323
|
+
T extends string = string,
|
|
324
|
+
Model = any,
|
|
325
|
+
_Default = DefaultOf<Model>,
|
|
326
|
+
_Doc = DocumentModel<Model>,
|
|
327
|
+
_PurifiedInput = PurifiedModel<Model>,
|
|
328
|
+
> {
|
|
329
|
+
refName: T;
|
|
330
|
+
model: ConstantCls<Model>;
|
|
331
|
+
_Default: _Default;
|
|
332
|
+
_Doc: _Doc;
|
|
333
|
+
_PurifiedInput: _PurifiedInput;
|
|
334
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applyFnToArrayObjects,
|
|
3
|
+
type Cls,
|
|
4
|
+
dayjs,
|
|
5
|
+
type GetStateObject,
|
|
6
|
+
PrimitiveRegistry,
|
|
7
|
+
type PrimitiveScalar,
|
|
8
|
+
} from "akanjs/base";
|
|
9
|
+
|
|
10
|
+
import type { FieldProps } from ".";
|
|
11
|
+
|
|
12
|
+
export type CrystalizeFunc<Model> = (self: GetStateObject<Model>, isChild?: boolean) => Model;
|
|
13
|
+
|
|
14
|
+
export const crystalize = (field: FieldProps, value: unknown): unknown => {
|
|
15
|
+
if (value === undefined || value === null) return value as undefined | null;
|
|
16
|
+
if (field.isArray && Array.isArray(value))
|
|
17
|
+
return value.map((v: unknown) =>
|
|
18
|
+
crystalize({ ...field, isArray: field.arrDepth > 1, arrDepth: field.arrDepth - 1 }, v),
|
|
19
|
+
);
|
|
20
|
+
const crystalizeValue = PrimitiveRegistry.has(field.modelRef)
|
|
21
|
+
? (value: unknown) => (field.modelRef as unknown as typeof PrimitiveScalar)._parse(value as never)
|
|
22
|
+
: (value: unknown) => value as object;
|
|
23
|
+
if (field.isMap) {
|
|
24
|
+
const mapValueField = {
|
|
25
|
+
...field,
|
|
26
|
+
modelRef: field.of ?? field.modelRef,
|
|
27
|
+
isMap: false,
|
|
28
|
+
isClass: !!field.of && !PrimitiveRegistry.has(field.of),
|
|
29
|
+
isScalar: !!field.of && PrimitiveRegistry.has(field.of),
|
|
30
|
+
isArray: false,
|
|
31
|
+
arrDepth: 0,
|
|
32
|
+
};
|
|
33
|
+
return new Map(
|
|
34
|
+
Object.entries(value as Record<string, unknown>).map(([key, val]) => [
|
|
35
|
+
key,
|
|
36
|
+
field.of
|
|
37
|
+
? applyFnToArrayObjects(val, (v: never) => crystalize(mapValueField, v))
|
|
38
|
+
: applyFnToArrayObjects(val, crystalizeValue),
|
|
39
|
+
]),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
if (field.isClass) return new (field.modelRef as Cls<{ set: (obj: object) => object }>)().set(value as object);
|
|
43
|
+
if (field.modelRef === Date) return dayjs(value as Date);
|
|
44
|
+
return crystalizeValue(value);
|
|
45
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { applyFnToArrayObjects, type Cls, FIELD_META, PrimitiveRegistry, type PrimitiveScalar } from "akanjs/base";
|
|
2
|
+
|
|
3
|
+
import { type ConstantCls, ConstantRegistry, type FieldProps } from ".";
|
|
4
|
+
|
|
5
|
+
const getDeserializeFn = (inputRef: ConstantCls | PrimitiveScalar) => {
|
|
6
|
+
const deserializeFn = PrimitiveRegistry.has(inputRef as Cls)
|
|
7
|
+
? (value: unknown) => (inputRef as unknown as typeof PrimitiveScalar)._parse(value as never)
|
|
8
|
+
: (value: unknown) => value as object;
|
|
9
|
+
return deserializeFn;
|
|
10
|
+
};
|
|
11
|
+
const deserializeMap = (value: unknown, field: Pick<FieldProps, "of">) => {
|
|
12
|
+
if (!field.of) return value;
|
|
13
|
+
return Object.fromEntries(
|
|
14
|
+
Object.entries(value as Record<string, unknown>).map(([key, val]) => [
|
|
15
|
+
key,
|
|
16
|
+
applyFnToArrayObjects(val, (v: never) => deserializeInput(v, field.of as ConstantCls, 0)),
|
|
17
|
+
]),
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const deserializeInput = <Input = unknown>(
|
|
22
|
+
value: Input | Input[],
|
|
23
|
+
inputRef: ConstantCls<Input> | PrimitiveScalar,
|
|
24
|
+
arrDepth: number,
|
|
25
|
+
convertFn: (value: unknown) => unknown = (value: unknown) => value,
|
|
26
|
+
): Input | Input[] => {
|
|
27
|
+
if (arrDepth && Array.isArray(value))
|
|
28
|
+
return value.map((v) => deserializeInput(v, inputRef, arrDepth - 1, convertFn) as Input) as unknown as Input[];
|
|
29
|
+
else if ((inputRef as ConstantCls).prototype === Map.prototype) {
|
|
30
|
+
const deserializeFn = getDeserializeFn(inputRef);
|
|
31
|
+
const entries = value instanceof Map ? [...value.entries()] : Object.entries(value as Record<string, unknown>);
|
|
32
|
+
const returnValue = Object.fromEntries(
|
|
33
|
+
entries.map(([key, val]) => [key, applyFnToArrayObjects(val, deserializeFn)]),
|
|
34
|
+
) as unknown as Input;
|
|
35
|
+
return convertFn(returnValue) as Input;
|
|
36
|
+
} else if (PrimitiveRegistry.has(inputRef as Cls)) {
|
|
37
|
+
const deserializeFn = getDeserializeFn(inputRef);
|
|
38
|
+
const returnValue = deserializeFn(value) as Input;
|
|
39
|
+
return convertFn(returnValue) as Input;
|
|
40
|
+
}
|
|
41
|
+
if (!ConstantRegistry.isScalar(inputRef as Cls)) {
|
|
42
|
+
const returnValue = value as { id: string } as Input;
|
|
43
|
+
return convertFn(returnValue) as Input;
|
|
44
|
+
} else {
|
|
45
|
+
const returnValue = Object.fromEntries(
|
|
46
|
+
Object.entries((inputRef as ConstantCls)[FIELD_META]).map(([key, field]) => [
|
|
47
|
+
key,
|
|
48
|
+
field.isMap
|
|
49
|
+
? deserializeMap((value as Record<string, unknown>)[key], field.getProps())
|
|
50
|
+
: deserialize(field.modelRef, field.arrDepth, (value as Record<string, unknown>)[key], {
|
|
51
|
+
key,
|
|
52
|
+
nullable: field.nullable,
|
|
53
|
+
}),
|
|
54
|
+
]),
|
|
55
|
+
) as unknown as Input;
|
|
56
|
+
return convertFn(returnValue) as Input;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const deserialize = (
|
|
61
|
+
argRef: ConstantCls | PrimitiveScalar,
|
|
62
|
+
arrDepth: number,
|
|
63
|
+
value: unknown,
|
|
64
|
+
{ key, nullable = false, convertFn }: { key?: string; nullable?: boolean; convertFn?: (value: unknown) => unknown },
|
|
65
|
+
) => {
|
|
66
|
+
if (nullable && (value === null || value === undefined)) return null;
|
|
67
|
+
else if (!nullable && (value === null || value === undefined))
|
|
68
|
+
throw new Error(`Invalid Value (Nullable) in ${key} ${argRef} for value ${value}`);
|
|
69
|
+
return deserializeInput(value, argRef, arrDepth, convertFn) as object[];
|
|
70
|
+
};
|