beyond
Version:
The Full Stack Universal Typescript Framework
71 lines (60 loc) • 2.58 kB
JavaScript
const vue = require('vue/compiler-sfc');
const {ProcessorSinglyCompiler} = require('beyond/sdk');
module.exports = class extends ProcessorSinglyCompiler {
get CompiledSource() {
return this.
}
_compileSource(source, is) {
const {extended} = this;
const {processor, distribution} = this.packager;
const filename = source.url;
const scopeId = source.relative.file
.slice(0, source.relative.file.length - 4) // remove .vue extension
.replace(/\//g, '__');
let css;
try {
if (extended.get('sass').has(source.relative.file)) {
const preprocessed = extended.get('sass').get(source.relative.file);
const {content, scoped, map: inMap} = preprocessed;
css = vue.compileStyle({id: scopeId, filename, scoped, source: content, inMap});
if (css.errors?.length) return {errors: css.errors};
}
}
catch (exc) {
return {errors: [`Error compiling style: ${exc.message}`]};
}
let descriptor;
try {
const options = {sourceMap: source.map, filename};
let errors;
({descriptor, errors} = vue.parse(source.content, options));
if (errors?.length) return {errors: ['Error parsing component']};
}
catch (exc) {
return {errors: [`Error parsing component: ${exc.message}`]};
}
let template;
try {
template = vue.compileTemplate({source: descriptor.template.content, filename, id: scopeId});
}
catch (exc) {
return {errors: [`Error parsing component: ${exc.message}`]};
}
const script = extended.get('ts').has(source.relative.file) ?
extended.get('ts').get(source.relative.file) : void 0;
// TODO @ftovar - @box
// Pendiente el caso de uso: no lee los archivos en las subparteas del path
if (!script) {
console.error(`File "${source.relative.file}" could not be processed`);
return;
}
const compiled = new this.
scopeId,
code: script.code, map: script.map,
css: css?.code, cssMap: css?.map,
template: template.code, templateMap: template.map
});
return {compiled};
}
}