@slingr/cli 0.0.1
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/README.md +320 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +5 -0
- package/dist/commands/cli-build.d.ts +9 -0
- package/dist/commands/cli-build.d.ts.map +1 -0
- package/dist/commands/cli-build.js +36 -0
- package/dist/commands/cli-build.js.map +1 -0
- package/dist/commands/create-app.d.ts +20 -0
- package/dist/commands/create-app.d.ts.map +1 -0
- package/dist/commands/create-app.js +246 -0
- package/dist/commands/create-app.js.map +1 -0
- package/dist/commands/ds.d.ts +28 -0
- package/dist/commands/ds.d.ts.map +1 -0
- package/dist/commands/ds.js +529 -0
- package/dist/commands/ds.js.map +1 -0
- package/dist/commands/gql.d.ts +22 -0
- package/dist/commands/gql.d.ts.map +1 -0
- package/dist/commands/gql.js +340 -0
- package/dist/commands/gql.js.map +1 -0
- package/dist/commands/infra/down.d.ts +13 -0
- package/dist/commands/infra/down.d.ts.map +1 -0
- package/dist/commands/infra/down.js +80 -0
- package/dist/commands/infra/down.js.map +1 -0
- package/dist/commands/infra/up.d.ts +13 -0
- package/dist/commands/infra/up.d.ts.map +1 -0
- package/dist/commands/infra/up.js +69 -0
- package/dist/commands/infra/up.js.map +1 -0
- package/dist/commands/infra/update.d.ts +14 -0
- package/dist/commands/infra/update.d.ts.map +1 -0
- package/dist/commands/infra/update.js +321 -0
- package/dist/commands/infra/update.js.map +1 -0
- package/dist/commands/run.d.ts +19 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +315 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/setup.d.ts +18 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +189 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/projectStructure.d.ts +10 -0
- package/dist/projectStructure.d.ts.map +1 -0
- package/dist/projectStructure.js +153 -0
- package/dist/projectStructure.js.map +1 -0
- package/dist/scripts/generate-schema.d.ts +10 -0
- package/dist/scripts/generate-schema.d.ts.map +1 -0
- package/dist/scripts/generate-schema.js +130 -0
- package/dist/scripts/generate-schema.js.map +1 -0
- package/dist/scripts/generate-schema.ts +143 -0
- package/dist/templates/.github/copilot-instructions.md.template +17 -0
- package/dist/templates/config/datasource.ts.template +9 -0
- package/dist/templates/config/jest.config.ts +30 -0
- package/dist/templates/config/jest.setup.ts +1 -0
- package/dist/templates/config/tsconfig.json.template +30 -0
- package/dist/templates/dataSources/mysql.ts.template +13 -0
- package/dist/templates/dataSources/postgres.ts.template +13 -0
- package/dist/templates/dataset-generator-script.ts.template +140 -0
- package/dist/templates/datasets/mysql-default/Address.jsonl.template +4 -0
- package/dist/templates/datasets/mysql-default/App.jsonl.template +5 -0
- package/dist/templates/datasets/mysql-default/Company.jsonl.template +4 -0
- package/dist/templates/datasets/mysql-default/Person.jsonl.template +3 -0
- package/dist/templates/datasets/postgres-default/Address.jsonl.template +4 -0
- package/dist/templates/datasets/postgres-default/App.jsonl.template +5 -0
- package/dist/templates/datasets/postgres-default/Company.jsonl.template +4 -0
- package/dist/templates/datasets/postgres-default/Person.jsonl.template +3 -0
- package/dist/templates/docs/app-description.md.template +34 -0
- package/dist/templates/gql/codegen.yml.template +25 -0
- package/dist/templates/gql/index.ts.template +24 -0
- package/dist/templates/gql/operations.graphql.template +30 -0
- package/dist/templates/package.json.template +38 -0
- package/dist/templates/prompt-analysis.md.template +111 -0
- package/dist/templates/prompt-script-generation.md.template +259 -0
- package/dist/templates/src/Address.ts.template +31 -0
- package/dist/templates/src/App.ts.template +61 -0
- package/dist/templates/src/Company.ts.template +48 -0
- package/dist/templates/src/Models.test.ts.template +655 -0
- package/dist/templates/src/Person.test.ts.template +289 -0
- package/dist/templates/src/Person.ts.template +105 -0
- package/dist/templates/src/actions/index.ts.template +12 -0
- package/dist/templates/src/index.ts +66 -0
- package/dist/templates/src/types/gql.d.ts.template +18 -0
- package/dist/templates/vscode/extensions.json +3 -0
- package/dist/templates/vscode/settings.json +11 -0
- package/dist/utils/datasourceParser.d.ts +12 -0
- package/dist/utils/datasourceParser.d.ts.map +1 -0
- package/dist/utils/datasourceParser.js +91 -0
- package/dist/utils/datasourceParser.js.map +1 -0
- package/dist/utils/jsonlLoader.d.ts +140 -0
- package/dist/utils/jsonlLoader.d.ts.map +1 -0
- package/dist/utils/jsonlLoader.js +583 -0
- package/dist/utils/jsonlLoader.js.map +1 -0
- package/dist/utils/model-analyzer.d.ts +86 -0
- package/dist/utils/model-analyzer.d.ts.map +1 -0
- package/dist/utils/model-analyzer.js +458 -0
- package/dist/utils/model-analyzer.js.map +1 -0
- package/dist/utils/portChecker.d.ts +36 -0
- package/dist/utils/portChecker.d.ts.map +1 -0
- package/dist/utils/portChecker.js +308 -0
- package/dist/utils/portChecker.js.map +1 -0
- package/dist/utils/synthetic-data-generator.d.ts +74 -0
- package/dist/utils/synthetic-data-generator.d.ts.map +1 -0
- package/dist/utils/synthetic-data-generator.js +443 -0
- package/dist/utils/synthetic-data-generator.js.map +1 -0
- package/oclif.manifest.json +435 -0
- package/package.json +118 -0
- package/src/templates/.github/copilot-instructions.md.template +17 -0
- package/src/templates/config/datasource.ts.template +9 -0
- package/src/templates/config/jest.config.ts +30 -0
- package/src/templates/config/jest.setup.ts +1 -0
- package/src/templates/config/tsconfig.json.template +30 -0
- package/src/templates/dataSources/mysql.ts.template +13 -0
- package/src/templates/dataSources/postgres.ts.template +13 -0
- package/src/templates/dataset-generator-script.ts.template +140 -0
- package/src/templates/datasets/mysql-default/Address.jsonl.template +4 -0
- package/src/templates/datasets/mysql-default/App.jsonl.template +5 -0
- package/src/templates/datasets/mysql-default/Company.jsonl.template +4 -0
- package/src/templates/datasets/mysql-default/Person.jsonl.template +3 -0
- package/src/templates/datasets/postgres-default/Address.jsonl.template +4 -0
- package/src/templates/datasets/postgres-default/App.jsonl.template +5 -0
- package/src/templates/datasets/postgres-default/Company.jsonl.template +4 -0
- package/src/templates/datasets/postgres-default/Person.jsonl.template +3 -0
- package/src/templates/docs/app-description.md.template +34 -0
- package/src/templates/gql/codegen.yml.template +25 -0
- package/src/templates/gql/index.ts.template +24 -0
- package/src/templates/gql/operations.graphql.template +30 -0
- package/src/templates/package.json.template +38 -0
- package/src/templates/prompt-analysis.md.template +111 -0
- package/src/templates/prompt-script-generation.md.template +259 -0
- package/src/templates/src/Address.ts.template +31 -0
- package/src/templates/src/App.ts.template +61 -0
- package/src/templates/src/Company.ts.template +48 -0
- package/src/templates/src/Models.test.ts.template +655 -0
- package/src/templates/src/Person.test.ts.template +289 -0
- package/src/templates/src/Person.ts.template +105 -0
- package/src/templates/src/actions/index.ts.template +12 -0
- package/src/templates/src/index.ts +66 -0
- package/src/templates/src/types/gql.d.ts.template +18 -0
- package/src/templates/vscode/extensions.json +3 -0
- package/src/templates/vscode/settings.json +11 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export interface FieldMetadata {
|
|
2
|
+
name: string;
|
|
3
|
+
type: string;
|
|
4
|
+
required: boolean | string;
|
|
5
|
+
primaryKey?: boolean;
|
|
6
|
+
generated?: boolean;
|
|
7
|
+
validation?: string;
|
|
8
|
+
available?: boolean | string;
|
|
9
|
+
minLength?: number;
|
|
10
|
+
maxLength?: number;
|
|
11
|
+
regex?: string;
|
|
12
|
+
regexMessage?: string;
|
|
13
|
+
min?: number;
|
|
14
|
+
max?: number;
|
|
15
|
+
precision?: number;
|
|
16
|
+
scale?: number;
|
|
17
|
+
isRelationship?: boolean;
|
|
18
|
+
relationshipType?: string;
|
|
19
|
+
relatedModel?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ModelMetadata {
|
|
22
|
+
name: string;
|
|
23
|
+
filePath: string;
|
|
24
|
+
dataSource: string;
|
|
25
|
+
fields: FieldMetadata[];
|
|
26
|
+
relationships: RelationshipMetadata[];
|
|
27
|
+
docs?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface RelationshipMetadata {
|
|
30
|
+
fieldName: string;
|
|
31
|
+
type: 'OneToOne' | 'OneToMany' | 'ManyToOne' | 'ManyToMany';
|
|
32
|
+
targetModel: string;
|
|
33
|
+
cascade?: boolean;
|
|
34
|
+
eager?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare class ModelAnalyzer {
|
|
37
|
+
/**
|
|
38
|
+
* Analyze all models in the src directory and extract metadata
|
|
39
|
+
*/
|
|
40
|
+
analyzeModels(srcPath: string): Promise<ModelMetadata[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Analyze models using runtime metadata (preferred method)
|
|
43
|
+
*/
|
|
44
|
+
analyzeModelsFromRuntime(srcPath: string): Promise<ModelMetadata[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Extract metadata from a compiled model class using runtime reflection
|
|
47
|
+
*/
|
|
48
|
+
private extractRuntimeMetadata;
|
|
49
|
+
/**
|
|
50
|
+
* Extract field metadata using runtime reflection
|
|
51
|
+
*/
|
|
52
|
+
private extractRuntimeFields;
|
|
53
|
+
/**
|
|
54
|
+
* Analyze models using static source analysis (fallback method)
|
|
55
|
+
*/
|
|
56
|
+
analyzeModelsFromSource(srcPath: string): Promise<ModelMetadata[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Analyze a single TypeScript model file and extract metadata
|
|
59
|
+
*/
|
|
60
|
+
analyzeModel(filePath: string): Promise<ModelMetadata | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Extract field metadata from the model content
|
|
63
|
+
*/
|
|
64
|
+
private extractFields;
|
|
65
|
+
/**
|
|
66
|
+
* Extract relationship metadata (for future use)
|
|
67
|
+
*/
|
|
68
|
+
private extractRelationships;
|
|
69
|
+
/**
|
|
70
|
+
* Parse @Field decorator options
|
|
71
|
+
*/
|
|
72
|
+
private parseFieldOptions;
|
|
73
|
+
/**
|
|
74
|
+
* Parse type decorator options (Text, Integer, etc.)
|
|
75
|
+
*/
|
|
76
|
+
private parseTypeDecoratorOptions;
|
|
77
|
+
/**
|
|
78
|
+
* Map TypeScript types to field types
|
|
79
|
+
*/
|
|
80
|
+
private mapTypeScriptTypeToFieldType;
|
|
81
|
+
/**
|
|
82
|
+
* Extract model name from TypeScript type
|
|
83
|
+
*/
|
|
84
|
+
private extractModelNameFromType;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=model-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/model-analyzer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAW9D;;OAEG;IACG,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA8CzE;;OAEG;YACW,sBAAsB;IA8CpC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsE5B;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAuBxE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAqDnE;;OAEG;IACH,OAAO,CAAC,aAAa;IA0ErB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2DjC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAmBpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAOjC"}
|
|
@@ -0,0 +1,458 @@
|
|
|
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
|
+
exports.ModelAnalyzer = void 0;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_url_1 = require("node:url");
|
|
10
|
+
const glob_1 = require("glob");
|
|
11
|
+
class ModelAnalyzer {
|
|
12
|
+
/**
|
|
13
|
+
* Analyze all models in the src directory and extract metadata
|
|
14
|
+
*/
|
|
15
|
+
async analyzeModels(srcPath) {
|
|
16
|
+
// Try runtime analysis first (more accurate)
|
|
17
|
+
try {
|
|
18
|
+
return await this.analyzeModelsFromRuntime(srcPath);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.warn('Runtime analysis failed, falling back to static analysis:', error.message);
|
|
22
|
+
// Fallback to static analysis
|
|
23
|
+
return await this.analyzeModelsFromSource(srcPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Analyze models using runtime metadata (preferred method)
|
|
28
|
+
*/
|
|
29
|
+
async analyzeModelsFromRuntime(srcPath) {
|
|
30
|
+
const models = [];
|
|
31
|
+
const distPath = node_path_1.default.join(process.cwd(), 'dist');
|
|
32
|
+
// Look for compiled model files
|
|
33
|
+
const modelFiles = await (0, glob_1.glob)('**/*.js', {
|
|
34
|
+
cwd: node_path_1.default.join(distPath, 'data'),
|
|
35
|
+
absolute: true,
|
|
36
|
+
ignore: ['**/*.test.js', '**/Models.test.js'],
|
|
37
|
+
});
|
|
38
|
+
for (const filePath of modelFiles) {
|
|
39
|
+
try {
|
|
40
|
+
// Import the compiled module
|
|
41
|
+
// Convert to file:// URL for Windows compatibility
|
|
42
|
+
const fileUrl = (0, node_url_1.pathToFileURL)(filePath).href;
|
|
43
|
+
const module = await import(fileUrl);
|
|
44
|
+
// Find the model class (should extend BaseModel)
|
|
45
|
+
for (const exportName of Object.keys(module)) {
|
|
46
|
+
const ExportedClass = module[exportName];
|
|
47
|
+
if (typeof ExportedClass === 'function' && ExportedClass.prototype) {
|
|
48
|
+
// Check if it's a model class by creating an instance
|
|
49
|
+
try {
|
|
50
|
+
const instance = new ExportedClass();
|
|
51
|
+
if (instance && typeof instance.validate === 'function') {
|
|
52
|
+
const metadata = await this.extractRuntimeMetadata(ExportedClass, filePath);
|
|
53
|
+
if (metadata) {
|
|
54
|
+
models.push(metadata);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
// Skip if can't instantiate
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.warn(`Warning: Could not analyze compiled model ${filePath}: ${error.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return models;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract metadata from a compiled model class using runtime reflection
|
|
73
|
+
*/
|
|
74
|
+
async extractRuntimeMetadata(ModelClass, filePath) {
|
|
75
|
+
try {
|
|
76
|
+
const instance = new ModelClass();
|
|
77
|
+
const modelName = ModelClass.name;
|
|
78
|
+
// Get dataSource from class metadata
|
|
79
|
+
const dataSourceObj = Reflect.getMetadata?.('model:dataSource', ModelClass);
|
|
80
|
+
let dataSource = '';
|
|
81
|
+
if (dataSourceObj) {
|
|
82
|
+
if (typeof dataSourceObj === 'string') {
|
|
83
|
+
dataSource = dataSourceObj;
|
|
84
|
+
}
|
|
85
|
+
else if (dataSourceObj.name) {
|
|
86
|
+
dataSource = dataSourceObj.name;
|
|
87
|
+
}
|
|
88
|
+
else if (dataSourceObj.constructor?.name) {
|
|
89
|
+
dataSource = dataSourceObj.constructor.name;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Try to extract datasource name from object
|
|
93
|
+
dataSource = dataSourceObj.toString();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const docs = Reflect.getMetadata?.('model:docs', ModelClass);
|
|
97
|
+
// Extract fields using runtime metadata
|
|
98
|
+
const fields = this.extractRuntimeFields(instance);
|
|
99
|
+
const metadata = {
|
|
100
|
+
name: modelName,
|
|
101
|
+
filePath,
|
|
102
|
+
dataSource,
|
|
103
|
+
fields,
|
|
104
|
+
relationships: [], // TODO: extract relationships from runtime
|
|
105
|
+
};
|
|
106
|
+
if (docs) {
|
|
107
|
+
metadata.docs = docs;
|
|
108
|
+
}
|
|
109
|
+
return metadata;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.warn(`Failed to extract runtime metadata for ${ModelClass.name}:`, error.message);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Extract field metadata using runtime reflection
|
|
118
|
+
*/
|
|
119
|
+
extractRuntimeFields(instance) {
|
|
120
|
+
const fields = [];
|
|
121
|
+
// Get all property descriptors from the prototype and instance
|
|
122
|
+
const proto = Object.getPrototypeOf(instance);
|
|
123
|
+
const propertyNames = Object.getOwnPropertyNames(proto).concat(Object.getOwnPropertyNames(instance));
|
|
124
|
+
for (const propertyName of propertyNames) {
|
|
125
|
+
if (propertyName === 'constructor') {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
// Get field metadata
|
|
130
|
+
const fieldType = Reflect.getMetadata?.('field:type', instance, propertyName);
|
|
131
|
+
const relationshipType = Reflect.getMetadata?.('field:relationship:type', instance, propertyName);
|
|
132
|
+
const designType = Reflect.getMetadata?.('design:type', instance, propertyName);
|
|
133
|
+
const required = Reflect.getMetadata?.('field:required', instance, propertyName);
|
|
134
|
+
const primaryKey = Reflect.getMetadata?.('field:primaryKey', instance, propertyName);
|
|
135
|
+
const generated = Reflect.getMetadata?.('field:generated', instance, propertyName);
|
|
136
|
+
const available = Reflect.getMetadata?.('field:available', instance, propertyName);
|
|
137
|
+
const validation = Reflect.getMetadata?.('field:validation', instance, propertyName);
|
|
138
|
+
const typeOptions = Reflect.getMetadata?.('field:type:options', instance, propertyName);
|
|
139
|
+
// Only include properties that have field metadata
|
|
140
|
+
if (fieldType || relationshipType) {
|
|
141
|
+
const field = {
|
|
142
|
+
name: propertyName,
|
|
143
|
+
type: fieldType || 'unknown',
|
|
144
|
+
required: required !== undefined ? required : false,
|
|
145
|
+
primaryKey: primaryKey || false,
|
|
146
|
+
generated: generated || false,
|
|
147
|
+
available: available !== undefined ? available : true,
|
|
148
|
+
};
|
|
149
|
+
// Add relationship metadata
|
|
150
|
+
if (relationshipType) {
|
|
151
|
+
field.isRelationship = true;
|
|
152
|
+
field.relationshipType = relationshipType;
|
|
153
|
+
field.relatedModel = designType?.name || 'unknown';
|
|
154
|
+
}
|
|
155
|
+
// Add validation metadata
|
|
156
|
+
if (validation) {
|
|
157
|
+
field.validation = validation.toString();
|
|
158
|
+
}
|
|
159
|
+
// Add type options (constraints)
|
|
160
|
+
if (typeOptions) {
|
|
161
|
+
field.minLength = typeOptions.minLength;
|
|
162
|
+
field.maxLength = typeOptions.maxLength;
|
|
163
|
+
field.min = typeOptions.min;
|
|
164
|
+
field.max = typeOptions.max;
|
|
165
|
+
field.precision = typeOptions.precision;
|
|
166
|
+
field.scale = typeOptions.scale;
|
|
167
|
+
field.regex = typeOptions.regex?.toString();
|
|
168
|
+
field.regexMessage = typeOptions.regexMessage;
|
|
169
|
+
}
|
|
170
|
+
fields.push(field);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
// Skip properties that cause errors
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return fields;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Analyze models using static source analysis (fallback method)
|
|
182
|
+
*/
|
|
183
|
+
async analyzeModelsFromSource(srcPath) {
|
|
184
|
+
const modelFiles = await (0, glob_1.glob)('**/*.ts', {
|
|
185
|
+
cwd: node_path_1.default.join(srcPath, 'data'),
|
|
186
|
+
absolute: true,
|
|
187
|
+
ignore: ['**/*.test.ts', '**/Models.test.ts'],
|
|
188
|
+
});
|
|
189
|
+
const models = [];
|
|
190
|
+
for (const filePath of modelFiles) {
|
|
191
|
+
try {
|
|
192
|
+
const modelMetadata = await this.analyzeModel(filePath);
|
|
193
|
+
if (modelMetadata) {
|
|
194
|
+
models.push(modelMetadata);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
console.warn(`Warning: Could not analyze model ${filePath}: ${error.message}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return models;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Analyze a single TypeScript model file and extract metadata
|
|
205
|
+
*/
|
|
206
|
+
async analyzeModel(filePath) {
|
|
207
|
+
const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
|
|
208
|
+
// Extract model class name
|
|
209
|
+
const classMatch = content.match(/export\s+class\s+(\w+)\s+extends\s+BaseModel/);
|
|
210
|
+
if (!classMatch) {
|
|
211
|
+
return null; // Not a model file
|
|
212
|
+
}
|
|
213
|
+
const modelName = classMatch[1];
|
|
214
|
+
// Extract model decorator info
|
|
215
|
+
const modelDecoratorMatch = content.match(/@Model\(\s*{([^}]+)}\s*\)/);
|
|
216
|
+
let docs;
|
|
217
|
+
let dataSource = '';
|
|
218
|
+
if (modelDecoratorMatch) {
|
|
219
|
+
const decoratorContent = modelDecoratorMatch[1];
|
|
220
|
+
// Extract docs
|
|
221
|
+
const docsMatch = decoratorContent.match(/docs:\s*["']([^"']+)["']/);
|
|
222
|
+
if (docsMatch) {
|
|
223
|
+
docs = docsMatch[1];
|
|
224
|
+
}
|
|
225
|
+
// Extract dataSource
|
|
226
|
+
const dataSourceMatch = decoratorContent.match(/dataSource:\s*(\w+)/);
|
|
227
|
+
if (dataSourceMatch) {
|
|
228
|
+
dataSource = dataSourceMatch[1];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Extract fields
|
|
232
|
+
const fields = this.extractFields(content);
|
|
233
|
+
// Extract relationships (for future use)
|
|
234
|
+
const relationships = this.extractRelationships(content);
|
|
235
|
+
const metadata = {
|
|
236
|
+
name: modelName,
|
|
237
|
+
filePath,
|
|
238
|
+
dataSource,
|
|
239
|
+
fields,
|
|
240
|
+
relationships,
|
|
241
|
+
};
|
|
242
|
+
if (docs) {
|
|
243
|
+
metadata.docs = docs;
|
|
244
|
+
}
|
|
245
|
+
return metadata;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Extract field metadata from the model content
|
|
249
|
+
*/
|
|
250
|
+
extractFields(content) {
|
|
251
|
+
const fields = [];
|
|
252
|
+
// Match field declarations with decorators - more comprehensive pattern
|
|
253
|
+
const fieldPattern = /@Field\(\s*{([^}]*)}\s*\)\s*(?:@(\w+)\(\s*(?:{([^}]*)}|\([^)]*\))?\s*\))?\s*(\w+)(?:\?)?!?:\s*([^;]+);/g;
|
|
254
|
+
let match;
|
|
255
|
+
while ((match = fieldPattern.exec(content)) !== null) {
|
|
256
|
+
const fieldDecoratorContent = match[1];
|
|
257
|
+
const typeDecorator = match[2];
|
|
258
|
+
const typeDecoratorOptions = match[3] || '';
|
|
259
|
+
const fieldName = match[4];
|
|
260
|
+
const fieldType = match[5].trim();
|
|
261
|
+
const field = {
|
|
262
|
+
name: fieldName,
|
|
263
|
+
type: this.mapTypeScriptTypeToFieldType(fieldType, typeDecorator),
|
|
264
|
+
required: false,
|
|
265
|
+
};
|
|
266
|
+
// Parse @Field decorator options
|
|
267
|
+
this.parseFieldOptions(fieldDecoratorContent, field);
|
|
268
|
+
// Parse type decorator options
|
|
269
|
+
if (typeDecorator) {
|
|
270
|
+
this.parseTypeDecoratorOptions(typeDecorator, typeDecoratorOptions, field);
|
|
271
|
+
}
|
|
272
|
+
// Special handling for composition types
|
|
273
|
+
if (typeDecorator === 'Composition') {
|
|
274
|
+
field.type = 'composition';
|
|
275
|
+
field.isRelationship = true;
|
|
276
|
+
field.relationshipType = 'composition';
|
|
277
|
+
// Try to extract the element type from the field type
|
|
278
|
+
const elementTypeMatch = fieldType.match(/(\w+)$/);
|
|
279
|
+
if (elementTypeMatch) {
|
|
280
|
+
field.type = `composition:${elementTypeMatch[1]}`;
|
|
281
|
+
field.relatedModel = elementTypeMatch[1];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Special handling for reference types
|
|
285
|
+
if (typeDecorator === 'Reference') {
|
|
286
|
+
field.type = 'reference';
|
|
287
|
+
field.isRelationship = true;
|
|
288
|
+
field.relationshipType = 'reference';
|
|
289
|
+
// Try to extract the element type from the field type
|
|
290
|
+
const elementTypeMatch = fieldType.match(/(\w+)$/);
|
|
291
|
+
if (elementTypeMatch) {
|
|
292
|
+
field.type = `reference:${elementTypeMatch[1]}`;
|
|
293
|
+
field.relatedModel = elementTypeMatch[1];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Special handling for shared composition types
|
|
297
|
+
if (typeDecorator === 'SharedComposition') {
|
|
298
|
+
field.type = 'sharedComposition';
|
|
299
|
+
field.isRelationship = true;
|
|
300
|
+
field.relationshipType = 'sharedComposition';
|
|
301
|
+
// Try to extract the element type from the field type
|
|
302
|
+
const elementTypeMatch = fieldType.match(/(\w+)$/);
|
|
303
|
+
if (elementTypeMatch) {
|
|
304
|
+
field.type = `sharedComposition:${elementTypeMatch[1]}`;
|
|
305
|
+
field.relatedModel = elementTypeMatch[1];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
fields.push(field);
|
|
309
|
+
}
|
|
310
|
+
return fields;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Extract relationship metadata (for future use)
|
|
314
|
+
*/
|
|
315
|
+
extractRelationships(content) {
|
|
316
|
+
const relationships = [];
|
|
317
|
+
// Pattern to match relationship decorators
|
|
318
|
+
const relationshipPattern = /@(OneToOne|OneToMany|ManyToOne|ManyToMany)\([^)]*\)\s*(\w+)(?:\?)?!?:\s*([^;]+);/g;
|
|
319
|
+
let match;
|
|
320
|
+
while ((match = relationshipPattern.exec(content)) !== null) {
|
|
321
|
+
const relationType = match[1];
|
|
322
|
+
const fieldName = match[2];
|
|
323
|
+
const targetType = match[3].trim();
|
|
324
|
+
relationships.push({
|
|
325
|
+
fieldName,
|
|
326
|
+
type: relationType,
|
|
327
|
+
targetModel: this.extractModelNameFromType(targetType),
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
return relationships;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Parse @Field decorator options
|
|
334
|
+
*/
|
|
335
|
+
parseFieldOptions(options, field) {
|
|
336
|
+
// Parse required
|
|
337
|
+
const requiredMatch = options.match(/required:\s*(true|false|\([^)]+\)\s*=>\s*{[^}]+})/);
|
|
338
|
+
if (requiredMatch) {
|
|
339
|
+
if (requiredMatch[1] === 'true') {
|
|
340
|
+
field.required = true;
|
|
341
|
+
}
|
|
342
|
+
else if (requiredMatch[1] === 'false') {
|
|
343
|
+
field.required = false;
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
field.required = requiredMatch[1]; // function as string
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Parse primaryKey
|
|
350
|
+
const primaryKeyMatch = options.match(/primaryKey:\s*(true|false)/);
|
|
351
|
+
if (primaryKeyMatch) {
|
|
352
|
+
field.primaryKey = primaryKeyMatch[1] === 'true';
|
|
353
|
+
}
|
|
354
|
+
// Parse validation
|
|
355
|
+
const validationMatch = options.match(/validation:\s*(\([^)]+\)\s*=>\s*{[^}]+})/);
|
|
356
|
+
if (validationMatch) {
|
|
357
|
+
field.validation = validationMatch[1];
|
|
358
|
+
}
|
|
359
|
+
// Parse available
|
|
360
|
+
const availableMatch = options.match(/available:\s*(true|false|\([^)]+\)\s*=>\s*{[^}]+})/);
|
|
361
|
+
if (availableMatch) {
|
|
362
|
+
if (availableMatch[1] === 'true') {
|
|
363
|
+
field.available = true;
|
|
364
|
+
}
|
|
365
|
+
else if (availableMatch[1] === 'false') {
|
|
366
|
+
field.available = false;
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
field.available = availableMatch[1]; // function as string
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Parse type decorator options (Text, Integer, etc.)
|
|
375
|
+
*/
|
|
376
|
+
parseTypeDecoratorOptions(decorator, options, field) {
|
|
377
|
+
switch (decorator.toLowerCase()) {
|
|
378
|
+
case 'text':
|
|
379
|
+
const minLengthMatch = options.match(/minLength:\s*(\d+)/);
|
|
380
|
+
if (minLengthMatch) {
|
|
381
|
+
field.minLength = parseInt(minLengthMatch[1]);
|
|
382
|
+
}
|
|
383
|
+
const maxLengthMatch = options.match(/maxLength:\s*(\d+)/);
|
|
384
|
+
if (maxLengthMatch) {
|
|
385
|
+
field.maxLength = parseInt(maxLengthMatch[1]);
|
|
386
|
+
}
|
|
387
|
+
const regexMatch = options.match(/regex:\s*\/([^\/]+)\//);
|
|
388
|
+
if (regexMatch) {
|
|
389
|
+
field.regex = regexMatch[1];
|
|
390
|
+
}
|
|
391
|
+
const regexMessageMatch = options.match(/regexMessage:\s*["']([^"']+)["']/);
|
|
392
|
+
if (regexMessageMatch) {
|
|
393
|
+
field.regexMessage = regexMessageMatch[1];
|
|
394
|
+
}
|
|
395
|
+
break;
|
|
396
|
+
case 'integer':
|
|
397
|
+
case 'float':
|
|
398
|
+
case 'decimal':
|
|
399
|
+
const minMatch = options.match(/min:\s*(\d+)/);
|
|
400
|
+
if (minMatch) {
|
|
401
|
+
field.min = parseInt(minMatch[1]);
|
|
402
|
+
}
|
|
403
|
+
const maxMatch = options.match(/max:\s*(\d+)/);
|
|
404
|
+
if (maxMatch) {
|
|
405
|
+
field.max = parseInt(maxMatch[1]);
|
|
406
|
+
}
|
|
407
|
+
if (decorator === 'decimal') {
|
|
408
|
+
const precisionMatch = options.match(/precision:\s*(\d+)/);
|
|
409
|
+
if (precisionMatch) {
|
|
410
|
+
field.precision = parseInt(precisionMatch[1]);
|
|
411
|
+
}
|
|
412
|
+
const scaleMatch = options.match(/scale:\s*(\d+)/);
|
|
413
|
+
if (scaleMatch) {
|
|
414
|
+
field.scale = parseInt(scaleMatch[1]);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
break;
|
|
418
|
+
case 'uuid':
|
|
419
|
+
const generatedMatch = options.match(/generated:\s*(true|false)/);
|
|
420
|
+
if (generatedMatch) {
|
|
421
|
+
field.generated = generatedMatch[1] === 'true';
|
|
422
|
+
}
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Map TypeScript types to field types
|
|
428
|
+
*/
|
|
429
|
+
mapTypeScriptTypeToFieldType(tsType, decorator) {
|
|
430
|
+
if (decorator) {
|
|
431
|
+
return decorator.toLowerCase();
|
|
432
|
+
}
|
|
433
|
+
switch (tsType.toLowerCase()) {
|
|
434
|
+
case 'string':
|
|
435
|
+
return 'text';
|
|
436
|
+
case 'number':
|
|
437
|
+
return 'integer';
|
|
438
|
+
case 'boolean':
|
|
439
|
+
return 'boolean';
|
|
440
|
+
case 'date':
|
|
441
|
+
return 'date';
|
|
442
|
+
default:
|
|
443
|
+
return 'text';
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Extract model name from TypeScript type
|
|
448
|
+
*/
|
|
449
|
+
extractModelNameFromType(type) {
|
|
450
|
+
// Handle arrays like "Person[]"
|
|
451
|
+
if (type.endsWith('[]')) {
|
|
452
|
+
return type.slice(0, -2);
|
|
453
|
+
}
|
|
454
|
+
return type;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
exports.ModelAnalyzer = ModelAnalyzer;
|
|
458
|
+
//# sourceMappingURL=model-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-analyzer.js","sourceRoot":"","sources":["../../src/utils/model-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if Docker daemon is running
|
|
3
|
+
*/
|
|
4
|
+
export declare function isDockerRunning(): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Check if a port is being used by a Docker container from the current project
|
|
7
|
+
*/
|
|
8
|
+
export declare function isPortUsedByProjectDocker(port: number): {
|
|
9
|
+
containerId?: string;
|
|
10
|
+
containerName?: string;
|
|
11
|
+
isDocker: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Check if a port is currently in use using system tools
|
|
15
|
+
*/
|
|
16
|
+
export declare function isPortInUse(port: number, host?: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Find what process is using a specific port
|
|
19
|
+
*/
|
|
20
|
+
export declare function getProcessUsingPort(port: number): null | string;
|
|
21
|
+
/**
|
|
22
|
+
* Find an available port starting from a given port
|
|
23
|
+
*/
|
|
24
|
+
export declare function findAvailablePort(startingPort: number, maxAttempts?: number): Promise<null | number>;
|
|
25
|
+
/**
|
|
26
|
+
* Check multiple ports and return information about their usage
|
|
27
|
+
*/
|
|
28
|
+
export declare function checkPortsUsage(ports: number[]): Promise<Array<{
|
|
29
|
+
containerId?: string;
|
|
30
|
+
containerName?: string;
|
|
31
|
+
inUse: boolean;
|
|
32
|
+
isProjectDocker?: boolean;
|
|
33
|
+
port: number;
|
|
34
|
+
process?: string;
|
|
35
|
+
}>>;
|
|
36
|
+
//# sourceMappingURL=portChecker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portChecker.d.ts","sourceRoot":"","sources":["../../src/utils/portChecker.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAOzC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB,CA4FA;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA+CpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAqE/D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAQtG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAC7D,KAAK,CAAC;IACJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,CAwCA"}
|