@vasp-framework/generator 0.3.0 → 0.9.0
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 +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +35 -11
- package/dist/generate.js.map +1 -1
- package/dist/generators/ApiGenerator.d.ts +7 -0
- package/dist/generators/ApiGenerator.d.ts.map +1 -0
- package/dist/generators/ApiGenerator.js +54 -0
- package/dist/generators/ApiGenerator.js.map +1 -0
- package/dist/generators/AuthGenerator.d.ts.map +1 -1
- package/dist/generators/AuthGenerator.js +2 -0
- package/dist/generators/AuthGenerator.js.map +1 -1
- package/dist/generators/BackendGenerator.d.ts +1 -0
- package/dist/generators/BackendGenerator.d.ts.map +1 -1
- package/dist/generators/BackendGenerator.js +17 -0
- package/dist/generators/BackendGenerator.js.map +1 -1
- package/dist/generators/BaseGenerator.d.ts +8 -1
- package/dist/generators/BaseGenerator.d.ts.map +1 -1
- package/dist/generators/BaseGenerator.js +18 -1
- package/dist/generators/BaseGenerator.js.map +1 -1
- package/dist/generators/CrudGenerator.d.ts.map +1 -1
- package/dist/generators/CrudGenerator.js +14 -0
- package/dist/generators/CrudGenerator.js.map +1 -1
- package/dist/generators/DrizzleSchemaGenerator.d.ts.map +1 -1
- package/dist/generators/DrizzleSchemaGenerator.js +114 -6
- package/dist/generators/DrizzleSchemaGenerator.js.map +1 -1
- package/dist/generators/FrontendGenerator.d.ts.map +1 -1
- package/dist/generators/FrontendGenerator.js +8 -2
- package/dist/generators/FrontendGenerator.js.map +1 -1
- package/dist/generators/JobGenerator.js +1 -1
- package/dist/generators/JobGenerator.js.map +1 -1
- package/dist/generators/MiddlewareGenerator.d.ts +6 -0
- package/dist/generators/MiddlewareGenerator.d.ts.map +1 -0
- package/dist/generators/MiddlewareGenerator.js +26 -0
- package/dist/generators/MiddlewareGenerator.js.map +1 -0
- package/dist/generators/QueryActionGenerator.d.ts +2 -0
- package/dist/generators/QueryActionGenerator.d.ts.map +1 -1
- package/dist/generators/QueryActionGenerator.js +33 -2
- package/dist/generators/QueryActionGenerator.js.map +1 -1
- package/dist/generators/ScaffoldGenerator.d.ts.map +1 -1
- package/dist/generators/ScaffoldGenerator.js +79 -4
- package/dist/generators/ScaffoldGenerator.js.map +1 -1
- package/dist/generators/SeedGenerator.d.ts +6 -0
- package/dist/generators/SeedGenerator.d.ts.map +1 -0
- package/dist/generators/SeedGenerator.js +34 -0
- package/dist/generators/SeedGenerator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest/Manifest.d.ts +30 -0
- package/dist/manifest/Manifest.d.ts.map +1 -0
- package/dist/manifest/Manifest.js +60 -0
- package/dist/manifest/Manifest.js.map +1 -0
- package/dist/template/TemplateEngine.d.ts.map +1 -1
- package/dist/template/TemplateEngine.js +72 -7
- package/dist/template/TemplateEngine.js.map +1 -1
- package/dist/utils/fs.d.ts +13 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +75 -2
- package/dist/utils/fs.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ export class ScaffoldGenerator extends BaseGenerator {
|
|
|
11
11
|
'src/pages',
|
|
12
12
|
'src/components',
|
|
13
13
|
'src/lib',
|
|
14
|
+
'shared',
|
|
14
15
|
'drizzle',
|
|
15
16
|
'drizzle/migrations',
|
|
16
17
|
'server/routes/queries',
|
|
@@ -18,6 +19,10 @@ export class ScaffoldGenerator extends BaseGenerator {
|
|
|
18
19
|
'server/middleware',
|
|
19
20
|
'server/db',
|
|
20
21
|
'tests',
|
|
22
|
+
'tests/crud',
|
|
23
|
+
'tests/auth',
|
|
24
|
+
'tests/queries',
|
|
25
|
+
'tests/actions',
|
|
21
26
|
...(this.ctx.isSpa
|
|
22
27
|
? ['src/vasp/client']
|
|
23
28
|
: ['composables', 'plugins', 'pages', 'middleware']),
|
|
@@ -39,15 +44,49 @@ export class ScaffoldGenerator extends BaseGenerator {
|
|
|
39
44
|
// .gitignore
|
|
40
45
|
this.write('.gitignore', this.render('shared/.gitignore.hbs'));
|
|
41
46
|
// .env.example
|
|
42
|
-
|
|
47
|
+
const envData = {
|
|
43
48
|
backendPort: DEFAULT_BACKEND_PORT,
|
|
44
49
|
frontendPort,
|
|
45
50
|
authMethods: this.ctx.ast.auth?.methods ?? [],
|
|
51
|
+
};
|
|
52
|
+
this.write('.env.example', this.render('shared/.env.example.hbs', envData));
|
|
53
|
+
// .env (working copy so the app starts immediately)
|
|
54
|
+
this.write('.env', this.render('shared/.env.hbs', envData));
|
|
55
|
+
// README.md
|
|
56
|
+
this.write('README.md', this.render('shared/README.md.hbs', {
|
|
57
|
+
backendPort: DEFAULT_BACKEND_PORT,
|
|
46
58
|
}));
|
|
47
59
|
// tsconfig.json — only when typescript: true
|
|
48
60
|
if (this.ctx.isTypeScript) {
|
|
49
61
|
this.write('tsconfig.json', this.render('shared/tsconfig.json.hbs'));
|
|
50
62
|
}
|
|
63
|
+
// shared/types — entity interfaces + query/action type stubs (TS only)
|
|
64
|
+
if (this.ctx.isTypeScript && this.ctx.ast.entities.length > 0) {
|
|
65
|
+
this.write('shared/types.ts', this.render('shared/shared/types.hbs', {
|
|
66
|
+
entities: this.ctx.ast.entities,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
// shared/validation — Valibot schemas derived from entities
|
|
70
|
+
if (this.ctx.ast.entities.length > 0) {
|
|
71
|
+
this.write(`shared/validation.${this.ctx.ext}`, this.render('shared/shared/validation.hbs', {
|
|
72
|
+
entities: this.ctx.ast.entities,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
// Test scaffold
|
|
76
|
+
this.write(`vitest.config.${this.ctx.ext}`, this.render(`shared/tests/vitest.config.${this.ctx.ext}.hbs`));
|
|
77
|
+
this.write(`tests/setup.${this.ctx.ext}`, this.render(`shared/tests/setup.${this.ctx.ext}.hbs`));
|
|
78
|
+
for (const crud of this.ctx.ast.cruds) {
|
|
79
|
+
this.write(`tests/crud/${crud.entity.toLowerCase()}.test.${this.ctx.ext}`, this.render(`shared/tests/crud/_entity.test.${this.ctx.ext}.hbs`, { entity: crud.entity }));
|
|
80
|
+
}
|
|
81
|
+
for (const query of this.ctx.ast.queries) {
|
|
82
|
+
this.write(`tests/queries/${query.name}.test.${this.ctx.ext}`, this.render(`shared/tests/queries/_query.test.${this.ctx.ext}.hbs`, { name: query.name }));
|
|
83
|
+
}
|
|
84
|
+
for (const action of this.ctx.ast.actions) {
|
|
85
|
+
this.write(`tests/actions/${action.name}.test.${this.ctx.ext}`, this.render(`shared/tests/actions/_action.test.${this.ctx.ext}.hbs`, { name: action.name }));
|
|
86
|
+
}
|
|
87
|
+
if (this.ctx.ast.auth) {
|
|
88
|
+
this.write(`tests/auth/login.test.${this.ctx.ext}`, this.render(`shared/tests/auth/login.test.${this.ctx.ext}.hbs`));
|
|
89
|
+
}
|
|
51
90
|
// main.vasp (copy the source)
|
|
52
91
|
this.write('main.vasp', this.generateMainVasp());
|
|
53
92
|
}
|
|
@@ -62,11 +101,18 @@ export class ScaffoldGenerator extends BaseGenerator {
|
|
|
62
101
|
` db: ${ast.app.db}`,
|
|
63
102
|
` ssr: ${typeof ast.app.ssr === 'string' ? `"${ast.app.ssr}"` : ast.app.ssr}`,
|
|
64
103
|
` typescript: ${ast.app.typescript}`,
|
|
104
|
+
...(ast.app.env && Object.keys(ast.app.env).length > 0
|
|
105
|
+
? [
|
|
106
|
+
` env: {`,
|
|
107
|
+
...Object.entries(ast.app.env).map(([key, requirement]) => ` ${key}: ${requirement}`),
|
|
108
|
+
` }`,
|
|
109
|
+
]
|
|
110
|
+
: []),
|
|
65
111
|
`}`,
|
|
66
112
|
'',
|
|
67
113
|
];
|
|
68
114
|
if (ast.auth) {
|
|
69
|
-
lines.push(`auth ${ast.auth.name} {`, ` userEntity: ${ast.auth.userEntity}`, ` methods: [ ${ast.auth.methods.join(', ')} ]`, `}`, '');
|
|
115
|
+
lines.push(`auth ${ast.auth.name} {`, ` userEntity: ${ast.auth.userEntity}`, ` methods: [ ${ast.auth.methods.join(', ')} ]`, ...(ast.auth.roles && ast.auth.roles.length > 0 ? [` roles: [ ${ast.auth.roles.join(', ')} ]`] : []), `}`, '');
|
|
70
116
|
}
|
|
71
117
|
for (const route of ast.routes) {
|
|
72
118
|
lines.push(`route ${route.name} {`, ` path: "${route.path}"`, ` to: ${route.to}`, `}`, '');
|
|
@@ -78,23 +124,52 @@ export class ScaffoldGenerator extends BaseGenerator {
|
|
|
78
124
|
: `import { ${comp.namedExport} } from "${comp.source}"`;
|
|
79
125
|
lines.push(`page ${page.name} {`, ` component: ${importStr}`, `}`, '');
|
|
80
126
|
}
|
|
127
|
+
for (const entity of ast.entities) {
|
|
128
|
+
lines.push(`entity ${entity.name} {`);
|
|
129
|
+
for (const field of entity.fields) {
|
|
130
|
+
const mods = field.modifiers.map((m) => `@${m.replace('_', '(').replace('default_now', 'default(now)')}`).join(' ');
|
|
131
|
+
lines.push(` ${field.name}: ${field.type}${mods ? ' ' + mods : ''}`);
|
|
132
|
+
}
|
|
133
|
+
lines.push(`}`, '');
|
|
134
|
+
}
|
|
81
135
|
for (const query of ast.queries) {
|
|
82
136
|
const fn = query.fn;
|
|
83
137
|
const fnStr = fn.kind === 'named'
|
|
84
138
|
? `import { ${fn.namedExport} } from "${fn.source}"`
|
|
85
139
|
: `import ${fn.defaultExport} from "${fn.source}"`;
|
|
86
|
-
lines.push(`query ${query.name} {`, ` fn: ${fnStr}`, ` entities: [${query.entities.join(', ')}]`, `}`, '');
|
|
140
|
+
lines.push(`query ${query.name} {`, ` fn: ${fnStr}`, ` entities: [${query.entities.join(', ')}]`, ...(query.auth ? [` auth: true`] : []), ...(query.roles && query.roles.length > 0 ? [` roles: [${query.roles.join(', ')}]`] : []), `}`, '');
|
|
87
141
|
}
|
|
88
142
|
for (const action of ast.actions) {
|
|
89
143
|
const fn = action.fn;
|
|
90
144
|
const fnStr = fn.kind === 'named'
|
|
91
145
|
? `import { ${fn.namedExport} } from "${fn.source}"`
|
|
92
146
|
: `import ${fn.defaultExport} from "${fn.source}"`;
|
|
93
|
-
lines.push(`action ${action.name} {`, ` fn: ${fnStr}`, ` entities: [${action.entities.join(', ')}]`, `}`, '');
|
|
147
|
+
lines.push(`action ${action.name} {`, ` fn: ${fnStr}`, ` entities: [${action.entities.join(', ')}]`, ...(action.auth ? [` auth: true`] : []), ...(action.roles && action.roles.length > 0 ? [` roles: [${action.roles.join(', ')}]`] : []), `}`, '');
|
|
148
|
+
}
|
|
149
|
+
for (const middleware of ast.middlewares ?? []) {
|
|
150
|
+
const fn = middleware.fn;
|
|
151
|
+
const fnStr = fn.kind === 'named'
|
|
152
|
+
? `import { ${fn.namedExport} } from "${fn.source}"`
|
|
153
|
+
: `import ${fn.defaultExport} from "${fn.source}"`;
|
|
154
|
+
lines.push(`middleware ${middleware.name} {`, ` fn: ${fnStr}`, ` scope: ${middleware.scope}`, `}`, '');
|
|
155
|
+
}
|
|
156
|
+
for (const api of ast.apis ?? []) {
|
|
157
|
+
const fn = api.fn;
|
|
158
|
+
const fnStr = fn.kind === 'named'
|
|
159
|
+
? `import { ${fn.namedExport} } from "${fn.source}"`
|
|
160
|
+
: `import ${fn.defaultExport} from "${fn.source}"`;
|
|
161
|
+
lines.push(`api ${api.name} {`, ` method: ${api.method}`, ` path: "${api.path}"`, ` fn: ${fnStr}`, ...(api.auth ? [` auth: true`] : []), ...(api.roles && api.roles.length > 0 ? [` roles: [${api.roles.join(', ')}]`] : []), `}`, '');
|
|
94
162
|
}
|
|
95
163
|
for (const crud of ast.cruds) {
|
|
96
164
|
lines.push(`crud ${crud.name} {`, ` entity: ${crud.entity}`, ` operations: [${crud.operations.join(', ')}]`, `}`, '');
|
|
97
165
|
}
|
|
166
|
+
if (ast.seed) {
|
|
167
|
+
const seedFn = ast.seed.fn;
|
|
168
|
+
const seedFnStr = seedFn.kind === 'named'
|
|
169
|
+
? `import { ${seedFn.namedExport} } from "${seedFn.source}"`
|
|
170
|
+
: `import ${seedFn.defaultExport} from "${seedFn.source}"`;
|
|
171
|
+
lines.push(`seed {`, ` fn: ${seedFnStr}`, `}`, '');
|
|
172
|
+
}
|
|
98
173
|
return lines.join('\n');
|
|
99
174
|
}
|
|
100
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScaffoldGenerator.js","sourceRoot":"","sources":["../../src/generators/ScaffoldGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE/F,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD,GAAG;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QAExD,4BAA4B;QAC5B,MAAM,IAAI,GAAG;YACX,WAAW;YACX,gBAAgB;YAChB,SAAS;YACT,SAAS;YACT,oBAAoB;YACpB,uBAAuB;YACvB,uBAAuB;YACvB,mBAAmB;YACnB,WAAW;YACX,OAAO;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;gBAChB,CAAC,CAAC,CAAC,iBAAiB,CAAC;gBACrB,CAAC,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;SACvD,CAAA;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAA;QAEzE,eAAe;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE;YACxD,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE,oBAAoB;YACjC,YAAY;YACZ,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;SAC9C,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;QAEtC,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAEhE,aAAa;QACb,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAA;QAE9D,eAAe;QACf,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE;
|
|
1
|
+
{"version":3,"file":"ScaffoldGenerator.js","sourceRoot":"","sources":["../../src/generators/ScaffoldGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeedGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/SeedGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,GAAG,IAAI,IAAI;IAuBX,OAAO,CAAC,yBAAyB;CAalC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { BaseGenerator } from './BaseGenerator.js';
|
|
4
|
+
export class SeedGenerator extends BaseGenerator {
|
|
5
|
+
run() {
|
|
6
|
+
const { seed, app } = this.ctx.ast;
|
|
7
|
+
if (!seed)
|
|
8
|
+
return;
|
|
9
|
+
this.ctx.logger.info('Generating seed runner...');
|
|
10
|
+
const ext = this.ctx.ext;
|
|
11
|
+
const fn = seed.fn;
|
|
12
|
+
const seedImportName = fn.kind === 'named' ? fn.namedExport : fn.defaultExport;
|
|
13
|
+
const fnSource = this.resolveServerImport(fn.source, 'server/db/');
|
|
14
|
+
this.write(`server/db/seed.${ext}`, this.render('shared/server/db/seed.hbs', {
|
|
15
|
+
seedImportKind: fn.kind,
|
|
16
|
+
seedImportName,
|
|
17
|
+
fnSource,
|
|
18
|
+
}));
|
|
19
|
+
this.generateSeedStubIfMissing(fn.source, seedImportName);
|
|
20
|
+
}
|
|
21
|
+
generateSeedStubIfMissing(source, importName) {
|
|
22
|
+
if (!source.startsWith('@src/'))
|
|
23
|
+
return;
|
|
24
|
+
const relativePath = source.replace('@src/', 'src/');
|
|
25
|
+
const fullPath = join(this.ctx.outputDir, relativePath);
|
|
26
|
+
if (existsSync(fullPath))
|
|
27
|
+
return;
|
|
28
|
+
const content = this.ctx.isTypeScript
|
|
29
|
+
? `export default async function ${importName}(context: { db: unknown }): Promise<void> {\n void context\n}\n`
|
|
30
|
+
: `export default async function ${importName}(context) {\n void context\n}\n`;
|
|
31
|
+
this.write(relativePath, content);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=SeedGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeedGenerator.js","sourceRoot":"","sources":["../../src/generators/SeedGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,GAAG;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;QAClC,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QAClB,MAAM,cAAc,GAAG,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAA;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAElE,IAAI,CAAC,KAAK,CACR,kBAAkB,GAAG,EAAE,EACvB,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YACvC,cAAc,EAAE,EAAE,CAAC,IAAI;YACvB,cAAc;YACd,QAAQ;SACT,CAAC,CACH,CAAA;QAED,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC3D,CAAC;IAEO,yBAAyB,CAAC,MAAc,EAAE,UAAkB;QAClE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAM;QAEvC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACvD,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAM;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY;YACnC,CAAC,CAAC,iCAAiC,UAAU,kEAAkE;YAC/G,CAAC,CAAC,iCAAiC,UAAU,kCAAkC,CAAA;QAEjF,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { generate } from './generate.js';
|
|
2
2
|
export type { GeneratorContext } from './GeneratorContext.js';
|
|
3
|
+
export { Manifest, computeHash } from './manifest/Manifest.js';
|
|
4
|
+
export type { ManifestData, ManifestEntry } from './manifest/Manifest.js';
|
|
5
|
+
export { isPlaceholderValue, parseEnvFile } from './utils/fs.js';
|
|
3
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ManifestEntry {
|
|
2
|
+
hash: string;
|
|
3
|
+
generator: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ManifestData {
|
|
6
|
+
version: string;
|
|
7
|
+
generatedAt: string;
|
|
8
|
+
files: Record<string, ManifestEntry>;
|
|
9
|
+
}
|
|
10
|
+
export declare class Manifest {
|
|
11
|
+
private data;
|
|
12
|
+
constructor(version: string);
|
|
13
|
+
/** Record a generated file with its content hash and source generator. */
|
|
14
|
+
record(relativePath: string, content: string, generator: string): void;
|
|
15
|
+
/** Get the manifest entry for a given file path. */
|
|
16
|
+
getEntry(relativePath: string): ManifestEntry | undefined;
|
|
17
|
+
/** Check whether a file was tracked in this manifest. */
|
|
18
|
+
hasFile(relativePath: string): boolean;
|
|
19
|
+
/** All tracked files. */
|
|
20
|
+
get files(): Record<string, ManifestEntry>;
|
|
21
|
+
/** The Vasp version used for this generation. */
|
|
22
|
+
get version(): string;
|
|
23
|
+
/** Persist the manifest to `.vasp/manifest.json` in the output directory. */
|
|
24
|
+
save(outputDir: string): void;
|
|
25
|
+
/** Load an existing manifest from an output directory. Returns null if none exists. */
|
|
26
|
+
static load(outputDir: string): Manifest | null;
|
|
27
|
+
}
|
|
28
|
+
/** Compute a SHA-256 hex digest of the given content. */
|
|
29
|
+
export declare function computeHash(content: string): string;
|
|
30
|
+
//# sourceMappingURL=Manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Manifest.d.ts","sourceRoot":"","sources":["../../src/manifest/Manifest.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACrC;AAKD,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAc;gBAEd,OAAO,EAAE,MAAM;IAQ3B,0EAA0E;IAC1E,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOtE,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIzD,yDAAyD;IACzD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAItC,yBAAyB;IACzB,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAEzC;IAED,iDAAiD;IACjD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,6EAA6E;IAC7E,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAU7B,uFAAuF;IACvF,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;CAShD;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
const MANIFEST_DIR = '.vasp';
|
|
5
|
+
const MANIFEST_FILE = 'manifest.json';
|
|
6
|
+
export class Manifest {
|
|
7
|
+
data;
|
|
8
|
+
constructor(version) {
|
|
9
|
+
this.data = {
|
|
10
|
+
version,
|
|
11
|
+
generatedAt: new Date().toISOString(),
|
|
12
|
+
files: {},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** Record a generated file with its content hash and source generator. */
|
|
16
|
+
record(relativePath, content, generator) {
|
|
17
|
+
this.data.files[relativePath] = {
|
|
18
|
+
hash: computeHash(content),
|
|
19
|
+
generator,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** Get the manifest entry for a given file path. */
|
|
23
|
+
getEntry(relativePath) {
|
|
24
|
+
return this.data.files[relativePath];
|
|
25
|
+
}
|
|
26
|
+
/** Check whether a file was tracked in this manifest. */
|
|
27
|
+
hasFile(relativePath) {
|
|
28
|
+
return relativePath in this.data.files;
|
|
29
|
+
}
|
|
30
|
+
/** All tracked files. */
|
|
31
|
+
get files() {
|
|
32
|
+
return this.data.files;
|
|
33
|
+
}
|
|
34
|
+
/** The Vasp version used for this generation. */
|
|
35
|
+
get version() {
|
|
36
|
+
return this.data.version;
|
|
37
|
+
}
|
|
38
|
+
/** Persist the manifest to `.vasp/manifest.json` in the output directory. */
|
|
39
|
+
save(outputDir) {
|
|
40
|
+
const manifestDir = join(outputDir, MANIFEST_DIR);
|
|
41
|
+
mkdirSync(manifestDir, { recursive: true });
|
|
42
|
+
writeFileSync(join(manifestDir, MANIFEST_FILE), JSON.stringify(this.data, null, 2), 'utf8');
|
|
43
|
+
}
|
|
44
|
+
/** Load an existing manifest from an output directory. Returns null if none exists. */
|
|
45
|
+
static load(outputDir) {
|
|
46
|
+
const manifestPath = join(outputDir, MANIFEST_DIR, MANIFEST_FILE);
|
|
47
|
+
if (!existsSync(manifestPath))
|
|
48
|
+
return null;
|
|
49
|
+
const raw = readFileSync(manifestPath, 'utf8');
|
|
50
|
+
const data = JSON.parse(raw);
|
|
51
|
+
const manifest = new Manifest(data.version);
|
|
52
|
+
manifest.data = data;
|
|
53
|
+
return manifest;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Compute a SHA-256 hex digest of the given content. */
|
|
57
|
+
export function computeHash(content) {
|
|
58
|
+
return createHash('sha256').update(content, 'utf8').digest('hex');
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../../src/manifest/Manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAahC,MAAM,YAAY,GAAG,OAAO,CAAA;AAC5B,MAAM,aAAa,GAAG,eAAe,CAAA;AAErC,MAAM,OAAO,QAAQ;IACX,IAAI,CAAc;IAE1B,YAAY,OAAe;QACzB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO;YACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,KAAK,EAAE,EAAE;SACV,CAAA;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,CAAC,YAAoB,EAAE,OAAe,EAAE,SAAiB;QAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;YAC9B,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;YAC1B,SAAS;SACV,CAAA;IACH,CAAC;IAED,oDAAoD;IACpD,QAAQ,CAAC,YAAoB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACtC,CAAC;IAED,yDAAyD;IACzD,OAAO,CAAC,YAAoB;QAC1B,OAAO,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IACxC,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IACxB,CAAC;IAED,iDAAiD;IACjD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;IAC1B,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,SAAiB;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACjD,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,aAAa,CACX,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAClC,MAAM,CACP,CAAA;IACH,CAAC;IAED,uFAAuF;IACvF,MAAM,CAAC,IAAI,CAAC,SAAiB;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;QACjE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAA;QAC1C,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3C,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;QACpB,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF;AAED,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACnE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../src/template/TemplateEngine.ts"],"names":[],"mappings":"AAOA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmB;;IAOvC;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYhC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAQ1D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAInE;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,+BAA+B;IAC/B,IAAI,IAAI,MAAM,EAAE;IAMhB,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../src/template/TemplateEngine.ts"],"names":[],"mappings":"AAOA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmB;;IAOvC;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYhC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAQ1D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAInE;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,+BAA+B;IAC/B,IAAI,IAAI,MAAM,EAAE;IAMhB,OAAO,CAAC,eAAe;IA+HvB,OAAO,CAAC,OAAO;CAiBhB;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C"}
|
|
@@ -78,24 +78,89 @@ export class TemplateEngine {
|
|
|
78
78
|
this.hbs.registerHelper('importName', (imp) => {
|
|
79
79
|
return imp.kind === 'default' ? (imp.defaultExport ?? '') : (imp.namedExport ?? '');
|
|
80
80
|
});
|
|
81
|
+
/** tsFieldType: maps a Vasp field type to a TypeScript type string */
|
|
82
|
+
this.hbs.registerHelper('tsFieldType', (fieldType, enumValues) => {
|
|
83
|
+
if (fieldType === 'Enum' && Array.isArray(enumValues) && enumValues.length > 0) {
|
|
84
|
+
return enumValues.map((v) => `'${v}'`).join(' | ');
|
|
85
|
+
}
|
|
86
|
+
const tsMap = {
|
|
87
|
+
String: 'string',
|
|
88
|
+
Text: 'string',
|
|
89
|
+
Int: 'number',
|
|
90
|
+
Float: 'number',
|
|
91
|
+
Boolean: 'boolean',
|
|
92
|
+
DateTime: 'Date',
|
|
93
|
+
Json: 'unknown',
|
|
94
|
+
};
|
|
95
|
+
return tsMap[fieldType] ?? fieldType;
|
|
96
|
+
});
|
|
97
|
+
/** valibotSchema: maps a Vasp field type + nullability to a Valibot schema expression */
|
|
98
|
+
this.hbs.registerHelper('valibotSchema', (fieldType, nullable, optional, enumValues) => {
|
|
99
|
+
let base;
|
|
100
|
+
if (fieldType === 'Enum' && Array.isArray(enumValues) && enumValues.length > 0) {
|
|
101
|
+
const items = enumValues.map((v) => `'${v}'`).join(', ');
|
|
102
|
+
base = `v.picklist([${items}])`;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const baseMap = {
|
|
106
|
+
String: 'v.pipe(v.string(), v.minLength(1))',
|
|
107
|
+
Text: 'v.pipe(v.string(), v.minLength(1))',
|
|
108
|
+
Int: 'v.number()',
|
|
109
|
+
Float: 'v.number()',
|
|
110
|
+
Boolean: 'v.boolean()',
|
|
111
|
+
DateTime: 'v.string()',
|
|
112
|
+
Json: 'v.unknown()',
|
|
113
|
+
};
|
|
114
|
+
base = baseMap[fieldType] ?? 'v.unknown()';
|
|
115
|
+
}
|
|
116
|
+
const isOptional = optional === true || optional === 'true';
|
|
117
|
+
if (nullable) {
|
|
118
|
+
return isOptional
|
|
119
|
+
? `v.optional(v.nullable(${base}))`
|
|
120
|
+
: `v.nullable(${base})`;
|
|
121
|
+
}
|
|
122
|
+
return isOptional ? `v.optional(${base})` : base;
|
|
123
|
+
});
|
|
81
124
|
/** drizzleColumn: maps a FieldType + modifiers to a Drizzle column call string */
|
|
82
|
-
this.hbs.registerHelper('drizzleColumn', (fieldName, fieldType, modifiers) => {
|
|
125
|
+
this.hbs.registerHelper('drizzleColumn', (fieldName, fieldType, modifiers, nullable, defaultValue, isUpdatedAt) => {
|
|
83
126
|
const typeMap = {
|
|
84
127
|
String: 'text',
|
|
128
|
+
Text: 'text',
|
|
85
129
|
Int: 'integer',
|
|
86
130
|
Boolean: 'boolean',
|
|
87
131
|
DateTime: 'timestamp',
|
|
88
132
|
Float: 'doublePrecision',
|
|
133
|
+
Json: 'jsonb',
|
|
89
134
|
};
|
|
90
135
|
const drizzleFn = typeMap[fieldType] ?? 'text';
|
|
91
136
|
let col = `${drizzleFn}('${toCamelCase(fieldName)}')`;
|
|
92
137
|
if (Array.isArray(modifiers)) {
|
|
93
|
-
if (modifiers.includes('id'))
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
138
|
+
if (modifiers.includes('id')) {
|
|
139
|
+
// Use identity column for auto-incrementing integer primary keys
|
|
140
|
+
if (fieldType === 'Int') {
|
|
141
|
+
col = `integer('${toCamelCase(fieldName)}').primaryKey().generatedByDefaultAsIdentity()`;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
col += '.primaryKey()';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// Non-PK columns: notNull by default unless @nullable
|
|
149
|
+
if (!nullable && !modifiers.includes('nullable'))
|
|
150
|
+
col += '.notNull()';
|
|
151
|
+
if (modifiers.includes('unique'))
|
|
152
|
+
col += '.unique()';
|
|
153
|
+
if (modifiers.includes('default_now') || defaultValue === 'now') {
|
|
154
|
+
col += '.defaultNow()';
|
|
155
|
+
}
|
|
156
|
+
else if (defaultValue !== undefined && defaultValue !== 'now') {
|
|
157
|
+
const isString = fieldType === 'String' || fieldType === 'Text';
|
|
158
|
+
col += isString ? `.default('${defaultValue}')` : `.default(${defaultValue})`;
|
|
159
|
+
}
|
|
160
|
+
if (isUpdatedAt || modifiers.includes('updatedAt')) {
|
|
161
|
+
col += '.$onUpdate(() => new Date())';
|
|
162
|
+
}
|
|
163
|
+
}
|
|
99
164
|
}
|
|
100
165
|
return col;
|
|
101
166
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../src/template/TemplateEngine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../src/template/TemplateEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/fs.d.ts
CHANGED
|
@@ -2,4 +2,17 @@
|
|
|
2
2
|
export declare function writeFile(filePath: string, content: string): void;
|
|
3
3
|
/** Create a directory (and all parents). */
|
|
4
4
|
export declare function ensureDir(dir: string): void;
|
|
5
|
+
/** Parse a .env file into key-value pairs. */
|
|
6
|
+
export declare function parseEnvFile(content: string): Record<string, string>;
|
|
7
|
+
/** Check if a .env value looks like a placeholder. */
|
|
8
|
+
export declare function isPlaceholderValue(value: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Copy all files from a staging directory to the real output directory.
|
|
11
|
+
* Optionally preserves `.env` if it already exists with non-placeholder values.
|
|
12
|
+
*/
|
|
13
|
+
export declare function commitStagedFiles(stagingDir: string, realDir: string, options?: {
|
|
14
|
+
preserveEnv?: boolean;
|
|
15
|
+
}): void;
|
|
16
|
+
/** Remove a directory tree (no-op if it doesn't exist). */
|
|
17
|
+
export declare function cleanupDir(dir: string): void;
|
|
5
18
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/utils/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,4CAA4C;AAC5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C"}
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,4CAA4C;AAC5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUpE;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAezD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,IAAI,CAeN;AAuBD,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI5C"}
|
package/dist/utils/fs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { dirname } from 'node:path';
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, relative } from 'node:path';
|
|
3
3
|
/** Write a file, creating parent directories as needed. */
|
|
4
4
|
export function writeFile(filePath, content) {
|
|
5
5
|
mkdirSync(dirname(filePath), { recursive: true });
|
|
@@ -9,4 +9,77 @@ export function writeFile(filePath, content) {
|
|
|
9
9
|
export function ensureDir(dir) {
|
|
10
10
|
mkdirSync(dir, { recursive: true });
|
|
11
11
|
}
|
|
12
|
+
/** Parse a .env file into key-value pairs. */
|
|
13
|
+
export function parseEnvFile(content) {
|
|
14
|
+
const env = {};
|
|
15
|
+
for (const line of content.split('\n')) {
|
|
16
|
+
const trimmed = line.trim();
|
|
17
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
18
|
+
continue;
|
|
19
|
+
const eqIndex = trimmed.indexOf('=');
|
|
20
|
+
if (eqIndex === -1)
|
|
21
|
+
continue;
|
|
22
|
+
env[trimmed.slice(0, eqIndex).trim()] = trimmed.slice(eqIndex + 1).trim();
|
|
23
|
+
}
|
|
24
|
+
return env;
|
|
25
|
+
}
|
|
26
|
+
/** Check if a .env value looks like a placeholder. */
|
|
27
|
+
export function isPlaceholderValue(value) {
|
|
28
|
+
const v = value.trim();
|
|
29
|
+
if (!v)
|
|
30
|
+
return true;
|
|
31
|
+
const patterns = [
|
|
32
|
+
/^postgres:\/\/user:password@localhost/,
|
|
33
|
+
/^change-me/i,
|
|
34
|
+
/^your[_-]/i,
|
|
35
|
+
/^placeholder/i,
|
|
36
|
+
/^CHANGE_ME/,
|
|
37
|
+
/^<.+>$/,
|
|
38
|
+
/^changeme$/i,
|
|
39
|
+
/^secret$/i,
|
|
40
|
+
/^password$/i,
|
|
41
|
+
];
|
|
42
|
+
return patterns.some(p => p.test(v));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Copy all files from a staging directory to the real output directory.
|
|
46
|
+
* Optionally preserves `.env` if it already exists with non-placeholder values.
|
|
47
|
+
*/
|
|
48
|
+
export function commitStagedFiles(stagingDir, realDir, options = {}) {
|
|
49
|
+
const protectedFiles = new Set();
|
|
50
|
+
if (options.preserveEnv) {
|
|
51
|
+
const realEnvPath = join(realDir, '.env');
|
|
52
|
+
if (existsSync(realEnvPath)) {
|
|
53
|
+
const existing = parseEnvFile(readFileSync(realEnvPath, 'utf8'));
|
|
54
|
+
const dbUrl = existing['DATABASE_URL'];
|
|
55
|
+
if (dbUrl && !isPlaceholderValue(dbUrl)) {
|
|
56
|
+
protectedFiles.add('.env');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
copyDirRecursive(stagingDir, realDir, stagingDir, protectedFiles);
|
|
61
|
+
}
|
|
62
|
+
function copyDirRecursive(src, dest, base, protectedFiles) {
|
|
63
|
+
mkdirSync(dest, { recursive: true });
|
|
64
|
+
for (const entry of readdirSync(src, { withFileTypes: true })) {
|
|
65
|
+
const srcPath = join(src, entry.name);
|
|
66
|
+
const destPath = join(dest, entry.name);
|
|
67
|
+
if (entry.isDirectory()) {
|
|
68
|
+
copyDirRecursive(srcPath, destPath, base, protectedFiles);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const relPath = relative(base, srcPath);
|
|
72
|
+
if (protectedFiles.has(relPath))
|
|
73
|
+
continue;
|
|
74
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
75
|
+
copyFileSync(srcPath, destPath);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Remove a directory tree (no-op if it doesn't exist). */
|
|
80
|
+
export function cleanupDir(dir) {
|
|
81
|
+
if (existsSync(dir)) {
|
|
82
|
+
rmSync(dir, { recursive: true, force: true });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
12
85
|
//# sourceMappingURL=fs.js.map
|
package/dist/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED