@opensaas/stack-cli 0.1.4 → 0.1.6
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +18 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +69 -4
- package/dist/commands/generate.js.map +1 -1
- package/dist/generator/context.d.ts.map +1 -1
- package/dist/generator/context.js +53 -11
- package/dist/generator/context.js.map +1 -1
- package/dist/generator/types.d.ts.map +1 -1
- package/dist/generator/types.js +46 -0
- package/dist/generator/types.js.map +1 -1
- package/package.json +11 -2
- package/src/commands/__snapshots__/generate.test.ts.snap +47 -10
- package/src/commands/generate.ts +83 -5
- package/src/generator/__snapshots__/context.test.ts.snap +199 -20
- package/src/generator/context.test.ts +3 -16
- package/src/generator/context.ts +53 -11
- package/src/generator/types.ts +54 -0
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @opensaas/stack-cli
|
|
2
2
|
|
|
3
|
+
## 0.1.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 39996ca: Fix missing StoredEmbedding type import in generated types. Fields can now declare TypeScript imports needed for their types via the new `getTypeScriptImports()` method. This resolves the type error where `StoredEmbedding` was referenced but not imported in the generated `.opensaas/types.ts` file.
|
|
8
|
+
- 39996ca: Add plugin mechanism
|
|
9
|
+
- Updated dependencies [39996ca]
|
|
10
|
+
- Updated dependencies [39996ca]
|
|
11
|
+
- @opensaas/stack-core@0.1.6
|
|
12
|
+
|
|
13
|
+
## 0.1.5
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 17eaafb: Update package urls
|
|
18
|
+
- Updated dependencies [17eaafb]
|
|
19
|
+
- @opensaas/stack-core@0.1.5
|
|
20
|
+
|
|
3
21
|
## 0.1.4
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAcA,wBAAsB,eAAe,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAcA,wBAAsB,eAAe,kBAsKpC"}
|
|
@@ -21,18 +21,83 @@ export async function generateCommand() {
|
|
|
21
21
|
const jiti = createJiti(cwd, {
|
|
22
22
|
interopDefault: true,
|
|
23
23
|
});
|
|
24
|
-
|
|
24
|
+
// Config may be async (if plugins are present)
|
|
25
|
+
// jiti.import() returns a module object with 'default' export
|
|
26
|
+
// We need to manually extract the default export since interopDefault doesn't work with async exports
|
|
27
|
+
const module = (await jiti.import(configPath));
|
|
28
|
+
const configOrPromise = module.default;
|
|
29
|
+
// Resolve the config if it's a Promise (from plugin execution)
|
|
30
|
+
let config = await Promise.resolve(configOrPromise);
|
|
31
|
+
// Log plugin count if plugins are present
|
|
32
|
+
if (config.plugins && config.plugins.length > 0) {
|
|
33
|
+
spinner.text = `Loading configuration with ${config.plugins.length} plugin(s)...`;
|
|
34
|
+
}
|
|
25
35
|
spinner.succeed(chalk.green('Configuration loaded'));
|
|
36
|
+
// Execute beforeGenerate hooks if plugins are present
|
|
37
|
+
if (config.plugins && config.plugins.length > 0) {
|
|
38
|
+
const pluginSpinner = ora('Running plugin beforeGenerate hooks...').start();
|
|
39
|
+
try {
|
|
40
|
+
// Import plugin engine (avoid circular dependency)
|
|
41
|
+
const { executeBeforeGenerateHooks } = await import('@opensaas/stack-core/config/plugin-engine');
|
|
42
|
+
config = await executeBeforeGenerateHooks(config);
|
|
43
|
+
pluginSpinner.succeed(chalk.green('Plugin beforeGenerate hooks complete'));
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
pluginSpinner.fail(chalk.red('Plugin beforeGenerate hooks failed'));
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
26
50
|
// Generate Prisma schema, types, and context
|
|
27
51
|
const generatorSpinner = ora('Generating schema and types...').start();
|
|
28
52
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
53
|
+
const prismaSchemaPath = path.join(cwd, 'prisma', 'schema.prisma');
|
|
54
|
+
const typesPath = path.join(cwd, '.opensaas', 'types.ts');
|
|
55
|
+
const contextPath = path.join(cwd, '.opensaas', 'context.ts');
|
|
56
|
+
writePrismaSchema(config, prismaSchemaPath);
|
|
57
|
+
writeTypes(config, typesPath);
|
|
58
|
+
writeContext(config, contextPath);
|
|
32
59
|
generatorSpinner.succeed(chalk.green('Schema generation complete'));
|
|
33
60
|
console.log(chalk.green('✅ Prisma schema generated'));
|
|
34
61
|
console.log(chalk.green('✅ TypeScript types generated'));
|
|
35
62
|
console.log(chalk.green('✅ Context factory generated'));
|
|
63
|
+
// Execute afterGenerate hooks if plugins are present
|
|
64
|
+
if (config.plugins && config.plugins.length > 0) {
|
|
65
|
+
const afterGenSpinner = ora('Running plugin afterGenerate hooks...').start();
|
|
66
|
+
try {
|
|
67
|
+
// Read generated files
|
|
68
|
+
const generatedFiles = {
|
|
69
|
+
prismaSchema: fs.readFileSync(prismaSchemaPath, 'utf-8'),
|
|
70
|
+
types: fs.readFileSync(typesPath, 'utf-8'),
|
|
71
|
+
context: fs.readFileSync(contextPath, 'utf-8'),
|
|
72
|
+
};
|
|
73
|
+
// Execute afterGenerate hooks
|
|
74
|
+
const { executeAfterGenerateHooks } = await import('@opensaas/stack-core/config/plugin-engine');
|
|
75
|
+
const modifiedFiles = await executeAfterGenerateHooks(config, generatedFiles);
|
|
76
|
+
// Write back modified files
|
|
77
|
+
if (modifiedFiles.prismaSchema !== generatedFiles.prismaSchema) {
|
|
78
|
+
fs.writeFileSync(prismaSchemaPath, modifiedFiles.prismaSchema);
|
|
79
|
+
}
|
|
80
|
+
if (modifiedFiles.types !== generatedFiles.types) {
|
|
81
|
+
fs.writeFileSync(typesPath, modifiedFiles.types);
|
|
82
|
+
}
|
|
83
|
+
if (modifiedFiles.context !== generatedFiles.context) {
|
|
84
|
+
fs.writeFileSync(contextPath, modifiedFiles.context);
|
|
85
|
+
}
|
|
86
|
+
// Write any additional files plugins generated
|
|
87
|
+
for (const [filename, content] of Object.entries(modifiedFiles)) {
|
|
88
|
+
if (!['prismaSchema', 'types', 'context'].includes(filename)) {
|
|
89
|
+
const filePath = path.join(cwd, '.opensaas', filename);
|
|
90
|
+
fs.writeFileSync(filePath, content);
|
|
91
|
+
console.log(chalk.green(`✅ Plugin generated: ${filename}`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
afterGenSpinner.succeed(chalk.green('Plugin afterGenerate hooks complete'));
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
afterGenSpinner.fail(chalk.red('Plugin afterGenerate hooks failed'));
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
36
101
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
102
|
}
|
|
38
103
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,gBAAgB,GACjB,MAAM,uBAAuB,CAAA;AAG9B,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAA;IAEpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;IAEvD,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAA;QACtF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAA;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAA;IAEvD,IAAI,CAAC;QACH,+CAA+C;QAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,gBAAgB,GACjB,MAAM,uBAAuB,CAAA;AAG9B,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAA;IAEpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;IAEvD,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAA;QACtF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAA;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAA;IAEvD,IAAI,CAAC;QACH,+CAA+C;QAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,+CAA+C;QAC/C,8DAA8D;QAC9D,sGAAsG;QACtG,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAyC,CAAA;QACtF,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAA;QAEtC,+DAA+D;QAC/D,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAEnD,0CAA0C;QAC1C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,IAAI,GAAG,8BAA8B,MAAM,CAAC,OAAO,CAAC,MAAM,eAAe,CAAA;QACnF,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAEpD,sDAAsD;QACtD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,GAAG,CAAC,wCAAwC,CAAC,CAAC,KAAK,EAAE,CAAA;YAE3E,IAAI,CAAC;gBACH,mDAAmD;gBACnD,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CACjD,2CAA2C,CAC5C,CAAA;gBACD,MAAM,GAAG,MAAM,0BAA0B,CAAC,MAAM,CAAC,CAAA;gBACjD,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAA;YAC5E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;gBACnE,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAA;QACtE,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;YAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;YACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;YAE7D,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;YAC3C,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC7B,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAEjC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAA;YAEvD,qDAAqD;YACrD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,MAAM,eAAe,GAAG,GAAG,CAAC,uCAAuC,CAAC,CAAC,KAAK,EAAE,CAAA;gBAE5E,IAAI,CAAC;oBACH,uBAAuB;oBACvB,MAAM,cAAc,GAAG;wBACrB,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC;wBACxD,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;wBAC1C,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;qBAC/C,CAAA;oBAED,8BAA8B;oBAC9B,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAChD,2CAA2C,CAC5C,CAAA;oBACD,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;oBAE7E,4BAA4B;oBAC5B,IAAI,aAAa,CAAC,YAAY,KAAK,cAAc,CAAC,YAAY,EAAE,CAAC;wBAC/D,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;oBAChE,CAAC;oBACD,IAAI,aAAa,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC;wBACjD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;oBAClD,CAAC;oBACD,IAAI,aAAa,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,EAAE,CAAC;wBACrD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;oBACtD,CAAC;oBAED,+CAA+C;oBAC/C,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;wBAChE,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;4BACtD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;4BACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC,CAAA;wBAC7D,CAAC;oBACH,CAAC;oBAED,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;gBAC7E,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;oBACpE,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC;YACD,8DAA8D;QAChE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAA;YACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,kDAAkD;QAClD,MAAM,aAAa,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAA;QAChE,IAAI,CAAC;YACH,QAAQ,CAAC,qBAAqB,EAAE;gBAC9B,GAAG;gBACH,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,MAAM;aACd,CAAC,CAAA;YACF,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;YACjE,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,gDAAgD;QAChD,MAAM,YAAY,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAA;QAC5D,IAAI,CAAC;YACH,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YAC7B,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAA;YACrD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAA;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAA;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAA;QACnE,8DAA8D;IAChE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACrD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwK9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU7E"}
|
|
@@ -13,7 +13,7 @@ export function generateContext(config) {
|
|
|
13
13
|
const hasStorage = !!config.storage && Object.keys(config.storage).length > 0;
|
|
14
14
|
// Generate the Prisma client instantiation code
|
|
15
15
|
const prismaInstantiation = hasCustomConstructor
|
|
16
|
-
? `
|
|
16
|
+
? `resolvedConfig.db.prismaClientConstructor!(PrismaClient)`
|
|
17
17
|
: `new PrismaClient()`;
|
|
18
18
|
// Generate storage utilities if storage is configured
|
|
19
19
|
const storageUtilities = hasStorage
|
|
@@ -42,21 +42,25 @@ async function getStorageRuntime() {
|
|
|
42
42
|
*/
|
|
43
43
|
const storage = {
|
|
44
44
|
uploadFile: async (providerName: string, file: File, buffer: Buffer, options?: unknown) => {
|
|
45
|
+
const config = await getConfig()
|
|
45
46
|
const runtime = await getStorageRuntime()
|
|
46
47
|
return runtime.uploadFile(config, providerName, { file, buffer }, options as any)
|
|
47
48
|
},
|
|
48
49
|
|
|
49
50
|
uploadImage: async (providerName: string, file: File, buffer: Buffer, options?: unknown) => {
|
|
51
|
+
const config = await getConfig()
|
|
50
52
|
const runtime = await getStorageRuntime()
|
|
51
53
|
return runtime.uploadImage(config, providerName, { file, buffer }, options as any)
|
|
52
54
|
},
|
|
53
55
|
|
|
54
56
|
deleteFile: async (providerName: string, filename: string) => {
|
|
57
|
+
const config = await getConfig()
|
|
55
58
|
const runtime = await getStorageRuntime()
|
|
56
59
|
return runtime.deleteFile(config, providerName, filename)
|
|
57
60
|
},
|
|
58
61
|
|
|
59
62
|
deleteImage: async (metadata: unknown) => {
|
|
63
|
+
const config = await getConfig()
|
|
60
64
|
const runtime = await getStorageRuntime()
|
|
61
65
|
return runtime.deleteImage(config, metadata as any)
|
|
62
66
|
},
|
|
@@ -81,6 +85,7 @@ const storage = {
|
|
|
81
85
|
},
|
|
82
86
|
}
|
|
83
87
|
`;
|
|
88
|
+
// Always use async version for consistency
|
|
84
89
|
return `/**
|
|
85
90
|
* Auto-generated context factory
|
|
86
91
|
*
|
|
@@ -91,15 +96,36 @@ const storage = {
|
|
|
91
96
|
*/
|
|
92
97
|
|
|
93
98
|
import { getContext as getOpensaasContext } from '@opensaas/stack-core'
|
|
94
|
-
import type { Session as OpensaasSession } from '@opensaas/stack-core'
|
|
99
|
+
import type { Session as OpensaasSession, OpenSaasConfig } from '@opensaas/stack-core'
|
|
95
100
|
import { PrismaClient } from './prisma-client'
|
|
96
101
|
import type { Context } from './types'
|
|
97
|
-
import
|
|
102
|
+
import configOrPromise from '../opensaas.config'
|
|
103
|
+
|
|
104
|
+
// Resolve config if it's a Promise (when plugins are present)
|
|
105
|
+
const configPromise = Promise.resolve(configOrPromise)
|
|
106
|
+
let resolvedConfig: OpenSaasConfig | null = null
|
|
98
107
|
|
|
99
108
|
// Internal Prisma singleton - managed automatically
|
|
100
109
|
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient | undefined }
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
let prisma: PrismaClient | null = null
|
|
111
|
+
|
|
112
|
+
async function getPrisma() {
|
|
113
|
+
if (!prisma) {
|
|
114
|
+
if (!resolvedConfig) {
|
|
115
|
+
resolvedConfig = await configPromise
|
|
116
|
+
}
|
|
117
|
+
prisma = globalForPrisma.prisma ?? ${prismaInstantiation}
|
|
118
|
+
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
|
|
119
|
+
}
|
|
120
|
+
return prisma
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async function getConfig() {
|
|
124
|
+
if (!resolvedConfig) {
|
|
125
|
+
resolvedConfig = await configPromise
|
|
126
|
+
}
|
|
127
|
+
return resolvedConfig
|
|
128
|
+
}
|
|
103
129
|
${storageUtilities}
|
|
104
130
|
/**
|
|
105
131
|
* Get OpenSaas context with optional session
|
|
@@ -109,24 +135,40 @@ ${storageUtilities}
|
|
|
109
135
|
* @example
|
|
110
136
|
* \`\`\`typescript
|
|
111
137
|
* // Anonymous access
|
|
112
|
-
* const context = getContext()
|
|
138
|
+
* const context = await getContext()
|
|
113
139
|
* const posts = await context.db.post.findMany()
|
|
114
140
|
*
|
|
115
141
|
* // Authenticated access
|
|
116
|
-
* const context = getContext({ userId: 'user-123' })
|
|
142
|
+
* const context = await getContext({ userId: 'user-123' })
|
|
117
143
|
* const myPosts = await context.db.post.findMany()
|
|
118
144
|
*
|
|
119
145
|
* // With custom session type
|
|
120
146
|
* type CustomSession = { userId: string; email: string; role: string } | null
|
|
121
|
-
* const context = getContext<CustomSession>({ userId: '123', email: 'user@example.com', role: 'admin' })
|
|
147
|
+
* const context = await getContext<CustomSession>({ userId: '123', email: 'user@example.com', role: 'admin' })
|
|
122
148
|
* // context.session is now typed as CustomSession
|
|
123
149
|
* \`\`\`
|
|
124
150
|
*/
|
|
125
|
-
export function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Context<TSession
|
|
126
|
-
|
|
151
|
+
export async function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Promise<Context<TSession>> {
|
|
152
|
+
const config = await getConfig()
|
|
153
|
+
const prismaClient = await getPrisma()
|
|
154
|
+
return getOpensaasContext(config, prismaClient, session ?? null, storage) as Context<TSession>
|
|
127
155
|
}
|
|
128
156
|
|
|
129
|
-
|
|
157
|
+
/**
|
|
158
|
+
* Raw context for synchronous initialization (e.g., Better-auth setup)
|
|
159
|
+
* This is only available after config is resolved, use with caution
|
|
160
|
+
*/
|
|
161
|
+
export const rawOpensaasContext = (async () => {
|
|
162
|
+
const config = await getConfig()
|
|
163
|
+
const prismaClient = await getPrisma()
|
|
164
|
+
return getOpensaasContext(config, prismaClient, null, storage)
|
|
165
|
+
})()
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Re-export resolved config for use in admin pages and server actions
|
|
169
|
+
* This is a promise that resolves to the config
|
|
170
|
+
*/
|
|
171
|
+
export const config = getConfig()
|
|
130
172
|
`;
|
|
131
173
|
}
|
|
132
174
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAA;IAEhE,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7E,gDAAgD;IAChD,MAAM,mBAAmB,GAAG,oBAAoB;QAC9C,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAA;IAEhE,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7E,gDAAgD;IAChD,MAAM,mBAAmB,GAAG,oBAAoB;QAC9C,CAAC,CAAC,0DAA0D;QAC5D,CAAC,CAAC,oBAAoB,CAAA;IAExB,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,UAAU;QACjC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDL;QACG,CAAC,CAAC;;;;;;;;;;;;;;;;;;CAkBL,CAAA;IAEC,2CAA2C;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCA4BgC,mBAAmB;;;;;;;;;;;;EAY1D,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjB,CAAA;AACD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB,EAAE,UAAkB;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAEvC,0BAA0B;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,sBAAsB,CAAA;AAyO1F;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2C5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3E"}
|
package/dist/generator/types.js
CHANGED
|
@@ -157,6 +157,45 @@ function generateContextType() {
|
|
|
157
157
|
lines.push('}');
|
|
158
158
|
return lines.join('\n');
|
|
159
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Collect TypeScript imports from field configurations
|
|
162
|
+
*/
|
|
163
|
+
function collectFieldImports(config) {
|
|
164
|
+
const importsMap = new Map();
|
|
165
|
+
// Iterate through all lists and fields
|
|
166
|
+
for (const listConfig of Object.values(config.lists)) {
|
|
167
|
+
for (const fieldConfig of Object.values(listConfig.fields)) {
|
|
168
|
+
// Check if field provides imports
|
|
169
|
+
if (fieldConfig.getTypeScriptImports) {
|
|
170
|
+
const imports = fieldConfig.getTypeScriptImports();
|
|
171
|
+
for (const imp of imports) {
|
|
172
|
+
const existing = importsMap.get(imp.from);
|
|
173
|
+
if (existing) {
|
|
174
|
+
// Merge names into existing import
|
|
175
|
+
imp.names.forEach((name) => existing.names.add(name));
|
|
176
|
+
// If either import is not type-only, make the merged import not type-only
|
|
177
|
+
if (imp.typeOnly === false) {
|
|
178
|
+
existing.typeOnly = false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Add new import
|
|
183
|
+
importsMap.set(imp.from, {
|
|
184
|
+
names: new Set(imp.names),
|
|
185
|
+
typeOnly: imp.typeOnly ?? true,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Convert map to array
|
|
193
|
+
return Array.from(importsMap.entries()).map(([from, { names, typeOnly }]) => ({
|
|
194
|
+
names: Array.from(names).sort(),
|
|
195
|
+
from,
|
|
196
|
+
typeOnly,
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
160
199
|
/**
|
|
161
200
|
* Generate all TypeScript types from config
|
|
162
201
|
*/
|
|
@@ -172,6 +211,13 @@ export function generateTypes(config) {
|
|
|
172
211
|
// Use alias for Session to avoid conflicts if user has a list named "Session"
|
|
173
212
|
lines.push("import type { Session as OpensaasSession, StorageUtils, ServerActionProps, AccessControlledDB } from '@opensaas/stack-core'");
|
|
174
213
|
lines.push("import type { PrismaClient } from './prisma-client'");
|
|
214
|
+
// Add field-specific imports
|
|
215
|
+
const fieldImports = collectFieldImports(config);
|
|
216
|
+
for (const imp of fieldImports) {
|
|
217
|
+
const typePrefix = imp.typeOnly ? 'type ' : '';
|
|
218
|
+
const names = imp.names.join(', ');
|
|
219
|
+
lines.push(`import ${typePrefix}{ ${names} } from '${imp.from}'`);
|
|
220
|
+
}
|
|
175
221
|
lines.push('');
|
|
176
222
|
// Generate types for each list
|
|
177
223
|
for (const [listName, listConfig] of Object.entries(config.lists)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensaas/stack-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "CLI tools for OpenSaas Stack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,6 +26,15 @@
|
|
|
26
26
|
],
|
|
27
27
|
"author": "",
|
|
28
28
|
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/OpenSaasAU/stack.git",
|
|
32
|
+
"directory": "packages/cli"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://stack.opensaas.au",
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/OpenSaasAU/stack/issues"
|
|
37
|
+
},
|
|
29
38
|
"dependencies": {
|
|
30
39
|
"commander": "^14.0.1",
|
|
31
40
|
"chalk": "^5.6.2",
|
|
@@ -33,7 +42,7 @@
|
|
|
33
42
|
"prompts": "^2.4.2",
|
|
34
43
|
"chokidar": "^4.0.3",
|
|
35
44
|
"jiti": "^2.6.1",
|
|
36
|
-
"@opensaas/stack-core": "0.1.
|
|
45
|
+
"@opensaas/stack-core": "0.1.6"
|
|
37
46
|
},
|
|
38
47
|
"devDependencies": {
|
|
39
48
|
"@types/node": "^24.7.2",
|
|
@@ -11,15 +11,36 @@ exports[`Generate Command Integration > Generator Integration > should generate
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { getContext as getOpensaasContext } from '@opensaas/stack-core'
|
|
14
|
-
import type { Session as OpensaasSession } from '@opensaas/stack-core'
|
|
14
|
+
import type { Session as OpensaasSession, OpenSaasConfig } from '@opensaas/stack-core'
|
|
15
15
|
import { PrismaClient } from './prisma-client'
|
|
16
16
|
import type { Context } from './types'
|
|
17
|
-
import
|
|
17
|
+
import configOrPromise from '../opensaas.config'
|
|
18
|
+
|
|
19
|
+
// Resolve config if it's a Promise (when plugins are present)
|
|
20
|
+
const configPromise = Promise.resolve(configOrPromise)
|
|
21
|
+
let resolvedConfig: OpenSaasConfig | null = null
|
|
18
22
|
|
|
19
23
|
// Internal Prisma singleton - managed automatically
|
|
20
24
|
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient | undefined }
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
let prisma: PrismaClient | null = null
|
|
26
|
+
|
|
27
|
+
async function getPrisma() {
|
|
28
|
+
if (!prisma) {
|
|
29
|
+
if (!resolvedConfig) {
|
|
30
|
+
resolvedConfig = await configPromise
|
|
31
|
+
}
|
|
32
|
+
prisma = globalForPrisma.prisma ?? new PrismaClient()
|
|
33
|
+
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
|
|
34
|
+
}
|
|
35
|
+
return prisma
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function getConfig() {
|
|
39
|
+
if (!resolvedConfig) {
|
|
40
|
+
resolvedConfig = await configPromise
|
|
41
|
+
}
|
|
42
|
+
return resolvedConfig
|
|
43
|
+
}
|
|
23
44
|
|
|
24
45
|
/**
|
|
25
46
|
* Storage utilities (not configured)
|
|
@@ -47,24 +68,40 @@ const storage = {
|
|
|
47
68
|
* @example
|
|
48
69
|
* \`\`\`typescript
|
|
49
70
|
* // Anonymous access
|
|
50
|
-
* const context = getContext()
|
|
71
|
+
* const context = await getContext()
|
|
51
72
|
* const posts = await context.db.post.findMany()
|
|
52
73
|
*
|
|
53
74
|
* // Authenticated access
|
|
54
|
-
* const context = getContext({ userId: 'user-123' })
|
|
75
|
+
* const context = await getContext({ userId: 'user-123' })
|
|
55
76
|
* const myPosts = await context.db.post.findMany()
|
|
56
77
|
*
|
|
57
78
|
* // With custom session type
|
|
58
79
|
* type CustomSession = { userId: string; email: string; role: string } | null
|
|
59
|
-
* const context = getContext<CustomSession>({ userId: '123', email: 'user@example.com', role: 'admin' })
|
|
80
|
+
* const context = await getContext<CustomSession>({ userId: '123', email: 'user@example.com', role: 'admin' })
|
|
60
81
|
* // context.session is now typed as CustomSession
|
|
61
82
|
* \`\`\`
|
|
62
83
|
*/
|
|
63
|
-
export function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Context<TSession
|
|
64
|
-
|
|
84
|
+
export async function getContext<TSession extends OpensaasSession = OpensaasSession>(session?: TSession): Promise<Context<TSession>> {
|
|
85
|
+
const config = await getConfig()
|
|
86
|
+
const prismaClient = await getPrisma()
|
|
87
|
+
return getOpensaasContext(config, prismaClient, session ?? null, storage) as Context<TSession>
|
|
65
88
|
}
|
|
66
89
|
|
|
67
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Raw context for synchronous initialization (e.g., Better-auth setup)
|
|
92
|
+
* This is only available after config is resolved, use with caution
|
|
93
|
+
*/
|
|
94
|
+
export const rawOpensaasContext = (async () => {
|
|
95
|
+
const config = await getConfig()
|
|
96
|
+
const prismaClient = await getPrisma()
|
|
97
|
+
return getOpensaasContext(config, prismaClient, null, storage)
|
|
98
|
+
})()
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Re-export resolved config for use in admin pages and server actions
|
|
102
|
+
* This is a promise that resolves to the config
|
|
103
|
+
*/
|
|
104
|
+
export const config = getConfig()
|
|
68
105
|
"
|
|
69
106
|
`;
|
|
70
107
|
|
package/src/commands/generate.ts
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
writeContext,
|
|
11
11
|
patchPrismaTypes,
|
|
12
12
|
} from '../generator/index.js'
|
|
13
|
-
import
|
|
13
|
+
import { OpenSaasConfig } from '@opensaas/stack-core'
|
|
14
14
|
|
|
15
15
|
export async function generateCommand() {
|
|
16
16
|
console.log(chalk.bold('\n🚀 OpenSaas Generator\n'))
|
|
@@ -33,21 +33,99 @@ export async function generateCommand() {
|
|
|
33
33
|
interopDefault: true,
|
|
34
34
|
})
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
// Config may be async (if plugins are present)
|
|
37
|
+
// jiti.import() returns a module object with 'default' export
|
|
38
|
+
// We need to manually extract the default export since interopDefault doesn't work with async exports
|
|
39
|
+
const module = (await jiti.import(configPath)) as { default: Promise<OpenSaasConfig> }
|
|
40
|
+
const configOrPromise = module.default
|
|
41
|
+
|
|
42
|
+
// Resolve the config if it's a Promise (from plugin execution)
|
|
43
|
+
let config = await Promise.resolve(configOrPromise)
|
|
44
|
+
|
|
45
|
+
// Log plugin count if plugins are present
|
|
46
|
+
if (config.plugins && config.plugins.length > 0) {
|
|
47
|
+
spinner.text = `Loading configuration with ${config.plugins.length} plugin(s)...`
|
|
48
|
+
}
|
|
37
49
|
|
|
38
50
|
spinner.succeed(chalk.green('Configuration loaded'))
|
|
39
51
|
|
|
52
|
+
// Execute beforeGenerate hooks if plugins are present
|
|
53
|
+
if (config.plugins && config.plugins.length > 0) {
|
|
54
|
+
const pluginSpinner = ora('Running plugin beforeGenerate hooks...').start()
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
// Import plugin engine (avoid circular dependency)
|
|
58
|
+
const { executeBeforeGenerateHooks } = await import(
|
|
59
|
+
'@opensaas/stack-core/config/plugin-engine'
|
|
60
|
+
)
|
|
61
|
+
config = await executeBeforeGenerateHooks(config)
|
|
62
|
+
pluginSpinner.succeed(chalk.green('Plugin beforeGenerate hooks complete'))
|
|
63
|
+
} catch (err) {
|
|
64
|
+
pluginSpinner.fail(chalk.red('Plugin beforeGenerate hooks failed'))
|
|
65
|
+
throw err
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
40
69
|
// Generate Prisma schema, types, and context
|
|
41
70
|
const generatorSpinner = ora('Generating schema and types...').start()
|
|
42
71
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
72
|
+
const prismaSchemaPath = path.join(cwd, 'prisma', 'schema.prisma')
|
|
73
|
+
const typesPath = path.join(cwd, '.opensaas', 'types.ts')
|
|
74
|
+
const contextPath = path.join(cwd, '.opensaas', 'context.ts')
|
|
75
|
+
|
|
76
|
+
writePrismaSchema(config, prismaSchemaPath)
|
|
77
|
+
writeTypes(config, typesPath)
|
|
78
|
+
writeContext(config, contextPath)
|
|
46
79
|
|
|
47
80
|
generatorSpinner.succeed(chalk.green('Schema generation complete'))
|
|
48
81
|
console.log(chalk.green('✅ Prisma schema generated'))
|
|
49
82
|
console.log(chalk.green('✅ TypeScript types generated'))
|
|
50
83
|
console.log(chalk.green('✅ Context factory generated'))
|
|
84
|
+
|
|
85
|
+
// Execute afterGenerate hooks if plugins are present
|
|
86
|
+
if (config.plugins && config.plugins.length > 0) {
|
|
87
|
+
const afterGenSpinner = ora('Running plugin afterGenerate hooks...').start()
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
// Read generated files
|
|
91
|
+
const generatedFiles = {
|
|
92
|
+
prismaSchema: fs.readFileSync(prismaSchemaPath, 'utf-8'),
|
|
93
|
+
types: fs.readFileSync(typesPath, 'utf-8'),
|
|
94
|
+
context: fs.readFileSync(contextPath, 'utf-8'),
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Execute afterGenerate hooks
|
|
98
|
+
const { executeAfterGenerateHooks } = await import(
|
|
99
|
+
'@opensaas/stack-core/config/plugin-engine'
|
|
100
|
+
)
|
|
101
|
+
const modifiedFiles = await executeAfterGenerateHooks(config, generatedFiles)
|
|
102
|
+
|
|
103
|
+
// Write back modified files
|
|
104
|
+
if (modifiedFiles.prismaSchema !== generatedFiles.prismaSchema) {
|
|
105
|
+
fs.writeFileSync(prismaSchemaPath, modifiedFiles.prismaSchema)
|
|
106
|
+
}
|
|
107
|
+
if (modifiedFiles.types !== generatedFiles.types) {
|
|
108
|
+
fs.writeFileSync(typesPath, modifiedFiles.types)
|
|
109
|
+
}
|
|
110
|
+
if (modifiedFiles.context !== generatedFiles.context) {
|
|
111
|
+
fs.writeFileSync(contextPath, modifiedFiles.context)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Write any additional files plugins generated
|
|
115
|
+
for (const [filename, content] of Object.entries(modifiedFiles)) {
|
|
116
|
+
if (!['prismaSchema', 'types', 'context'].includes(filename)) {
|
|
117
|
+
const filePath = path.join(cwd, '.opensaas', filename)
|
|
118
|
+
fs.writeFileSync(filePath, content)
|
|
119
|
+
console.log(chalk.green(`✅ Plugin generated: ${filename}`))
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
afterGenSpinner.succeed(chalk.green('Plugin afterGenerate hooks complete'))
|
|
124
|
+
} catch (err) {
|
|
125
|
+
afterGenSpinner.fail(chalk.red('Plugin afterGenerate hooks failed'))
|
|
126
|
+
throw err
|
|
127
|
+
}
|
|
128
|
+
}
|
|
51
129
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
130
|
} catch (err: any) {
|
|
53
131
|
generatorSpinner.fail(chalk.red('Failed to generate'))
|