UNPKG

rollup-plugin-static-import

Version:

Rollup plugin for copying imported files without modifying. It's basically a copy plugin with the added functionality of marking imported assets as external.

86 lines (85 loc) 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); var _nodeFs = /*#__PURE__*/ _interopRequireDefault(require("node:fs")); var _nodePath = /*#__PURE__*/ _interopRequireDefault(require("node:path")); var _glob = /*#__PURE__*/ _interopRequireDefault(require("glob")); var _pluginutils = require("@rollup/pluginutils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var makePathAbsolute = function(p, rootPath) { if (_nodePath.default.isAbsolute(p)) { return p; } return _nodePath.default.join(rootPath, p); }; var staticImport = function(options) { var pluginOptions = Object.assign({}, { include: [], exclude: [], projectRoot: process.cwd(), baseDir: "src" }, options); var projectRoot = pluginOptions.projectRoot; var absoluteIncludes = pluginOptions.include.map(function(p) { return makePathAbsolute(p, projectRoot); }); var absoluteExcludes = pluginOptions.exclude.map(function(p) { return makePathAbsolute(p, projectRoot); }); var filter = (0, _pluginutils.createFilter)(absoluteIncludes, absoluteExcludes, { resolve: false }); var baseDir = makePathAbsolute(pluginOptions.baseDir, projectRoot); var self = { name: "static-import", resolveId: function(source, importer) { var id = makePathAbsolute(_nodePath.default.join(_nodePath.default.dirname(importer || "./"), source), projectRoot); if (!filter(id)) { return; } // mark import external if it matches filters return { id: source, external: true }; }, buildStart: function buildStart() { var _this = this; // emit matching files and add them to watch list at the start of build absoluteIncludes.flatMap(function(inc) { return _glob.default.sync(inc); }).forEach(function(id) { _this.emitFile({ type: "asset", source: _nodeFs.default.readFileSync(id), fileName: _nodePath.default.relative(baseDir, id) }); _this.addWatchFile(id); }); }, watchChange: function watchChange(id) { if (!filter(id)) { return; } // emit file if changed file matches filters this.emitFile({ type: "asset", source: _nodeFs.default.readFileSync(id), fileName: _nodePath.default.relative(baseDir, id) }); } }; return self; }; var _default = staticImport;