Skip to content

Commit

Permalink
Adding getUrlFromPort function and defaulting port numbers to localhost.
Browse files Browse the repository at this point in the history
  • Loading branch information
joeldenning committed Aug 13, 2019
1 parent 1e6e71b commit 6363869
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 46 deletions.
29 changes: 29 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,13 @@ console.log(overrideMap);
Accepts a string `moduleName` and a string `url` as arguments. This will set up an override **which takes effect
the next time you reload the page**. Returns the new override import map.

**Note that if you provide a port instead of a full url, that import-map-overrides will provide a default url to your localhost**.

```js
window.importMapOverrides.addOverride("react", "https://unpkg.com/react");

// Alternatively, provide a port number. Default url will be //localhost:8085/module1.js
window.importMapOverrides.addOverride("module1", "8085");
```

### `window.importMapOverrides.removeOverride(moduleName)`
Expand All @@ -121,6 +126,30 @@ no arguments and returns the reset override import map.
window.importMapOverrides.resetOverrides();
```

### `window.importMapOverrides.getUrlFromPort(moduleName, port)`

This API is used internally by import-map-overrides to create a full url when calling `addOverride()` with just a
port number:

```js
const defaultOverrideUrl = window.importMapOverrides.getUrlFromPort(
"module1",
"8085"
);
console.log(defaultOverrideUrl); // "//localhost:8085/module1.js"
```

The `getUrlFromPort` function is exposed as an API to allow you to customize the logic yourself:

```js
window.importMapOverrides.getUrlFromPort = (moduleName, port) =>
`http://127.0.0.1:${port}/${moduleName}.js`;

// Now whenever you call `addOverride()` with a port number, your custom logic will be called
window.importMapOverrides.addOverride("module1", "8085");
console.log(window.importMapOverrides.getOverrideMap().imports.module1); // "http://127.0.0.1:8085/module1.js"
```

## Events

The import-map-overrides library fires an event called `import-map-overrides:change` on the window whenever the
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@
"@babel/plugin-transform-react-jsx": "^7.3.0",
"@babel/preset-env": "^7.5.5",
"copyfiles": "^2.1.1",
"husky": "^3.0.1",
"preact": "^8.4.2",
"husky": "^3.0.3",
"preact": "^8.5.1",
"prettier": "^1.18.2",
"pretty-quick": "^1.11.1",
"rimraf": "^2.6.3",
"rollup": "^1.17.0",
"rollup": "^1.19.4",
"rollup-plugin-babel": "^4.3.3",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-postcss": "^2.0.3",
Expand Down
9 changes: 9 additions & 0 deletions src/api/js-api.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
const localStoragePrefix = "import-map-override:";

const portRegex = /^\d+$/g;

window.importMapOverrides = {
addOverride(moduleName, url) {
if (portRegex.test(url)) {
url = window.importMapOverrides.getUrlFromPort(moduleName, url);
}
const key = localStoragePrefix + moduleName;
localStorage.setItem(key, url);
fireChangedEvent();
Expand Down Expand Up @@ -40,6 +45,10 @@ window.importMapOverrides = {
return (
Object.keys(window.importMapOverrides.getOverrideMap().imports).length > 0
);
},
getUrlFromPort(moduleName, port) {
const fileName = moduleName.replace(/@/g, "").replace(/\//g, "-");
return `//localhost:${port}/${fileName}.js`;
}
};

Expand Down
32 changes: 15 additions & 17 deletions src/ui/list/module-dialog.component.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@ import { h, Component } from "preact";

export default class ModuleDialog extends Component {
getInitialOverrideUrl = () => {
const regex = new RegExp(
`//localhost:([0-9]+)/${defaultFileName(this.props.module.moduleName)}`
);
const regex = new RegExp(`//localhost:([0-9]+)/`);
const match = regex.exec(this.props.module.overrideUrl);
if (match) {
if (
match &&
this.props.module.overrideUrl ===
window.importMapOverrides.getUrlFromPort(
this.props.module.moduleName,
match[1]
)
) {
return match[1];
} else if (this.props.module.overrideUrl) {
return this.props.module.overrideUrl;
Expand Down Expand Up @@ -154,11 +159,10 @@ export default class ModuleDialog extends Component {

handleSubmit = evt => {
evt.preventDefault();
const fullUrl = this.getDerivedUrl();
if (this.props.module.isNew) {
this.props.addNewModule(this.state.moduleName, fullUrl);
this.props.addNewModule(this.state.moduleName, this.state.overrideUrl);
} else {
this.props.updateModuleUrl(fullUrl);
this.props.updateModuleUrl(this.state.overrideUrl);
}
};

Expand All @@ -167,7 +171,10 @@ export default class ModuleDialog extends Component {
? this.state.moduleName
: this.props.module.moduleName;
return portRegex.test(this.state.overrideUrl)
? `//localhost:${this.state.overrideUrl}/${defaultFileName(moduleName)}`
? window.importMapOverrides.getUrlFromPort(
moduleName,
this.state.overrideUrl
)
: this.state.overrideUrl;
};

Expand Down Expand Up @@ -197,12 +204,3 @@ export default class ModuleDialog extends Component {
}

const portRegex = /^\d+$/;
const scopedPkgRegex = /^@.+\/.+$/;

function defaultFileName(name) {
if (scopedPkgRegex.test(name)) {
name = name.slice(name.indexOf("/") + 1);
}

return name.replace(/\//g, "") + ".js";
}
57 changes: 31 additions & 26 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -687,11 +687,16 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==

"@types/node@*", "@types/node@^12.6.2":
"@types/node@*":
version "12.6.8"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==

"@types/node@^12.6.9":
version "12.7.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.1.tgz#3b5c3a26393c19b400844ac422bd0f631a94d69d"
integrity sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==

"@types/normalize-package-data@^2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
Expand Down Expand Up @@ -722,10 +727,10 @@ accepts@~1.3.5:
mime-types "~2.1.24"
negotiator "0.6.2"

acorn@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3"
integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==
acorn@^6.2.1:
version "6.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==

ajv@6.5.3:
version "6.5.3"
Expand Down Expand Up @@ -1073,7 +1078,7 @@ convert-source-map@^1.1.0:
dependencies:
safe-buffer "~5.1.1"

copyfiles@^2.1.0:
copyfiles@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.1.1.tgz#d430e122d7880f92c45d372208b0af03b0c39db6"
integrity sha512-y6DZHve80whydXzBal7r70TBgKMPKesVRR1Sn/raUu7Jh/i7iSLSyGvYaq0eMJ/3Y/CKghwzjY32q1WzEnpp3Q==
Expand Down Expand Up @@ -1621,10 +1626,10 @@ html-comment-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==

husky@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.1.tgz#06152c28e129622b05fa09c494209de8cf2dfb59"
integrity sha512-PXBv+iGKw23GHUlgELRlVX9932feFL407/wHFwtsGeArp0dDM4u+/QusSQwPKxmNgjpSL+ustbOdQ2jetgAZbA==
husky@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.3.tgz#6f3fb99f60ef72cdf34e5d78445c2f798c441b1d"
integrity sha512-DBBMPSiBYEMx7EVUTRE/ymXJa/lOL+WplcsV/lZu+/HHGt0gzD+5BIz9EJnCrWyUa7hkMuBh7/9OZ04qDkM+Nw==
dependencies:
chalk "^2.4.2"
cosmiconfig "^5.2.1"
Expand All @@ -1633,7 +1638,7 @@ husky@^3.0.1:
is-ci "^2.0.0"
opencollective-postinstall "^2.0.2"
pkg-dir "^4.2.0"
please-upgrade-node "^3.1.1"
please-upgrade-node "^3.2.0"
read-pkg "^5.1.1"
run-node "^1.0.0"
slash "^3.0.0"
Expand Down Expand Up @@ -2260,10 +2265,10 @@ pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"

please-upgrade-node@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==
please-upgrade-node@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
dependencies:
semver-compare "^1.0.0"

Expand Down Expand Up @@ -2615,10 +2620,10 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5:
source-map "^0.6.1"
supports-color "^6.1.0"

preact@^8.4.2:
version "8.4.2"
resolved "https://registry.yarnpkg.com/preact/-/preact-8.4.2.tgz#1263b974a17d1ea80b66590e41ef786ced5d6a23"
integrity sha512-TsINETWiisfB6RTk0wh3/mvxbGRvx+ljeBccZ4Z6MPFKgu/KFGyf2Bmw3Z/jlXhL5JlNKY6QAbA9PVyzIy9//A==
preact@^8.5.1:
version "8.5.1"
resolved "https://registry.yarnpkg.com/preact/-/preact-8.5.1.tgz#3a86cf5f3d4f6eb3349fa1f106ad59756c2af0e3"
integrity sha512-YVnCgcboxGrorFVIPjViqkEPOtfYVDxn5GOJuXHQZiOty+JOw7A+1xJytv/mb1O2QIIRC0SyT+kapA7Wj3jdZA==

prettier@^1.18.2:
version "1.18.2"
Expand Down Expand Up @@ -2913,14 +2918,14 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.8.1:
dependencies:
estree-walker "^0.6.1"

rollup@^1.17.0:
version "1.17.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.17.0.tgz#47ee8b04514544fc93b39bae06271244c8db7dfa"
integrity sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw==
rollup@^1.19.4:
version "1.19.4"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.19.4.tgz#0cb4e4d6fa127adab59b11d0be50e8dd1c78123a"
integrity sha512-G24w409GNj7i/Yam2cQla6qV2k6Nug8bD2DZg9v63QX/cH/dEdbNJg8H4lUm5M1bRpPKRUC465Rm9H51JTKOfQ==
dependencies:
"@types/estree" "0.0.39"
"@types/node" "^12.6.2"
acorn "^6.2.0"
"@types/node" "^12.6.9"
acorn "^6.2.1"

run-node@^1.0.0:
version "1.0.0"
Expand Down Expand Up @@ -2976,7 +2981,7 @@ serve-handler@6.1.0:
path-to-regexp "2.2.1"
range-parser "1.2.0"

serve@^11.0.2:
serve@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/serve/-/serve-11.1.0.tgz#1bfe2f4a08d0130cbf44711cdb7996cb742172e0"
integrity sha512-+4wpDtOSS+4ZLyDWMxThutA3iOTawX2+yDovOI8cjOUOmemyvNlHyFAsezBlSgbZKTYChI3tzA1Mh0z6XZ62qA==
Expand Down

0 comments on commit 6363869

Please sign in to comment.