vue-simple-compiler
Version:
A lib to compile Vue Single-File Component into plain JavaScript & CSS.
65 lines (64 loc) • 2.39 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createContext = exports.resolveFeatures = void 0;
const path_1 = require("path");
// @ts-ignore
const hash_sum_1 = __importDefault(require("hash-sum"));
const constants_1 = require("./constants");
const options_1 = require("./options");
const resolveFeatures = (descriptor, context) => {
const { filename, features, addedProps, addedCodeList, id } = context;
const scriptLang = (descriptor.script && descriptor.script.lang) ||
(descriptor.scriptSetup && descriptor.scriptSetup.lang) ||
'js';
features.hasTS = scriptLang === 'ts';
descriptor.styles.some((style) => {
if (style.scoped) {
features.hasScoped = true;
}
if (style.module) {
features.hasCSSModules = true;
}
features.hasStyle = true;
return features.hasScoped && features.hasCSSModules && features.hasStyle;
});
if (features.hasScoped) {
addedProps.push(['__scopeId', JSON.stringify(`data-v-${id}`)]);
}
if (features.hasCSSModules) {
addedProps.push(['__cssModules', `cssModules`]);
addedCodeList.push('const cssModules= {}');
}
if (!context.isProd) {
addedProps.push(['__file', JSON.stringify(filename.replace(/\\/g, '/'))]);
}
};
exports.resolveFeatures = resolveFeatures;
const createContext = (source, options) => {
const root = options?.root ?? constants_1.ROOT;
const filename = options?.filename ?? constants_1.FILENAME;
const fullpath = (0, path_1.join)(root, filename);
const destFilename = (0, options_1.getDestPath)(options?.filename ?? constants_1.FILENAME);
const id = options?.filename ? (0, hash_sum_1.default)(options.filename + source) : constants_1.ID;
const context = {
isProd: options?.isProd ?? false,
hmr: options?.hmr ?? false,
root,
filename,
fullpath,
id,
destFilename,
options: options ?? {},
features: {},
addedProps: [],
addedCodeList: [],
externalJsList: [],
externalCssList: [],
bindingMetadata: undefined,
};
return context;
};
exports.createContext = createContext;