@cocojs/cli 0.0.1-alpha202511021451

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.
@@ -0,0 +1,510 @@
1
+ 'use strict';
2
+
3
+ var process$1 = require('node:process');
4
+ var Webpack = require('webpack');
5
+ var WebpackDevServer = require('webpack-dev-server');
6
+ var HtmlWebpackPlugin = require('html-webpack-plugin');
7
+ var TerserPlugin = require('terser-webpack-plugin');
8
+ var path = require('node:path');
9
+ var fs = require('node:fs');
10
+ var webpackMerge = require('webpack-merge');
11
+
12
+ function _classCallCheck(a, n) {
13
+ if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
14
+ }
15
+ function _defineProperties(e, r) {
16
+ for (var t = 0; t < r.length; t++) {
17
+ var o = r[t];
18
+ o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
19
+ }
20
+ }
21
+ function _createClass(e, r, t) {
22
+ return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
23
+ writable: false
24
+ }), e;
25
+ }
26
+ function _regenerator() {
27
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
28
+ var e,
29
+ t,
30
+ r = "function" == typeof Symbol ? Symbol : {},
31
+ n = r.iterator || "@@iterator",
32
+ o = r.toStringTag || "@@toStringTag";
33
+ function i(r, n, o, i) {
34
+ var c = n && n.prototype instanceof Generator ? n : Generator,
35
+ u = Object.create(c.prototype);
36
+ return _regeneratorDefine(u, "_invoke", function (r, n, o) {
37
+ var i,
38
+ c,
39
+ u,
40
+ f = 0,
41
+ p = o || [],
42
+ y = false,
43
+ G = {
44
+ p: 0,
45
+ n: 0,
46
+ v: e,
47
+ a: d,
48
+ f: d.bind(e, 4),
49
+ d: function (t, r) {
50
+ return i = t, c = 0, u = e, G.n = r, a;
51
+ }
52
+ };
53
+ function d(r, n) {
54
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
55
+ var o,
56
+ i = p[t],
57
+ d = G.p,
58
+ l = i[2];
59
+ r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
60
+ }
61
+ if (o || r > 1) return a;
62
+ throw y = true, n;
63
+ }
64
+ return function (o, p, l) {
65
+ if (f > 1) throw TypeError("Generator is already running");
66
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
67
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
68
+ try {
69
+ if (f = 2, i) {
70
+ if (c || (o = "next"), t = i[o]) {
71
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
72
+ if (!t.done) return t;
73
+ u = t.value, c < 2 && (c = 0);
74
+ } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
75
+ i = e;
76
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
77
+ } catch (t) {
78
+ i = e, c = 1, u = t;
79
+ } finally {
80
+ f = 1;
81
+ }
82
+ }
83
+ return {
84
+ value: t,
85
+ done: y
86
+ };
87
+ };
88
+ }(r, o, i), true), u;
89
+ }
90
+ var a = {};
91
+ function Generator() {}
92
+ function GeneratorFunction() {}
93
+ function GeneratorFunctionPrototype() {}
94
+ t = Object.getPrototypeOf;
95
+ var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {
96
+ return this;
97
+ }), t),
98
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
99
+ function f(e) {
100
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
101
+ }
102
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine(u), _regeneratorDefine(u, o, "Generator"), _regeneratorDefine(u, n, function () {
103
+ return this;
104
+ }), _regeneratorDefine(u, "toString", function () {
105
+ return "[object Generator]";
106
+ }), (_regenerator = function () {
107
+ return {
108
+ w: i,
109
+ m: f
110
+ };
111
+ })();
112
+ }
113
+ function _regeneratorDefine(e, r, n, t) {
114
+ var i = Object.defineProperty;
115
+ try {
116
+ i({}, "", {});
117
+ } catch (e) {
118
+ i = 0;
119
+ }
120
+ _regeneratorDefine = function (e, r, n, t) {
121
+ function o(r, n) {
122
+ _regeneratorDefine(e, r, function (e) {
123
+ return this._invoke(r, n, e);
124
+ });
125
+ }
126
+ r ? i ? i(e, r, {
127
+ value: n,
128
+ enumerable: !t,
129
+ configurable: !t,
130
+ writable: !t
131
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
132
+ }, _regeneratorDefine(e, r, n, t);
133
+ }
134
+ function _toPrimitive(t, r) {
135
+ if ("object" != typeof t || !t) return t;
136
+ var e = t[Symbol.toPrimitive];
137
+ if (void 0 !== e) {
138
+ var i = e.call(t, r);
139
+ if ("object" != typeof i) return i;
140
+ throw new TypeError("@@toPrimitive must return a primitive value.");
141
+ }
142
+ return (String )(t);
143
+ }
144
+ function _toPropertyKey(t) {
145
+ var i = _toPrimitive(t, "string");
146
+ return "symbol" == typeof i ? i : i + "";
147
+ }
148
+
149
+ function __rest(s, e) {
150
+ var t = {};
151
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
152
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
153
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
154
+ }
155
+ return t;
156
+ }
157
+ function __awaiter(thisArg, _arguments, P, generator) {
158
+ function adopt(value) {
159
+ return value instanceof P ? value : new P(function (resolve) {
160
+ resolve(value);
161
+ });
162
+ }
163
+ return new (P || (P = Promise))(function (resolve, reject) {
164
+ function fulfilled(value) {
165
+ try {
166
+ step(generator.next(value));
167
+ } catch (e) {
168
+ reject(e);
169
+ }
170
+ }
171
+ function rejected(value) {
172
+ try {
173
+ step(generator["throw"](value));
174
+ } catch (e) {
175
+ reject(e);
176
+ }
177
+ }
178
+ function step(result) {
179
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
180
+ }
181
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
182
+ });
183
+ }
184
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
185
+ var e = new Error(message);
186
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
187
+ };
188
+
189
+ var cmdDefaultEnvMap = {
190
+ dev: 'dev',
191
+ build: 'prod'
192
+ };
193
+ var defaultConfigName = 'config.js';
194
+ /**
195
+ * 得到构建配置的名称
196
+ */
197
+ var configFileName = function configFileName(cmd) {
198
+ var env = process$1.env.NODE_ENV || cmdDefaultEnvMap[cmd] || '';
199
+ return env ? "config.".concat(env, ".js") : defaultConfigName;
200
+ };
201
+
202
+ function readWebpack(cmd) {
203
+ var _a, _b;
204
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee() {
205
+ var filename, filepath, content, _t, _t2, _t3;
206
+ return _regenerator().w(function (_context) {
207
+ while (1) switch (_context.n) {
208
+ case 0:
209
+ filename = cmd ? configFileName(cmd) : defaultConfigName;
210
+ filepath = path.resolve(process.cwd(), "config/".concat(filename));
211
+ if (fs.existsSync(filepath)) {
212
+ _context.n = 1;
213
+ break;
214
+ }
215
+ console.warn("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A".concat(filepath));
216
+ return _context.a(2, {});
217
+ case 1:
218
+ _context.n = 2;
219
+ return import(filepath);
220
+ case 2:
221
+ _t2 = _a = _context.v;
222
+ _t = _t2 === null;
223
+ if (_t) {
224
+ _context.n = 3;
225
+ break;
226
+ }
227
+ _t = _a === void 0;
228
+ case 3:
229
+ if (!_t) {
230
+ _context.n = 4;
231
+ break;
232
+ }
233
+ _t3 = void 0;
234
+ _context.n = 5;
235
+ break;
236
+ case 4:
237
+ _t3 = _a["default"];
238
+ case 5:
239
+ content = _t3;
240
+ return _context.a(2, (_b = content === null || content === void 0 ? void 0 : content.webpack) !== null && _b !== void 0 ? _b : {});
241
+ }
242
+ }, _callee);
243
+ }));
244
+ }
245
+ var buildInConfig = {
246
+ mode: 'production',
247
+ entry: path.join(process.cwd(), './src/.coco/index.tsx'),
248
+ module: {
249
+ rules: [{
250
+ test: /\.tsx?$/,
251
+ use: [{
252
+ loader: require.resolve('babel-loader'),
253
+ options: {
254
+ presets: [require.resolve('@babel/preset-typescript')],
255
+ plugins: [[require.resolve('@babel/plugin-proposal-decorators'), {
256
+ version: '2023-11'
257
+ }], [require.resolve('@babel/plugin-transform-react-jsx'), {
258
+ runtime: 'automatic',
259
+ importSource: 'coco-mvc'
260
+ }]]
261
+ }
262
+ }, {
263
+ loader: require.resolve('ts-loader'),
264
+ options: {
265
+ context: process.cwd(),
266
+ transpileOnly: false
267
+ }
268
+ }],
269
+ exclude: /node_modules/
270
+ }]
271
+ },
272
+ resolveLoader: {
273
+ modules: [path.resolve(__dirname, '../../node_modules'), 'node_modules']
274
+ },
275
+ resolve: {
276
+ extensions: ['.tsx', '.ts', '.jsx', '.js'],
277
+ alias: {
278
+ '@': path.resolve(process.cwd(), 'src/')
279
+ }
280
+ },
281
+ output: {
282
+ publicPath: '/',
283
+ filename: 'main.js',
284
+ path: path.join(process.cwd(), 'dist'),
285
+ clean: true
286
+ },
287
+ optimization: {
288
+ minimize: true,
289
+ minimizer: [new TerserPlugin({
290
+ terserOptions: {
291
+ keep_classnames: true
292
+ }
293
+ })]
294
+ },
295
+ devServer: {
296
+ "static": {
297
+ directory: path.join(process.cwd(), 'dist')
298
+ },
299
+ compress: true,
300
+ historyApiFallback: true,
301
+ port: 9700,
302
+ devMiddleware: {
303
+ writeToDisk: true
304
+ }
305
+ },
306
+ plugins: [new HtmlWebpackPlugin({
307
+ templateContent: "\n<!DOCTYPE html>\n<html lang=\"en\">\n<body>\n <div id=\"root\"></div>\n</body>\n</html>\n "
308
+ })]
309
+ };
310
+ function getWebpackConfig(cmd) {
311
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee2() {
312
+ var baseConfig, envConfig;
313
+ return _regenerator().w(function (_context2) {
314
+ while (1) switch (_context2.n) {
315
+ case 0:
316
+ _context2.n = 1;
317
+ return readWebpack();
318
+ case 1:
319
+ baseConfig = _context2.v;
320
+ _context2.n = 2;
321
+ return readWebpack(cmd);
322
+ case 2:
323
+ envConfig = _context2.v;
324
+ return _context2.a(2, webpackMerge.merge(buildInConfig, baseConfig, envConfig));
325
+ }
326
+ }, _callee2);
327
+ }));
328
+ }
329
+
330
+ var WebpackBuilder = /*#__PURE__*/function () {
331
+ function WebpackBuilder() {
332
+ _classCallCheck(this, WebpackBuilder);
333
+ }
334
+ return _createClass(WebpackBuilder, [{
335
+ key: "build",
336
+ value: function build() {
337
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee2() {
338
+ var _this = this;
339
+ return _regenerator().w(function (_context2) {
340
+ while (1) switch (_context2.n) {
341
+ case 0:
342
+ return _context2.a(2, new Promise(function (resolve, reject) {
343
+ return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee() {
344
+ var config, compiler;
345
+ return _regenerator().w(function (_context) {
346
+ while (1) switch (_context.n) {
347
+ case 0:
348
+ _context.n = 1;
349
+ return getWebpackConfig('build');
350
+ case 1:
351
+ config = _context.v;
352
+ compiler = Webpack(config);
353
+ compiler.run(function (err, stats) {
354
+ console.log(stats.toString({
355
+ chunks: false,
356
+ // 使构建过程更静默无输出
357
+ colors: true // 在控制台展示颜色
358
+ }));
359
+ if (stats.hasErrors()) {
360
+ reject(err);
361
+ } else {
362
+ resolve();
363
+ }
364
+ compiler.close(function (err) {});
365
+ });
366
+ case 2:
367
+ return _context.a(2);
368
+ }
369
+ }, _callee);
370
+ }));
371
+ }));
372
+ }
373
+ }, _callee2);
374
+ }));
375
+ }
376
+ }, {
377
+ key: "startServer",
378
+ value: function startServer() {
379
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee3() {
380
+ var _a, devServer, config, compiler, devServerOptions;
381
+ return _regenerator().w(function (_context3) {
382
+ while (1) switch (_context3.n) {
383
+ case 0:
384
+ _context3.n = 1;
385
+ return getWebpackConfig('dev');
386
+ case 1:
387
+ _a = _context3.v;
388
+ devServer = _a.devServer;
389
+ config = __rest(_a, ["devServer"]);
390
+ compiler = Webpack(config);
391
+ devServerOptions = Object.assign(Object.assign({}, devServer), {
392
+ open: true
393
+ });
394
+ this.server = new WebpackDevServer(devServerOptions, compiler);
395
+ _context3.n = 2;
396
+ return this.server.start();
397
+ case 2:
398
+ return _context3.a(2);
399
+ }
400
+ }, _callee3, this);
401
+ }));
402
+ }
403
+ }, {
404
+ key: "stopServer",
405
+ value: function stopServer() {
406
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee4() {
407
+ return _regenerator().w(function (_context4) {
408
+ while (1) switch (_context4.n) {
409
+ case 0:
410
+ if (!this.server) {
411
+ _context4.n = 2;
412
+ break;
413
+ }
414
+ _context4.n = 1;
415
+ return this.server.stop();
416
+ case 1:
417
+ this.server = null;
418
+ case 2:
419
+ return _context4.a(2);
420
+ }
421
+ }, _callee4, this);
422
+ }));
423
+ }
424
+ }]);
425
+ }();
426
+
427
+ function startListening(builder) {
428
+ var _this = this;
429
+ var terminating = false;
430
+ process$1.on('exit', function () {
431
+ return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee() {
432
+ return _regenerator().w(function (_context) {
433
+ while (1) switch (_context.n) {
434
+ case 0:
435
+ _context.n = 1;
436
+ return builder.stopServer();
437
+ case 1:
438
+ return _context.a(2);
439
+ }
440
+ }, _callee);
441
+ }));
442
+ });
443
+ process$1.on('message', function (msg) {
444
+ return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee2() {
445
+ var _t;
446
+ return _regenerator().w(function (_context2) {
447
+ while (1) switch (_context2.n) {
448
+ case 0:
449
+ _t = msg;
450
+ _context2.n = _t === 'build-once' ? 1 : _t === 'start-server' ? 4 : 7;
451
+ break;
452
+ case 1:
453
+ _context2.n = 2;
454
+ return builder.build();
455
+ case 2:
456
+ if (!terminating) {
457
+ _context2.n = 3;
458
+ break;
459
+ }
460
+ return _context2.a(2);
461
+ case 3:
462
+ process$1.send('build-success');
463
+ return _context2.a(3, 8);
464
+ case 4:
465
+ if (!terminating) {
466
+ _context2.n = 5;
467
+ break;
468
+ }
469
+ return _context2.a(2);
470
+ case 5:
471
+ _context2.n = 6;
472
+ return builder.startServer();
473
+ case 6:
474
+ return _context2.a(3, 8);
475
+ case 7:
476
+ process$1.send("webpack process rcv msg:[".concat(msg, "]"));
477
+ return _context2.a(3, 8);
478
+ case 8:
479
+ return _context2.a(2);
480
+ }
481
+ }, _callee2);
482
+ }));
483
+ });
484
+ function handleTerminate() {
485
+ return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee3() {
486
+ return _regenerator().w(function (_context3) {
487
+ while (1) switch (_context3.n) {
488
+ case 0:
489
+ terminating = true;
490
+ _context3.n = 1;
491
+ return builder.stopServer();
492
+ case 1:
493
+ process$1.exit(0);
494
+ case 2:
495
+ return _context3.a(2);
496
+ }
497
+ }, _callee3);
498
+ }));
499
+ }
500
+ process$1.on('SIGTERM', handleTerminate);
501
+ process$1.on('SIGINT', handleTerminate);
502
+ }
503
+ function startAsProcess() {
504
+ var secondArgv = process$1.argv[2];
505
+ if (secondArgv === 'run-as-process') {
506
+ var builder = new WebpackBuilder();
507
+ startListening(builder);
508
+ }
509
+ }
510
+ startAsProcess();
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@cocojs/cli",
3
+ "description": "命令行工具,支持开发和构建功能",
4
+ "version": "0.0.1-alpha202511021451",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "coco": "bin/coco.js"
9
+ },
10
+ "files": [
11
+ "bin",
12
+ "runtime-config",
13
+ "dist"
14
+ ],
15
+ "homepage": "https://github.com/cocojs-org/coconut-framework",
16
+ "scripts": {},
17
+ "keywords": [
18
+ "cocojs"
19
+ ],
20
+ "author": "",
21
+ "license": "MIT",
22
+ "dependencies": {
23
+ "@babel/core": "^7.26.7",
24
+ "@babel/generator": "^7.26.5",
25
+ "@babel/parser": "^7.26.7",
26
+ "@babel/plugin-proposal-decorators": "^7.25.9",
27
+ "@babel/plugin-transform-react-jsx": "^7.25.9",
28
+ "@babel/preset-typescript": "^7.26.0",
29
+ "@babel/traverse": "^7.26.7",
30
+ "@babel/types": "^7.26.7",
31
+ "@cocojs/type-extractor": "^0.0.16",
32
+ "@rollup/plugin-babel": "^6.0.4",
33
+ "@rollup/plugin-typescript": "^12.1.2",
34
+ "babel-loader": "^10.0.0",
35
+ "chokidar": "^4.0.3",
36
+ "fs-extra": "^11.2.0",
37
+ "glob": "9.3.5",
38
+ "html-webpack-plugin": "^5.6.3",
39
+ "rollup": "^4.36.0",
40
+ "terser-webpack-plugin": "^5.3.14",
41
+ "ts-loader": "^9.5.2",
42
+ "webpack": "^5.98.0",
43
+ "webpack-cli": "^6.0.1",
44
+ "webpack-dev-server": "^5.2.0",
45
+ "webpack-merge": "^6.0.1"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^22.15.18"
49
+ }
50
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "lib": ["dom", "esnext"],
5
+ "module": "ESNext",
6
+ "moduleResolution": "node",
7
+ "allowSyntheticDefaultImports": true,
8
+ "jsx": "preserve",
9
+ "resolveJsonModule": true,
10
+ "plugins": [
11
+ {
12
+ "transform": "@cocojs/type-extractor",
13
+ "transformProgram": true
14
+ }
15
+ ]
16
+ }
17
+ }