vlang-loader
Version:
Webpack loader for the V programming language; supports JS and WASM builds
36 lines (35 loc) • 1.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const cross_spawn_1 = __importDefault(require("cross-spawn"));
let v_output = [];
const append_output = (out) => v_output.push(out);
const tmp_file = path_1.default.join(os_1.default.tmpdir(), '__v_webpack_tmp__');
const tmp_file_js = `${tmp_file}.js`;
function loader(_source) {
var _a, _b;
const cb = this.async();
const file_path = this.resourcePath;
const v_cmd = cross_spawn_1.default('v', ['-b', 'js', '-o', tmp_file, file_path], {});
(_a = v_cmd.stdout) === null || _a === void 0 ? void 0 : _a.on('data', append_output);
(_b = v_cmd.stderr) === null || _b === void 0 ? void 0 : _b.on('data', append_output);
v_cmd.on('close', code => {
if (code === 0) {
fs_1.default.readFile(tmp_file_js, (err, data) => {
fs_1.default.unlink(tmp_file_js, err1 => {
cb === null || cb === void 0 ? void 0 : cb(err !== null && err !== void 0 ? err : err1, data);
});
});
}
else {
cb === null || cb === void 0 ? void 0 : cb(new Error(v_output.join('\n')));
}
v_output = [];
});
}
exports.default = loader;