@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
/**
|
|
4
|
-
* Script to generate GraphQL schema from slingr-
|
|
4
|
+
* Script to generate GraphQL schema from @slingr/framework-backend
|
|
5
5
|
* This script is executed in the context of a user's Slingr application
|
|
6
6
|
*
|
|
7
7
|
* By default, the script generates the schema and exits immediately.
|
|
@@ -13,72 +13,167 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
const fs_1 = __importDefault(require("fs"));
|
|
15
15
|
const path_1 = __importDefault(require("path"));
|
|
16
|
-
|
|
16
|
+
// Load generated view type registries if they exist so declare global augmentations are active
|
|
17
|
+
// during schema compilation. The file may not exist yet on the first run.
|
|
18
|
+
const generatedViewsPath = path_1.default.join(process.cwd(), 'generated', 'views');
|
|
19
|
+
if (fs_1.default.existsSync(generatedViewsPath + '.ts') || fs_1.default.existsSync(generatedViewsPath + '.js')) {
|
|
20
|
+
require(generatedViewsPath);
|
|
21
|
+
}
|
|
22
|
+
// @ts-ignore - temp-generate-metadata.ts is copied at runtime by the CLI
|
|
23
|
+
const temp_generate_metadata_1 = require("./temp-generate-metadata");
|
|
24
|
+
/**
|
|
25
|
+
* Load data sources from src/dataSources directory.
|
|
26
|
+
* Loads directly from TypeScript source files using ts-node.
|
|
27
|
+
*/
|
|
28
|
+
async function loadDataSources() {
|
|
29
|
+
const dataSourcesPath = path_1.default.join(process.cwd(), 'src', 'dataSources');
|
|
30
|
+
if (!fs_1.default.existsSync(dataSourcesPath)) {
|
|
31
|
+
console.log('ā¹ļø No dataSources directory found. Schema will be generated without CRUD operations.');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.log('š¦ Loading data sources from TypeScript source files...');
|
|
35
|
+
// Get all data source files
|
|
36
|
+
const files = fs_1.default.readdirSync(dataSourcesPath).filter(file => file.endsWith('.ts') && !file.endsWith('.d.ts'));
|
|
37
|
+
if (files.length === 0) {
|
|
38
|
+
console.log('ā¹ļø No data source files found.');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Import each data source file using CommonJS require
|
|
42
|
+
for (const file of files) {
|
|
43
|
+
const filePath = path_1.default.join(dataSourcesPath, file);
|
|
44
|
+
require(filePath);
|
|
45
|
+
}
|
|
46
|
+
console.log(`ā
Loaded ${files.length} data source(s)`);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Recursively collect all files matching an extension from a directory.
|
|
50
|
+
*/
|
|
51
|
+
function collectFilesRecursively(dir, extension) {
|
|
52
|
+
const results = [];
|
|
53
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
const fullPath = path_1.default.join(dir, entry.name);
|
|
56
|
+
if (entry.isDirectory()) {
|
|
57
|
+
results.push(...collectFilesRecursively(fullPath, extension));
|
|
58
|
+
}
|
|
59
|
+
else if (entry.isFile() &&
|
|
60
|
+
entry.name.endsWith(extension) &&
|
|
61
|
+
!entry.name.endsWith('.d.ts') &&
|
|
62
|
+
!/\.test\.|\.spec\./i.test(entry.name)) {
|
|
63
|
+
results.push(fullPath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Load model files from src/data directory (including subdirectories).
|
|
70
|
+
* Loads directly from TypeScript source files using tsx to avoid double decorator execution.
|
|
71
|
+
* @returns Array of loaded model classes
|
|
72
|
+
*/
|
|
73
|
+
async function loadModels() {
|
|
74
|
+
const loadedModels = [];
|
|
75
|
+
const modelsPath = path_1.default.join(process.cwd(), 'src', 'data');
|
|
76
|
+
if (!fs_1.default.existsSync(modelsPath)) {
|
|
77
|
+
console.log('ā¹ļø No data directory found. Schema will be generated without model CRUD operations.');
|
|
78
|
+
return loadedModels;
|
|
79
|
+
}
|
|
80
|
+
console.log('š¦ Loading models from TypeScript source files...');
|
|
81
|
+
// Recursively get all model files, excluding tests/specs and declaration files
|
|
82
|
+
const files = collectFilesRecursively(modelsPath, '.ts');
|
|
83
|
+
if (files.length === 0) {
|
|
84
|
+
console.log('ā¹ļø No model files found.');
|
|
85
|
+
return loadedModels;
|
|
86
|
+
}
|
|
87
|
+
// Import each model file (which will trigger @DataModel decorators and register CRUD operations)
|
|
88
|
+
for (const filePath of files) {
|
|
89
|
+
const moduleExports = require(filePath);
|
|
90
|
+
// Extract model classes from the module exports
|
|
91
|
+
for (const exportName of Object.keys(moduleExports)) {
|
|
92
|
+
const exported = moduleExports[exportName];
|
|
93
|
+
if (typeof exported === 'function' && exported.prototype) {
|
|
94
|
+
loadedModels.push(exported);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
console.log(`ā
Loaded ${files.length} model(s)`);
|
|
99
|
+
return loadedModels;
|
|
100
|
+
}
|
|
17
101
|
async function generateSchema() {
|
|
18
102
|
try {
|
|
19
103
|
console.log('š Generating GraphQL schema from your Slingr application...');
|
|
20
|
-
//
|
|
21
|
-
// This
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
104
|
+
// Dynamic import to avoid compile-time dependency on @slingr/framework-backend
|
|
105
|
+
// This script runs in the user's project context where @slingr/framework-backend is installed
|
|
106
|
+
// @ts-ignore
|
|
107
|
+
const slingrFramework = await import('@slingr/framework-backend');
|
|
108
|
+
const { generateActionsIndex, getGraphQLSchema, printSchema, rebuildGraphQLSchema, startGraphQLServer } = slingrFramework;
|
|
109
|
+
// Import framework functions first to get access to rebuildGraphQLSchema
|
|
110
|
+
// We must use printSchema from the same GraphQL instance as the framework
|
|
111
|
+
// to avoid "Cannot use GraphQLType from another module or realm" errors
|
|
112
|
+
// Destructure directly from the imported module (works for both ESM and CJS)
|
|
113
|
+
// The named exports are available directly on the module namespace object
|
|
114
|
+
// Rebuild the schema FIRST to clear any previous state before loading anything
|
|
115
|
+
// This ensures we start with a clean slate
|
|
116
|
+
rebuildGraphQLSchema();
|
|
117
|
+
// IMPORTANT: Load actions AFTER rebuilding the schema
|
|
118
|
+
// When actions are imported, they will register themselves in the clean schema builder
|
|
119
|
+
// Check if actions directory exists
|
|
120
|
+
const actionsDir = path_1.default.join(process.cwd(), 'src', 'actions');
|
|
27
121
|
let hasActions = false;
|
|
28
|
-
if (fs_1.default.existsSync(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
122
|
+
if (fs_1.default.existsSync(actionsDir)) {
|
|
123
|
+
// Generate the actions index at generated/actions/index.ts
|
|
124
|
+
console.log('š¦ Generating actions index...');
|
|
125
|
+
// Generate the actions index
|
|
126
|
+
await generateActionsIndex(process.cwd(), 'src/actions');
|
|
127
|
+
// Check if the generated index exists
|
|
128
|
+
const generatedActionsIndexPath = path_1.default.resolve(process.cwd(), 'generated', 'actions', 'index.ts');
|
|
129
|
+
if (fs_1.default.existsSync(generatedActionsIndexPath)) {
|
|
36
130
|
hasActions = true;
|
|
131
|
+
console.log('š¦ Loading actions from generated TypeScript index...');
|
|
132
|
+
require(generatedActionsIndexPath);
|
|
37
133
|
}
|
|
38
134
|
else {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
usingCompiledVersion = false;
|
|
42
|
-
if (fs_1.default.existsSync(actionsIndexPath)) {
|
|
43
|
-
hasActions = true;
|
|
44
|
-
console.log('ā ļø TypeScript source files detected. For best compatibility, run "npm run build" to compile your application first.');
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
// Check if actions directory exists at all
|
|
48
|
-
const actionsDir = path_1.default.join(process.cwd(), 'src', 'actions');
|
|
49
|
-
if (fs_1.default.existsSync(actionsDir)) {
|
|
50
|
-
console.log('ā ļø Actions directory found but no index file. Please ensure src/actions/index.ts exists or run "slingr run" to generate it automatically.');
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
console.log('ā¹ļø No actions directory found. Schema will be generated with framework base types only.');
|
|
54
|
-
}
|
|
55
|
-
hasActions = false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (hasActions) {
|
|
60
|
-
console.log(`š¦ Loading actions from ${usingCompiledVersion ? 'compiled' : 'source'} files...`);
|
|
61
|
-
// If using TypeScript files, show a warning and try to continue
|
|
62
|
-
if (!usingCompiledVersion) {
|
|
63
|
-
throw new Error('TypeScript source files found but not compiled. Please run "npm run build" to compile your application first, then try again.');
|
|
135
|
+
console.log('ā ļø Failed to generate actions index.');
|
|
136
|
+
hasActions = false;
|
|
64
137
|
}
|
|
65
|
-
// Import the actions index which will register all actions via @Action decorators
|
|
66
|
-
// Convert Windows paths to file:// URLs for ESM compatibility
|
|
67
|
-
const actionsIndexUrl = (0, url_1.pathToFileURL)(actionsIndexPath).href;
|
|
68
|
-
await import(actionsIndexUrl);
|
|
69
138
|
}
|
|
70
139
|
else {
|
|
140
|
+
console.log('ā¹ļø No actions directory found. Schema will be generated with framework base types only.');
|
|
141
|
+
}
|
|
142
|
+
if (!hasActions) {
|
|
71
143
|
console.log('š¦ No actions to load. Generating schema with framework base types...');
|
|
72
|
-
}
|
|
144
|
+
}
|
|
145
|
+
// Load data sources and models (which will register CRUD operations)
|
|
146
|
+
// Import framework functions and printSchema from slingr-framework
|
|
73
147
|
// We must use printSchema from the same GraphQL instance as the framework
|
|
74
148
|
// to avoid "Cannot use GraphQLType from another module or realm" errors
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
149
|
+
const { registerAllUiGraphQL, registerCrudOperations, generateCrudActions } = slingrFramework;
|
|
150
|
+
// Load data sources and models
|
|
151
|
+
// Actions will be generated but NOT registered in GraphQL during model import
|
|
152
|
+
await loadDataSources();
|
|
153
|
+
const loadedModels = await loadModels();
|
|
154
|
+
console.log('š¦ Registering UI operations for all UI-enabled models...');
|
|
155
|
+
await registerAllUiGraphQL();
|
|
156
|
+
console.log('ā
UI operations registered');
|
|
157
|
+
// Register CRUD GraphQL operations for models with crud configuration
|
|
158
|
+
if (loadedModels.length > 0) {
|
|
159
|
+
for (const modelClass of loadedModels) {
|
|
160
|
+
const modelOptions = Reflect.getMetadata('model:options', modelClass);
|
|
161
|
+
const crudOptions = modelOptions?.crud;
|
|
162
|
+
if (crudOptions && crudOptions.api === 'gql' && crudOptions.generate) {
|
|
163
|
+
const dataSource = Reflect.getMetadata('model:dataSource', modelClass);
|
|
164
|
+
if (dataSource) {
|
|
165
|
+
// First generate CRUD actions (normally done by decorator)
|
|
166
|
+
generateCrudActions(modelClass, dataSource, crudOptions);
|
|
167
|
+
// Then register GraphQL operations
|
|
168
|
+
registerCrudOperations(modelClass);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Get schema (which will build it with all registered operations)
|
|
79
174
|
const schema = getGraphQLSchema();
|
|
80
175
|
if (!schema) {
|
|
81
|
-
throw new Error('Could not generate GraphQL schema. Please ensure slingr-
|
|
176
|
+
throw new Error('Could not generate GraphQL schema. Please ensure @slingr/framework-backend is properly installed.');
|
|
82
177
|
}
|
|
83
178
|
const schemaString = printSchema(schema);
|
|
84
179
|
// Ensure generated/gql directory exists
|
|
@@ -88,8 +183,24 @@ async function generateSchema() {
|
|
|
88
183
|
}
|
|
89
184
|
// Write schema to file
|
|
90
185
|
const schemaFilePath = path_1.default.join(generatedDir, 'schema.graphql');
|
|
91
|
-
|
|
92
|
-
|
|
186
|
+
try {
|
|
187
|
+
fs_1.default.writeFileSync(schemaFilePath, schemaString, 'utf8');
|
|
188
|
+
}
|
|
189
|
+
catch (writeError) {
|
|
190
|
+
const msg = writeError instanceof Error ? writeError.message : String(writeError);
|
|
191
|
+
console.error(`ā Failed to write schema file at ${schemaFilePath}: ${msg}`);
|
|
192
|
+
throw writeError instanceof Error ? writeError : new Error(msg);
|
|
193
|
+
}
|
|
194
|
+
// Verify file creation and log size
|
|
195
|
+
try {
|
|
196
|
+
const stats = fs_1.default.statSync(schemaFilePath);
|
|
197
|
+
console.log(`ā
GraphQL schema written: ${schemaFilePath} (${stats.size} bytes)`);
|
|
198
|
+
}
|
|
199
|
+
catch (statError) {
|
|
200
|
+
const msg = statError instanceof Error ? statError.message : String(statError);
|
|
201
|
+
console.warn(`ā ļø Schema file write succeeded but verification failed: ${msg}`);
|
|
202
|
+
console.log(`ā¹ļø Please check that the path exists and you have write permissions: ${schemaFilePath}`);
|
|
203
|
+
}
|
|
93
204
|
// Show a preview of the generated schema
|
|
94
205
|
const lines = schemaString.split('\n');
|
|
95
206
|
if (lines.length > 0) {
|
|
@@ -99,26 +210,9 @@ async function generateSchema() {
|
|
|
99
210
|
console.log(`... (${lines.length - 15} more lines)`);
|
|
100
211
|
}
|
|
101
212
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
console.log('\n Starting Apollo Server to explore the schema...');
|
|
106
|
-
console.log('š” Remove --no-exit parameter to exit immediately after generating schema.');
|
|
107
|
-
// Start Apollo Server for schema exploration
|
|
108
|
-
const { startGraphQLServer } = slingrFramework;
|
|
109
|
-
await startGraphQLServer({
|
|
110
|
-
port: 4000,
|
|
111
|
-
enableExplorer: true,
|
|
112
|
-
});
|
|
113
|
-
console.log('š Apollo Explorer available at: http://localhost:4000/graphql');
|
|
114
|
-
console.log('š GraphQL schema introspection enabled');
|
|
115
|
-
console.log('ā¹ļø Press Ctrl+C to stop the server');
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
console.log('\nā
Schema generation completed. Script will terminate now.');
|
|
119
|
-
console.log('š” Use --no-exit parameter to start Apollo Server and explore the schema.');
|
|
120
|
-
process.exit(0);
|
|
121
|
-
}
|
|
213
|
+
await (0, temp_generate_metadata_1.generateMetadataFile)();
|
|
214
|
+
console.log('\nā
Schema generation completed. Script will terminate now.');
|
|
215
|
+
process.exit(0);
|
|
122
216
|
}
|
|
123
217
|
catch (error) {
|
|
124
218
|
console.error(`Failed to generate schema: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-schema.js","sourceRoot":"","sources":["../../src/scripts/generate-schema.ts"],"names":[],"mappings":";;AACA;;;;;;GAMG;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"generate-schema.js","sourceRoot":"","sources":["../../src/scripts/generate-schema.ts"],"names":[],"mappings":"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"}
|