@nocobase/build 0.11.1-alpha.5 → 0.12.0-alpha.2

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 (44) hide show
  1. package/lib/babel.js +22 -4
  2. package/lib/build.js +62 -23
  3. package/lib/build.test.js +67 -0
  4. package/lib/buildPlugin.js +252 -0
  5. package/lib/normalizeBundleOpts.test.js +78 -0
  6. package/lib/schema.test.js +65 -0
  7. package/lib/utils/buildPluginUtils.js +119 -0
  8. package/lib/utils/buildPluginUtils.test.js +219 -0
  9. package/lib/utils/getDepsConfig.js +95 -0
  10. package/lib/utils/getLernaPackages/index.js +32 -2
  11. package/lib/utils/getLernaPackages/index.test.js +64 -0
  12. package/package.json +7 -2
  13. package/src/babel.ts +0 -257
  14. package/src/build.ts +0 -271
  15. package/src/es5ImcompatibleVersions.ts +0 -33
  16. package/src/getBabelConfig.ts +0 -95
  17. package/src/getRollupConfig.ts +0 -343
  18. package/src/getUserConfig.ts +0 -87
  19. package/src/importLibToEs.js +0 -26
  20. package/src/index.ts +0 -3
  21. package/src/normalizeBundleOpts.ts +0 -24
  22. package/src/randomColor.ts +0 -34
  23. package/src/registerBabel.ts +0 -23
  24. package/src/rollup.ts +0 -77
  25. package/src/schema.ts +0 -175
  26. package/src/types.d.ts +0 -118
  27. package/src/utils/getLernaPackages/fixtures/customize/core/core1/package.json +0 -7
  28. package/src/utils/getLernaPackages/fixtures/customize/core/core1/src/index.js +0 -2
  29. package/src/utils/getLernaPackages/fixtures/customize/core/core2/package.json +0 -5
  30. package/src/utils/getLernaPackages/fixtures/customize/core/core2/src/index.js +0 -2
  31. package/src/utils/getLernaPackages/fixtures/customize/lerna.json +0 -6
  32. package/src/utils/getLernaPackages/fixtures/customize/package.json +0 -4
  33. package/src/utils/getLernaPackages/fixtures/customize/packages/bar/package.json +0 -4
  34. package/src/utils/getLernaPackages/fixtures/customize/packages/bar/src/index.js +0 -2
  35. package/src/utils/getLernaPackages/fixtures/customize/packages/foo/package.json +0 -7
  36. package/src/utils/getLernaPackages/fixtures/customize/packages/foo/src/index.js +0 -2
  37. package/src/utils/getLernaPackages/fixtures/default/lerna.json +0 -1
  38. package/src/utils/getLernaPackages/fixtures/default/package.json +0 -4
  39. package/src/utils/getLernaPackages/fixtures/default/packages/bar/package.json +0 -4
  40. package/src/utils/getLernaPackages/fixtures/default/packages/bar/src/index.js +0 -2
  41. package/src/utils/getLernaPackages/fixtures/default/packages/foo/package.json +0 -7
  42. package/src/utils/getLernaPackages/fixtures/default/packages/foo/src/index.js +0 -2
  43. package/src/utils/getLernaPackages/index.ts +0 -57
  44. package/src/utils/index.ts +0 -17
package/lib/babel.js CHANGED
@@ -19,6 +19,7 @@ var _gulpLess = _interopRequireDefault(require("gulp-less"));
19
19
  var _gulpPlumber = _interopRequireDefault(require("gulp-plumber"));
20
20
  var _gulpIf = _interopRequireDefault(require("gulp-if"));
21
21
  var _chalk = _interopRequireDefault(require("chalk"));
22
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
22
23
  var _getBabelConfig2 = _interopRequireDefault(require("./getBabelConfig"));
23
24
  var ts = _interopRequireWildcard(require("typescript"));
24
25
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -43,6 +44,8 @@ function _ref() {
43
44
  dispose = opts.dispose,
44
45
  importLibToEs = opts.importLibToEs,
45
46
  log = opts.log,
47
+ _opts$isPlugin = opts.isPlugin,
48
+ isPlugin = _opts$isPlugin === void 0 ? false : _opts$isPlugin,
46
49
  _opts$bundleOpts = opts.bundleOpts,
47
50
  _opts$bundleOpts$targ = _opts$bundleOpts.target,
48
51
  target = _opts$bundleOpts$targ === void 0 ? "browser" : _opts$bundleOpts$targ,
@@ -60,10 +63,24 @@ function _ref() {
60
63
  cjs = _opts$bundleOpts.cjs,
61
64
  lessInBabelMode = _opts$bundleOpts.lessInBabelMode;
62
65
  const srcPath = (0, _path.join)(cwd, "src");
63
- const targetDir = type === "esm" ? "es" : "lib";
66
+ const targetDir = type === "esm" ? "es" : isPlugin ? 'dist' : "lib";
64
67
  const targetPath = (0, _path.join)(cwd, targetDir);
65
- log(_chalk.default.gray(`Clean ${targetDir} directory`));
66
- _rimraf.default.sync(targetPath);
68
+ if (!isPlugin) {
69
+ log(_chalk.default.gray(`Clean ${targetDir} directory`));
70
+ _rimraf.default.sync(targetPath);
71
+ } else {
72
+ if (_fsExtra.default.existsSync(targetPath)) {
73
+ // exclude node_modules
74
+ const files = _fsExtra.default.readdirSync(targetPath, {
75
+ recursive: false
76
+ });
77
+ files.forEach(file => {
78
+ if (file !== 'node_modules') {
79
+ _rimraf.default.sync((0, _path.join)(targetPath, file));
80
+ }
81
+ });
82
+ }
83
+ }
67
84
  function transform(opts) {
68
85
  const file = opts.file,
69
86
  type = opts.type;
@@ -140,6 +157,7 @@ function _ref() {
140
157
  return /\.tsx?$/.test(path) && !path.endsWith(".d.ts");
141
158
  }
142
159
  function isTransform(path) {
160
+ if (isPlugin) return false;
143
161
  return babelTransformRegexp.test(path) && !path.endsWith(".d.ts");
144
162
  }
145
163
  return _vinylFs.default.src(src, {
@@ -162,7 +180,7 @@ function _ref() {
162
180
  }))).pipe(_vinylFs.default.dest(targetPath));
163
181
  }
164
182
  return new Promise(resolve => {
165
- const patterns = [(0, _path.join)(srcPath, "**/*"), `!${(0, _path.join)(srcPath, "**/fixtures{,/**}")}`, `!${(0, _path.join)(srcPath, "**/demos{,/**}")}`, `!${(0, _path.join)(srcPath, "**/__test__{,/**}")}`, `!${(0, _path.join)(srcPath, "**/__tests__{,/**}")}`, `!${(0, _path.join)(srcPath, "**/*.mdx")}`, `!${(0, _path.join)(srcPath, "**/*.md")}`, `!${(0, _path.join)(srcPath, "**/*.+(test|e2e|spec).+(js|jsx|ts|tsx)")}`, `!${(0, _path.join)(srcPath, "**/tsconfig{,.*}.json")}`, `!${(0, _path.join)(srcPath, ".umi{,-production,-test}{,/**}")}`];
183
+ const patterns = [isPlugin ? (0, _path.join)(srcPath, "**/*.{ts,tsx}") : (0, _path.join)(srcPath, "**/*"), `!${(0, _path.join)(srcPath, "**/fixtures{,/**}")}`, `!${(0, _path.join)(srcPath, "**/demos{,/**}")}`, `!${(0, _path.join)(srcPath, "**/__test__{,/**}")}`, `!${(0, _path.join)(srcPath, "**/__tests__{,/**}")}`, `!${(0, _path.join)(srcPath, "**/*.mdx")}`, `!${(0, _path.join)(srcPath, "**/*.md")}`, `!${(0, _path.join)(srcPath, "**/*.+(test|e2e|spec).+(js|jsx|ts|tsx)")}`, `!${(0, _path.join)(srcPath, "**/tsconfig{,.*}.json")}`, `!${(0, _path.join)(srcPath, ".umi{,-production,-test}{,/**}")}`];
166
184
  createStream(patterns).on("end", () => {
167
185
  if (watch) {
168
186
  log(_chalk.default.magenta(`Start watching ${(0, _slash.default)(srcPath).replace(`${cwd}/`, "")} directory...`));
package/lib/build.js CHANGED
@@ -15,6 +15,7 @@ var _path = require("path");
15
15
  var _rimraf = _interopRequireDefault(require("rimraf"));
16
16
  var _signale = _interopRequireDefault(require("signale"));
17
17
  var _babel = _interopRequireDefault(require("./babel"));
18
+ var _buildPlugin = require("./buildPlugin");
18
19
  var _getUserConfig = _interopRequireWildcard(require("./getUserConfig"));
19
20
  var _randomColor = _interopRequireDefault(require("./randomColor"));
20
21
  var _registerBabel = _interopRequireDefault(require("./registerBabel"));
@@ -28,11 +29,11 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
28
29
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
30
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
30
31
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
32
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
33
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
31
34
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
32
35
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
33
36
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
34
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
35
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
36
37
  function getBundleOpts(opts) {
37
38
  const cwd = opts.cwd,
38
39
  _opts$buildArgs = opts.buildArgs,
@@ -100,6 +101,27 @@ None format of ${_chalk.default.cyan('cjs | esm | umd')} is configured, checkout
100
101
  function isTypescriptFile(filePath) {
101
102
  return filePath.endsWith('.ts') || filePath.endsWith('.tsx');
102
103
  }
104
+ function isPluginPackage(name) {
105
+ const prefixes = (process.env.PLUGIN_PACKAGE_PREFIX || '').split(',');
106
+ var _iterator = _createForOfIteratorHelper(prefixes),
107
+ _step;
108
+ try {
109
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
110
+ const prefix = _step.value;
111
+ if (prefix.includes('preset')) {
112
+ return false;
113
+ }
114
+ if (name.startsWith(prefix)) {
115
+ return true;
116
+ }
117
+ }
118
+ } catch (err) {
119
+ _iterator.e(err);
120
+ } finally {
121
+ _iterator.f();
122
+ }
123
+ return false;
124
+ }
103
125
  function build(_x) {
104
126
  return _build.apply(this, arguments);
105
127
  }
@@ -122,28 +144,29 @@ function _build() {
122
144
  only: customConfigPath ? _getUserConfig.CONFIG_FILES.concat(customConfigPath) : _getUserConfig.CONFIG_FILES
123
145
  });
124
146
  const pkgName = (typeof pkg === 'string' ? pkg : pkg === null || pkg === void 0 ? void 0 : pkg.name) || 'unknown';
125
- function log(msg) {
126
- console.log(`${pkg ? `${(0, _randomColor.default)(`${pkgName}`)}: ` : ''}${msg}`);
147
+ function log(msg, ...args) {
148
+ console.log(`${pkg ? `${(0, _randomColor.default)(`${pkgName}`)}: ` : ''}${msg}`, ...args);
127
149
  }
128
150
 
129
151
  // Get user config
130
152
  const bundleOptsArray = getBundleOpts(opts);
131
- var _iterator = _createForOfIteratorHelper(bundleOptsArray),
132
- _step;
153
+ const isPlugin = isPluginPackage(pkgName);
154
+
155
+ // Clean dist
156
+ if (clean && !isPlugin) {
157
+ log(_chalk.default.gray(`Clean dist directory`));
158
+ _rimraf.default.sync((0, _path.join)(cwd, 'dist'));
159
+ }
160
+ var _iterator2 = _createForOfIteratorHelper(bundleOptsArray),
161
+ _step2;
133
162
  try {
134
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
135
- const bundleOpts = _step.value;
163
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
164
+ const bundleOpts = _step2.value;
136
165
  validateBundleOpts(bundleOpts, {
137
166
  cwd,
138
167
  rootPath
139
168
  });
140
169
 
141
- // Clean dist
142
- if (clean) {
143
- log(_chalk.default.gray(`Clean dist directory`));
144
- _rimraf.default.sync((0, _path.join)(cwd, 'dist'));
145
- }
146
-
147
170
  // Build umd
148
171
  if (bundleOpts.umd) {
149
172
  log(`Build umd`);
@@ -162,17 +185,33 @@ function _build() {
162
185
  // Build cjs
163
186
  if (bundleOpts.cjs) {
164
187
  const cjs = bundleOpts.cjs;
165
- log(`Build cjs with ${cjs.type}`);
188
+ log(`Build ${isPlugin ? 'd.ts' : 'cjs'} with ${cjs.type}`);
166
189
  if (cjs.type === 'babel') {
167
190
  yield (0, _babel.default)({
168
191
  cwd,
169
192
  rootPath,
170
193
  watch,
171
194
  dispose,
195
+ isPlugin,
172
196
  type: 'cjs',
173
197
  log,
174
198
  bundleOpts
175
199
  });
200
+ if (isPlugin) {
201
+ log(cwd);
202
+ (0, _buildPlugin.deleteJsFiles)(cwd, log);
203
+ yield (0, _buildPlugin.buildPluginServer)(cwd, log);
204
+ yield (0, _buildPlugin.buildPluginClient)(cwd, log);
205
+ const buildFile = (0, _path.join)(cwd, 'build.js');
206
+ if ((0, _fs.existsSync)(buildFile)) {
207
+ log('build others');
208
+ try {
209
+ yield require(buildFile).run(log);
210
+ } catch (error) {
211
+ console.error(error);
212
+ }
213
+ }
214
+ }
176
215
  } else {
177
216
  yield (0, _rollup.default)({
178
217
  cwd,
@@ -219,9 +258,9 @@ function _build() {
219
258
  }
220
259
  }
221
260
  } catch (err) {
222
- _iterator.e(err);
261
+ _iterator2.e(err);
223
262
  } finally {
224
- _iterator.f();
263
+ _iterator2.f();
225
264
  }
226
265
  return dispose;
227
266
  });
@@ -259,11 +298,11 @@ function _buildForLerna() {
259
298
  pkgs = pkgs.filter(pkg => userConfig.pkgs.includes(getPkgRelativePath(cwd, pkg)));
260
299
  }
261
300
  const dispose = [];
262
- var _iterator2 = _createForOfIteratorHelper(pkgs),
263
- _step2;
301
+ var _iterator3 = _createForOfIteratorHelper(pkgs),
302
+ _step3;
264
303
  try {
265
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
266
- const pkg = _step2.value;
304
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
305
+ const pkg = _step3.value;
267
306
  const pkgName = getPkgRelativePath(cwd, pkg);
268
307
  if (userConfig.excludePkgs && userConfig.excludePkgs.includes(pkgName)) {
269
308
  continue;
@@ -283,9 +322,9 @@ function _buildForLerna() {
283
322
  })));
284
323
  }
285
324
  } catch (err) {
286
- _iterator2.e(err);
325
+ _iterator3.e(err);
287
326
  } finally {
288
- _iterator2.f();
327
+ _iterator3.f();
289
328
  }
290
329
  return dispose;
291
330
  });
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ var _path = require("path");
4
+ var _project = require("@lerna/project");
5
+ var _fs = require("fs");
6
+ var _mkdirp = _interopRequireDefault(require("mkdirp"));
7
+ var _rimraf = _interopRequireDefault(require("rimraf"));
8
+ var _build = _interopRequireDefault(require("./build"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
13
+ function moveEsLibToDist(cwd) {
14
+ ['es', 'lib'].forEach(dir => {
15
+ const absDirPath = (0, _path.join)(cwd, dir);
16
+ const absDistPath = (0, _path.join)(cwd, 'dist');
17
+ if ((0, _fs.existsSync)(absDirPath)) {
18
+ _mkdirp.default.sync(absDistPath);
19
+ (0, _fs.renameSync)(absDirPath, (0, _path.join)(absDistPath, dir));
20
+ }
21
+ });
22
+ }
23
+ describe('father build', () => {
24
+ const rootConfigMapping = {
25
+ 'lerna-root-config-override': {
26
+ cjs: 'rollup',
27
+ esm: false
28
+ }
29
+ };
30
+ require('test-build-result')({
31
+ root: (0, _path.join)(__dirname, './fixtures/build'),
32
+ build({
33
+ cwd
34
+ }) {
35
+ process.chdir(cwd);
36
+ _rimraf.default.sync((0, _path.join)(cwd, 'dist'));
37
+ return (0, _build.default)({
38
+ cwd,
39
+ rootConfig: rootConfigMapping[(0, _path.basename)(cwd)]
40
+ }).then(() => {
41
+ // babel
42
+ moveEsLibToDist(cwd);
43
+
44
+ // lerna
45
+ if ((0, _fs.existsSync)((0, _path.join)(cwd, 'lerna.json'))) {
46
+ _mkdirp.default.sync((0, _path.join)(cwd, 'dist'));
47
+ const pkgs = (0, _project.getPackagesSync)(cwd);
48
+ var _iterator = _createForOfIteratorHelper(pkgs),
49
+ _step;
50
+ try {
51
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
52
+ let pkg = _step.value;
53
+ const pkgPath = pkg.contents;
54
+ if (!(0, _fs.statSync)(pkgPath).isDirectory()) continue;
55
+ moveEsLibToDist(pkgPath);
56
+ (0, _fs.renameSync)((0, _path.join)(pkgPath, 'dist'), (0, _path.join)(cwd, 'dist', pkgPath.split(_path.sep).pop()));
57
+ }
58
+ } catch (err) {
59
+ _iterator.e(err);
60
+ } finally {
61
+ _iterator.f();
62
+ }
63
+ }
64
+ });
65
+ }
66
+ });
67
+ });
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildPluginClient = buildPluginClient;
7
+ exports.buildPluginServer = buildPluginServer;
8
+ exports.buildServerDeps = buildServerDeps;
9
+ exports.deleteJsFiles = deleteJsFiles;
10
+ var _ncc = _interopRequireDefault(require("@vercel/ncc"));
11
+ var _pluginReact = _interopRequireDefault(require("@vitejs/plugin-react"));
12
+ var _chalk = _interopRequireDefault(require("chalk"));
13
+ var _fastGlob = _interopRequireDefault(require("fast-glob"));
14
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
15
+ var _path = _interopRequireDefault(require("path"));
16
+ var _tsup = require("tsup");
17
+ var _vite = require("vite");
18
+ var _vitePluginCssInjectedByJs = _interopRequireDefault(require("vite-plugin-css-injected-by-js"));
19
+ var _buildPluginUtils = require("./utils/buildPluginUtils");
20
+ var _getDepsConfig = require("./utils/getDepsConfig");
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
26
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
27
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
28
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
29
+ const serverGlobalFiles = ['src/**', '!src/**/__tests__', '!src/client/**'];
30
+ const clientGlobalFiles = ['src/client/**', '!src/**/__tests__'];
31
+ const external = [
32
+ // nocobase
33
+ '@nocobase/acl', '@nocobase/actions', '@nocobase/auth', '@nocobase/cache', '@nocobase/client', '@nocobase/database', '@nocobase/evaluators', '@nocobase/logger', '@nocobase/resourcer', '@nocobase/sdk', '@nocobase/server', '@nocobase/test', '@nocobase/utils',
34
+ // @nocobase/auth
35
+ 'jsonwebtoken',
36
+ // @nocobase/cache
37
+ 'cache-manager',
38
+ // @nocobase/database
39
+ 'sequelize', 'umzug', 'async-mutex',
40
+ // @nocobase/evaluators
41
+ '@formulajs/formulajs', 'mathjs',
42
+ // @nocobase/logger
43
+ 'winston', 'winston-daily-rotate-file',
44
+ // koa
45
+ 'koa', '@koa/cors', '@koa/router', 'multer', '@koa/multer', 'koa-bodyparser', 'koa-static', 'koa-send',
46
+ // react
47
+ 'react', 'react-dom', 'react/jsx-runtime',
48
+ // react-router
49
+ 'react-router', 'react-router-dom',
50
+ // antd
51
+ 'antd', 'antd-style', '@ant-design/icons', '@ant-design/cssinjs',
52
+ // i18next
53
+ 'i18next', 'react-i18next',
54
+ // dnd-kit 相关
55
+ '@dnd-kit/accessibility', '@dnd-kit/core', '@dnd-kit/modifiers', '@dnd-kit/sortable', '@dnd-kit/utilities',
56
+ // formily 相关
57
+ '@formily/antd-v5', '@formily/core', '@formily/react', '@formily/json-schema', '@formily/path', '@formily/validator', '@formily/shared', '@formily/reactive', '@formily/reactive-react',
58
+ // utils
59
+ 'dayjs', 'mysql2', 'pg', 'pg-hstore', 'sqlite3', 'supertest', 'axios', '@emotion/css', 'ahooks', 'lodash', 'china-division', 'cronstrue'];
60
+ const pluginPrefix = (process.env.PLUGIN_PACKAGE_PREFIX || '@nocobase/plugin-,@nocobase/preset-,@nocobase/plugin-pro-').split(',');
61
+ const target_dir = 'dist';
62
+ function deleteJsFiles(cwd, log) {
63
+ log('delete babel js files');
64
+ const jsFiles = _fastGlob.default.globSync(['**/*', '!**/*.d.ts', '!node_modules'], {
65
+ cwd: _path.default.join(cwd, target_dir),
66
+ absolute: true
67
+ });
68
+ jsFiles.forEach(item => {
69
+ _fsExtra.default.unlinkSync(item);
70
+ });
71
+ }
72
+ function buildServerDeps(_x, _x2, _x3) {
73
+ return _buildServerDeps.apply(this, arguments);
74
+ }
75
+ function _buildServerDeps() {
76
+ _buildServerDeps = _asyncToGenerator(function* (cwd, serverFiles, log) {
77
+ log('build server dependencies');
78
+ const outDir = _path.default.join(cwd, target_dir, 'node_modules');
79
+ const sourcePackages = (0, _buildPluginUtils.getSourcePackages)(serverFiles);
80
+ const includePackages = (0, _buildPluginUtils.getIncludePackages)(sourcePackages, external, pluginPrefix);
81
+ const excludePackages = (0, _buildPluginUtils.getExcludePackages)(sourcePackages, external, pluginPrefix);
82
+ let tips = [];
83
+ if (includePackages.length) {
84
+ tips.push(`These packages ${_chalk.default.yellow(includePackages.join(', '))} will be ${_chalk.default.bold('bundled')} to dist/node_modules.`);
85
+ }
86
+ if (excludePackages.length) {
87
+ tips.push(`These packages ${_chalk.default.yellow(excludePackages.join(', '))} will be ${_chalk.default.bold('exclude')}.`);
88
+ }
89
+ tips.push(`For more information, please refer to: ${_chalk.default.blue('https://docs.nocobase.com/development/deps')}.`);
90
+ log(tips.join(' '));
91
+ if (!includePackages.length) return;
92
+ const deps = (0, _getDepsConfig.getDepsConfig)(cwd, outDir, includePackages, external);
93
+
94
+ // bundle deps
95
+ for (var _i = 0, _Object$keys = Object.keys(deps); _i < _Object$keys.length; _i++) {
96
+ const dep = _Object$keys[_i];
97
+ const _deps$dep = deps[dep],
98
+ outputDir = _deps$dep.outputDir,
99
+ mainFile = _deps$dep.mainFile,
100
+ pkg = _deps$dep.pkg,
101
+ nccConfig = _deps$dep.nccConfig,
102
+ depDir = _deps$dep.depDir;
103
+ const outputPackageJson = _path.default.join(outputDir, 'package.json');
104
+
105
+ // cache check
106
+ if (_fsExtra.default.existsSync(outputPackageJson)) {
107
+ const outputPackage = require(outputPackageJson);
108
+ if (outputPackage.version === pkg.version) {
109
+ continue;
110
+ }
111
+ }
112
+
113
+ // copy package
114
+ yield _fsExtra.default.copy(depDir, outputDir, {
115
+ errorOnExist: false
116
+ });
117
+
118
+ // delete files
119
+ const deleteFiles = _fastGlob.default.sync(['./**/*.map', './**/*.js.map', './**/*.md', './**/*.mjs', './**/*.png', './**/*.jpg', './**/*.jpeg', './**/*.gif', './**/*/.bin', './**/*/bin', './**/*/LICENSE', './**/*/tsconfig.json'], {
120
+ cwd: outputDir,
121
+ absolute: true
122
+ });
123
+ deleteFiles.forEach(file => {
124
+ _fsExtra.default.unlinkSync(file);
125
+ });
126
+ yield (0, _ncc.default)(dep, nccConfig).then(({
127
+ code,
128
+ assets
129
+ }) => {
130
+ // emit dist file
131
+ _fsExtra.default.writeFileSync(mainFile, code, 'utf-8');
132
+
133
+ // emit assets
134
+ Object.entries(assets).forEach(([name, item]) => {
135
+ _fsExtra.default.writeFileSync(_path.default.join(outputDir, name), item.source, {
136
+ encoding: 'utf-8',
137
+ mode: item.permissions
138
+ });
139
+ });
140
+
141
+ // emit package.json
142
+ _fsExtra.default.writeFileSync(outputPackageJson, JSON.stringify(_objectSpread(_objectSpread({}, pkg), {}, {
143
+ _lastModified: new Date().toISOString()
144
+ })), 'utf-8');
145
+ });
146
+ }
147
+ });
148
+ return _buildServerDeps.apply(this, arguments);
149
+ }
150
+ function buildPluginServer(_x4, _x5) {
151
+ return _buildPluginServer.apply(this, arguments);
152
+ }
153
+ function _buildPluginServer() {
154
+ _buildPluginServer = _asyncToGenerator(function* (cwd, log) {
155
+ log('build server source');
156
+ const packageJson = (0, _buildPluginUtils.getPackageJson)(cwd);
157
+ const serverFiles = _fastGlob.default.globSync(serverGlobalFiles, {
158
+ cwd,
159
+ absolute: true
160
+ });
161
+ (0, _buildPluginUtils.buildCheck)({
162
+ cwd,
163
+ packageJson,
164
+ entry: 'server',
165
+ files: serverFiles,
166
+ log
167
+ });
168
+ yield (0, _tsup.build)({
169
+ entry: serverFiles,
170
+ splitting: false,
171
+ clean: false,
172
+ bundle: false,
173
+ silent: true,
174
+ treeshake: true,
175
+ target: 'node16',
176
+ outDir: _path.default.join(cwd, target_dir),
177
+ format: 'cjs',
178
+ skipNodeModulesBundle: true
179
+ });
180
+ yield buildServerDeps(cwd, serverFiles, log);
181
+ });
182
+ return _buildPluginServer.apply(this, arguments);
183
+ }
184
+ function buildPluginClient(cwd, log) {
185
+ log('build client');
186
+ const packageJson = (0, _buildPluginUtils.getPackageJson)(cwd);
187
+ const clientFiles = _fastGlob.default.globSync(clientGlobalFiles, {
188
+ cwd,
189
+ absolute: true
190
+ });
191
+ const sourcePackages = (0, _buildPluginUtils.getSourcePackages)(clientFiles);
192
+ const excludePackages = (0, _buildPluginUtils.getExcludePackages)(sourcePackages, external, pluginPrefix);
193
+ (0, _buildPluginUtils.buildCheck)({
194
+ cwd,
195
+ packageJson,
196
+ entry: 'client',
197
+ files: clientFiles,
198
+ log
199
+ });
200
+ const outDir = _path.default.join(cwd, target_dir, 'client');
201
+ const globals = excludePackages.reduce((prev, curr) => {
202
+ if (curr.startsWith('@nocobase')) {
203
+ prev[`${curr}/client`] = curr;
204
+ }
205
+ prev[curr] = curr;
206
+ return prev;
207
+ }, {});
208
+ const entry = _fastGlob.default.globSync('src/client/index.{ts,tsx,js,jsx}', {
209
+ cwd
210
+ });
211
+ const outputFileName = 'index.js';
212
+ return (0, _vite.build)({
213
+ mode: 'production',
214
+ define: {
215
+ 'process.env.NODE_ENV': JSON.stringify('production')
216
+ },
217
+ logLevel: 'warn',
218
+ build: {
219
+ minify: false,
220
+ outDir,
221
+ cssCodeSplit: false,
222
+ emptyOutDir: false,
223
+ lib: {
224
+ entry,
225
+ formats: ['umd'],
226
+ name: packageJson.name,
227
+ fileName: () => outputFileName
228
+ },
229
+ rollupOptions: {
230
+ cache: true,
231
+ external: Object.keys(globals),
232
+ output: {
233
+ exports: 'named',
234
+ globals
235
+ }
236
+ }
237
+ },
238
+ plugins: [(0, _pluginReact.default)(), (0, _vitePluginCssInjectedByJs.default)({
239
+ styleId: packageJson.name
240
+ }), {
241
+ name: 'check-file-size',
242
+ closeBundle() {
243
+ const file = _path.default.join(outDir, outputFileName);
244
+ if (!_fsExtra.default.existsSync(file)) return;
245
+ const fileSize = (0, _buildPluginUtils.getFileSize)(_path.default.join(outDir, outputFileName));
246
+ if (fileSize > 1024 * 1024) {
247
+ log('The bundle file size exceeds 1MB %s. ', _chalk.default.red((0, _buildPluginUtils.formatFileSize)(fileSize)));
248
+ }
249
+ }
250
+ }]
251
+ });
252
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _normalizeBundleOpts = _interopRequireDefault(require("./normalizeBundleOpts"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ test('normal', () => {
6
+ expect((0, _normalizeBundleOpts.default)('a', {
7
+ umd: {
8
+ name: 'foo'
9
+ },
10
+ overridesByEntry: {
11
+ a: {
12
+ umd: {
13
+ name: 'bar'
14
+ }
15
+ }
16
+ }
17
+ })).toEqual({
18
+ umd: {
19
+ name: 'bar'
20
+ }
21
+ });
22
+ });
23
+ test('ignore ./ prefix in entry', () => {
24
+ expect((0, _normalizeBundleOpts.default)('./a', {
25
+ umd: {
26
+ name: 'foo'
27
+ },
28
+ overridesByEntry: {
29
+ a: {
30
+ umd: {
31
+ name: 'bar'
32
+ }
33
+ }
34
+ }
35
+ })).toEqual({
36
+ umd: {
37
+ name: 'bar'
38
+ }
39
+ });
40
+ });
41
+ test('ignore ./ prefix in overridesByEntry', () => {
42
+ expect((0, _normalizeBundleOpts.default)('a', {
43
+ umd: {
44
+ name: 'foo'
45
+ },
46
+ overridesByEntry: {
47
+ './a': {
48
+ umd: {
49
+ name: 'bar'
50
+ }
51
+ }
52
+ }
53
+ })).toEqual({
54
+ umd: {
55
+ name: 'bar'
56
+ }
57
+ });
58
+ });
59
+ test('deep merge', () => {
60
+ expect((0, _normalizeBundleOpts.default)('a', {
61
+ umd: {
62
+ minFile: false,
63
+ name: 'foo'
64
+ },
65
+ overridesByEntry: {
66
+ a: {
67
+ umd: {
68
+ name: 'bar'
69
+ }
70
+ }
71
+ }
72
+ })).toEqual({
73
+ umd: {
74
+ minFile: false,
75
+ name: 'bar'
76
+ }
77
+ });
78
+ });