zephyr-rspress-plugin
Version:
Rspress plugin for Zephyr
90 lines (89 loc) • 3.08 kB
JavaScript
;
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, getters, values)=>{
var define = (defs, kind)=>{
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
[kind]: defs[key]
});
};
define(getters, "get");
define(values, "value");
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
const trackedHooks = new WeakMap();
function trackHook(plugin) {
if ('object' != typeof plugin || null === plugin || !('afterBuild' in plugin) || 'function' != typeof plugin.afterBuild || 'name' in plugin && 'zephyr-rspress-plugin-ssg' === plugin.name) return;
const existing = trackedHooks.get(plugin);
if (existing?.hook === plugin.afterBuild) return existing;
const originalHook = plugin.afterBuild;
const pending = new WeakMap();
const hook = function(config, isProd) {
let jobs = pending.get(config);
if (void 0 === jobs) {
jobs = [];
pending.set(config, jobs);
}
const currentJobs = jobs;
const job = Promise.resolve().then(async ()=>{
await Reflect.apply(originalHook, this, [
config,
isProd
]);
});
currentJobs.push(job);
const remove = ()=>{
const index = currentJobs.indexOf(job);
if (-1 !== index) currentJobs.splice(index, 1);
};
job.then(remove, remove);
return job;
};
plugin.afterBuild = hook;
const tracker = {
hook,
pending
};
trackedHooks.set(plugin, tracker);
return tracker;
}
function trackAfterBuildHooks(plugins) {
const trackers = plugins.map(trackHook).filter((tracker)=>void 0 !== tracker);
return async (config)=>{
await Promise.resolve();
const jobs = trackers.flatMap((tracker)=>{
const job = tracker.pending.get(config)?.shift();
return void 0 === job ? [] : [
job
];
});
await Promise.all(jobs);
};
}
__webpack_require__.d(__webpack_exports__, {
trackAfterBuildHooks: ()=>trackAfterBuildHooks
});
exports.trackAfterBuildHooks = __webpack_exports__.trackAfterBuildHooks;
for(var __rspack_i in __webpack_exports__)if (-1 === [
"trackAfterBuildHooks"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
value: true
});
//# sourceMappingURL=afterBuildHooks.js.map