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