209 lines
6.7 KiB
JavaScript
209 lines
6.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createResolver = exports.postcssModules = exports.parseNonce = exports.makeModule = exports.sourceMappingURL = exports.getContext = exports.fileSyntax = exports.modulesPaths = exports.posixRelative = void 0;
|
|
const path_1 = require("path");
|
|
const fs_1 = require("fs");
|
|
const cwd = process.cwd();
|
|
exports.posixRelative = require('path').sep === '/'
|
|
? (path) => `css-chunk:${(0, path_1.relative)(cwd, path)}`
|
|
: (path) => `css-chunk:${(0, path_1.relative)(cwd, path).replace(/\\/g, '/')}`;
|
|
function modulesPaths(absWorkingDir) {
|
|
let path = absWorkingDir || process.cwd();
|
|
let { root } = (0, path_1.parse)(path);
|
|
let found = [];
|
|
while (path !== root) {
|
|
const filename = (0, path_1.resolve)(path, 'node_modules');
|
|
if ((0, fs_1.existsSync)(filename)) {
|
|
found.push(filename);
|
|
}
|
|
path = (0, path_1.resolve)(path, '..');
|
|
}
|
|
return [...found];
|
|
}
|
|
exports.modulesPaths = modulesPaths;
|
|
function fileSyntax(filename) {
|
|
if (filename.endsWith('.scss')) {
|
|
return 'scss';
|
|
}
|
|
else if (filename.endsWith('.css')) {
|
|
return 'css';
|
|
}
|
|
else {
|
|
return 'indented';
|
|
}
|
|
}
|
|
exports.fileSyntax = fileSyntax;
|
|
const SASS_PLUGIN_CONTEXT = Symbol();
|
|
function getContext(buildOptions) {
|
|
let descriptor = Object.getOwnPropertyDescriptor(buildOptions, SASS_PLUGIN_CONTEXT);
|
|
if (descriptor === undefined) {
|
|
Object.defineProperty(buildOptions, SASS_PLUGIN_CONTEXT, descriptor = {
|
|
value: {
|
|
instances: 0
|
|
}
|
|
});
|
|
}
|
|
const instance = descriptor.value.instances++;
|
|
return {
|
|
instance,
|
|
namespace: `sass-plugin-${instance}`,
|
|
sourcemap: !!buildOptions.sourcemap,
|
|
watched: {}
|
|
};
|
|
}
|
|
exports.getContext = getContext;
|
|
function sourceMappingURL(sourceMap) {
|
|
const data = Buffer.from(JSON.stringify(sourceMap), 'utf-8').toString('base64');
|
|
return `/*# sourceMappingURL=data:application/json;charset=utf-8;base64,${data} */`;
|
|
}
|
|
exports.sourceMappingURL = sourceMappingURL;
|
|
function requireTool(module, basedir) {
|
|
try {
|
|
return require(module);
|
|
}
|
|
catch (ignored) {
|
|
}
|
|
if (basedir)
|
|
try {
|
|
return require(require.resolve(module, { paths: [basedir] }));
|
|
}
|
|
catch (ignored) {
|
|
}
|
|
try {
|
|
return require(require.resolve(module, { paths: [process.cwd()] }));
|
|
}
|
|
catch (e) {
|
|
try {
|
|
return require(module);
|
|
}
|
|
catch (ignored) {
|
|
console.error(`Cannot find module '${module}', make sure it's installed. e.g. yarn add -D ${module}`, e);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
}
|
|
const cssTextModule = cssText => `\
|
|
export default \`${cssText.replace(/([$`\\])/g, '\\$1')}\`;
|
|
`;
|
|
const cssResultModule = cssText => `\
|
|
import {css} from "lit-element/lit-element.js";
|
|
export default css\`${cssText.replace(/([$`\\])/g, '\\$1')}\`;
|
|
`;
|
|
const styleModule = (cssText, nonce) => nonce ? `\
|
|
const css = \`${cssText.replace(/([$`\\])/g, '\\$1')}\`;
|
|
const style = document.createElement("style");
|
|
style.setAttribute("nonce", ${nonce});
|
|
style.appendChild(document.createTextNode(css));
|
|
document.head.appendChild(style);
|
|
export {css};
|
|
` : `\
|
|
const css = \`${cssText.replace(/([$`\\])/g, '\\$1')}\`;
|
|
document.head
|
|
.appendChild(document.createElement("style"))
|
|
.appendChild(document.createTextNode(css));
|
|
export {css};
|
|
`;
|
|
function makeModule(contents, type, nonce) {
|
|
switch (type) {
|
|
case 'style':
|
|
return styleModule(contents, nonce);
|
|
case 'lit-css':
|
|
return cssResultModule(contents);
|
|
case 'css-text':
|
|
return cssTextModule(contents);
|
|
default:
|
|
return contents;
|
|
}
|
|
}
|
|
exports.makeModule = makeModule;
|
|
function parseNonce(nonce) {
|
|
if (nonce) {
|
|
if (nonce.startsWith('window.') || nonce.startsWith('process.') || nonce.startsWith('globalThis.')) {
|
|
return nonce;
|
|
}
|
|
else {
|
|
return JSON.stringify(nonce);
|
|
}
|
|
}
|
|
else {
|
|
return nonce;
|
|
}
|
|
}
|
|
exports.parseNonce = parseNonce;
|
|
function postcssModules(options, plugins = []) {
|
|
const postcss = requireTool('postcss', options.basedir);
|
|
const postcssModulesPlugin = requireTool('postcss-modules', options.basedir);
|
|
return async function (source, dirname, path) {
|
|
let cssModule;
|
|
const { css } = await postcss([
|
|
postcssModulesPlugin({
|
|
...options,
|
|
getJSON(cssFilename, json, outputFileName) {
|
|
var _a;
|
|
cssModule = JSON.stringify(json, null, 2);
|
|
(_a = options.getJSON) === null || _a === void 0 ? void 0 : _a.call(options, cssFilename, json, outputFileName);
|
|
}
|
|
}),
|
|
...plugins
|
|
]).process(source, { from: path, map: false });
|
|
return {
|
|
contents: css,
|
|
pluginData: { exports: cssModule },
|
|
loader: 'js'
|
|
};
|
|
};
|
|
}
|
|
exports.postcssModules = postcssModules;
|
|
function createResolver(options = {}, loadPaths) {
|
|
if (options.prefer) {
|
|
const resolve = require('resolve');
|
|
const cache = {};
|
|
const prefer = options.prefer;
|
|
const opts = {
|
|
paths: ['.', ...loadPaths],
|
|
readPackageSync(readFileSync, pkgfile) {
|
|
let cached = cache[pkgfile];
|
|
if (!cached) {
|
|
const pkg = JSON.parse(readFileSync(pkgfile));
|
|
cached = cache[pkgfile] = { main: pkg[prefer] || pkg.main };
|
|
}
|
|
return cached;
|
|
}
|
|
};
|
|
return (id, basedir) => {
|
|
try {
|
|
opts.basedir = basedir;
|
|
return resolve.sync(id, opts);
|
|
}
|
|
catch (ignored) {
|
|
return id;
|
|
}
|
|
};
|
|
}
|
|
else {
|
|
const opts = {
|
|
paths: ['.', ...loadPaths]
|
|
};
|
|
return (id, basedir) => {
|
|
try {
|
|
opts.paths[0] = basedir;
|
|
let resolved = require.resolve(id, opts);
|
|
if (resolved.endsWith('.js')) {
|
|
resolved = resolved.slice(0, -3) + '.scss';
|
|
if (!(0, fs_1.existsSync)(resolved)) {
|
|
resolved = resolved.slice(0, -5) + '.sass';
|
|
if (!(0, fs_1.existsSync)(resolved)) {
|
|
resolved = resolved.slice(0, -5) + '.css';
|
|
}
|
|
}
|
|
}
|
|
return resolved;
|
|
}
|
|
catch (ignored) {
|
|
return id;
|
|
}
|
|
};
|
|
}
|
|
}
|
|
exports.createResolver = createResolver;
|
|
//# sourceMappingURL=utils.js.map
|