loader/dist/loader.js
2026-06-04 19:21:45 +08:00

64 lines
2.5 KiB
JavaScript

(function(exports) {
"use strict";
const DEFAULT_VERSIONS = {
"state": "1.0.12",
"bootstrap": "1.0.4",
"base": "1.0.8",
"datatable": "1.0.7",
"kanban": "1.0.1",
"mindmap": "1.0.1",
"chart": "1.0.1",
"editor": "1.0.1",
"loader": "1.0.3"
};
const Loader = {
load: (...pkgs) => {
if (typeof document === "undefined") return;
const currentScript = document.currentScript;
const currentUrl = currentScript ? currentScript.src : "";
let tpl = "https://cdn.jsdelivr.net/npm/@apigo.cc/{project}@{tag}/dist/{project}.min.js";
if (currentUrl) {
if (currentUrl.includes("esm.sh")) {
tpl = "https://esm.sh/@apigo.cc/{project}@{tag}/dist/{project}.min.js";
} else if (currentUrl.includes("unpkg.com")) {
tpl = "https://unpkg.com/@apigo.cc/{project}@{tag}/dist/{project}.min.js";
} else if (currentUrl.includes("unpkg.zhimg.com")) {
tpl = "https://unpkg.zhimg.com/@apigo.cc/{project}@{tag}/dist/{project}.min.js";
} else if (currentUrl.includes("npm.elemecdn.com")) {
tpl = "https://npm.elemecdn.com/@apigo.cc/{project}@{tag}/dist/{project}.min.js";
} else if (currentUrl.includes("jsdelivr.net")) {
tpl = "https://cdn.jsdelivr.net/npm/@apigo.cc/{project}@{tag}/dist/{project}.min.js";
}
}
const importMap = { imports: {} };
pkgs.forEach((pkg) => {
const colonIdx = pkg.indexOf(":");
const name = colonIdx === -1 ? pkg : pkg.slice(0, colonIdx);
let version = colonIdx === -1 ? "" : pkg.slice(colonIdx + 1);
const key = name.toLowerCase();
const fullKey = `@apigo.cc/${key}`;
let url = "";
if (version && /^(https?:|\.|\/)/.test(version)) {
url = version;
} else {
version = version || DEFAULT_VERSIONS[key] || "latest";
url = tpl.replace(/{project}/g, key).replace(/{tag}/g, version);
}
importMap.imports[fullKey] = url;
});
const script = document.createElement("script");
script.type = "importmap";
script.textContent = JSON.stringify(importMap);
if (currentScript) {
currentScript.parentNode.insertBefore(script, currentScript);
} else {
document.head.appendChild(script);
}
}
};
globalThis.Loader = Loader;
exports.Loader = Loader;
exports.default = Loader;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
})(this.Loader = this.Loader || {});