@slingr/cli 0.0.3 → 0.0.4

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 (251) hide show
  1. package/LICENSE.txt +202 -0
  2. package/README.md +490 -319
  3. package/bin/dev.cmd +2 -2
  4. package/bin/dev.js +5 -5
  5. package/bin/run.cmd +2 -2
  6. package/bin/run.js +4 -4
  7. package/bin/slingr +1 -0
  8. package/dist/commands/build.d.ts +20 -0
  9. package/dist/commands/build.d.ts.map +1 -0
  10. package/dist/commands/build.js +206 -0
  11. package/dist/commands/build.js.map +1 -0
  12. package/dist/commands/create-app.d.ts +0 -1
  13. package/dist/commands/create-app.d.ts.map +1 -1
  14. package/dist/commands/create-app.js +38 -57
  15. package/dist/commands/create-app.js.map +1 -1
  16. package/dist/commands/debug.d.ts +28 -0
  17. package/dist/commands/debug.d.ts.map +1 -0
  18. package/dist/commands/debug.js +474 -0
  19. package/dist/commands/debug.js.map +1 -0
  20. package/dist/commands/ds.d.ts +14 -1
  21. package/dist/commands/ds.d.ts.map +1 -1
  22. package/dist/commands/ds.js +450 -121
  23. package/dist/commands/ds.js.map +1 -1
  24. package/dist/commands/gql.d.ts +1 -1
  25. package/dist/commands/gql.d.ts.map +1 -1
  26. package/dist/commands/gql.js +190 -184
  27. package/dist/commands/gql.js.map +1 -1
  28. package/dist/commands/infra/down.d.ts.map +1 -1
  29. package/dist/commands/infra/down.js +8 -7
  30. package/dist/commands/infra/down.js.map +1 -1
  31. package/dist/commands/infra/up.d.ts.map +1 -1
  32. package/dist/commands/infra/up.js +8 -7
  33. package/dist/commands/infra/up.js.map +1 -1
  34. package/dist/commands/infra/update.d.ts +1 -0
  35. package/dist/commands/infra/update.d.ts.map +1 -1
  36. package/dist/commands/infra/update.js +33 -69
  37. package/dist/commands/infra/update.js.map +1 -1
  38. package/dist/commands/run.d.ts +29 -2
  39. package/dist/commands/run.d.ts.map +1 -1
  40. package/dist/commands/run.js +628 -130
  41. package/dist/commands/run.js.map +1 -1
  42. package/dist/commands/setup.d.ts +1 -1
  43. package/dist/commands/setup.d.ts.map +1 -1
  44. package/dist/commands/setup.js +34 -71
  45. package/dist/commands/setup.js.map +1 -1
  46. package/dist/commands/sync-metadata.d.ts +15 -0
  47. package/dist/commands/sync-metadata.d.ts.map +1 -0
  48. package/dist/commands/sync-metadata.js +225 -0
  49. package/dist/commands/sync-metadata.js.map +1 -0
  50. package/dist/commands/users.d.ts +30 -0
  51. package/dist/commands/users.d.ts.map +1 -0
  52. package/dist/commands/users.js +472 -0
  53. package/dist/commands/users.js.map +1 -0
  54. package/dist/commands/views.d.ts +11 -0
  55. package/dist/commands/views.d.ts.map +1 -0
  56. package/dist/commands/views.js +73 -0
  57. package/dist/commands/views.js.map +1 -0
  58. package/dist/projectStructure.d.ts +2 -2
  59. package/dist/projectStructure.d.ts.map +1 -1
  60. package/dist/projectStructure.js +281 -69
  61. package/dist/projectStructure.js.map +1 -1
  62. package/dist/scripts/generate-metadata.d.ts +13 -0
  63. package/dist/scripts/generate-metadata.d.ts.map +1 -0
  64. package/dist/scripts/generate-metadata.js +412 -0
  65. package/dist/scripts/generate-metadata.js.map +1 -0
  66. package/dist/scripts/generate-metadata.ts +498 -0
  67. package/dist/scripts/generate-schema.d.ts +1 -1
  68. package/dist/scripts/generate-schema.js +168 -74
  69. package/dist/scripts/generate-schema.js.map +1 -1
  70. package/dist/scripts/generate-schema.ts +258 -143
  71. package/dist/templates/.env.template +23 -0
  72. package/dist/templates/.firebaserc.template +5 -0
  73. package/dist/templates/.github/copilot-instructions.md.template +652 -17
  74. package/dist/templates/backend/Dockerfile.template +30 -0
  75. package/dist/templates/config/datasource.ts.template +12 -9
  76. package/dist/templates/config/jest.config.ts +30 -30
  77. package/dist/templates/config/jest.setup.ts +1 -1
  78. package/dist/templates/config/tsconfig.json.template +50 -29
  79. package/dist/templates/dataSources/mysql.ts.template +16 -13
  80. package/dist/templates/dataSources/postgres.ts.template +15 -13
  81. package/dist/templates/dataset-generator-script.ts.template +139 -139
  82. package/dist/templates/datasets/mysql-default/.slingr-schema.json.template +5 -0
  83. package/dist/templates/datasets/mysql-default/Address.jsonl.template +3 -3
  84. package/dist/templates/datasets/mysql-default/App.jsonl.template +4 -4
  85. package/dist/templates/datasets/mysql-default/Company.jsonl.template +3 -3
  86. package/dist/templates/datasets/mysql-default/Person.jsonl.template +2 -2
  87. package/dist/templates/datasets/mysql-default/User.jsonl.template +1 -0
  88. package/dist/templates/datasets/mysql-default/instructions.md.template +1 -0
  89. package/dist/templates/datasets/postgres-default/.slingr-schema.json.template +5 -0
  90. package/dist/templates/datasets/postgres-default/Address.jsonl.template +3 -3
  91. package/dist/templates/datasets/postgres-default/App.jsonl.template +4 -4
  92. package/dist/templates/datasets/postgres-default/Company.jsonl.template +3 -3
  93. package/dist/templates/datasets/postgres-default/Person.jsonl.template +2 -2
  94. package/dist/templates/datasets/postgres-default/User.jsonl.template +1 -0
  95. package/dist/templates/datasets/postgres-default/instructions.md.template +1 -0
  96. package/dist/templates/docker-compose.prod-test.yml.template +32 -0
  97. package/dist/templates/docker-compose.yml.template +24 -0
  98. package/dist/templates/docs/app-description.md.template +33 -33
  99. package/dist/templates/firebase.json.template +68 -0
  100. package/dist/templates/frontend/.umirc.ts.template +23 -0
  101. package/dist/templates/frontend/package.json.template +45 -0
  102. package/dist/templates/frontend/public/config.json +6 -0
  103. package/dist/templates/frontend/public/logo.svg +6 -0
  104. package/dist/templates/frontend/src/app.tsx.template +44 -0
  105. package/dist/templates/frontend/src/global.less.template +117 -0
  106. package/dist/templates/frontend/src/layouts/MainLayout.tsx.template +75 -0
  107. package/dist/templates/frontend/src/types/graphql-augmentation.d.ts.template +44 -0
  108. package/dist/templates/frontend/src/views/customViews/user/UserCreateView.tsx.template +18 -0
  109. package/dist/templates/frontend/src/views/customViews/user/UserEditView.tsx.template +29 -0
  110. package/dist/templates/frontend/src/views/customViews/user/UserReadView.tsx.template +24 -0
  111. package/dist/templates/frontend/src/views/customViews/user/UserTableView.tsx.template +38 -0
  112. package/dist/templates/frontend/src/views/customViews/welcome.tsx.template +34 -0
  113. package/dist/templates/frontend/tsconfig.json.template +50 -0
  114. package/dist/templates/gql/codegen.yml.template +25 -25
  115. package/dist/templates/gql/index.ts.template +17 -24
  116. package/dist/templates/gql/operations.graphql.template +30 -30
  117. package/dist/templates/ops/README.md.template +1045 -0
  118. package/dist/templates/ops/cloudbuild.yaml.template +161 -0
  119. package/dist/templates/ops/scripts/_utils.js.template +217 -0
  120. package/dist/templates/ops/scripts/deploy.js.template +145 -0
  121. package/dist/templates/ops/scripts/setup-gcp.js.template +330 -0
  122. package/dist/templates/ops/scripts/setup-secrets.js.template +76 -0
  123. package/dist/templates/ops/scripts/test-prod-local.js.template +49 -0
  124. package/dist/templates/package.json.template +50 -38
  125. package/dist/templates/pnpm-workspace.yaml.template +3 -0
  126. package/dist/templates/prompt-analysis.md.template +110 -110
  127. package/dist/templates/prompt-script-generation.md.template +258 -258
  128. package/dist/templates/src/Address.ts.template +28 -31
  129. package/dist/templates/src/App.ts.template +17 -61
  130. package/dist/templates/src/Company.ts.template +41 -47
  131. package/dist/templates/src/Models.test.ts.template +654 -654
  132. package/dist/templates/src/Person.test.ts.template +289 -289
  133. package/dist/templates/src/Person.ts.template +90 -105
  134. package/dist/templates/src/actions/index.ts.template +11 -11
  135. package/dist/templates/src/auth/permissions.ts.template +34 -0
  136. package/dist/templates/src/data/App.ts.template +48 -0
  137. package/dist/templates/src/data/User.ts.template +35 -0
  138. package/dist/templates/src/types/gql.d.ts.template +17 -17
  139. package/dist/templates/vscode/extensions.json +4 -3
  140. package/dist/templates/vscode/settings.json +17 -11
  141. package/dist/templates/workspace-package.json.template +21 -0
  142. package/dist/utils/buildCache.d.ts +12 -0
  143. package/dist/utils/buildCache.d.ts.map +1 -0
  144. package/dist/utils/buildCache.js +102 -0
  145. package/dist/utils/buildCache.js.map +1 -0
  146. package/dist/utils/checkFramework.d.ts +27 -0
  147. package/dist/utils/checkFramework.d.ts.map +1 -0
  148. package/dist/utils/checkFramework.js +104 -0
  149. package/dist/utils/checkFramework.js.map +1 -0
  150. package/dist/utils/datasourceParser.d.ts +11 -0
  151. package/dist/utils/datasourceParser.d.ts.map +1 -1
  152. package/dist/utils/datasourceParser.js +154 -56
  153. package/dist/utils/datasourceParser.js.map +1 -1
  154. package/dist/utils/dockerManager.d.ts +25 -0
  155. package/dist/utils/dockerManager.d.ts.map +1 -0
  156. package/dist/utils/dockerManager.js +281 -0
  157. package/dist/utils/dockerManager.js.map +1 -0
  158. package/dist/utils/infraFileParser.d.ts +26 -0
  159. package/dist/utils/infraFileParser.d.ts.map +1 -0
  160. package/dist/utils/infraFileParser.js +75 -0
  161. package/dist/utils/infraFileParser.js.map +1 -0
  162. package/dist/utils/jsonlLoader.d.ts +91 -12
  163. package/dist/utils/jsonlLoader.d.ts.map +1 -1
  164. package/dist/utils/jsonlLoader.js +674 -63
  165. package/dist/utils/jsonlLoader.js.map +1 -1
  166. package/dist/utils/model-analyzer.d.ts.map +1 -1
  167. package/dist/utils/model-analyzer.js +67 -13
  168. package/dist/utils/model-analyzer.js.map +1 -1
  169. package/dist/utils/userManagement.d.ts +57 -0
  170. package/dist/utils/userManagement.d.ts.map +1 -0
  171. package/dist/utils/userManagement.js +288 -0
  172. package/dist/utils/userManagement.js.map +1 -0
  173. package/dist/utils/viewsGenerator.d.ts +15 -0
  174. package/dist/utils/viewsGenerator.d.ts.map +1 -0
  175. package/dist/utils/viewsGenerator.js +311 -0
  176. package/dist/utils/viewsGenerator.js.map +1 -0
  177. package/oclif.manifest.json +445 -20
  178. package/package.json +29 -26
  179. package/src/templates/.env.template +23 -0
  180. package/src/templates/.firebaserc.template +5 -0
  181. package/src/templates/.github/copilot-instructions.md.template +652 -17
  182. package/src/templates/backend/Dockerfile.template +30 -0
  183. package/src/templates/config/datasource.ts.template +12 -9
  184. package/src/templates/config/jest.config.ts +30 -30
  185. package/src/templates/config/jest.setup.ts +1 -1
  186. package/src/templates/config/tsconfig.json.template +50 -29
  187. package/src/templates/dataSources/mysql.ts.template +16 -13
  188. package/src/templates/dataSources/postgres.ts.template +15 -13
  189. package/src/templates/dataset-generator-script.ts.template +139 -139
  190. package/src/templates/datasets/mysql-default/.slingr-schema.json.template +5 -0
  191. package/src/templates/datasets/mysql-default/Address.jsonl.template +3 -3
  192. package/src/templates/datasets/mysql-default/App.jsonl.template +4 -4
  193. package/src/templates/datasets/mysql-default/Company.jsonl.template +3 -3
  194. package/src/templates/datasets/mysql-default/Person.jsonl.template +2 -2
  195. package/src/templates/datasets/mysql-default/User.jsonl.template +1 -0
  196. package/src/templates/datasets/mysql-default/instructions.md.template +1 -0
  197. package/src/templates/datasets/postgres-default/.slingr-schema.json.template +5 -0
  198. package/src/templates/datasets/postgres-default/Address.jsonl.template +3 -3
  199. package/src/templates/datasets/postgres-default/App.jsonl.template +4 -4
  200. package/src/templates/datasets/postgres-default/Company.jsonl.template +3 -3
  201. package/src/templates/datasets/postgres-default/Person.jsonl.template +2 -2
  202. package/src/templates/datasets/postgres-default/User.jsonl.template +1 -0
  203. package/src/templates/datasets/postgres-default/instructions.md.template +1 -0
  204. package/src/templates/docker-compose.prod-test.yml.template +32 -0
  205. package/src/templates/docker-compose.yml.template +24 -0
  206. package/src/templates/docs/app-description.md.template +33 -33
  207. package/src/templates/firebase.json.template +68 -0
  208. package/src/templates/frontend/.umirc.ts.template +23 -0
  209. package/src/templates/frontend/package.json.template +45 -0
  210. package/src/templates/frontend/public/config.json +6 -0
  211. package/src/templates/frontend/public/logo.svg +6 -0
  212. package/src/templates/frontend/src/app.tsx.template +44 -0
  213. package/src/templates/frontend/src/global.less.template +117 -0
  214. package/src/templates/frontend/src/layouts/MainLayout.tsx.template +75 -0
  215. package/src/templates/frontend/src/types/graphql-augmentation.d.ts.template +44 -0
  216. package/src/templates/frontend/src/views/customViews/user/UserCreateView.tsx.template +18 -0
  217. package/src/templates/frontend/src/views/customViews/user/UserEditView.tsx.template +29 -0
  218. package/src/templates/frontend/src/views/customViews/user/UserReadView.tsx.template +24 -0
  219. package/src/templates/frontend/src/views/customViews/user/UserTableView.tsx.template +38 -0
  220. package/src/templates/frontend/src/views/customViews/welcome.tsx.template +34 -0
  221. package/src/templates/frontend/tsconfig.json.template +50 -0
  222. package/src/templates/gql/codegen.yml.template +25 -25
  223. package/src/templates/gql/index.ts.template +17 -24
  224. package/src/templates/gql/operations.graphql.template +30 -30
  225. package/src/templates/ops/README.md.template +1045 -0
  226. package/src/templates/ops/cloudbuild.yaml.template +161 -0
  227. package/src/templates/ops/scripts/_utils.js.template +217 -0
  228. package/src/templates/ops/scripts/deploy.js.template +145 -0
  229. package/src/templates/ops/scripts/setup-gcp.js.template +330 -0
  230. package/src/templates/ops/scripts/setup-secrets.js.template +76 -0
  231. package/src/templates/ops/scripts/test-prod-local.js.template +49 -0
  232. package/src/templates/package.json.template +50 -38
  233. package/src/templates/pnpm-workspace.yaml.template +3 -0
  234. package/src/templates/prompt-analysis.md.template +110 -110
  235. package/src/templates/prompt-script-generation.md.template +258 -258
  236. package/src/templates/src/Address.ts.template +28 -31
  237. package/src/templates/src/App.ts.template +17 -61
  238. package/src/templates/src/Company.ts.template +41 -47
  239. package/src/templates/src/Models.test.ts.template +654 -654
  240. package/src/templates/src/Person.test.ts.template +289 -289
  241. package/src/templates/src/Person.ts.template +90 -105
  242. package/src/templates/src/actions/index.ts.template +11 -11
  243. package/src/templates/src/auth/permissions.ts.template +34 -0
  244. package/src/templates/src/data/App.ts.template +48 -0
  245. package/src/templates/src/data/User.ts.template +35 -0
  246. package/src/templates/src/types/gql.d.ts.template +17 -17
  247. package/src/templates/vscode/extensions.json +4 -3
  248. package/src/templates/vscode/settings.json +17 -11
  249. package/src/templates/workspace-package.json.template +21 -0
  250. package/dist/templates/src/index.ts +0 -66
  251. package/src/templates/src/index.ts +0 -66
@@ -6,6 +6,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createProjectStructure = createProjectStructure;
7
7
  const fs_extra_1 = __importDefault(require("fs-extra"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
+ const REQUIRED_TEMPLATE_FILES = [
10
+ '.env.template',
11
+ '.npmrc',
12
+ 'pnpm-workspace.yaml.template',
13
+ 'config/.gitignore',
14
+ 'config/tsconfig.json.template',
15
+ 'src/App.ts.template',
16
+ 'vscode/extensions.json',
17
+ 'workspace-package.json.template',
18
+ ];
19
+ async function hasRequiredTemplateFiles(baseDir) {
20
+ for (const file of REQUIRED_TEMPLATE_FILES) {
21
+ if (!(await fs_extra_1.default.pathExists(node_path_1.default.join(baseDir, file)))) {
22
+ return false;
23
+ }
24
+ }
25
+ return true;
26
+ }
27
+ async function resolveTemplatesDir(currentDir) {
28
+ const candidateDirs = [node_path_1.default.join(currentDir, 'templates'), node_path_1.default.resolve(currentDir, '..', 'src', 'templates')];
29
+ for (const candidate of candidateDirs) {
30
+ if (await hasRequiredTemplateFiles(candidate)) {
31
+ return candidate;
32
+ }
33
+ }
34
+ throw new Error('Could not locate a valid templates directory. Ensure templates are available in dist/templates or src/templates.');
35
+ }
9
36
  async function copyTemplateFile(templatePath, targetPath, replacements) {
10
37
  let content = await fs_extra_1.default.readFile(templatePath, 'utf8');
11
38
  // Apply replacements if provided
@@ -16,61 +43,106 @@ async function copyTemplateFile(templatePath, targetPath, replacements) {
16
43
  }
17
44
  await fs_extra_1.default.outputFile(targetPath, content);
18
45
  }
46
+ function stripEnvValues(envContent) {
47
+ return envContent
48
+ .split(/\r?\n/)
49
+ .map(line => {
50
+ const trimmed = line.trim();
51
+ if (!trimmed || trimmed.startsWith('#')) {
52
+ return line;
53
+ }
54
+ const separatorIndex = line.indexOf('=');
55
+ if (separatorIndex < 0) {
56
+ return line;
57
+ }
58
+ const key = line.slice(0, separatorIndex);
59
+ return `${key}=`;
60
+ })
61
+ .join('\n');
62
+ }
63
+ async function createEnvFiles(templatesDir, backendDir, replacements) {
64
+ const envTemplatePath = node_path_1.default.join(templatesDir, '.env.template');
65
+ const envPath = node_path_1.default.join(backendDir, '.env');
66
+ const envExamplePath = node_path_1.default.join(backendDir, '.env.example');
67
+ await copyTemplateFile(envTemplatePath, envPath, replacements);
68
+ const envContent = await fs_extra_1.default.readFile(envPath, 'utf8');
69
+ const envExampleContent = stripEnvValues(envContent);
70
+ await fs_extra_1.default.outputFile(envExamplePath, envExampleContent);
71
+ }
19
72
  async function createProjectStructure(appName, answers) {
20
73
  const targetDir = node_path_1.default.join(process.cwd(), appName);
21
- // Use __dirname instead of import.meta.url
22
- const currentDir = __dirname;
23
- // When running from dist/, we need to go up one level to reach the project root
24
- const projectRoot = node_path_1.default.resolve(currentDir, '..');
25
- const templatesDir = node_path_1.default.join(projectRoot, 'src', 'templates');
26
- // Create directory structure
74
+ // __dirname points to the compiled output in dist/. If hidden files were omitted from dist/templates,
75
+ // fall back to src/templates to keep scaffolding reliable in test and CI environments.
76
+ const templatesDir = await resolveTemplatesDir(__dirname);
77
+ // Create monorepo directory structure
27
78
  await fs_extra_1.default.ensureDir(targetDir);
28
79
  await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, '.vscode'));
29
80
  await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, '.github'));
30
- await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'src', 'data'));
31
- await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'src', 'dataSources'));
32
- await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'src', 'actions'));
33
81
  await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'docs'));
34
- await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'src', 'datasets'));
35
- // Copy .vscode files from templates
82
+ // Create backend directory structure
83
+ const backendDir = node_path_1.default.join(targetDir, 'backend');
84
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(backendDir, 'src', 'data'));
85
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(backendDir, 'src', 'dataSources'));
86
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(backendDir, 'src', 'actions'));
87
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(backendDir, 'src', 'auth'));
88
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(backendDir, 'src', 'datasets'));
89
+ // Create frontend directory structure if frontend is enabled
90
+ const frontendDir = node_path_1.default.join(targetDir, 'frontend');
91
+ if (answers.hasFrontend) {
92
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(frontendDir, 'src', 'views', 'customViews'));
93
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(frontendDir, 'src', 'layouts'));
94
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(frontendDir, 'public'));
95
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(frontendDir, 'generated', 'gql'));
96
+ }
97
+ // Copy workspace-level files
36
98
  await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'vscode', 'extensions.json'), node_path_1.default.join(targetDir, '.vscode', 'extensions.json'));
37
99
  await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'vscode', 'settings.json'), node_path_1.default.join(targetDir, '.vscode', 'settings.json'));
38
- // Copy tsconfig.json from templates
39
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'config', 'tsconfig.json.template'), node_path_1.default.join(targetDir, 'tsconfig.json'));
40
- // Copy .gitignore from templates
41
100
  await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'config', '.gitignore'), node_path_1.default.join(targetDir, '.gitignore'));
42
- // Copy jest.config.ts from templates
43
- await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'config', 'jest.config.ts'), node_path_1.default.join(targetDir, 'jest.config.ts'));
44
- // Copy jest.setup.ts from templates
45
- await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'config', 'jest.setup.ts'), node_path_1.default.join(targetDir, 'jest.setup.ts'));
46
- // Copy and process src files from templates
101
+ await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, '.npmrc'), node_path_1.default.join(targetDir, '.npmrc'));
102
+ // Copy workspace package.json
103
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'workspace-package.json.template'), node_path_1.default.join(targetDir, 'package.json'), {
104
+ '{{APP_NAME}}': appName,
105
+ '{{DESCRIPTION}}': answers.description || 'A Slingr application',
106
+ });
107
+ // Copy pnpm workspace configuration
108
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'pnpm-workspace.yaml.template'), node_path_1.default.join(targetDir, 'pnpm-workspace.yaml'));
109
+ // Copy backend config files
110
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'config', 'tsconfig.json.template'), node_path_1.default.join(backendDir, 'tsconfig.json'));
111
+ await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'config', 'jest.config.ts'), node_path_1.default.join(backendDir, 'jest.config.ts'));
112
+ await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'config', 'jest.setup.ts'), node_path_1.default.join(backendDir, 'jest.setup.ts'));
113
+ // Determine datasource details based on database type FIRST (before copying templates)
114
+ const dbType = answers.database.toLowerCase();
115
+ let datasourceFile = 'mainDs';
116
+ // Copy and process backend src files from templates
117
+ // Include datasource replacements from the start
118
+ let appClassName = appName
119
+ .replace(/[^a-zA-Z0-9]+(.)/g, (_, chr) => chr.toUpperCase())
120
+ .replace(/^(.)/, (chr) => chr.toUpperCase());
121
+ // Ensure appClassName is a valid TypeScript identifier:
122
+ // - contains only [A-Za-z0-9_]
123
+ // - starts with [A-Za-z_]
124
+ // - is not empty
125
+ appClassName = appClassName.replace(/[^A-Za-z0-9_]/g, '');
126
+ appClassName = appClassName.replace(/^[^A-Za-z_]+/, '');
127
+ if (!appClassName || !/^[A-Za-z_]/.test(appClassName)) {
128
+ appClassName = `App${appClassName}`;
129
+ }
47
130
  const replacements = {
48
131
  '{{APP_NAME}}': appName,
132
+ '{{APP_CLASS_NAME}}': appClassName,
133
+ '{{DATASOURCE_NAME}}': 'mainDs',
134
+ '{{DATASOURCE_FILE}}': datasourceFile,
49
135
  };
50
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'index.ts'), node_path_1.default.join(targetDir, 'src', 'index.ts'), replacements);
136
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'App.ts.template'), node_path_1.default.join(backendDir, 'src', 'App.ts'), replacements);
51
137
  // Create actions index file
52
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'actions', 'index.ts.template'), node_path_1.default.join(targetDir, 'src', 'actions', 'index.ts'), replacements);
138
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'actions', 'index.ts.template'), node_path_1.default.join(backendDir, 'generated', 'actions', 'index.ts'), replacements);
139
+ // Create stub generated/views.ts so ts-node can preload it (via tsconfig ts-node.require)
140
+ // before type-checking model files. The CLI overwrites this with real content after generation.
141
+ const viewsStubPath = node_path_1.default.join(backendDir, 'generated', 'views.ts');
142
+ await fs_extra_1.default.outputFile(viewsStubPath, '// Auto-generated stub by Slingr CLI. Real content will be generated later.\nexport {};\n');
53
143
  // Create temporary @gql type declaration to avoid compilation errors
54
- await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'src', 'types'));
55
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'types', 'gql.d.ts.template'), node_path_1.default.join(targetDir, 'src', 'types', 'gql.d.ts'));
56
- // Determine datasource details based on database type
57
- const dbType = answers.database.toLowerCase();
58
- let datasourceName = '';
59
- let datasourceFile = '';
60
- switch (dbType) {
61
- case 'postgres':
62
- case 'postgresql':
63
- datasourceName = 'postgresDataSource';
64
- datasourceFile = 'postgres';
65
- break;
66
- case 'mysql':
67
- datasourceName = 'mysqlDataSource';
68
- datasourceFile = 'mysql';
69
- break;
70
- default:
71
- datasourceName = 'postgresDataSource';
72
- datasourceFile = 'postgres';
73
- }
144
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(backendDir, 'src', 'types'));
145
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'types', 'gql.d.ts.template'), node_path_1.default.join(backendDir, 'src', 'types', 'gql.d.ts'));
74
146
  // Copy the corresponding datasource template based on database type
75
147
  if (answers.hasBackend) {
76
148
  let templateFile = '';
@@ -79,75 +151,215 @@ async function createProjectStructure(appName, answers) {
79
151
  case 'postgres':
80
152
  case 'postgresql':
81
153
  templateFile = node_path_1.default.join(templatesDir, 'dataSources', 'postgres.ts.template');
82
- targetFile = node_path_1.default.join(targetDir, 'src', 'dataSources', 'postgres.ts');
154
+ targetFile = node_path_1.default.join(backendDir, 'src', 'dataSources', 'mainDs.ts');
83
155
  break;
84
156
  case 'mysql':
85
157
  templateFile = node_path_1.default.join(templatesDir, 'dataSources', 'mysql.ts.template');
86
- targetFile = node_path_1.default.join(targetDir, 'src', 'dataSources', 'mysql.ts');
158
+ targetFile = node_path_1.default.join(backendDir, 'src', 'dataSources', 'mainDs.ts');
87
159
  break;
88
160
  // Add more cases if there are more templates
89
161
  default:
90
162
  templateFile = node_path_1.default.join(templatesDir, 'dataSources', 'postgres.ts.template');
91
- targetFile = node_path_1.default.join(targetDir, 'src', 'dataSources', 'postgres.ts');
163
+ targetFile = node_path_1.default.join(backendDir, 'src', 'dataSources', 'mainDs.ts');
92
164
  }
93
165
  await copyTemplateFile(templateFile, targetFile, { '{{APP_NAME}}': appName });
166
+ // Copy User model template (authentication)
167
+ const authReplacements = {
168
+ '{{DATASOURCE_FILE}}': datasourceFile,
169
+ '{{DATASOURCE_NAME}}': 'mainDs',
170
+ '{{USER_UI_VIEW_REFS}}': answers.hasFrontend
171
+ ? ",\n defaultCreateView: 'UserCreateView',\n defaultEditView: 'UserEditView',\n defaultReadView: 'UserReadView'"
172
+ : '',
173
+ };
174
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'data', 'User.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'User.ts'), authReplacements);
175
+ // Copy permissions configuration template
176
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'auth', 'permissions.ts.template'), node_path_1.default.join(backendDir, 'src', 'auth', 'permissions.ts'));
177
+ // Create .env and .env.example from the same template
178
+ await createEnvFiles(templatesDir, backendDir, {
179
+ '{{APP_NAME}}': appName,
180
+ });
94
181
  }
95
182
  // Copy sample model files with datasource replacements
96
183
  if (answers.includeTemplates) {
97
184
  const modelReplacements = {
98
- '{{DATASOURCE_NAME}}': 'mainDs',
99
185
  '{{DATASOURCE_FILE}}': datasourceFile,
186
+ '{{DATASOURCE_NAME}}': 'mainDs',
100
187
  };
101
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Person.ts.template'), node_path_1.default.join(targetDir, 'src', 'data', 'Person.ts'), modelReplacements);
102
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Company.ts.template'), node_path_1.default.join(targetDir, 'src', 'data', 'Company.ts'), modelReplacements);
103
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'App.ts.template'), node_path_1.default.join(targetDir, 'src', 'data', 'App.ts'), modelReplacements);
104
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Address.ts.template'), node_path_1.default.join(targetDir, 'src', 'data', 'Address.ts'), modelReplacements);
188
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Person.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'Person.ts'), modelReplacements);
189
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Company.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'Company.ts'), modelReplacements);
190
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Address.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'Address.ts'), modelReplacements);
191
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'data', 'App.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'App.ts'), modelReplacements);
105
192
  // Copy test files
106
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Person.test.ts.template'), node_path_1.default.join(targetDir, 'src', 'data', 'Person.test.ts'));
107
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Models.test.ts.template'), node_path_1.default.join(targetDir, 'src', 'data', 'Models.test.ts'));
193
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Person.test.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'Person.test.ts'));
194
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Models.test.ts.template'), node_path_1.default.join(backendDir, 'src', 'data', 'Models.test.ts'));
108
195
  }
109
196
  // Copy templated .github/copilot-instructions.md
110
197
  await copyTemplateFile(node_path_1.default.join(templatesDir, '.github', 'copilot-instructions.md.template'), node_path_1.default.join(targetDir, '.github', 'copilot-instructions.md'), {
111
198
  '{{APP_NAME}}': appName,
112
- '{{APP_TYPE}}': answers.appType,
113
- '{{DESCRIPTION}}': answers.description,
199
+ '{{APP_TYPE}}': answers.appType || 'Slingr',
200
+ '{{DB_TYPE}}': answers.database,
201
+ '{{DESCRIPTION}}': answers.description || 'A Slingr application',
114
202
  '{{HAS_BACKEND}}': answers.hasBackend ? 'Yes' : 'No',
115
203
  '{{HAS_FRONTEND}}': answers.hasFrontend ? 'Yes' : 'No',
116
- '{{DB_TYPE}}': answers.database,
117
204
  });
118
- // Copy package.json template
205
+ // Copy backend package.json template
119
206
  const dbDriverDependency = answers.hasBackend
120
207
  ? answers.database === 'mysql'
121
208
  ? ',\n "mysql2": "^3.11.3"'
122
209
  : ',\n "pg": "^8.16.3"'
123
210
  : '';
124
- await copyTemplateFile(node_path_1.default.join(templatesDir, 'package.json.template'), node_path_1.default.join(targetDir, 'package.json'), {
211
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'package.json.template'), node_path_1.default.join(backendDir, 'package.json'), {
212
+ '{{APP_KEYWORD}}': (answers.appType || 'slingr').toLowerCase().replaceAll(/\s+/g, '-'),
125
213
  '{{APP_NAME}}': appName,
126
214
  '{{DB_DRIVER_DEPENDENCY}}': dbDriverDependency,
127
- '{{DESCRIPTION}}': answers.description,
128
- '{{APP_KEYWORD}}': answers.appType.toLowerCase().replaceAll(/\s+/g, '-'),
215
+ '{{DESCRIPTION}}': answers.description || 'A Slingr application',
129
216
  });
130
217
  // Copy docs/app-description.md template
131
218
  await copyTemplateFile(node_path_1.default.join(templatesDir, 'docs', 'app-description.md.template'), node_path_1.default.join(targetDir, 'docs', 'app-description.md'), {
132
219
  '{{APP_NAME}}': appName,
133
- '{{DESCRIPTION}}': answers.description,
134
- '{{APP_TYPE}}': answers.appType,
220
+ '{{APP_TYPE}}': answers.appType || 'Slingr',
221
+ '{{DB_TYPE}}': answers.database,
222
+ '{{DESCRIPTION}}': answers.description || 'A Slingr application',
135
223
  '{{HAS_BACKEND}}': answers.hasBackend ? 'Included' : 'Not included',
136
224
  '{{HAS_FRONTEND}}': answers.hasFrontend ? 'Included' : 'Not included',
137
- '{{DB_TYPE}}': answers.database,
138
225
  });
139
- // Copy dataset templates if backend is enabled and templates are included
140
- if (answers.hasBackend && answers.includeTemplates) {
226
+ // Copy dataset templates if backend is enabled
227
+ if (answers.hasBackend) {
141
228
  const dbType = answers.database.toLowerCase();
142
229
  const datasetSourcePath = node_path_1.default.join(templatesDir, 'datasets', `${dbType}-default`);
143
- const datasetTargetPath = node_path_1.default.join(targetDir, 'src', 'datasets', `${dbType}-default`);
230
+ const datasetTargetPath = node_path_1.default.join(backendDir, 'src', 'datasets', `${datasourceFile}-default`);
144
231
  // Create the dataset directory
145
232
  await fs_extra_1.default.ensureDir(datasetTargetPath);
146
- // Copy the JSONL templates without the .template extension
147
- await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'Person.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'Person.jsonl'));
148
- await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'Company.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'Company.jsonl'));
149
- await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'App.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'App.jsonl'));
150
- await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'Address.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'Address.jsonl'));
233
+ // Always copy User.jsonl (for authentication)
234
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'User.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'User.jsonl'));
235
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'instructions.md.template'), node_path_1.default.join(datasetTargetPath, 'instructions.md'));
236
+ // Copy .slingr-schema.json with timestamp
237
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, '.slingr-schema.json.template'), node_path_1.default.join(datasetTargetPath, '.slingr-schema.json'), {
238
+ '{{GENERATED_AT}}': new Date().toISOString(),
239
+ });
240
+ // Copy additional templates if includeTemplates is true
241
+ if (answers.includeTemplates) {
242
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'Person.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'Person.jsonl'));
243
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'Company.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'Company.jsonl'));
244
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'App.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'App.jsonl'));
245
+ await copyTemplateFile(node_path_1.default.join(datasetSourcePath, 'Address.jsonl.template'), node_path_1.default.join(datasetTargetPath, 'Address.jsonl'));
246
+ }
247
+ }
248
+ // Copy frontend files if frontend is enabled
249
+ if (answers.hasFrontend) {
250
+ // Copy frontend config files
251
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', 'tsconfig.json.template'), node_path_1.default.join(frontendDir, 'tsconfig.json'));
252
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', '.umirc.ts.template'), node_path_1.default.join(frontendDir, '.umirc.ts'));
253
+ // Copy frontend package.json
254
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', 'package.json.template'), node_path_1.default.join(frontendDir, 'package.json'), {
255
+ '{{APP_NAME}}': appName,
256
+ });
257
+ // Copy app.tsx with replacements
258
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', 'src', 'app.tsx.template'), node_path_1.default.join(frontendDir, 'src', 'app.tsx'), {
259
+ '{{APP_NAME}}': appName,
260
+ });
261
+ // Copy global.less (project-wide styles)
262
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', 'src', 'global.less.template'), node_path_1.default.join(frontendDir, 'src', 'global.less'));
263
+ // Copy welcome view
264
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', 'src', 'views', 'customViews', 'welcome.tsx.template'), node_path_1.default.join(frontendDir, 'src', 'views', 'customViews', 'welcome.tsx'), {
265
+ '{{APP_NAME}}': appName,
266
+ });
267
+ // Copy default User views (table + form views)
268
+ const userViewsTemplateDir = node_path_1.default.join(templatesDir, 'frontend', 'src', 'views', 'customViews', 'user');
269
+ const userViewsTargetDir = node_path_1.default.join(frontendDir, 'src', 'views', 'customViews', 'user');
270
+ await fs_extra_1.default.ensureDir(userViewsTargetDir);
271
+ for (const viewFile of ['UserTableView', 'UserCreateView', 'UserEditView', 'UserReadView']) {
272
+ await fs_extra_1.default.copy(node_path_1.default.join(userViewsTemplateDir, `${viewFile}.tsx.template`), node_path_1.default.join(userViewsTargetDir, `${viewFile}.tsx`));
273
+ }
274
+ // Copy main layout
275
+ await copyTemplateFile(node_path_1.default.join(templatesDir, 'frontend', 'src', 'layouts', 'MainLayout.tsx.template'), node_path_1.default.join(frontendDir, 'src', 'layouts', 'MainLayout.tsx'), {
276
+ '{{APP_NAME}}': appName,
277
+ });
278
+ // Copy logo
279
+ await fs_extra_1.default.copy(node_path_1.default.join(templatesDir, 'frontend', 'public', 'logo.svg'), node_path_1.default.join(frontendDir, 'public', 'logo.svg'));
151
280
  }
281
+ // Copy docker-compose.yml to root and backend
282
+ const dockerComposeReplacements = {
283
+ '{{APP_NAME}}': appName,
284
+ '{{DATASOURCE_NAME}}': datasourceFile,
285
+ };
286
+ // Simple template processing for docker-compose (handle conditionals)
287
+ let dockerComposeContent = await fs_extra_1.default.readFile(node_path_1.default.join(templatesDir, 'docker-compose.yml.template'), 'utf8');
288
+ // Process conditionals for database type
289
+ if (dbType === 'postgres' || dbType === 'postgresql') {
290
+ dockerComposeContent = dockerComposeContent
291
+ .replace(/\{\{#if_postgres\}\}/g, '')
292
+ .replace(/\{\{\/if_postgres\}\}/g, '')
293
+ .replace(/\{\{#if_mysql\}\}[\s\S]*?\{\{\/if_mysql\}\}/g, '');
294
+ }
295
+ else if (dbType === 'mysql') {
296
+ dockerComposeContent = dockerComposeContent
297
+ .replace(/\{\{#if_mysql\}\}/g, '')
298
+ .replace(/\{\{\/if_mysql\}\}/g, '')
299
+ .replace(/\{\{#if_postgres\}\}[\s\S]*?\{\{\/if_postgres\}\}/g, '');
300
+ }
301
+ // Apply standard replacements
302
+ for (const [placeholder, value] of Object.entries(dockerComposeReplacements)) {
303
+ dockerComposeContent = dockerComposeContent.replaceAll(placeholder, value);
304
+ }
305
+ // Write to both root and backend
306
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'docker-compose.yml'), dockerComposeContent);
307
+ await fs_extra_1.default.outputFile(node_path_1.default.join(backendDir, 'docker-compose.yml'), dockerComposeContent);
308
+ // ── GCP deployment files ────────────────────────────────────────────────────
309
+ const dbTypeName = dbType === 'mysql' ? 'MySQL 8' : 'PostgreSQL 15';
310
+ const dbUser = dbType === 'mysql' ? 'root' : 'postgres';
311
+ const opsReplacements = {
312
+ '{{APP_NAME}}': appName,
313
+ '{{DATASOURCE_NAME}}': datasourceFile,
314
+ '{{APP_DB_TYPE}}': dbTypeName,
315
+ '{{APP_DB_USER}}': dbUser,
316
+ };
317
+ // Helper: process db-type conditionals then apply replacements
318
+ const processOpsTemplate = async (templateName) => {
319
+ let content = await fs_extra_1.default.readFile(node_path_1.default.join(templatesDir, templateName), 'utf8');
320
+ if (dbType === 'postgres' || dbType === 'postgresql') {
321
+ content = content
322
+ .replace(/\{\{#if_postgres\}\}/g, '')
323
+ .replace(/\{\{\/if_postgres\}\}/g, '')
324
+ .replace(/\{\{#if_mysql\}\}[\s\S]*?\{\{\/if_mysql\}\}/g, '');
325
+ }
326
+ else if (dbType === 'mysql') {
327
+ content = content
328
+ .replace(/\{\{#if_mysql\}\}/g, '')
329
+ .replace(/\{\{\/if_mysql\}\}/g, '')
330
+ .replace(/\{\{#if_postgres\}\}[\s\S]*?\{\{\/if_postgres\}\}/g, '');
331
+ }
332
+ for (const [placeholder, value] of Object.entries(opsReplacements)) {
333
+ content = content.replaceAll(placeholder, value);
334
+ }
335
+ return content;
336
+ };
337
+ await fs_extra_1.default.ensureDir(node_path_1.default.join(targetDir, 'ops', 'scripts'));
338
+ const backendDockerfile = await processOpsTemplate('backend/Dockerfile.template');
339
+ await fs_extra_1.default.outputFile(node_path_1.default.join(backendDir, 'Dockerfile'), backendDockerfile);
340
+ const firebaseJson = await processOpsTemplate('firebase.json.template');
341
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'firebase.json'), firebaseJson);
342
+ await copyTemplateFile(node_path_1.default.join(templatesDir, '.firebaserc.template'), node_path_1.default.join(targetDir, '.firebaserc'));
343
+ const prodTestCompose = await processOpsTemplate('docker-compose.prod-test.yml.template');
344
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'docker-compose.prod-test.yml'), prodTestCompose);
345
+ const cloudbuildYaml = await processOpsTemplate('ops/cloudbuild.yaml.template');
346
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'cloudbuild.yaml'), cloudbuildYaml);
347
+ const scriptUtils = await processOpsTemplate('ops/scripts/_utils.js.template');
348
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'scripts', '_utils.js'), scriptUtils);
349
+ await fs_extra_1.default.chmod(node_path_1.default.join(targetDir, 'ops', 'scripts', '_utils.js'), 0o755);
350
+ const setupGcpJs = await processOpsTemplate('ops/scripts/setup-gcp.js.template');
351
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'scripts', 'setup-gcp.js'), setupGcpJs);
352
+ await fs_extra_1.default.chmod(node_path_1.default.join(targetDir, 'ops', 'scripts', 'setup-gcp.js'), 0o755);
353
+ const setupSecretsJs = await processOpsTemplate('ops/scripts/setup-secrets.js.template');
354
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'scripts', 'setup-secrets.js'), setupSecretsJs);
355
+ await fs_extra_1.default.chmod(node_path_1.default.join(targetDir, 'ops', 'scripts', 'setup-secrets.js'), 0o755);
356
+ const deployJs = await processOpsTemplate('ops/scripts/deploy.js.template');
357
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'scripts', 'deploy.js'), deployJs);
358
+ await fs_extra_1.default.chmod(node_path_1.default.join(targetDir, 'ops', 'scripts', 'deploy.js'), 0o755);
359
+ const testProdLocalJs = await processOpsTemplate('ops/scripts/test-prod-local.js.template');
360
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'scripts', 'test-prod-local.js'), testProdLocalJs);
361
+ await fs_extra_1.default.chmod(node_path_1.default.join(targetDir, 'ops', 'scripts', 'test-prod-local.js'), 0o755);
362
+ const opsReadme = await processOpsTemplate('ops/README.md.template');
363
+ await fs_extra_1.default.outputFile(node_path_1.default.join(targetDir, 'ops', 'README.md'), opsReadme);
152
364
  }
153
365
  //# sourceMappingURL=projectStructure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projectStructure.js","sourceRoot":"","sources":["../src/projectStructure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectStructure.js","sourceRoot":"","sources":["../src/projectStructure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script to generate model and action metadata at runtime.
4
+ *
5
+ * This script is executed in the context of a user's Slingr application
6
+ * (copied to backend/ and run via ts-node). It loads models and actions,
7
+ * then uses Reflect.getMetadata() to extract field relationship info and
8
+ * action configuration.
9
+ *
10
+ * Output: frontend/generated/gql/metadata.ts
11
+ */
12
+ export declare function generateMetadataFile(): Promise<void>;
13
+ //# sourceMappingURL=generate-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-metadata.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-metadata.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AA8TH,wBAAsB,oBAAoB,kBAyKzC"}