UNPKG

@tsdi/pack

Version:

@tsdi/pack is simple build tasks, base on AOP, Ioc container, via @tsdi. dev build pack activities.

354 lines (352 loc) 18.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LibPackBuilder = void 0; var tslib_1 = require("tslib"); var ioc_1 = require("@tsdi/ioc"); var components_1 = require("@tsdi/components"); var activities_1 = require("@tsdi/activities"); var PlatformService_1 = require("../PlatformService"); var path_1 = require("path"); var through = require('through2'); var resolve = require('rollup-plugin-node-resolve'); var rollupSourcemaps = require('rollup-plugin-sourcemaps'); var commonjs = require('rollup-plugin-commonjs'); var rename = require('gulp-rename'); var uglify = require('gulp-uglify-es').default; var LibPackBuilder = /** @class */ (function () { function LibPackBuilder() { } LibPackBuilder.prototype.toOutputPath = function () { var mdpath = []; for (var _i = 0; _i < arguments.length; _i++) { mdpath[_i] = arguments[_i]; } return path_1.join.apply(void 0, tslib_1.__spreadArrays([this.outDir], mdpath.filter(function (f) { return f; }))); }; LibPackBuilder.prototype.toModulePath = function (input) { var paths = []; for (var _i = 1; _i < arguments.length; _i++) { paths[_i - 1] = arguments[_i]; } return path_1.join.apply(void 0, tslib_1.__spreadArrays([ this.outDir, this.getModuleFolder(input) ], paths.filter(function (f) { return f; }))); }; LibPackBuilder.prototype.getTargetPath = function (input) { return this.toOutputPath(this.getTargetFolder(input)); }; LibPackBuilder.prototype.getTargetFolder = function (input) { return input.targetFolder || input.target; }; LibPackBuilder.prototype.getModuleFolder = function (input) { return input.moduleFolder || (ioc_1.isArray(input.moduleName) ? ioc_1.lang.first(input.moduleName) : input.moduleName); }; LibPackBuilder.prototype.transRollupInput = function (input) { var _this = this; var inputs = input.input; return ioc_1.isArray(inputs) ? inputs.map(function (i) { return _this.toOutputPath(i); }) : this.toOutputPath(inputs); }; LibPackBuilder.prototype.transRollupoutput = function (input) { return { format: input.format || 'cjs', file: input.outputFile ? this.toModulePath(input, input.outputFile) : undefined, dir: input.outputFile ? undefined : this.toModulePath(input), }; }; LibPackBuilder.prototype.transCompileOptions = function (input) { if (input.target) { return input.module ? { target: input.target, module: input.module } : { target: input.target }; } return {}; }; LibPackBuilder.prototype.getDtsPath = function (input) { var targetpath = this.getTargetPath(input); return this.dts ? path_1.join(targetpath, this.dts) : (input.dtsMain ? targetpath : null); }; LibPackBuilder.prototype.transPlugins = function (ctx) { var beforeResolve = this.beforeResolve || []; var sourcemap = this.sourcemap; var input = ctx.getInput(); return this.plugins ? tslib_1.__spreadArrays(beforeResolve, this.plugins, [ sourcemap ? rollupSourcemaps(ioc_1.isBoolean(sourcemap) ? undefined : sourcemap) : null ]) : tslib_1.__spreadArrays(beforeResolve, [ resolve({ browser: input.format === 'umd' }), commonjs({ extensions: ['.js', '.ts', '.tsx'] }), sourcemap ? rollupSourcemaps(ioc_1.isBoolean(sourcemap) ? undefined : sourcemap) : null ]); }; LibPackBuilder.prototype.getBundleSrc = function (input) { return ioc_1.isArray(input.input) ? this.toModulePath(input, '/**/*.js') : this.toModulePath(input, input.outputFile); }; LibPackBuilder.prototype.json = function (json, input) { // to replace module export. if (input.target) { json[input.target] = ['.', this.getTargetFolder(input), input.main || 'index.js'].join('/'); } var outmain = ['.', this.getModuleFolder(input), input.outputFile || 'index.js'].join('/'); if (ioc_1.isArray(input.moduleName)) { input.moduleName.forEach(function (n) { json[n] = outmain; }); } else if (input.moduleName) { json[input.moduleName] = outmain; } if (input.dtsMain) { json['typings'] = ['.', this.getTargetFolder(input), input.dtsMain].join('/'); } return json; }; LibPackBuilder.prototype.onAfterInit = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var func_1; var _this = this; return tslib_1.__generator(this, function (_a) { if (!this.external) { func_1 = function (ctx) { var packagejson = ctx.platform.getPackage(); var external = tslib_1.__spreadArrays([ 'process', 'util', 'path', 'fs', 'events', 'stream', 'child_process', 'os', 'https', 'http', 'url', 'crypto' ], (_this.externalLibs || []), Object.keys(packagejson.dependencies || {}), Object.keys(packagejson.peerDependencies || {})); if (external.indexOf('rxjs')) { external.push('rxjs/operators'); } if (_this.includeLib && _this.includeLib.length) { external = external.filter(function (ex) { return _this.includeLib.indexOf(ex) < 0; }); } return external; }; this.external = function (ctx) { return func_1(ctx); }; } return [2 /*return*/]; }); }); }; LibPackBuilderAnn = function () { return { "name": "LibPackBuilder", "params": { "toOutputPath": ["mdpath"], "toModulePath": ["input", "paths"], "getTargetPath": ["input"], "getTargetFolder": ["input"], "getModuleFolder": ["input"], "transRollupInput": ["input"], "transRollupoutput": ["input"], "transCompileOptions": ["input"], "getDtsPath": ["input"], "transPlugins": ["ctx"], "getBundleSrc": ["input"], "json": ["json", "input"] } }; }; tslib_1.__decorate([ ioc_1.Inject(), tslib_1.__metadata("design:type", PlatformService_1.PlatformService) ], LibPackBuilder.prototype, "platform", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "src", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "test", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Array) ], LibPackBuilder.prototype, "bundles", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", String) ], LibPackBuilder.prototype, "outDir", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Boolean) ], LibPackBuilder.prototype, "annotation", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", String) ], LibPackBuilder.prototype, "dts", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "external", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Array) ], LibPackBuilder.prototype, "externalLibs", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Array) ], LibPackBuilder.prototype, "includeLib", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Array) ], LibPackBuilder.prototype, "plugins", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "globals", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "cache", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "watch", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Array) ], LibPackBuilder.prototype, "replaces", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "options", void 0); tslib_1.__decorate([ components_1.Input({ defaultValue: true }), tslib_1.__metadata("design:type", Object) ], LibPackBuilder.prototype, "sourcemap", void 0); tslib_1.__decorate([ components_1.Input(), tslib_1.__metadata("design:type", Array) ], LibPackBuilder.prototype, "beforeResolve", void 0); LibPackBuilder = tslib_1.__decorate([ activities_1.Task({ selector: 'libs', template: [ { activity: 'clean', clean: 'binding: outDir' }, { activity: 'test', test: 'binding: test', }, { activity: 'asset', src: ['package.json', '*.md'], dist: 'binding: outDir' }, { activity: 'each', each: 'binding: bundles', body: [ { activity: activities_1.Activities.if, condition: function (ctx) { return ctx.getInput().target; }, body: { activity: 'ts', src: 'binding: src', dist: function (ctx, bind) { return bind.getScope().getTargetPath(ctx.getInput()); }, dts: function (ctx, bind) { return bind.getScope().getDtsPath(ctx.getInput()); }, annotation: 'binding: annotation', sourcemap: 'binding: sourcemap', pipes: function (ctx, bind) { var replaces = bind.getScope().replaces; if (ctx.getInput().format == 'es' && replaces && replaces.length) { return [ function () { return through.obj(function (file, encoding, callback) { if (file.isNull()) { return callback(null, file); } if (file.isStream()) { return callback('doesn\'t support Streams'); } var contents = file.contents.toString('utf8'); replaces.forEach(function (r) { contents = contents.replace(r[0], r[1]); }); file.contents = new Buffer(contents, 'utf-8'); this.push(file); callback(); }); } ]; } return []; }, tsconfig: function (ctx, bind) { return bind.getScope().transCompileOptions(ctx.getInput()); } } }, { activity: activities_1.Activities.if, condition: function (ctx) { return ctx.getInput().input; }, body: [ { activity: 'rollup', input: function (ctx, bind) { return bind.getScope().transRollupInput(ctx.getInput()); }, sourcemap: 'binding: sourcemap', plugins: function (ctx, bind) { return bind.getScope().transPlugins(ctx); }, external: 'binding: external', options: 'binding: options', globals: 'binding: globals', output: function (ctx, bind) { return bind.getScope().transRollupoutput(ctx.getInput()); } }, { activity: activities_1.Activities.if, condition: function (ctx, bind) { return bind.getInput().uglify; }, body: { activity: 'asset', src: function (ctx, bind) { return bind.getScope().getBundleSrc(ctx.getInput()); }, dist: function (ctx, bind) { return bind.getScope().toModulePath(bind.getInput()); }, sourcemap: 'binding: sourcemap | path:"./"', pipes: [ function () { return uglify(); }, function () { return rename({ suffix: '.min' }); } ] } } ] }, { activity: activities_1.Activities.if, condition: function (ctx) { return ctx.getInput().moduleName || ctx.getInput().target; }, body: { activity: 'asset', src: function (ctx, bind) { return bind.getScope().toOutputPath('package.json'); }, dist: 'binding: outDir', pipes: [ { activity: 'jsonEdit', json: function (json, bind) { var input = bind.getInput(); var scope = bind.getScope(); // to replace module export. if (input.target) { json[input.target] = ['.', scope.getTargetFolder(input), input.main || 'index.js'].join('/'); } var outmain = ['.', scope.getModuleFolder(input), input.outputFile || 'index.js'].join('/'); if (ioc_1.isArray(input.moduleName)) { input.moduleName.forEach(function (n) { json[n] = outmain; }); } else if (input.moduleName) { json[input.moduleName] = outmain; } if (input.dtsMain) { json['typings'] = ['.', scope.getTargetFolder(input), input.dtsMain].join('/'); } return json; } } ] } } ] } ] // template: ` // <clean [clean]="outDir"></clean> // <test [test]="outDir"></test> // <asset [src]="['package.json', '*.md']" [test]="outDir"></asset> // <sequence *each="let input in bundles"> // <rts *if="vaidts(input)" [input]="transRollupInput(input)" [sourcemap]="sourcemap" [plugins]="transPlugins(ctx)" [external]="external" // [options]="options" [globals]="globals" [output]="transRollupoutput(input)"></rts> // <rollup *elseif="input" [input]="transRollupInput(input)" [sourcemap]="sourcemap" [plugins]="transPlugins(ctx)" [external]="external" // [options]="options" [globals]="globals" [output]="transRollupoutput(input)"></rollup> // <asset *if="input.uglify" [src]="getBundleSrc(input)" [dist]="toModulePath(input)" [sourcemap]="sourcemap | path:'./'" ></asset> // <asset *if="input.moduleName || input.target" [src]="toOutputPath('package.json')" [dist]="outDir"> // <asset.pipes> // <jsonEdit [json]="json($event, input)"></jsonEdit> // </asset.pipes> // </asset> // </sequence> // ` }), tslib_1.__metadata("design:paramtypes", []) ], LibPackBuilder); return LibPackBuilder; }()); exports.LibPackBuilder = LibPackBuilder; //# sourceMappingURL=../sourcemaps/builds/LibPackBuilder.js.map