diff --git a/.eslintignore b/.eslintignore
index d05df27..378eac2 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1 +1 @@
-web_modules
+build
diff --git a/.gitignore b/.gitignore
index de5f652..87bb06d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,9 @@
# Dependencies
node_modules
-web_modules
# Generated
+build
stream-lens.zip
# Logs
diff --git a/background.html b/background.html
index 067913f..162bc2e 100644
--- a/background.html
+++ b/background.html
@@ -1,5 +1,5 @@
StreamLens
-
-
+
+
diff --git a/background/badge.js b/background/badge.js
index 73849db..2a33853 100644
--- a/background/badge.js
+++ b/background/badge.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { some, isEmpty, size } from '/web_modules/lodash-es.js';
+import { some, isEmpty, size } from 'lodash-es';
/** @typedef {import('./store').SLStore} SLStore */
diff --git a/background/index.js b/background/index.js
index a5ac0d4..e028407 100644
--- a/background/index.js
+++ b/background/index.js
@@ -1,8 +1,8 @@
/**
* External dependencies
*/
-import createStore from '/web_modules/unistore.js';
-import { primary } from '/web_modules/unistore-browser-sync.js';
+import createStore from 'unistore';
+import { primary } from 'unistore-browser-sync';
/**
* Internal dependencies
diff --git a/background/oauth.js b/background/oauth.js
index c5d4f73..9e6b6f3 100644
--- a/background/oauth.js
+++ b/background/oauth.js
@@ -1,12 +1,12 @@
/**
* External dependencies
*/
-import { snakeCase } from '/web_modules/lodash-es.js';
+import { snakeCase } from 'lodash-es';
/**
* Project dependencies
*/
-import { authRedirectURL } from '/config.js';
+import { authRedirectURL } from '../config.js';
/**
* Suported authorization request parameters, values serving as defaults.
diff --git a/background/providers/twitch.js b/background/providers/twitch.js
index 263def5..d00afa4 100644
--- a/background/providers/twitch.js
+++ b/background/providers/twitch.js
@@ -1,12 +1,12 @@
/**
* External dependencies
*/
-import { find, chunk } from '/web_modules/lodash-es.js';
+import { find, chunk } from 'lodash-es';
/**
* Project dependencies
*/
-import { applications } from '/config.js';
+import { applications } from '../../config.js';
/**
* Internal dependencies
diff --git a/background/store/actions.js b/background/store/actions.js
index 18cc9bb..1e09f49 100644
--- a/background/store/actions.js
+++ b/background/store/actions.js
@@ -1,12 +1,12 @@
/**
* External dependencies
*/
-import { omit, reject } from '/web_modules/lodash-es.js';
+import { omit, reject } from 'lodash-es';
/**
* Project dependencies
*/
-import { applications } from '/config.js';
+import { applications } from '../../config.js';
/**
* Internal dependencies
diff --git a/manifest.json b/manifest.json
index dfdd3cc..1fac50d 100644
--- a/manifest.json
+++ b/manifest.json
@@ -21,7 +21,7 @@
"content_scripts": [
{
"matches": [ "https://streamlens.app/auth/" ],
- "js": [ "web_modules/webextension-polyfill.js", "auth.js" ],
+ "js": [ "node_modules/webextension-polyfill/dist/browser-polyfill.js", "auth.js" ],
"all_frames": true
}
],
diff --git a/options.html b/options.html
index 7c2ead0..702c658 100644
--- a/options.html
+++ b/options.html
@@ -6,5 +6,5 @@
-
-
+
+
diff --git a/options/components/color-scheme-setting.js b/options/components/color-scheme-setting.js
index 00797d5..5afb373 100644
--- a/options/components/color-scheme-setting.js
+++ b/options/components/color-scheme-setting.js
@@ -1,13 +1,12 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Project dependencies
*/
-import useSelect from '/common/hooks/use-select.js';
-import useDispatch from '/common/hooks/use-dispatch.js';
+import { useSelect, useDispatch } from '@streamlens/hooks';
/**
* Internal dependencies
diff --git a/options/components/provider-authorization.js b/options/components/provider-authorization.js
index 4b87caa..611f4ac 100644
--- a/options/components/provider-authorization.js
+++ b/options/components/provider-authorization.js
@@ -1,14 +1,13 @@
/**
* External dependencies
*/
-import { h, Fragment } from '/web_modules/preact.js';
+import { h, Fragment } from 'preact';
/**
* Project dependencies
*/
-import ProviderLabel from '/common/components/provider-label.js';
-import useSelect from '/common/hooks/use-select.js';
-import useDispatch from '/common/hooks/use-dispatch.js';
+import { ProviderLabel } from '@streamlens/components';
+import { useSelect, useDispatch } from '@streamlens/hooks';
/**
* Internal dependencies
diff --git a/options/components/provider-authorizations.js b/options/components/provider-authorizations.js
index 0ae56e1..70973a6 100644
--- a/options/components/provider-authorizations.js
+++ b/options/components/provider-authorizations.js
@@ -1,12 +1,12 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Project dependencies
*/
-import useSelect from '/common/hooks/use-select.js';
+import { useSelect } from '@streamlens/hooks';
/**
* Internal dependencies
diff --git a/options/components/provider-token-error.js b/options/components/provider-token-error.js
index 9b8da54..72d59d6 100644
--- a/options/components/provider-token-error.js
+++ b/options/components/provider-token-error.js
@@ -1,14 +1,14 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Project dependencies
*/
-import useDispatch from '/common/hooks/use-dispatch.js';
-import Notice from '/common/components/notice.js';
-import { getProviderLabel } from '/common/components/provider-label.js';
+import { useDispatch } from '@streamlens/hooks';
+import { Notice } from '@streamlens/components';
+import { getProviderLabel } from '@streamlens/components/provider-label';
/**
* Returns a Token Errors element.
diff --git a/options/components/root.js b/options/components/root.js
index 9716aec..e9cca94 100644
--- a/options/components/root.js
+++ b/options/components/root.js
@@ -1,8 +1,8 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
-import { StoreContext } from '/web_modules/prsh.js';
+import { h } from 'preact';
+import { StoreContext } from 'prsh';
/**
* Internal dependencies
diff --git a/options/components/section.js b/options/components/section.js
index 2846b5e..e568405 100644
--- a/options/components/section.js
+++ b/options/components/section.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/** @typedef {import('preact').ComponentChildren} ComponentChildren */
diff --git a/options/index.js b/options/index.js
index 47a255e..5c35f2d 100644
--- a/options/index.js
+++ b/options/index.js
@@ -1,9 +1,9 @@
/**
* External dependencies
*/
-import { render, h } from '/web_modules/preact.js';
-import createStore from '/web_modules/unistore.js';
-import { replica } from '/web_modules/unistore-browser-sync.js';
+import { render, h } from 'preact';
+import createStore from 'unistore';
+import { replica } from 'unistore-browser-sync';
/**
* Internal dependencies
diff --git a/package-lock.json b/package-lock.json
index 76397c5..9ea467b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,9 +7,15 @@
"": {
"name": "stream-lens",
"version": "1.3.2",
+ "bundleDependencies": [
+ "webextension-polyfill"
+ ],
"license": "GPL-3.0-or-later",
+ "workspaces": [
+ "packages/**"
+ ],
"dependencies": {
- "lodash-es": "^4.17.15",
+ "lodash-es": "^4.17.21",
"preact": "^10.4.7",
"prsh": "^1.0.1",
"unistore": "^3.5.2",
@@ -17,21 +23,17 @@
"webextension-polyfill": "^0.6.0"
},
"devDependencies": {
- "@rollup/plugin-node-resolve": "^9.0.0",
- "@types/lodash-es": "^4.17.3",
+ "@types/lodash-es": "^4.17.4",
+ "@types/node": "^14.14.32",
"@wordpress/eslint-plugin": "^7.1.0",
- "es-module-lexer": "^0.3.24",
+ "esbuild": "^0.8.56",
"eslint": "^7.7.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-jsdoc": "^30.2.2",
"eslint-plugin-prettier": "^3.1.4",
- "esm-root-loader": "^0.1.0",
"fast-glob": "^3.2.4",
- "magic-string": "^0.25.7",
"npm-pack-zip": "^1.2.7",
"prettier": "npm:wp-prettier@^2.0.5",
- "rollup": "^2.26.0",
- "rollup-plugin-sourcemaps": "^0.6.2",
"typescript": "^4.2.3",
"web-ext-types": "^3.2.1"
}
@@ -216,36 +218,13 @@
"node": ">= 8"
}
},
- "node_modules/@rollup/plugin-node-resolve": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz",
- "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^3.1.0",
- "@types/resolve": "1.17.1",
- "builtin-modules": "^3.1.0",
- "deepmerge": "^4.2.2",
- "is-module": "^1.0.0",
- "resolve": "^1.17.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
+ "node_modules/@streamlens/components": {
+ "resolved": "packages/components",
+ "link": true
},
- "node_modules/@rollup/pluginutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
- "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
- "dev": true,
- "dependencies": {
- "@types/estree": "0.0.39",
- "estree-walker": "^1.0.1",
- "picomatch": "^2.2.2"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
+ "node_modules/@streamlens/hooks": {
+ "resolved": "packages/hooks",
+ "link": true
},
"node_modules/@types/color-name": {
"version": "1.1.1",
@@ -253,12 +232,6 @@
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
- "node_modules/@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
- "dev": true
- },
"node_modules/@types/json-schema": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
@@ -272,29 +245,20 @@
"dev": true
},
"node_modules/@types/lodash-es": {
- "version": "4.17.3",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.3.tgz",
- "integrity": "sha512-iHI0i7ZAL1qepz1Y7f3EKg/zUMDwDfTzitx+AlHhJJvXwenP682ZyGbgPSc5Ej3eEAKVbNWKFuwOadCj5vBbYQ==",
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.4.tgz",
+ "integrity": "sha512-BBz79DCJbD2CVYZH67MBeHZRX++HF+5p8Mo5MzjZi64Wac39S3diedJYHZtScbRVf4DjZyN6LzA0SB0zy+HSSQ==",
"dev": true,
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/node": {
- "version": "14.0.27",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz",
- "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==",
+ "version": "14.14.32",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz",
+ "integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==",
"dev": true
},
- "node_modules/@types/resolve": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
- "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@typescript-eslint/experimental-utils": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
@@ -594,18 +558,6 @@
"lodash": "^4.17.14"
}
},
- "node_modules/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
"node_modules/axe-core": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz",
@@ -723,15 +675,6 @@
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
- "node_modules/builtin-modules": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
- "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -935,30 +878,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -1032,12 +957,6 @@
"node": ">= 0.4"
}
},
- "node_modules/es-module-lexer": {
- "version": "0.3.24",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.24.tgz",
- "integrity": "sha512-jm/i7KdJtaMDle921xIsA/MQQOGuZ6goYxhlV+k+gQNI7FtP4N6jknrmJvj++3ODpiyFGwQ4PIstJfHJQJNc+g==",
- "dev": true
- },
"node_modules/es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -1052,6 +971,16 @@
"node": ">= 0.4"
}
},
+ "node_modules/esbuild": {
+ "version": "0.8.56",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.56.tgz",
+ "integrity": "sha512-PTMdAWK3JI2MNW811znGssGP5GR44tQPr++VQ1rPP0n8Z1cTKbCPD3S/kXPLr3ZZDIwAaVm08fuFym6Rp8l/0A==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ }
+ },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -1359,12 +1288,6 @@
"node": ">=8"
}
},
- "node_modules/esm-root-loader": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/esm-root-loader/-/esm-root-loader-0.1.0.tgz",
- "integrity": "sha512-hS6DdhXGvdeID7DikNmxxCvLpKFR5PPooN9lgYfWRYpKD4SsDBqIUI9LF1ySpXmColO70EzXr9bBSN4wuFOb5Q==",
- "dev": true
- },
"node_modules/espree": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz",
@@ -1434,12 +1357,6 @@
"node": ">=4.0"
}
},
- "node_modules/estree-walker": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
- "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
- "dev": true
- },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -1578,19 +1495,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "node_modules/fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -1828,12 +1732,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
- "dev": true
- },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -2037,9 +1935,9 @@
"dev": true
},
"node_modules/lodash-es": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz",
- "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ=="
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
},
"node_modules/loose-envify": {
"version": "1.4.0",
@@ -2053,15 +1951,6 @@
"loose-envify": "cli.js"
}
},
- "node_modules/magic-string": {
- "version": "0.25.7",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
- "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
- "dev": true,
- "dependencies": {
- "sourcemap-codec": "^1.4.4"
- }
- },
"node_modules/map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
@@ -2795,34 +2684,6 @@
"rimraf": "bin.js"
}
},
- "node_modules/rollup": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.0.tgz",
- "integrity": "sha512-1kwpBuxQERz+ymjPLepaXqf3NMRDwSumuEfW/fsTtflmyyhI6ev7nLy5Vdadvn01zd0WWAojRuvA2+0coPGCGQ==",
- "dev": true,
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=10.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.1.2"
- }
- },
- "node_modules/rollup-plugin-sourcemaps": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.2.tgz",
- "integrity": "sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^3.0.9",
- "source-map-resolve": "^0.6.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/run-parallel": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
@@ -2919,22 +2780,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-resolve": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
- "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
- "dev": true,
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0"
- }
- },
- "node_modules/sourcemap-codec": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true
- },
"node_modules/spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
@@ -3301,7 +3146,8 @@
"node_modules/webextension-polyfill": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.6.0.tgz",
- "integrity": "sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg=="
+ "integrity": "sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg==",
+ "inBundle": true
},
"node_modules/which": {
"version": "2.0.2",
@@ -3521,6 +3367,12 @@
"engines": {
"node": ">= 0.10.0"
}
+ },
+ "packages/components": {
+ "name": "@streamlens/components"
+ },
+ "packages/hooks": {
+ "name": "@streamlens/hooks"
}
},
"dependencies": {
@@ -3688,30 +3540,11 @@
"fastq": "^1.6.0"
}
},
- "@rollup/plugin-node-resolve": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz",
- "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==",
- "dev": true,
- "requires": {
- "@rollup/pluginutils": "^3.1.0",
- "@types/resolve": "1.17.1",
- "builtin-modules": "^3.1.0",
- "deepmerge": "^4.2.2",
- "is-module": "^1.0.0",
- "resolve": "^1.17.0"
- }
+ "@streamlens/components": {
+ "version": "file:packages/components"
},
- "@rollup/pluginutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
- "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
- "dev": true,
- "requires": {
- "@types/estree": "0.0.39",
- "estree-walker": "^1.0.1",
- "picomatch": "^2.2.2"
- }
+ "@streamlens/hooks": {
+ "version": "file:packages/hooks"
},
"@types/color-name": {
"version": "1.1.1",
@@ -3719,12 +3552,6 @@
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
- "@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
- "dev": true
- },
"@types/json-schema": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
@@ -3738,29 +3565,20 @@
"dev": true
},
"@types/lodash-es": {
- "version": "4.17.3",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.3.tgz",
- "integrity": "sha512-iHI0i7ZAL1qepz1Y7f3EKg/zUMDwDfTzitx+AlHhJJvXwenP682ZyGbgPSc5Ej3eEAKVbNWKFuwOadCj5vBbYQ==",
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.4.tgz",
+ "integrity": "sha512-BBz79DCJbD2CVYZH67MBeHZRX++HF+5p8Mo5MzjZi64Wac39S3diedJYHZtScbRVf4DjZyN6LzA0SB0zy+HSSQ==",
"dev": true,
"requires": {
"@types/lodash": "*"
}
},
"@types/node": {
- "version": "14.0.27",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz",
- "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==",
+ "version": "14.14.32",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz",
+ "integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==",
"dev": true
},
- "@types/resolve": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
- "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@typescript-eslint/experimental-utils": {
"version": "2.34.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
@@ -4004,12 +3822,6 @@
"lodash": "^4.17.14"
}
},
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
"axe-core": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz",
@@ -4115,12 +3927,6 @@
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
- "builtin-modules": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
- "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
- "dev": true
- },
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -4290,24 +4096,12 @@
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -4369,12 +4163,6 @@
"string.prototype.trimstart": "^1.0.1"
}
},
- "es-module-lexer": {
- "version": "0.3.24",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.24.tgz",
- "integrity": "sha512-jm/i7KdJtaMDle921xIsA/MQQOGuZ6goYxhlV+k+gQNI7FtP4N6jknrmJvj++3ODpiyFGwQ4PIstJfHJQJNc+g==",
- "dev": true
- },
"es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -4386,6 +4174,12 @@
"is-symbol": "^1.0.2"
}
},
+ "esbuild": {
+ "version": "0.8.56",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.56.tgz",
+ "integrity": "sha512-PTMdAWK3JI2MNW811znGssGP5GR44tQPr++VQ1rPP0n8Z1cTKbCPD3S/kXPLr3ZZDIwAaVm08fuFym6Rp8l/0A==",
+ "dev": true
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -4628,12 +4422,6 @@
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
},
- "esm-root-loader": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/esm-root-loader/-/esm-root-loader-0.1.0.tgz",
- "integrity": "sha512-hS6DdhXGvdeID7DikNmxxCvLpKFR5PPooN9lgYfWRYpKD4SsDBqIUI9LF1ySpXmColO70EzXr9bBSN4wuFOb5Q==",
- "dev": true
- },
"espree": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz",
@@ -4683,12 +4471,6 @@
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
- "estree-walker": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
- "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
- "dev": true
- },
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -4809,13 +4591,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "dev": true,
- "optional": true
- },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -5002,12 +4777,6 @@
"is-extglob": "^2.1.1"
}
},
- "is-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
- "dev": true
- },
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -5169,9 +4938,9 @@
"dev": true
},
"lodash-es": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz",
- "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ=="
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
},
"loose-envify": {
"version": "1.4.0",
@@ -5182,15 +4951,6 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "magic-string": {
- "version": "0.25.7",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
- "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
- "dev": true,
- "requires": {
- "sourcemap-codec": "^1.4.4"
- }
- },
"map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
@@ -5768,25 +5528,6 @@
"glob": "^7.1.3"
}
},
- "rollup": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.0.tgz",
- "integrity": "sha512-1kwpBuxQERz+ymjPLepaXqf3NMRDwSumuEfW/fsTtflmyyhI6ev7nLy5Vdadvn01zd0WWAojRuvA2+0coPGCGQ==",
- "dev": true,
- "requires": {
- "fsevents": "~2.1.2"
- }
- },
- "rollup-plugin-sourcemaps": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.2.tgz",
- "integrity": "sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q==",
- "dev": true,
- "requires": {
- "@rollup/pluginutils": "^3.0.9",
- "source-map-resolve": "^0.6.0"
- }
- },
"run-parallel": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
@@ -5868,22 +5609,6 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
- "source-map-resolve": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
- "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0"
- }
- },
- "sourcemap-codec": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true
- },
"spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
diff --git a/package.json b/package.json
index e92c66d..1e77a9a 100644
--- a/package.json
+++ b/package.json
@@ -4,13 +4,18 @@
"type": "module",
"version": "1.3.2",
"description": "Browser extension for displaying live stream status for Twitch",
+ "workspaces": [
+ "packages/**"
+ ],
"scripts": {
+ "build": "esbuild background/index.js popup/index.js options/index.js --bundle --outdir=build --format=esm",
+ "dev": "esbuild background/index.js popup/index.js options/index.js --bundle --outdir=build --format=esm --sourcemap=inline --watch",
"test": "npm run test:lint && npm run test:types && npm run test:unit",
- "clean": "rm -rf web_modules",
- "prepare": "npm run clean && rollup -c",
+ "clean": "rm -rf build",
+ "prepare": "npm run clean && npm run build",
"test:lint": "eslint .",
"test:types": "tsc",
- "test:unit": "node --experimental-modules --experimental-loader=esm-root-loader test/runner.js",
+ "test:unit": "node test/runner.js",
"prebundle": "npm run prepare",
"bundle": "npm-pack-zip"
},
@@ -26,13 +31,10 @@
"license": "GPL-3.0-or-later",
"files": [
"_locales",
- "background",
- "common",
+ "build",
"fonts",
"images",
- "options",
- "popup",
- "web_modules",
+ "node_modules/webextension-polyfill/dist/browser-polyfill.js",
"auth.js",
"background.html",
"common.css",
@@ -46,29 +48,28 @@
"!test"
],
"dependencies": {
- "lodash-es": "^4.17.15",
+ "lodash-es": "^4.17.21",
"preact": "^10.4.7",
"prsh": "^1.0.1",
"unistore": "^3.5.2",
"unistore-browser-sync": "^1.0.0",
"webextension-polyfill": "^0.6.0"
},
+ "bundledDependencies": [
+ "webextension-polyfill"
+ ],
"devDependencies": {
- "@rollup/plugin-node-resolve": "^9.0.0",
- "@types/lodash-es": "^4.17.3",
+ "@types/lodash-es": "^4.17.4",
+ "@types/node": "^14.14.32",
"@wordpress/eslint-plugin": "^7.1.0",
- "es-module-lexer": "^0.3.24",
+ "esbuild": "^0.8.56",
"eslint": "^7.7.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-jsdoc": "^30.2.2",
"eslint-plugin-prettier": "^3.1.4",
- "esm-root-loader": "^0.1.0",
"fast-glob": "^3.2.4",
- "magic-string": "^0.25.7",
"npm-pack-zip": "^1.2.7",
"prettier": "npm:wp-prettier@^2.0.5",
- "rollup": "^2.26.0",
- "rollup-plugin-sourcemaps": "^0.6.2",
"typescript": "^4.2.3",
"web-ext-types": "^3.2.1"
}
diff --git a/common/components/card.js b/packages/components/card.js
similarity index 97%
rename from common/components/card.js
rename to packages/components/card.js
index e89da11..b463e75 100644
--- a/common/components/card.js
+++ b/packages/components/card.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Internal dependencies
diff --git a/common/components/color-scheme.js b/packages/components/color-scheme.js
similarity index 93%
rename from common/components/color-scheme.js
rename to packages/components/color-scheme.js
index 1f6d294..393584b 100644
--- a/common/components/color-scheme.js
+++ b/packages/components/color-scheme.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { useEffect } from '/web_modules/preact/hooks.js';
+import { useEffect } from 'preact/hooks';
/**
* Internal dependencies
diff --git a/common/components/icon-button.js b/packages/components/icon-button.js
similarity index 96%
rename from common/components/icon-button.js
rename to packages/components/icon-button.js
index 79a1409..ae67357 100644
--- a/common/components/icon-button.js
+++ b/packages/components/icon-button.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Internal dependencies
diff --git a/common/components/icon.js b/packages/components/icon.js
similarity index 98%
rename from common/components/icon.js
rename to packages/components/icon.js
index 4cead70..d025733 100644
--- a/common/components/icon.js
+++ b/packages/components/icon.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Icon details.
diff --git a/packages/components/index.js b/packages/components/index.js
new file mode 100644
index 0000000..1fac559
--- /dev/null
+++ b/packages/components/index.js
@@ -0,0 +1,9 @@
+export { default as Card } from './card.js';
+export { default as ColorScheme } from './color-scheme.js';
+export { default as IconButton } from './icon-button.js';
+export { default as Icon } from './icon.js';
+export { default as LoadingIndicator } from './loading-indicator.js';
+export { default as Notice } from './notice.js';
+export { default as ProviderLabel } from './provider-label.js';
+export { default as Tooltip } from './tooltip.js';
+export { default as VisuallyHidden } from './visually-hidden.js';
diff --git a/common/components/loading-indicator.js b/packages/components/loading-indicator.js
similarity index 93%
rename from common/components/loading-indicator.js
rename to packages/components/loading-indicator.js
index 216f8a0..3344637 100644
--- a/common/components/loading-indicator.js
+++ b/packages/components/loading-indicator.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Returns a Loading Indicator element.
diff --git a/common/components/notice.js b/packages/components/notice.js
similarity index 96%
rename from common/components/notice.js
rename to packages/components/notice.js
index 50dbf22..d5ded28 100644
--- a/common/components/notice.js
+++ b/packages/components/notice.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Internal dependencies
diff --git a/packages/components/package.json b/packages/components/package.json
new file mode 100644
index 0000000..c841e09
--- /dev/null
+++ b/packages/components/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "@streamlens/components",
+ "private": true,
+ "type": "module"
+}
diff --git a/common/components/provider-label.js b/packages/components/provider-label.js
similarity index 93%
rename from common/components/provider-label.js
rename to packages/components/provider-label.js
index 6475ebf..f111248 100644
--- a/common/components/provider-label.js
+++ b/packages/components/provider-label.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h, Fragment } from '/web_modules/preact.js';
+import { h, Fragment } from 'preact';
/**
* Provider label mapping.
diff --git a/common/components/tooltip.js b/packages/components/tooltip.js
similarity index 96%
rename from common/components/tooltip.js
rename to packages/components/tooltip.js
index 60df0eb..a9444cc 100644
--- a/common/components/tooltip.js
+++ b/packages/components/tooltip.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/** @typedef {import('preact').ComponentChildren} ComponentChildren */
diff --git a/common/components/visually-hidden.js b/packages/components/visually-hidden.js
similarity index 93%
rename from common/components/visually-hidden.js
rename to packages/components/visually-hidden.js
index 04ca407..f0aaa52 100644
--- a/common/components/visually-hidden.js
+++ b/packages/components/visually-hidden.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/** @typedef {import('preact').ComponentChildren} ComponentChildren */
diff --git a/packages/hooks/index.js b/packages/hooks/index.js
new file mode 100644
index 0000000..0ffa1f8
--- /dev/null
+++ b/packages/hooks/index.js
@@ -0,0 +1,2 @@
+export { default as useDispatch } from './use-dispatch.js';
+export { default as useSelect } from './use-select.js';
diff --git a/packages/hooks/package.json b/packages/hooks/package.json
new file mode 100644
index 0000000..fc5f7f8
--- /dev/null
+++ b/packages/hooks/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "@streamlens/hooks",
+ "private": true,
+ "type": "module"
+}
diff --git a/common/hooks/use-dispatch.js b/packages/hooks/use-dispatch.js
similarity index 86%
rename from common/hooks/use-dispatch.js
rename to packages/hooks/use-dispatch.js
index 0d765c1..9e0999a 100644
--- a/common/hooks/use-dispatch.js
+++ b/packages/hooks/use-dispatch.js
@@ -1,7 +1,7 @@
/**
* Internal dependencies
*/
-import { useStore } from '/web_modules/prsh.js';
+import { useStore } from 'prsh';
/**
* Hook which returns a dispatch function, from the store context if available.
diff --git a/common/hooks/use-select.js b/packages/hooks/use-select.js
similarity index 76%
rename from common/hooks/use-select.js
rename to packages/hooks/use-select.js
index c04aa45..eded215 100644
--- a/common/hooks/use-select.js
+++ b/packages/hooks/use-select.js
@@ -1,9 +1,9 @@
/**
* External dependencies
*/
-import { useSelector } from '/web_modules/prsh.js';
+import { useSelector } from 'prsh';
-/** @typedef {import('/background/store.js').SLState} SLState */
+/** @typedef {import('/background/store').SLState} SLState */
/**
* Hook which returns a value derived using a given selector function, updated
diff --git a/popup.html b/popup.html
index 403c3e2..e17612c 100644
--- a/popup.html
+++ b/popup.html
@@ -6,5 +6,5 @@
-
-
+
+
diff --git a/popup/components/getting-started.js b/popup/components/getting-started.js
index b153c99..1ea3221 100644
--- a/popup/components/getting-started.js
+++ b/popup/components/getting-started.js
@@ -1,14 +1,14 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
-import { isEmpty } from '/web_modules/lodash-es.js';
+import { h } from 'preact';
+import { isEmpty } from 'lodash-es';
/**
* Project dependencies
*/
-import useSelect from '/common/hooks/use-select.js';
-import Card from '/common/components/card.js';
+import { useSelect } from '@streamlens/hooks';
+import { Card } from '@streamlens/components';
/**
* Returns a Getting Started element.
diff --git a/popup/components/no-search-results.js b/popup/components/no-search-results.js
index e0df506..1da254e 100644
--- a/popup/components/no-search-results.js
+++ b/popup/components/no-search-results.js
@@ -1,12 +1,12 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Project dependencies
*/
-import Card from '/common/components/card.js';
+import { Card } from '@streamlens/components';
/**
* Returns a No Streams Live element.
diff --git a/popup/components/no-streams-live.js b/popup/components/no-streams-live.js
index cb5e7a2..abbe33b 100644
--- a/popup/components/no-streams-live.js
+++ b/popup/components/no-streams-live.js
@@ -1,12 +1,12 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/**
* Project dependencies
*/
-import Card from '/common/components/card.js';
+import { Card } from '@streamlens/components';
/**
* Returns a No Streams Live element.
diff --git a/popup/components/root.js b/popup/components/root.js
index 9b18f7b..89bee86 100644
--- a/popup/components/root.js
+++ b/popup/components/root.js
@@ -1,13 +1,13 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
-import { StoreContext } from '/web_modules/prsh.js';
+import { h } from 'preact';
+import { StoreContext } from 'prsh';
/**
* Project dependencies
*/
-import ColorScheme from '/common/components/color-scheme.js';
+import { ColorScheme } from '@streamlens/components';
/**
* Internal dependencies
diff --git a/popup/components/search-context.js b/popup/components/search-context.js
index a9f37c8..5d64d06 100644
--- a/popup/components/search-context.js
+++ b/popup/components/search-context.js
@@ -1,8 +1,8 @@
/**
* External dependencies
*/
-import { h, createContext } from '/web_modules/preact.js';
-import { useState } from '/web_modules/preact/hooks.js';
+import { h, createContext } from 'preact';
+import { useState } from 'preact/hooks';
/** @typedef {import('preact').ComponentChildren} ComponentChildren */
diff --git a/popup/components/stream-list.js b/popup/components/stream-list.js
index bfdc14d..4c7ddde 100644
--- a/popup/components/stream-list.js
+++ b/popup/components/stream-list.js
@@ -1,15 +1,15 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
-import { size, reject, deburr, clamp } from '/web_modules/lodash-es.js';
-import { useContext, useState, useRef } from '/web_modules/preact/hooks.js';
+import { h } from 'preact';
+import { size, reject, deburr, clamp } from 'lodash-es';
+import { useContext, useState, useRef } from 'preact/hooks';
/**
* Project dependencies
*/
-import LoadingIndicator from '/common/components/loading-indicator.js';
-import useSelect from '/common/hooks/use-select.js';
+import { LoadingIndicator } from '@streamlens/components';
+import { useSelect } from '@streamlens/hooks';
/**
* Internal dependencies
diff --git a/popup/components/stream.js b/popup/components/stream.js
index 378aff7..93b0921 100644
--- a/popup/components/stream.js
+++ b/popup/components/stream.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
+import { h } from 'preact';
/** @typedef {import('/background/store').SLStream} SLStream */
diff --git a/popup/components/token-errors.js b/popup/components/token-errors.js
index dd51dcb..4b2f79f 100644
--- a/popup/components/token-errors.js
+++ b/popup/components/token-errors.js
@@ -1,16 +1,15 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
-import { findKey } from '/web_modules/lodash-es.js';
+import { h } from 'preact';
+import { findKey } from 'lodash-es';
/**
* Project dependencies
*/
-import Notice from '/common/components/notice.js';
-import { getProviderLabel } from '/common/components/provider-label.js';
-import useSelect from '/common/hooks/use-select.js';
-import useDispatch from '/common/hooks/use-dispatch.js';
+import { Notice } from '@streamlens/components';
+import { getProviderLabel } from '@streamlens/components/provider-label';
+import { useSelect, useDispatch } from '@streamlens/hooks';
/**
* Returns a Token Errors element.
diff --git a/popup/components/toolbar.js b/popup/components/toolbar.js
index 081244e..68e68b8 100644
--- a/popup/components/toolbar.js
+++ b/popup/components/toolbar.js
@@ -1,21 +1,20 @@
/**
* External dependencies
*/
-import { h } from '/web_modules/preact.js';
-import { useContext, useRef, useEffect } from '/web_modules/preact/hooks.js';
+import { h } from 'preact';
+import { useContext, useRef, useEffect } from 'preact/hooks';
/**
* Project dependencies
*/
-import IconButton from '/common/components/icon-button.js';
-import VisuallyHidden from '/common/components/visually-hidden.js';
+import { IconButton, VisuallyHidden } from '@streamlens/components';
/**
* Internal dependencies
*/
import { SearchContext } from './search-context.js';
-/** @typedef {import('/common/components/tooltip').TooltipPosition} TooltipPosition */
+/** @typedef {import('@streamlens/components/tooltip').TooltipPosition} TooltipPosition */
/**
* Returns a stream list toolbar.
diff --git a/popup/index.js b/popup/index.js
index 47a255e..5c35f2d 100644
--- a/popup/index.js
+++ b/popup/index.js
@@ -1,9 +1,9 @@
/**
* External dependencies
*/
-import { render, h } from '/web_modules/preact.js';
-import createStore from '/web_modules/unistore.js';
-import { replica } from '/web_modules/unistore-browser-sync.js';
+import { render, h } from 'preact';
+import createStore from 'unistore';
+import { replica } from 'unistore-browser-sync';
/**
* Internal dependencies
diff --git a/rollup.config.js b/rollup.config.js
deleted file mode 100644
index 63be64a..0000000
--- a/rollup.config.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import { nodeResolve } from '@rollup/plugin-node-resolve';
-import sourcemaps from 'rollup-plugin-sourcemaps';
-import { parse } from 'es-module-lexer';
-import MagicString from 'magic-string';
-
-const dependencies = [
- 'lodash-es',
- 'preact',
- 'preact/hooks',
- 'prsh',
- 'unistore',
- 'unistore-browser-sync',
- 'webextension-polyfill',
-];
-
-const mapWebModules = {
- async renderChunk( code ) {
- const [ imports ] = await parse( code );
- let magicString;
-
- for ( let i = imports.length - 1; i >= 0; i-- ) {
- const { s: start, e: end } = imports[ i ];
- const source = code.substring( start, end );
- if ( dependencies.includes( source ) ) {
- if ( ! magicString ) {
- magicString = new MagicString( code );
- }
-
- magicString.overwrite( start, end, '/web_modules/' + source + '.js' );
- }
- }
-
- if ( ! magicString ) {
- return null;
- }
-
- return {
- code: magicString.toString(),
- map: magicString.generateMap( { hires: true } ),
- };
- },
-};
-
-export default /** @type {import('rollup').RollupOptions[]} */ ( dependencies.map(
- ( dependency ) => ( {
- input: dependency,
- context: 'window',
- output: {
- sourcemap: 'inline',
- file: `web_modules/${ dependency }.js`,
- format: 'esm',
- },
- external: dependencies,
- plugins: [ nodeResolve(), mapWebModules, sourcemaps() ],
- } )
-) );
diff --git a/test/runner.js b/test/runner.js
index a380275..bf2a524 100644
--- a/test/runner.js
+++ b/test/runner.js
@@ -11,7 +11,7 @@ import glob from 'fast-glob';
import './setup.js';
( async () => {
- const suites = glob.stream( '+(background|common|options|popup)/**/test/*.js' );
+ const suites = glob.stream( '+(background|packages|options|popup)/**/test/*.js' );
console.log( 'Running…\n' );
diff --git a/tsconfig.json b/tsconfig.json
index 8c4137e..bdb77a5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,40 +2,26 @@
"compilerOptions": {
"baseUrl": ".",
"paths": {
- "/web_modules/*.js": [
- "node_modules/@types/*",
- "node_modules/*",
- "web_modules/*.js"
- ],
- "/*": [
- "*"
- ]
+ "/*": [ "*" ]
},
"module": "esnext",
"moduleResolution": "node",
"target": "es2019",
"allowJs": true,
"checkJs": true,
- "lib": [
- "dom",
- "esnext"
- ],
+ "lib": [ "dom", "esnext" ],
"skipLibCheck": true,
- "typeRoots": [
- "node_modules/@types",
- "node_modules/web-ext-types"
- ],
+ "typeRoots": [ "node_modules/@types", "node_modules/web-ext-types" ],
"noEmit": true,
"strictNullChecks": true
},
"include": [
"background",
- "common",
+ "packages",
"options",
- "popup"
+ "popup",
+ "packages/hooks",
+ "packages/components"
],
- "exclude": [
- "node_modules",
- "web_modules"
- ]
+ "exclude": [ "node_modules" ]
}