@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.
- package/LICENSE.txt +202 -0
- package/README.md +490 -319
- package/bin/dev.cmd +2 -2
- package/bin/dev.js +5 -5
- package/bin/run.cmd +2 -2
- package/bin/run.js +4 -4
- package/bin/slingr +1 -0
- package/dist/commands/build.d.ts +20 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +206 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/create-app.d.ts +0 -1
- package/dist/commands/create-app.d.ts.map +1 -1
- package/dist/commands/create-app.js +38 -57
- package/dist/commands/create-app.js.map +1 -1
- package/dist/commands/debug.d.ts +28 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +474 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/ds.d.ts +14 -1
- package/dist/commands/ds.d.ts.map +1 -1
- package/dist/commands/ds.js +450 -121
- package/dist/commands/ds.js.map +1 -1
- package/dist/commands/gql.d.ts +1 -1
- package/dist/commands/gql.d.ts.map +1 -1
- package/dist/commands/gql.js +190 -184
- package/dist/commands/gql.js.map +1 -1
- package/dist/commands/infra/down.d.ts.map +1 -1
- package/dist/commands/infra/down.js +8 -7
- package/dist/commands/infra/down.js.map +1 -1
- package/dist/commands/infra/up.d.ts.map +1 -1
- package/dist/commands/infra/up.js +8 -7
- package/dist/commands/infra/up.js.map +1 -1
- package/dist/commands/infra/update.d.ts +1 -0
- package/dist/commands/infra/update.d.ts.map +1 -1
- package/dist/commands/infra/update.js +33 -69
- package/dist/commands/infra/update.js.map +1 -1
- package/dist/commands/run.d.ts +29 -2
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +628 -130
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/setup.d.ts +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +34 -71
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/sync-metadata.d.ts +15 -0
- package/dist/commands/sync-metadata.d.ts.map +1 -0
- package/dist/commands/sync-metadata.js +225 -0
- package/dist/commands/sync-metadata.js.map +1 -0
- package/dist/commands/users.d.ts +30 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +472 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/commands/views.d.ts +11 -0
- package/dist/commands/views.d.ts.map +1 -0
- package/dist/commands/views.js +73 -0
- package/dist/commands/views.js.map +1 -0
- package/dist/projectStructure.d.ts +2 -2
- package/dist/projectStructure.d.ts.map +1 -1
- package/dist/projectStructure.js +281 -69
- package/dist/projectStructure.js.map +1 -1
- package/dist/scripts/generate-metadata.d.ts +13 -0
- package/dist/scripts/generate-metadata.d.ts.map +1 -0
- package/dist/scripts/generate-metadata.js +412 -0
- package/dist/scripts/generate-metadata.js.map +1 -0
- package/dist/scripts/generate-metadata.ts +498 -0
- package/dist/scripts/generate-schema.d.ts +1 -1
- package/dist/scripts/generate-schema.js +168 -74
- package/dist/scripts/generate-schema.js.map +1 -1
- package/dist/scripts/generate-schema.ts +258 -143
- package/dist/templates/.env.template +23 -0
- package/dist/templates/.firebaserc.template +5 -0
- package/dist/templates/.github/copilot-instructions.md.template +652 -17
- package/dist/templates/backend/Dockerfile.template +30 -0
- package/dist/templates/config/datasource.ts.template +12 -9
- package/dist/templates/config/jest.config.ts +30 -30
- package/dist/templates/config/jest.setup.ts +1 -1
- package/dist/templates/config/tsconfig.json.template +50 -29
- package/dist/templates/dataSources/mysql.ts.template +16 -13
- package/dist/templates/dataSources/postgres.ts.template +15 -13
- package/dist/templates/dataset-generator-script.ts.template +139 -139
- package/dist/templates/datasets/mysql-default/.slingr-schema.json.template +5 -0
- package/dist/templates/datasets/mysql-default/Address.jsonl.template +3 -3
- package/dist/templates/datasets/mysql-default/App.jsonl.template +4 -4
- package/dist/templates/datasets/mysql-default/Company.jsonl.template +3 -3
- package/dist/templates/datasets/mysql-default/Person.jsonl.template +2 -2
- package/dist/templates/datasets/mysql-default/User.jsonl.template +1 -0
- package/dist/templates/datasets/mysql-default/instructions.md.template +1 -0
- package/dist/templates/datasets/postgres-default/.slingr-schema.json.template +5 -0
- package/dist/templates/datasets/postgres-default/Address.jsonl.template +3 -3
- package/dist/templates/datasets/postgres-default/App.jsonl.template +4 -4
- package/dist/templates/datasets/postgres-default/Company.jsonl.template +3 -3
- package/dist/templates/datasets/postgres-default/Person.jsonl.template +2 -2
- package/dist/templates/datasets/postgres-default/User.jsonl.template +1 -0
- package/dist/templates/datasets/postgres-default/instructions.md.template +1 -0
- package/dist/templates/docker-compose.prod-test.yml.template +32 -0
- package/dist/templates/docker-compose.yml.template +24 -0
- package/dist/templates/docs/app-description.md.template +33 -33
- package/dist/templates/firebase.json.template +68 -0
- package/dist/templates/frontend/.umirc.ts.template +23 -0
- package/dist/templates/frontend/package.json.template +45 -0
- package/dist/templates/frontend/public/config.json +6 -0
- package/dist/templates/frontend/public/logo.svg +6 -0
- package/dist/templates/frontend/src/app.tsx.template +44 -0
- package/dist/templates/frontend/src/global.less.template +117 -0
- package/dist/templates/frontend/src/layouts/MainLayout.tsx.template +75 -0
- package/dist/templates/frontend/src/types/graphql-augmentation.d.ts.template +44 -0
- package/dist/templates/frontend/src/views/customViews/user/UserCreateView.tsx.template +18 -0
- package/dist/templates/frontend/src/views/customViews/user/UserEditView.tsx.template +29 -0
- package/dist/templates/frontend/src/views/customViews/user/UserReadView.tsx.template +24 -0
- package/dist/templates/frontend/src/views/customViews/user/UserTableView.tsx.template +38 -0
- package/dist/templates/frontend/src/views/customViews/welcome.tsx.template +34 -0
- package/dist/templates/frontend/tsconfig.json.template +50 -0
- package/dist/templates/gql/codegen.yml.template +25 -25
- package/dist/templates/gql/index.ts.template +17 -24
- package/dist/templates/gql/operations.graphql.template +30 -30
- package/dist/templates/ops/README.md.template +1045 -0
- package/dist/templates/ops/cloudbuild.yaml.template +161 -0
- package/dist/templates/ops/scripts/_utils.js.template +217 -0
- package/dist/templates/ops/scripts/deploy.js.template +145 -0
- package/dist/templates/ops/scripts/setup-gcp.js.template +330 -0
- package/dist/templates/ops/scripts/setup-secrets.js.template +76 -0
- package/dist/templates/ops/scripts/test-prod-local.js.template +49 -0
- package/dist/templates/package.json.template +50 -38
- package/dist/templates/pnpm-workspace.yaml.template +3 -0
- package/dist/templates/prompt-analysis.md.template +110 -110
- package/dist/templates/prompt-script-generation.md.template +258 -258
- package/dist/templates/src/Address.ts.template +28 -31
- package/dist/templates/src/App.ts.template +17 -61
- package/dist/templates/src/Company.ts.template +41 -47
- package/dist/templates/src/Models.test.ts.template +654 -654
- package/dist/templates/src/Person.test.ts.template +289 -289
- package/dist/templates/src/Person.ts.template +90 -105
- package/dist/templates/src/actions/index.ts.template +11 -11
- package/dist/templates/src/auth/permissions.ts.template +34 -0
- package/dist/templates/src/data/App.ts.template +48 -0
- package/dist/templates/src/data/User.ts.template +35 -0
- package/dist/templates/src/types/gql.d.ts.template +17 -17
- package/dist/templates/vscode/extensions.json +4 -3
- package/dist/templates/vscode/settings.json +17 -11
- package/dist/templates/workspace-package.json.template +21 -0
- package/dist/utils/buildCache.d.ts +12 -0
- package/dist/utils/buildCache.d.ts.map +1 -0
- package/dist/utils/buildCache.js +102 -0
- package/dist/utils/buildCache.js.map +1 -0
- package/dist/utils/checkFramework.d.ts +27 -0
- package/dist/utils/checkFramework.d.ts.map +1 -0
- package/dist/utils/checkFramework.js +104 -0
- package/dist/utils/checkFramework.js.map +1 -0
- package/dist/utils/datasourceParser.d.ts +11 -0
- package/dist/utils/datasourceParser.d.ts.map +1 -1
- package/dist/utils/datasourceParser.js +154 -56
- package/dist/utils/datasourceParser.js.map +1 -1
- package/dist/utils/dockerManager.d.ts +25 -0
- package/dist/utils/dockerManager.d.ts.map +1 -0
- package/dist/utils/dockerManager.js +281 -0
- package/dist/utils/dockerManager.js.map +1 -0
- package/dist/utils/infraFileParser.d.ts +26 -0
- package/dist/utils/infraFileParser.d.ts.map +1 -0
- package/dist/utils/infraFileParser.js +75 -0
- package/dist/utils/infraFileParser.js.map +1 -0
- package/dist/utils/jsonlLoader.d.ts +91 -12
- package/dist/utils/jsonlLoader.d.ts.map +1 -1
- package/dist/utils/jsonlLoader.js +674 -63
- package/dist/utils/jsonlLoader.js.map +1 -1
- package/dist/utils/model-analyzer.d.ts.map +1 -1
- package/dist/utils/model-analyzer.js +67 -13
- package/dist/utils/model-analyzer.js.map +1 -1
- package/dist/utils/userManagement.d.ts +57 -0
- package/dist/utils/userManagement.d.ts.map +1 -0
- package/dist/utils/userManagement.js +288 -0
- package/dist/utils/userManagement.js.map +1 -0
- package/dist/utils/viewsGenerator.d.ts +15 -0
- package/dist/utils/viewsGenerator.d.ts.map +1 -0
- package/dist/utils/viewsGenerator.js +311 -0
- package/dist/utils/viewsGenerator.js.map +1 -0
- package/oclif.manifest.json +445 -20
- package/package.json +29 -26
- package/src/templates/.env.template +23 -0
- package/src/templates/.firebaserc.template +5 -0
- package/src/templates/.github/copilot-instructions.md.template +652 -17
- package/src/templates/backend/Dockerfile.template +30 -0
- package/src/templates/config/datasource.ts.template +12 -9
- package/src/templates/config/jest.config.ts +30 -30
- package/src/templates/config/jest.setup.ts +1 -1
- package/src/templates/config/tsconfig.json.template +50 -29
- package/src/templates/dataSources/mysql.ts.template +16 -13
- package/src/templates/dataSources/postgres.ts.template +15 -13
- package/src/templates/dataset-generator-script.ts.template +139 -139
- package/src/templates/datasets/mysql-default/.slingr-schema.json.template +5 -0
- package/src/templates/datasets/mysql-default/Address.jsonl.template +3 -3
- package/src/templates/datasets/mysql-default/App.jsonl.template +4 -4
- package/src/templates/datasets/mysql-default/Company.jsonl.template +3 -3
- package/src/templates/datasets/mysql-default/Person.jsonl.template +2 -2
- package/src/templates/datasets/mysql-default/User.jsonl.template +1 -0
- package/src/templates/datasets/mysql-default/instructions.md.template +1 -0
- package/src/templates/datasets/postgres-default/.slingr-schema.json.template +5 -0
- package/src/templates/datasets/postgres-default/Address.jsonl.template +3 -3
- package/src/templates/datasets/postgres-default/App.jsonl.template +4 -4
- package/src/templates/datasets/postgres-default/Company.jsonl.template +3 -3
- package/src/templates/datasets/postgres-default/Person.jsonl.template +2 -2
- package/src/templates/datasets/postgres-default/User.jsonl.template +1 -0
- package/src/templates/datasets/postgres-default/instructions.md.template +1 -0
- package/src/templates/docker-compose.prod-test.yml.template +32 -0
- package/src/templates/docker-compose.yml.template +24 -0
- package/src/templates/docs/app-description.md.template +33 -33
- package/src/templates/firebase.json.template +68 -0
- package/src/templates/frontend/.umirc.ts.template +23 -0
- package/src/templates/frontend/package.json.template +45 -0
- package/src/templates/frontend/public/config.json +6 -0
- package/src/templates/frontend/public/logo.svg +6 -0
- package/src/templates/frontend/src/app.tsx.template +44 -0
- package/src/templates/frontend/src/global.less.template +117 -0
- package/src/templates/frontend/src/layouts/MainLayout.tsx.template +75 -0
- package/src/templates/frontend/src/types/graphql-augmentation.d.ts.template +44 -0
- package/src/templates/frontend/src/views/customViews/user/UserCreateView.tsx.template +18 -0
- package/src/templates/frontend/src/views/customViews/user/UserEditView.tsx.template +29 -0
- package/src/templates/frontend/src/views/customViews/user/UserReadView.tsx.template +24 -0
- package/src/templates/frontend/src/views/customViews/user/UserTableView.tsx.template +38 -0
- package/src/templates/frontend/src/views/customViews/welcome.tsx.template +34 -0
- package/src/templates/frontend/tsconfig.json.template +50 -0
- package/src/templates/gql/codegen.yml.template +25 -25
- package/src/templates/gql/index.ts.template +17 -24
- package/src/templates/gql/operations.graphql.template +30 -30
- package/src/templates/ops/README.md.template +1045 -0
- package/src/templates/ops/cloudbuild.yaml.template +161 -0
- package/src/templates/ops/scripts/_utils.js.template +217 -0
- package/src/templates/ops/scripts/deploy.js.template +145 -0
- package/src/templates/ops/scripts/setup-gcp.js.template +330 -0
- package/src/templates/ops/scripts/setup-secrets.js.template +76 -0
- package/src/templates/ops/scripts/test-prod-local.js.template +49 -0
- package/src/templates/package.json.template +50 -38
- package/src/templates/pnpm-workspace.yaml.template +3 -0
- package/src/templates/prompt-analysis.md.template +110 -110
- package/src/templates/prompt-script-generation.md.template +258 -258
- package/src/templates/src/Address.ts.template +28 -31
- package/src/templates/src/App.ts.template +17 -61
- package/src/templates/src/Company.ts.template +41 -47
- package/src/templates/src/Models.test.ts.template +654 -654
- package/src/templates/src/Person.test.ts.template +289 -289
- package/src/templates/src/Person.ts.template +90 -105
- package/src/templates/src/actions/index.ts.template +11 -11
- package/src/templates/src/auth/permissions.ts.template +34 -0
- package/src/templates/src/data/App.ts.template +48 -0
- package/src/templates/src/data/User.ts.template +35 -0
- package/src/templates/src/types/gql.d.ts.template +17 -17
- package/src/templates/vscode/extensions.json +4 -3
- package/src/templates/vscode/settings.json +17 -11
- package/src/templates/workspace-package.json.template +21 -0
- package/dist/templates/src/index.ts +0 -66
- package/src/templates/src/index.ts +0 -66
package/dist/projectStructure.js
CHANGED
|
@@ -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
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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', '
|
|
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(
|
|
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(
|
|
55
|
-
await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'types', 'gql.d.ts.template'), node_path_1.default.join(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
102
|
-
await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Company.ts.template'), node_path_1.default.join(
|
|
103
|
-
await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', '
|
|
104
|
-
await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', '
|
|
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(
|
|
107
|
-
await copyTemplateFile(node_path_1.default.join(templatesDir, 'src', 'Models.test.ts.template'), node_path_1.default.join(
|
|
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
|
-
'{{
|
|
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(
|
|
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
|
-
'{{
|
|
134
|
-
'{{
|
|
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
|
|
140
|
-
if (answers.hasBackend
|
|
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(
|
|
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
|
-
//
|
|
147
|
-
await copyTemplateFile(node_path_1.default.join(datasetSourcePath, '
|
|
148
|
-
await copyTemplateFile(node_path_1.default.join(datasetSourcePath, '
|
|
149
|
-
|
|
150
|
-
await copyTemplateFile(node_path_1.default.join(datasetSourcePath, '
|
|
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"}
|