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,359 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { confirm, input, select } from "@inquirer/prompts";
|
|
3
|
+
import { StringOutputParser } from "@langchain/core/output_parsers";
|
|
4
|
+
import { PromptTemplate } from "@langchain/core/prompts";
|
|
5
|
+
import { RunnableSequence } from "@langchain/core/runnables";
|
|
6
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
7
|
+
import { Logger } from "akanjs/common";
|
|
8
|
+
import {
|
|
9
|
+
AkanAppHost,
|
|
10
|
+
type App,
|
|
11
|
+
AppExecutor,
|
|
12
|
+
ApplicationBuildRunner,
|
|
13
|
+
ApplicationReleasePackager,
|
|
14
|
+
type BuildProgressReporter,
|
|
15
|
+
type BuildResult,
|
|
16
|
+
CapacitorApp,
|
|
17
|
+
type DatabaseMode,
|
|
18
|
+
type Exec,
|
|
19
|
+
LibExecutor,
|
|
20
|
+
type MobileEnv,
|
|
21
|
+
type ReleaseSourceOptions,
|
|
22
|
+
type ResolvedMobileTarget,
|
|
23
|
+
resolveMobileTargets,
|
|
24
|
+
runner,
|
|
25
|
+
type TypecheckOptions,
|
|
26
|
+
type Workspace,
|
|
27
|
+
} from "akanjs/devkit";
|
|
28
|
+
import openBrowser from "open";
|
|
29
|
+
import ora from "ora";
|
|
30
|
+
|
|
31
|
+
export class ApplicationRunner extends runner("application") {
|
|
32
|
+
async createApplication(appName: string, workspace: Workspace, libs: string[] = []) {
|
|
33
|
+
await workspace.applyTemplate({
|
|
34
|
+
basePath: `apps/${appName}`,
|
|
35
|
+
template: "app",
|
|
36
|
+
dict: { appName, companyName: workspace.repoName, startDomain: "localhost" },
|
|
37
|
+
options: { libs },
|
|
38
|
+
});
|
|
39
|
+
await workspace.setTsPaths("app", appName);
|
|
40
|
+
return AppExecutor.from(workspace, appName);
|
|
41
|
+
}
|
|
42
|
+
async removeApplication(app: App) {
|
|
43
|
+
await app.workspace.exec(`rm -rf apps/${app.name}`);
|
|
44
|
+
await app.workspace.unsetTsPaths("app", app.name);
|
|
45
|
+
}
|
|
46
|
+
async getConfig(app: App) {
|
|
47
|
+
return await app.getConfig();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async getScriptFilename(app: App) {
|
|
51
|
+
if (!(await app.exists("script"))) {
|
|
52
|
+
await app.mkdir("script");
|
|
53
|
+
throw new Error(`No script files found. make a script file in apps/${app.name}/script folder`);
|
|
54
|
+
}
|
|
55
|
+
const scriptFiles = (await app.readdir("script")).filter((file) => file.endsWith(".ts"));
|
|
56
|
+
const scriptFile = await select({
|
|
57
|
+
message: "Select script to run",
|
|
58
|
+
choices: scriptFiles.map((file) => ({ name: file, value: file.replace(".ts", "") })),
|
|
59
|
+
});
|
|
60
|
+
return scriptFile;
|
|
61
|
+
}
|
|
62
|
+
async runScript(app: App, filename: string) {
|
|
63
|
+
const scriptName = filename.endsWith(".ts") ? filename.slice(0, -3) : filename;
|
|
64
|
+
if (scriptName.includes("/") || scriptName.includes("\\") || scriptName.includes("..")) {
|
|
65
|
+
throw new Error(`Invalid script filename: ${filename}`);
|
|
66
|
+
}
|
|
67
|
+
const scriptPath = `script/${scriptName}.ts`;
|
|
68
|
+
if (!(await app.exists(scriptPath))) throw new Error(`Script file not found: apps/${app.name}/${scriptPath}`);
|
|
69
|
+
await app.spawn("bun", [scriptPath], {
|
|
70
|
+
env: app.getCommandEnv({ AKAN_COMMAND_TYPE: "script" }),
|
|
71
|
+
stdio: "inherit",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async typecheck(app: App, options: TypecheckOptions = {}) {
|
|
75
|
+
await new ApplicationBuildRunner(app).typecheck(options);
|
|
76
|
+
}
|
|
77
|
+
async test(exec: Exec) {
|
|
78
|
+
const isSignalTarget = exec instanceof AppExecutor || exec instanceof LibExecutor;
|
|
79
|
+
const preloadPath = path.join(exec.cwdPath, "../../pkgs/akanjs/test/signalTest.preload.ts");
|
|
80
|
+
const env = isSignalTarget
|
|
81
|
+
? {
|
|
82
|
+
AKAN_TEST_SIGNAL: "1",
|
|
83
|
+
AKAN_TEST_TARGET_TYPE: exec.type,
|
|
84
|
+
AKAN_TEST_TARGET_NAME: exec.name,
|
|
85
|
+
AKAN_TEST_LIBS: exec.getScanInfo({ allowEmpty: true })?.getLibs().join(",") ?? "",
|
|
86
|
+
}
|
|
87
|
+
: {};
|
|
88
|
+
const args = isSignalTarget ? ["test", "--isolate", "--preload", preloadPath] : ["test", "--isolate"];
|
|
89
|
+
await exec.spawn("bun", args, {
|
|
90
|
+
...(isSignalTarget ? { env: { ...process.env, ...env } } : {}),
|
|
91
|
+
stdio: "inherit",
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
async build(
|
|
95
|
+
app: App,
|
|
96
|
+
{
|
|
97
|
+
fast = false,
|
|
98
|
+
reporter,
|
|
99
|
+
spinner = false,
|
|
100
|
+
}: { fast?: boolean; reporter?: BuildProgressReporter; spinner?: boolean } = {},
|
|
101
|
+
): Promise<BuildResult> {
|
|
102
|
+
return new ApplicationBuildRunner(app, { fast, reporter }).build({ spinner });
|
|
103
|
+
}
|
|
104
|
+
async start(
|
|
105
|
+
app: App,
|
|
106
|
+
{ open = false, onStart, withInk = false }: { open?: boolean; onStart?: () => void; withInk?: boolean } = {},
|
|
107
|
+
) {
|
|
108
|
+
const { env } = await app.prepareCommand("start");
|
|
109
|
+
const appHost = await new AkanAppHost(app, { env, withInk }).start();
|
|
110
|
+
onStart?.();
|
|
111
|
+
if (open) setTimeout(() => openBrowser("http://localhost:8282"), 3000);
|
|
112
|
+
return appHost;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async buildIos(
|
|
116
|
+
app: App,
|
|
117
|
+
{ target, env = "debug", regenerate = false }: { target?: string; env?: MobileEnv; regenerate?: boolean } = {},
|
|
118
|
+
) {
|
|
119
|
+
const targets = await resolveMobileTargets(app, target);
|
|
120
|
+
await this.#buildMobileCsr(app, env);
|
|
121
|
+
await this.#runMobileTargets(targets, async (mobileTarget) => {
|
|
122
|
+
await new CapacitorApp(app, mobileTarget.config).buildIos({ regenerate });
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async startIos(
|
|
126
|
+
app: App,
|
|
127
|
+
{
|
|
128
|
+
open = false,
|
|
129
|
+
operation = "local",
|
|
130
|
+
env = "local",
|
|
131
|
+
target,
|
|
132
|
+
regenerate = false,
|
|
133
|
+
}: {
|
|
134
|
+
open?: boolean;
|
|
135
|
+
operation?: "local" | "release";
|
|
136
|
+
env?: MobileEnv;
|
|
137
|
+
target?: string;
|
|
138
|
+
regenerate?: boolean;
|
|
139
|
+
} = {},
|
|
140
|
+
) {
|
|
141
|
+
const targets = await resolveMobileTargets(app, target);
|
|
142
|
+
if (operation === "release") await this.#buildMobileCsr(app, env);
|
|
143
|
+
else await this.start(app);
|
|
144
|
+
await this.#runMobileTargets(targets, async (mobileTarget) => {
|
|
145
|
+
const capacitorApp = new CapacitorApp(app, mobileTarget.config);
|
|
146
|
+
await capacitorApp.runIos({ operation, env, regenerate });
|
|
147
|
+
if (open) await capacitorApp.openIos();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async releaseIos(
|
|
151
|
+
app: App,
|
|
152
|
+
{ target, env = "main", regenerate = false }: { target?: string; env?: MobileEnv; regenerate?: boolean } = {},
|
|
153
|
+
) {
|
|
154
|
+
const targets = await resolveMobileTargets(app, target);
|
|
155
|
+
await this.#buildMobileCsr(app, env);
|
|
156
|
+
for (const mobileTarget of targets) {
|
|
157
|
+
await new CapacitorApp(app, mobileTarget.config).buildIos({ regenerate });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async buildAndroid(
|
|
162
|
+
app: App,
|
|
163
|
+
{ target, env = "debug", regenerate = false }: { target?: string; env?: MobileEnv; regenerate?: boolean } = {},
|
|
164
|
+
) {
|
|
165
|
+
const targets = await resolveMobileTargets(app, target);
|
|
166
|
+
await this.#buildMobileCsr(app, env);
|
|
167
|
+
await this.#runMobileTargets(targets, async (mobileTarget) => {
|
|
168
|
+
await new CapacitorApp(app, mobileTarget.config).buildAndroid("apk", { regenerate });
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
async startAndroid(
|
|
173
|
+
app: App,
|
|
174
|
+
{
|
|
175
|
+
open = false,
|
|
176
|
+
operation = "local",
|
|
177
|
+
env = "local",
|
|
178
|
+
target,
|
|
179
|
+
regenerate = false,
|
|
180
|
+
}: {
|
|
181
|
+
open?: boolean;
|
|
182
|
+
operation?: "local" | "release";
|
|
183
|
+
env?: MobileEnv;
|
|
184
|
+
target?: string;
|
|
185
|
+
regenerate?: boolean;
|
|
186
|
+
} = {},
|
|
187
|
+
) {
|
|
188
|
+
const targets = await resolveMobileTargets(app, target);
|
|
189
|
+
if (operation === "release") await this.#buildMobileCsr(app, env);
|
|
190
|
+
else await this.start(app);
|
|
191
|
+
await this.#runMobileTargets(targets, async (mobileTarget) => {
|
|
192
|
+
const capacitorApp = new CapacitorApp(app, mobileTarget.config);
|
|
193
|
+
await capacitorApp.runAndroid({ operation, env, regenerate });
|
|
194
|
+
if (open) await capacitorApp.openAndroid();
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async releaseAndroid(
|
|
199
|
+
app: App,
|
|
200
|
+
assembleType: "apk" | "aab",
|
|
201
|
+
{ target, env = "main", regenerate = false }: { target?: string; env?: MobileEnv; regenerate?: boolean } = {},
|
|
202
|
+
) {
|
|
203
|
+
const targets = await resolveMobileTargets(app, target);
|
|
204
|
+
await this.#buildMobileCsr(app, env);
|
|
205
|
+
for (const mobileTarget of targets) {
|
|
206
|
+
await new CapacitorApp(app, mobileTarget.config).buildAndroid(assembleType, { regenerate });
|
|
207
|
+
app.log(`Release Android ${app.name}/${mobileTarget.name} ${assembleType} Completed.`);
|
|
208
|
+
app.log(
|
|
209
|
+
`Path : ${app.cwdPath}/mobile/${mobileTarget.name}/android/app/build/outputs/${assembleType === "apk" ? "apk" : "bundle"}/release`,
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
async #buildMobileCsr(app: App, env: MobileEnv) {
|
|
215
|
+
const prevEnv = {
|
|
216
|
+
AKAN_PUBLIC_ENV: process.env.AKAN_PUBLIC_ENV,
|
|
217
|
+
AKAN_PUBLIC_OPERATION_MODE: process.env.AKAN_PUBLIC_OPERATION_MODE,
|
|
218
|
+
APP_OPERATION_MODE: process.env.APP_OPERATION_MODE,
|
|
219
|
+
};
|
|
220
|
+
Object.assign(process.env, {
|
|
221
|
+
AKAN_PUBLIC_ENV: env,
|
|
222
|
+
AKAN_PUBLIC_OPERATION_MODE: env === "local" ? "local" : "cloud",
|
|
223
|
+
APP_OPERATION_MODE: "release",
|
|
224
|
+
});
|
|
225
|
+
try {
|
|
226
|
+
await new ApplicationBuildRunner(app).build({ spinner: true });
|
|
227
|
+
} finally {
|
|
228
|
+
for (const [key, value] of Object.entries(prevEnv)) {
|
|
229
|
+
if (value === undefined) delete process.env[key];
|
|
230
|
+
else process.env[key] = value;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async #runMobileTargets(targets: ResolvedMobileTarget[], task: (target: ResolvedMobileTarget) => Promise<void>) {
|
|
235
|
+
const results: { target: string; error?: unknown }[] = [];
|
|
236
|
+
for (const target of targets) {
|
|
237
|
+
try {
|
|
238
|
+
await task(target);
|
|
239
|
+
results.push({ target: target.name });
|
|
240
|
+
} catch (error) {
|
|
241
|
+
results.push({ target: target.name, error });
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const failures = results.filter((result) => result.error);
|
|
245
|
+
if (failures.length === 0) return;
|
|
246
|
+
for (const failure of failures) {
|
|
247
|
+
const message = failure.error instanceof Error ? failure.error.message : String(failure.error);
|
|
248
|
+
Logger.rawLog(`Mobile target ${failure.target} failed: ${message}`, undefined, "error");
|
|
249
|
+
}
|
|
250
|
+
throw new Error(`${failures.length}/${results.length} mobile targets failed`);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async codepush(app: App, os: "ios" | "android") {
|
|
254
|
+
const [target] = await resolveMobileTargets(app, undefined);
|
|
255
|
+
if (!target) throw new Error(`No mobile target configured for ${app.name}`);
|
|
256
|
+
const capacitorApp = new CapacitorApp(app, target.config);
|
|
257
|
+
await capacitorApp.init();
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
#getLocalDatabaseServices(mode: DatabaseMode): string[] {
|
|
262
|
+
if (mode === "single") return [];
|
|
263
|
+
if (mode === "multiple") return ["redis", "libsql"];
|
|
264
|
+
return ["redis", "postgres"];
|
|
265
|
+
}
|
|
266
|
+
async #isLocalDatabaseUp(workspace: Workspace, mode: DatabaseMode) {
|
|
267
|
+
const requiredServices = this.#getLocalDatabaseServices(mode);
|
|
268
|
+
if (!requiredServices.length) return true;
|
|
269
|
+
const output = await workspace.spawn("docker", ["compose", "ps", "--services", "--status", "running"], {
|
|
270
|
+
cwd: `${workspace.workspaceRoot}/local`,
|
|
271
|
+
});
|
|
272
|
+
const runningServices = new Set(output.split(/\s+/).filter(Boolean));
|
|
273
|
+
return requiredServices.every((service) => runningServices.has(service));
|
|
274
|
+
}
|
|
275
|
+
async dbup(workspace: Workspace, mode: DatabaseMode = "multiple"): Promise<boolean> {
|
|
276
|
+
if (mode === "single") return true;
|
|
277
|
+
try {
|
|
278
|
+
await workspace.applyTemplate({
|
|
279
|
+
basePath: "local",
|
|
280
|
+
template: "localDev",
|
|
281
|
+
dict: { repoName: workspace.repoName },
|
|
282
|
+
overwrite: false,
|
|
283
|
+
});
|
|
284
|
+
const wasAlreadyUp = await this.#isLocalDatabaseUp(workspace, mode);
|
|
285
|
+
if (!wasAlreadyUp)
|
|
286
|
+
await workspace.spawn(`docker`, ["compose", "up", "-d", ...this.#getLocalDatabaseServices(mode)], {
|
|
287
|
+
cwd: `${workspace.workspaceRoot}/local`,
|
|
288
|
+
});
|
|
289
|
+
return wasAlreadyUp;
|
|
290
|
+
} catch {
|
|
291
|
+
throw new Error(`Docker daemon is not running. Please install docker or start docker daemon and try again.`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
async dbdown(workspace: Workspace) {
|
|
295
|
+
await workspace.spawn(`docker`, ["compose", "down"], { cwd: `${workspace.workspaceRoot}/local` });
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
async configureApp(app: App) {
|
|
299
|
+
const [target] = await resolveMobileTargets(app, undefined);
|
|
300
|
+
if (!target) throw new Error(`No mobile target configured for ${app.name}`);
|
|
301
|
+
const capacitorApp = new CapacitorApp(app, target.config);
|
|
302
|
+
await capacitorApp.init();
|
|
303
|
+
|
|
304
|
+
if (await confirm({ message: "want to add camera permission?" })) await capacitorApp.addCamera();
|
|
305
|
+
if (await confirm({ message: "want to add contact permission?" })) await capacitorApp.addContact();
|
|
306
|
+
if (await confirm({ message: "want to add location permission?" })) await capacitorApp.addLocation();
|
|
307
|
+
await capacitorApp.save();
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
async releaseSource(
|
|
311
|
+
app: App,
|
|
312
|
+
{ rebuild, buildNum = 0, environment = "debug", local = true }: ReleaseSourceOptions = {},
|
|
313
|
+
) {
|
|
314
|
+
await new ApplicationReleasePackager(app, { build: () => this.build(app).then(() => undefined) }).releaseSource({
|
|
315
|
+
rebuild,
|
|
316
|
+
buildNum,
|
|
317
|
+
environment,
|
|
318
|
+
local,
|
|
319
|
+
});
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
async createApplicationTemplate(workspace: Workspace, appName: string) {
|
|
324
|
+
await workspace.applyTemplate({ basePath: `apps/${appName}`, template: "appRoot", dict: { appName } });
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
async compressProjectFiles(
|
|
328
|
+
app: App,
|
|
329
|
+
{ rebuild, buildNum = 0, environment = "debug", local = true }: ReleaseSourceOptions = {},
|
|
330
|
+
) {
|
|
331
|
+
await new ApplicationReleasePackager(app, {
|
|
332
|
+
build: () => this.build(app).then(() => undefined),
|
|
333
|
+
}).compressProjectFiles({
|
|
334
|
+
rebuild,
|
|
335
|
+
buildNum,
|
|
336
|
+
environment,
|
|
337
|
+
local,
|
|
338
|
+
});
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
async generateApplicationTemplate(app: App) {
|
|
343
|
+
const openAIApiKey = process.env.OPENAI_API_KEY;
|
|
344
|
+
if (!openAIApiKey) throw new Error("OPENAI_API_KEY is not set");
|
|
345
|
+
const chatModel = new ChatOpenAI({ modelName: "gpt-4o", openAIApiKey });
|
|
346
|
+
const projectName = await input({ message: "please enter project name." });
|
|
347
|
+
const projectDesc = await input({ message: "please enter project description. (40 ~ 60 characters)" });
|
|
348
|
+
const spinner = ora("Gerating project files...");
|
|
349
|
+
|
|
350
|
+
const mainPrompt = PromptTemplate.fromTemplate(`prompt.requestApplication()`);
|
|
351
|
+
const chain = RunnableSequence.from([mainPrompt, chatModel, new StringOutputParser()]);
|
|
352
|
+
await chain.invoke({ projectName, projectDesc });
|
|
353
|
+
spinner.succeed("Loading complete!");
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
async testApplication(app: App) {
|
|
358
|
+
}
|
|
359
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { Logger } from "akanjs/common";
|
|
2
|
+
import {
|
|
3
|
+
type App,
|
|
4
|
+
ApplicationBuildReporter,
|
|
5
|
+
type DatabaseMode,
|
|
6
|
+
type Exec,
|
|
7
|
+
type Lib,
|
|
8
|
+
LibExecutor,
|
|
9
|
+
type MobileEnv,
|
|
10
|
+
PkgExecutor,
|
|
11
|
+
type ReleaseSourceOptions,
|
|
12
|
+
type Sys,
|
|
13
|
+
script,
|
|
14
|
+
type TypecheckOptions,
|
|
15
|
+
type Workspace,
|
|
16
|
+
} from "akanjs/devkit";
|
|
17
|
+
import { LibraryScript } from "../library/library.script";
|
|
18
|
+
import { ApplicationRunner } from "./application.runner";
|
|
19
|
+
|
|
20
|
+
type MobileOperation = "local" | "release";
|
|
21
|
+
type MobileCommandOptions = {
|
|
22
|
+
target?: string;
|
|
23
|
+
env?: MobileEnv;
|
|
24
|
+
write?: boolean;
|
|
25
|
+
regenerate?: boolean;
|
|
26
|
+
};
|
|
27
|
+
type MobileReleaseOptions = MobileCommandOptions & {
|
|
28
|
+
allowLocalRelease?: boolean;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export class ApplicationScript extends script("application", [ApplicationRunner, LibraryScript]) {
|
|
32
|
+
async createApplication(
|
|
33
|
+
appName: string,
|
|
34
|
+
workspace: Workspace,
|
|
35
|
+
{ start = false, libs = [] }: { start?: boolean; libs?: string[] } = {},
|
|
36
|
+
) {
|
|
37
|
+
const spinner = workspace.spinning("Creating application...");
|
|
38
|
+
const app = await this.applicationRunner.createApplication(appName, workspace, libs);
|
|
39
|
+
spinner.succeed(`Application created in apps/${app.name}`);
|
|
40
|
+
await app.scanSync();
|
|
41
|
+
if (start) await this.start(app, { open: true });
|
|
42
|
+
}
|
|
43
|
+
async removeApplication(app: App) {
|
|
44
|
+
const spinner = app.spinning("Removing application...");
|
|
45
|
+
await this.applicationRunner.removeApplication(app);
|
|
46
|
+
spinner.succeed(`Application ${app.name} (apps/${app.name}) removed`);
|
|
47
|
+
}
|
|
48
|
+
async sync(sys: Sys) {
|
|
49
|
+
if (sys.type === "app") await (sys as App).scanSync();
|
|
50
|
+
else await this.libraryScript.syncLibrary(sys as Lib);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async script(app: App, filename: string | null) {
|
|
54
|
+
const scriptFilename = filename ?? (await this.applicationRunner.getScriptFilename(app));
|
|
55
|
+
await app.scanSync();
|
|
56
|
+
await this.applicationRunner.runScript(app, scriptFilename);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async build(
|
|
60
|
+
app: App,
|
|
61
|
+
{ write = true, fast = false, quiet = false }: { write?: boolean; fast?: boolean; quiet?: boolean } = {},
|
|
62
|
+
) {
|
|
63
|
+
await app.scanSync({ write });
|
|
64
|
+
if (!quiet) Logger.rawLog(`Creating an optimized production build for ${app.name}...`);
|
|
65
|
+
try {
|
|
66
|
+
const result = await this.applicationRunner.build(app, {
|
|
67
|
+
fast,
|
|
68
|
+
spinner: !quiet,
|
|
69
|
+
});
|
|
70
|
+
Logger.rawLog(`${app.name} built in dist/apps/${app.name}`);
|
|
71
|
+
if (!quiet) ApplicationBuildReporter.printSummary(result);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
Logger.rawLog(`${app.name} build failed in dist/apps/${app.name}`, undefined, "error");
|
|
74
|
+
Logger.rawLog(ApplicationBuildReporter.formatError(error), undefined, "error");
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async typecheck(
|
|
80
|
+
app: App,
|
|
81
|
+
{ write = true, clean = false, incremental = true }: TypecheckOptions & { write?: boolean } = {},
|
|
82
|
+
) {
|
|
83
|
+
await app.scanSync({ write });
|
|
84
|
+
const spinner = app.spinning(`Typechecking ${app.name}...`);
|
|
85
|
+
try {
|
|
86
|
+
await this.applicationRunner.typecheck(app, { clean, incremental });
|
|
87
|
+
spinner.succeed(`${app.name} typechecked`);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
spinner.fail(`${app.name} typecheck failed`);
|
|
90
|
+
Logger.rawLog(ApplicationBuildReporter.formatError(error), undefined, "error");
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async test(exec: Exec, { write = true }: { write?: boolean } = {}) {
|
|
96
|
+
const spinner = exec.spinning(`Preparing ${exec.name}...`);
|
|
97
|
+
try {
|
|
98
|
+
if (exec instanceof PkgExecutor) await exec.scan({ refresh: true });
|
|
99
|
+
else if (exec instanceof LibExecutor) await this.libraryScript.syncLibrary(exec);
|
|
100
|
+
else await (exec as App).scanSync({ write });
|
|
101
|
+
spinner.succeed(`${exec.name} prepared`);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
spinner.fail(`${exec.name} prepare failed`);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
await this.applicationRunner.test(exec);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async start(
|
|
110
|
+
app: App,
|
|
111
|
+
{
|
|
112
|
+
open = false,
|
|
113
|
+
dbup = true,
|
|
114
|
+
withInk = false,
|
|
115
|
+
write = true,
|
|
116
|
+
}: { open?: boolean; dbup?: boolean; withInk?: boolean; write?: boolean } = {},
|
|
117
|
+
) {
|
|
118
|
+
await app.scanSync({ write });
|
|
119
|
+
const akanConfig = await app.getConfig();
|
|
120
|
+
const databaseMode = (process.env.AKAN_DATABASE_MODE ?? akanConfig.defaultDatabaseMode ?? "single") as DatabaseMode;
|
|
121
|
+
if (app.getEnv() === "local" && dbup && databaseMode !== "single") {
|
|
122
|
+
const wasDbAlreadyUp = await this.dbup(app.workspace, databaseMode);
|
|
123
|
+
if (!wasDbAlreadyUp)
|
|
124
|
+
process.on("SIGINT", async () => {
|
|
125
|
+
await this.dbdown(app.workspace);
|
|
126
|
+
process.exit(0);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const spinner = app.spinning("Preparing backend...");
|
|
130
|
+
const akanAppHost = await this.applicationRunner.start(app, {
|
|
131
|
+
open,
|
|
132
|
+
onStart: () => {
|
|
133
|
+
spinner.succeed(`${app.name} prepared, ready to start`);
|
|
134
|
+
},
|
|
135
|
+
withInk,
|
|
136
|
+
});
|
|
137
|
+
return akanAppHost;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
async buildIos(app: App, { write = true, target, env = "debug", regenerate = false }: MobileCommandOptions = {}) {
|
|
141
|
+
await app.scanSync({ write });
|
|
142
|
+
await this.applicationRunner.buildIos(app, { target, env, regenerate });
|
|
143
|
+
}
|
|
144
|
+
async startIos(
|
|
145
|
+
app: App,
|
|
146
|
+
{
|
|
147
|
+
open = false,
|
|
148
|
+
operation = "local",
|
|
149
|
+
env = "local",
|
|
150
|
+
write = true,
|
|
151
|
+
target,
|
|
152
|
+
regenerate = false,
|
|
153
|
+
}: {
|
|
154
|
+
operation?: MobileOperation;
|
|
155
|
+
env?: MobileEnv;
|
|
156
|
+
open?: boolean;
|
|
157
|
+
write?: boolean;
|
|
158
|
+
target?: string;
|
|
159
|
+
regenerate?: boolean;
|
|
160
|
+
} = {},
|
|
161
|
+
) {
|
|
162
|
+
await app.scanSync({ write });
|
|
163
|
+
await this.applicationRunner.startIos(app, { open, operation, env, target, regenerate });
|
|
164
|
+
}
|
|
165
|
+
async releaseIos(
|
|
166
|
+
app: App,
|
|
167
|
+
{ write = true, target, env = "main", regenerate = false, allowLocalRelease = false }: MobileReleaseOptions = {},
|
|
168
|
+
) {
|
|
169
|
+
await app.scanSync({ write });
|
|
170
|
+
if (env === "local" && !allowLocalRelease)
|
|
171
|
+
throw new Error(
|
|
172
|
+
"releaseIos --env local is blocked. Pass allowLocalRelease only for explicit local release testing.",
|
|
173
|
+
);
|
|
174
|
+
await this.applicationRunner.releaseIos(app, { target, env, regenerate });
|
|
175
|
+
}
|
|
176
|
+
async buildAndroid(app: App, { write = true, target, env = "debug", regenerate = false }: MobileCommandOptions = {}) {
|
|
177
|
+
await app.scanSync({ write });
|
|
178
|
+
await this.applicationRunner.buildAndroid(app, { target, env, regenerate });
|
|
179
|
+
}
|
|
180
|
+
async startAndroid(
|
|
181
|
+
app: App,
|
|
182
|
+
{
|
|
183
|
+
open = false,
|
|
184
|
+
operation = "local",
|
|
185
|
+
env = "local",
|
|
186
|
+
write = true,
|
|
187
|
+
target,
|
|
188
|
+
regenerate = false,
|
|
189
|
+
}: {
|
|
190
|
+
open?: boolean;
|
|
191
|
+
env?: MobileEnv;
|
|
192
|
+
operation?: MobileOperation;
|
|
193
|
+
write?: boolean;
|
|
194
|
+
target?: string;
|
|
195
|
+
regenerate?: boolean;
|
|
196
|
+
} = {},
|
|
197
|
+
) {
|
|
198
|
+
await app.scanSync({ write });
|
|
199
|
+
await this.applicationRunner.startAndroid(app, { open, operation, env, target, regenerate });
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async releaseAndroid(
|
|
203
|
+
app: App,
|
|
204
|
+
assembleType: "apk" | "aab",
|
|
205
|
+
{ write = true, target, env = "main", regenerate = false, allowLocalRelease = false }: MobileReleaseOptions = {},
|
|
206
|
+
) {
|
|
207
|
+
await app.scanSync({ write });
|
|
208
|
+
if (env === "local" && !allowLocalRelease)
|
|
209
|
+
throw new Error(
|
|
210
|
+
"releaseAndroid --env local is blocked. Pass allowLocalRelease only for explicit local release testing.",
|
|
211
|
+
);
|
|
212
|
+
await this.applicationRunner.releaseAndroid(app, assembleType, { target, env, regenerate });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async configureApp(app: App) {
|
|
216
|
+
await this.applicationRunner.configureApp(app);
|
|
217
|
+
}
|
|
218
|
+
async releaseSource(app: App, options: ReleaseSourceOptions) {
|
|
219
|
+
await this.applicationRunner.releaseSource(app, options);
|
|
220
|
+
}
|
|
221
|
+
async codepush(app: App, os: "ios" | "android") {
|
|
222
|
+
await this.applicationRunner.codepush(app, os);
|
|
223
|
+
}
|
|
224
|
+
async dbup(workspace: Workspace, mode: DatabaseMode = "multiple"): Promise<boolean> {
|
|
225
|
+
const spinner = workspace.spinning(`Starting local database (${mode})...`);
|
|
226
|
+
const wasAlreadyUp = await this.applicationRunner.dbup(workspace, mode);
|
|
227
|
+
spinner.succeed(wasAlreadyUp ? `Local database (${mode}) was already up` : `Local database (${mode}) is up`);
|
|
228
|
+
return wasAlreadyUp;
|
|
229
|
+
}
|
|
230
|
+
async dbdown(workspace: Workspace) {
|
|
231
|
+
const spinner = workspace.spinning("Stopping local database...");
|
|
232
|
+
await this.applicationRunner.dbdown(workspace);
|
|
233
|
+
spinner.succeed("Local database (/local/docker-compose.yaml) is down");
|
|
234
|
+
}
|
|
235
|
+
async testSys(sys: Sys) {
|
|
236
|
+
if (sys.type === "app") await this.testApplication(sys as App);
|
|
237
|
+
else await this.libraryScript.testLibrary(sys as Lib);
|
|
238
|
+
}
|
|
239
|
+
async testApplication(app: App) {
|
|
240
|
+
const spinner = app.spinning("Testing application...");
|
|
241
|
+
await this.applicationRunner.testApplication(app);
|
|
242
|
+
spinner.succeed(`Application ${app.name} (apps/${app.name}) test is successful`);
|
|
243
|
+
}
|
|
244
|
+
}
|
package/cli/build.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { $ } from "bun";
|
|
2
|
+
|
|
3
|
+
const CLI_DIR = import.meta.dir;
|
|
4
|
+
const PACKAGE_DIR = `${CLI_DIR}/..`;
|
|
5
|
+
const WORKSPACE_ROOT = process.env.WORKSPACE_ROOT ?? process.cwd();
|
|
6
|
+
const OUT_DIR = process.env.DIST_DIR ?? `${WORKSPACE_ROOT}/dist/pkgs/akanjs`;
|
|
7
|
+
|
|
8
|
+
const build = async () => {
|
|
9
|
+
try {
|
|
10
|
+
await $`rm -rf ${OUT_DIR}/cli`;
|
|
11
|
+
await Bun.build({
|
|
12
|
+
entrypoints: [`${CLI_DIR}/index.ts`],
|
|
13
|
+
splitting: false,
|
|
14
|
+
target: "bun",
|
|
15
|
+
outdir: `${OUT_DIR}/cli`,
|
|
16
|
+
external: Object.keys((await Bun.file(`${PACKAGE_DIR}/package.json`).json()).dependencies ?? {}),
|
|
17
|
+
});
|
|
18
|
+
await $`cp -R ${CLI_DIR}/templates ${OUT_DIR}/cli/templates`;
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.error(error);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
build();
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { command, Workspace } from "akanjs/devkit";
|
|
2
|
+
|
|
3
|
+
import { CloudScript } from "./cloud.script";
|
|
4
|
+
|
|
5
|
+
export class CloudCommand extends command("cloud", [CloudScript], ({ public: target }) => ({
|
|
6
|
+
login: target({ desc: "Login to Akan Cloud services" })
|
|
7
|
+
.with(Workspace)
|
|
8
|
+
.exec(async function (workspace) {
|
|
9
|
+
await this.cloudScript.login(workspace);
|
|
10
|
+
}),
|
|
11
|
+
logout: target({ desc: "Logout from Akan Cloud services" })
|
|
12
|
+
.with(Workspace)
|
|
13
|
+
.exec(async function (workspace) {
|
|
14
|
+
await this.cloudScript.logout(workspace);
|
|
15
|
+
}),
|
|
16
|
+
setLlm: target({ desc: "Configure LLM (Large Language Model) API key" })
|
|
17
|
+
.with(Workspace)
|
|
18
|
+
.exec(async function (workspace) {
|
|
19
|
+
await this.cloudScript.setLlm(workspace);
|
|
20
|
+
}),
|
|
21
|
+
resetLlm: target({ desc: "Reset LLM configuration to default" })
|
|
22
|
+
.with(Workspace)
|
|
23
|
+
.exec(function (workspace) {
|
|
24
|
+
this.cloudScript.resetLlm(workspace);
|
|
25
|
+
}),
|
|
26
|
+
ask: target({ desc: "Ask AI assistant a question about your project" })
|
|
27
|
+
.option("question", String, { ask: "question to ask" })
|
|
28
|
+
.with(Workspace)
|
|
29
|
+
.exec(async function (question, workspace) {
|
|
30
|
+
await this.cloudScript.ask(question, workspace);
|
|
31
|
+
}),
|
|
32
|
+
deployAkan: target({ devOnly: true, desc: "Deploy Akan.js framework to cloud (internal use)" })
|
|
33
|
+
.option("test", Boolean, { desc: "test the deployment", default: true })
|
|
34
|
+
.with(Workspace)
|
|
35
|
+
.exec(async function (test, workspace) {
|
|
36
|
+
await this.cloudScript.deployAkan(workspace, { test });
|
|
37
|
+
}),
|
|
38
|
+
update: target({ desc: "Update Akan.js framework to the latest version" })
|
|
39
|
+
.with(Workspace)
|
|
40
|
+
.option("tag", String, {
|
|
41
|
+
desc: "tag of the update",
|
|
42
|
+
default: "latest",
|
|
43
|
+
enum: ["latest", "dev", "canary", "beta", "rc", "alpha"],
|
|
44
|
+
})
|
|
45
|
+
.exec(async function (workspace, tag) {
|
|
46
|
+
await this.cloudScript.update(workspace, tag);
|
|
47
|
+
}),
|
|
48
|
+
})) {}
|