akanjs 0.0.1 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +11399 -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 +59 -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 +1325 -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,273 @@
|
|
|
1
|
+
# Scalar Dictionary Implementation Guide for Akan.js
|
|
2
|
+
|
|
3
|
+
## Purpose of Scalar Dictionary Files
|
|
4
|
+
|
|
5
|
+
Scalar dictionary files in Akan.js provide internationalization (i18n) support by:
|
|
6
|
+
|
|
7
|
+
- Defining translations for scalar names, fields, and enum values
|
|
8
|
+
- Supporting multiple languages (primarily English and Korean)
|
|
9
|
+
- Enabling consistent terminology across the application
|
|
10
|
+
- Providing field descriptions for documentation and tooltips
|
|
11
|
+
- Maintaining type safety with the constant model definition
|
|
12
|
+
- Creating a centralized translation source for UI components
|
|
13
|
+
|
|
14
|
+
## File Structure and Location
|
|
15
|
+
|
|
16
|
+
### Location Convention
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
{app,lib}/
|
|
20
|
+
└── */lib/__scalar/
|
|
21
|
+
└── <scalarName>/ # camelCase directory
|
|
22
|
+
├── <scalarName>.constant.ts # scalar definition
|
|
23
|
+
└── <scalarName>.dictionary.ts # translations
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Key Benefits
|
|
27
|
+
|
|
28
|
+
- End-to-end type safety
|
|
29
|
+
- Fluent builder pattern
|
|
30
|
+
- Automatic validation via generics
|
|
31
|
+
- Multi-language support
|
|
32
|
+
|
|
33
|
+
## Required Imports
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { scalarDictionary } from "akanjs/dictionary";
|
|
37
|
+
|
|
38
|
+
// Import types using "import type" for cleaner code
|
|
39
|
+
import type { YourScalar, YourEnum } from "./yourScalar.constant";
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Scalar Dictionary Builder
|
|
43
|
+
|
|
44
|
+
The `scalarDictionary()` function creates a type-safe dictionary using a fluent builder pattern.
|
|
45
|
+
|
|
46
|
+
### Builder Methods
|
|
47
|
+
|
|
48
|
+
| Method | Description | Example |
|
|
49
|
+
| ---------------------------- | -------------------------------- | -------------------------------------------------------------------------- |
|
|
50
|
+
| `.of((t) => ...)` | Define scalar name & description | `.of((t) => t(["Scalar Name", "스칼라 이름"]).desc(["Desc", "설명"]))` |
|
|
51
|
+
| `.model<T>((t) => ...)` | Define field translations | `.model<YourScalar>((t) => ({ fieldName: t(["Label", "레이블"]) }))` |
|
|
52
|
+
| `.enum<T>(name, (t) => ...)` | Define enum value translations | `.enum<YourEnum>("enumName", (t) => ({ value1: t(["Label", "레이블"]) }))` |
|
|
53
|
+
|
|
54
|
+
## Translation Format
|
|
55
|
+
|
|
56
|
+
Each translation uses the `t()` function with an array of values. The array order matches the language order defined in `scalarDictionary()`.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// Language order: ["en", "ko"]
|
|
60
|
+
// Index 0 = English, Index 1 = Korean
|
|
61
|
+
|
|
62
|
+
t(["English Label", "한국어 레이블"]).desc(["English description", "한국어 설명"]);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Translation Methods
|
|
66
|
+
|
|
67
|
+
| Method | Purpose | Example |
|
|
68
|
+
| -------------- | ---------------------- | ---------------------------------------- |
|
|
69
|
+
| `t([...])` | Define the label/name | `t(["Status", "상태"])` |
|
|
70
|
+
| `.desc([...])` | Define the description | `.desc(["Current status", "현재 상태"])` |
|
|
71
|
+
|
|
72
|
+
> **Note**: Both label and description are required for complete internationalization support.
|
|
73
|
+
|
|
74
|
+
## Basic Structure
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { scalarDictionary } from "akanjs/dictionary";
|
|
78
|
+
import type { YourScalar, YourEnum } from "./yourScalar.constant";
|
|
79
|
+
|
|
80
|
+
export const dictionary = scalarDictionary(["en", "ko"])
|
|
81
|
+
.of((t) => t(["Scalar Name", "스칼라 이름"]).desc(["Scalar description", "스칼라 설명"]))
|
|
82
|
+
.model<YourScalar>((t) => ({
|
|
83
|
+
fieldName: t(["Field Label", "필드 레이블"]).desc(["Field description", "필드 설명"]),
|
|
84
|
+
}))
|
|
85
|
+
.enum<YourEnum>("enumName", (t) => ({
|
|
86
|
+
value1: t(["Value Label", "값 레이블"]).desc(["Value description", "값 설명"]),
|
|
87
|
+
}));
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Complete Example
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// File: libs/payment/lib/__scalar/price/price.dictionary.ts
|
|
94
|
+
import { scalarDictionary } from "akanjs/dictionary";
|
|
95
|
+
import type { Currency, Price } from "./price.constant";
|
|
96
|
+
|
|
97
|
+
export const dictionary = scalarDictionary(["en", "ko"])
|
|
98
|
+
.of((t) => t(["Price", "가격"]).desc(["Price information", "가격 정보"]))
|
|
99
|
+
.model<Price>((t) => ({
|
|
100
|
+
amount: t(["Amount", "금액"]).desc(["Price amount", "가격 금액"]),
|
|
101
|
+
currency: t(["Currency", "통화"]).desc(["Currency type", "통화 유형"]),
|
|
102
|
+
}))
|
|
103
|
+
.enum<Currency>("currency", (t) => ({
|
|
104
|
+
usd: t(["USD", "달러"]).desc(["US Dollar", "미국 달러"]),
|
|
105
|
+
krw: t(["KRW", "원"]).desc(["Korean Won", "한국 원"]),
|
|
106
|
+
eur: t(["EUR", "유로"]).desc(["Euro", "유로"]),
|
|
107
|
+
}));
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Enum Name Matching
|
|
111
|
+
|
|
112
|
+
The first argument to `.enum()` must match the name used in `enumOf()` from the constant file. This ensures proper type checking and runtime resolution.
|
|
113
|
+
|
|
114
|
+
### Example
|
|
115
|
+
|
|
116
|
+
**constant.ts**:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
export class Currency extends enumOf("currency", ["usd", "krw", "eur"]) {}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**dictionary.ts**:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// Must match: "currency"
|
|
126
|
+
.enum<Currency>("currency", (t) => ({
|
|
127
|
+
usd: t(["USD", "달러"]).desc(["US Dollar", "미국 달러"]),
|
|
128
|
+
krw: t(["KRW", "원"]).desc(["Korean Won", "한국 원"]),
|
|
129
|
+
eur: t(["EUR", "유로"]).desc(["Euro", "유로"]),
|
|
130
|
+
}))
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> **Important**: The enum name string must exactly match the first argument of `enumOf()`. For example, `enumOf("journey", [...])` requires `.enum<Journey>("journey", ...)`.
|
|
134
|
+
|
|
135
|
+
## Type Imports
|
|
136
|
+
|
|
137
|
+
Always import types from the constant file to ensure type safety. The generic parameters enforce that all fields and enum values have translations.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { scalarDictionary } from "akanjs/dictionary";
|
|
141
|
+
|
|
142
|
+
// Import types using "import type" for cleaner code
|
|
143
|
+
import type { EncourageInfo, Inquiry, Journey } from "./encourageInfo.constant";
|
|
144
|
+
|
|
145
|
+
export const dictionary = scalarDictionary(["en", "ko"])
|
|
146
|
+
.of((t) => t(["Encourage Info", "격려 정보"]).desc(["Encouragement information", "격려 정보"]))
|
|
147
|
+
.model<EncourageInfo>((t) => ({
|
|
148
|
+
// TypeScript ensures all fields of EncourageInfo are defined
|
|
149
|
+
}))
|
|
150
|
+
.enum<Journey>("journey", (t) => ({
|
|
151
|
+
// TypeScript ensures all values of Journey enum are defined
|
|
152
|
+
}))
|
|
153
|
+
.enum<Inquiry>("inquiry", (t) => ({
|
|
154
|
+
// TypeScript ensures all values of Inquiry enum are defined
|
|
155
|
+
}));
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Type Safety Benefits
|
|
159
|
+
|
|
160
|
+
- **`import type`**: Use `import type` for type-only imports. This ensures no runtime code is included.
|
|
161
|
+
- **`.model<Type>`**: Provides autocomplete for field names and validates that all fields are translated.
|
|
162
|
+
- **`.enum<Type>`**: Provides autocomplete for enum values and validates that all values are translated.
|
|
163
|
+
|
|
164
|
+
## Common Mistakes and Fixes
|
|
165
|
+
|
|
166
|
+
| Issue | Wrong ❌ | Correct ✅ |
|
|
167
|
+
| ----------------- | -------------------------------- | ----------------------------------------------- |
|
|
168
|
+
| Missing .desc() | `t(["Label", "레이블"])` | `t(["Label", "레이블"]).desc(["Desc", "설명"])` |
|
|
169
|
+
| Wrong enum name | `.enum<Journey>("Journey", ...)` | `.enum<Journey>("journey", ...)` |
|
|
170
|
+
| Missing export | `const dictionary = ...` | `export const dictionary = ...` |
|
|
171
|
+
| Wrong array order | `t(["한국어", "English"])` | `t(["English", "한국어"])` |
|
|
172
|
+
| Missing field | (TypeScript error) | All fields defined |
|
|
173
|
+
|
|
174
|
+
## Best Practices
|
|
175
|
+
|
|
176
|
+
### 1. Always Use Type Generics
|
|
177
|
+
|
|
178
|
+
Use `.model<Type>` and `.enum<Type>` to ensure TypeScript validates all fields and values are translated.
|
|
179
|
+
|
|
180
|
+
### 2. Consistent Language Order
|
|
181
|
+
|
|
182
|
+
Always use the same language order (e.g., `["en", "ko"]`) across all dictionaries in your project.
|
|
183
|
+
|
|
184
|
+
### 3. Meaningful Descriptions
|
|
185
|
+
|
|
186
|
+
Provide helpful descriptions that explain the field's purpose, not just repeat the label.
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
// ❌ Bad - description just repeats the label
|
|
190
|
+
amount: t(["Amount", "금액"]).desc(["Amount", "금액"]),
|
|
191
|
+
|
|
192
|
+
// ✅ Good - description explains the purpose
|
|
193
|
+
amount: t(["Amount", "금액"]).desc(["Price amount in selected currency", "선택된 통화의 가격 금액"]),
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 4. Export as 'dictionary'
|
|
197
|
+
|
|
198
|
+
Use the standard export name `dictionary` for consistency with the framework's auto-import system.
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// ✅ Correct
|
|
202
|
+
export const dictionary = scalarDictionary(["en", "ko"])...
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Implementation Checklist
|
|
206
|
+
|
|
207
|
+
### Required Elements
|
|
208
|
+
|
|
209
|
+
- [ ] File location: `__scalar/<name>/<name>.dictionary.ts`
|
|
210
|
+
- [ ] Import `scalarDictionary` from `akanjs/dictionary`
|
|
211
|
+
- [ ] Import types from constant file using `import type`
|
|
212
|
+
- [ ] Initialize with correct language order: `["en", "ko"]`
|
|
213
|
+
- [ ] Define scalar name/description with `.of()`
|
|
214
|
+
- [ ] Define all field translations with `.model<Type>()`
|
|
215
|
+
- [ ] Define all enum translations with `.enum<Type>(name)`
|
|
216
|
+
- [ ] Ensure enum name matches `enumOf()` name
|
|
217
|
+
- [ ] Include both label and description for all entries
|
|
218
|
+
- [ ] Export as `dictionary`
|
|
219
|
+
|
|
220
|
+
### Translation Format
|
|
221
|
+
|
|
222
|
+
- [ ] Each translation uses `t([...]).desc([...])`
|
|
223
|
+
- [ ] First element is English translation
|
|
224
|
+
- [ ] Second element is Korean translation
|
|
225
|
+
- [ ] No trailing punctuation in translations
|
|
226
|
+
- [ ] First letter capitalized in English
|
|
227
|
+
|
|
228
|
+
## Full Example with Multiple Enums
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
// File: apps/example/lib/__scalar/encourageInfo/encourageInfo.dictionary.ts
|
|
232
|
+
import { scalarDictionary } from "akanjs/dictionary";
|
|
233
|
+
import type { EncourageInfo, Inquiry, Journey } from "./encourageInfo.constant";
|
|
234
|
+
|
|
235
|
+
export const dictionary = scalarDictionary(["en", "ko"])
|
|
236
|
+
.of((t) => t(["Encourage Info", "격려 정보"]).desc(["User encouragement settings", "사용자 격려 설정"]))
|
|
237
|
+
.model<EncourageInfo>((t) => ({
|
|
238
|
+
journey: t(["Journey", "여정"]).desc(["User journey stage", "사용자 여정 단계"]),
|
|
239
|
+
inquiry: t(["Inquiry", "문의"]).desc(["Inquiry type", "문의 유형"]),
|
|
240
|
+
message: t(["Message", "메시지"]).desc(["Encouragement message", "격려 메시지"]),
|
|
241
|
+
showAt: t(["Show At", "표시 시간"]).desc(["When to show encouragement", "격려 표시 시점"]),
|
|
242
|
+
}))
|
|
243
|
+
.enum<Journey>("journey", (t) => ({
|
|
244
|
+
firstJoin: t(["First Join", "첫 가입"]).desc(["User just joined", "사용자가 방금 가입함"]),
|
|
245
|
+
waitPay: t(["Waiting Payment", "결제 대기"]).desc(["Awaiting payment", "결제 대기 중"]),
|
|
246
|
+
onProgress: t(["In Progress", "진행 중"]).desc(["Currently active", "현재 진행 중"]),
|
|
247
|
+
completed: t(["Completed", "완료됨"]).desc(["Journey completed", "여정 완료"]),
|
|
248
|
+
}))
|
|
249
|
+
.enum<Inquiry>("inquiry", (t) => ({
|
|
250
|
+
general: t(["General", "일반"]).desc(["General inquiry", "일반 문의"]),
|
|
251
|
+
support: t(["Support", "지원"]).desc(["Technical support", "기술 지원"]),
|
|
252
|
+
billing: t(["Billing", "청구"]).desc(["Billing inquiry", "청구 문의"]),
|
|
253
|
+
}));
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Pro Tips
|
|
257
|
+
|
|
258
|
+
- **TypeScript Errors**: TypeScript will show errors if you miss any fields or enum values - use this to your advantage!
|
|
259
|
+
- **Usage**: The dictionary is used for UI labels, form validation messages, and API documentation
|
|
260
|
+
- **Descriptions**: Keep descriptions concise but informative - they appear in tooltips and help text
|
|
261
|
+
- **Consistency**: Match the field order in dictionary with the constant file for easier maintenance
|
|
262
|
+
|
|
263
|
+
## Summary
|
|
264
|
+
|
|
265
|
+
1. **Import**: `scalarDictionary` from `akanjs/dictionary`, types from constant file
|
|
266
|
+
2. **Initialize**: `scalarDictionary(["en", "ko"])`
|
|
267
|
+
3. **Scalar Info**: `.of((t) => t([...]).desc([...]))`
|
|
268
|
+
4. **Fields**: `.model<Type>((t) => ({ field: t([...]).desc([...]) }))`
|
|
269
|
+
5. **Enums**: `.enum<Type>("enumName", (t) => ({ value: t([...]).desc([...]) }))`
|
|
270
|
+
6. **Export**: `export const dictionary = ...`
|
|
271
|
+
7. **Format**: `t(["English", "Korean"]).desc(["English desc", "Korean desc"])`
|
|
272
|
+
|
|
273
|
+
Following these guidelines ensures your scalar dictionary files are complete, type-safe, and maintainable across the Akan.js framework.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Scalar Module",
|
|
3
|
+
"description": "Overview and summary of scalar modules in Akan.js - reusable data structures for embedded documents, DTOs, and shared schemas",
|
|
4
|
+
"scans": [
|
|
5
|
+
{
|
|
6
|
+
"type": "source",
|
|
7
|
+
"description": "constant instruction file",
|
|
8
|
+
"path": "pkgs/akanjs/cli/guidelines/scalarConstant/scalarConstant.instruction.md"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"type": "source",
|
|
12
|
+
"description": "dictionary instruction file",
|
|
13
|
+
"path": "pkgs/akanjs/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"type": "source",
|
|
17
|
+
"description": "core scalar module factory functions",
|
|
18
|
+
"path": "pkgs/akanjs/server/module.ts"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"update": {
|
|
22
|
+
"filePath": "./scalarModule.instruction.md",
|
|
23
|
+
"contents": [
|
|
24
|
+
"Purpose and architecture of scalar modules in Akan.js",
|
|
25
|
+
"Complete file structure and directory organization",
|
|
26
|
+
"Naming conventions for directories, files, classes, enums and dictionary keys"
|
|
27
|
+
],
|
|
28
|
+
"rules": [
|
|
29
|
+
"Follow camelCase naming for directories and files",
|
|
30
|
+
"Use PascalCase for class names and enum types",
|
|
31
|
+
"Design scalars for reusability across multiple modules"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"page": "/akanjs/(docs)/docs/scalar/overview/_index.tsx"
|
|
35
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Scalar Modules Overview
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Scalar modules provide reusable value objects for:
|
|
6
|
+
|
|
7
|
+
- Embedded documents in domain models
|
|
8
|
+
- Shared DTOs and configuration objects
|
|
9
|
+
- Type-safe schemas across your application
|
|
10
|
+
- Internationalized data structures
|
|
11
|
+
|
|
12
|
+
## Core Principles
|
|
13
|
+
|
|
14
|
+
- **Reusability**: Designed for cross-module consumption
|
|
15
|
+
- **Stateless**: Pure data containers without business logic
|
|
16
|
+
- **Type-Safe**: Full TypeScript integration with runtime validation
|
|
17
|
+
- **Composable**: Embeddable within larger domain models
|
|
18
|
+
- **I18n Ready**: Built-in translation support
|
|
19
|
+
|
|
20
|
+
## File Structure
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
{domain}/lib/
|
|
24
|
+
└── __scalar/ // Special scalar directory
|
|
25
|
+
└── [scalarName]/ // camelCase scalar name
|
|
26
|
+
├── [name].constant.ts // Schema definition
|
|
27
|
+
├── [name].dictionary.ts // I18n translations
|
|
28
|
+
└── [name].document.ts // Method extensions (optional)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## File Responsibilities
|
|
32
|
+
|
|
33
|
+
| File Type | Purpose |
|
|
34
|
+
| ----------------- | ---------------------------------------------------------------- |
|
|
35
|
+
| `*.constant.ts` | Defines schema with `@Model.Scalar` and `@Field.Prop` decorators |
|
|
36
|
+
| `*.dictionary.ts` | Provides internationalization with `ModelDictionary<Type>` |
|
|
37
|
+
| `*.document.ts` | Extends functionality with custom methods using `by()` decorator |
|
|
38
|
+
|
|
39
|
+
## Naming Conventions
|
|
40
|
+
|
|
41
|
+
| Element | Convention | Example |
|
|
42
|
+
| ---------------- | ---------------------- | --------------------------- |
|
|
43
|
+
| Scalar Directory | `camelCase` | `geoLocation` |
|
|
44
|
+
| Constant File | `[name].constant.ts` | `geoLocation.constant.ts` |
|
|
45
|
+
| Dictionary File | `[name].dictionary.ts` | `geoLocation.dictionary.ts` |
|
|
46
|
+
| Document File | `[name].document.ts` | `geoLocation.document.ts` |
|
|
47
|
+
| Scalar Class | `PascalCase` | `GeoLocation` |
|
|
48
|
+
| Enum Values | `camelCase` | `highAccuracy` |
|
|
49
|
+
| Dictionary Keys | `kebab-case` prefixes | `desc-fieldName` |
|
|
50
|
+
|
|
51
|
+
## Core Components
|
|
52
|
+
|
|
53
|
+
1. **Constant File**: Schema definition with typed fields and validation
|
|
54
|
+
2. **Dictionary File**: I18n translations for model metadata, fields and enums
|
|
55
|
+
3. **Document File**: Optional method extensions for data transformations
|
|
56
|
+
|
|
57
|
+
## Key Rules
|
|
58
|
+
|
|
59
|
+
1. One scalar class per file with matching `@Model.Scalar` parameter
|
|
60
|
+
2. All fields require decorators (`@Field.Prop`, `@Field.Hidden`, etc.)
|
|
61
|
+
3. Dictionary must include all fields/enums with `modelName`/`modelDesc`
|
|
62
|
+
4. Use `satisfies ModelDictionary<Type>` for dictionary type safety
|
|
63
|
+
|
|
64
|
+
## Best Practices
|
|
65
|
+
|
|
66
|
+
- Design for maximum reusability across modules
|
|
67
|
+
- Keep scalars focused and lightweight
|
|
68
|
+
- Use immutable fields for invariant data
|
|
69
|
+
- Provide complete I18n coverage in dictionaries
|
|
70
|
+
- Add document methods only for data transformations
|
|
71
|
+
- Validate fields with options (min/max, minlength/maxlength)
|
|
72
|
+
|
|
73
|
+
## Integration Points
|
|
74
|
+
|
|
75
|
+
- **Domain Models**: Embedded as value objects
|
|
76
|
+
- **GraphQL**: Auto-generated types and enums
|
|
77
|
+
- **Validation**: Runtime type checking through decorators
|
|
78
|
+
- **Internationalization**: Consistent terminology via dictionaries
|
|
79
|
+
- **API Contracts**: Shared request/response payloads
|
|
80
|
+
|
|
81
|
+
Scalar modules provide foundational data structures that enable consistent, type-safe modeling across Akan.js applications while promoting code reuse and maintainability.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Shared UI Components Usage Guide",
|
|
3
|
+
"description": "Comprehensive guide on using shared library UI components in Akan.js applications",
|
|
4
|
+
"scans": [
|
|
5
|
+
{
|
|
6
|
+
"type": "source",
|
|
7
|
+
"description": "Core shared UI component library structure",
|
|
8
|
+
"path": "libs/shared/ui/index.ts"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"type": "source",
|
|
12
|
+
"description": "Field component implementations (form inputs)",
|
|
13
|
+
"path": "libs/shared/ui/Field.tsx"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"type": "source",
|
|
17
|
+
"description": "Data component implementations (tables, lists, visualization)",
|
|
18
|
+
"path": "libs/shared/ui/Data/index_.tsx"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "source",
|
|
22
|
+
"description": "Load component implementations (data fetching)",
|
|
23
|
+
"path": "libs/shared/ui/Load/index_.tsx"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "source",
|
|
27
|
+
"description": "Model component implementations (CRUD operations)",
|
|
28
|
+
"path": "libs/shared/ui/Model/index_.tsx"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "source",
|
|
32
|
+
"description": "System component implementations (providers, app utilities)",
|
|
33
|
+
"path": "libs/shared/ui/System/index.tsx"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "source",
|
|
37
|
+
"description": "Only component implementations (conditional rendering)",
|
|
38
|
+
"path": "libs/shared/ui/Only/index.tsx"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "example",
|
|
42
|
+
"description": "Field components usage examples",
|
|
43
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View,Zone}.tsx",
|
|
44
|
+
"filterText": "Field} from \"@shared/ui\"",
|
|
45
|
+
"sample": 5
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"type": "example",
|
|
49
|
+
"description": "Data components usage examples",
|
|
50
|
+
"path": "{apps,libs}/*/lib/*/*.{Zone,View}.tsx",
|
|
51
|
+
"filterText": "Data} from \"@shared/ui\"",
|
|
52
|
+
"sample": 5
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "example",
|
|
56
|
+
"description": "Load components usage examples",
|
|
57
|
+
"path": "{apps,libs}/*/lib/*/*.{Zone,View}.tsx",
|
|
58
|
+
"filterText": "Load} from \"@shared/ui\"",
|
|
59
|
+
"sample": 5
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"type": "example",
|
|
63
|
+
"description": "Model components usage examples",
|
|
64
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,Util,Zone}.tsx",
|
|
65
|
+
"filterText": "Model} from \"@shared/ui\"",
|
|
66
|
+
"sample": 5
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"type": "example",
|
|
70
|
+
"description": "Only component usage examples",
|
|
71
|
+
"path": "{apps,libs}/*/lib/*/*.{Unit,View,Util}.tsx",
|
|
72
|
+
"filterText": "Only} from \"@shared/ui\"",
|
|
73
|
+
"sample": 3
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"type": "example",
|
|
77
|
+
"description": "Complex form examples with validation",
|
|
78
|
+
"path": "{apps,libs}/*/lib/*/*.Template.tsx",
|
|
79
|
+
"filterText": "validate",
|
|
80
|
+
"sample": 3
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"type": "example",
|
|
84
|
+
"description": "Store integration examples",
|
|
85
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View,Zone}.tsx",
|
|
86
|
+
"filterText": "sliceName",
|
|
87
|
+
"sample": 5
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"update": {
|
|
91
|
+
"filePath": "./sharedUiUsage.instruction.md",
|
|
92
|
+
"contents": [
|
|
93
|
+
"Overview of Shared UI Components",
|
|
94
|
+
"Component Namespaces (Field, Data, Load, Model, System, Only, Editor, Property)",
|
|
95
|
+
"Basic Component Usage",
|
|
96
|
+
"Form Fields and Validation",
|
|
97
|
+
"Data Management Components",
|
|
98
|
+
"Loading and Data Fetching",
|
|
99
|
+
"CRUD Operations",
|
|
100
|
+
"Conditional Rendering",
|
|
101
|
+
"Store Integration",
|
|
102
|
+
"Common Patterns and Best Practices",
|
|
103
|
+
"Troubleshooting"
|
|
104
|
+
],
|
|
105
|
+
"rules": []
|
|
106
|
+
},
|
|
107
|
+
"page": "/model/[model]"
|
|
108
|
+
}
|