123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
- var _chunkUTIF7XNJcjs = require('./chunk-UTIF7XNJ.cjs');
- // src/core/unplugin.ts
- var _unplugin = require('unplugin');
- // src/core/ctx.ts
- var _path = require('path');
- var _fs = require('fs');
- var _utils = require('@antfu/utils');
- var _pluginutils = require('@rollup/pluginutils');
- var _localpkg = require('local-pkg');
- var _addons = require('unimport/addons');
- var _unimport = require('unimport');
- var _magicstring = require('magic-string'); var _magicstring2 = _interopRequireDefault(_magicstring);
- // src/core/eslintrc.ts
- function generateESLintConfigs(imports, eslintrc) {
- const eslintConfigs = { globals: {} };
- imports.map((i) => _nullishCoalesce(i.as, () => ( i.name))).filter(Boolean).sort().forEach((name) => {
- eslintConfigs.globals[name] = eslintrc.globalsPropValue || true;
- });
- const jsonBody = JSON.stringify(eslintConfigs, null, 2);
- return jsonBody;
- }
- // src/core/resolvers.ts
- function normalizeImport(info, name) {
- if (typeof info === "string") {
- return {
- name: "default",
- as: name,
- from: info
- };
- }
- if ("path" in info) {
- return {
- from: info.path,
- as: info.name,
- name: info.importName,
- sideEffects: info.sideEffects
- };
- }
- return {
- name,
- as: name,
- ...info
- };
- }
- async function firstMatchedResolver(resolvers, fullname) {
- let name = fullname;
- for (const resolver of resolvers) {
- if (typeof resolver === "object" && resolver.type === "directive") {
- if (name.startsWith("v"))
- name = name.slice(1);
- else
- continue;
- }
- const resolved = await (typeof resolver === "function" ? resolver(name) : resolver.resolve(name));
- if (resolved)
- return normalizeImport(resolved, fullname);
- }
- }
- function resolversAddon(resolvers) {
- return {
- async matchImports(names, matched) {
- if (!resolvers.length)
- return;
- const dynamic = [];
- const sideEffects = [];
- await Promise.all([...names].map(async (name) => {
- const matchedImport = matched.find((i) => i.as === name);
- if (matchedImport) {
- if ("sideEffects" in matchedImport)
- sideEffects.push(..._utils.toArray.call(void 0, matchedImport.sideEffects).map((i) => normalizeImport(i, "")));
- return;
- }
- const resolved = await firstMatchedResolver(resolvers, name);
- if (resolved)
- dynamic.push(resolved);
- if (resolved == null ? void 0 : resolved.sideEffects)
- sideEffects.push(..._utils.toArray.call(void 0, resolved == null ? void 0 : resolved.sideEffects).map((i) => normalizeImport(i, "")));
- }));
- if (dynamic.length) {
- this.dynamicImports.push(...dynamic);
- this.invalidate();
- }
- if (dynamic.length || sideEffects.length)
- return [...matched, ...dynamic, ...sideEffects];
- }
- };
- }
- // src/core/ctx.ts
- function createContext(options = {}, root = process.cwd()) {
- var _a, _b;
- const imports = flattenImports(options.imports, options.presetOverriding);
- (_a = options.ignore) == null ? void 0 : _a.forEach((name) => {
- const i = imports.find((i2) => i2.as === name);
- if (i)
- i.disabled = true;
- });
- const {
- dts: preferDTS = _localpkg.isPackageExists.call(void 0, "typescript")
- } = options;
- const dirs = (_b = options.dirs) == null ? void 0 : _b.map((dir) => _path.resolve.call(void 0, root, dir));
- const eslintrc = options.eslintrc || {};
- eslintrc.enabled = eslintrc.enabled === void 0 ? false : eslintrc.enabled;
- eslintrc.filepath = eslintrc.filepath || "./.eslintrc-auto-import.json";
- eslintrc.globalsPropValue = eslintrc.globalsPropValue === void 0 ? true : eslintrc.globalsPropValue;
- const resolvers = options.resolvers ? [options.resolvers].flat(2) : [];
- const unimport = _unimport.createUnimport.call(void 0, {
- imports,
- presets: [],
- addons: [
- ...options.vueTemplate ? [_addons.vueTemplateAddon.call(void 0, )] : [],
- resolversAddon(resolvers),
- {
- declaration(dts2) {
- if (!dts2.endsWith("\n"))
- dts2 += "\n";
- return `// Generated by 'unplugin-auto-import'
- ${dts2}`;
- }
- }
- ]
- });
- const filter = _pluginutils.createFilter.call(void 0,
- options.include || [/\.[jt]sx?$/, /\.vue$/, /\.vue\?vue/, /\.svelte$/],
- options.exclude || [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/]
- );
- const dts = preferDTS === false ? false : preferDTS === true ? _path.resolve.call(void 0, root, "auto-imports.d.ts") : _path.resolve.call(void 0, root, preferDTS);
- function generateDTS(file) {
- const dir = _path.dirname.call(void 0, file);
- return unimport.generateTypeDeclarations({
- resolvePath: (i) => {
- if (i.from.startsWith(".") || _path.isAbsolute.call(void 0, i.from)) {
- const related = _utils.slash.call(void 0, _path.relative.call(void 0, dir, i.from).replace(/\.ts$/, ""));
- return !related.startsWith(".") ? `./${related}` : related;
- }
- return i.from;
- }
- });
- }
- function generateESLint() {
- return generateESLintConfigs(unimport.getImports(), eslintrc);
- }
- const writeConfigFilesThrottled = _utils.throttle.call(void 0, 500, false, writeConfigFiles);
- let lastDTS;
- let lastESLint;
- function writeConfigFiles() {
- const promises = [];
- if (dts) {
- const content = generateDTS(dts);
- if (content !== lastDTS) {
- lastDTS = content;
- promises.push(_fs.promises.writeFile(dts, content, "utf-8"));
- }
- }
- if (eslintrc.enabled && eslintrc.filepath) {
- const content = generateESLint();
- if (content !== lastESLint) {
- lastESLint = content;
- promises.push(_fs.promises.writeFile(eslintrc.filepath, content, "utf-8"));
- }
- }
- return Promise.all(promises);
- }
- async function scanDirs() {
- if (dirs == null ? void 0 : dirs.length) {
- await unimport.modifyDynamicImports(async (imports2) => {
- const exports = await _unimport.scanDirExports.call(void 0, dirs);
- exports.forEach((i) => i.__source = "dir");
- return [
- ...imports2.filter((i) => i.__source !== "dir"),
- ...exports
- ];
- });
- }
- writeConfigFilesThrottled();
- }
- async function transform(code, id) {
- const s = new (0, _magicstring2.default)(code);
- await unimport.injectImports(s, id);
- if (!s.hasChanged())
- return;
- writeConfigFilesThrottled();
- return {
- code: s.toString(),
- map: s.generateMap({ source: id, includeContent: true })
- };
- }
- if (!imports.length && !resolvers.length)
- console.warn("[auto-import] plugin installed but no imports has defined, see https://github.com/antfu/unplugin-auto-import#configurations for configurations");
- return {
- root,
- dirs,
- filter,
- scanDirs,
- writeConfigFiles,
- writeConfigFilesThrottled,
- transform,
- generateDTS,
- generateESLint
- };
- }
- function flattenImports(map, overriding = false) {
- const flat = {};
- _utils.toArray.call(void 0, map).forEach((definition) => {
- if (typeof definition === "string") {
- if (!_chunkUTIF7XNJcjs.presets[definition])
- throw new Error(`[auto-import] preset ${definition} not found`);
- const preset = _chunkUTIF7XNJcjs.presets[definition];
- definition = typeof preset === "function" ? preset() : preset;
- }
- for (const mod of Object.keys(definition)) {
- for (const id of definition[mod]) {
- const meta = {
- from: mod
- };
- let name;
- if (Array.isArray(id)) {
- name = id[1];
- meta.name = id[0];
- meta.as = id[1];
- } else {
- name = id;
- meta.name = id;
- meta.as = id;
- }
- if (flat[name] && !overriding)
- throw new Error(`[auto-import] identifier ${name} already defined with ${flat[name].from}`);
- flat[name] = meta;
- }
- }
- });
- return Object.values(flat);
- }
- // src/core/unplugin.ts
- var unplugin_default = _unplugin.createUnplugin.call(void 0, (options) => {
- let ctx = createContext(options);
- return {
- name: "unplugin-auto-import",
- enforce: "post",
- transformInclude(id) {
- return ctx.filter(id);
- },
- async transform(code, id) {
- return ctx.transform(code, id);
- },
- async buildStart() {
- await ctx.scanDirs();
- },
- async buildEnd() {
- await ctx.writeConfigFiles();
- },
- vite: {
- async handleHotUpdate({ file }) {
- var _a;
- if ((_a = ctx.dirs) == null ? void 0 : _a.some((dir) => file.startsWith(dir)))
- await ctx.scanDirs();
- },
- async configResolved(config) {
- if (ctx.root !== config.root) {
- ctx = createContext(options, config.root);
- await ctx.scanDirs();
- }
- }
- }
- };
- });
- exports.unplugin_default = unplugin_default;
|