@memberjunction/codegen-lib 3.3.0 → 4.0.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 +56 -1
- package/dist/Angular/angular-codegen.d.ts +1 -1
- package/dist/Angular/angular-codegen.d.ts.map +1 -1
- package/dist/Angular/angular-codegen.js +80 -136
- package/dist/Angular/angular-codegen.js.map +1 -1
- package/dist/Angular/entity-data-grid-related-entity-component.d.ts +1 -1
- package/dist/Angular/entity-data-grid-related-entity-component.js +6 -9
- package/dist/Angular/entity-data-grid-related-entity-component.js.map +1 -1
- package/dist/Angular/join-grid-related-entity-component.d.ts +1 -1
- package/dist/Angular/join-grid-related-entity-component.js +8 -36
- package/dist/Angular/join-grid-related-entity-component.js.map +1 -1
- package/dist/Angular/related-entity-components.js +13 -79
- package/dist/Angular/related-entity-components.js.map +1 -1
- package/dist/Angular/timeline-related-entity-component.d.ts +1 -1
- package/dist/Angular/timeline-related-entity-component.js +14 -38
- package/dist/Angular/timeline-related-entity-component.js.map +1 -1
- package/dist/Angular/user-view-grid-related-entity-component.d.ts +43 -0
- package/dist/Angular/user-view-grid-related-entity-component.d.ts.map +1 -0
- package/dist/Angular/user-view-grid-related-entity-component.js +85 -0
- package/dist/Angular/user-view-grid-related-entity-component.js.map +1 -0
- package/dist/Config/config.d.ts +79 -0
- package/dist/Config/config.d.ts.map +1 -1
- package/dist/Config/config.js +174 -172
- package/dist/Config/config.js.map +1 -1
- package/dist/Config/db-connection.d.ts +1 -1
- package/dist/Config/db-connection.d.ts.map +1 -1
- package/dist/Config/db-connection.js +6 -33
- package/dist/Config/db-connection.js.map +1 -1
- package/dist/Database/dbSchema.js +28 -35
- package/dist/Database/dbSchema.js.map +1 -1
- package/dist/Database/manage-metadata.d.ts +25 -9
- package/dist/Database/manage-metadata.d.ts.map +1 -1
- package/dist/Database/manage-metadata.js +438 -316
- package/dist/Database/manage-metadata.js.map +1 -1
- package/dist/Database/reorder-columns.d.ts +1 -1
- package/dist/Database/reorder-columns.d.ts.map +1 -1
- package/dist/Database/reorder-columns.js +1 -5
- package/dist/Database/reorder-columns.js.map +1 -1
- package/dist/Database/sql.d.ts +1 -1
- package/dist/Database/sql.d.ts.map +1 -1
- package/dist/Database/sql.js +67 -98
- package/dist/Database/sql.js.map +1 -1
- package/dist/Database/sql_codegen.d.ts +5 -2
- package/dist/Database/sql_codegen.d.ts.map +1 -1
- package/dist/Database/sql_codegen.js +344 -268
- package/dist/Database/sql_codegen.js.map +1 -1
- package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts +110 -0
- package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts.map +1 -0
- package/dist/Manifest/GenerateClassRegistrationsManifest.js +632 -0
- package/dist/Manifest/GenerateClassRegistrationsManifest.js.map +1 -0
- package/dist/Misc/action_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/action_subclasses_codegen.js +15 -26
- package/dist/Misc/action_subclasses_codegen.js.map +1 -1
- package/dist/Misc/advanced_generation.d.ts +1 -1
- package/dist/Misc/advanced_generation.js +34 -40
- package/dist/Misc/advanced_generation.js.map +1 -1
- package/dist/Misc/createNewUser.d.ts +1 -1
- package/dist/Misc/createNewUser.js +22 -26
- package/dist/Misc/createNewUser.js.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.d.ts +2 -2
- package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.js +33 -40
- package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
- package/dist/Misc/graphql_server_codegen.js +36 -41
- package/dist/Misc/graphql_server_codegen.js.map +1 -1
- package/dist/Misc/runCommand.d.ts +1 -1
- package/dist/Misc/runCommand.js +13 -20
- package/dist/Misc/runCommand.js.map +1 -1
- package/dist/Misc/sql_logging.d.ts +7 -1
- package/dist/Misc/sql_logging.d.ts.map +1 -1
- package/dist/Misc/sql_logging.js +40 -53
- package/dist/Misc/sql_logging.js.map +1 -1
- package/dist/Misc/status_logging.js +45 -60
- package/dist/Misc/status_logging.js.map +1 -1
- package/dist/Misc/system_integrity.d.ts +1 -1
- package/dist/Misc/system_integrity.d.ts.map +1 -1
- package/dist/Misc/system_integrity.js +12 -16
- package/dist/Misc/system_integrity.js.map +1 -1
- package/dist/Misc/temp_batch_file.js +15 -22
- package/dist/Misc/temp_batch_file.js.map +1 -1
- package/dist/Misc/util.d.ts.map +1 -1
- package/dist/Misc/util.js +17 -28
- package/dist/Misc/util.js.map +1 -1
- package/dist/index.d.ts +21 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -40
- package/dist/index.js.map +1 -1
- package/dist/runCodeGen.d.ts +1 -0
- package/dist/runCodeGen.d.ts.map +1 -1
- package/dist/runCodeGen.js +151 -178
- package/dist/runCodeGen.js.map +1 -1
- package/package.json +24 -21
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build-time tool to generate an import manifest that prevents tree-shaking of
|
|
3
|
+
* @RegisterClass decorated classes.
|
|
4
|
+
*
|
|
5
|
+
* The tool starts from the current app's package.json, walks its full transitive
|
|
6
|
+
* dependency tree, scans each dependency's source for @RegisterClass decorators,
|
|
7
|
+
* and generates a manifest importing only the packages that contain them.
|
|
8
|
+
*
|
|
9
|
+
* Usage (via MJCLI):
|
|
10
|
+
* mj codegen manifest --output ./src/generated/class-registrations-manifest.ts
|
|
11
|
+
*
|
|
12
|
+
* Or programmatically:
|
|
13
|
+
* import { generateClassRegistrationsManifest } from '@memberjunction/codegen-lib';
|
|
14
|
+
* await generateClassRegistrationsManifest({ outputPath: './src/generated/class-manifest.ts' });
|
|
15
|
+
*/
|
|
16
|
+
import ts from 'typescript';
|
|
17
|
+
import * as fs from 'fs';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import { glob } from 'glob';
|
|
20
|
+
/**
|
|
21
|
+
* Reads and parses a package.json file, returning relevant info.
|
|
22
|
+
*/
|
|
23
|
+
function readPackageJson(dir) {
|
|
24
|
+
const pkgPath = path.join(dir, 'package.json');
|
|
25
|
+
if (!fs.existsSync(pkgPath))
|
|
26
|
+
return null;
|
|
27
|
+
try {
|
|
28
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
29
|
+
return {
|
|
30
|
+
name: pkg.name || path.basename(dir),
|
|
31
|
+
dir,
|
|
32
|
+
dependencies: pkg.dependencies || {},
|
|
33
|
+
devDependencies: pkg.devDependencies || {}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolves a dependency name to its directory on disk.
|
|
42
|
+
* Walks up node_modules directories from the starting point to handle hoisted packages.
|
|
43
|
+
*/
|
|
44
|
+
function resolvePackageDir(depName, fromDir) {
|
|
45
|
+
let searchDir = fromDir;
|
|
46
|
+
const root = path.parse(searchDir).root;
|
|
47
|
+
while (searchDir !== root) {
|
|
48
|
+
const candidate = path.join(searchDir, 'node_modules', depName);
|
|
49
|
+
if (fs.existsSync(path.join(candidate, 'package.json'))) {
|
|
50
|
+
// Resolve symlinks (workspace packages are symlinked)
|
|
51
|
+
try {
|
|
52
|
+
const realPath = fs.realpathSync(candidate);
|
|
53
|
+
return realPath;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return candidate;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
searchDir = path.dirname(searchDir);
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Walks the full transitive dependency tree starting from an app's package.json.
|
|
65
|
+
* Returns all unique package directories found (deduplicated by resolved real path).
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* Checks whether a package name matches any of the given exclusion prefixes.
|
|
69
|
+
*/
|
|
70
|
+
function isPackageExcluded(packageName, excludePackages) {
|
|
71
|
+
return excludePackages.some(prefix => packageName.startsWith(prefix));
|
|
72
|
+
}
|
|
73
|
+
function walkDependencyTree(appDir, log, excludePackages = []) {
|
|
74
|
+
// Map of package name -> resolved directory
|
|
75
|
+
const visited = new Map();
|
|
76
|
+
const queue = [];
|
|
77
|
+
// Start with the app's own package.json
|
|
78
|
+
const appPkg = readPackageJson(appDir);
|
|
79
|
+
if (!appPkg) {
|
|
80
|
+
log(`No package.json found in ${appDir}`);
|
|
81
|
+
return visited;
|
|
82
|
+
}
|
|
83
|
+
if (excludePackages.length > 0) {
|
|
84
|
+
log(`Excluding packages matching: ${excludePackages.join(', ')}`);
|
|
85
|
+
}
|
|
86
|
+
// Seed queue with all direct dependencies (both deps and devDeps for the root app)
|
|
87
|
+
const allDeps = { ...appPkg.dependencies, ...appPkg.devDependencies };
|
|
88
|
+
for (const depName of Object.keys(allDeps)) {
|
|
89
|
+
queue.push({ depName, fromDir: appDir });
|
|
90
|
+
}
|
|
91
|
+
while (queue.length > 0) {
|
|
92
|
+
const { depName, fromDir } = queue.shift();
|
|
93
|
+
// Skip if already visited
|
|
94
|
+
if (visited.has(depName))
|
|
95
|
+
continue;
|
|
96
|
+
// Skip packages matching exclusion prefixes
|
|
97
|
+
if (isPackageExcluded(depName, excludePackages))
|
|
98
|
+
continue;
|
|
99
|
+
// Resolve to actual directory on disk
|
|
100
|
+
const depDir = resolvePackageDir(depName, fromDir);
|
|
101
|
+
if (!depDir)
|
|
102
|
+
continue; // External package not found locally, skip
|
|
103
|
+
visited.set(depName, depDir);
|
|
104
|
+
// Read this package's dependencies and add to queue (only dependencies, not devDeps for transitive)
|
|
105
|
+
const depPkg = readPackageJson(depDir);
|
|
106
|
+
if (depPkg) {
|
|
107
|
+
for (const transitiveDep of Object.keys(depPkg.dependencies)) {
|
|
108
|
+
if (!visited.has(transitiveDep)) {
|
|
109
|
+
queue.push({ depName: transitiveDep, fromDir: depDir });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return visited;
|
|
115
|
+
}
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// Source Scanning
|
|
118
|
+
// ============================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Finds all TypeScript source files in a package directory.
|
|
121
|
+
* Looks in the src/ folder by default.
|
|
122
|
+
*/
|
|
123
|
+
async function findSourceFiles(packageDir, excludePatterns) {
|
|
124
|
+
const srcDir = path.join(packageDir, 'src');
|
|
125
|
+
if (!fs.existsSync(srcDir))
|
|
126
|
+
return [];
|
|
127
|
+
const defaultExcludes = [
|
|
128
|
+
'**/node_modules/**',
|
|
129
|
+
'**/dist/**',
|
|
130
|
+
'**/build/**',
|
|
131
|
+
'**/.git/**',
|
|
132
|
+
'**/__tests__/**',
|
|
133
|
+
'**/*.d.ts',
|
|
134
|
+
'**/*.spec.ts',
|
|
135
|
+
'**/*.test.ts',
|
|
136
|
+
...excludePatterns.map(p => `**/${p}/**`)
|
|
137
|
+
];
|
|
138
|
+
const files = await glob('**/*.ts', {
|
|
139
|
+
cwd: srcDir,
|
|
140
|
+
absolute: true,
|
|
141
|
+
ignore: defaultExcludes,
|
|
142
|
+
nodir: true
|
|
143
|
+
});
|
|
144
|
+
return files;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parses a TypeScript file and extracts @RegisterClass decorator information
|
|
148
|
+
*/
|
|
149
|
+
function extractRegisterClassDecorators(filePath, sourceText, packageName) {
|
|
150
|
+
const results = [];
|
|
151
|
+
// Quick check before parsing
|
|
152
|
+
if (!sourceText.includes('RegisterClass'))
|
|
153
|
+
return results;
|
|
154
|
+
const sourceFile = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
155
|
+
function visit(node) {
|
|
156
|
+
if (ts.isClassDeclaration(node) && node.name) {
|
|
157
|
+
const decorators = ts.getDecorators(node);
|
|
158
|
+
if (decorators) {
|
|
159
|
+
for (const decorator of decorators) {
|
|
160
|
+
const info = parseRegisterClassDecorator(decorator, node.name.text, filePath, packageName);
|
|
161
|
+
if (info) {
|
|
162
|
+
results.push(info);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
ts.forEachChild(node, visit);
|
|
168
|
+
}
|
|
169
|
+
visit(sourceFile);
|
|
170
|
+
return results;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Parses a single @RegisterClass decorator and extracts its arguments
|
|
174
|
+
*/
|
|
175
|
+
function parseRegisterClassDecorator(decorator, className, filePath, packageName) {
|
|
176
|
+
if (!ts.isCallExpression(decorator.expression))
|
|
177
|
+
return null;
|
|
178
|
+
const callExpr = decorator.expression;
|
|
179
|
+
// Check if the function being called is "RegisterClass"
|
|
180
|
+
if (!ts.isIdentifier(callExpr.expression) || callExpr.expression.text !== 'RegisterClass') {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
// Extract arguments
|
|
184
|
+
const args = callExpr.arguments;
|
|
185
|
+
let baseClassName;
|
|
186
|
+
let key;
|
|
187
|
+
if (args.length > 0 && ts.isIdentifier(args[0])) {
|
|
188
|
+
baseClassName = args[0].text;
|
|
189
|
+
}
|
|
190
|
+
if (args.length > 1 && ts.isStringLiteral(args[1])) {
|
|
191
|
+
key = args[1].text;
|
|
192
|
+
}
|
|
193
|
+
return { className, filePath, packageName, baseClassName, key };
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Export Verification
|
|
197
|
+
// ============================================================================
|
|
198
|
+
/**
|
|
199
|
+
* Resolves the `.d.ts` entry point for a package by reading its package.json.
|
|
200
|
+
* Checks `types`, `typings`, then falls back to conventional locations.
|
|
201
|
+
*/
|
|
202
|
+
function resolveTypesEntryPoint(packageDir) {
|
|
203
|
+
const pkgPath = path.join(packageDir, 'package.json');
|
|
204
|
+
if (!fs.existsSync(pkgPath))
|
|
205
|
+
return null;
|
|
206
|
+
try {
|
|
207
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
208
|
+
// Check types/typings fields (these are the authoritative source)
|
|
209
|
+
const typesField = pkg.types || pkg.typings;
|
|
210
|
+
if (typesField) {
|
|
211
|
+
const resolved = path.resolve(packageDir, typesField);
|
|
212
|
+
// If the field points to a .ts source file, convert to .d.ts in dist
|
|
213
|
+
if (resolved.endsWith('.ts') && !resolved.endsWith('.d.ts')) {
|
|
214
|
+
const dtsPath = resolved
|
|
215
|
+
.replace(/\/src\//, '/dist/')
|
|
216
|
+
.replace(/\.ts$/, '.d.ts');
|
|
217
|
+
if (fs.existsSync(dtsPath))
|
|
218
|
+
return dtsPath;
|
|
219
|
+
}
|
|
220
|
+
if (fs.existsSync(resolved))
|
|
221
|
+
return resolved;
|
|
222
|
+
}
|
|
223
|
+
// Fallback: check main field and derive .d.ts from it
|
|
224
|
+
if (pkg.main) {
|
|
225
|
+
const mainDts = path.resolve(packageDir, pkg.main.replace(/\.js$/, '.d.ts'));
|
|
226
|
+
if (fs.existsSync(mainDts))
|
|
227
|
+
return mainDts;
|
|
228
|
+
}
|
|
229
|
+
// Last resort: conventional locations
|
|
230
|
+
for (const candidate of ['dist/index.d.ts', 'dist/public-api.d.ts']) {
|
|
231
|
+
const candidatePath = path.join(packageDir, candidate);
|
|
232
|
+
if (fs.existsSync(candidatePath))
|
|
233
|
+
return candidatePath;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// Ignore parse errors
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Collects all class names exported from a package by recursively following
|
|
243
|
+
* `export * from '...'` and `export { Foo } from '...'` declarations
|
|
244
|
+
* in .d.ts files starting from the types entry point.
|
|
245
|
+
*/
|
|
246
|
+
function collectExportedClassNames(entryDtsPath) {
|
|
247
|
+
const exported = new Set();
|
|
248
|
+
const visited = new Set();
|
|
249
|
+
function processFile(filePath) {
|
|
250
|
+
if (visited.has(filePath))
|
|
251
|
+
return;
|
|
252
|
+
visited.add(filePath);
|
|
253
|
+
let content;
|
|
254
|
+
try {
|
|
255
|
+
content = fs.readFileSync(filePath, 'utf-8');
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const fileDir = path.dirname(filePath);
|
|
261
|
+
for (const line of content.split('\n')) {
|
|
262
|
+
const trimmed = line.trim();
|
|
263
|
+
// export declare class ClassName ...
|
|
264
|
+
const declareClassMatch = trimmed.match(/^export\s+declare\s+class\s+(\w+)/);
|
|
265
|
+
if (declareClassMatch) {
|
|
266
|
+
exported.add(declareClassMatch[1]);
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
// export { Foo, Bar, Baz } (with or without "from")
|
|
270
|
+
const namedExportMatch = trimmed.match(/^export\s*\{([^}]+)\}/);
|
|
271
|
+
if (namedExportMatch) {
|
|
272
|
+
const names = namedExportMatch[1].split(',');
|
|
273
|
+
for (const name of names) {
|
|
274
|
+
// Handle "Foo as Bar" — the exported name is "Bar"
|
|
275
|
+
const parts = name.trim().split(/\s+as\s+/);
|
|
276
|
+
const exportedName = parts.length > 1 ? parts[1].trim() : parts[0].trim();
|
|
277
|
+
if (exportedName && /^\w+$/.test(exportedName)) {
|
|
278
|
+
exported.add(exportedName);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// If this is a re-export from another file, also follow it
|
|
282
|
+
const fromMatch = trimmed.match(/from\s+['"]([^'"]+)['"]/);
|
|
283
|
+
if (fromMatch) {
|
|
284
|
+
const resolvedPath = resolveDtsImport(fromMatch[1], fileDir);
|
|
285
|
+
if (resolvedPath)
|
|
286
|
+
processFile(resolvedPath);
|
|
287
|
+
}
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
// export * from './something'
|
|
291
|
+
const starExportMatch = trimmed.match(/^export\s+\*\s+from\s+['"]([^'"]+)['"]/);
|
|
292
|
+
if (starExportMatch) {
|
|
293
|
+
const resolvedPath = resolveDtsImport(starExportMatch[1], fileDir);
|
|
294
|
+
if (resolvedPath)
|
|
295
|
+
processFile(resolvedPath);
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
processFile(entryDtsPath);
|
|
301
|
+
return exported;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Resolves a relative import specifier to an actual .d.ts file path.
|
|
305
|
+
*/
|
|
306
|
+
function resolveDtsImport(specifier, fromDir) {
|
|
307
|
+
// Only resolve relative imports
|
|
308
|
+
if (!specifier.startsWith('.'))
|
|
309
|
+
return null;
|
|
310
|
+
// Strip .js extension if present (common in ESM .d.ts files)
|
|
311
|
+
const cleaned = specifier.replace(/\.js$/, '');
|
|
312
|
+
const base = path.resolve(fromDir, cleaned);
|
|
313
|
+
// Try direct .d.ts, then with index
|
|
314
|
+
for (const candidate of [
|
|
315
|
+
`${base}.d.ts`,
|
|
316
|
+
path.join(base, 'index.d.ts')
|
|
317
|
+
]) {
|
|
318
|
+
if (fs.existsSync(candidate))
|
|
319
|
+
return candidate;
|
|
320
|
+
}
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Builds a map of package name -> Set of exported class names
|
|
325
|
+
* by checking each package's .d.ts entry point.
|
|
326
|
+
*/
|
|
327
|
+
function buildPackageExportsMap(depTree, log) {
|
|
328
|
+
const exportsMap = new Map();
|
|
329
|
+
for (const [depName, depDir] of Array.from(depTree.entries())) {
|
|
330
|
+
const entryDts = resolveTypesEntryPoint(depDir);
|
|
331
|
+
if (!entryDts)
|
|
332
|
+
continue;
|
|
333
|
+
const exportedNames = collectExportedClassNames(entryDts);
|
|
334
|
+
if (exportedNames.size > 0) {
|
|
335
|
+
exportsMap.set(depName, exportedNames);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return exportsMap;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Filters registered classes to only include those actually exported
|
|
342
|
+
* from their package's public API.
|
|
343
|
+
*/
|
|
344
|
+
function filterToExportedClasses(classes, exportsMap, log) {
|
|
345
|
+
const exported = [];
|
|
346
|
+
const skipped = [];
|
|
347
|
+
for (const cls of classes) {
|
|
348
|
+
const packageExports = exportsMap.get(cls.packageName);
|
|
349
|
+
if (!packageExports) {
|
|
350
|
+
// No .d.ts found for this package — include it (may be a local/workspace package)
|
|
351
|
+
exported.push(cls);
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if (packageExports.has(cls.className)) {
|
|
355
|
+
exported.push(cls);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
skipped.push(cls);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
if (skipped.length > 0) {
|
|
362
|
+
log(`Skipped ${skipped.length} classes not exported from their package's public API:`);
|
|
363
|
+
for (const cls of skipped) {
|
|
364
|
+
log(` - ${cls.className} (found in ${cls.packageName} source but not in public exports)`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return { exported, skipped };
|
|
368
|
+
}
|
|
369
|
+
// ============================================================================
|
|
370
|
+
// Manifest Generation
|
|
371
|
+
// ============================================================================
|
|
372
|
+
/**
|
|
373
|
+
* Generates the manifest file content with named imports and runtime references
|
|
374
|
+
* to prevent tree-shaking of individual classes.
|
|
375
|
+
*
|
|
376
|
+
* Bare `import 'pkg'` only ensures side effects run but bundlers can still
|
|
377
|
+
* tree-shake individual classes within a package. By importing each class by
|
|
378
|
+
* name and placing it in an exported array, we create a static code path that
|
|
379
|
+
* the bundler cannot eliminate.
|
|
380
|
+
*/
|
|
381
|
+
function generateManifestContent(classes, appName, totalDepsWalked, filterBaseClasses) {
|
|
382
|
+
// Filter by base classes if specified
|
|
383
|
+
let filteredClasses = classes;
|
|
384
|
+
if (filterBaseClasses && filterBaseClasses.length > 0) {
|
|
385
|
+
const filterSet = new Set(filterBaseClasses);
|
|
386
|
+
filteredClasses = classes.filter(c => c.baseClassName && filterSet.has(c.baseClassName));
|
|
387
|
+
}
|
|
388
|
+
// Group by package and deduplicate class names within each package
|
|
389
|
+
const packageMap = new Map();
|
|
390
|
+
for (const cls of filteredClasses) {
|
|
391
|
+
if (!packageMap.has(cls.packageName)) {
|
|
392
|
+
packageMap.set(cls.packageName, []);
|
|
393
|
+
}
|
|
394
|
+
const existing = packageMap.get(cls.packageName);
|
|
395
|
+
if (!existing.includes(cls.className)) {
|
|
396
|
+
existing.push(cls.className);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
const sortedPackages = Array.from(packageMap.keys()).sort();
|
|
400
|
+
// Build alias map: detect cross-package name collisions and assign unique aliases
|
|
401
|
+
const aliasMap = buildAliasMap(packageMap, sortedPackages);
|
|
402
|
+
const lines = buildFileHeader(appName, totalDepsWalked, sortedPackages.length);
|
|
403
|
+
// Generate named imports per package
|
|
404
|
+
const allAliases = [];
|
|
405
|
+
for (const packageName of sortedPackages) {
|
|
406
|
+
const classNames = packageMap.get(packageName).sort();
|
|
407
|
+
const importSpecifiers = buildImportSpecifiers(classNames, packageName, aliasMap);
|
|
408
|
+
allAliases.push(...importSpecifiers.map(s => s.alias));
|
|
409
|
+
lines.push(`// ${packageName} (${classNames.length} classes)`);
|
|
410
|
+
lines.push(`import {`);
|
|
411
|
+
for (const spec of importSpecifiers) {
|
|
412
|
+
if (spec.alias !== spec.original) {
|
|
413
|
+
lines.push(` ${spec.original} as ${spec.alias},`);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
lines.push(` ${spec.alias},`);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
lines.push(`} from '${packageName}';`);
|
|
420
|
+
lines.push('');
|
|
421
|
+
}
|
|
422
|
+
// Runtime reference array — this is the static code path that prevents tree-shaking
|
|
423
|
+
lines.push('/**');
|
|
424
|
+
lines.push(' * Runtime references to every @RegisterClass decorated class.');
|
|
425
|
+
lines.push(' * This array creates a static code path the bundler cannot tree-shake.');
|
|
426
|
+
lines.push(' */');
|
|
427
|
+
lines.push('// eslint-disable-next-line @typescript-eslint/no-explicit-any');
|
|
428
|
+
lines.push(`export const CLASS_REGISTRATIONS: any[] = [`);
|
|
429
|
+
for (const alias of allAliases) {
|
|
430
|
+
lines.push(` ${alias},`);
|
|
431
|
+
}
|
|
432
|
+
lines.push('];');
|
|
433
|
+
lines.push('');
|
|
434
|
+
lines.push('/** Marker constant indicating the manifest has been loaded. */');
|
|
435
|
+
lines.push('export const CLASS_REGISTRATIONS_MANIFEST_LOADED = true;');
|
|
436
|
+
lines.push('');
|
|
437
|
+
lines.push(`/** Total @RegisterClass decorated classes discovered in dependency tree */`);
|
|
438
|
+
lines.push(`export const CLASS_REGISTRATIONS_COUNT = ${allAliases.length};`);
|
|
439
|
+
lines.push('');
|
|
440
|
+
lines.push(`/** Packages imported by this manifest */`);
|
|
441
|
+
lines.push(`export const CLASS_REGISTRATIONS_PACKAGES = [`);
|
|
442
|
+
for (const pkg of sortedPackages) {
|
|
443
|
+
lines.push(` '${pkg}',`);
|
|
444
|
+
}
|
|
445
|
+
lines.push(`] as const;`);
|
|
446
|
+
lines.push('');
|
|
447
|
+
return lines.join('\n');
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Builds the file header comment block.
|
|
451
|
+
*/
|
|
452
|
+
function buildFileHeader(appName, totalDepsWalked, packageCount) {
|
|
453
|
+
return [
|
|
454
|
+
'/**',
|
|
455
|
+
' * AUTO-GENERATED FILE - DO NOT EDIT',
|
|
456
|
+
' * Generated by mj codegen manifest',
|
|
457
|
+
` * App: ${appName}`,
|
|
458
|
+
` * Dependency tree: ${totalDepsWalked} packages walked, ${packageCount} contain @RegisterClass`,
|
|
459
|
+
' *',
|
|
460
|
+
' * This file imports every @RegisterClass decorated class by name and places',
|
|
461
|
+
' * them in an exported array, creating a static code path that prevents',
|
|
462
|
+
' * tree-shaking from removing them.',
|
|
463
|
+
' */',
|
|
464
|
+
'',
|
|
465
|
+
'/* eslint-disable @typescript-eslint/no-unused-vars */',
|
|
466
|
+
''
|
|
467
|
+
];
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Detects cross-package class name collisions and builds a map of
|
|
471
|
+
* (packageName, className) -> unique alias for any collisions.
|
|
472
|
+
*
|
|
473
|
+
* Classes that are unique across all packages keep their original name.
|
|
474
|
+
* Colliding classes get prefixed with a sanitized package suffix.
|
|
475
|
+
*/
|
|
476
|
+
function buildAliasMap(packageMap, sortedPackages) {
|
|
477
|
+
// Count how many packages export each class name
|
|
478
|
+
const nameCount = new Map();
|
|
479
|
+
for (const pkg of sortedPackages) {
|
|
480
|
+
const classNames = packageMap.get(pkg);
|
|
481
|
+
for (const name of classNames) {
|
|
482
|
+
nameCount.set(name, (nameCount.get(name) || 0) + 1);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
// Build alias map only for collisions: "pkgName::className" -> alias
|
|
486
|
+
const aliasMap = new Map();
|
|
487
|
+
for (const pkg of sortedPackages) {
|
|
488
|
+
const classNames = packageMap.get(pkg);
|
|
489
|
+
for (const name of classNames) {
|
|
490
|
+
if ((nameCount.get(name) || 0) > 1) {
|
|
491
|
+
const suffix = sanitizePackageName(pkg);
|
|
492
|
+
aliasMap.set(`${pkg}::${name}`, `${name}_${suffix}`);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
return aliasMap;
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Converts a package name like "@memberjunction/ai-anthropic"
|
|
500
|
+
* into a safe identifier suffix like "ai_anthropic".
|
|
501
|
+
*/
|
|
502
|
+
function sanitizePackageName(packageName) {
|
|
503
|
+
return packageName
|
|
504
|
+
.replace(/^@[^/]+\//, '') // strip scope
|
|
505
|
+
.replace(/[^a-zA-Z0-9]/g, '_'); // non-alphanum → underscore
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Builds import specifiers for a package's classes, applying aliases where needed.
|
|
509
|
+
*/
|
|
510
|
+
function buildImportSpecifiers(classNames, packageName, aliasMap) {
|
|
511
|
+
return classNames.map(name => {
|
|
512
|
+
const key = `${packageName}::${name}`;
|
|
513
|
+
const alias = aliasMap.get(key) || name;
|
|
514
|
+
return { original: name, alias };
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
// ============================================================================
|
|
518
|
+
// Main Entry Point
|
|
519
|
+
// ============================================================================
|
|
520
|
+
/**
|
|
521
|
+
* Generates a class registrations manifest for the app in the given directory.
|
|
522
|
+
*
|
|
523
|
+
* Walks the app's dependency tree from its package.json, scans each dependency
|
|
524
|
+
* for @RegisterClass decorators, and writes an import manifest that prevents
|
|
525
|
+
* tree-shaking from removing those classes.
|
|
526
|
+
*
|
|
527
|
+
* @param options - Configuration options
|
|
528
|
+
* @returns Result with discovered classes and generated manifest path
|
|
529
|
+
*
|
|
530
|
+
* @example
|
|
531
|
+
* ```typescript
|
|
532
|
+
* import { generateClassRegistrationsManifest } from '@memberjunction/codegen-lib';
|
|
533
|
+
*
|
|
534
|
+
* const result = await generateClassRegistrationsManifest({
|
|
535
|
+
* outputPath: './src/generated/class-manifest.ts'
|
|
536
|
+
* });
|
|
537
|
+
*
|
|
538
|
+
* if (result.success) {
|
|
539
|
+
* console.log(`Manifest: ${result.packages.length} packages, ${result.classes.length} classes`);
|
|
540
|
+
* }
|
|
541
|
+
* ```
|
|
542
|
+
*/
|
|
543
|
+
export async function generateClassRegistrationsManifest(options) {
|
|
544
|
+
const { outputPath, appDir = process.cwd(), verbose = true, filterBaseClasses, excludePatterns = [], excludePackages = [] } = options;
|
|
545
|
+
const errors = [];
|
|
546
|
+
const allClasses = [];
|
|
547
|
+
// verbose log: only emitted with verbose=true (e.g. not during prestart)
|
|
548
|
+
const log = (msg) => {
|
|
549
|
+
if (verbose)
|
|
550
|
+
console.log(`[class-manifest] ${msg}`);
|
|
551
|
+
};
|
|
552
|
+
const absoluteAppDir = path.resolve(appDir);
|
|
553
|
+
// Read the app's package.json
|
|
554
|
+
const appPkg = readPackageJson(absoluteAppDir);
|
|
555
|
+
if (!appPkg) {
|
|
556
|
+
errors.push(`No package.json found in ${absoluteAppDir}`);
|
|
557
|
+
return { success: false, outputPath, ManifestChanged: false, classes: [], packages: [], totalDepsWalked: 0, errors };
|
|
558
|
+
}
|
|
559
|
+
log(`Building manifest for: ${appPkg.name}`);
|
|
560
|
+
log(`App directory: ${absoluteAppDir}`);
|
|
561
|
+
// Walk the dependency tree
|
|
562
|
+
const depTree = walkDependencyTree(absoluteAppDir, log, excludePackages);
|
|
563
|
+
log(`Dependency tree: ${depTree.size} packages`);
|
|
564
|
+
// Scan each dependency for @RegisterClass decorators
|
|
565
|
+
let packagesWithDecorators = 0;
|
|
566
|
+
for (const [depName, depDir] of Array.from(depTree.entries())) {
|
|
567
|
+
const sourceFiles = await findSourceFiles(depDir, excludePatterns);
|
|
568
|
+
if (sourceFiles.length === 0)
|
|
569
|
+
continue;
|
|
570
|
+
let foundInPackage = false;
|
|
571
|
+
for (const filePath of sourceFiles) {
|
|
572
|
+
try {
|
|
573
|
+
const sourceText = fs.readFileSync(filePath, 'utf-8');
|
|
574
|
+
const classes = extractRegisterClassDecorators(filePath, sourceText, depName);
|
|
575
|
+
if (classes.length > 0) {
|
|
576
|
+
foundInPackage = true;
|
|
577
|
+
allClasses.push(...classes);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
catch (err) {
|
|
581
|
+
errors.push(`Error reading ${filePath}: ${err}`);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
if (foundInPackage)
|
|
585
|
+
packagesWithDecorators++;
|
|
586
|
+
}
|
|
587
|
+
log(`Found ${allClasses.length} @RegisterClass decorators in ${packagesWithDecorators} packages`);
|
|
588
|
+
// Build export map and filter to only classes actually exported from public API
|
|
589
|
+
log('Verifying classes are exported from package public APIs...');
|
|
590
|
+
const exportsMap = buildPackageExportsMap(depTree, log);
|
|
591
|
+
const { exported: verifiedClasses, skipped } = filterToExportedClasses(allClasses, exportsMap, log);
|
|
592
|
+
log(`Verified: ${verifiedClasses.length} exported, ${skipped.length} skipped (not in public API)`);
|
|
593
|
+
// Generate manifest using only verified classes
|
|
594
|
+
const manifestContent = generateManifestContent(verifiedClasses, appPkg.name, depTree.size, filterBaseClasses);
|
|
595
|
+
const absoluteOutputPath = path.resolve(outputPath);
|
|
596
|
+
let manifestChanged = false;
|
|
597
|
+
try {
|
|
598
|
+
fs.mkdirSync(path.dirname(absoluteOutputPath), { recursive: true });
|
|
599
|
+
// Only write if content actually changed to preserve file mtime and avoid
|
|
600
|
+
// invalidating Angular's .angular cache or esbuild's incremental build cache
|
|
601
|
+
let existingContent = '';
|
|
602
|
+
try {
|
|
603
|
+
existingContent = fs.readFileSync(absoluteOutputPath, 'utf-8');
|
|
604
|
+
}
|
|
605
|
+
catch {
|
|
606
|
+
// File doesn't exist yet, that's fine
|
|
607
|
+
}
|
|
608
|
+
if (existingContent !== manifestContent) {
|
|
609
|
+
fs.writeFileSync(absoluteOutputPath, manifestContent, 'utf-8');
|
|
610
|
+
manifestChanged = true;
|
|
611
|
+
log(`Wrote manifest to: ${absoluteOutputPath}`);
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
log(`Manifest unchanged, skipped write`);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
catch (err) {
|
|
618
|
+
errors.push(`Error writing manifest: ${err}`);
|
|
619
|
+
return { success: false, outputPath: absoluteOutputPath, ManifestChanged: false, classes: allClasses, packages: [], totalDepsWalked: depTree.size, errors };
|
|
620
|
+
}
|
|
621
|
+
const uniquePackages = Array.from(new Set(verifiedClasses.map(c => c.packageName))).sort();
|
|
622
|
+
return {
|
|
623
|
+
success: errors.length === 0,
|
|
624
|
+
outputPath: absoluteOutputPath,
|
|
625
|
+
ManifestChanged: manifestChanged,
|
|
626
|
+
classes: verifiedClasses,
|
|
627
|
+
packages: uniquePackages,
|
|
628
|
+
totalDepsWalked: depTree.size,
|
|
629
|
+
errors
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
//# sourceMappingURL=GenerateClassRegistrationsManifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerateClassRegistrationsManifest.js","sourceRoot":"","sources":["../../src/Manifest/GenerateClassRegistrationsManifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action_subclasses_codegen.d.ts","sourceRoot":"","sources":["../../src/Misc/action_subclasses_codegen.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAuB,MAAM,+BAA+B,CAAC;AAKlF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;GAEG;AACH,qBAAa,2BAA2B;IAEpC,SAAS,CAAC,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,EAAE;iBAEnC,MAAM;mBAAa,MAAM;wBAAkB,MAAM,EAAE;;IA6B9E,eAAe,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"action_subclasses_codegen.d.ts","sourceRoot":"","sources":["../../src/Misc/action_subclasses_codegen.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAuB,MAAM,+BAA+B,CAAC;AAKlF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;GAEG;AACH,qBAAa,2BAA2B;IAEpC,SAAS,CAAC,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,EAAE;iBAEnC,MAAM;mBAAa,MAAM;wBAAkB,MAAM,EAAE;;IA6B9E,eAAe,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6ClG;;;;;;;OAOG;IACU,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAmC9F"}
|