UNPKG

14.3 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
14var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
16var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
18var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
20var _path = _interopRequireDefault(require("path"));
21
22var _fs = _interopRequireDefault(require("fs"));
23
24var _core = require("@babel/core");
25
26var _vinylFs = _interopRequireDefault(require("vinyl-fs"));
27
28var _through = _interopRequireDefault(require("through2"));
29
30var _gulpIf = _interopRequireDefault(require("gulp-if"));
31
32var _gulpPlumber = _interopRequireDefault(require("gulp-plumber"));
33
34var _gulpSourcemaps = _interopRequireDefault(require("gulp-sourcemaps"));
35
36var _gulpTerser = _interopRequireDefault(require("gulp-terser"));
37
38var _gulpFilter = _interopRequireDefault(require("gulp-filter"));
39
40var _gulpPostcss = _interopRequireDefault(require("gulp-postcss"));
41
42var _postcssLoadConfig = _interopRequireDefault(require("postcss-load-config"));
43
44var _stanUtils = require("stan-utils");
45
46var _merge = _interopRequireDefault(require("merge2"));
47
48var _cssnano = _interopRequireDefault(require("cssnano"));
49
50var _autoprefixer = _interopRequireDefault(require("autoprefixer"));
51
52var _getBabelConfig = _interopRequireDefault(require("./get-babel-config"));
53
54var _utils = require("./utils");
55
56var _excluded = ["plugins"];
57
58function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
59
60function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
61
62function babelBuild(_x) {
63 return _babelBuild.apply(this, arguments);
64}
65
66function _babelBuild() {
67 _babelBuild = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(opts) {
68 var cwd, rootPath, type, _opts$watch, watch, _opts$bundleOpt, entry, _opts$bundleOpt$targe, target, _opts$bundleOpt$minif, minify, runtimeHelpers, _opts$bundleOpt$extra, extraBabelPresets, _opts$bundleOpt$extra2, extraBabelPlugins, disableTypeCheck, sourcemap, cjs, srcPath, targetDir, targetPath, babelTransform, getPossCSSConfig, tsConfig, _getPossCSSConfig, _getPossCSSConfig$plu, postcssPlugin, postcssConfig, createStream;
69
70 return _regenerator["default"].wrap(function _callee$(_context) {
71 while (1) {
72 switch (_context.prev = _context.next) {
73 case 0:
74 createStream = function _createStream(globs) {
75 var babelTransformRegexp = /\.(t|j)sx?$/;
76
77 function isTransform(path) {
78 return babelTransformRegexp.test(path) && !path.endsWith('.d.ts');
79 }
80
81 function isPostcssTransform(path) {
82 return /\.(less|scss|sass|styl|css)$/.test(path);
83 }
84
85 var jsFilter = (0, _gulpFilter["default"])('**/*.js', {
86 restore: true
87 });
88 var tsFilter = (0, _gulpFilter["default"])('**/*.{ts,tsx}', {
89 restore: true
90 });
91 var dtsFilter = (0, _gulpFilter["default"])('**/*.d.ts', {
92 restore: true
93 });
94
95 var main = _vinylFs["default"].src(globs, {
96 allowEmpty: true,
97 base: srcPath
98 }).pipe((0, _gulpIf["default"])(function () {
99 return watch;
100 }, (0, _gulpPlumber["default"])())).pipe(sourcemap ? _gulpSourcemaps["default"].init() : _through["default"].obj()).pipe((0, _gulpIf["default"])(function (f) {
101 return isTransform(f.path);
102 }, _through["default"].obj(function (file, enc, cb) {
103 try {
104 file.contents = Buffer.from(babelTransform({
105 file: file,
106 type: type
107 }));
108 file.path = file.path.replace(_path["default"].extname(file.path), '.js');
109 cb(null, file);
110 } catch (e) {
111 _stanUtils.signale.error("Compiled failed: ".concat(file.path));
112
113 console.log(e);
114 cb(null);
115 }
116 }))).pipe((0, _gulpIf["default"])(function (f) {
117 return isPostcssTransform(f.path);
118 }, (0, _gulpPostcss["default"])(function (f) {
119 var syntax;
120
121 try {
122 if (/\.less$/.test(f.path)) {
123 syntax = require('postcss-less');
124 } else if (/\.(scss|sass)$/.test(f.path)) {
125 syntax = require('postcss-scss');
126 } else if (/\.styl$/.test(f.path)) {
127 syntax = require('postcss-styl');
128 }
129 } catch (e) {}
130
131 return {
132 plugins: [].concat((0, _toConsumableArray2["default"])(postcssPlugin), [minify && (0, _cssnano["default"])({
133 preset: 'default'
134 }), (0, _autoprefixer["default"])()]).filter(Boolean),
135 options: _objectSpread({
136 syntax: syntax
137 }, postcssConfig)
138 };
139 }))).pipe(sourcemap ? _gulpSourcemaps["default"].write('.') : _through["default"].obj()).pipe(_vinylFs["default"].dest(targetPath));
140
141 if (minify) {
142 main = main.pipe(jsFilter).pipe((0, _gulpTerser["default"])()).pipe(_through["default"].obj(function (file, enc, cb) {
143 cb(null, file);
144 })).pipe(_gulpSourcemaps["default"].write('.')).pipe(_vinylFs["default"].dest(targetPath));
145 }
146
147 if (!(tsConfig !== null && tsConfig !== void 0 && tsConfig.declaration || tsConfig !== null && tsConfig !== void 0 && tsConfig.declarationDir)) {
148 return (0, _merge["default"])(main);
149 }
150
151 var ts = _vinylFs["default"].src(globs, {
152 allowEmpty: true,
153 base: srcPath
154 }).pipe((0, _gulpIf["default"])(function () {
155 return watch;
156 }, (0, _gulpPlumber["default"])())).pipe(tsFilter).pipe(require('gulp-typescript').createProject((0, _utils.getTsConfigPath)(cwd, rootPath), {
157 isolatedModules: false,
158 moduleResolution: 'node',
159 emitDeclarationOnly: true,
160 noEmitOnError: disableTypeCheck,
161 typescript: require('typescript')
162 })()).on('error', function (err) {
163 if (watch) {
164 console.error(err);
165 } else {
166 throw err;
167 }
168 }).pipe(dtsFilter).pipe(_vinylFs["default"].dest(tsConfig !== null && tsConfig !== void 0 && tsConfig.declarationDir ? _path["default"].resolve(cwd, tsConfig.declarationDir) : targetDir));
169
170 return (0, _merge["default"])(main, ts);
171 };
172
173 getPossCSSConfig = function _getPossCSSConfig2() {
174 try {
175 return _postcssLoadConfig["default"].sync({});
176 } catch (e) {
177 return {};
178 }
179 };
180
181 babelTransform = function _babelTransform(opts) {
182 var _babelOpts$presets, _babelOpts$plugins;
183
184 var file = opts.file,
185 type = opts.type;
186 var babelOpts = (0, _getBabelConfig["default"])({
187 target: target,
188 type: type,
189 typescript: true,
190 runtimeHelpers: runtimeHelpers,
191 lazy: cjs && (cjs === null || cjs === void 0 ? void 0 : cjs.lazy),
192 cwd: cwd
193 });
194
195 (_babelOpts$presets = babelOpts.presets).push.apply(_babelOpts$presets, (0, _toConsumableArray2["default"])(extraBabelPresets));
196
197 (_babelOpts$plugins = babelOpts.plugins).push.apply(_babelOpts$plugins, (0, _toConsumableArray2["default"])(extraBabelPlugins));
198
199 var spinner = (0, _stanUtils.ora)("Transform ".concat(_stanUtils.chalk.green((0, _stanUtils.relativeNormalize)(file.path)), " to ").concat(type)).start();
200
201 try {
202 var _transformSync;
203
204 var code = (_transformSync = (0, _core.transformSync)(file.contents, _objectSpread(_objectSpread({}, babelOpts), {}, {
205 filename: file.path,
206 configFile: false,
207 babelrc: false
208 }))) === null || _transformSync === void 0 ? void 0 : _transformSync.code;
209 spinner.succeed();
210 return code;
211 } catch (e) {
212 spinner.fail();
213 throw e;
214 }
215 };
216
217 cwd = opts.cwd, rootPath = opts.rootPath, type = opts.type, _opts$watch = opts.watch, watch = _opts$watch === void 0 ? false : _opts$watch, _opts$bundleOpt = opts.bundleOpt, entry = _opts$bundleOpt.entry, _opts$bundleOpt$targe = _opts$bundleOpt.target, target = _opts$bundleOpt$targe === void 0 ? 'browser' : _opts$bundleOpt$targe, _opts$bundleOpt$minif = _opts$bundleOpt.minify, minify = _opts$bundleOpt$minif === void 0 ? false : _opts$bundleOpt$minif, runtimeHelpers = _opts$bundleOpt.runtimeHelpers, _opts$bundleOpt$extra = _opts$bundleOpt.extraBabelPresets, extraBabelPresets = _opts$bundleOpt$extra === void 0 ? [] : _opts$bundleOpt$extra, _opts$bundleOpt$extra2 = _opts$bundleOpt.extraBabelPlugins, extraBabelPlugins = _opts$bundleOpt$extra2 === void 0 ? [] : _opts$bundleOpt$extra2, disableTypeCheck = _opts$bundleOpt.disableTypeCheck, sourcemap = _opts$bundleOpt.sourcemap, cjs = _opts$bundleOpt.cjs;
218 srcPath = _path["default"].parse(_path["default"].join(cwd, entry)).dir;
219 targetDir = type === 'esm' ? 'es' : 'lib';
220 targetPath = _path["default"].join(cwd, targetDir);
221 tsConfig = (0, _utils.getParsedTSConfig)(cwd, rootPath);
222 _getPossCSSConfig = getPossCSSConfig(), _getPossCSSConfig$plu = _getPossCSSConfig.plugins, postcssPlugin = _getPossCSSConfig$plu === void 0 ? [] : _getPossCSSConfig$plu, postcssConfig = (0, _objectWithoutProperties2["default"])(_getPossCSSConfig, _excluded);
223
224 // clear typing dir
225 if (tsConfig !== null && tsConfig !== void 0 && tsConfig.declarationDir) {
226 try {
227 _stanUtils.rimraf.sync(_path["default"].join(cwd, tsConfig === null || tsConfig === void 0 ? void 0 : tsConfig.declarationDir));
228 } catch (e) {}
229 }
230
231 return _context.abrupt("return", new Promise(function (resolve) {
232 var patterns = [_path["default"].join(srcPath, '**/*'), "!".concat(_path["default"].join(srcPath, '**/fixtures{,/**}')), "!".concat(_path["default"].join(srcPath, '**/__fixtures__{,/**}')), "!".concat(_path["default"].join(srcPath, '**/demos{,/**}')), "!".concat(_path["default"].join(srcPath, '**/__test__{,/**}')), "!".concat(_path["default"].join(srcPath, '**/*.mdx')), "!".concat(_path["default"].join(srcPath, '**/*.md')), "!".concat(_path["default"].join(srcPath, '**/*.+(test|e2e|spec).+(js|jsx|ts|tsx)'))];
233 createStream(patterns).on('queueDrain', function () {
234 if (watch) {
235 var compileFiles = function compileFiles() {
236 while (files.length) {
237 createStream(files.pop());
238 }
239 };
240
241 // 后面改改,可以一个地方统一监听
242 var watcher = _stanUtils.chokidar.watch(patterns, {
243 ignoreInitial: true
244 });
245
246 console.log("".concat(_stanUtils.chalk.greenBright("[".concat(type, "]")), " watch ").concat(_stanUtils.chalk.yellow((0, _stanUtils.relativeNormalize)(srcPath)), " change and recompile"));
247 var files = [];
248
249 var debouncedCompileFiles = _stanUtils.lodash.debounce(_stanUtils.lodash.throttle(compileFiles, 500), 1000);
250
251 watcher.on('all', function (event, fullPath) {
252 var relPath = fullPath.replace(srcPath, '');
253 console.log("[".concat(event, "] ").concat((0, _stanUtils.relativeNormalize)(_path["default"].join(srcPath, relPath))));
254 if (!_fs["default"].existsSync(fullPath)) return;
255
256 if (_fs["default"].statSync(fullPath).isFile()) {
257 if (!files.includes(fullPath)) files.push(fullPath);
258 debouncedCompileFiles();
259 }
260 });
261 watcher.on('error', function (error) {
262 console.error('Error:', error);
263 console.error(error.stack);
264 });
265 process.once('SIGINT', function () {
266 watcher.close();
267 });
268 }
269
270 resolve();
271 });
272 }));
273
274 case 11:
275 case "end":
276 return _context.stop();
277 }
278 }
279 }, _callee);
280 }));
281 return _babelBuild.apply(this, arguments);
282}
283
284var _default = babelBuild;
285exports["default"] = _default;
\No newline at end of file