@opensaas/stack-cli 0.39.1 → 0.40.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.
Files changed (118) hide show
  1. package/dist/commands/dev.d.ts.map +1 -1
  2. package/dist/commands/dev.js +0 -5
  3. package/dist/commands/dev.js.map +1 -1
  4. package/dist/commands/generate.d.ts +0 -6
  5. package/dist/commands/generate.d.ts.map +1 -1
  6. package/dist/commands/generate.js +12 -30
  7. package/dist/commands/generate.js.map +1 -1
  8. package/dist/commands/init.d.ts +1 -6
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +1 -7
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/mcp.d.ts.map +1 -1
  13. package/dist/commands/mcp.js +0 -2
  14. package/dist/commands/mcp.js.map +1 -1
  15. package/dist/commands/migrate.d.ts +2 -17
  16. package/dist/commands/migrate.d.ts.map +1 -1
  17. package/dist/commands/migrate.js +3 -59
  18. package/dist/commands/migrate.js.map +1 -1
  19. package/dist/generator/context.d.ts +0 -12
  20. package/dist/generator/context.d.ts.map +1 -1
  21. package/dist/generator/context.js +9 -44
  22. package/dist/generator/context.js.map +1 -1
  23. package/dist/generator/extension.d.ts +0 -9
  24. package/dist/generator/extension.d.ts.map +1 -1
  25. package/dist/generator/extension.js +5 -37
  26. package/dist/generator/extension.js.map +1 -1
  27. package/dist/generator/index.d.ts +0 -1
  28. package/dist/generator/index.d.ts.map +1 -1
  29. package/dist/generator/index.js +0 -1
  30. package/dist/generator/index.js.map +1 -1
  31. package/dist/generator/lists.d.ts +2 -5
  32. package/dist/generator/lists.d.ts.map +1 -1
  33. package/dist/generator/lists.js +2 -12
  34. package/dist/generator/lists.js.map +1 -1
  35. package/dist/generator/node-build.d.ts.map +1 -1
  36. package/dist/generator/node-build.js +6 -12
  37. package/dist/generator/node-build.js.map +1 -1
  38. package/dist/generator/output-paths.d.ts +4 -18
  39. package/dist/generator/output-paths.d.ts.map +1 -1
  40. package/dist/generator/output-paths.js +3 -15
  41. package/dist/generator/output-paths.js.map +1 -1
  42. package/dist/generator/plugin-types.d.ts +0 -6
  43. package/dist/generator/plugin-types.d.ts.map +1 -1
  44. package/dist/generator/plugin-types.js +3 -28
  45. package/dist/generator/plugin-types.js.map +1 -1
  46. package/dist/generator/prisma-config.d.ts +6 -25
  47. package/dist/generator/prisma-config.d.ts.map +1 -1
  48. package/dist/generator/prisma-config.js +6 -27
  49. package/dist/generator/prisma-config.js.map +1 -1
  50. package/dist/generator/prisma.d.ts +0 -8
  51. package/dist/generator/prisma.d.ts.map +1 -1
  52. package/dist/generator/prisma.js +24 -63
  53. package/dist/generator/prisma.js.map +1 -1
  54. package/dist/generator/types.d.ts +0 -6
  55. package/dist/generator/types.d.ts.map +1 -1
  56. package/dist/generator/types.js +25 -149
  57. package/dist/generator/types.js.map +1 -1
  58. package/dist/mcp/lib/documentation-provider.d.ts +0 -36
  59. package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
  60. package/dist/mcp/lib/documentation-provider.js +1 -49
  61. package/dist/mcp/lib/documentation-provider.js.map +1 -1
  62. package/dist/mcp/lib/features/catalog.d.ts +0 -15
  63. package/dist/mcp/lib/features/catalog.d.ts.map +1 -1
  64. package/dist/mcp/lib/features/catalog.js +0 -15
  65. package/dist/mcp/lib/features/catalog.js.map +1 -1
  66. package/dist/mcp/lib/generators/feature-generator.d.ts +3 -24
  67. package/dist/mcp/lib/generators/feature-generator.d.ts.map +1 -1
  68. package/dist/mcp/lib/generators/feature-generator.js +4 -38
  69. package/dist/mcp/lib/generators/feature-generator.js.map +1 -1
  70. package/dist/mcp/lib/types.d.ts +0 -3
  71. package/dist/mcp/lib/types.d.ts.map +1 -1
  72. package/dist/mcp/lib/types.js +0 -3
  73. package/dist/mcp/lib/types.js.map +1 -1
  74. package/dist/mcp/lib/wizards/migration-wizard.d.ts +0 -70
  75. package/dist/mcp/lib/wizards/migration-wizard.d.ts.map +1 -1
  76. package/dist/mcp/lib/wizards/migration-wizard.js +1 -87
  77. package/dist/mcp/lib/wizards/migration-wizard.js.map +1 -1
  78. package/dist/mcp/lib/wizards/wizard-engine.d.ts +0 -39
  79. package/dist/mcp/lib/wizards/wizard-engine.d.ts.map +1 -1
  80. package/dist/mcp/lib/wizards/wizard-engine.js +0 -49
  81. package/dist/mcp/lib/wizards/wizard-engine.js.map +1 -1
  82. package/dist/mcp/server/index.d.ts +0 -3
  83. package/dist/mcp/server/index.d.ts.map +1 -1
  84. package/dist/mcp/server/index.js +1 -9
  85. package/dist/mcp/server/index.js.map +1 -1
  86. package/dist/mcp/server/stack-mcp-server.d.ts +0 -42
  87. package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -1
  88. package/dist/mcp/server/stack-mcp-server.js +1 -47
  89. package/dist/mcp/server/stack-mcp-server.js.map +1 -1
  90. package/dist/migration/generators/migration-generator.d.ts +0 -55
  91. package/dist/migration/generators/migration-generator.d.ts.map +1 -1
  92. package/dist/migration/generators/migration-generator.js +3 -97
  93. package/dist/migration/generators/migration-generator.js.map +1 -1
  94. package/dist/migration/introspectors/index.d.ts +0 -6
  95. package/dist/migration/introspectors/index.d.ts.map +1 -1
  96. package/dist/migration/introspectors/index.js +0 -6
  97. package/dist/migration/introspectors/index.js.map +1 -1
  98. package/dist/migration/introspectors/keystone-introspector.d.ts +0 -27
  99. package/dist/migration/introspectors/keystone-introspector.d.ts.map +1 -1
  100. package/dist/migration/introspectors/keystone-introspector.js +0 -40
  101. package/dist/migration/introspectors/keystone-introspector.js.map +1 -1
  102. package/dist/migration/introspectors/nextjs-introspector.d.ts +0 -36
  103. package/dist/migration/introspectors/nextjs-introspector.d.ts.map +1 -1
  104. package/dist/migration/introspectors/nextjs-introspector.js +0 -39
  105. package/dist/migration/introspectors/nextjs-introspector.js.map +1 -1
  106. package/dist/migration/introspectors/prisma-introspector.d.ts +0 -30
  107. package/dist/migration/introspectors/prisma-introspector.d.ts.map +1 -1
  108. package/dist/migration/introspectors/prisma-introspector.js +1 -42
  109. package/dist/migration/introspectors/prisma-introspector.js.map +1 -1
  110. package/dist/migration/types.d.ts +1 -5
  111. package/dist/migration/types.d.ts.map +1 -1
  112. package/dist/migration/types.js +0 -3
  113. package/dist/migration/types.js.map +1 -1
  114. package/package.json +2 -2
  115. package/dist/generator/prisma-extensions.d.ts +0 -14
  116. package/dist/generator/prisma-extensions.d.ts.map +0 -1
  117. package/dist/generator/prisma-extensions.js +0 -172
  118. package/dist/generator/prisma-extensions.js.map +0 -1
@@ -1,172 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { withTsExtension } from './extension.js';
4
- /**
5
- * Generate Prisma result extensions configuration
6
- * This creates a Prisma client extension that calls field resolveOutput hooks
7
- */
8
- export function generatePrismaExtensions(config, configImport) {
9
- const lines = [];
10
- // Module specifier for importing the project's opensaas.config from inside
11
- // the `.opensaas` bundle. Defaults to the legacy `../opensaas.config`; the
12
- // output-path resolver supplies a recomputed value when the bundle is
13
- // relocated via the `output` config block.
14
- //
15
- // The explicit `.ts` extension (see ./extension.ts) keeps the bundle loadable
16
- // by the host bundler / plain Node without an `extensionAlias`.
17
- const configImportPath = withTsExtension(configImport ?? '../opensaas.config');
18
- // Add header comment
19
- lines.push('/**');
20
- lines.push(' * Generated Prisma result extensions from OpenSaas configuration');
21
- lines.push(' * DO NOT EDIT - This file is automatically generated');
22
- lines.push(' */');
23
- lines.push('');
24
- // Add imports
25
- lines.push("import { Prisma } from './prisma-client/client.ts'");
26
- lines.push(`import configOrPromise from '${configImportPath}'`);
27
- lines.push('');
28
- // Resolve config synchronously if possible (will be resolved by context.ts anyway)
29
- lines.push('// Resolve config - may be a promise if plugins are present');
30
- lines.push('let resolvedConfig: any = null');
31
- lines.push('const configPromise = Promise.resolve(configOrPromise)');
32
- lines.push('configPromise.then(cfg => { resolvedConfig = cfg })');
33
- lines.push('');
34
- // Check if any fields have result extensions or are virtual
35
- let hasExtensions = false;
36
- for (const listConfig of Object.values(config.lists)) {
37
- for (const fieldConfig of Object.values(listConfig.fields)) {
38
- if (fieldConfig.resultExtension || fieldConfig.virtual) {
39
- hasExtensions = true;
40
- break;
41
- }
42
- }
43
- if (hasExtensions)
44
- break;
45
- }
46
- if (!hasExtensions) {
47
- // No extensions needed - export a no-op
48
- lines.push('/**');
49
- lines.push(' * No result extensions configured');
50
- lines.push(' */');
51
- lines.push('export const prismaExtensions = {}');
52
- lines.push('');
53
- return lines.join('\n');
54
- }
55
- // Generate result extensions
56
- lines.push('/**');
57
- lines.push(' * Prisma result extensions for field transformations and virtual fields');
58
- lines.push(' * Delegates to field resolveOutput hooks from config for runtime transformations');
59
- lines.push(' */');
60
- lines.push('export const prismaExtensions = Prisma.defineExtension({');
61
- lines.push(' result: {');
62
- // Generate extensions for each list
63
- for (const [listName, listConfig] of Object.entries(config.lists)) {
64
- // Include both fields with resultExtension AND virtual fields
65
- const fieldsWithExtensions = Object.entries(listConfig.fields).filter(([_, config]) => config.resultExtension || config.virtual);
66
- if (fieldsWithExtensions.length === 0)
67
- continue;
68
- const modelKey = listName.charAt(0).toLowerCase() + listName.slice(1); // camelCase
69
- lines.push(` ${modelKey}: {`);
70
- for (const [fieldName, fieldConfig] of fieldsWithExtensions) {
71
- const isVirtual = fieldConfig.virtual;
72
- // Multi-column storage fields (e.g. image()/file() in keystone-columns
73
- // mode) spread across several part columns (image_url, image_pathname, …)
74
- // and have no single logical scalar on the model. Their logical value is
75
- // re-assembled by core's read pipeline (assembleColumns), not by this
76
- // result extension, so the compute here must not reference a scalar that
77
- // doesn't exist. See #559.
78
- const isMultiColumn = !isVirtual && typeof fieldConfig.getColumnNames === 'function';
79
- lines.push(` ${fieldName}: {`);
80
- if (isVirtual) {
81
- // Virtual fields don't need database fields - they compute from the full item
82
- lines.push(` needs: {},`);
83
- }
84
- else if (isMultiColumn && fieldConfig.getColumnNames) {
85
- // Prisma types `needs` against the model's scalar fields. Referencing the
86
- // logical field name here would type the literal `true` against `never`
87
- // (no such scalar exists). Derive `needs` from the physical part columns
88
- // instead. getColumnNames already returns the resolved/overridden names,
89
- // so custom column maps Just Work. See #559.
90
- const columnNames = fieldConfig.getColumnNames(fieldName);
91
- const needsEntries = columnNames.map((column) => `${column}: true`).join(', ');
92
- lines.push(` needs: { ${needsEntries} },`);
93
- }
94
- else {
95
- // Non-virtual single-column fields need their database value
96
- lines.push(` needs: { ${fieldName}: true },`);
97
- }
98
- lines.push(` compute: (${modelKey}) => {`);
99
- if (isMultiColumn) {
100
- // The logical value lives across part columns and is assembled elsewhere;
101
- // there is no scalar to read or transform here. Returning undefined keeps
102
- // the assembled value (re-added via TransformedFields) authoritative.
103
- lines.push(` return undefined`);
104
- lines.push(` },`);
105
- lines.push(` },`);
106
- continue;
107
- }
108
- if (!isVirtual) {
109
- // For non-virtual fields, get the database value and check nullability
110
- lines.push(` const value = ${modelKey}.${fieldName}`);
111
- lines.push(` if (value === null || value === undefined) {`);
112
- lines.push(` return undefined`);
113
- lines.push(` }`);
114
- }
115
- lines.push(` // Call field's resolveOutput hook if available (synchronously)`);
116
- lines.push(` if (!resolvedConfig) {`);
117
- lines.push(` // Config not yet resolved - return undefined for virtual, value for regular`);
118
- if (isVirtual) {
119
- lines.push(` return undefined`);
120
- }
121
- else {
122
- lines.push(` return value`);
123
- }
124
- lines.push(` }`);
125
- lines.push(` const fieldConfig = resolvedConfig.lists['${listName}'].fields['${fieldName}']`);
126
- lines.push(` if (fieldConfig.hooks?.resolveOutput) {`);
127
- lines.push(` return fieldConfig.hooks.resolveOutput({`);
128
- lines.push(` operation: 'query',`);
129
- if (isVirtual) {
130
- lines.push(` value: undefined, // Virtual fields have no stored value`);
131
- }
132
- else {
133
- lines.push(` value,`);
134
- }
135
- lines.push(` item: ${modelKey},`);
136
- lines.push(` listKey: '${listName}',`);
137
- lines.push(` fieldName: '${fieldName}',`);
138
- lines.push(` context: null as any, // Extension context doesn't have full context`);
139
- lines.push(` })`);
140
- lines.push(` }`);
141
- if (isVirtual) {
142
- lines.push(` return undefined`);
143
- }
144
- else {
145
- lines.push(` return value`);
146
- }
147
- lines.push(` },`);
148
- lines.push(` },`);
149
- }
150
- lines.push(` },`);
151
- }
152
- lines.push(' },');
153
- lines.push('})');
154
- lines.push('');
155
- return lines.join('\n');
156
- }
157
- /**
158
- * Write Prisma extensions configuration to file
159
- *
160
- * @param configImport - Optional override for the `opensaas.config` import
161
- * specifier, forwarded to {@link generatePrismaExtensions}.
162
- */
163
- export function writePrismaExtensions(config, outputPath, configImport) {
164
- const extensions = generatePrismaExtensions(config, configImport);
165
- // Ensure directory exists
166
- const dir = path.dirname(outputPath);
167
- if (!fs.existsSync(dir)) {
168
- fs.mkdirSync(dir, { recursive: true });
169
- }
170
- fs.writeFileSync(outputPath, extensions, 'utf-8');
171
- }
172
- //# sourceMappingURL=prisma-extensions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prisma-extensions.js","sourceRoot":"","sources":["../../src/generator/prisma-extensions.ts"],"names":[],"mappings":"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"}