@akanjs/cli 0.0.39 → 0.0.41

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.
Files changed (181) hide show
  1. package/index.d.ts +1 -0
  2. package/index.js +75 -59
  3. package/package.json +2 -1
  4. package/src/application/application.command.d.ts +26 -0
  5. package/src/application/application.prompt.d.ts +2 -0
  6. package/src/application/application.runner.d.ts +35 -0
  7. package/src/application/application.script.d.ts +36 -0
  8. package/src/cloud/cloud.command.d.ts +8 -0
  9. package/src/cloud/cloud.runner.d.ts +7 -0
  10. package/src/cloud/cloud.script.d.ts +7 -0
  11. package/src/library/library.command.d.ts +8 -0
  12. package/src/library/library.runner.d.ts +4 -0
  13. package/src/library/library.script.d.ts +8 -0
  14. package/src/module/module.command.d.ts +13 -0
  15. package/src/module/module.prompt.d.ts +15 -0
  16. package/src/module/module.runner.d.ts +17 -0
  17. package/src/module/module.script.d.ts +11 -0
  18. package/src/package/package.command.d.ts +9 -0
  19. package/src/package/package.runner.d.ts +6 -0
  20. package/src/package/package.script.d.ts +7 -0
  21. package/src/package/page/page.command.d.ts +6 -0
  22. package/src/package/page/page.runner.d.ts +4 -0
  23. package/src/package/page/page.script.d.ts +5 -0
  24. package/src/workspace/workspace.command.d.ts +8 -0
  25. package/src/workspace/workspace.runner.d.ts +6 -0
  26. package/src/workspace/workspace.script.d.ts +7 -0
  27. package/templates/__scalar/__model__/__model__.constant.js +0 -34
  28. package/templates/__scalar/__model__/__model__.dictionary.js +0 -45
  29. package/templates/__scalar/__model__/__model__.document.js +0 -32
  30. package/templates/app/akan.config.ts.template +0 -5
  31. package/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.js +0 -43
  32. package/templates/app/app/[lang]/(__appName__)/(public)/page.js +0 -44
  33. package/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.js +0 -38
  34. package/templates/app/app/[lang]/(__appName__)/(public)/signin/page.js +0 -46
  35. package/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.js +0 -37
  36. package/templates/app/app/[lang]/(__appName__)/(user)/layout.js +0 -39
  37. package/templates/app/app/[lang]/(__appName__)/(user)/self/page.js +0 -56
  38. package/templates/app/app/[lang]/(__appName__)/layout.js +0 -48
  39. package/templates/app/app/[lang]/admin/layout.js +0 -49
  40. package/templates/app/app/[lang]/admin/page.js +0 -59
  41. package/templates/app/app/csr.js +0 -30
  42. package/templates/app/app/index.html.template +0 -13
  43. package/templates/app/app/layout.js +0 -34
  44. package/templates/app/app/robots.js +0 -39
  45. package/templates/app/app/sitemap.js +0 -35
  46. package/templates/app/base/baseLogic.js +0 -34
  47. package/templates/app/base/index.js +0 -28
  48. package/templates/app/capacitor.config.ts.template +0 -8
  49. package/templates/app/common/commonLogic.js +0 -34
  50. package/templates/app/common/index.js +0 -28
  51. package/templates/app/env/env.client.js +0 -37
  52. package/templates/app/env/env.client.type.js +0 -34
  53. package/templates/app/env/env.server.js +0 -37
  54. package/templates/app/jest.config.js +0 -35
  55. package/templates/app/lib/___appName__/__appName__.dictionary.js +0 -30
  56. package/templates/app/lib/___appName__/__appName__.service.js +0 -41
  57. package/templates/app/lib/___appName__/__appName__.store.js +0 -35
  58. package/templates/app/lib/___appName__/_server.js +0 -33
  59. package/templates/app/lib/option.js +0 -41
  60. package/templates/app/lib/setting/Setting.Template.js +0 -53
  61. package/templates/app/lib/setting/Setting.Unit.js +0 -34
  62. package/templates/app/lib/setting/Setting.Util.js +0 -30
  63. package/templates/app/lib/setting/Setting.View.js +0 -47
  64. package/templates/app/lib/setting/Setting.Zone.js +0 -76
  65. package/templates/app/lib/setting/_server.js +0 -47
  66. package/templates/app/lib/setting/index.js +0 -57
  67. package/templates/app/lib/setting/setting.constant.js +0 -45
  68. package/templates/app/lib/setting/setting.dictionary.js +0 -45
  69. package/templates/app/lib/setting/setting.document.js +0 -47
  70. package/templates/app/lib/setting/setting.service.js +0 -36
  71. package/templates/app/lib/setting/setting.signal.js +0 -33
  72. package/templates/app/lib/setting/setting.store.js +0 -40
  73. package/templates/app/lib/summary/Summary.Template.js +0 -39
  74. package/templates/app/lib/summary/Summary.Unit.js +0 -34
  75. package/templates/app/lib/summary/Summary.Util.js +0 -29
  76. package/templates/app/lib/summary/Summary.View.js +0 -47
  77. package/templates/app/lib/summary/Summary.Zone.js +0 -58
  78. package/templates/app/lib/summary/_server.js +0 -47
  79. package/templates/app/lib/summary/index.js +0 -63
  80. package/templates/app/lib/summary/summary.constant.js +0 -43
  81. package/templates/app/lib/summary/summary.dictionary.js +0 -48
  82. package/templates/app/lib/summary/summary.document.js +0 -47
  83. package/templates/app/lib/summary/summary.service.js +0 -33
  84. package/templates/app/lib/summary/summary.signal.js +0 -33
  85. package/templates/app/lib/summary/summary.store.js +0 -40
  86. package/templates/app/lib/user/User.Template.js +0 -61
  87. package/templates/app/lib/user/User.Unit.js +0 -34
  88. package/templates/app/lib/user/User.Util.js +0 -90
  89. package/templates/app/lib/user/User.View.js +0 -62
  90. package/templates/app/lib/user/User.Zone.js +0 -70
  91. package/templates/app/lib/user/_server.js +0 -47
  92. package/templates/app/lib/user/index.js +0 -57
  93. package/templates/app/lib/user/user.constant.js +0 -66
  94. package/templates/app/lib/user/user.dictionary.js +0 -51
  95. package/templates/app/lib/user/user.document.js +0 -53
  96. package/templates/app/lib/user/user.service.js +0 -41
  97. package/templates/app/lib/user/user.signal.js +0 -33
  98. package/templates/app/lib/user/user.signal.spec.js +0 -36
  99. package/templates/app/lib/user/user.signal.test.js +0 -38
  100. package/templates/app/lib/user/user.store.js +0 -38
  101. package/templates/app/main.js +0 -39
  102. package/templates/app/middleware.js +0 -34
  103. package/templates/app/nest/backendLogic.js +0 -33
  104. package/templates/app/nest/index.js +0 -28
  105. package/templates/app/next/frontendLogic.js +0 -33
  106. package/templates/app/next/index.js +0 -28
  107. package/templates/app/page.test.ts.template +0 -10
  108. package/templates/app/playwright.config.ts.template +0 -6
  109. package/templates/app/postcss.config.js.template +0 -10
  110. package/templates/app/public/favicon.ico +0 -0
  111. package/templates/app/public/icons/icon-128x128.png +0 -0
  112. package/templates/app/public/icons/icon-144x144.png +0 -0
  113. package/templates/app/public/icons/icon-152x152.png +0 -0
  114. package/templates/app/public/icons/icon-192x192.png +0 -0
  115. package/templates/app/public/icons/icon-256x256.png +0 -0
  116. package/templates/app/public/icons/icon-384x384.png +0 -0
  117. package/templates/app/public/icons/icon-48x48.png +0 -0
  118. package/templates/app/public/icons/icon-512x512.png +0 -0
  119. package/templates/app/public/icons/icon-72x72.png +0 -0
  120. package/templates/app/public/icons/icon-96x96.png +0 -0
  121. package/templates/app/public/logo.svg +0 -70
  122. package/templates/app/public/manifest.json.template +0 -67
  123. package/templates/app/tsconfig.json.template +0 -22
  124. package/templates/app/tsconfig.spec.json.template +0 -7
  125. package/templates/app/ui/Footer.js +0 -63
  126. package/templates/app/ui/MainHeader.js +0 -127
  127. package/templates/app/ui/index.js +0 -29
  128. package/templates/client.js +0 -41
  129. package/templates/crudPages/[__model__Id]/edit/page.js +0 -69
  130. package/templates/crudPages/[__model__Id]/page.js +0 -79
  131. package/templates/crudPages/new/page.js +0 -66
  132. package/templates/crudPages/page.js +0 -67
  133. package/templates/index.js +0 -30
  134. package/templates/lib/__lib/extends/summary.constant.js +0 -42
  135. package/templates/lib/__lib/lib.constant.js +0 -52
  136. package/templates/lib/__lib/lib.dictionary.js +0 -41
  137. package/templates/lib/__lib/lib.document.js +0 -40
  138. package/templates/lib/__lib/lib.service.js +0 -82
  139. package/templates/lib/__lib/lib.signal.js +0 -35
  140. package/templates/lib/__lib/lib.store.js +0 -33
  141. package/templates/lib/__scalar/_server.js +0 -38
  142. package/templates/lib/cnst.js +0 -31
  143. package/templates/lib/cnst_.js +0 -50
  144. package/templates/lib/db.js +0 -52
  145. package/templates/lib/dict.js +0 -44
  146. package/templates/lib/fetch.js +0 -47
  147. package/templates/lib/sig.js +0 -36
  148. package/templates/lib/srv.js +0 -51
  149. package/templates/lib/st.js +0 -35
  150. package/templates/lib/store.js +0 -51
  151. package/templates/lib/usePage.js +0 -32
  152. package/templates/libRoot/.gitignore.template +0 -15
  153. package/templates/libRoot/jest.config.js +0 -35
  154. package/templates/libRoot/package.json.template +0 -5
  155. package/templates/libRoot/tsconfig.json.template +0 -11
  156. package/templates/libRoot/tsconfig.spec.json.template +0 -7
  157. package/templates/module/__Model__.Template.js +0 -50
  158. package/templates/module/__Model__.Unit.js +0 -38
  159. package/templates/module/__Model__.Util.js +0 -66
  160. package/templates/module/__Model__.View.js +0 -44
  161. package/templates/module/__Model__.Zone.js +0 -79
  162. package/templates/module/__model__.constant.js +0 -68
  163. package/templates/module/__model__.dictionary.js +0 -97
  164. package/templates/module/__model__.document.js +0 -52
  165. package/templates/module/__model__.service.js +0 -40
  166. package/templates/module/__model__.signal.js +0 -59
  167. package/templates/module/__model__.signal.spec.js +0 -38
  168. package/templates/module/__model__.signal.test.js +0 -47
  169. package/templates/module/__model__.store.js +0 -38
  170. package/templates/module/_server.js +0 -46
  171. package/templates/module/index.js +0 -57
  172. package/templates/pkgRoot/tsconfig.json.template +0 -12
  173. package/templates/server.js +0 -58
  174. package/templates/workplaceRoot/.env.template +0 -20
  175. package/templates/workplaceRoot/.gitignore.template +0 -195
  176. package/templates/workplaceRoot/.prettierignore.template +0 -10
  177. package/templates/workplaceRoot/.prettierrc.json.template +0 -5
  178. package/templates/workplaceRoot/.swcrc.template +0 -9
  179. package/templates/workplaceRoot/README.md.template +0 -37
  180. package/templates/workplaceRoot/eslint.config.js.template +0 -141
  181. package/templates/workplaceRoot/tsconfig.json.template +0 -29
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/index.js CHANGED
@@ -1232,11 +1232,11 @@ CMD ["npm", "start"]`,
1232
1232
  this.logger.verbose(`File ${writePath} is unchanged`);
1233
1233
  else {
1234
1234
  import_fs7.default.writeFileSync(writePath, contentStr, "utf8");
1235
- this.logger.log(`File ${writePath} is changed`);
1235
+ this.logger.debug(`File ${writePath} is changed`);
1236
1236
  }
1237
1237
  } else {
1238
1238
  import_fs7.default.writeFileSync(writePath, contentStr, "utf8");
1239
- this.logger.log(`File ${writePath} is created`);
1239
+ this.logger.debug(`File ${writePath} is created`);
1240
1240
  }
1241
1241
  return this;
1242
1242
  }
@@ -1313,7 +1313,7 @@ CMD ["npm", "start"]`,
1313
1313
  scanResult,
1314
1314
  dict = {}
1315
1315
  }) {
1316
- const templatePath = `${__dirname}/templates${template ? `/${template}` : ""}`.replace(".ts", ".js");
1316
+ const templatePath = `${__dirname}/src/templates${template ? `/${template}` : ""}`.replace(".ts", ".js");
1317
1317
  if (import_fs7.default.statSync(templatePath).isFile()) {
1318
1318
  const filename = import_path3.default.basename(templatePath);
1319
1319
  await this.#applyTemplateFile({ templatePath, targetPath: import_path3.default.join(basePath2, filename), scanResult }, dict);
@@ -2249,10 +2249,10 @@ CMD ["npm", "start"]`,
2249
2249
  }
2250
2250
  });
2251
2251
 
2252
- // pkgs/@akanjs/cli/library/library.runner.ts
2252
+ // pkgs/@akanjs/cli/src/library/library.runner.ts
2253
2253
  var LibraryRunner;
2254
2254
  var init_library_runner = __esm({
2255
- "pkgs/@akanjs/cli/library/library.runner.ts"() {
2255
+ "pkgs/@akanjs/cli/src/library/library.runner.ts"() {
2256
2256
  LibraryRunner = class {
2257
2257
  async scanSync(lib) {
2258
2258
  const akanConfig = await lib.getConfig();
@@ -2263,10 +2263,10 @@ CMD ["npm", "start"]`,
2263
2263
  }
2264
2264
  });
2265
2265
 
2266
- // pkgs/@akanjs/cli/library/library.script.ts
2266
+ // pkgs/@akanjs/cli/src/library/library.script.ts
2267
2267
  var LibraryScript;
2268
2268
  var init_library_script = __esm({
2269
- "pkgs/@akanjs/cli/library/library.script.ts"() {
2269
+ "pkgs/@akanjs/cli/src/library/library.script.ts"() {
2270
2270
  init_devkit();
2271
2271
  init_library_runner();
2272
2272
  LibraryScript = class {
@@ -2286,10 +2286,10 @@ CMD ["npm", "start"]`,
2286
2286
  }
2287
2287
  });
2288
2288
 
2289
- // pkgs/@akanjs/cli/module/module.prompt.ts
2289
+ // pkgs/@akanjs/cli/src/module/module.prompt.ts
2290
2290
  var frameworkDescription, requestModule, frameworkAbstract, scalarConstantDescription, howToSetFieldInModelConstant, requestScalarConstant;
2291
2291
  var init_module_prompt = __esm({
2292
- "pkgs/@akanjs/cli/module/module.prompt.ts"() {
2292
+ "pkgs/@akanjs/cli/src/module/module.prompt.ts"() {
2293
2293
  frameworkDescription = `\uB098\uB294 \uC880 \uB354 \uD6A8\uC728\uC801\uC73C\uB85C \uCF54\uB529\uC744 \uD558\uAE30 \uC704\uD574\uC11C \uC790\uCCB4 \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uC81C\uC791\uD588\uC5B4. \uADF8\uB798\uC11C \uC6B0\uB9AC \uD504\uB808\uC784\uC6CC\uD06C\uC5D0 \uB300\uD55C \uC124\uBA85\uC744 \uD574\uC904\uD14C\uB2C8\uAE4C \uC798 \uC774\uD574\uD558\uB3C4\uB85D \uD574. \uC6B0\uB9AC \uD504\uB808\uC784\uC6CC\uD06C\uB294 next.js 13\uACFC nest.js, capacitor.js, nx, mongoDB \uAE30\uBC18\uC758 \uD504\uB860\uD2B8\uC5D4\uB4DC, \uC571, \uBC31\uC5D4\uB4DC \uD1B5\uD569 \uD504\uB808\uC784\uC6CC\uD06C\uC57C. \uADF8\uB798\uC11C \uBC31\uC5D4\uB4DC, \uD504\uB860\uD2B8\uC5D4\uB4DC, DB Schema\uC5D0 \uB300\uD55C \uCF54\uB4DC\uAC00 \uBAA8\uB450 \uD55C \uD3F4\uB354 \uC548\uC5D0 \uC788\uC5B4. \uADF8\uB798\uC11C \uC790\uBC14\uC2A4\uD06C\uB9BD\uD2B8, \uD0C0\uC785\uC2A4\uD06C\uB9BD\uD2B8, \uADF8\uB9AC\uACE0 \uD504\uB808\uC784\uC6CC\uD06C\uC5D0 \uB300\uD55C \uC774\uD574\uB9CC \uC788\uB2E4\uBA74 \uAD6C\uBD84\uC9D3\uC9C0 \uC54A\uACE0 \uC0AC\uC6A9\uD560 \uC218 \uC788\uB2E4\uB294 \uC7A5\uC810\uC774 \uC788\uC5B4.
2294
2294
 
2295
2295
  \uAC00\uC7A5 \uC678\uBD80\uC758 \uAD6C\uC870\uB294
@@ -3355,10 +3355,10 @@ ${boilerplate}
3355
3355
  }
3356
3356
  });
3357
3357
 
3358
- // pkgs/@akanjs/cli/application/application.prompt.ts
3358
+ // pkgs/@akanjs/cli/src/application/application.prompt.ts
3359
3359
  var requestApplication;
3360
3360
  var init_application_prompt = __esm({
3361
- "pkgs/@akanjs/cli/application/application.prompt.ts"() {
3361
+ "pkgs/@akanjs/cli/src/application/application.prompt.ts"() {
3362
3362
  init_module_prompt();
3363
3363
  requestApplication = () => `${frameworkDescription}
3364
3364
  \uC9C0\uAE08\uBD80\uD130 \uB108\uC758 \uC5ED\uD560\uC740 \uCEEC\uB7EC \uB514\uC790\uC774\uB108\uC57C.
@@ -3393,10 +3393,10 @@ page.tsx_end
3393
3393
  }
3394
3394
  });
3395
3395
 
3396
- // pkgs/@akanjs/cli/application/application.runner.ts
3396
+ // pkgs/@akanjs/cli/src/application/application.runner.ts
3397
3397
  var import_prompts4, import_output_parsers, import_prompts5, import_runnables2, import_openai2, import_plugin_react, import_dotenv, esbuild, import_fs10, import_promises2, import_js_yaml2, import_ora2, import_path4, vite, import_vite_plugin_node_polyfills, import_vite_tsconfig_paths, ApplicationRunner;
3398
3398
  var init_application_runner = __esm({
3399
- "pkgs/@akanjs/cli/application/application.runner.ts"() {
3399
+ "pkgs/@akanjs/cli/src/application/application.runner.ts"() {
3400
3400
  init_src();
3401
3401
  init_config();
3402
3402
  init_devkit();
@@ -3871,10 +3871,10 @@ page.tsx_end
3871
3871
  }
3872
3872
  });
3873
3873
 
3874
- // pkgs/@akanjs/cli/application/application.script.ts
3874
+ // pkgs/@akanjs/cli/src/application/application.script.ts
3875
3875
  var ApplicationScript;
3876
3876
  var init_application_script = __esm({
3877
- "pkgs/@akanjs/cli/application/application.script.ts"() {
3877
+ "pkgs/@akanjs/cli/src/application/application.script.ts"() {
3878
3878
  init_devkit();
3879
3879
  init_library_script();
3880
3880
  init_application_runner();
@@ -3968,10 +3968,10 @@ page.tsx_end
3968
3968
  }
3969
3969
  });
3970
3970
 
3971
- // pkgs/@akanjs/cli/application/application.command.ts
3971
+ // pkgs/@akanjs/cli/src/application/application.command.ts
3972
3972
  var ApplicationCommand;
3973
3973
  var init_application_command = __esm({
3974
- "pkgs/@akanjs/cli/application/application.command.ts"() {
3974
+ "pkgs/@akanjs/cli/src/application/application.command.ts"() {
3975
3975
  init_devkit();
3976
3976
  init_application_script();
3977
3977
  ApplicationCommand = class {
@@ -4154,12 +4154,14 @@ page.tsx_end
4154
4154
  }
4155
4155
  });
4156
4156
 
4157
- // pkgs/@akanjs/cli/package/package.runner.ts
4158
- var esbuild2, import_lodash, PackageRunner;
4157
+ // pkgs/@akanjs/cli/src/package/package.runner.ts
4158
+ var esbuild2, import_esbuild_plugin_d, import_promises3, import_lodash, PackageRunner;
4159
4159
  var init_package_runner = __esm({
4160
- "pkgs/@akanjs/cli/package/package.runner.ts"() {
4160
+ "pkgs/@akanjs/cli/src/package/package.runner.ts"() {
4161
4161
  init_devkit();
4162
4162
  esbuild2 = __toESM(__require("esbuild"));
4163
+ import_esbuild_plugin_d = __require("esbuild-plugin-d.ts");
4164
+ import_promises3 = __toESM(__require("fs/promises"));
4163
4165
  import_lodash = __require("lodash");
4164
4166
  PackageRunner = class {
4165
4167
  async createPackage(workspace, pkgName) {
@@ -4176,15 +4178,29 @@ page.tsx_end
4176
4178
  async buildPackage(pkg, distPkg) {
4177
4179
  const rootPackageJson = pkg.workspace.readJson("package.json");
4178
4180
  await pkg.workspace.exec(`rm -rf dist/${pkg.name}`);
4179
- await esbuild2.build({
4180
- write: true,
4181
- entryPoints: [`${pkg.cwdPath}/index.ts`],
4182
- bundle: true,
4183
- packages: "external",
4184
- // platform: "node",
4185
- outdir: distPkg.cwdPath,
4186
- logLevel: "warning"
4187
- });
4181
+ await import_promises3.default.rm(`dist/pkgs/${pkg.name}`, { force: true, recursive: true });
4182
+ if (pkg.name === "@akanjs/config") {
4183
+ await esbuild2.build({
4184
+ write: true,
4185
+ entryPoints: [`${pkg.cwdPath}/index.ts`],
4186
+ bundle: true,
4187
+ packages: "external",
4188
+ outdir: distPkg.cwdPath,
4189
+ logLevel: "warning",
4190
+ plugins: [(0, import_esbuild_plugin_d.dtsPlugin)({ tsconfig: `${pkg.cwdPath}/tsconfig.json` })]
4191
+ });
4192
+ await pkg.workspace.exec(`rsync -av ${pkg.cwdPath}/src/ ${distPkg.cwdPath}/src/`);
4193
+ } else {
4194
+ await esbuild2.build({
4195
+ write: true,
4196
+ entryPoints: [`${pkg.cwdPath}/index.ts`],
4197
+ bundle: true,
4198
+ packages: "external",
4199
+ outdir: distPkg.cwdPath,
4200
+ logLevel: "warning",
4201
+ plugins: [(0, import_esbuild_plugin_d.dtsPlugin)({ tsconfig: `${pkg.cwdPath}/tsconfig.json` })]
4202
+ });
4203
+ }
4188
4204
  const pkgJson = pkg.readJson("package.json");
4189
4205
  const dependencies = extractDependencies(`${distPkg.cwdPath}/index.js`, rootPackageJson);
4190
4206
  const pkgPackageJson = { ...pkgJson, main: "./index.js", engines: { node: ">=22" }, dependencies };
@@ -4194,10 +4210,10 @@ page.tsx_end
4194
4210
  }
4195
4211
  });
4196
4212
 
4197
- // pkgs/@akanjs/cli/package/package.script.ts
4213
+ // pkgs/@akanjs/cli/src/package/package.script.ts
4198
4214
  var PackageScript;
4199
4215
  var init_package_script = __esm({
4200
- "pkgs/@akanjs/cli/package/package.script.ts"() {
4216
+ "pkgs/@akanjs/cli/src/package/package.script.ts"() {
4201
4217
  init_devkit();
4202
4218
  init_package_runner();
4203
4219
  PackageScript = class {
@@ -4216,10 +4232,10 @@ page.tsx_end
4216
4232
  }
4217
4233
  });
4218
4234
 
4219
- // pkgs/@akanjs/cli/cloud/cloud.runner.ts
4235
+ // pkgs/@akanjs/cli/src/cloud/cloud.runner.ts
4220
4236
  var import_prompts6, import_chalk, import_latest_version, import_open, QRcode, import_uuid, CloudRunner;
4221
4237
  var init_cloud_runner = __esm({
4222
- "pkgs/@akanjs/cli/cloud/cloud.runner.ts"() {
4238
+ "pkgs/@akanjs/cli/src/cloud/cloud.runner.ts"() {
4223
4239
  init_src();
4224
4240
  init_devkit();
4225
4241
  import_prompts6 = __require("@inquirer/prompts");
@@ -4345,10 +4361,10 @@ ${import_chalk.default.green("\u27A4")} Authentication Required`));
4345
4361
  }
4346
4362
  });
4347
4363
 
4348
- // pkgs/@akanjs/cli/cloud/cloud.script.ts
4364
+ // pkgs/@akanjs/cli/src/cloud/cloud.script.ts
4349
4365
  var CloudScript;
4350
4366
  var init_cloud_script = __esm({
4351
- "pkgs/@akanjs/cli/cloud/cloud.script.ts"() {
4367
+ "pkgs/@akanjs/cli/src/cloud/cloud.script.ts"() {
4352
4368
  init_devkit();
4353
4369
  init_package_script();
4354
4370
  init_cloud_runner();
@@ -4372,10 +4388,10 @@ ${import_chalk.default.green("\u27A4")} Authentication Required`));
4372
4388
  }
4373
4389
  });
4374
4390
 
4375
- // pkgs/@akanjs/cli/cloud/cloud.command.ts
4391
+ // pkgs/@akanjs/cli/src/cloud/cloud.command.ts
4376
4392
  var CloudCommand;
4377
4393
  var init_cloud_command = __esm({
4378
- "pkgs/@akanjs/cli/cloud/cloud.command.ts"() {
4394
+ "pkgs/@akanjs/cli/src/cloud/cloud.command.ts"() {
4379
4395
  init_devkit();
4380
4396
  init_cloud_script();
4381
4397
  CloudCommand = class {
@@ -4406,10 +4422,10 @@ ${import_chalk.default.green("\u27A4")} Authentication Required`));
4406
4422
  }
4407
4423
  });
4408
4424
 
4409
- // pkgs/@akanjs/cli/library/library.command.ts
4425
+ // pkgs/@akanjs/cli/src/library/library.command.ts
4410
4426
  var LibraryCommand;
4411
4427
  var init_library_command = __esm({
4412
- "pkgs/@akanjs/cli/library/library.command.ts"() {
4428
+ "pkgs/@akanjs/cli/src/library/library.command.ts"() {
4413
4429
  init_devkit();
4414
4430
  LibraryCommand = class {
4415
4431
  async createLibrary(name, workspace) {
@@ -4451,10 +4467,10 @@ ${import_chalk.default.green("\u27A4")} Authentication Required`));
4451
4467
  }
4452
4468
  });
4453
4469
 
4454
- // pkgs/@akanjs/cli/module/module.runner.ts
4470
+ // pkgs/@akanjs/cli/src/module/module.runner.ts
4455
4471
  var import_output_parsers2, import_prompts7, import_runnables3, import_openai3, import_fs11, import_lodash2, ModuleRunner;
4456
4472
  var init_module_runner = __esm({
4457
- "pkgs/@akanjs/cli/module/module.runner.ts"() {
4473
+ "pkgs/@akanjs/cli/src/module/module.runner.ts"() {
4458
4474
  init_devkit();
4459
4475
  import_output_parsers2 = __require("@langchain/core/output_parsers");
4460
4476
  import_prompts7 = __require("@langchain/core/prompts");
@@ -4596,10 +4612,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4596
4612
  }
4597
4613
  });
4598
4614
 
4599
- // pkgs/@akanjs/cli/module/module.script.ts
4615
+ // pkgs/@akanjs/cli/src/module/module.script.ts
4600
4616
  var import_prompts8, ModuleScript;
4601
4617
  var init_module_script = __esm({
4602
- "pkgs/@akanjs/cli/module/module.script.ts"() {
4618
+ "pkgs/@akanjs/cli/src/module/module.script.ts"() {
4603
4619
  init_src();
4604
4620
  init_devkit();
4605
4621
  import_prompts8 = __require("@inquirer/prompts");
@@ -4671,10 +4687,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4671
4687
  }
4672
4688
  });
4673
4689
 
4674
- // pkgs/@akanjs/cli/module/module.command.ts
4690
+ // pkgs/@akanjs/cli/src/module/module.command.ts
4675
4691
  var ModuleCommand;
4676
4692
  var init_module_command = __esm({
4677
- "pkgs/@akanjs/cli/module/module.command.ts"() {
4693
+ "pkgs/@akanjs/cli/src/module/module.command.ts"() {
4678
4694
  init_devkit();
4679
4695
  init_module_script();
4680
4696
  ModuleCommand = class {
@@ -4744,10 +4760,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4744
4760
  }
4745
4761
  });
4746
4762
 
4747
- // pkgs/@akanjs/cli/package/package.command.ts
4763
+ // pkgs/@akanjs/cli/src/package/package.command.ts
4748
4764
  var PackageCommand;
4749
4765
  var init_package_command = __esm({
4750
- "pkgs/@akanjs/cli/package/package.command.ts"() {
4766
+ "pkgs/@akanjs/cli/src/package/package.command.ts"() {
4751
4767
  init_devkit();
4752
4768
  init_package_script();
4753
4769
  PackageCommand = class {
@@ -4788,10 +4804,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4788
4804
  }
4789
4805
  });
4790
4806
 
4791
- // pkgs/@akanjs/cli/package/page/page.runner.ts
4807
+ // pkgs/@akanjs/cli/src/package/page/page.runner.ts
4792
4808
  var PageRunner;
4793
4809
  var init_page_runner = __esm({
4794
- "pkgs/@akanjs/cli/package/page/page.runner.ts"() {
4810
+ "pkgs/@akanjs/cli/src/package/page/page.runner.ts"() {
4795
4811
  PageRunner = class {
4796
4812
  async createPage(app, name) {
4797
4813
  }
@@ -4799,10 +4815,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4799
4815
  }
4800
4816
  });
4801
4817
 
4802
- // pkgs/@akanjs/cli/package/page/page.script.ts
4818
+ // pkgs/@akanjs/cli/src/package/page/page.script.ts
4803
4819
  var PageScript;
4804
4820
  var init_page_script = __esm({
4805
- "pkgs/@akanjs/cli/package/page/page.script.ts"() {
4821
+ "pkgs/@akanjs/cli/src/package/page/page.script.ts"() {
4806
4822
  init_page_runner();
4807
4823
  PageScript = class {
4808
4824
  #runner = new PageRunner();
@@ -4813,10 +4829,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4813
4829
  }
4814
4830
  });
4815
4831
 
4816
- // pkgs/@akanjs/cli/package/page/page.command.ts
4832
+ // pkgs/@akanjs/cli/src/package/page/page.command.ts
4817
4833
  var PageCommand;
4818
4834
  var init_page_command = __esm({
4819
- "pkgs/@akanjs/cli/package/page/page.command.ts"() {
4835
+ "pkgs/@akanjs/cli/src/package/page/page.command.ts"() {
4820
4836
  init_devkit();
4821
4837
  init_page_script();
4822
4838
  PageCommand = class {
@@ -4835,10 +4851,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4835
4851
  }
4836
4852
  });
4837
4853
 
4838
- // pkgs/@akanjs/cli/workspace/workspace.runner.ts
4854
+ // pkgs/@akanjs/cli/src/workspace/workspace.runner.ts
4839
4855
  var import_uuid2, WorkspaceRunner;
4840
4856
  var init_workspace_runner = __esm({
4841
- "pkgs/@akanjs/cli/workspace/workspace.runner.ts"() {
4857
+ "pkgs/@akanjs/cli/src/workspace/workspace.runner.ts"() {
4842
4858
  init_devkit();
4843
4859
  import_uuid2 = __require("uuid");
4844
4860
  WorkspaceRunner = class {
@@ -4891,10 +4907,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4891
4907
  }
4892
4908
  });
4893
4909
 
4894
- // pkgs/@akanjs/cli/workspace/workspace.script.ts
4910
+ // pkgs/@akanjs/cli/src/workspace/workspace.script.ts
4895
4911
  var import_latest_version2, import_path5, WorkspaceScript;
4896
4912
  var init_workspace_script = __esm({
4897
- "pkgs/@akanjs/cli/workspace/workspace.script.ts"() {
4913
+ "pkgs/@akanjs/cli/src/workspace/workspace.script.ts"() {
4898
4914
  init_src();
4899
4915
  init_devkit();
4900
4916
  import_latest_version2 = __toESM(__require("latest-version"));
@@ -4961,10 +4977,10 @@ ${names.Model}.Unit.Card\uC758 \uB9AC\uC561\uD2B8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C
4961
4977
  }
4962
4978
  });
4963
4979
 
4964
- // pkgs/@akanjs/cli/workspace/workspace.command.ts
4980
+ // pkgs/@akanjs/cli/src/workspace/workspace.command.ts
4965
4981
  var WorkspaceCommand;
4966
4982
  var init_workspace_command = __esm({
4967
- "pkgs/@akanjs/cli/workspace/workspace.command.ts"() {
4983
+ "pkgs/@akanjs/cli/src/workspace/workspace.command.ts"() {
4968
4984
  init_devkit();
4969
4985
  init_workspace_script();
4970
4986
  WorkspaceCommand = class {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "@akanjs/cli",
4
- "version": "0.0.39",
4
+ "version": "0.0.41",
5
5
  "bin": {
6
6
  "akan": "index.js"
7
7
  },
@@ -31,6 +31,7 @@
31
31
  "dayjs": "^1.11.13",
32
32
  "dotenv": "^16.4.7",
33
33
  "esbuild": "^0.19.2",
34
+ "esbuild-plugin-d.ts": "^1.3.1",
34
35
  "form-data": "^4.0.1",
35
36
  "js-yaml": "^4.1.0",
36
37
  "latest-version": "^9.0.0",
@@ -0,0 +1,26 @@
1
+ import { App, Workspace } from "@akanjs/devkit";
2
+ import { ApplicationScript } from "./application.script";
3
+ export declare class ApplicationCommand {
4
+ applicationScript: ApplicationScript;
5
+ createApplication(name: string, workspace: Workspace): Promise<void>;
6
+ removeApplication(app: App, workspace: Workspace): Promise<void>;
7
+ scanApplication(app: App): Promise<void>;
8
+ build(app: App): Promise<void>;
9
+ buildBackend(app: App): Promise<void>;
10
+ buildFrontend(app: App): Promise<void>;
11
+ buildCsr(app: App): Promise<void>;
12
+ buildIos(app: App): Promise<void>;
13
+ buildAndroid(app: App): Promise<void>;
14
+ serve(app: App): Promise<void>;
15
+ serveBackend(app: App): Promise<void>;
16
+ serveFrontend(app: App): Promise<void>;
17
+ serveCsr(app: App): Promise<void>;
18
+ serveIos(app: App, open: boolean, release: boolean): Promise<void>;
19
+ serveAndroid(app: App, open: boolean, release: boolean): Promise<void>;
20
+ releaseIos(app: App): Promise<void>;
21
+ releaseAndroid(app: App): Promise<void>;
22
+ releaseSource(app: App, rebuild: boolean, buildNum: number, environment: string, local: boolean): Promise<void>;
23
+ dumpDatabase(app: App, environment: string): Promise<void>;
24
+ restoreDatabase(app: App, source: string, target: string): Promise<void>;
25
+ configureApp(app: App): Promise<void>;
26
+ }
@@ -0,0 +1,2 @@
1
+ export declare const requestApplication: () => string;
2
+ export declare const indexPagePrompt = "\uB0B4\uAC00 \uC0AC\uC804\uC5D0 \uC124\uBA85\uD55C index \uD398\uC774\uC9C0 \uD15C\uD50C\uB9BF\uC744 \uC55E\uC11C \uC124\uBA85\uD55C \uD504\uB85C\uC81D\uD2B8\uBA85\uACFC \uD504\uB85C\uC81D\uD2B8 \uC124\uBA85\uC5D0 \uB9DE\uAC8C\uB054 \uB9CC\uB4E4\uC5B4\uC918.";
@@ -0,0 +1,35 @@
1
+ import { App, DistAppExecutor, type Workspace } from "@akanjs/devkit";
2
+ export interface ReleaseSourceOptions {
3
+ rebuild?: boolean;
4
+ buildNum?: number;
5
+ environment?: string;
6
+ local?: boolean;
7
+ }
8
+ export declare class ApplicationRunner {
9
+ #private;
10
+ scanSync(app: App): Promise<import("@akanjs/config").AppScanResult | import("@akanjs/config").LibScanResult>;
11
+ buildBackend(app: App, distApp: DistAppExecutor): Promise<void>;
12
+ serveBackend(app: App, distApp: DistAppExecutor): Promise<void>;
13
+ buildFrontend(app: App, distApp: DistAppExecutor): Promise<void>;
14
+ serveFrontend(app: App, distApp: DistAppExecutor): Promise<void>;
15
+ buildCsr(app: App, distApp: DistAppExecutor): Promise<void>;
16
+ serveCsr(app: App, distApp: DistAppExecutor): Promise<void>;
17
+ buildIos(app: App): Promise<void>;
18
+ serveIos(app: App, { open, operation }?: {
19
+ open?: boolean;
20
+ operation?: "local" | "release";
21
+ }): Promise<void>;
22
+ releaseIos(app: App): Promise<void>;
23
+ buildAndroid(app: App): Promise<void>;
24
+ serveAndroid(app: App, { open, operation }?: {
25
+ open?: boolean;
26
+ operation?: "local" | "release";
27
+ }): Promise<void>;
28
+ releaseAndroid(app: App): Promise<void>;
29
+ dumpDatabase(app: App, environment: string): Promise<void>;
30
+ restoreDatabase(app: App, source: string, target: string): Promise<void>;
31
+ configureApp(app: App): Promise<void>;
32
+ releaseSource(app: App, { rebuild, buildNum, environment, local }?: ReleaseSourceOptions): Promise<void>;
33
+ createApplicationTemplate(workspace: Workspace, appName: string): Promise<void>;
34
+ generateApplicationTemplate(app: App): Promise<void>;
35
+ }
@@ -0,0 +1,36 @@
1
+ import type { App } from "@akanjs/devkit";
2
+ import { DistAppExecutor } from "@akanjs/devkit";
3
+ import { LibraryScript } from "../library/library.script";
4
+ import { type ReleaseSourceOptions } from "./application.runner";
5
+ export declare class ApplicationScript {
6
+ #private;
7
+ libraryScript: LibraryScript;
8
+ scanApplication(app: App): Promise<void>;
9
+ syncApplication(app: App, { recursive }?: {
10
+ recursive?: boolean;
11
+ }): Promise<void>;
12
+ build(app: App, distApp?: DistAppExecutor): Promise<void>;
13
+ serve(app: App, distApp?: DistAppExecutor): Promise<void>;
14
+ buildBackend(app: App, distApp?: DistAppExecutor): Promise<void>;
15
+ serveBackend(app: App, distApp?: DistAppExecutor): Promise<void>;
16
+ buildFrontend(app: App, distApp?: DistAppExecutor): Promise<void>;
17
+ serveFrontend(app: App, distApp?: DistAppExecutor): Promise<void>;
18
+ buildCsr(app: App, distApp?: DistAppExecutor): Promise<void>;
19
+ serveCsr(app: App, distApp?: DistAppExecutor): Promise<void>;
20
+ buildIos(app: App): Promise<void>;
21
+ serveIos(app: App, { open, operation }?: {
22
+ open?: boolean;
23
+ operation?: "local" | "release";
24
+ }): Promise<void>;
25
+ releaseIos(app: App): Promise<void>;
26
+ buildAndroid(app: App): Promise<void>;
27
+ serveAndroid(app: App, { open, operation }?: {
28
+ open?: boolean;
29
+ operation?: "local" | "release";
30
+ }): Promise<void>;
31
+ releaseAndroid(app: App): Promise<void>;
32
+ dumpDatabase(app: App, environment: string): Promise<void>;
33
+ restoreDatabase(app: App, source: string, target: string): Promise<void>;
34
+ configureApp(app: App): Promise<void>;
35
+ releaseSource(app: App, options: ReleaseSourceOptions): Promise<void>;
36
+ }
@@ -0,0 +1,8 @@
1
+ import { Workspace } from "@akanjs/devkit";
2
+ import { CloudScript } from "./cloud.script";
3
+ export declare class CloudCommand {
4
+ cloudScript: CloudScript;
5
+ login(): Promise<void>;
6
+ logout(): void;
7
+ deployAkan(workspace: Workspace): Promise<void>;
8
+ }
@@ -0,0 +1,7 @@
1
+ import { type Workspace } from "@akanjs/devkit";
2
+ export declare class CloudRunner {
3
+ login(): Promise<boolean>;
4
+ logout(): void;
5
+ getAkanPkgs(workspace: Workspace): Promise<string[]>;
6
+ deployAkan(workspace: Workspace, akanPkgs: string[]): Promise<void>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { type Workspace } from "@akanjs/devkit";
2
+ export declare class CloudScript {
3
+ #private;
4
+ login(): Promise<void>;
5
+ logout(): void;
6
+ deployAkan(workspace: Workspace): Promise<void>;
7
+ }
@@ -0,0 +1,8 @@
1
+ import { Lib, Workspace } from "@akanjs/devkit";
2
+ export declare class LibraryCommand {
3
+ createLibrary(name: string, workspace: Workspace): Promise<void>;
4
+ removeLibrary(lib: Lib, workspace: Workspace): Promise<void>;
5
+ scanLibrary(lib: Lib): Promise<void>;
6
+ buildLibrary(lib: Lib): Promise<void>;
7
+ pushLibrary(lib: Lib): Promise<void>;
8
+ }
@@ -0,0 +1,4 @@
1
+ import { Lib } from "@akanjs/devkit";
2
+ export declare class LibraryRunner {
3
+ scanSync(lib: Lib): Promise<import("@akanjs/config").AppScanResult | import("@akanjs/config").LibScanResult>;
4
+ }
@@ -0,0 +1,8 @@
1
+ import type { Lib } from "@akanjs/devkit";
2
+ export declare class LibraryScript {
3
+ #private;
4
+ scanLibrary(lib: Lib): Promise<void>;
5
+ syncLibrary(lib: Lib, { recursive }?: {
6
+ recursive?: boolean;
7
+ }): Promise<void>;
8
+ }
@@ -0,0 +1,13 @@
1
+ import { Sys, Workspace } from "@akanjs/devkit";
2
+ import { ModuleScript } from "./module.script";
3
+ export declare class ModuleCommand {
4
+ moduleScript: ModuleScript;
5
+ createModule(name: string, workspace: Workspace): Promise<void>;
6
+ removeModule(name: string, workspace: Workspace): Promise<void>;
7
+ scanModule(name: string, workspace: Workspace): Promise<void>;
8
+ createScalar(sys: Sys, name: string, workspace: Workspace): Promise<void>;
9
+ createService(name: string, workspace: Workspace): Promise<void>;
10
+ createTest(name: string, workspace: Workspace): Promise<void>;
11
+ createView(name: string, workspace: Workspace): Promise<void>;
12
+ createUnit(name: string, workspace: Workspace): Promise<void>;
13
+ }
@@ -0,0 +1,15 @@
1
+ export declare const frameworkDescription = "\uB098\uB294 \uC880 \uB354 \uD6A8\uC728\uC801\uC73C\uB85C \uCF54\uB529\uC744 \uD558\uAE30 \uC704\uD574\uC11C \uC790\uCCB4 \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uC81C\uC791\uD588\uC5B4. \uADF8\uB798\uC11C \uC6B0\uB9AC \uD504\uB808\uC784\uC6CC\uD06C\uC5D0 \uB300\uD55C \uC124\uBA85\uC744 \uD574\uC904\uD14C\uB2C8\uAE4C \uC798 \uC774\uD574\uD558\uB3C4\uB85D \uD574. \uC6B0\uB9AC \uD504\uB808\uC784\uC6CC\uD06C\uB294 next.js 13\uACFC nest.js, capacitor.js, nx, mongoDB \uAE30\uBC18\uC758 \uD504\uB860\uD2B8\uC5D4\uB4DC, \uC571, \uBC31\uC5D4\uB4DC \uD1B5\uD569 \uD504\uB808\uC784\uC6CC\uD06C\uC57C. \uADF8\uB798\uC11C \uBC31\uC5D4\uB4DC, \uD504\uB860\uD2B8\uC5D4\uB4DC, DB Schema\uC5D0 \uB300\uD55C \uCF54\uB4DC\uAC00 \uBAA8\uB450 \uD55C \uD3F4\uB354 \uC548\uC5D0 \uC788\uC5B4. \uADF8\uB798\uC11C \uC790\uBC14\uC2A4\uD06C\uB9BD\uD2B8, \uD0C0\uC785\uC2A4\uD06C\uB9BD\uD2B8, \uADF8\uB9AC\uACE0 \uD504\uB808\uC784\uC6CC\uD06C\uC5D0 \uB300\uD55C \uC774\uD574\uB9CC \uC788\uB2E4\uBA74 \uAD6C\uBD84\uC9D3\uC9C0 \uC54A\uACE0 \uC0AC\uC6A9\uD560 \uC218 \uC788\uB2E4\uB294 \uC7A5\uC810\uC774 \uC788\uC5B4. \n\n\uAC00\uC7A5 \uC678\uBD80\uC758 \uAD6C\uC870\uB294\n- app\n\t- project1\n\t- project2\n\t- project3\n\t- project4\n- lib\n\t- core\n\t- external\n\t- game\n\t- mint\n\t- platform\n\t- shared\n\t- social\n\t- util\napp\uC740 \uAC01 \uD504\uB85C\uC81D\uD2B8\uB97C \uB9CC\uB4DC\uB294 \uACF3\uC774\uC57C\nlib \uD558\uC704 \uD3F4\uB354\uB4E4\uC740 \uC5EC\uB7EC \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uACF5\uC6A9\uC73C\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC788\uACA0\uB2E4 \uB77C\uACE0 \uD310\uB2E8\uD574\uC11C \uBD84\uB9AC\uD574\uB193\uC740 \uACF3\uC774\uC57C.\n\uB2E4\uC74C\uC740 app/project \uB0B4\uBD80\uC758 \uAD6C\uC870\uB97C \uC54C\uB824\uC904\uAC8C.\n\nproject\n- app\n\t- [lang]\n\t\t- (projectName)\n\t\t\t- (user)\n\t\t\t\t- page.tsx\n\t\t\t\t- layout.tsx\n\t\t\t- (public)\n\t\t\t\t- page.tsx\n\t\t\t\t- layout.tsx\n\t\t\t- (admin)\n\t\t\t\t- page.tsx\n\t\t\t\t- layout.tsx\n\n- lib \n\t- dataName1\n\t- dataName2\n\t- dataName3\n\t- dataName4\n\t- dataName5\n\t- dataName6\n\t- dataName7\n\napp\uC740 \uC9C1\uC811\uC801\uC73C\uB85C \uC720\uC800\uAC00 \uBCF4\uB294 \uD398\uC774\uC9C0\uB97C \uC9DC\uB294 \uACF3\uC774\uC57C. \uD3F4\uB354 \uAD6C\uC870\uB294 next 13\uC758 app directory\uB97C \uB530\uB974\uACE0 \uC788\uC5B4.\npublic/page.tsx\uAC00 \uAC00\uC7A5 \uCD5C\uCD08\uB85C \uC811\uADFC\uB418\uB294 Index \uD398\uC774\uC9C0\uAC00 \uB420 \uAC70\uC57C.\n\uC544\uB798\uB294 public/page.tsx\uC758 \uAE30\uBCF8 \uD15C\uD50C\uB9BF \uC18C\uC2A4\uCF54\uB4DC\uC57C.\n```\nimport {{ Image, Link }} from \"@util/ui\";\nimport {{ getSelf }} from \"@akanjs/client\";\n\nexport default function Page() {{\n const self = getSelf();\n return (\n <div className=\"relative w-full h-screen overflow-hidden flex items-center justify-center\">\n <Image\n className=\"absolute left-0 right-0 top-0 bottom-0 w-full h-screen -z-50\"\n width={{1920}}\n height={{1080}}\n src=\"/back.jpg\"\n />\n <div className=\"max-w-md bg-base-100/50 shadow-lg rounded-xl backdrop-blur-xs w-full py-8 px-16 flex flex-col items-center justify-center gap-3\">\n <h1 className=\"text-4xl mt-2\"><%= project %></h1>\n <h2 className=\"text-lg\"><%= project %> description</h2>\n <Link className=\"w-full\" href={{self ? \"/home\" : \"/signin\"}}>\n <button className=\"btn w-full btn-primary\">Go to dashboard</button>\n </Link>\n </div>\n </div>\n );\n}}\n```\n\nlib\uC740 \uC11C\uBE44\uC2A4\uB97C \uB9CC\uB4E4\uB2E4\uBCF4\uBA74 \uD544\uC694\uD55C \uB370\uC774\uD130\uB97C \uC815\uC758\uD558\uB294 \uACF3\uC774\uC57C.\n\uB530\uB77C\uC11C dataName\uC740 DB\uC774\uB984. \uC989 \uB370\uC774\uD130\uBA85\uC744 \uB530\uB77C. \uB2E4\uB9CC \uD3F4\uB354 \uB0B4\uBD80\uC5D0\uB294 backend, Frontend\uC5D0\uC11C \uD1B5\uD569\uC73C\uB85C \uC4F0\uB294 \uC18C\uC2A4\uCF54\uB4DC\uB4E4\uC774 \uC788\uC5B4.\n\n\uC6B0\uB9AC \uD504\uB808\uC784\uC6CC\uD06C\uC758 \uD575\uC2EC\uC740 \uC815\uC758\uD55C \uBA54\uD0C0\uB370\uC774\uD130\uB4E4\uC744 \uC774\uC6A9\uD574\uC11C \uAC01 \uB370\uC774\uD130\uAC04\uC758 \uC5F0\uAD00\uC810\uC774\uB098, \uB370\uC774\uD130 \uD0C0\uC785\uC744 \uBCF4\uACE0 \uBBF8\uB9AC \uC815\uB9AC\uB41C \uACB0\uACFC\uB97C \uB9CC\uB4E4\uC5B4\uC8FC\uACE0 \uD504\uB85C\uC81D\uD2B8\uB97C \uB9CC\uB4E0\uB2E4\uBA74 \uAC70\uC758 \uBAA8\uB450 \uD544\uC694\uD55C \uC791\uC5C5\uB4E4\uC744 \uBBF8\uB9AC \uC815\uB9AC\uD574\uB1A8\uC5B4. \uC608\uB97C \uB4E4\uC5B4 \uB370\uC774\uD130 \uD0C0\uC785\uC5D0 \uC774\uBBF8\uC9C0 \uD30C\uC77C\uC774 \uC788\uB2E4\uACE0 \uD55C\uB2E4\uBA74 \uBC31\uC5D4\uB4DC\uB97C \uD1B5\uD574 \uADF8 \uC774\uBBF8\uC9C0\uB97C \uC11C\uBC84\uC758 \uC2A4\uD1A0\uB9AC\uC9C0\uC5D0 \uC800\uC7A5\uD558\uACE0 \uADF8 \uC800\uC7A5\uB41C \uD30C\uC77C\uC744 \uD2B9\uC815 db\uC5D0 id\uB97C \uCD94\uAC00\uD574\uC8FC\uB294 \uD568\uC218\uB4E4 \uAC19\uC740 \uAC83\uB4E4\uC740 \uC5B4\uB290 \uD504\uB85C\uC81D\uD2B8\uB358 \uAC04\uC5D0 \uBAA8\uB450 \uC0AC\uC6A9\uB418\uB294 \uBC29\uC2DD\uC774\uB77C\uACE0 \uD310\uB2E8\uD588\uC5B4. \uD558\uC9C0\uB9CC \uC6B0\uB9AC\uB294 \uD504\uB85C\uC81D\uD2B8\uB97C \uC791\uC5C5\uD560 \uB54C\uB9C8\uB2E4 \uC774 \uBD88\uD544\uC694\uD55C \uC791\uC5C5\uB4E4\uC744 \uD56D\uC0C1 \uB9CC\uB4E4\uACE0 \uD14C\uC2A4\uD2B8\uB97C\uD558\uB294 \uBD88\uD544\uC694\uD55C \uC77C\uB4E4\uC744 \uD558\uACE0\uC788\uC9C0. \uADF8\uB798\uC11C \uC6B0\uB9AC\uB294 \uAC01 \uD504\uB85C\uC81D\uD2B8\uAC00 \uB9CC\uB4E4 \uB54C\uB9C8\uB2E4 \uD544\uC218\uB85C \uC788\uC5B4\uC57C\uD560 \uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC \uD504\uB85C\uC138\uC2A4\uB97C \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uD1B5\uD574 \uBBF8\uB9AC \uC815\uC758\uB41C \uC0C1\uD0DC\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4.\n\uACB0\uACFC\uC801\uC73C\uB85C \uC6B0\uB9B0 \uD544\uC694\uD558\uC9C0\uB9CC \uB9E4\uBC88 \uC791\uC5C5\uD558\uAE30\uC5D4 \uC190\uC774 \uB9CE\uC774\uAC00\uB294 \uC791\uC5C5\uB4E4\uC744 \uBBF8\uB9AC \uC815\uC758\uD574\uB1A8\uC5B4.\n\n\uB610\uD55C \uC6B0\uB9B0 Nx\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 \uD15C\uD50C\uB9BF \uC81C\uC791 \uBB38\uBC95\uC744 \uC0AC\uC6A9\uD574\uC11C \uCEE4\uB9E8\uB4DC \uD55C \uC904\uB85C \uD2B9\uC815 \uD504\uB85C\uC81D\uD2B8 \uD3F4\uB354 \uD15C\uD50C\uB9BF\uC744 \uB9CC\uB4E4\uC5B4\uC8FC\uAC70\uB098, \uD2B9\uC815 \uBAA8\uB378\uC758 \uD544\uB4DC\uB4E4\uC744 \uB9CC\uB4E4 \uC218 \uC788\uB3C4\uB85D \uD574\uB1A8\uC5B4. Model\uC774\uB77C\uB294 \uBCC0\uC218\uC758 \uACB0\uACFC\uAC12\uC744 \uBC1B\uACE0 \uC800 \uD15C\uD50C\uB9BF\uC5D0 \uB9DE\uAC8C\uB054 \uC774\uB984\uC744 \uB123\uC5B4\uC8FC\uB294 \uAC70\uC9C0. \uB9CC\uC57D \uB0B4\uAC00 phone\uC774\uB77C\uB294 \uBCC0\uC218\uB97C \uB123\uC5C8\uB2E4\uBA74 \uC800 \uBAA8\uB378\uC5D0 Phone\uACFC \uAC19\uC740 \uACB0\uACFC\uAC12\uC73C\uB85C \uAC12\uC774 \uB4E4\uC5B4\uAC00\uAC8C \uB428\uC73C\uB85C\uC11C \uD15C\uD50C\uB9BF\uC774 \uC0DD\uC131\uB3FC. \uC774\uB294 \uC6B0\uB9AC\uAC00 \uC774\uBBF8 \uB9CC\uB4E4\uC5B4\uB193\uC740 \uCEE4\uB9E8\uB4DC\uAC00 \uC788\uC5B4.\n\n\uC608\uB97C \uB4E4\uC5B4 \uC5F0\uD544\uC774\uB77C\uB294 \uBAA8\uB378\uC744 \uCEE4\uB9E8\uB4DC\uB97C \uD1B5\uD574 \uC0DD\uC131\uD558\uBA74 \uC544\uB798\uC640 \uAC19\uC740 \uD30C\uC77C\uB4E4\uC774 \uC0DD\uC131\uB3FC.\n\npencil\n- pencil.constant.ts ( pencil\uC5D0 \uB300\uD55C db schema, query, sort \uAD6C\uBB38\uC744 \uC815\uC758 )\n- pencil.document.ts ( model\uC5D0\uC11C \uC790\uC8FC \uC0AC\uC6A9\uD558\uB294 method, static function, middleware\uB85C \uAC04\uB2E8\uD55C db \uAD00\uB9AC \uD568\uC218\uB4F1\uC744 \uAD00\uB9AC\uD568.)\n- pencil.dictionary.ts (\uB2E4\uAD6D\uC5B4\uB97C \uC704\uD574\uC11C schema field, enum, service name\uC758 \uB2E4\uAD6D\uC5B4 \uC815\uBCF4 \uB4F1\uC744 \uBAA8\uB450 \uAD00\uB9AC. )\n- pencil.signal.ts (frontend\uC758 fetch\uB97C \uC5F4\uC5B4\uC8FC\uB294 \uC77C\uC885\uC758 \uCC3D\uAD6C, \uAD8C\uD55C\uAD00\uB9AC\uB4F1\uC744 \uD568 nestjs\uC758 resolver\uC640 \uC720\uC0AC )\n- pencil.service.ts (\uC2E4\uC9C8\uC801\uC778 \uC11C\uBE44\uC2A4 \uCF54\uB4DC\uB97C \uC791\uC131\uD558\uB294 \uACF3. \uAC01\uC885 \uBE44\uC988\uB2C8\uC2A4 \uB85C\uC9C1\uC744 \uCC98\uB9AC\uD568.)\n- pencil.store.ts (pencil field\uC5D0 \uB300\uD55C \uC0C1\uD0DC\uAD00\uB9AC \uC800\uC7A5\uC18C.)\n- pencil.Zone.tsx (\uC544\uB798 Templete, Unit, Util, View, Util\uB4F1\uC744 \uC870\uD569\uD574\uC11C \uB2E4\uC74C \uB808\uBCA8 \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC791\uC131\uD558\uB294 \uACF3 )\n- pencil.Templete.tsx (\uC8FC\uB85C edit\uC5D0 \uC5F0\uAD00\uB41C \uCEF4\uD3EC\uB10C\uD2B8 \uC815\uC758\uD558\uB294 \uACF3 )\n- pencil.Unit.tsx (list \uCC98\uB7FC \uBCF5\uC218\uAC1C\uC758 \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC815\uC758\uD558\uB294 \uACF3 )\n- pencil.Util.tsx (Action \uBC84\uD2BC\uC744 \uC815\uC758\uD558\uB294 \uACF3 )\n- pencil.View.tsx (\uB2E8\uC77C view \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC815\uC758\uD558\uB294 \uACF3 )\n\n\n\uC5EC\uAE30\uC11C constant\uC5D0 \uC815\uC758 \uB418\uC5B4\uC788\uB294 schema\uB97C \uAE30\uBCF8\uC73C\uB85C \uD574\uC11C \uAC01 document, dictionary, signal, service, store\uB97C \uC0DD\uC131\uD574.\n\ndocument, signal, service\uB294 \uBC31\uC5D4\uB4DC\uC640 \uC5F0\uAD00\uB418\uC5B4\uC788\uB294 \uC18C\uC2A4\uCF54\uB4DC\uC57C.\n\uC11C\uB85C\uAC04\uC758 \uAD00\uACC4\uB294 \uC8FC\uB85C signal\uC5D0\uC11C \uAC00\uC7A5 \uBA3C\uC800 \uC694\uCCAD\uC744 \uBC1B\uACE0 \uC774\uD6C4 \uB85C\uC9C1\uC758 \uBCF5\uC7A1\uB3C4\uC5D0 \uB530\uB77C\uC11C service\uB85C \uCC98\uB9AC\uD560 \uC9C0, docuemnt\uB85C \uCC98\uB9AC\uD560 \uC9C0\uB97C \uACB0\uC815\uD574.\nsignal - document\nsignal - service - document\n\nstore\uB294 \uD504\uB860\uD2B8\uC5D4\uB4DC\uC5D0\uC11C \uC0C1\uD0DC\uAD00\uB9AC\uB97C \uD560 \uB54C \uC0AC\uC6A9\uB3FC.\n\uC6B0\uB9AC\uB294 signal\uC758 \uCF54\uB4DC\uB85C \uB098\uC628 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC774\uC6A9\uD574\uC11C store\uC5D0\uC11C \uD754\uD788 \uC0AC\uC6A9\uB420\uB9CC\uD55C \uD568\uC218\uB4E4\uC744 \uBBF8\uB9AC \uC815\uC758\uD558\uAC8C\uB054 \uB9CC\uB4E4\uC5C8\uC5B4.\n\n\uC774\uB807\uAC8C 11\uAC1C\uC758 \uD30C\uC77C\uB85C \uAD6C\uBD84\uD574\uC11C \uC815\uC758\uAC00 \uB3FC. \uC544\uB798\uB294 \uAC01 \uD15C\uD50C\uB9BF \uBCC4\uB85C \uD30C\uC77C\uB9C8\uB2E4 \uC815\uC758\uB418\uC788\uB294 \uC18C\uC2A4\uCF54\uB4DC\uC57C.\n<%=model %> \uC774 \uBD80\uBD84\uC5D0 \uC6B0\uB9AC\uAC00 \uC785\uB825\uD55C \uBAA8\uB378\uC744 \uAE30\uBC18\uC73C\uB85C \uC0DD\uC131\uB418\uB294 \uAC70\uC9C0.\n\nconstant\uB294 \uAE30\uBCF8 \uC2A4\uD0A4\uB9C8\uAC00 \uAD6C\uC131\uB418\uB294 \uACF3\uC774\uC57C. \uADF8\uB798\uC11C \uC774 \uACF3\uC5D0\uC11C DB \uC2A4\uD0A4\uB9C8, \uCFFC\uB9AC, \uC815\uB82C \uAD6C\uBB38\uC744 \uC815\uC758\uD574.\n\uC8FC\uC758\uD574\uC57C\uD560 \uAC74 decorator\uC5D0\uC11C \uC815\uC758\uD558\uB294 \uD0C0\uC785\uACFC \uC544\uB798\uC5D0 \uC815\uC758\uD558\uB294 \uD0C0\uC785\uC774 \uC57D\uAC04 \uB2E4\uB97C \uC218 \uC788\uC5B4\n\uC608\uB97C \uB4E4\uC5B4 decorator\uC5D0\uC11C\uB294 Int\uB85C \uC815\uC758\uD558\uACE0 constant\uC5D0\uC11C\uB294 number\uB85C \uC815\uC758\uD574\uC57C\uD574.\n\uCD94\uAC00\uB85C createdAt\uACFC updatedAt, status\uB294 \uAE30\uBCF8\uC801\uC73C\uB85C \uC0DD\uC131\uB418\uB294 \uD544\uB4DC\uC774\uB2C8\uAE4C \uB530\uB85C \uC815\uC758\uD558\uC9C0 \uC54A\uC544\uB3C4 \uB3FC.\n\uC774\uB294 decorator\uC5D0\uC11C\uB294 GraphQL\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uD0C0\uC785\uC744 \uC815\uC758\uD558\uACE0 constant\uC5D0\uC11C\uB294 \uC2E4\uC81C \uD0C0\uC785\uC744 \uC815\uC758\uD558\uB294 \uAC70\uC9C0.\nmodel.constant.ts\n```\nimport {{ BaseModel, Field, Full, Light, Model, baseQueries, baseSorts }} from \"@akanjs/constant\";\nimport {{ Int, Dayjs, dayjs }} from \"@akanjs/base\";\n\nexport const <%= model %>Statuses = [\"active\"] as const;\nexport type <%= Model %>Status = (typeof <%= model %>Statuses)[number];\n\n//\uB370\uC774\uD130\uB97C \uB9CC\uB4E4 \uB54C \uD544\uC694\uD55C \uB370\uC774\uD130 \uD0C0\uC785\uC744 \uC815\uC758\uD558\uB294 \uACF3\n@Model.Input(\"<%= Model %>Input\")\nexport class <%= Model %>Input {{\n @Field.Prop(() => String)\n field: string;\n\n @Field.Prop(() => Int, {{ nullable: true }})\n fieldInt: number | null;\n\n @Field.Prop(() => Date, {{default: dayjs()}})\n fieldInt: Dayjs;\n}}\n\n//\uB370\uC774\uD130\uAC00 \uB9CC\uB4E4\uC5B4\uC9C4 \uC774\uD6C4 \uC0DD\uC131\uB418\uAC70\uB098 \uC800\uC7A5\uC73C\uB85C \uCD94\uAC00\uD560 \uC218 \uC788\uB294 \uACF3\n@Model.Object(\"<%= Model %>Object\")\nexport class <%= Model %>Object extends BaseModel(<%= Model %>Input) {{\n @Field.Prop(() => String, {{ enum: <%= model %>Statuses, default: \"active\" }})\n status: <%= Model %>Status;\n}}\n\n//\uB370\uC774\uD130\uB97C \uB9AC\uC2A4\uD2B8\uB85C \uBCF4\uC5EC\uC904 \uB54C \uD544\uC694\uD55C \uB370\uC774\uD130\uB9CC \uC81C\uACF5\uD558\uB294 \uACF3\n@Model.Light(\"Light<%= Model %>\")\nexport class Light<%= Model %> extends Light(<%= Model %>Object, [\"field\", \"status\"] as const) {{}}\n\n//\uCD5C\uC885 \uB370\uC774\uD130\uC758 \uD0C0\uC785\uC774 \uC815\uC758\uB418\uB294 \uACF3\n@Model.Full(\"<%= Model %>\")\nexport class <%= Model %> extends Full(<%= Model %>Object, Light<%= Model %>) {{}}\n\n//\uB370\uC774\uD130\uC758 \uC778\uC0AC\uC774\uD2B8\uB97C \uCE21\uC815\uD558\uAE30 \uC704\uD574\uC11C \uD544\uC694\uD55C \uB370\uC774\uD130\uB97C \uC815\uC758\uD558\uB294 \uACF3\n@Model.Insight(\"<%= Model %>Insight\")\nexport class <%= Model %>Insight {{\n @Field.Prop(() => Int, {{ default: 0, accumulate: {{ $sum: 1 }} }})\n count: number;\n}}\n\n//\uB370\uC774\uD130\uC758 \uD1B5\uACC4\uB97C \uACC4\uC0B0\uD558\uB294 \uACF3\n@Model.Summary(\"<%= Model %>Summary\")\nexport class <%= Model %>Summary {{\n @Field.Prop(() => Int, {{ min: 0, default: 0, query: {{ status: {{}} }} }})\n total<%= Model %>: number;\n}}\n\n//\uB370\uC774\uD130\uB97C \uC870\uD68C\uD560 \uB54C \uD544\uC694\uD55C \uCFFC\uB9AC\uB97C \uC815\uC758\uD558\uB294 \uACF3\nexport const <%= model %>Query = {{\n ...baseQueries,\n}};\n//\uB370\uC774\uD130\uB97C \uC815\uB82C\uD560 \uB54C \uD544\uC694\uD55C \uC815\uB82C\uC744 \uC815\uC758\uD558\uB294 \uACF3\nexport const <%= model %>Sort = {{\n ...baseSorts,\n}};\n```\n\n\nmodel.dictonary.ts\n```\nimport {{ ModelDictionary, SignalDictionary, SummaryDictionary, baseTrans, getBaseSignalTrans }} from \"@akanjs/dictionary\";\nimport type {{ <%= Model %>, <%= Model %>Insight, <%= Model %>Summary, <%= model %>Sort }} from \"./<%= model %>.constant\";\nimport type {{ <%= Model %>Signal }} from \"./<%= model %>.signal\";\n\nconst modelDictionary = {{\n ...baseTrans,\n modelName: [\"<%= Model %>\", \"<%= Model %>\"],\n modelDesc: [\n \"<%= Model %> description\",\n \"<%= Model %> \uC124\uBA85\",\n ],\n\n // * ==================== Model ==================== * //\n field: [\"Field\", \"\uD544\uB4DC\"],\n \"desc-field\": [\"Field\", \"\uD544\uB4DC\"],\n // * ==================== Model ==================== * //\n\n // * ==================== Insight ==================== * //\n count: [\"Count\", \"\uAC1C\uC218\"],\n \"desc-count\": [\"<%= Model %> count in current query settting\", \"\uD604\uC7AC \uCFFC\uB9AC \uC124\uC815\uC5D0 \uB9DE\uB294 <%= Model %> \uC218\"],\n // * ==================== Insight ==================== * //\n\n // * ==================== Filter ==================== * //\n // * ==================== Filter ==================== * //\n\n // * ==================== Etc ==================== * //\n \"enum-status-active\": [\"Active\", \"\uD65C\uC131\"],\n \"enumdesc-status-active\": [\"Active status\", \"\uD65C\uC131 \uC0C1\uD0DC\"],\n // * ==================== Etc ==================== * //\n}} satisfies ModelDictionary<<%= Model %>, <%= Model %>Insight, typeof <%= model %>Sort>;\n\nexport const <%= model %>SummaryDictionary = {{\n // * ==================== Summary ==================== * //\n total<%= Model %>: [\"Total <%= Model %>\", \"\uCD1D <%= Model %> \uC218\"],\n \"desc-total<%= Model %>\": [\"Total <%= model %> count in the database\", \"\uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC800\uC7A5\uB41C \uCD1D <%= Model %> \uC218\"],\n // * ==================== Summary ==================== * //\n}} satisfies SummaryDictionary<<%= Model %>Summary>;\n\nconst signalDictionary = {{\n ...getBaseSignalTrans(\"<%= model %>\" as const),\n // * ==================== Endpoint ==================== * //\n \"api-<%= model %>ListInPublic\": [\"<%= Model %> List In Public\", \"\uACF5\uAC1C\uB41C <%= Model %> \uB9AC\uC2A4\uD2B8\"],\n \"apidesc-<%= model %>ListInPublic\": [\"Get a list of public <%= model %>\", \"\uACF5\uAC1C\uB41C <%= Model %>\uC758 \uB9AC\uC2A4\uD2B8\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4\"],\n \"arg-<%= model %>ListInPublic-statuses\": [\"Statuses\", \"\uC0C1\uD0DC\"],\n \"argdesc-<%= model %>ListInPublic-statuses\": [\"Statuses to filter\", \"\uD544\uD130\uB9C1\uD560 \uC0C1\uD0DC\"],\n \"arg-<%= model %>ListInPublic-skip\": [\"Skip\", \"\uAC74\uB108\uB6F0\uAE30\"],\n \"argdesc-<%= model %>ListInPublic-skip\": [\"Number of items to skip\", \"\uAC74\uB108\uB6F8 \uC544\uC774\uD15C \uC218\"],\n \"arg-<%= model %>ListInPublic-limit\": [\"Limit\", \"\uC81C\uD55C\"],\n \"argdesc-<%= model %>ListInPublic-limit\": [\"Maximum number of items to return\", \"\uBC18\uD658\uD560 \uCD5C\uB300 \uC544\uC774\uD15C \uC218\"],\n \"arg-<%= model %>ListInPublic-sort\": [\"Sort\", \"\uC815\uB82C\"],\n \"argdesc-<%= model %>ListInPublic-sort\": [\"Sort order of the items\", \"\uC544\uC774\uD15C\uC758 \uC815\uB82C \uC21C\uC11C\"],\n\n \"api-<%= model %>InsightInPublic\": [\"<%= Model %> Insight In Public\", \"\uACF5\uAC1C\uB41C <%= Model %> \uC778\uC0AC\uC774\uD2B8\"],\n \"apidesc-<%= model %>InsightInPublic\": [\n \"Get insight data for public <%= model %>\",\n \"\uACF5\uAC1C\uB41C <%= Model %>\uC5D0 \uB300\uD55C \uC778\uC0AC\uC774\uD2B8 \uB370\uC774\uD130\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4\",\n ],\n \"arg-<%= model %>InsightInPublic-statuses\": [\"Statuses\", \"\uC0C1\uD0DC\"],\n \"argdesc-<%= model %>InsightInPublic-statuses\": [\"Statuses to filter\", \"\uD544\uD130\uB9C1\uD560 \uC0C1\uD0DC\"],\n // * ==================== Endpoint ==================== * //\n}} satisfies SignalDictionary<<%= Model %>Signal, <%= Model %>>;\n```\nexport const <%= model %>Dictionary = {{ ...modelDictionary, ...signalDictionary }};\n\n\n\nmodel.document.ts\n```\nimport {{ Database, Document, Input, Middleware, Model, type SchemaOf }} from \"@akanjs/server\";\nimport {{ cnst }} from \"../cnst\";\n\n@Database.Input(() => cnst.<%= Model %>Input)\nexport class <%= Model %>Input extends Input(cnst.<%= Model %>Input) {{}}\n\n@Database.Document(() => cnst.<%= Model %>)\nexport class <%= Model %> extends Document(cnst.<%= Model %>) {{}}\n\n@Database.Model(() => cnst.<%= Model %>)\nexport class <%= Model %>Model extends Model(<%= Model %>, cnst.<%= model %>Cnst) {{\n async getSummary(): Promise<cnst.<%= Model %>Summary> {{\n return {{\n ...(await this.getDefaultSummary()),\n }};\n }}\n}}\n\n@Database.Middleware(() => cnst.<%= Model %>)\nexport class <%= Model %>Middleware extends Middleware(<%= Model %>Model, <%= Model %>) {{\n onSchema(schema: SchemaOf<<%= Model %>Model, <%= Model %>>) {{\n // schema.index({{ status: 1 }})\n }}\n}}\n\n\nmodel.signal.ts\n\nimport {{ Arg, DbSignal, Mutation, Query, Signal, resolve }} from \"@akanjs/signal\";\nimport {{ Int }} from \"@akanjs/base\";\nimport {{ Srvs, cnst }} from \"../cnst\";\n\n@Signal(() => cnst.<%= Model %>)\nexport class <%= Model %>Signal extends DbSignal(cnst.<%= model %>Cnst, Srvs, {{\n guards: {{ get: Query.Public, cru: Mutation.Every }},\n}}) {{\n // * /////////////////////////////////////\n // * Public Slice\n @Query.Public(() => [cnst.<%= Model %>])\n async <%= model %>ListInPublic(\n @Arg.Query(\"statuses\", () => [String], {{ nullable: true }}) statuses: cnst.<%= Model %>Status[] | null,\n @Arg.Query(\"skip\", () => Int, {{ nullable: true }}) skip: number | null,\n @Arg.Query(\"limit\", () => Int, {{ nullable: true }}) limit: number | null,\n @Arg.Query(\"sort\", () => String, {{ nullable: true }}) sort: keyof typeof cnst.<%= model %>Sort | null\n ) {{\n const <%= models %> = await this.<%= model %>Service.listByStatuses(statuses, {{ skip, limit, sort }});\n return resolve<cnst.<%= Model %>[]>(<%= models %>);\n }}\n @Query.Public(() => cnst.<%= Model %>Insight)\n async <%= model %>InsightInPublic(@Arg.Query(\"statuses\", () => [String], {{ nullable: true }}) statuses: cnst.<%= Model %>Status[] | null) {{\n const <%= model %>Insight = await this.<%= model %>Service.insightByStatuses(statuses);\n return resolve<cnst.<%= Model %>Insight>(<%= model %>Insight);\n }}\n // * Public Slice\n // * /////////////////////////////////////\n}}\n```\n\n\nmodel.service.ts\n```\nimport * as db from \"../db\";\nimport {{ DbService, Service }} from \"@akanjs/server\";\nimport {{ cnst }} from \"../cnst\";\n// import type * as srv from \"../srv\";\n\n@Service(\"<%= Model %>Service\")\nexport class <%= Model %>Service extends DbService(db.<%= model %>Db) {{\n // @Use() protected readonly injectedVar: string;\n // @Srv() protected readonly otherService: srv.OtherService;\n \n async summarize(): Promise<cnst.<%= Model %>Summary> {{\n return {{\n ...(await this.<%= model %>Model.getSummary()),\n }};\n }}\n}}\n```\n\n\nmodel.store.ts\n```\nimport {{ Store, stateOf }} from \"@akanjs/client\";\nimport {{ cnst }} from \"../cnst\";\nimport {{ fetch }} from \"../fetch\";\n\n@Store(() => cnst.<%= Model %>)\nexport class <%= Model %>Store extends stateOf(fetch.<%= model %>Gql, {{\n // state\n}}) {{\n // action\n}}\n```\n\n\nmodel.Zone.tsx\n```\n\"use client\";\nimport {{ Data, Load }} from \"@shared/ui\";\nimport {{ ModelsProps }} from \"@akanjs/client\";\nimport {{ cnst, fetch, <%= Model %> }} from \"<%= clientPath %>\";\nimport {{ ClientInit, ClientView, DefaultOf }} from \"@akanjs/signal\";\nimport {{ getQueryMap }} from \"@akanjs/constant\";\n\nexport const Admin = ({{ sliceName = \"<%= model %>\", init, query }}: ModelsProps<cnst.<%= Model %>>) => {{\n return (\n <Data.ListContainer\n init={{init}}\n query={{query}}\n sliceName={{sliceName}}\n renderItem={{<%= Model %>.Unit.Card}}\n renderDashboard={{<%= Model %>.Util.Stat}}\n renderInsight={{<%= Model %>.Util.Insight}}\n renderTemplate={{<%= Model %>.Template.General}}\n renderTitle={{(<%= model %>: DefaultOf<cnst.<%= Model %>>) => `<%= Model %> - ${{<%= model %>.id ? <%= model %>.id : \"New\"}}`}}\n renderView={{(<%= model %>: cnst.<%= Model %>) => <<%= Model %>.View.General <%= model %>={{<%= model %>}} />}}\n queryMap={{getQueryMap(cnst.<%= Model %>Summary)}}\n columns={{[\n \"id\",\n \"status\",\n \"createdAt\",\n \"updatedAt\",\n ]}}\n actions={{(<%= model %>: cnst.Light<%= Model %>, idx) => [\"remove\", \"edit\", \"view\"]}}\n />\n );\n}};\n\ninterface CardProps {{\n className?: string;\n init: ClientInit<\"<%= model %>\", cnst.Light<%= Model %>>;\n}}\nexport const Card = ({{ className, init }}: CardProps) => {{\n return (\n <Load.Units\n className={{className}}\n init={{init}}\n renderItem={{(<%= model %>: cnst.Light<%= Model %>) => (\n <<%= Model %>.Unit.Card key={{<%= model %>.id}} href={{`/<%= model %>${{<%= model %>.id}}`}} <%= model %>={{<%= model %>}} />\n )}}\n />\n );\n}};\n\ninterface ViewProps {{\n className?: string;\n view: ClientView<\"<%= model %>\", cnst.<%= Model %>>;\n}}\nexport const View = ({{ view }}: ViewProps) => {{\n return <Load.View view={{view}} renderView={{(<%= model %>) => <<%= Model %>.View.General <%= model %>={{<%= model %>}} />}} />;\n}};\n```\n\nmodel.Templete.tsx\n```\n\"use client\";\nimport {{ Field }} from \"@shared.ui\";\nimport {{ Layout }} from \"@util.ui\";\nimport {{ cnst, st, usePage }} from \"<%= clientPath %>\";\n\ninterface <%= Model %>EditProps {{\n <%= model %>Id?: string | null;\n}}\n\nexport const General = ({{ <%= model %>Id = undefined }}: <%= Model %>EditProps) => {{\n const <%= model %>Form = st.use.<%= model %>Form();\n const {{ l }} = usePage();\n return (\n <Layout.Template>\n <Field.Text\n label={{l.field(\"<%= model %>\", \"id\")}}\n desc={{l.desc(\"<%= model %>\", \"id\")}}\n value={{<%= model %>Form.id}}\n onChange={{st.do.setIdOn<%= Model %>}}\n />\n </Layout.Template>\n );\n}};\n```\n\n\nmodel.Unit.tsx\n```\nimport {{ Link }} from \"@util.ui\";\nimport {{ cnst, <%= Model %> }} from \"<%= clientPath %>\";\nimport {{ ModelProps }} from \"@akanjs/client\";\n\nexport const Card = ({{ <%= model %>, href }}: ModelProps<\"<%= model %>\", cnst.Light<%= Model %>>) => {{\n return (\n <Link href={{href}} className=\"animate-fadeIn w-full h-36 flex rounded-lg shadow-sm hover:shadow-lg duration-300\">\n <div>{{<%= model %>.id}}</div>\n </Link>\n );\n}};\n```\n\n\nmodel.Util.tsx\n```\n\"use client\";\nimport {{ Data }} from \"@shared.ui\";\nimport {{ ModelDashboardProps, ModelInsightProps }} from \"@akanjs/client\";\nimport {{ cnst, fetch, st, usePage, <%= Model %> }} from \"<%= clientPath %>\";\nimport {{ getQueryMap }} from \"@akanjs/constant\";\n\nexport const Stat = ({{\n className,\n summary,\n sliceName = \"<%= model %>\",\n queryMap = getQueryMap(cnst.<%= Model %>Summary),\n hidePresents,\n}}: ModelDashboardProps<cnst.Summary>) => {{\n return (\n <Data.Dashboard\n className={{className}}\n summary={{summary}}\n sliceName={{sliceName}}\n queryMap={{queryMap}}\n columns={{[\"total<%= Model %>\"]}}\n hidePresents={{hidePresents}}\n />\n );\n}};\n\nexport const Insight = ({{\n className,\n insight,\n sliceName = \"<%= model %>\",\n}}: ModelInsightProps<cnst.<%= Model %>Insight>) => {{\n return (\n <Data.Insight\n className={{className}}\n insight={{insight}}\n sliceName={{sliceName}}\n columns={{[\"count\"]}}\n />\n );\n}};\n```\n\n\nmodel.View.tsx\n```\nimport {{ Image }} from \"@util.ui\";\nimport {{ cnst, <%= Model %> }} from \"<%= clientPath %>\";\nimport {{ clsx }} from \"@akanjs/client\";\n\ninterface <%= Model %>ViewProps {{\n className?: string;\n <%= model %>: cnst.<%= Model %>;\n self?: {{ id?: string }} | null;\n}}\n\nexport const General = ({{ className, <%= model %>, self }}: <%= Model %>ViewProps) => {{\n return (\n <div className={{clsx(className, `animate-fadeIn w-full`)}}>\n <div>{{<%= model %>.id}}</div>\n </div>\n );\n}};\n```\n\uC774\uB7F0\uC2DD\uC73C\uB85C \uC6B0\uB9AC\uAC00 \uC9C1\uC811 \uB9CC\uB4E0 \uD504\uB808\uC784\uC6CC\uD06C\uC5D0 \uAE30\uBC18\uD574\uC11C db\uC640 \uC11C\uBE44\uC2A4 \uC2A4\uD1A0\uC5B4\uAE4C\uC9C0 \uBAA8\uB450 \uC5F0\uB3D9\uD574\uC11C \uD558\uB098\uC758 \uBAA8\uB378\uC5D0 \uB9DE\uAC8C\uB054 \uBAA8\uB4C8\uC744 \uD55C \uD3F4\uB354\uC5D0\uC11C \uC791\uC5C5\uD560 \uC218 \uC788\uAC8C\uB054 \uAD6C\uC870\uB97C \uB9CC\uB4E4\uC5C8\uC5B4.\n\n\uC77C\uB2E8 \uD504\uB808\uC784\uC6CC\uD06C\uC5D0 \uB300\uD55C \uC124\uBA85\uC740 \uC774 \uC815\uB3C4\uB85C \uD558\uACE0 \uC774 \uC815\uBCF4\uB4E4\uC744 \uAE30\uBC18\uC73C\uB85C \uB0B4\uAC00 \uC6D0\uD558\uB294 \uC694\uAD6C\uB97C \uB4E4\uC5B4\uC918.\n";
2
+ export declare const requestModule: () => string;
3
+ interface RequestConstantProps {
4
+ sysName: string;
5
+ modelName: string;
6
+ modelDesc: string;
7
+ modelSchemaDesign: string;
8
+ boilerplate: string;
9
+ otherConstants: {
10
+ path: string;
11
+ content: string;
12
+ }[];
13
+ }
14
+ export declare const requestScalarConstant: ({ sysName, modelName, modelDesc, modelSchemaDesign, boilerplate, otherConstants, }: RequestConstantProps) => string;
15
+ export {};