fluorine-loader
Version:
A webpack loader to compile fluorine specializations and catalyst handlers.
82 lines • 3.58 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const loader_utils_1 = require("loader-utils");
const perf_hooks_1 = require("perf_hooks");
const sorcery = require("source-map");
const transformer_1 = require("./transformer");
let now = perf_hooks_1.performance.now;
function fluorine_loader(source, last_sourcemap) {
let opts = loader_utils_1.getOptions(this) || {};
if (opts.sourceMap === undefined)
opts.sourceMap = this.sourceMap;
opts._filename = this.resource;
let callback = this.async();
_async_loader(source, last_sourcemap, opts)
.then(([code, sourcemap]) => {
callback(null, code, sourcemap);
})
.catch(err => {
callback(err);
});
return undefined;
}
exports.default = fluorine_loader;
function _async_loader(source, last_sourcemap, opts = {}) {
return __awaiter(this, void 0, void 0, function* () {
let { code, sourcemap: next_sourcemap, performance: time } = yield transformer_1.transform(source instanceof Buffer ? source.toString() : source, { sourcemap: opts.sourceMap, now });
if (next_sourcemap) {
let merged_sourcemap = next_sourcemap;
if (last_sourcemap) {
next_sourcemap.file = last_sourcemap.file;
next_sourcemap.sourceRoot = last_sourcemap.sourceRoot;
let source_gen = sorcery.SourceMapGenerator.fromSourceMap(yield new sorcery.SourceMapConsumer(next_sourcemap));
source_gen.applySourceMap(yield new sorcery.SourceMapConsumer(last_sourcemap));
merged_sourcemap = source_gen.toJSON();
}
time.sourcemap = now();
if (opts.benchmark)
show_performance(time, opts);
return [code, merged_sourcemap];
}
else {
if (opts.benchmark)
show_performance(time, opts);
return [code];
}
});
}
function show_performance(time, opts = {}) {
console.log(" Fluorine Loader transformed", opts._filename, "in", i((time.sourcemap !== undefined ? time.sourcemap : time.walk) - time.start) + "ms");
console.log(`
- parse ..................${h(time.parse - time.start)}ms
- walk ...................${h(time.walk - time.parse)}ms
- visit ................${h(time.visit)}ms
- transform_element ..${h(time.transform_element)}ms
- transform_catalyst .${h(time.transform_catalyst)}ms
- md5 ..................${h(time.md5)}ms
${time.sourcemap !== undefined
? `- sourcemap ..............${h(time.sourcemap - time.walk)}ms`
: ""}
`.slice(1, -1));
}
function h(num) {
let prefix = "";
for (let ix = 0; ix < 3 - ("" + Math.floor(num)).length; ix += 1)
prefix += ".";
return prefix + " " + i(num);
}
function i(num) {
if (Math.floor(num) == num)
return "" + num;
else
return num.toFixed(3);
}
//# sourceMappingURL=index.js.map