@common-stack/rollup-vite-utils 6.0.8-alpha.53 → 6.0.8-alpha.55
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/lib/tools/codegen/modulePathParser.d.ts +56 -0
- package/lib/tools/codegen/performCopyOperations.cjs +146 -119
- package/lib/tools/codegen/performCopyOperations.cjs.map +1 -1
- package/lib/tools/codegen/performCopyOperations.d.ts +14 -22
- package/lib/tools/codegen/performCopyOperations.js +146 -119
- package/lib/tools/codegen/performCopyOperations.js.map +1 -1
- package/lib/tools/codegen/templates/common/src/apollo-context.ts.template +8 -1
- package/lib/tools/codegen/templates/common/tsconfig.json.template +1 -3
- package/package.json +2 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module Path Parser and Stringifier
|
|
3
|
+
*
|
|
4
|
+
* Universal Module Path Format:
|
|
5
|
+
* For modules with a particular variant:
|
|
6
|
+
* <moduleBase>/<variant>/${libDir}
|
|
7
|
+
* For independent modules:
|
|
8
|
+
* <moduleBase>/${libDir}
|
|
9
|
+
*
|
|
10
|
+
* This module provides two functions:
|
|
11
|
+
* - parseModulePath: parses a module path string into its components.
|
|
12
|
+
* - stringifyModulePath: converts the components back into a module path string.
|
|
13
|
+
*/
|
|
14
|
+
export interface ModulePathParts {
|
|
15
|
+
/**
|
|
16
|
+
* The base part of the module path, for example:
|
|
17
|
+
* "packages-modules/account-api" or "node_modules/@container-stack/file-info-server"
|
|
18
|
+
*/
|
|
19
|
+
moduleBase: string;
|
|
20
|
+
/**
|
|
21
|
+
* The resource variant, for example: "client", "core", "browser", "server".
|
|
22
|
+
* This is optional, as independent modules do not include a variant.
|
|
23
|
+
*/
|
|
24
|
+
variant?: string;
|
|
25
|
+
/**
|
|
26
|
+
* This is the library directory token or its resolved value.
|
|
27
|
+
* In our configuration it is typically the placeholder "${libDir}".
|
|
28
|
+
*/
|
|
29
|
+
libDir: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parses a module path string into its constituent parts.
|
|
33
|
+
*
|
|
34
|
+
* The function will try to match one of two patterns:
|
|
35
|
+
*
|
|
36
|
+
* 1. <moduleBase>/<variant>/<libDir>
|
|
37
|
+
* 2. <moduleBase>/<libDir>
|
|
38
|
+
*
|
|
39
|
+
* If neither pattern matches, the function returns null.
|
|
40
|
+
*
|
|
41
|
+
* @param modulePath - The module path string to parse.
|
|
42
|
+
* @returns An object containing the parsed parts, or null if parsing fails.
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseModulePath(modulePath: string): ModulePathParts | null;
|
|
45
|
+
/**
|
|
46
|
+
* Converts the provided ModulePathParts object back to a module path string.
|
|
47
|
+
*
|
|
48
|
+
* If the variant is provided, the format will be:
|
|
49
|
+
* <moduleBase>/<variant>/<libDir>
|
|
50
|
+
* Otherwise, it is considered an independent module and formatted as:
|
|
51
|
+
* <moduleBase>/<libDir>
|
|
52
|
+
*
|
|
53
|
+
* @param parts - The ModulePathParts object.
|
|
54
|
+
* @returns The combined module path string.
|
|
55
|
+
*/
|
|
56
|
+
export declare function stringifyModulePath(parts: ModulePathParts): string;
|
|
@@ -1,36 +1,29 @@
|
|
|
1
|
-
'use strict';var child_process=require('child_process'),fs=require('fs'),path=require('path'),commonPaths=require('./commonPaths.cjs');/* eslint-disable no-
|
|
1
|
+
'use strict';var child_process=require('child_process'),fs=require('fs'),path=require('path'),commonPaths=require('./commonPaths.cjs');/* eslint-disable no-template-curly-in-string */
|
|
2
|
+
/* eslint-disable no-continue */
|
|
2
3
|
/* eslint-disable default-param-last */
|
|
3
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
5
|
/* eslint-disable guard-for-in */
|
|
5
6
|
/**
|
|
6
|
-
* For each discovered module, if
|
|
7
|
-
*
|
|
8
|
-
* from the package's template
|
|
7
|
+
* For each discovered module (package), if its package.json defines cdecode.common then this
|
|
8
|
+
* function copies resource files (for keys such as "modules", "services", "repository", and "enums")
|
|
9
|
+
* from the package's template directory into the common package.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
* upon copy so that the destination file is a plain .ts file.
|
|
11
|
+
* The new behavior is as follows:
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* • common/src/services/<pkgName>
|
|
16
|
-
* • common/src/repository/<pkgName>
|
|
17
|
-
* • common/src/enums/<pkgName>
|
|
13
|
+
* 1. The module path provided (for example "packages-modules/user-auth0/core/src")
|
|
14
|
+
* is trimmed (removing any trailing "/src" or "/lib") so that package.json is read from the package root.
|
|
18
15
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
16
|
+
* 2. For keys other than "enums", each resource file (after flattening its full path to just its basename)
|
|
17
|
+
* is copied into the common folder for that key (for example, "common/src/services") and then modified so that
|
|
18
|
+
* a comment is prepended indicating the originating package.
|
|
22
19
|
*
|
|
23
|
-
* For
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* export—for example:
|
|
20
|
+
* 3. For "enums", files with the same flattened name are aggregated across packages.
|
|
21
|
+
* A single merged file is created in "common/src/enums" by wrapping all enum member definitions within
|
|
22
|
+
* an enum declaration, and each contribution is preceded by a comment (e.g. "// from package: user-auth0-core").
|
|
27
23
|
*
|
|
28
|
-
*
|
|
29
|
-
* // contents from package1
|
|
30
|
-
* // contents from package2
|
|
31
|
-
* }
|
|
24
|
+
* 4. Finally, the global top-level index (common/src/index.ts) is appended with export statements for each folder type.
|
|
32
25
|
*
|
|
33
|
-
*
|
|
26
|
+
* Note: We no longer create an additional module (package) directory in the destination.
|
|
34
27
|
*/
|
|
35
28
|
function performCopyOperations(modules, cdecodePaths = {}, options) {
|
|
36
29
|
let { repoRoot, commonPackagePath } = cdecodePaths;
|
|
@@ -43,112 +36,146 @@ function performCopyOperations(modules, cdecodePaths = {}, options) {
|
|
|
43
36
|
}
|
|
44
37
|
// Use the provided commandRunner or default to execSync.
|
|
45
38
|
const commandRunner = options?.commandRunner || ((cmd) => child_process.execSync(cmd));
|
|
46
|
-
//
|
|
47
|
-
const
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// Helper: compute export name for index generation.
|
|
67
|
-
const getExportName = (file) => {
|
|
68
|
-
const destFileName = getDestinationFileName(file);
|
|
69
|
-
// Remove the .ts extension from the file name.
|
|
70
|
-
return path.basename(destFileName, '.ts');
|
|
71
|
-
};
|
|
72
|
-
for (const modulesObj of modules) {
|
|
73
|
-
// modulesObj is expected to be an object like { server, client, etc. }
|
|
74
|
-
for (const moduleName of Object.values(modulesObj)) {
|
|
39
|
+
// Track which resource folders are processed.
|
|
40
|
+
const processedFolders = {};
|
|
41
|
+
// Object to collect enum contributions.
|
|
42
|
+
// Key is the flattened destination file name (e.g. "auth-error.ts"),
|
|
43
|
+
// value is an array with the source file and package name.
|
|
44
|
+
const aggregatedEnums = {};
|
|
45
|
+
// Process each module (package) definition.
|
|
46
|
+
for (const moduleObj of modules) {
|
|
47
|
+
// moduleObj is expected to be an object like { server: 'packages-modules/user-auth0/core/src' }
|
|
48
|
+
for (const modulePathVal of Object.values(moduleObj)) {
|
|
49
|
+
let trimmedModulePath = modulePathVal;
|
|
50
|
+
let inferredLibDir = 'src'; // default
|
|
51
|
+
if (modulePathVal.endsWith(`${path.sep}src`)) {
|
|
52
|
+
inferredLibDir = 'src';
|
|
53
|
+
trimmedModulePath = path.dirname(modulePathVal);
|
|
54
|
+
}
|
|
55
|
+
else if (modulePathVal.endsWith(`${path.sep}lib`)) {
|
|
56
|
+
inferredLibDir = 'lib';
|
|
57
|
+
trimmedModulePath = path.dirname(modulePathVal);
|
|
58
|
+
}
|
|
75
59
|
try {
|
|
76
|
-
// Read package.json from the package
|
|
77
|
-
const pkgJsonFilePath = path.join(repoRoot,
|
|
78
|
-
if (!fs.existsSync(pkgJsonFilePath))
|
|
60
|
+
// Read package.json from the package root.
|
|
61
|
+
const pkgJsonFilePath = path.join(repoRoot, trimmedModulePath, 'package.json');
|
|
62
|
+
if (!fs.existsSync(pkgJsonFilePath))
|
|
79
63
|
continue;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const destFileName = getDestinationFileName(file);
|
|
101
|
-
const destination = path.join(directoryPath, destFileName);
|
|
102
|
-
commandRunner(`cp -r ${sourceFile} ${destination}`);
|
|
103
|
-
// For enums, accumulate the destination file for aggregation.
|
|
104
|
-
if (folderType === 'enums') {
|
|
105
|
-
if (!enumAggregation[destFileName]) {
|
|
106
|
-
enumAggregation[destFileName] = [];
|
|
107
|
-
}
|
|
108
|
-
enumAggregation[destFileName].push(destination);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
// Generate index.ts in the destination folder that re-exports each file.
|
|
112
|
-
const exportsContent = resourceList
|
|
113
|
-
.map((file) => `export * from './${getExportName(file)}';`)
|
|
114
|
-
.join('\n');
|
|
115
|
-
commandRunner(`echo "${exportsContent.replace(/"/g, '\\"')}" > ${path.join(directoryPath, 'index.ts')}`);
|
|
116
|
-
// Create (or overwrite) an index.ts in the parent folder of the destination;
|
|
117
|
-
// this index re-exports the package folder so that later an aggregator can import all packages.
|
|
118
|
-
commandRunner(`echo "export * from './${pkgName}';" > ${path.join(directoryPath, '../', 'index.ts')}`);
|
|
119
|
-
shouldAddExportFlag[folderType] = true;
|
|
64
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonFilePath, 'utf-8'));
|
|
65
|
+
if (!pkgJson.cdecode?.common)
|
|
66
|
+
continue;
|
|
67
|
+
// For a scoped package like "@org/user-auth0-core", use the part after the slash.
|
|
68
|
+
const pkgNameFull = pkgJson.name || '';
|
|
69
|
+
const pkgName = pkgNameFull.split('/')[1] || pkgNameFull;
|
|
70
|
+
// Source base: package root (for resolving declared resource paths).
|
|
71
|
+
const sourceBase = path.join(repoRoot, trimmedModulePath);
|
|
72
|
+
for (const folderType of ['modules', 'services', 'repository', 'enums']) {
|
|
73
|
+
const resourceList = pkgJson.cdecode.common[folderType] || [];
|
|
74
|
+
if (resourceList.length === 0)
|
|
75
|
+
continue;
|
|
76
|
+
// Mark folder as processed.
|
|
77
|
+
processedFolders[folderType] = true;
|
|
78
|
+
// Determine destination folder.
|
|
79
|
+
// For non-enums, files are copied into common/src/<folderType>
|
|
80
|
+
// For enums, files are aggregated into common/src/enums.
|
|
81
|
+
let destFolder;
|
|
82
|
+
if (folderType === 'enums') {
|
|
83
|
+
destFolder = path.join(commonPackagePath, 'src', 'enums');
|
|
120
84
|
}
|
|
85
|
+
else {
|
|
86
|
+
destFolder = path.join(commonPackagePath, 'src', folderType);
|
|
87
|
+
}
|
|
88
|
+
commandRunner(`mkdir -p ${destFolder}`);
|
|
89
|
+
resourceList.forEach((file) => {
|
|
90
|
+
// Flatten the resource file name (ignore any intermediate directories)
|
|
91
|
+
// and remove the ".ts.template" suffix.
|
|
92
|
+
const destFileName = path.basename(file).replace(/\.ts\.template$/, '.ts');
|
|
93
|
+
// When processing each resource (using the value from package.json, e.g. "./${libDir}/templates/...")
|
|
94
|
+
const resolvedTemplatePath = file.replace('${libDir}', inferredLibDir);
|
|
95
|
+
const sourceFile = path.join(sourceBase, resolvedTemplatePath);
|
|
96
|
+
if (folderType === 'enums') {
|
|
97
|
+
// For enums, collect each file (with package name) for later aggregation.
|
|
98
|
+
if (!aggregatedEnums[destFileName]) {
|
|
99
|
+
aggregatedEnums[destFileName] = { contributions: [] };
|
|
100
|
+
}
|
|
101
|
+
aggregatedEnums[destFileName].contributions.push({ pkgName, sourceFile });
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// For non-enums, copy the file and then prepend a comment indicating its origin.
|
|
105
|
+
const destFile = path.join(destFolder, destFileName);
|
|
106
|
+
commandRunner(`cp -r ${sourceFile} ${destFile}`);
|
|
107
|
+
// Prepend a comment to indicate the package origin.
|
|
108
|
+
commandRunner(`(echo "// from package: ${pkgName}" && cat ${destFile}) > ${destFile}.tmp && mv ${destFile}.tmp ${destFile}`);
|
|
109
|
+
// Append an export statement to the folder's index.
|
|
110
|
+
commandRunner(`echo "export * from './${destFileName.replace('.ts', '')}';" >> ${path.join(destFolder, 'index.ts')}`);
|
|
111
|
+
// Replace any import from "common" with the relative path to generated models.
|
|
112
|
+
// Use BSD‑compatible sed syntax.
|
|
113
|
+
commandRunner(`sed -i '' "s/from ['\\"]common['\\"]/from '..\\/generated\\/generated-models'/g" ${destFile}`);
|
|
114
|
+
// If this is a service file, auto generate the augmentation boilerplate.
|
|
115
|
+
if (folderType === 'services') {
|
|
116
|
+
const serviceBaseName = destFileName.replace('.ts', '');
|
|
117
|
+
const propertyName = serviceBaseName.charAt(0).toLowerCase() + serviceBaseName.slice(1);
|
|
118
|
+
const augmentationContent = `/**
|
|
119
|
+
* This file augments the ServerContext interface from the central apollo-context.
|
|
120
|
+
* Through declaration merging, the ${propertyName} will be added to the ServerContext.
|
|
121
|
+
*/
|
|
122
|
+
declare module '../apollo-context' {
|
|
123
|
+
export interface ServerContext {
|
|
124
|
+
${propertyName}: I${serviceBaseName};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
`;
|
|
128
|
+
const augmentationFilePath = path.join(destFolder, `${serviceBaseName}.augment.d.ts`);
|
|
129
|
+
fs.writeFileSync(augmentationFilePath, augmentationContent, 'utf8');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
121
133
|
}
|
|
122
134
|
}
|
|
123
|
-
catch (
|
|
124
|
-
console.error(`Error processing module: ${
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error(`Error processing module: ${modulePathVal}`, err);
|
|
125
137
|
}
|
|
126
138
|
}
|
|
127
139
|
}
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
// ----- Enum Aggregation Step -----
|
|
141
|
+
// Ensure the enums destination folder is created if it was processed.
|
|
142
|
+
const enumDestFolder = path.join(commonPackagePath, 'src', 'enums');
|
|
143
|
+
if (processedFolders['enums']) {
|
|
144
|
+
commandRunner(`mkdir -p ${enumDestFolder}`);
|
|
145
|
+
if (Object.keys(aggregatedEnums).length > 0) {
|
|
146
|
+
for (const destFileName in aggregatedEnums) {
|
|
147
|
+
const aggregatedFile = path.join(enumDestFolder, destFileName);
|
|
148
|
+
const contributions = aggregatedEnums[destFileName].contributions;
|
|
149
|
+
// Read the first contribution's file content to extract the proper enum name.
|
|
150
|
+
const firstContribution = contributions[0];
|
|
151
|
+
const fileContent = fs.readFileSync(firstContribution.sourceFile, 'utf8');
|
|
152
|
+
const match = fileContent.match(/export\s+enum\s+(\w+)/);
|
|
153
|
+
const enumName = match ? match[1] : destFileName.replace('.ts', '');
|
|
154
|
+
// Start the aggregated file with the correct enum declaration.
|
|
155
|
+
commandRunner(`echo "export enum ${enumName} {" > ${aggregatedFile}`);
|
|
156
|
+
for (const contribution of contributions) {
|
|
157
|
+
commandRunner(`echo " // from package: ${contribution.pkgName}" >> ${aggregatedFile}`);
|
|
158
|
+
// Extract only the enum inner content (between "{" and "}") using two sed commands.
|
|
159
|
+
commandRunner(`sed -n '/{/,/}/p' ${contribution.sourceFile} | sed '1d;$d' >> ${aggregatedFile}`);
|
|
160
|
+
}
|
|
161
|
+
// Close the enum declaration.
|
|
162
|
+
commandRunner(`echo "}" >> ${aggregatedFile}`);
|
|
163
|
+
// Append an export statement to the enums index.
|
|
164
|
+
commandRunner(`echo "export * from './${enumName}';" >> ${path.join(enumDestFolder, 'index.ts')}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// No enums were aggregated, but still create an empty index file.
|
|
169
|
+
fs.writeFileSync(path.join(enumDestFolder, 'index.ts'), '', 'utf8');
|
|
133
170
|
}
|
|
134
171
|
}
|
|
135
|
-
// -----
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const baseName = path.basename(destFileName, '.ts'); // e.g., "ErrorMessage"
|
|
143
|
-
const aggregatedFile = path.join(enumsTargetDir, destFileName);
|
|
144
|
-
// Begin the aggregated file with the enum header.
|
|
145
|
-
commandRunner(`echo "export enum ${baseName} {" > ${aggregatedFile}`);
|
|
146
|
-
// Append the contents (enum members) from each package's file.
|
|
147
|
-
enumAggregation[destFileName].forEach((filePath) => {
|
|
148
|
-
commandRunner(`cat ${filePath} >> ${aggregatedFile}`);
|
|
149
|
-
});
|
|
150
|
-
// Close the enum definition.
|
|
151
|
-
commandRunner(`echo "}" >> ${aggregatedFile}`);
|
|
172
|
+
// ----- Global Index Update -----
|
|
173
|
+
// Append export statements for each folder type that was processed.
|
|
174
|
+
const globalIndexFile = path.join(commonPackagePath, 'src', 'index.ts');
|
|
175
|
+
const folderTypes = ['modules', 'services', 'repository', 'enums'];
|
|
176
|
+
for (const folderKey of folderTypes) {
|
|
177
|
+
if (processedFolders[folderKey]) {
|
|
178
|
+
commandRunner(`echo "export * from './${folderKey}';" >> ${globalIndexFile}`);
|
|
152
179
|
}
|
|
153
180
|
}
|
|
154
181
|
}exports.performCopyOperations=performCopyOperations;//# sourceMappingURL=performCopyOperations.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performCopyOperations.cjs","sources":["../../../src/tools/codegen/performCopyOperations.ts"],"sourcesContent":[null],"names":["pathsConfig","execSync"],"mappings":"uIAAA;AACA;AACA;AACA;AAWA
|
|
1
|
+
{"version":3,"file":"performCopyOperations.cjs","sources":["../../../src/tools/codegen/performCopyOperations.ts"],"sourcesContent":[null],"names":["pathsConfig","execSync"],"mappings":"uIAAA;AACA;AACA;AACA;AACA;AAWA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG,SAAU,qBAAqB,CAAC,OAAY,EAAE,YAAe,GAAA,EAAS,EAAE,OAAqB,EAAA;AAC/F,IAAA,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC;IAEnD,IAAI,CAAC,QAAQ,EAAE;AACX,QAAA,QAAQ,GAAGA,uBAAW,CAAC,QAAQ,CAAC;KACnC;IACD,IAAI,CAAC,iBAAiB,EAAE;;QAEpB,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAACA,uBAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;KAC1E;;AAGD,IAAA,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,KAAK,CAAC,GAAW,KAAKC,sBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;;IAGjF,MAAM,gBAAgB,GAA+B,EAAE,CAAC;;;;IAKxD,MAAM,eAAe,GAEjB,EAAE,CAAC;;AAGP,IAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;;QAE7B,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAa,EAAE;YAC9D,IAAI,iBAAiB,GAAG,aAAa,CAAC;AACtC,YAAA,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA,EAAG,IAAI,CAAC,GAAG,CAAA,GAAA,CAAK,CAAC,EAAE;gBAC1C,cAAc,GAAG,KAAK,CAAC;AACvB,gBAAA,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;aACnD;iBAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA,EAAG,IAAI,CAAC,GAAG,CAAA,GAAA,CAAK,CAAC,EAAE;gBACjD,cAAc,GAAG,KAAK,CAAC;AACvB,gBAAA,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;aACnD;AACD,YAAA,IAAI;;AAEA,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAC/E,gBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;oBAAE,SAAS;AAC9C,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM;oBAAE,SAAS;;AAEvC,gBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AACvC,gBAAA,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;;gBAEzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAE1D,gBAAA,KAAK,MAAM,UAAU,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;AACrE,oBAAA,MAAM,YAAY,GAAa,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACxE,oBAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAAE,SAAS;;AAExC,oBAAA,gBAAgB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;;;;AAIpC,oBAAA,IAAI,UAAkB,CAAC;AACvB,oBAAA,IAAI,UAAU,KAAK,OAAO,EAAE;wBACxB,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;qBAC7D;yBAAM;wBACH,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;qBAChE;AACD,oBAAA,aAAa,CAAC,CAAA,SAAA,EAAY,UAAU,CAAA,CAAE,CAAC,CAAC;AAExC,oBAAA,YAAY,CAAC,OAAO,CAAC,CAAC,IAAY,KAAI;;;AAGlC,wBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;;wBAE3E,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;wBACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;AAE/D,wBAAA,IAAI,UAAU,KAAK,OAAO,EAAE;;AAExB,4BAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;gCAChC,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;6BACzD;AACD,4BAAA,eAAe,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;yBAC7E;6BAAM;;4BAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACrD,4BAAA,aAAa,CAAC,CAAS,MAAA,EAAA,UAAU,IAAI,QAAQ,CAAA,CAAE,CAAC,CAAC;;AAEjD,4BAAA,aAAa,CACT,CAAA,wBAAA,EAA2B,OAAO,CAAA,SAAA,EAAY,QAAQ,CAAA,IAAA,EAAO,QAAQ,CAAA,WAAA,EAAc,QAAQ,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAChH,CAAC;;4BAEF,aAAa,CACT,0BAA0B,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAE,CAAA,CACzG,CAAC;;;AAGF,4BAAA,aAAa,CACT,CAAA,iFAAA,EAAoF,QAAQ,CAAA,CAAE,CACjG,CAAC;;AAEF,4BAAA,IAAI,UAAU,KAAK,UAAU,EAAE;gCAC3B,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxD,gCAAA,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxF,gCAAA,MAAM,mBAAmB,GAAG,CAAA;;sCAEtB,YAAY,CAAA;;;;AAI5C,IAAA,EAAA,YAAY,MAAM,eAAe,CAAA;;;CAGtC,CAAC;AAC8B,gCAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAG,EAAA,eAAe,CAAe,aAAA,CAAA,CAAC,CAAC;gCACtF,EAAE,CAAC,aAAa,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;6BACvE;yBACJ;AACL,qBAAC,CAAC,CAAC;iBACN;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAA,yBAAA,EAA4B,aAAa,CAAE,CAAA,EAAE,GAAG,CAAC,CAAC;aACnE;SACJ;KACJ;;;AAID,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACpE,IAAA,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;AAC3B,QAAA,aAAa,CAAC,CAAA,SAAA,EAAY,cAAc,CAAA,CAAE,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE;gBACxC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;gBAC/D,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC;;AAElE,gBAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAA,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;;AAEpE,gBAAA,aAAa,CAAC,CAAqB,kBAAA,EAAA,QAAQ,SAAS,cAAc,CAAA,CAAE,CAAC,CAAC;AACtE,gBAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;oBACtC,aAAa,CAAC,4BAA4B,YAAY,CAAC,OAAO,CAAQ,KAAA,EAAA,cAAc,CAAE,CAAA,CAAC,CAAC;;oBAExF,aAAa,CAAC,qBAAqB,YAAY,CAAC,UAAU,CAAqB,kBAAA,EAAA,cAAc,CAAE,CAAA,CAAC,CAAC;iBACpG;;AAED,gBAAA,aAAa,CAAC,CAAA,YAAA,EAAe,cAAc,CAAA,CAAE,CAAC,CAAC;;AAE/C,gBAAA,aAAa,CAAC,CAAA,uBAAA,EAA0B,QAAQ,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA,CAAE,CAAC,CAAC;aACtG;SACJ;aAAM;;AAEH,YAAA,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;SACvE;KACJ;;;AAID,IAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AACnE,IAAA,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;AACjC,QAAA,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE;AAC7B,YAAA,aAAa,CAAC,CAA0B,uBAAA,EAAA,SAAS,UAAU,eAAe,CAAA,CAAE,CAAC,CAAC;SACjF;KACJ;AACL"}
|
|
@@ -3,33 +3,25 @@ export interface CopyOptions {
|
|
|
3
3
|
commandRunner?: (command: string) => void;
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
* For each discovered module, if
|
|
7
|
-
*
|
|
8
|
-
* from the package's template
|
|
6
|
+
* For each discovered module (package), if its package.json defines cdecode.common then this
|
|
7
|
+
* function copies resource files (for keys such as "modules", "services", "repository", and "enums")
|
|
8
|
+
* from the package's template directory into the common package.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* upon copy so that the destination file is a plain .ts file.
|
|
10
|
+
* The new behavior is as follows:
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* • common/src/services/<pkgName>
|
|
16
|
-
* • common/src/repository/<pkgName>
|
|
17
|
-
* • common/src/enums/<pkgName>
|
|
12
|
+
* 1. The module path provided (for example "packages-modules/user-auth0/core/src")
|
|
13
|
+
* is trimmed (removing any trailing "/src" or "/lib") so that package.json is read from the package root.
|
|
18
14
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
15
|
+
* 2. For keys other than "enums", each resource file (after flattening its full path to just its basename)
|
|
16
|
+
* is copied into the common folder for that key (for example, "common/src/services") and then modified so that
|
|
17
|
+
* a comment is prepended indicating the originating package.
|
|
22
18
|
*
|
|
23
|
-
* For
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* export—for example:
|
|
19
|
+
* 3. For "enums", files with the same flattened name are aggregated across packages.
|
|
20
|
+
* A single merged file is created in "common/src/enums" by wrapping all enum member definitions within
|
|
21
|
+
* an enum declaration, and each contribution is preceded by a comment (e.g. "// from package: user-auth0-core").
|
|
27
22
|
*
|
|
28
|
-
*
|
|
29
|
-
* // contents from package1
|
|
30
|
-
* // contents from package2
|
|
31
|
-
* }
|
|
23
|
+
* 4. Finally, the global top-level index (common/src/index.ts) is appended with export statements for each folder type.
|
|
32
24
|
*
|
|
33
|
-
*
|
|
25
|
+
* Note: We no longer create an additional module (package) directory in the destination.
|
|
34
26
|
*/
|
|
35
27
|
export declare function performCopyOperations(modules: any, cdecodePaths?: any, options?: CopyOptions): void;
|
|
@@ -1,36 +1,29 @@
|
|
|
1
|
-
import {execSync}from'child_process';import fs__default from'fs';import path__default from'path';import {pathsConfig}from'./commonPaths.js';/* eslint-disable no-
|
|
1
|
+
import {execSync}from'child_process';import fs__default from'fs';import path__default from'path';import {pathsConfig}from'./commonPaths.js';/* eslint-disable no-template-curly-in-string */
|
|
2
|
+
/* eslint-disable no-continue */
|
|
2
3
|
/* eslint-disable default-param-last */
|
|
3
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
5
|
/* eslint-disable guard-for-in */
|
|
5
6
|
/**
|
|
6
|
-
* For each discovered module, if
|
|
7
|
-
*
|
|
8
|
-
* from the package's template
|
|
7
|
+
* For each discovered module (package), if its package.json defines cdecode.common then this
|
|
8
|
+
* function copies resource files (for keys such as "modules", "services", "repository", and "enums")
|
|
9
|
+
* from the package's template directory into the common package.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
* upon copy so that the destination file is a plain .ts file.
|
|
11
|
+
* The new behavior is as follows:
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* • common/src/services/<pkgName>
|
|
16
|
-
* • common/src/repository/<pkgName>
|
|
17
|
-
* • common/src/enums/<pkgName>
|
|
13
|
+
* 1. The module path provided (for example "packages-modules/user-auth0/core/src")
|
|
14
|
+
* is trimmed (removing any trailing "/src" or "/lib") so that package.json is read from the package root.
|
|
18
15
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
16
|
+
* 2. For keys other than "enums", each resource file (after flattening its full path to just its basename)
|
|
17
|
+
* is copied into the common folder for that key (for example, "common/src/services") and then modified so that
|
|
18
|
+
* a comment is prepended indicating the originating package.
|
|
22
19
|
*
|
|
23
|
-
* For
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* export—for example:
|
|
20
|
+
* 3. For "enums", files with the same flattened name are aggregated across packages.
|
|
21
|
+
* A single merged file is created in "common/src/enums" by wrapping all enum member definitions within
|
|
22
|
+
* an enum declaration, and each contribution is preceded by a comment (e.g. "// from package: user-auth0-core").
|
|
27
23
|
*
|
|
28
|
-
*
|
|
29
|
-
* // contents from package1
|
|
30
|
-
* // contents from package2
|
|
31
|
-
* }
|
|
24
|
+
* 4. Finally, the global top-level index (common/src/index.ts) is appended with export statements for each folder type.
|
|
32
25
|
*
|
|
33
|
-
*
|
|
26
|
+
* Note: We no longer create an additional module (package) directory in the destination.
|
|
34
27
|
*/
|
|
35
28
|
function performCopyOperations(modules, cdecodePaths = {}, options) {
|
|
36
29
|
let { repoRoot, commonPackagePath } = cdecodePaths;
|
|
@@ -43,112 +36,146 @@ function performCopyOperations(modules, cdecodePaths = {}, options) {
|
|
|
43
36
|
}
|
|
44
37
|
// Use the provided commandRunner or default to execSync.
|
|
45
38
|
const commandRunner = options?.commandRunner || ((cmd) => execSync(cmd));
|
|
46
|
-
//
|
|
47
|
-
const
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// Helper: compute export name for index generation.
|
|
67
|
-
const getExportName = (file) => {
|
|
68
|
-
const destFileName = getDestinationFileName(file);
|
|
69
|
-
// Remove the .ts extension from the file name.
|
|
70
|
-
return path__default.basename(destFileName, '.ts');
|
|
71
|
-
};
|
|
72
|
-
for (const modulesObj of modules) {
|
|
73
|
-
// modulesObj is expected to be an object like { server, client, etc. }
|
|
74
|
-
for (const moduleName of Object.values(modulesObj)) {
|
|
39
|
+
// Track which resource folders are processed.
|
|
40
|
+
const processedFolders = {};
|
|
41
|
+
// Object to collect enum contributions.
|
|
42
|
+
// Key is the flattened destination file name (e.g. "auth-error.ts"),
|
|
43
|
+
// value is an array with the source file and package name.
|
|
44
|
+
const aggregatedEnums = {};
|
|
45
|
+
// Process each module (package) definition.
|
|
46
|
+
for (const moduleObj of modules) {
|
|
47
|
+
// moduleObj is expected to be an object like { server: 'packages-modules/user-auth0/core/src' }
|
|
48
|
+
for (const modulePathVal of Object.values(moduleObj)) {
|
|
49
|
+
let trimmedModulePath = modulePathVal;
|
|
50
|
+
let inferredLibDir = 'src'; // default
|
|
51
|
+
if (modulePathVal.endsWith(`${path__default.sep}src`)) {
|
|
52
|
+
inferredLibDir = 'src';
|
|
53
|
+
trimmedModulePath = path__default.dirname(modulePathVal);
|
|
54
|
+
}
|
|
55
|
+
else if (modulePathVal.endsWith(`${path__default.sep}lib`)) {
|
|
56
|
+
inferredLibDir = 'lib';
|
|
57
|
+
trimmedModulePath = path__default.dirname(modulePathVal);
|
|
58
|
+
}
|
|
75
59
|
try {
|
|
76
|
-
// Read package.json from the package
|
|
77
|
-
const pkgJsonFilePath = path__default.join(repoRoot,
|
|
78
|
-
if (!fs__default.existsSync(pkgJsonFilePath))
|
|
60
|
+
// Read package.json from the package root.
|
|
61
|
+
const pkgJsonFilePath = path__default.join(repoRoot, trimmedModulePath, 'package.json');
|
|
62
|
+
if (!fs__default.existsSync(pkgJsonFilePath))
|
|
79
63
|
continue;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const destFileName = getDestinationFileName(file);
|
|
101
|
-
const destination = path__default.join(directoryPath, destFileName);
|
|
102
|
-
commandRunner(`cp -r ${sourceFile} ${destination}`);
|
|
103
|
-
// For enums, accumulate the destination file for aggregation.
|
|
104
|
-
if (folderType === 'enums') {
|
|
105
|
-
if (!enumAggregation[destFileName]) {
|
|
106
|
-
enumAggregation[destFileName] = [];
|
|
107
|
-
}
|
|
108
|
-
enumAggregation[destFileName].push(destination);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
// Generate index.ts in the destination folder that re-exports each file.
|
|
112
|
-
const exportsContent = resourceList
|
|
113
|
-
.map((file) => `export * from './${getExportName(file)}';`)
|
|
114
|
-
.join('\n');
|
|
115
|
-
commandRunner(`echo "${exportsContent.replace(/"/g, '\\"')}" > ${path__default.join(directoryPath, 'index.ts')}`);
|
|
116
|
-
// Create (or overwrite) an index.ts in the parent folder of the destination;
|
|
117
|
-
// this index re-exports the package folder so that later an aggregator can import all packages.
|
|
118
|
-
commandRunner(`echo "export * from './${pkgName}';" > ${path__default.join(directoryPath, '../', 'index.ts')}`);
|
|
119
|
-
shouldAddExportFlag[folderType] = true;
|
|
64
|
+
const pkgJson = JSON.parse(fs__default.readFileSync(pkgJsonFilePath, 'utf-8'));
|
|
65
|
+
if (!pkgJson.cdecode?.common)
|
|
66
|
+
continue;
|
|
67
|
+
// For a scoped package like "@org/user-auth0-core", use the part after the slash.
|
|
68
|
+
const pkgNameFull = pkgJson.name || '';
|
|
69
|
+
const pkgName = pkgNameFull.split('/')[1] || pkgNameFull;
|
|
70
|
+
// Source base: package root (for resolving declared resource paths).
|
|
71
|
+
const sourceBase = path__default.join(repoRoot, trimmedModulePath);
|
|
72
|
+
for (const folderType of ['modules', 'services', 'repository', 'enums']) {
|
|
73
|
+
const resourceList = pkgJson.cdecode.common[folderType] || [];
|
|
74
|
+
if (resourceList.length === 0)
|
|
75
|
+
continue;
|
|
76
|
+
// Mark folder as processed.
|
|
77
|
+
processedFolders[folderType] = true;
|
|
78
|
+
// Determine destination folder.
|
|
79
|
+
// For non-enums, files are copied into common/src/<folderType>
|
|
80
|
+
// For enums, files are aggregated into common/src/enums.
|
|
81
|
+
let destFolder;
|
|
82
|
+
if (folderType === 'enums') {
|
|
83
|
+
destFolder = path__default.join(commonPackagePath, 'src', 'enums');
|
|
120
84
|
}
|
|
85
|
+
else {
|
|
86
|
+
destFolder = path__default.join(commonPackagePath, 'src', folderType);
|
|
87
|
+
}
|
|
88
|
+
commandRunner(`mkdir -p ${destFolder}`);
|
|
89
|
+
resourceList.forEach((file) => {
|
|
90
|
+
// Flatten the resource file name (ignore any intermediate directories)
|
|
91
|
+
// and remove the ".ts.template" suffix.
|
|
92
|
+
const destFileName = path__default.basename(file).replace(/\.ts\.template$/, '.ts');
|
|
93
|
+
// When processing each resource (using the value from package.json, e.g. "./${libDir}/templates/...")
|
|
94
|
+
const resolvedTemplatePath = file.replace('${libDir}', inferredLibDir);
|
|
95
|
+
const sourceFile = path__default.join(sourceBase, resolvedTemplatePath);
|
|
96
|
+
if (folderType === 'enums') {
|
|
97
|
+
// For enums, collect each file (with package name) for later aggregation.
|
|
98
|
+
if (!aggregatedEnums[destFileName]) {
|
|
99
|
+
aggregatedEnums[destFileName] = { contributions: [] };
|
|
100
|
+
}
|
|
101
|
+
aggregatedEnums[destFileName].contributions.push({ pkgName, sourceFile });
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// For non-enums, copy the file and then prepend a comment indicating its origin.
|
|
105
|
+
const destFile = path__default.join(destFolder, destFileName);
|
|
106
|
+
commandRunner(`cp -r ${sourceFile} ${destFile}`);
|
|
107
|
+
// Prepend a comment to indicate the package origin.
|
|
108
|
+
commandRunner(`(echo "// from package: ${pkgName}" && cat ${destFile}) > ${destFile}.tmp && mv ${destFile}.tmp ${destFile}`);
|
|
109
|
+
// Append an export statement to the folder's index.
|
|
110
|
+
commandRunner(`echo "export * from './${destFileName.replace('.ts', '')}';" >> ${path__default.join(destFolder, 'index.ts')}`);
|
|
111
|
+
// Replace any import from "common" with the relative path to generated models.
|
|
112
|
+
// Use BSD‑compatible sed syntax.
|
|
113
|
+
commandRunner(`sed -i '' "s/from ['\\"]common['\\"]/from '..\\/generated\\/generated-models'/g" ${destFile}`);
|
|
114
|
+
// If this is a service file, auto generate the augmentation boilerplate.
|
|
115
|
+
if (folderType === 'services') {
|
|
116
|
+
const serviceBaseName = destFileName.replace('.ts', '');
|
|
117
|
+
const propertyName = serviceBaseName.charAt(0).toLowerCase() + serviceBaseName.slice(1);
|
|
118
|
+
const augmentationContent = `/**
|
|
119
|
+
* This file augments the ServerContext interface from the central apollo-context.
|
|
120
|
+
* Through declaration merging, the ${propertyName} will be added to the ServerContext.
|
|
121
|
+
*/
|
|
122
|
+
declare module '../apollo-context' {
|
|
123
|
+
export interface ServerContext {
|
|
124
|
+
${propertyName}: I${serviceBaseName};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
`;
|
|
128
|
+
const augmentationFilePath = path__default.join(destFolder, `${serviceBaseName}.augment.d.ts`);
|
|
129
|
+
fs__default.writeFileSync(augmentationFilePath, augmentationContent, 'utf8');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
121
133
|
}
|
|
122
134
|
}
|
|
123
|
-
catch (
|
|
124
|
-
console.error(`Error processing module: ${
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error(`Error processing module: ${modulePathVal}`, err);
|
|
125
137
|
}
|
|
126
138
|
}
|
|
127
139
|
}
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
// ----- Enum Aggregation Step -----
|
|
141
|
+
// Ensure the enums destination folder is created if it was processed.
|
|
142
|
+
const enumDestFolder = path__default.join(commonPackagePath, 'src', 'enums');
|
|
143
|
+
if (processedFolders['enums']) {
|
|
144
|
+
commandRunner(`mkdir -p ${enumDestFolder}`);
|
|
145
|
+
if (Object.keys(aggregatedEnums).length > 0) {
|
|
146
|
+
for (const destFileName in aggregatedEnums) {
|
|
147
|
+
const aggregatedFile = path__default.join(enumDestFolder, destFileName);
|
|
148
|
+
const contributions = aggregatedEnums[destFileName].contributions;
|
|
149
|
+
// Read the first contribution's file content to extract the proper enum name.
|
|
150
|
+
const firstContribution = contributions[0];
|
|
151
|
+
const fileContent = fs__default.readFileSync(firstContribution.sourceFile, 'utf8');
|
|
152
|
+
const match = fileContent.match(/export\s+enum\s+(\w+)/);
|
|
153
|
+
const enumName = match ? match[1] : destFileName.replace('.ts', '');
|
|
154
|
+
// Start the aggregated file with the correct enum declaration.
|
|
155
|
+
commandRunner(`echo "export enum ${enumName} {" > ${aggregatedFile}`);
|
|
156
|
+
for (const contribution of contributions) {
|
|
157
|
+
commandRunner(`echo " // from package: ${contribution.pkgName}" >> ${aggregatedFile}`);
|
|
158
|
+
// Extract only the enum inner content (between "{" and "}") using two sed commands.
|
|
159
|
+
commandRunner(`sed -n '/{/,/}/p' ${contribution.sourceFile} | sed '1d;$d' >> ${aggregatedFile}`);
|
|
160
|
+
}
|
|
161
|
+
// Close the enum declaration.
|
|
162
|
+
commandRunner(`echo "}" >> ${aggregatedFile}`);
|
|
163
|
+
// Append an export statement to the enums index.
|
|
164
|
+
commandRunner(`echo "export * from './${enumName}';" >> ${path__default.join(enumDestFolder, 'index.ts')}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// No enums were aggregated, but still create an empty index file.
|
|
169
|
+
fs__default.writeFileSync(path__default.join(enumDestFolder, 'index.ts'), '', 'utf8');
|
|
133
170
|
}
|
|
134
171
|
}
|
|
135
|
-
// -----
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const baseName = path__default.basename(destFileName, '.ts'); // e.g., "ErrorMessage"
|
|
143
|
-
const aggregatedFile = path__default.join(enumsTargetDir, destFileName);
|
|
144
|
-
// Begin the aggregated file with the enum header.
|
|
145
|
-
commandRunner(`echo "export enum ${baseName} {" > ${aggregatedFile}`);
|
|
146
|
-
// Append the contents (enum members) from each package's file.
|
|
147
|
-
enumAggregation[destFileName].forEach((filePath) => {
|
|
148
|
-
commandRunner(`cat ${filePath} >> ${aggregatedFile}`);
|
|
149
|
-
});
|
|
150
|
-
// Close the enum definition.
|
|
151
|
-
commandRunner(`echo "}" >> ${aggregatedFile}`);
|
|
172
|
+
// ----- Global Index Update -----
|
|
173
|
+
// Append export statements for each folder type that was processed.
|
|
174
|
+
const globalIndexFile = path__default.join(commonPackagePath, 'src', 'index.ts');
|
|
175
|
+
const folderTypes = ['modules', 'services', 'repository', 'enums'];
|
|
176
|
+
for (const folderKey of folderTypes) {
|
|
177
|
+
if (processedFolders[folderKey]) {
|
|
178
|
+
commandRunner(`echo "export * from './${folderKey}';" >> ${globalIndexFile}`);
|
|
152
179
|
}
|
|
153
180
|
}
|
|
154
181
|
}export{performCopyOperations};//# sourceMappingURL=performCopyOperations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performCopyOperations.js","sources":["../../../src/tools/codegen/performCopyOperations.ts"],"sourcesContent":[null],"names":["path","fs"],"mappings":"4IAAA;AACA;AACA;AACA;AAWA
|
|
1
|
+
{"version":3,"file":"performCopyOperations.js","sources":["../../../src/tools/codegen/performCopyOperations.ts"],"sourcesContent":[null],"names":["path","fs"],"mappings":"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"}
|
|
@@ -42,7 +42,14 @@ export interface IHttpMiddlewareContext {
|
|
|
42
42
|
};
|
|
43
43
|
res: express.Response;
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
|
|
46
|
+
export type IGraphQLContext = {
|
|
47
|
+
/**
|
|
48
|
+
* current ip of the user fetched from the request
|
|
49
|
+
*/
|
|
50
|
+
userIp: string;
|
|
51
|
+
};
|
|
52
|
+
export interface ServerContext extends IHttpMiddlewareContext, IGraphQLContext {
|
|
46
53
|
accessRoleService: any;
|
|
47
54
|
user?: IIAuth0Token;
|
|
48
55
|
userContext?: IUserContext;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "../../tsconfig.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
-
"target": "es2017",
|
|
5
|
-
"lib": ["es2017"],
|
|
6
4
|
"resolveJsonModule": true,
|
|
7
5
|
"allowSyntheticDefaultImports": true,
|
|
8
6
|
"experimentalDecorators": true,
|
|
@@ -14,5 +12,5 @@
|
|
|
14
12
|
"skipLibCheck": true
|
|
15
13
|
},
|
|
16
14
|
"include": ["src"],
|
|
17
|
-
"exclude": ["../../../node_modules", "node_modules", "lib", "
|
|
15
|
+
"exclude": ["../../../node_modules", "node_modules", "lib", "rollup.config.mjs"]
|
|
18
16
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@common-stack/rollup-vite-utils",
|
|
3
|
-
"version": "6.0.8-alpha.
|
|
3
|
+
"version": "6.0.8-alpha.55",
|
|
4
4
|
"description": "Client Module for react app",
|
|
5
5
|
"homepage": "https://github.com/cdmbase/fullstack-pro#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"publishConfig": {
|
|
58
58
|
"access": "public"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "d6163f7cb4ec0abb8159d4fac97305af6557a765",
|
|
61
61
|
"typescript": {
|
|
62
62
|
"definition": "lib/index.d.ts"
|
|
63
63
|
}
|