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
JavaScript
;
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;