71 lines
1.6 KiB
JavaScript
Executable File
71 lines
1.6 KiB
JavaScript
Executable File
"use strict"
|
|
// builtin tooling
|
|
const path = require("path")
|
|
|
|
// internal tooling
|
|
const applyConditions = require("./lib/apply-conditions")
|
|
const applyRaws = require("./lib/apply-raws")
|
|
const applyStyles = require("./lib/apply-styles")
|
|
const loadContent = require("./lib/load-content")
|
|
const parseStyles = require("./lib/parse-styles")
|
|
const resolveId = require("./lib/resolve-id")
|
|
|
|
function AtImport(options) {
|
|
options = {
|
|
root: process.cwd(),
|
|
path: [],
|
|
skipDuplicates: true,
|
|
resolve: resolveId,
|
|
load: loadContent,
|
|
plugins: [],
|
|
addModulesDirectories: [],
|
|
warnOnEmpty: true,
|
|
...options,
|
|
}
|
|
|
|
options.root = path.resolve(options.root)
|
|
|
|
// convert string to an array of a single element
|
|
if (typeof options.path === "string") options.path = [options.path]
|
|
|
|
if (!Array.isArray(options.path)) options.path = []
|
|
|
|
options.path = options.path.map(p => path.resolve(options.root, p))
|
|
|
|
return {
|
|
postcssPlugin: "postcss-import",
|
|
async Once(styles, { result, atRule, postcss }) {
|
|
const state = {
|
|
importedFiles: {},
|
|
hashFiles: {},
|
|
}
|
|
|
|
if (styles.source?.input?.file) {
|
|
state.importedFiles[styles.source.input.file] = {}
|
|
}
|
|
|
|
if (options.plugins && !Array.isArray(options.plugins)) {
|
|
throw new Error("plugins option must be an array")
|
|
}
|
|
|
|
const bundle = await parseStyles(
|
|
result,
|
|
styles,
|
|
options,
|
|
state,
|
|
[],
|
|
[],
|
|
postcss,
|
|
)
|
|
|
|
applyRaws(bundle)
|
|
applyConditions(bundle, atRule)
|
|
applyStyles(bundle, styles)
|
|
},
|
|
}
|
|
}
|
|
|
|
AtImport.postcss = true
|
|
|
|
module.exports = AtImport
|