workspace-manager-cli 1.0.0 → 1.2.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 +29 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +134 -30
- package/dist/build.js.map +1 -1
- package/dist/config.d.ts +48 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +45 -3
- package/dist/config.js.map +1 -1
- package/dist/copy.d.ts.map +1 -1
- package/dist/copy.js +3 -0
- package/dist/copy.js.map +1 -1
- package/dist/git.d.ts +5 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +53 -8
- package/dist/git.js.map +1 -1
- package/dist/index-core.js +654 -0
- package/dist/index.js +41 -8
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +21 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +50 -0
- package/dist/logger.js.map +1 -1
- package/dist/status.d.ts +2 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +71 -13
- package/dist/status.js.map +1 -1
- package/dist/webpack-transform.d.ts +8 -0
- package/dist/webpack-transform.d.ts.map +1 -0
- package/dist/webpack-transform.js +147 -0
- package/dist/webpack-transform.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Transform webpack.config.js to support symlinked core/custom directories
|
|
5
|
+
* by injecting resolve.modules, resolve.symlinks, and babel-loader includes
|
|
6
|
+
*/
|
|
7
|
+
export async function transformWebpackConfig(config, logger, dryRun = false) {
|
|
8
|
+
const workspaceConfigDir = path.join(config.workspacePath, "config");
|
|
9
|
+
const webpackConfigPath = path.join(workspaceConfigDir, "webpack.config.js");
|
|
10
|
+
const webpackProdConfigPath = path.join(workspaceConfigDir, "webpack.config.prod.js");
|
|
11
|
+
let transformed = false;
|
|
12
|
+
// Transform development config
|
|
13
|
+
if (await fs.pathExists(webpackConfigPath)) {
|
|
14
|
+
if (dryRun) {
|
|
15
|
+
logger.debug(`[dry-run] Transform: ${webpackConfigPath}`);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const success = await transformWebpackConfigFile(webpackConfigPath, config, logger);
|
|
19
|
+
if (success) {
|
|
20
|
+
logger.info(`Transformed webpack config: ${webpackConfigPath}`);
|
|
21
|
+
transformed = true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Transform production config
|
|
26
|
+
if (await fs.pathExists(webpackProdConfigPath)) {
|
|
27
|
+
if (dryRun) {
|
|
28
|
+
logger.debug(`[dry-run] Transform: ${webpackProdConfigPath}`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const success = await transformWebpackConfigFile(webpackProdConfigPath, config, logger);
|
|
32
|
+
if (success) {
|
|
33
|
+
logger.info(`Transformed webpack config: ${webpackProdConfigPath}`);
|
|
34
|
+
transformed = true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return transformed;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Transform a single webpack config file
|
|
42
|
+
*/
|
|
43
|
+
async function transformWebpackConfigFile(configPath, config, logger) {
|
|
44
|
+
try {
|
|
45
|
+
let content = await fs.readFile(configPath, "utf-8");
|
|
46
|
+
// Check if already transformed (avoid double transformation)
|
|
47
|
+
if (content.includes("// WMC: Symlink resolution support")) {
|
|
48
|
+
logger.debug(`Webpack config already transformed: ${configPath}`);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// Apply transformations
|
|
52
|
+
content = injectResolveModules(content, config);
|
|
53
|
+
content = injectBabelLoaderIncludes(content, config);
|
|
54
|
+
// Write transformed config
|
|
55
|
+
await fs.writeFile(configPath, content, "utf-8");
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger.warn(`Failed to transform webpack config ${configPath}: ${error.message}`);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Inject resolve.modules and resolve.symlinks into webpack config
|
|
65
|
+
*/
|
|
66
|
+
function injectResolveModules(content, config) {
|
|
67
|
+
// Find the resolve block
|
|
68
|
+
const resolveRegex = /resolve:\s*{/;
|
|
69
|
+
const match = content.match(resolveRegex);
|
|
70
|
+
if (!match || match.index === undefined) {
|
|
71
|
+
// No resolve block found, skip transformation
|
|
72
|
+
return content;
|
|
73
|
+
}
|
|
74
|
+
// Build the injection string
|
|
75
|
+
const resolveAdditions = `
|
|
76
|
+
// WMC: Symlink resolution support
|
|
77
|
+
symlinks: false,
|
|
78
|
+
modules: [
|
|
79
|
+
'node_modules',
|
|
80
|
+
path.resolve(__dirname, '../src'),
|
|
81
|
+
path.resolve(__dirname, '../src/core'),
|
|
82
|
+
path.resolve(__dirname, '../src/core/custom'),
|
|
83
|
+
],`;
|
|
84
|
+
// Insert after 'resolve: {'
|
|
85
|
+
const insertPosition = match.index + match[0].length;
|
|
86
|
+
const before = content.substring(0, insertPosition);
|
|
87
|
+
const after = content.substring(insertPosition);
|
|
88
|
+
return before + resolveAdditions + after;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Inject include paths and presets into babel-loader configuration
|
|
92
|
+
*/
|
|
93
|
+
function injectBabelLoaderIncludes(content, config) {
|
|
94
|
+
// Find babel-loader configuration
|
|
95
|
+
const babelLoaderRegex = /{\s*test:\s*\/\\\.\[jt\]sx\?\$\/[\s\S]*?loader:\s*['"]babel-loader['"]\s*,\s*options:\s*{/;
|
|
96
|
+
const match = content.match(babelLoaderRegex);
|
|
97
|
+
if (!match || match.index === undefined) {
|
|
98
|
+
// No babel-loader found, skip transformation
|
|
99
|
+
return content;
|
|
100
|
+
}
|
|
101
|
+
// First, add include array before the use block
|
|
102
|
+
let modifiedContent = content;
|
|
103
|
+
// Find the opening of the rule block containing babel-loader
|
|
104
|
+
const ruleStart = content.lastIndexOf("{", match.index);
|
|
105
|
+
const testMatch = content
|
|
106
|
+
.substring(ruleStart, match.index)
|
|
107
|
+
.match(/{\s*test:/);
|
|
108
|
+
if (testMatch) {
|
|
109
|
+
const excludeMatch = content
|
|
110
|
+
.substring(ruleStart, match.index + match[0].length)
|
|
111
|
+
.match(/exclude:\s*\/node_modules\/\s*,/);
|
|
112
|
+
if (excludeMatch) {
|
|
113
|
+
const excludePosition = ruleStart + content.substring(ruleStart).indexOf(excludeMatch[0]);
|
|
114
|
+
const includeAddition = `
|
|
115
|
+
include: [
|
|
116
|
+
path.resolve(__dirname, '../src'),
|
|
117
|
+
path.resolve(__dirname, '../src/core'),
|
|
118
|
+
path.resolve(__dirname, '../src/core/custom'),
|
|
119
|
+
],`;
|
|
120
|
+
const before = modifiedContent.substring(0, excludePosition + excludeMatch[0].length);
|
|
121
|
+
const after = modifiedContent.substring(excludePosition + excludeMatch[0].length);
|
|
122
|
+
modifiedContent = before + includeAddition + after;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Now add presets to babel-loader options
|
|
126
|
+
const optionsMatch = modifiedContent.match(babelLoaderRegex);
|
|
127
|
+
if (optionsMatch && optionsMatch.index !== undefined) {
|
|
128
|
+
const optionsStart = optionsMatch.index + optionsMatch[0].length;
|
|
129
|
+
// Check if presets already exist
|
|
130
|
+
const hasPresets = modifiedContent
|
|
131
|
+
.substring(optionsStart, optionsStart + 500)
|
|
132
|
+
.includes("presets:");
|
|
133
|
+
if (!hasPresets) {
|
|
134
|
+
const presetsAddition = `
|
|
135
|
+
presets: [
|
|
136
|
+
'@babel/preset-env',
|
|
137
|
+
'@babel/preset-react',
|
|
138
|
+
'@babel/preset-typescript',
|
|
139
|
+
],`;
|
|
140
|
+
const before = modifiedContent.substring(0, optionsStart);
|
|
141
|
+
const after = modifiedContent.substring(optionsStart);
|
|
142
|
+
modifiedContent = before + presetsAddition + after;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return modifiedContent;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=webpack-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-transform.js","sourceRoot":"","sources":["../src/webpack-transform.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workspace-manager-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Cross-platform CLI to assemble project workspaces from shared core boilerplate plus custom folders",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"dev": "tsc --watch",
|
|
14
14
|
"start": "node dist/index.js",
|
|
15
15
|
"test": "npm run build && node test/test-excludes.js && node test/test-excludes-patterns.js && node test/test-default-excludes.js && node test/test-excludes-format.js && node test/test-build-dryrun.js && node test/test-action-ordering.js && node test/test-core-src-fallback.js && node test/test-core-override.js && node test/test-config-hashes.js",
|
|
16
|
-
"
|
|
16
|
+
"debug": "npm run build && cd test-bundler && node ../dist/index.js init",
|
|
17
|
+
"prepublishOnly": "npm run build",
|
|
18
|
+
"publish": "npm publish --access public"
|
|
17
19
|
},
|
|
18
20
|
"keywords": [
|
|
19
21
|
"cli",
|
|
@@ -30,6 +32,7 @@
|
|
|
30
32
|
"commander": "^12.1.0",
|
|
31
33
|
"fs-extra": "^11.2.0",
|
|
32
34
|
"globby": "^14.0.2",
|
|
35
|
+
"ora": "^9.1.0",
|
|
33
36
|
"simple-git": "^3.27.0",
|
|
34
37
|
"zod": "^3.23.8"
|
|
35
38
|
},
|