@slingr/cli 0.0.2 ā 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 -27
- 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
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const datasourceParser_js_1 = require("../utils/datasourceParser.js");
|
|
11
|
+
const checkFramework_js_1 = require("../utils/checkFramework.js");
|
|
12
|
+
const portChecker_js_1 = require("../utils/portChecker.js");
|
|
13
|
+
const viewsGenerator_js_1 = require("../utils/viewsGenerator.js");
|
|
14
|
+
const buildCache_js_1 = require("../utils/buildCache.js");
|
|
15
|
+
class Debug extends core_1.Command {
|
|
16
|
+
static description = 'Run a Slingr application locally with Node.js debugging enabled.\n\n' +
|
|
17
|
+
'Behaves exactly like "slingr run" but starts the backend with the Node.js inspector. ' +
|
|
18
|
+
'Use --dev for hot-reload development mode (ts-node + UI dev server, both with debugger).\n' +
|
|
19
|
+
'Without --dev, runs in production mode (compiled backend, static UI, single port).';
|
|
20
|
+
static examples = [
|
|
21
|
+
'<%= config.bin %> <%= command.id %>',
|
|
22
|
+
'<%= config.bin %> <%= command.id %> --skip-infra',
|
|
23
|
+
'<%= config.bin %> <%= command.id %> --inspect-brk',
|
|
24
|
+
'<%= config.bin %> <%= command.id %> --inspect-port 9230',
|
|
25
|
+
'<%= config.bin %> <%= command.id %> --dev',
|
|
26
|
+
'<%= config.bin %> <%= command.id %> --dev --inspect-brk',
|
|
27
|
+
];
|
|
28
|
+
static flags = {
|
|
29
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
30
|
+
dev: core_1.Flags.boolean({
|
|
31
|
+
char: 'd',
|
|
32
|
+
description: 'Run in development mode with hot-reload (ts-node + UI dev server). ' +
|
|
33
|
+
'The debugger is attached via NODE_OPTIONS.',
|
|
34
|
+
required: false,
|
|
35
|
+
}),
|
|
36
|
+
'inspect-brk': core_1.Flags.boolean({
|
|
37
|
+
char: 'b',
|
|
38
|
+
default: false,
|
|
39
|
+
description: 'Break before user code starts (--inspect-brk)',
|
|
40
|
+
required: false,
|
|
41
|
+
}),
|
|
42
|
+
'inspect-port': core_1.Flags.integer({
|
|
43
|
+
char: 'p',
|
|
44
|
+
default: 9229,
|
|
45
|
+
description: 'Port for Node.js debugger (default: 9229)',
|
|
46
|
+
required: false,
|
|
47
|
+
}),
|
|
48
|
+
'skip-infra': core_1.Flags.boolean({
|
|
49
|
+
char: 'i',
|
|
50
|
+
description: 'Skip infrastructure setup and checks',
|
|
51
|
+
required: false,
|
|
52
|
+
}),
|
|
53
|
+
port: core_1.Flags.integer({
|
|
54
|
+
description: 'Custom port for the server (default: 3000)',
|
|
55
|
+
required: false,
|
|
56
|
+
}),
|
|
57
|
+
verbose: core_1.Flags.boolean({
|
|
58
|
+
char: 'v',
|
|
59
|
+
description: 'Show detailed build and setup output',
|
|
60
|
+
required: false,
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
verbose = false;
|
|
64
|
+
vlog(msg) {
|
|
65
|
+
if (this.verbose) {
|
|
66
|
+
this.log(msg);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async run() {
|
|
70
|
+
const { flags } = await this.parse(Debug);
|
|
71
|
+
this.verbose = flags.verbose ?? false;
|
|
72
|
+
process.env.SLINGR_VERBOSE = this.verbose ? 'true' : 'false';
|
|
73
|
+
try {
|
|
74
|
+
// Check if we're in a Slingr app directory
|
|
75
|
+
const packageJsonPath = node_path_1.default.join(process.cwd(), 'package.json');
|
|
76
|
+
if (!(await fs_extra_1.default.pathExists(packageJsonPath))) {
|
|
77
|
+
this.error("Not in a Slingr application directory. Please run this command from your app's root directory.");
|
|
78
|
+
}
|
|
79
|
+
if (!(await (0, checkFramework_js_1.hasSlingrFramework)())) {
|
|
80
|
+
this.error('This directory does not contain a Slingr application.');
|
|
81
|
+
}
|
|
82
|
+
const backendPath = (0, checkFramework_js_1.getBackendPath)();
|
|
83
|
+
const srcMainPath = node_path_1.default.join(backendPath, 'src', 'App.ts');
|
|
84
|
+
if (!(await fs_extra_1.default.pathExists(srcMainPath))) {
|
|
85
|
+
this.error('backend/src/App.ts not found. This does not appear to be a valid Slingr application.');
|
|
86
|
+
}
|
|
87
|
+
if (flags.dev) {
|
|
88
|
+
await this.runDevMode(flags);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Identical preparation to `slingr run` (default unified mode)
|
|
92
|
+
await this.buildFramework();
|
|
93
|
+
await (0, viewsGenerator_js_1.generateViewsContext)(process.cwd(), this.verbose);
|
|
94
|
+
await this.buildUI();
|
|
95
|
+
await this.generateCode();
|
|
96
|
+
if (!flags['skip-infra']) {
|
|
97
|
+
await this.checkInfrastructure();
|
|
98
|
+
}
|
|
99
|
+
await this.executeApp(flags['inspect-port'], flags['inspect-brk'], flags.port);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
this.error(error.message);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// ---------- Adapted from run.ts ----------
|
|
107
|
+
async resolveUiPath() {
|
|
108
|
+
const frontendDistPath = node_path_1.default.join(process.cwd(), 'frontend', 'dist');
|
|
109
|
+
if (await fs_extra_1.default.pathExists(node_path_1.default.join(frontendDistPath, 'index.html'))) {
|
|
110
|
+
return { path: frontendDistPath, exists: true };
|
|
111
|
+
}
|
|
112
|
+
return { path: frontendDistPath, exists: false };
|
|
113
|
+
}
|
|
114
|
+
async buildFramework() {
|
|
115
|
+
try {
|
|
116
|
+
require.resolve('@slingr/framework-backend');
|
|
117
|
+
this.vlog('ā
@slingr/framework-backend is available');
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
const nodeModulesPath = node_path_1.default.join(process.cwd(), 'node_modules', '@slingr-framework');
|
|
121
|
+
if (!(await fs_extra_1.default.pathExists(nodeModulesPath))) {
|
|
122
|
+
this.error('@slingr/framework-backend not found. Please run npm install.');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async buildUI() {
|
|
127
|
+
const frontendPath = node_path_1.default.join(process.cwd(), 'frontend');
|
|
128
|
+
if (!(await fs_extra_1.default.pathExists(frontendPath))) {
|
|
129
|
+
this.error('Frontend directory not found.\n\nExpected frontend directory at: ' + frontendPath);
|
|
130
|
+
}
|
|
131
|
+
const frontendPackageJson = node_path_1.default.join(frontendPath, 'package.json');
|
|
132
|
+
if (!(await fs_extra_1.default.pathExists(frontendPackageJson))) {
|
|
133
|
+
this.error('Frontend package.json not found.\n\nExpected at: ' + frontendPackageJson);
|
|
134
|
+
}
|
|
135
|
+
const uiInfo = await this.resolveUiPath();
|
|
136
|
+
if (uiInfo.exists) {
|
|
137
|
+
this.vlog('ā
Using pre-built UI from frontend/dist');
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.vlog('š¦ Building frontend...');
|
|
141
|
+
try {
|
|
142
|
+
(0, node_child_process_1.execSync)('npm run build', { stdio: this.verbose ? 'inherit' : 'pipe', cwd: frontendPath });
|
|
143
|
+
this.vlog('ā
Frontend built successfully');
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const detail = error?.stderr ? `\n${error.stderr.toString()}` : '';
|
|
147
|
+
this.error(`Failed to build frontend: ${error.message}${detail}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
await this.copyUIToBackend();
|
|
151
|
+
}
|
|
152
|
+
async copyUIToBackend() {
|
|
153
|
+
const frontendDistPath = node_path_1.default.join(process.cwd(), 'frontend', 'dist');
|
|
154
|
+
const backendPath = (0, checkFramework_js_1.getBackendPath)();
|
|
155
|
+
const backendUiPath = node_path_1.default.join(backendPath, 'dist', 'ui');
|
|
156
|
+
if (!(await fs_extra_1.default.pathExists(frontendDistPath))) {
|
|
157
|
+
this.error('Frontend build not found.\n\nExpected at: ' + frontendDistPath);
|
|
158
|
+
}
|
|
159
|
+
this.vlog('š Copying UI to backend/dist/ui...');
|
|
160
|
+
try {
|
|
161
|
+
await fs_extra_1.default.remove(backendUiPath);
|
|
162
|
+
await fs_extra_1.default.ensureDir(node_path_1.default.join(backendPath, 'dist'));
|
|
163
|
+
await fs_extra_1.default.copy(frontendDistPath, backendUiPath);
|
|
164
|
+
this.vlog('ā
UI copied to backend successfully');
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.error(`Failed to copy UI to backend: ${error.message}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async generateCode() {
|
|
171
|
+
const cwd = process.cwd();
|
|
172
|
+
const backendPath = (0, checkFramework_js_1.getBackendPath)();
|
|
173
|
+
const compileUpToDate = await (0, buildCache_js_1.isUpToDate)({
|
|
174
|
+
cwd,
|
|
175
|
+
sourceGlobs: ['backend/src/**/*.ts', 'backend/package-lock.json'],
|
|
176
|
+
outputFiles: ['backend/dist/src/App.js'],
|
|
177
|
+
});
|
|
178
|
+
if (compileUpToDate) {
|
|
179
|
+
this.vlog('ā
Backend compilation up-to-date, skipping');
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this.vlog('Compiling TypeScript code...');
|
|
183
|
+
try {
|
|
184
|
+
await fs_extra_1.default.remove(node_path_1.default.join(backendPath, 'dist', 'src'));
|
|
185
|
+
await fs_extra_1.default.remove(node_path_1.default.join(backendPath, 'dist', 'generated'));
|
|
186
|
+
(0, node_child_process_1.execSync)('npm run build', { stdio: this.verbose ? 'inherit' : 'pipe', cwd: backendPath });
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
const detail = error?.stderr ? `\n${error.stderr.toString()}` : '';
|
|
190
|
+
this.error(`TypeScript compilation failed: ${error.message}${detail}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const schemaUpToDate = await (0, buildCache_js_1.isUpToDate)({
|
|
194
|
+
cwd,
|
|
195
|
+
sourceGlobs: [
|
|
196
|
+
'backend/src/data/**/*.ts',
|
|
197
|
+
'backend/src/dataSources/**/*.ts',
|
|
198
|
+
'backend/src/actions/**/*.ts',
|
|
199
|
+
'backend/package-lock.json',
|
|
200
|
+
],
|
|
201
|
+
outputFiles: ['backend/generated/gql/schema.graphql'],
|
|
202
|
+
});
|
|
203
|
+
const sdkUpToDate = await (0, buildCache_js_1.isUpToDate)({
|
|
204
|
+
cwd,
|
|
205
|
+
sourceGlobs: ['backend/generated/gql/schema.graphql'],
|
|
206
|
+
outputFiles: ['frontend/generated/gql/types.ts'],
|
|
207
|
+
});
|
|
208
|
+
try {
|
|
209
|
+
if (!schemaUpToDate) {
|
|
210
|
+
this.vlog('Generating GraphQL schema and SDK...');
|
|
211
|
+
await this.config.runCommand('gql', ['generate-schema']);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this.vlog('ā
GraphQL schema up-to-date, skipping');
|
|
215
|
+
}
|
|
216
|
+
const sdkShouldRun = !schemaUpToDate || !sdkUpToDate;
|
|
217
|
+
if (sdkShouldRun) {
|
|
218
|
+
if (schemaUpToDate) {
|
|
219
|
+
this.vlog('Generating GraphQL SDK...');
|
|
220
|
+
}
|
|
221
|
+
await this.config.runCommand('gql', ['generate-sdk']);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.vlog('ā
GraphQL SDK up-to-date, skipping');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
this.warn(`Warning: Failed to generate GraphQL artifacts: ${error.message}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async checkInfrastructure() {
|
|
232
|
+
const dataSources = await this.loadDataSources();
|
|
233
|
+
try {
|
|
234
|
+
(0, node_child_process_1.execSync)('docker --version', { stdio: 'pipe' });
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
this.error('Docker is not installed. Please install Docker to run infrastructure services.');
|
|
238
|
+
}
|
|
239
|
+
const { ensureDockerIsRunning } = await import('../utils/dockerManager.js');
|
|
240
|
+
try {
|
|
241
|
+
await ensureDockerIsRunning('slingr debug');
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
this.error(error.message);
|
|
245
|
+
}
|
|
246
|
+
await this.checkPortAvailability();
|
|
247
|
+
await this.config.runCommand('infra:update', ['--all']);
|
|
248
|
+
this.vlog('Starting infrastructure services...');
|
|
249
|
+
try {
|
|
250
|
+
(0, node_child_process_1.execSync)('docker compose up -d', { stdio: this.verbose ? 'inherit' : 'pipe' });
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
this.error('Failed to start Docker services. This might be due to port conflicts or other Docker issues.');
|
|
254
|
+
}
|
|
255
|
+
this.vlog('Waiting for services to be ready...');
|
|
256
|
+
for (const ds of dataSources) {
|
|
257
|
+
const serviceName = `${ds.name}-db`;
|
|
258
|
+
let attempts = 0;
|
|
259
|
+
const maxAttempts = 30;
|
|
260
|
+
if (this.verbose) {
|
|
261
|
+
process.stdout.write(`Checking ${serviceName}... `);
|
|
262
|
+
}
|
|
263
|
+
while (attempts < maxAttempts) {
|
|
264
|
+
try {
|
|
265
|
+
const containerInfo = (0, node_child_process_1.execSync)(`docker ps -f name=${serviceName} --format '{{.Status}}'`, {
|
|
266
|
+
encoding: 'utf-8',
|
|
267
|
+
});
|
|
268
|
+
if (containerInfo.includes('healthy')) {
|
|
269
|
+
if (this.verbose) {
|
|
270
|
+
console.log('ā
');
|
|
271
|
+
}
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch { }
|
|
276
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
277
|
+
attempts++;
|
|
278
|
+
}
|
|
279
|
+
if (attempts === maxAttempts) {
|
|
280
|
+
this.warn(`Service ${serviceName} is not reporting healthy yet.`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
async checkPortAvailability() {
|
|
285
|
+
this.vlog('Checking port availability for datasources...');
|
|
286
|
+
const dataSourcePorts = await (0, datasourceParser_js_1.extractDataSourcePorts)();
|
|
287
|
+
if (dataSourcePorts.length === 0) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const ports = dataSourcePorts.map(ds => ds.port);
|
|
291
|
+
const portUsage = await (0, portChecker_js_1.checkPortsUsage)(ports);
|
|
292
|
+
const conflictingPorts = portUsage.filter(p => p.inUse && !p.isProjectDocker);
|
|
293
|
+
if (conflictingPorts.length > 0) {
|
|
294
|
+
this.log('ā ļø Port conflicts detected!');
|
|
295
|
+
this.log('');
|
|
296
|
+
for (const conflictPort of conflictingPorts) {
|
|
297
|
+
const dataSource = dataSourcePorts.find(ds => ds.port === conflictPort.port);
|
|
298
|
+
if (dataSource) {
|
|
299
|
+
this.log(`ā Port ${conflictPort.port} is already in use (required by ${dataSource.fileName})`);
|
|
300
|
+
this.log(` Database type: ${dataSource.type}`);
|
|
301
|
+
if (conflictPort.process) {
|
|
302
|
+
this.log(` Currently used by: ${conflictPort.process}`);
|
|
303
|
+
}
|
|
304
|
+
const alternativePort = await (0, portChecker_js_1.findAvailablePort)(conflictPort.port + 1, 10);
|
|
305
|
+
if (alternativePort) {
|
|
306
|
+
this.log(` š” Suggested alternative: port ${alternativePort}`);
|
|
307
|
+
}
|
|
308
|
+
this.log('');
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
this.log('š” Solutions:');
|
|
312
|
+
this.log('1. Stop the processes using these ports');
|
|
313
|
+
this.log('2. Update your datasource files to use different ports');
|
|
314
|
+
this.log('3. Use --skip-infra flag to run without infrastructure');
|
|
315
|
+
this.log('');
|
|
316
|
+
this.error('Cannot start infrastructure due to port conflicts. Please resolve the port conflicts above.');
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
this.vlog('ā
All required ports are available');
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// ---------- Dev mode (mirrors run.ts --dev but injects NODE_OPTIONS debugger) ----------
|
|
323
|
+
async runDevMode(flags) {
|
|
324
|
+
const inspectPort = flags['inspect-port'];
|
|
325
|
+
const inspectBrk = flags['inspect-brk'];
|
|
326
|
+
const inspectFlag = inspectBrk ? `--inspect-brk=${inspectPort}` : `--inspect=${inspectPort}`;
|
|
327
|
+
this.log('š Starting in development mode with Node.js debugger...');
|
|
328
|
+
this.log(`š Debugger listening on port ${inspectPort}`);
|
|
329
|
+
this.log('');
|
|
330
|
+
await this.buildFramework();
|
|
331
|
+
await (0, viewsGenerator_js_1.generateViewsContext)(process.cwd(), this.verbose);
|
|
332
|
+
await this.generateCode();
|
|
333
|
+
if (!flags['skip-infra']) {
|
|
334
|
+
await this.checkInfrastructure();
|
|
335
|
+
}
|
|
336
|
+
const backendPort = flags.port || 3000;
|
|
337
|
+
const uiPort = 8000;
|
|
338
|
+
const frontendPath = node_path_1.default.join(process.cwd(), 'frontend');
|
|
339
|
+
if (!(await fs_extra_1.default.pathExists(node_path_1.default.join(frontendPath, 'package.json')))) {
|
|
340
|
+
this.error('Frontend directory not found. Cannot run in development mode.\n\n' +
|
|
341
|
+
'Expected frontend directory at: ' +
|
|
342
|
+
frontendPath);
|
|
343
|
+
}
|
|
344
|
+
this.log('ā¹ļø Starting development servers:');
|
|
345
|
+
this.log(` ⢠Backend with hot-reload + debugger on port ${backendPort} (inspector: ${inspectPort})`);
|
|
346
|
+
this.log(` ⢠UI dev server on port ${uiPort}`);
|
|
347
|
+
this.log('');
|
|
348
|
+
this.log('š” To attach a debugger:');
|
|
349
|
+
this.log(' - VS Code: Use "Attach to Process" debug configuration');
|
|
350
|
+
this.log(' - Chrome DevTools: Navigate to chrome://inspect');
|
|
351
|
+
this.log('');
|
|
352
|
+
const backendPath = (0, checkFramework_js_1.getBackendPath)();
|
|
353
|
+
const backendEnv = {
|
|
354
|
+
...process.env,
|
|
355
|
+
PORT: backendPort.toString(),
|
|
356
|
+
SLINGR_SKIP_UI: 'true',
|
|
357
|
+
LOG_LEVEL: this.verbose ? 'debug' : process.env.LOG_LEVEL || 'info',
|
|
358
|
+
// Inject the inspector via NODE_OPTIONS so ts-node picks it up
|
|
359
|
+
NODE_OPTIONS: `${process.env.NODE_OPTIONS ?? ''} ${inspectFlag}`.trim(),
|
|
360
|
+
};
|
|
361
|
+
this.vlog('š§ Starting backend server with debugger...');
|
|
362
|
+
const backendProcess = (0, node_child_process_1.spawn)('npm', ['run', 'dev'], {
|
|
363
|
+
stdio: 'inherit',
|
|
364
|
+
cwd: backendPath,
|
|
365
|
+
env: backendEnv,
|
|
366
|
+
shell: true,
|
|
367
|
+
});
|
|
368
|
+
// Wait for backend to initialise before starting UI
|
|
369
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
370
|
+
this.vlog('šØ Starting UI development server...');
|
|
371
|
+
const uiProcess = (0, node_child_process_1.spawn)('npm', ['run', 'dev'], {
|
|
372
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
373
|
+
cwd: frontendPath,
|
|
374
|
+
env: { ...process.env, PORT: uiPort.toString() },
|
|
375
|
+
shell: true,
|
|
376
|
+
});
|
|
377
|
+
// Filter noisy UmiJS startup messages
|
|
378
|
+
const umiNoise = /ä½ ē„éå|Using mako@|Mako is an extremely fast/;
|
|
379
|
+
const forwardStream = (src, dest) => {
|
|
380
|
+
src.on('data', (chunk) => {
|
|
381
|
+
const text = chunk.toString();
|
|
382
|
+
const filtered = text
|
|
383
|
+
.split('\n')
|
|
384
|
+
.filter(line => !umiNoise.test(line))
|
|
385
|
+
.join('\n');
|
|
386
|
+
if (filtered.trim() || text.endsWith('\n')) {
|
|
387
|
+
dest.write(filtered.endsWith('\n') || !filtered ? filtered : filtered + '\n');
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
};
|
|
391
|
+
forwardStream(uiProcess.stdout, process.stdout);
|
|
392
|
+
forwardStream(uiProcess.stderr, process.stderr);
|
|
393
|
+
// Graceful shutdown
|
|
394
|
+
let isShuttingDown = false;
|
|
395
|
+
const cleanup = async () => {
|
|
396
|
+
if (isShuttingDown) {
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
isShuttingDown = true;
|
|
400
|
+
this.log('\nš Shutting down debug servers...');
|
|
401
|
+
try {
|
|
402
|
+
backendProcess.kill('SIGTERM');
|
|
403
|
+
uiProcess.kill('SIGTERM');
|
|
404
|
+
}
|
|
405
|
+
catch { }
|
|
406
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
407
|
+
process.exit(0);
|
|
408
|
+
};
|
|
409
|
+
process.on('SIGINT', cleanup);
|
|
410
|
+
process.on('SIGTERM', cleanup);
|
|
411
|
+
process.on('exit', cleanup);
|
|
412
|
+
// Keep process alive
|
|
413
|
+
await new Promise(() => { });
|
|
414
|
+
}
|
|
415
|
+
// ---------- Debug-specific: same as run.executeApp but with --inspect ----------
|
|
416
|
+
async executeApp(inspectPort, inspectBrk, appPort) {
|
|
417
|
+
const backendPath = (0, checkFramework_js_1.getBackendPath)();
|
|
418
|
+
const mainJsPath = node_path_1.default.join(backendPath, 'dist', 'src', 'App.js');
|
|
419
|
+
if (!(await fs_extra_1.default.pathExists(mainJsPath))) {
|
|
420
|
+
this.error('Compiled backend not found at: ' + mainJsPath + '\n\nPlease ensure the backend was compiled successfully.');
|
|
421
|
+
}
|
|
422
|
+
const inspectFlag = inspectBrk ? `--inspect-brk=${inspectPort}` : `--inspect=${inspectPort}`;
|
|
423
|
+
const command = `node ${inspectFlag} dist/src/App.js`;
|
|
424
|
+
const env = { ...process.env };
|
|
425
|
+
env.LOG_LEVEL = this.verbose ? 'debug' : process.env.LOG_LEVEL || 'info';
|
|
426
|
+
if (appPort) {
|
|
427
|
+
env.PORT = appPort.toString();
|
|
428
|
+
}
|
|
429
|
+
this.log('š Starting Slingr application in debug mode...');
|
|
430
|
+
this.log('');
|
|
431
|
+
this.log(`š Debugger listening on port ${inspectPort}`);
|
|
432
|
+
this.log('');
|
|
433
|
+
this.log('š” To attach a debugger:');
|
|
434
|
+
this.log(' - VS Code: Use "Attach to Process" debug configuration');
|
|
435
|
+
this.log(' - Chrome DevTools: Navigate to chrome://inspect');
|
|
436
|
+
this.log('');
|
|
437
|
+
this.log(`š Running: ${command}`);
|
|
438
|
+
this.log('');
|
|
439
|
+
try {
|
|
440
|
+
(0, node_child_process_1.execSync)(command, { stdio: 'inherit', cwd: backendPath, env });
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
if (error.signal === 'SIGINT') {
|
|
444
|
+
this.log('\nš Debug session stopped gracefully');
|
|
445
|
+
process.exit(0);
|
|
446
|
+
}
|
|
447
|
+
this.error(`Failed to start application in debug mode: ${error.message}`);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
async loadDataSources() {
|
|
451
|
+
const dataSources = [];
|
|
452
|
+
const backendPath = (0, checkFramework_js_1.getBackendPath)();
|
|
453
|
+
const dataSourcesPath = node_path_1.default.join(backendPath, 'src', 'dataSources');
|
|
454
|
+
if (await fs_extra_1.default.pathExists(dataSourcesPath)) {
|
|
455
|
+
const files = await fs_extra_1.default.readdir(dataSourcesPath);
|
|
456
|
+
for (const file of files) {
|
|
457
|
+
if (file.endsWith('.ts')) {
|
|
458
|
+
const content = await fs_extra_1.default.readFile(node_path_1.default.join(dataSourcesPath, file), 'utf8');
|
|
459
|
+
const typeMatch = content.match(/type:\s*['"]([^'"]+)['"]/);
|
|
460
|
+
if (typeMatch) {
|
|
461
|
+
let type = typeMatch[1];
|
|
462
|
+
if (type === 'postgresql') {
|
|
463
|
+
type = 'postgres';
|
|
464
|
+
}
|
|
465
|
+
dataSources.push({ name: file.replace('.ts', ''), type });
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return dataSources;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
exports.default = Debug;
|
|
474
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/ds.d.ts
CHANGED
|
@@ -7,6 +7,11 @@ export default class Ds extends Command {
|
|
|
7
7
|
action: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
8
|
dataset: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
9
9
|
};
|
|
10
|
+
static flags: {
|
|
11
|
+
includeModels: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
excludeModels: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
10
15
|
run(): Promise<void>;
|
|
11
16
|
private generateCode;
|
|
12
17
|
private ensureDatabaseDependencies;
|
|
@@ -20,8 +25,16 @@ export default class Ds extends Command {
|
|
|
20
25
|
private resolveDeclaredVolumes;
|
|
21
26
|
private deriveComposeProjectName;
|
|
22
27
|
private runComposeCommand;
|
|
28
|
+
private showIndexes;
|
|
29
|
+
private queryIndexes;
|
|
30
|
+
private queryPostgresIndexes;
|
|
31
|
+
private queryMysqlIndexes;
|
|
32
|
+
private querySqliteIndexes;
|
|
33
|
+
private printIndexTable;
|
|
23
34
|
/**
|
|
24
|
-
* Validate that Docker is running and
|
|
35
|
+
* Validate that Docker is running and the database container is available.
|
|
36
|
+
* Only call this for server-based databases (postgres, mysql, mariadb).
|
|
37
|
+
* SQLite does not need Docker and should bypass this method entirely.
|
|
25
38
|
*/
|
|
26
39
|
private validateDockerInfrastructure;
|
|
27
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ds.d.ts","sourceRoot":"","sources":["../../src/commands/ds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,
|
|
1
|
+
{"version":3,"file":"ds.d.ts","sourceRoot":"","sources":["../../src/commands/ds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAUnD,MAAM,CAAC,OAAO,OAAO,EAAG,SAAQ,OAAO;IACrC,MAAM,CAAC,WAAW,SAA6C;IAE/D,MAAM,CAAC,QAAQ,WAUb;IAEF,MAAM,CAAC,IAAI;;;;MAeT;IAEF,OAAgB,KAAK;;;;MAkBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA6CZ,YAAY;YAcZ,0BAA0B;YAgE1B,kBAAkB;YAgBlB,WAAW;YA8PX,eAAe;YAiFf,qBAAqB;IASnC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,0BAA0B;YAyBpB,sBAAsB;IAwCpC,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,iBAAiB;YAeX,WAAW;YAyEX,YAAY;YAwBZ,oBAAoB;YAoCpB,iBAAiB;YA+BjB,kBAAkB;IAwChC,OAAO,CAAC,eAAe;IAyCvB;;;;OAIG;YACW,4BAA4B;CAwD3C"}
|