@tarojs/plugin-generator 4.1.3-beta.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 (36) hide show
  1. package/LICENSE +174 -0
  2. package/README.md +38 -0
  3. package/dist/generators/es5/babel.d.ts +31 -0
  4. package/dist/generators/es5/babel.js +260 -0
  5. package/dist/generators/es5/babel.js.map +1 -0
  6. package/dist/generators/es5/config.d.ts +8 -0
  7. package/dist/generators/es5/config.js +182 -0
  8. package/dist/generators/es5/config.js.map +1 -0
  9. package/dist/generators/es5/index.d.ts +2 -0
  10. package/dist/generators/es5/index.js +34 -0
  11. package/dist/generators/es5/index.js.map +1 -0
  12. package/dist/generators/tailwindcss/config.d.ts +8 -0
  13. package/dist/generators/tailwindcss/config.js +357 -0
  14. package/dist/generators/tailwindcss/config.js.map +1 -0
  15. package/dist/generators/tailwindcss/deps.d.ts +5 -0
  16. package/dist/generators/tailwindcss/deps.js +26 -0
  17. package/dist/generators/tailwindcss/deps.js.map +1 -0
  18. package/dist/generators/tailwindcss/emit.d.ts +3 -0
  19. package/dist/generators/tailwindcss/emit.js +169 -0
  20. package/dist/generators/tailwindcss/emit.js.map +1 -0
  21. package/dist/generators/tailwindcss/index.d.ts +2 -0
  22. package/dist/generators/tailwindcss/index.js +54 -0
  23. package/dist/generators/tailwindcss/index.js.map +1 -0
  24. package/dist/index.d.ts +6 -0
  25. package/dist/index.js +67 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/utils/ast.d.ts +8 -0
  28. package/dist/utils/ast.js +56 -0
  29. package/dist/utils/ast.js.map +1 -0
  30. package/dist/utils/error.d.ts +20 -0
  31. package/dist/utils/error.js +61 -0
  32. package/dist/utils/error.js.map +1 -0
  33. package/dist/utils/index.d.ts +12 -0
  34. package/dist/utils/index.js +122 -0
  35. package/dist/utils/index.js.map +1 -0
  36. package/package.json +50 -0
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.updateDeps = void 0;
5
+ const utils_1 = require("../../utils");
6
+ const getDeps = (version) => {
7
+ const deps = {
8
+ devDependencies: {
9
+ tailwindcss: version === '4x' ? '^4.1.7' : '3.4.17',
10
+ 'weapp-tailwindcss': '^4.1.7',
11
+ '@tailwindcss/postcss': '^4.1.7',
12
+ },
13
+ };
14
+ return deps;
15
+ };
16
+ async function updateDeps(options) {
17
+ const { ctx, tailwindcssVersion } = options;
18
+ const patch = { ...getDeps(tailwindcssVersion) };
19
+ if (tailwindcssVersion === '4x') {
20
+ // 这是为了给 tailwindcss@4 打上支持 rpx 单位的补丁,否则它会把 rpx 认为是一种颜色
21
+ patch.scripts = { postinstall: 'weapp-tw patch' };
22
+ }
23
+ return (0, utils_1.updatePkgJson)(ctx, patch);
24
+ }
25
+ exports.updateDeps = updateDeps;
26
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/generators/tailwindcss/deps.ts"],"names":[],"mappings":";AAAA,+BAA+B;;;AAE/B,uCAA2C;AAI3C,MAAM,OAAO,GAAG,CAAC,OAA2B,EAAQ,EAAE;IACpD,MAAM,IAAI,GAAS;QACjB,eAAe,EAAE;YACf,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACnD,mBAAmB,EAAE,QAAQ;YAC7B,sBAAsB,EAAE,QAAQ;SACjC;KACF,CAAA;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAEM,KAAK,UAAU,UAAU,CAAC,OAAwE;IACvG,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAA;IAC3C,MAAM,KAAK,GAAgB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAA;IAC7D,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,uDAAuD;QACvD,KAAK,CAAC,OAAO,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAA;IACnD,CAAC;IACD,OAAO,IAAA,qBAAa,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAClC,CAAC;AARD,gCAQC"}
@@ -0,0 +1,3 @@
1
+ import type { IPluginContext } from '@tarojs/service';
2
+ export declare function emit(ctx: IPluginContext): Promise<[void, void, void]>;
3
+ export declare function injectTailwindCSSToEntry(ctx: IPluginContext): Promise<void>;
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.injectTailwindCSSToEntry = exports.emit = void 0;
30
+ /* eslint-disable no-console */
31
+ const node_path_1 = __importDefault(require("node:path"));
32
+ const generator_1 = __importDefault(require("@babel/generator"));
33
+ const parser = __importStar(require("@babel/parser"));
34
+ const traverse_1 = __importDefault(require("@babel/traverse"));
35
+ const t = __importStar(require("@babel/types"));
36
+ const dedent_1 = __importDefault(require("dedent"));
37
+ const error_1 = require("../../utils/error");
38
+ async function emit(ctx) {
39
+ return Promise.all([emitCSS(ctx), injectTailwindCSSToEntry(ctx), emitPostcssConfig(ctx)]);
40
+ }
41
+ exports.emit = emit;
42
+ async function emitPostcssConfig(ctx) {
43
+ const { fs } = ctx.helper;
44
+ const { sourcePath } = ctx.paths;
45
+ const configFiles = ['postcss.config.js', 'postcss.config.mjs'];
46
+ let configPath = null;
47
+ for (const file of configFiles) {
48
+ const fullPath = node_path_1.default.join(sourcePath, file);
49
+ if (await fs.pathExists(fullPath)) {
50
+ configPath = fullPath;
51
+ break;
52
+ }
53
+ }
54
+ const code = (0, dedent_1.default)(`
55
+ export default {
56
+ plugins: {
57
+ "@tailwindcss/postcss": {},
58
+ }
59
+ }
60
+ `);
61
+ try {
62
+ if (!configPath) {
63
+ await fs.writeFile(node_path_1.default.join(sourcePath, 'postcss.config.mjs'), code, { encoding: 'utf-8' });
64
+ return;
65
+ }
66
+ const rawCode = await fs.readFile(configPath, 'utf-8');
67
+ if (rawCode.trim().length === 0) {
68
+ await fs.writeFile(configPath, code, { encoding: 'utf-8' });
69
+ return;
70
+ }
71
+ const ast = parser.parse(rawCode, {
72
+ sourceType: 'module',
73
+ plugins: ['typescript'],
74
+ });
75
+ let modified = false;
76
+ (0, traverse_1.default)(ast, {
77
+ ObjectExpression(path) {
78
+ const node = path.node;
79
+ // 找到 plugins 节点
80
+ const pluginsProp = node.properties.find((prop) => t.isObjectProperty(prop) &&
81
+ t.isIdentifier(prop.key, { name: 'plugins' }) &&
82
+ t.isObjectExpression(prop.value));
83
+ if (pluginsProp) {
84
+ const pluginsNode = pluginsProp.value;
85
+ const hasTailwind = pluginsNode.properties.some((prop) => {
86
+ return (t.isObjectProperty(prop) &&
87
+ ((t.isStringLiteral(prop.key) && prop.key.value === '@tailwindcss/postcss') ||
88
+ (t.isIdentifier(prop.key) && prop.key.name === '@tailwindcss/postcss')));
89
+ });
90
+ if (!hasTailwind) {
91
+ pluginsNode.properties.push(t.objectProperty(t.stringLiteral('@tailwindcss/postcss'), t.objectExpression([])));
92
+ modified = true;
93
+ }
94
+ }
95
+ },
96
+ });
97
+ if (modified) {
98
+ const { code } = (0, generator_1.default)(ast, { retainLines: true });
99
+ return fs.writeFile(configPath, code);
100
+ }
101
+ }
102
+ catch {
103
+ throw new error_1.GeneratorError({
104
+ type: error_1.GeneratorErrorType.emitFile,
105
+ targetFile: configPath ?? 'postcss.config.mjs',
106
+ message: code,
107
+ });
108
+ }
109
+ }
110
+ async function emitCSS(ctx) {
111
+ const { fs } = ctx.helper;
112
+ const outputPath = node_path_1.default.join(ctx.paths.sourcePath, 'tailwind.css');
113
+ const importStmt = `@import "weapp-tailwindcss";\n`;
114
+ try {
115
+ if (await fs.pathExists(outputPath)) {
116
+ const existingContent = await fs.readFile(outputPath, 'utf-8');
117
+ const alreadyImported = /@import\s+["']weapp-tailwindcss["'];?/.test(existingContent);
118
+ if (alreadyImported) {
119
+ return;
120
+ }
121
+ const newContent = `${importStmt}${existingContent.trim()}`;
122
+ return fs.writeFile(outputPath, newContent, { encoding: 'utf-8' });
123
+ }
124
+ return fs.writeFile(outputPath, importStmt, { encoding: 'utf-8' });
125
+ }
126
+ catch {
127
+ throw new error_1.GeneratorError({
128
+ type: error_1.GeneratorErrorType.emitFile,
129
+ targetFile: outputPath,
130
+ message: `@import "weapp-tailwindcss";`,
131
+ });
132
+ }
133
+ }
134
+ async function injectTailwindCSSToEntry(ctx) {
135
+ const { fs } = ctx.helper;
136
+ const { sourcePath } = ctx.paths;
137
+ const possibleEntryFiles = ['app.ts', 'app.tsx', 'app.js', 'app.jsx'];
138
+ let entryPath;
139
+ // 找到存在的入口文件
140
+ for (const file of possibleEntryFiles) {
141
+ const fullPath = node_path_1.default.join(sourcePath, file);
142
+ if (await fs.pathExists(fullPath)) {
143
+ entryPath = fullPath;
144
+ break;
145
+ }
146
+ }
147
+ if (!entryPath) {
148
+ throw new Error('❌ 找不到入口文件');
149
+ }
150
+ const importStatement = `import './tailwind.css'\n`;
151
+ const content = await fs.readFile(entryPath, 'utf-8');
152
+ // 如果已导入 tailwind.css,跳过处理
153
+ if (/import\s+['"]\.\/tailwind\.css['"]/.test(content)) {
154
+ return;
155
+ }
156
+ const updatedContent = importStatement + content;
157
+ try {
158
+ await fs.writeFile(entryPath, updatedContent, { encoding: 'utf-8' });
159
+ }
160
+ catch {
161
+ throw new error_1.GeneratorError({
162
+ type: error_1.GeneratorErrorType.emitFile,
163
+ targetFile: entryPath,
164
+ message: importStatement,
165
+ });
166
+ }
167
+ }
168
+ exports.injectTailwindCSSToEntry = injectTailwindCSSToEntry;
169
+ //# sourceMappingURL=emit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/generators/tailwindcss/emit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { IPluginContext } from '@tarojs/service';
2
+ export declare function tailwindcssGenerator(ctx: IPluginContext): Promise<void>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.tailwindcssGenerator = void 0;
28
+ const inquirer = __importStar(require("inquirer"));
29
+ const utils_1 = require("../../utils");
30
+ const config_1 = require("./config");
31
+ const deps_1 = require("./deps");
32
+ const emit_1 = require("./emit");
33
+ async function tailwindcssGenerator(ctx) {
34
+ const answer = await inquirer.prompt({
35
+ type: 'list',
36
+ name: 'version',
37
+ message: '请选择 Tailwind CSS 版本',
38
+ choices: [
39
+ { name: '3.x', value: '3x' },
40
+ { name: '4.x', value: '4x' },
41
+ ],
42
+ });
43
+ const tailwindcssVersion = answer.version;
44
+ const compilerType = (0, utils_1.getCompilerType)(ctx.initialConfig.compiler);
45
+ if (!compilerType) {
46
+ throw new Error('未找到编译器类型');
47
+ }
48
+ await (0, config_1.updateConfig)({ ctx, compilerType });
49
+ await (0, emit_1.emit)(ctx);
50
+ await (0, deps_1.updateDeps)({ ctx, tailwindcssVersion });
51
+ console.log('✅ 启用「Tailwind CSS」成功');
52
+ }
53
+ exports.tailwindcssGenerator = tailwindcssGenerator;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/tailwindcss/index.ts"],"names":[],"mappings":";AAAA,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/B,mDAAoC;AAEpC,uCAA6C;AAC7C,qCAAuC;AACvC,iCAAmC;AACnC,iCAA6B;AAItB,KAAK,UAAU,oBAAoB,CAAC,GAAmB;IAC5D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;YAC5B,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;SAC7B;KACF,CAAC,CAAA;IACF,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAA6B,CAAA;IAC/D,MAAM,YAAY,GAAG,IAAA,uBAAe,EAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAChE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IACD,MAAM,IAAA,qBAAY,EAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAA;IACzC,MAAM,IAAA,WAAI,EAAC,GAAG,CAAC,CAAA;IACf,MAAM,IAAA,iBAAU,EAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AACrC,CAAC;AAnBD,oDAmBC"}
@@ -0,0 +1,6 @@
1
+ import type { IPluginContext } from '@tarojs/service';
2
+ /**
3
+ * 命令行扩展
4
+ */
5
+ declare const _default: (ctx: IPluginContext) => void;
6
+ export default _default;
package/dist/index.js ADDED
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const inquirer = __importStar(require("inquirer"));
27
+ const es5_1 = require("./generators/es5");
28
+ const tailwindcss_1 = require("./generators/tailwindcss");
29
+ const error_1 = require("./utils/error");
30
+ /**
31
+ * 命令行扩展
32
+ */
33
+ exports.default = (ctx) => {
34
+ ctx.registerCommand({
35
+ name: 'new',
36
+ // 命令钩子
37
+ async fn() {
38
+ const choices = {
39
+ tailwindcss: 'tailwindcss',
40
+ es5: 'es5',
41
+ };
42
+ const answer = await inquirer.prompt({
43
+ type: 'list',
44
+ name: 'choice',
45
+ message: '启用可选功能',
46
+ choices: [
47
+ { name: '启用「Tailwind CSS」支持', value: choices.tailwindcss },
48
+ { name: '启用「编译为 ES5」', value: choices.es5 },
49
+ ],
50
+ });
51
+ switch (answer.choice) {
52
+ case choices.tailwindcss: {
53
+ await (0, error_1.safely)(() => (0, tailwindcss_1.tailwindcssGenerator)(ctx));
54
+ break;
55
+ }
56
+ case choices.es5: {
57
+ await (0, error_1.safely)(() => (0, es5_1.es5Generator)(ctx));
58
+ break;
59
+ }
60
+ default: {
61
+ break;
62
+ }
63
+ }
64
+ },
65
+ });
66
+ };
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AAEpC,0CAA+C;AAC/C,0DAA+D;AAC/D,yCAAsC;AAItC;;GAEG;AACH,kBAAe,CAAC,GAAmB,EAAE,EAAE;IACrC,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,KAAK;QACX,OAAO;QACP,KAAK,CAAC,EAAE;YACN,MAAM,OAAO,GAAG;gBACd,WAAW,EAAE,aAAa;gBAC1B,GAAG,EAAE,KAAK;aACX,CAAA;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACnC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE;oBAC1D,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE;iBAC5C;aACF,CAAC,CAAA;YAEF,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;oBACzB,MAAM,IAAA,cAAM,EAAC,GAAG,EAAE,CAAC,IAAA,kCAAoB,EAAC,GAAG,CAAC,CAAC,CAAA;oBAC7C,MAAK;gBACP,CAAC;gBACD,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjB,MAAM,IAAA,cAAM,EAAC,GAAG,EAAE,CAAC,IAAA,kBAAY,EAAC,GAAG,CAAC,CAAC,CAAA;oBACrC,MAAK;gBACP,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import * as t from '@babel/types';
2
+ /**
3
+ * 确保对象表达式中存在某个嵌套属性,并且其值为 ObjectExpression
4
+ * @param rootObj 当前 ObjectExpression
5
+ * @param keys 属性路径,如 ["compile"] 或 ["compile", "include"]
6
+ * @returns 最终那个 ObjectExpression 节点(已经创建好的)
7
+ */
8
+ export declare function ensureNestedObjectProperty(rootObj: t.ObjectExpression, keys: string[]): t.ObjectExpression;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ensureNestedObjectProperty = void 0;
27
+ const t = __importStar(require("@babel/types"));
28
+ /**
29
+ * 确保对象表达式中存在某个嵌套属性,并且其值为 ObjectExpression
30
+ * @param rootObj 当前 ObjectExpression
31
+ * @param keys 属性路径,如 ["compile"] 或 ["compile", "include"]
32
+ * @returns 最终那个 ObjectExpression 节点(已经创建好的)
33
+ */
34
+ function ensureNestedObjectProperty(rootObj, keys) {
35
+ let current = rootObj;
36
+ for (let i = 0; i < keys.length; i++) {
37
+ const key = keys[i];
38
+ const prop = current.properties.find((p) => t.isObjectProperty(p) && t.isIdentifier(p.key, { name: key }));
39
+ if (!prop) {
40
+ const newObj = t.objectExpression([]);
41
+ current.properties.push(t.objectProperty(t.identifier(key), newObj));
42
+ current = newObj;
43
+ }
44
+ else if (!t.isObjectExpression(prop.value)) {
45
+ const newObj = t.objectExpression([]);
46
+ prop.value = newObj;
47
+ current = newObj;
48
+ }
49
+ else {
50
+ current = prop.value;
51
+ }
52
+ }
53
+ return current;
54
+ }
55
+ exports.ensureNestedObjectProperty = ensureNestedObjectProperty;
56
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/utils/ast.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAiC;AAEjC;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAC,OAA2B,EAAE,IAAc;IACpF,IAAI,OAAO,GAAG,OAAO,CAAA;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAE5F,CAAA;QAEb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;YACrC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;YACpE,OAAO,GAAG,MAAM,CAAA;QAClB,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;YACrC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;YACnB,OAAO,GAAG,MAAM,CAAA;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAxBD,gEAwBC"}
@@ -0,0 +1,20 @@
1
+ export declare const GeneratorErrorType: {
2
+ readonly modifyConfig: "modifyConfig";
3
+ readonly emitFile: "emitFile";
4
+ };
5
+ type GeneratorErrorType = (typeof GeneratorErrorType)[keyof typeof GeneratorErrorType];
6
+ export declare class GeneratorError extends Error {
7
+ type: GeneratorErrorType;
8
+ targetFile?: string;
9
+ constructor(options: {
10
+ type: GeneratorErrorType;
11
+ message?: string;
12
+ targetFile?: string;
13
+ });
14
+ }
15
+ export declare function isGeneratorError(error: unknown): error is GeneratorError;
16
+ export declare function safely<T>(fn: () => T, options?: {
17
+ fallback?: T;
18
+ onError?: (err: unknown) => void;
19
+ }): Promise<T | undefined>;
20
+ export {};
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.safely = exports.isGeneratorError = exports.GeneratorError = exports.GeneratorErrorType = void 0;
5
+ exports.GeneratorErrorType = {
6
+ modifyConfig: 'modifyConfig',
7
+ emitFile: 'emitFile',
8
+ };
9
+ class GeneratorError extends Error {
10
+ type;
11
+ targetFile;
12
+ constructor(options) {
13
+ const { type, message, targetFile } = options;
14
+ super(message);
15
+ this.type = type;
16
+ this.name = 'GeneratorError';
17
+ this.targetFile = targetFile;
18
+ }
19
+ }
20
+ exports.GeneratorError = GeneratorError;
21
+ function isGeneratorError(error) {
22
+ return error instanceof GeneratorError;
23
+ }
24
+ exports.isGeneratorError = isGeneratorError;
25
+ async function safely(fn, options) {
26
+ try {
27
+ return await fn();
28
+ }
29
+ catch (error) {
30
+ if (typeof options?.onError === 'function') {
31
+ options.onError(error);
32
+ return options.fallback;
33
+ }
34
+ if (isGeneratorError(error)) {
35
+ switch (error.type) {
36
+ case exports.GeneratorErrorType.modifyConfig: {
37
+ console.log('❌ 更新配置文件失败');
38
+ console.log(`请添加如下代码至 ${error.targetFile ?? 'config/index.{ts,js}'} 中\n`);
39
+ break;
40
+ }
41
+ case exports.GeneratorErrorType.emitFile: {
42
+ console.log('❌ 生成文件失败');
43
+ if (error.targetFile) {
44
+ console.log(`请手动添加文件 ${error.targetFile},并添加如下代码至 ${error.targetFile} 中\n`);
45
+ }
46
+ break;
47
+ }
48
+ default: {
49
+ break;
50
+ }
51
+ }
52
+ console.log(error.message);
53
+ }
54
+ else {
55
+ console.log(error);
56
+ }
57
+ return options?.fallback;
58
+ }
59
+ }
60
+ exports.safely = safely;
61
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":";AAAA,+BAA+B;;;AAElB,QAAA,kBAAkB,GAAG;IAChC,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;CACZ,CAAA;AAIV,MAAa,cAAe,SAAQ,KAAK;IACvC,IAAI,CAAoB;IACxB,UAAU,CAAS;IACnB,YAAY,OAA4E;QACtF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAVD,wCAUC;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,cAAc,CAAA;AACxC,CAAC;AAFD,4CAEC;AAEM,KAAK,UAAU,MAAM,CAC1B,EAAW,EACX,OAGC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAA;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACtB,OAAO,OAAO,CAAC,QAAQ,CAAA;QACzB,CAAC;QACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,0BAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;oBACzB,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,UAAU,IAAI,sBAAsB,MAAM,CAAC,CAAA;oBACzE,MAAK;gBACP,CAAC;gBACD,KAAK,0BAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;oBACvB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBACrB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,UAAU,aAAa,KAAK,CAAC,UAAU,MAAM,CAAC,CAAA;oBAC7E,CAAC;oBACD,MAAK;gBACP,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,MAAK;gBACP,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QACD,OAAO,OAAO,EAAE,QAAQ,CAAA;IAC1B,CAAC;AACH,CAAC;AAtCD,wBAsCC"}
@@ -0,0 +1,12 @@
1
+ import type { IPluginContext } from '@tarojs/service';
2
+ export declare function execCommand(params: {
3
+ command: string;
4
+ args: string[];
5
+ cwd: string;
6
+ }): Promise<unknown>;
7
+ export declare function readPkgJson(ctx: IPluginContext): any;
8
+ export declare function mergePkgJson(pkgJson: PackageJson, patch: PackageJson): void;
9
+ export declare function removeIncompatiblePkg(pkgJson: PackageJson, pkgs: string[]): void;
10
+ export declare function installDeps(ctx: IPluginContext): Promise<unknown>;
11
+ export declare function getCompilerType(compilerConfig: IPluginContext['initialConfig']['compiler']): "webpack5" | undefined;
12
+ export declare function updatePkgJson(ctx: IPluginContext, patch: PackageJson): Promise<void>;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.updatePkgJson = exports.getCompilerType = exports.installDeps = exports.removeIncompatiblePkg = exports.mergePkgJson = exports.readPkgJson = exports.execCommand = void 0;
27
+ /* eslint-disable no-console */
28
+ const node_child_process_1 = require("node:child_process");
29
+ const path = __importStar(require("node:path"));
30
+ function execCommand(params) {
31
+ const { command, cwd, args } = params;
32
+ return new Promise((resolve, reject) => {
33
+ const child = (0, node_child_process_1.spawn)(command, args, { cwd, stdio: 'pipe' });
34
+ let stdout = '';
35
+ let stderr = '';
36
+ child.stdout.on('data', (chunk) => {
37
+ process.stdout.write(chunk);
38
+ stdout += chunk.toString();
39
+ });
40
+ child.stderr.on('data', (chunk) => {
41
+ process.stderr.write(chunk);
42
+ stderr += chunk.toString();
43
+ });
44
+ child.on('close', (code) => {
45
+ if (code === 0) {
46
+ resolve(stdout);
47
+ }
48
+ else {
49
+ const err = new Error(`Command failed with exit code ${code}\n${stderr}`);
50
+ reject(err);
51
+ }
52
+ });
53
+ child.on('error', (err) => {
54
+ reject(err);
55
+ });
56
+ });
57
+ }
58
+ exports.execCommand = execCommand;
59
+ function readPkgJson(ctx) {
60
+ const { appPath } = ctx.paths;
61
+ const pkgPath = path.join(appPath, 'package.json');
62
+ const pkgJson = require(pkgPath);
63
+ return pkgJson;
64
+ }
65
+ exports.readPkgJson = readPkgJson;
66
+ function mergePkgJson(pkgJson, patch) {
67
+ for (const propName in patch) {
68
+ const origin = pkgJson[propName];
69
+ pkgJson[propName] = Object.assign(origin ?? {}, patch[propName]);
70
+ }
71
+ }
72
+ exports.mergePkgJson = mergePkgJson;
73
+ function removeIncompatiblePkg(pkgJson, pkgs) {
74
+ for (const pkg of pkgs) {
75
+ if (pkgJson.dependencies && pkg in pkgJson.dependencies) {
76
+ Reflect.deleteProperty(pkgJson.dependencies, pkg);
77
+ }
78
+ if (pkgJson.devDependencies && pkg in pkgJson.devDependencies) {
79
+ Reflect.deleteProperty(pkgJson.devDependencies, pkg);
80
+ }
81
+ if (pkgJson.peerDependencies && pkg in pkgJson.peerDependencies) {
82
+ Reflect.deleteProperty(pkgJson.peerDependencies, pkg);
83
+ }
84
+ }
85
+ }
86
+ exports.removeIncompatiblePkg = removeIncompatiblePkg;
87
+ async function installDeps(ctx) {
88
+ const { appPath } = ctx.paths;
89
+ const { fs } = ctx.helper;
90
+ const pnpmLockPath = `${appPath}/pnpm-lock.yaml`;
91
+ const yarnLockPath = `${appPath}/yarn.lock`;
92
+ let npm = 'npm';
93
+ if (await fs.pathExists(pnpmLockPath)) {
94
+ npm = 'pnpm';
95
+ }
96
+ else if (await fs.pathExists(yarnLockPath)) {
97
+ npm = 'yarn';
98
+ }
99
+ return execCommand({ command: npm, args: ['install'], cwd: appPath });
100
+ }
101
+ exports.installDeps = installDeps;
102
+ function getCompilerType(compilerConfig) {
103
+ return typeof compilerConfig === 'string' ? compilerConfig : compilerConfig?.type;
104
+ }
105
+ exports.getCompilerType = getCompilerType;
106
+ async function updatePkgJson(ctx, patch) {
107
+ const pkgJson = readPkgJson(ctx);
108
+ mergePkgJson(pkgJson, patch);
109
+ await ctx.helper.fs.outputJson(path.join(ctx.paths.appPath, 'package.json'), pkgJson, {
110
+ encoding: 'utf-8',
111
+ spaces: 2,
112
+ });
113
+ try {
114
+ await installDeps(ctx);
115
+ console.log(ctx.helper.chalk.green('\n✅ 安装依赖完成'));
116
+ }
117
+ catch {
118
+ console.log(ctx.helper.chalk.red('\n❌ 安装依赖失败,请手动安装'));
119
+ }
120
+ }
121
+ exports.updatePkgJson = updatePkgJson;
122
+ //# sourceMappingURL=index.js.map