Skip to main content
Module

x/importmap/testdata/scopes.json

Resolve specifiers with import maps.
Go to Latest
File
{ "importMapBaseURL": "https://example.com/app/index.html", "tests": { "Fallback to toplevel and between scopes": { "importMap": { "imports": { "a": "/a-1.mjs", "b": "/b-1.mjs", "c": "/c-1.mjs", "d": "/d-1.mjs" }, "scopes": { "/scope2/": { "a": "/a-2.mjs", "d": "/d-2.mjs" }, "/scope2/scope3/": { "b": "/b-3.mjs", "d": "/d-3.mjs" } } }, "tests": { "should fall back to `imports` when no scopes match": { "baseURL": "https://example.com/scope1/foo.mjs", "expectedResults": { "a": "https://example.com/a-1.mjs", "b": "https://example.com/b-1.mjs", "c": "https://example.com/c-1.mjs", "d": "https://example.com/d-1.mjs" } }, "should use a direct scope override": { "baseURL": "https://example.com/scope2/foo.mjs", "expectedResults": { "a": "https://example.com/a-2.mjs", "b": "https://example.com/b-1.mjs", "c": "https://example.com/c-1.mjs", "d": "https://example.com/d-2.mjs" } }, "should use an indirect scope override": { "baseURL": "https://example.com/scope2/scope3/foo.mjs", "expectedResults": { "a": "https://example.com/a-2.mjs", "b": "https://example.com/b-3.mjs", "c": "https://example.com/c-1.mjs", "d": "https://example.com/d-3.mjs" } } } }, "Relative URL scope keys": { "importMap": { "imports": { "a": "/a-1.mjs", "b": "/b-1.mjs", "c": "/c-1.mjs" }, "scopes": { "": { "a": "/a-empty-string.mjs" }, "./": { "b": "/b-dot-slash.mjs" }, "../": { "c": "/c-dot-dot-slash.mjs" } } }, "tests": { "An empty string scope is a scope with import map base URL": { "baseURL": "https://example.com/app/index.html", "expectedResults": { "a": "https://example.com/a-empty-string.mjs", "b": "https://example.com/b-dot-slash.mjs", "c": "https://example.com/c-dot-dot-slash.mjs" } }, "'./' scope is a scope with import map base URL's directory": { "baseURL": "https://example.com/app/foo.mjs", "expectedResults": { "a": "https://example.com/a-1.mjs", "b": "https://example.com/b-dot-slash.mjs", "c": "https://example.com/c-dot-dot-slash.mjs" } }, "'../' scope is a scope with import map base URL's parent directory": { "baseURL": "https://example.com/foo.mjs", "expectedResults": { "a": "https://example.com/a-1.mjs", "b": "https://example.com/b-1.mjs", "c": "https://example.com/c-dot-dot-slash.mjs" } } } }, "Package-like scenarios": { "importMap": { "imports": { "moment": "/node_modules/moment/src/moment.js", "moment/": "/node_modules/moment/src/", "lodash-dot": "./node_modules/lodash-es/lodash.js", "lodash-dot/": "./node_modules/lodash-es/", "lodash-dotdot": "../node_modules/lodash-es/lodash.js", "lodash-dotdot/": "../node_modules/lodash-es/" }, "scopes": { "/": { "moment": "/node_modules_3/moment/src/moment.js", "vue": "/node_modules_3/vue/dist/vue.runtime.esm.js" }, "/js/": { "lodash-dot": "./node_modules_2/lodash-es/lodash.js", "lodash-dot/": "./node_modules_2/lodash-es/", "lodash-dotdot": "../node_modules_2/lodash-es/lodash.js", "lodash-dotdot/": "../node_modules_2/lodash-es/" } } }, "tests": { "Base URLs inside the scope should use the scope if the scope has matching keys": { "baseURL": "https://example.com/js/app.mjs", "expectedResults": { "lodash-dot": "https://example.com/app/node_modules_2/lodash-es/lodash.js", "lodash-dot/foo": "https://example.com/app/node_modules_2/lodash-es/foo", "lodash-dotdot": "https://example.com/node_modules_2/lodash-es/lodash.js", "lodash-dotdot/foo": "https://example.com/node_modules_2/lodash-es/foo" } }, "Base URLs inside the scope fallback to less specific scope": { "baseURL": "https://example.com/js/app.mjs", "expectedResults": { "moment": "https://example.com/node_modules_3/moment/src/moment.js", "vue": "https://example.com/node_modules_3/vue/dist/vue.runtime.esm.js" } }, "Base URLs inside the scope fallback to toplevel": { "baseURL": "https://example.com/js/app.mjs", "expectedResults": { "moment/foo": "https://example.com/node_modules/moment/src/foo" } }, "Base URLs outside a scope shouldn't use the scope even if the scope has matching keys": { "baseURL": "https://example.com/app.mjs", "expectedResults": { "lodash-dot": "https://example.com/app/node_modules/lodash-es/lodash.js", "lodash-dotdot": "https://example.com/node_modules/lodash-es/lodash.js", "lodash-dot/foo": "https://example.com/app/node_modules/lodash-es/foo", "lodash-dotdot/foo": "https://example.com/node_modules/lodash-es/foo" } }, "Fallback to toplevel or not, depending on trailing slash match": { "baseURL": "https://example.com/app.mjs", "expectedResults": { "moment": "https://example.com/node_modules_3/moment/src/moment.js", "moment/foo": "https://example.com/node_modules/moment/src/foo" } }, "should still fail for package-like specifiers that are not declared": { "baseURL": "https://example.com/js/app.mjs", "expectedResults": { "underscore/": null, "underscore/foo": null } } } } }}