@quatrain/app 1.1.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.
@@ -0,0 +1,5 @@
1
+ export declare class AppBootloader {
2
+ private static resolveEnv;
3
+ static bootstrap(configPath?: string): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=Bootloader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bootloader.d.ts","sourceRoot":"","sources":["../src/Bootloader.ts"],"names":[],"mappings":"AAYA,qBAAa,aAAa;IAIvB,OAAO,CAAC,MAAM,CAAC,UAAU;WAsBL,SAAS,CAAC,UAAU,GAAE,MAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkFpF"}
@@ -0,0 +1,110 @@
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.AppBootloader = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const core_1 = require("@quatrain/core");
10
+ const log_1 = require("@quatrain/log");
11
+ const backend_1 = require("@quatrain/backend");
12
+ const auth_1 = require("@quatrain/auth");
13
+ const queue_1 = require("@quatrain/queue");
14
+ const storage_1 = require("@quatrain/storage");
15
+ const messaging_1 = require("@quatrain/messaging");
16
+ class AppBootloader {
17
+ static resolveEnv(obj) {
18
+ if (typeof obj === 'string') {
19
+ const match = obj.match(/^env\(([^)]+)\)$/);
20
+ if (match) {
21
+ return process.env[match[1]] || '';
22
+ }
23
+ return obj;
24
+ }
25
+ else if (Array.isArray(obj)) {
26
+ return obj.map(item => this.resolveEnv(item));
27
+ }
28
+ else if (obj !== null && typeof obj === 'object') {
29
+ const resolved = {};
30
+ for (const key of Object.keys(obj)) {
31
+ resolved[key] = this.resolveEnv(obj[key]);
32
+ }
33
+ return resolved;
34
+ }
35
+ return obj;
36
+ }
37
+ static async bootstrap(configPath = 'quatrain.json') {
38
+ const fullPath = path_1.default.resolve(process.cwd(), configPath);
39
+ if (!fs_1.default.existsSync(fullPath)) {
40
+ throw new Error(`[Bootloader] Configuration file not found at: ${fullPath}`);
41
+ }
42
+ const rawConfig = JSON.parse(fs_1.default.readFileSync(fullPath, 'utf8'));
43
+ const config = this.resolveEnv(rawConfig);
44
+ log_1.Log.info(`[Bootloader] Initializing application from ${configPath}`);
45
+ if (config.logLevel) {
46
+ const level = log_1.LogLevel[config.logLevel.toUpperCase()];
47
+ if (level !== undefined) {
48
+ core_1.Core.setLogLevel(level);
49
+ }
50
+ }
51
+ if (config.backend && config.backend.package && config.backend.adapter) {
52
+ log_1.Log.info(`[Bootloader] Loading Backend Adapter: ${config.backend.adapter}`);
53
+ try {
54
+ const pkg = require(config.backend.package);
55
+ const AdapterClass = pkg[config.backend.adapter];
56
+ backend_1.Backend.addBackend(new AdapterClass({ config: config.backend.config || {} }), 'default', true);
57
+ }
58
+ catch (e) {
59
+ log_1.Log.error(`[Bootloader] Failed to load backend: ${e.message}`);
60
+ }
61
+ }
62
+ if (config.auth && config.auth.package && config.auth.adapter) {
63
+ log_1.Log.info(`[Bootloader] Loading Auth Adapter: ${config.auth.adapter}`);
64
+ try {
65
+ const pkg = require(config.auth.package);
66
+ const AdapterClass = pkg[config.auth.adapter];
67
+ auth_1.Auth.addProvider(new AdapterClass({ config: config.auth.config || {} }), 'default', true);
68
+ }
69
+ catch (e) {
70
+ log_1.Log.error(`[Bootloader] Failed to load auth: ${e.message}`);
71
+ }
72
+ }
73
+ if (config.queue && config.queue.package && config.queue.adapter) {
74
+ log_1.Log.info(`[Bootloader] Loading Queue Adapter: ${config.queue.adapter}`);
75
+ try {
76
+ const pkg = require(config.queue.package);
77
+ const AdapterClass = pkg[config.queue.adapter];
78
+ queue_1.Queue.addQueue(new AdapterClass({ config: config.queue.config || {} }), 'default', true);
79
+ }
80
+ catch (e) {
81
+ log_1.Log.error(`[Bootloader] Failed to load queue: ${e.message}`);
82
+ }
83
+ }
84
+ if (config.storage && config.storage.package && config.storage.adapter) {
85
+ log_1.Log.info(`[Bootloader] Loading Storage Adapter: ${config.storage.adapter}`);
86
+ try {
87
+ const pkg = require(config.storage.package);
88
+ const AdapterClass = pkg[config.storage.adapter];
89
+ storage_1.Storage.addStorage(new AdapterClass({ config: config.storage.config || {} }), 'default', true);
90
+ }
91
+ catch (e) {
92
+ log_1.Log.error(`[Bootloader] Failed to load storage: ${e.message}`);
93
+ }
94
+ }
95
+ if (config.messaging && config.messaging.package && config.messaging.adapter) {
96
+ log_1.Log.info(`[Bootloader] Loading Messaging Adapter: ${config.messaging.adapter}`);
97
+ try {
98
+ const pkg = require(config.messaging.package);
99
+ const AdapterClass = pkg[config.messaging.adapter];
100
+ messaging_1.Messaging.addMessager(new AdapterClass({ config: config.messaging.config || {} }), 'default', true);
101
+ }
102
+ catch (e) {
103
+ log_1.Log.error(`[Bootloader] Failed to load messaging: ${e.message}`);
104
+ }
105
+ }
106
+ log_1.Log.info(`[Bootloader] Bootstrap completed successfully.`);
107
+ }
108
+ }
109
+ exports.AppBootloader = AppBootloader;
110
+ //# sourceMappingURL=Bootloader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bootloader.js","sourceRoot":"","sources":["../src/Bootloader.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,yCAAqC;AACrC,uCAA6C;AAG7C,+CAA2C;AAC3C,yCAAqC;AACrC,2CAAuC;AACvC,+CAA2C;AAC3C,mDAA+C;AAE/C,MAAa,aAAa;IAIf,MAAM,CAAC,UAAU,CAAC,GAAQ;QAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACT,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACrC,CAAC;YACD,OAAO,GAAG,CAAA;QACb,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,CAAC;aAAM,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAQ,EAAE,CAAA;YACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5C,CAAC;YACD,OAAO,QAAQ,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,CAAA;IACb,CAAC;IAKM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,aAAqB,eAAe;QAC/D,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;QAExD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAEzC,SAAG,CAAC,IAAI,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAA;QAGpE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,GAAI,cAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;YAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvB,WAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAC1B,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtE,SAAG,CAAC,IAAI,CAAC,yCAAyC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YAC3E,IAAI,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC3C,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAChD,iBAAO,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YACjG,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACf,SAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACjE,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7D,SAAG,CAAC,IAAI,CAAC,sCAAsC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YACrE,IAAI,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACxC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7C,WAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YAC5F,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACf,SAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YAC9D,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAChE,SAAG,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACzC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC9C,aAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YAC3F,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACf,SAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YAC/D,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtE,SAAG,CAAC,IAAI,CAAC,yCAAyC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YAC3E,IAAI,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC3C,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAChD,iBAAO,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YACjG,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACf,SAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACjE,CAAC;QACJ,CAAC;QAGD,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC5E,SAAG,CAAC,IAAI,CAAC,2CAA2C,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YAC/E,IAAI,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;gBAC7C,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;gBAClD,qBAAS,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YACtG,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACf,SAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACnE,CAAC;QACJ,CAAC;QAED,SAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC7D,CAAC;CACH;AA5GD,sCA4GC"}
@@ -0,0 +1,10 @@
1
+ export declare class CodeGenerator {
2
+ static generate(config: any, targetDir: string): void;
3
+ private static generatePackageJson;
4
+ private static generateTsConfig;
5
+ private static generateModels;
6
+ private static generateApiEndpoints;
7
+ private static generateIndex;
8
+ private static generateMigration;
9
+ }
10
+ //# sourceMappingURL=CodeGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeGenerator.d.ts","sourceRoot":"","sources":["../src/CodeGenerator.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;WAIT,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAuB5D,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAoClC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiB/B,OAAO,CAAC,MAAM,CAAC,cAAc;IA4C7B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC,OAAO,CAAC,MAAM,CAAC,aAAa;IAmD5B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAmDlC"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CodeGenerator = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const log_1 = require("@quatrain/log");
40
+ class CodeGenerator {
41
+ static generate(config, targetDir) {
42
+ const fullTargetDir = path.resolve(process.cwd(), targetDir);
43
+ const dirs = ['src/models', 'src/api', 'data/migrations/default'];
44
+ for (const dir of dirs) {
45
+ const d = path.resolve(fullTargetDir, dir);
46
+ if (!fs.existsSync(d)) {
47
+ fs.mkdirSync(d, { recursive: true });
48
+ }
49
+ }
50
+ this.generatePackageJson(config, fullTargetDir);
51
+ this.generateTsConfig(fullTargetDir);
52
+ const generatedModels = this.generateModels(config, fullTargetDir);
53
+ this.generateApiEndpoints(config, fullTargetDir, generatedModels);
54
+ this.generateIndex(config, fullTargetDir, generatedModels);
55
+ this.generateMigration(config, fullTargetDir);
56
+ log_1.Log.info(`[CodeGenerator] Application générée avec succès dans ${fullTargetDir}`);
57
+ }
58
+ static generatePackageJson(config, targetDir) {
59
+ const packagePath = path.resolve(targetDir, 'package.json');
60
+ const targetNpmTag = 'latest-dev';
61
+ const packageJson = {
62
+ name: config.name?.toLowerCase().replace(/[^a-z0-9]/g, '-') || "quatrain-generated-app",
63
+ version: "1.0.0",
64
+ description: "Generated by Quatrain Studio",
65
+ main: "src/index.ts",
66
+ type: "module",
67
+ scripts: {
68
+ start: "bun run src/index.ts"
69
+ },
70
+ dependencies: {
71
+ "@quatrain/core": targetNpmTag,
72
+ "@quatrain/backend": targetNpmTag,
73
+ "@quatrain/backend-sqlite": targetNpmTag,
74
+ "@quatrain/api": targetNpmTag,
75
+ "@quatrain/api-server": targetNpmTag,
76
+ "@quatrain/backend-migrations": targetNpmTag
77
+ }
78
+ };
79
+ if (config.authMode === 'oauth') {
80
+ packageJson.dependencies['@quatrain/auth-oidc'] = targetNpmTag;
81
+ }
82
+ if (config.backend?.adapter === 'PostgresAdapter') {
83
+ packageJson.dependencies['@quatrain/backend-postgres'] = targetNpmTag;
84
+ }
85
+ log_1.Log.info(`[CodeGenerator] Generating package.json with dependencies`);
86
+ fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2));
87
+ }
88
+ static generateTsConfig(targetDir) {
89
+ const tsconfig = {
90
+ compilerOptions: {
91
+ target: "ES2022",
92
+ module: "ESNext",
93
+ moduleResolution: "node",
94
+ esModuleInterop: true,
95
+ strict: true,
96
+ skipLibCheck: true,
97
+ forceConsistentCasingInFileNames: true,
98
+ outDir: "dist"
99
+ },
100
+ include: ["src/**/*", "data/migrations/**/*"]
101
+ };
102
+ fs.writeFileSync(path.resolve(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));
103
+ }
104
+ static generateModels(config, targetDir) {
105
+ const models = config.models || [];
106
+ const generatedNames = [];
107
+ for (const model of models) {
108
+ if (!model.name)
109
+ continue;
110
+ const className = model.name;
111
+ const collectionName = model.collectionName || className.toLowerCase();
112
+ generatedNames.push(className);
113
+ const propsCode = model.properties.map((p) => {
114
+ const propType = p.type;
115
+ return ` {
116
+ name: '${p.name}',
117
+ type: ${propType}.TYPE,
118
+ mandatory: ${p.options?.mandatory ? 'true' : 'false'}
119
+ }`;
120
+ }).join(',\n');
121
+ const propTypesToImport = Array.from(new Set(model.properties.map((p) => p.type)));
122
+ const modelCode = `import { PersistedBaseObject } from '@quatrain/backend'
123
+ import { ${propTypesToImport.join(', ')} } from '@quatrain/core'
124
+
125
+ export const ${className}Properties = [
126
+ ${propsCode}
127
+ ]
128
+
129
+ export class ${className} extends PersistedBaseObject {
130
+ static PROPS_DEFINITION = ${className}Properties
131
+ static COLLECTION = '${collectionName}'
132
+
133
+ static async factory(src: any = undefined): Promise<${className}> {
134
+ return super.factory(src, ${className})
135
+ }
136
+ }
137
+ `;
138
+ fs.writeFileSync(path.resolve(targetDir, `src/models/${className}.ts`), modelCode);
139
+ }
140
+ return generatedNames;
141
+ }
142
+ static generateApiEndpoints(config, targetDir, models) {
143
+ for (const className of models) {
144
+ const apiCode = `import { CrudEndpoint } from '@quatrain/api-server'
145
+ import { ${className} } from '../models/${className}'
146
+
147
+ export class ${className}Api extends CrudEndpoint {
148
+ constructor() {
149
+ super('/api/${className.toLowerCase()}s', ${className})
150
+ }
151
+ }
152
+ `;
153
+ fs.writeFileSync(path.resolve(targetDir, `src/api/${className}Api.ts`), apiCode);
154
+ }
155
+ }
156
+ static generateIndex(config, targetDir, models) {
157
+ const adapterClass = config.backend?.adapter === 'PostgresAdapter' ? 'PostgresAdapter' : 'SQLiteAdapter';
158
+ const adapterImport = config.backend?.adapter === 'PostgresAdapter' ? '@quatrain/backend-postgres' : '@quatrain/backend-sqlite';
159
+ const modelImports = models.map(m => `import { ${m} } from './models/${m}'`).join('\n');
160
+ const apiImports = models.map(m => `import { ${m}Api } from './api/${m}Api'`).join('\n');
161
+ const apiRegisters = models.map(m => ` server.addEndpoint(new ${m}Api())`).join('\n');
162
+ const indexCode = `import * as path from 'path'
163
+ import { Backend, InjectMetaMiddleware } from '@quatrain/backend'
164
+ import { ${adapterClass} } from '${adapterImport}'
165
+ import { ExpressAdapter } from '@quatrain/api-server'
166
+ import { MigrationManager } from '@quatrain/backend-migrations'
167
+ ${config.authMode === 'oauth' ? `import { AuthOIDC } from '@quatrain/auth-oidc'\n` : ''}
168
+ ${modelImports}
169
+ ${apiImports}
170
+
171
+ ;(async () => {
172
+ try {
173
+ const adapter = new ${adapterClass}({
174
+ config: ${adapterClass === 'SQLiteAdapter' ? '{ database: path.resolve(process.cwd(), "data/app.sqlite") }' : 'process.env.DATABASE_URL'},
175
+ middlewares: [new InjectMetaMiddleware()]
176
+ })
177
+
178
+ Backend.init(adapter)
179
+
180
+ const mm = new MigrationManager()
181
+ await mm.up()
182
+
183
+ const server = new ExpressAdapter()
184
+
185
+ ${apiRegisters}
186
+
187
+ ${config.authMode === 'oauth' ? ` // Initialize OIDC Auth
188
+ const oidc = AuthOIDC.init('http://localhost:4001')
189
+ server.getApp().use('/oidc', oidc.callback())
190
+ ` : ''}
191
+
192
+ const PORT = Number(process.env.PORT) || 4001
193
+ server.start(PORT, () => {
194
+ console.log(\`🚀 Server started on port \${PORT}\`)
195
+ })
196
+ } catch (e) {
197
+ console.error(e)
198
+ process.exit(1)
199
+ }
200
+ })()
201
+ `;
202
+ fs.writeFileSync(path.resolve(targetDir, 'src/index.ts'), indexCode);
203
+ }
204
+ static generateMigration(config, targetDir) {
205
+ const models = config.models || [];
206
+ let upQueries = '';
207
+ let downQueries = '';
208
+ for (const model of models) {
209
+ if (!model.name)
210
+ continue;
211
+ const collectionName = model.collectionName || model.name.toLowerCase();
212
+ const columns = model.properties.map((p) => {
213
+ let sqlType = 'TEXT';
214
+ if (p.type === 'NumberProperty' || p.type === 'BooleanProperty')
215
+ sqlType = 'INTEGER';
216
+ return `${p.name} ${sqlType}`;
217
+ }).join(',\n ');
218
+ upQueries += `
219
+ await adapter.rawQuery(\`CREATE TABLE IF NOT EXISTS ${collectionName} (
220
+ id TEXT PRIMARY KEY,
221
+ status TEXT,
222
+ created_at TEXT,
223
+ updated_at TEXT,
224
+ created_by TEXT,
225
+ updated_by TEXT,
226
+ ${columns}
227
+ )\`)\n`;
228
+ downQueries += `
229
+ await adapter.rawQuery('DROP TABLE IF EXISTS ${collectionName}')\n`;
230
+ }
231
+ const migrationCode = `import { AbstractBackendAdapter } from '@quatrain/backend'
232
+
233
+ export const up = async ({ context: adapter }: { context: AbstractBackendAdapter }) => {
234
+ try {${upQueries}
235
+ } catch (e) {
236
+ console.error('Migration up error', e)
237
+ }
238
+ }
239
+
240
+ export const down = async ({ context: adapter }: { context: AbstractBackendAdapter }) => {
241
+ try {${downQueries}
242
+ } catch (e) {
243
+ console.error('Migration down error', e)
244
+ }
245
+ }
246
+ `;
247
+ const timestamp = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
248
+ fs.writeFileSync(path.resolve(targetDir, `data/migrations/default/${timestamp}_init.ts`), migrationCode);
249
+ }
250
+ }
251
+ exports.CodeGenerator = CodeGenerator;
252
+ //# sourceMappingURL=CodeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeGenerator.js","sourceRoot":"","sources":["../src/CodeGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,2CAA4B;AAC5B,uCAAmC;AAEnC,MAAa,aAAa;IAIhB,MAAM,CAAC,QAAQ,CAAC,MAAW,EAAE,SAAiB;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;QAG5D,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAA;QACjE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;YAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACvC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QAC/C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAEpC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QAClE,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,eAAe,CAAC,CAAA;QACjE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,eAAe,CAAC,CAAA;QAC1D,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QAE7C,SAAG,CAAC,IAAI,CAAC,wDAAwD,aAAa,EAAE,CAAC,CAAA;IACpF,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,MAAW,EAAE,SAAiB;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAE3D,MAAM,YAAY,GAAG,YAAY,CAAA;QAEjC,MAAM,WAAW,GAAG;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,wBAAwB;YACvF,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACN,KAAK,EAAE,sBAAsB;aAC/B;YACD,YAAY,EAAE;gBACX,gBAAgB,EAAE,YAAY;gBAC9B,mBAAmB,EAAE,YAAY;gBACjC,0BAA0B,EAAE,YAAY;gBACxC,eAAe,EAAE,YAAY;gBAC7B,sBAAsB,EAAE,YAAY;gBACpC,8BAA8B,EAAE,YAAY;aACpB;SAC7B,CAAA;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,YAAY,CAAA;QACjE,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,iBAAiB,EAAE,CAAC;YACjD,WAAW,CAAC,YAAY,CAAC,4BAA4B,CAAC,GAAG,YAAY,CAAA;QACxE,CAAC;QAED,SAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;QACrE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACtE,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,SAAiB;QAC9C,MAAM,QAAQ,GAAG;YACd,eAAe,EAAE;gBACd,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;gBAChB,gBAAgB,EAAE,MAAM;gBACxB,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;gBAClB,gCAAgC,EAAE,IAAI;gBACtC,MAAM,EAAE,MAAM;aAChB;YACD,OAAO,EAAE,CAAC,UAAU,EAAE,sBAAsB,CAAC;SAC/C,CAAA;QACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAChG,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,MAAW,EAAE,SAAiB;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;QAClC,MAAM,cAAc,GAAa,EAAE,CAAA;QAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,SAAQ;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;YAC5B,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,SAAS,CAAC,WAAW,EAAE,CAAA;YACtE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAG9B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC/C,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAA;gBACvB,OAAO;eACJ,CAAC,CAAC,IAAI;cACP,QAAQ;mBACH,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;KACrD,CAAA;YACI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAEd,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEvF,MAAM,SAAS,GAAG;WAChB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;eAExB,SAAS;EACtB,SAAS;;;eAGI,SAAS;+BACO,SAAS;0BACd,cAAc;;yDAEiB,SAAS;kCAChC,SAAS;;;CAG1C,CAAA;YACQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,SAAS,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;QACrF,CAAC;QAED,OAAO,cAAc,CAAA;IACxB,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,MAAW,EAAE,SAAiB,EAAE,MAAgB;QACjF,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG;WACd,SAAS,sBAAsB,SAAS;;eAEpC,SAAS;;oBAEJ,SAAS,CAAC,WAAW,EAAE,OAAO,SAAS;;;CAG1D,CAAA;YACQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,SAAS,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;QACnF,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,MAAW,EAAE,SAAiB,EAAE,MAAgB;QAC1E,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAA;QACxG,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,0BAA0B,CAAA;QAE/H,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1F,MAAM,SAAS,GAAG;;WAEb,YAAY,YAAY,aAAa;;;EAG9C,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,EAAE;EACrF,YAAY;EACZ,UAAU;;;;4BAIgB,YAAY;mBACrB,YAAY,KAAK,eAAe,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,0BAA0B;;;;;;;;;;;EAW/I,YAAY;;EAEZ,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;;;CAG/B,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;CAWL,CAAA;QACK,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;IACvE,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,MAAW,EAAE,SAAiB;QAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;QAElC,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,WAAW,GAAG,EAAE,CAAA;QAEpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,SAAQ;YACzB,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;YAEvE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;gBAE7C,IAAI,OAAO,GAAG,MAAM,CAAA;gBACpB,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;oBAAE,OAAO,GAAG,SAAS,CAAA;gBACpF,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,CAAA;YAChC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAEvB,SAAS,IAAI;4DACsC,cAAc;;;;;;;WAO/D,OAAO;aACL,CAAA;YAEJ,WAAW,IAAI;qDAC6B,cAAc,MAAM,CAAA;QACnE,CAAC;QAED,MAAM,aAAa,GAAG;;;UAGlB,SAAS;;;;;;;UAOT,WAAW;;;;;CAKpB,CAAA;QACK,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC7E,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2BAA2B,SAAS,UAAU,CAAC,EAAE,aAAa,CAAC,CAAA;IAC3G,CAAC;CACH;AAjPD,sCAiPC"}
@@ -0,0 +1,7 @@
1
+ export declare class AppInfra {
2
+ static start(config?: any, targetDir?: string): Promise<void>;
3
+ static stop(targetDir?: string): Promise<void>;
4
+ private static getComposeCommand;
5
+ private static runCompose;
6
+ }
7
+ //# sourceMappingURL=Infra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Infra.d.ts","sourceRoot":"","sources":["../src/Infra.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ;WAME,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;WA6B7D,IAAI,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,OAAO,CAAC,MAAM,CAAC,iBAAiB;mBAKX,UAAU;CA2CjC"}
package/dist/Infra.js ADDED
@@ -0,0 +1,81 @@
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.AppInfra = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const path_1 = __importDefault(require("path"));
9
+ const log_1 = require("@quatrain/log");
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const InfraBuilder_1 = require("./InfraBuilder");
12
+ const CodeGenerator_1 = require("./CodeGenerator");
13
+ class AppInfra {
14
+ static async start(config, targetDir = 'app') {
15
+ let composeFile = path_1.default.resolve(process.cwd(), targetDir, 'compose.yaml');
16
+ if (config) {
17
+ const fullTargetDir = path_1.default.resolve(process.cwd(), targetDir);
18
+ if (!fs_1.default.existsSync(fullTargetDir)) {
19
+ fs_1.default.mkdirSync(fullTargetDir, { recursive: true });
20
+ }
21
+ CodeGenerator_1.CodeGenerator.generate(config, targetDir);
22
+ const { compose, env, dockerfile } = InfraBuilder_1.InfraBuilder.build(config);
23
+ fs_1.default.writeFileSync(composeFile, compose, 'utf8');
24
+ fs_1.default.writeFileSync(path_1.default.resolve(fullTargetDir, '.env'), env, 'utf8');
25
+ fs_1.default.writeFileSync(path_1.default.resolve(fullTargetDir, 'Containerfile'), dockerfile, 'utf8');
26
+ log_1.Log.info(`[Infra] Dynamically generated compose.yaml and .env in ${fullTargetDir}`);
27
+ }
28
+ return this.runCompose('up -d --build', composeFile);
29
+ }
30
+ static async stop(targetDir = 'app') {
31
+ const composeFile = path_1.default.resolve(process.cwd(), targetDir, 'compose.yaml');
32
+ return this.runCompose('down', composeFile);
33
+ }
34
+ static getComposeCommand() {
35
+ return 'podman compose';
36
+ }
37
+ static async runCompose(action, composeFile) {
38
+ return new Promise((resolve, reject) => {
39
+ if (!fs_1.default.existsSync(composeFile)) {
40
+ log_1.Log.error(`[Infra] Compose file not found at: ${composeFile}`);
41
+ return reject(new Error(`Compose file not found: ${composeFile}`));
42
+ }
43
+ const cmd = `${this.getComposeCommand()} -f ${composeFile} ${action}`;
44
+ log_1.Log.info(`[Infra] Executing: ${cmd}`);
45
+ const child = (0, child_process_1.exec)(cmd, (error, stdout, stderr) => {
46
+ if (error) {
47
+ if (error.message.includes('command not found')) {
48
+ log_1.Log.warn(`[Infra] podman compose not found, falling back to docker compose...`);
49
+ (0, child_process_1.exec)(`docker compose -f ${composeFile} ${action}`, (err2, out2, errOut2) => {
50
+ if (err2) {
51
+ log_1.Log.error(`[Infra] Failed to run infrastructure: ${err2.message}`);
52
+ return reject(err2);
53
+ }
54
+ if (out2)
55
+ log_1.Log.debug(`[Infra] ${out2}`);
56
+ if (errOut2)
57
+ log_1.Log.debug(`[Infra] ${errOut2}`);
58
+ resolve();
59
+ });
60
+ return;
61
+ }
62
+ log_1.Log.error(`[Infra] Failed to run infrastructure: ${error.message}`);
63
+ return reject(error);
64
+ }
65
+ if (stdout)
66
+ log_1.Log.debug(`[Infra] ${stdout}`);
67
+ if (stderr)
68
+ log_1.Log.debug(`[Infra] ${stderr}`);
69
+ resolve();
70
+ });
71
+ if (child.stdout) {
72
+ child.stdout.on('data', (data) => console.log(data.toString().trim()));
73
+ }
74
+ if (child.stderr) {
75
+ child.stderr.on('data', (data) => console.error(data.toString().trim()));
76
+ }
77
+ });
78
+ }
79
+ }
80
+ exports.AppInfra = AppInfra;
81
+ //# sourceMappingURL=Infra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Infra.js","sourceRoot":"","sources":["../src/Infra.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAoC;AACpC,gDAAuB;AACvB,uCAAmC;AACnC,4CAAmB;AACnB,iDAA6C;AAC7C,mDAA+C;AAE/C,MAAa,QAAQ;IAMX,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAY,EAAE,YAAoB,KAAK;QAC9D,IAAI,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAExE,IAAI,MAAM,EAAE,CAAC;YAEV,MAAM,aAAa,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;YAC5D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,YAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,CAAC;YAGD,6BAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAGzC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,2BAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAE/D,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YAC9C,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YAClE,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;YAElF,SAAG,CAAC,IAAI,CAAC,0DAA0D,aAAa,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;IACvD,CAAC;IAKM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAoB,KAAK;QAC/C,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAC9C,CAAC;IAEO,MAAM,CAAC,iBAAiB;QAE7B,OAAO,gBAAgB,CAAA;IAC1B,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,WAAmB;QAChE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,SAAG,CAAC,KAAK,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAA;gBAC9D,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC,CAAA;YACrE,CAAC;YAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,WAAW,IAAI,MAAM,EAAE,CAAA;YACrE,SAAG,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAA;YAErC,MAAM,KAAK,GAAG,IAAA,oBAAI,EAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC/C,IAAI,KAAK,EAAE,CAAC;oBAET,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;wBAC/C,SAAG,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;wBAC/E,IAAA,oBAAI,EAAC,qBAAqB,WAAW,IAAI,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;4BACxE,IAAI,IAAI,EAAE,CAAC;gCACR,SAAG,CAAC,KAAK,CAAC,yCAAyC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gCAClE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;4BACtB,CAAC;4BACD,IAAI,IAAI;gCAAE,SAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;4BACtC,IAAI,OAAO;gCAAE,SAAG,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAA;4BAC5C,OAAO,EAAE,CAAA;wBACZ,CAAC,CAAC,CAAA;wBACF,OAAM;oBACT,CAAC;oBACD,SAAG,CAAC,KAAK,CAAC,yCAAyC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;oBACnE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;gBACvB,CAAC;gBACD,IAAI,MAAM;oBAAE,SAAG,CAAC,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;gBAC1C,IAAI,MAAM;oBAAE,SAAG,CAAC,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;gBAC1C,OAAO,EAAE,CAAA;YACZ,CAAC,CAAC,CAAA;YAGF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YACzE,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC3E,CAAC;QACJ,CAAC,CAAC,CAAA;IACL,CAAC;CACH;AAxFD,4BAwFC"}
@@ -0,0 +1,27 @@
1
+ export interface ComposeService {
2
+ image?: string;
3
+ build?: string | {
4
+ context: string;
5
+ dockerfile?: string;
6
+ };
7
+ container_name?: string;
8
+ restart?: string;
9
+ ports?: string[];
10
+ environment?: Record<string, string>;
11
+ volumes?: string[];
12
+ command?: string;
13
+ depends_on?: string[];
14
+ }
15
+ export interface ComposeFile {
16
+ version?: string;
17
+ services: Record<string, ComposeService>;
18
+ volumes?: Record<string, any>;
19
+ }
20
+ export declare class InfraBuilder {
21
+ static build(config: any, appName?: string): {
22
+ compose: string;
23
+ env: string;
24
+ dockerfile: string;
25
+ };
26
+ }
27
+ //# sourceMappingURL=InfraBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfraBuilder.d.ts","sourceRoot":"","sources":["../src/InfraBuilder.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC/B;AAED,qBAAa,YAAY;WAIR,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,MAAuB,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAoH1H"}