@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
JavaScript
;
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*/];
});
});
};
LibPackBuilder.ρAnn = 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