diff --git a/.changeset/smart-colts-work.md b/.changeset/smart-colts-work.md new file mode 100644 index 0000000..05e314e --- /dev/null +++ b/.changeset/smart-colts-work.md @@ -0,0 +1,5 @@ +--- +"import-map-overrides": minor +--- + +Add new getOverrideScopes API for inheriting scoped dependencies for overridden modules diff --git a/docs/api.md b/docs/api.md index b44ce0d..1d58652 100644 --- a/docs/api.md +++ b/docs/api.md @@ -37,6 +37,46 @@ const overrideMapWithDisabledOverrides = */ ``` +### getOverrideScopes + +Returns a Promise that resolves with an import map containing scopes for overridden modules. The scopes are inherited from the default map. + +```html + + + + +``` + ### addOverride A function that accepts a string `moduleName` and a string `url` as arguments. This will set up an override **which takes effect diff --git a/eslint.config.mjs b/eslint.config.mjs index ce7c0c8..bcd5d8d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -25,7 +25,6 @@ export default [ }, rules: { - "es5/no-es6-methods": "error", "es5/no-es6-static-methods": "error", "es5/no-binary-and-octal-literals": "error", "es5/no-classes": "off", diff --git a/package.json b/package.json index 099b36e..947f36d 100644 --- a/package.json +++ b/package.json @@ -76,5 +76,5 @@ "dependencies": { "cookie": "^0.6.0" }, - "packageManager": "pnpm@9.11.0" + "packageManager": "pnpm@9.12.1" } diff --git a/src/api/js-api.js b/src/api/js-api.js index 66a68ff..8707fbd 100644 --- a/src/api/js-api.js +++ b/src/api/js-api.js @@ -147,6 +147,34 @@ function init() { fireChangedEvent(); return hasItem; }, + async getOverrideScopes() { + const scopes = {}; + const defaultMap = await imo.getDefaultMap(); + const overrideMap = imo.getOverrideMap(); + for (let moduleName in overrideMap.imports) { + const defaultUrl = defaultMap.imports[moduleName]; + if (defaultUrl) { + const defaultResolution = new URL(defaultUrl, window.location.href) + .href; + const overrideUrl = new URL( + overrideMap.imports[moduleName], + window.location.href, + ).href; + const overrideBase = + overrideUrl.slice(0, overrideUrl.lastIndexOf("/")) + "/"; + for (let scope in defaultMap.scopes || {}) { + if (defaultResolution.startsWith(scope)) { + scopes[overrideBase] = { + ...(scopes[overrideBase] || {}), + ...defaultMap.scopes[scope], + }; + } + } + } + } + + return { scopes }; + }, resetOverrides() { Object.keys(imo.getOverrideMap(true).imports).forEach((moduleName) => { imo.removeOverride(moduleName);