summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpackages/anastasis-webui/clean_and_build.sh53
-rwxr-xr-xpackages/anastasis-webui/dev.mjs25
-rw-r--r--packages/anastasis-webui/html/stories.html (renamed from packages/anastasis-webui/stories.html)0
-rw-r--r--packages/anastasis-webui/html/ui-dev.html50
-rw-r--r--packages/anastasis-webui/html/ui.html (renamed from packages/anastasis-webui/ui.html)0
-rw-r--r--packages/anastasis-webui/package.json4
-rw-r--r--packages/anastasis-webui/src/main.test.ts48
-rw-r--r--packages/anastasis-webui/src/pages/home/AddingProviderScreen.tsx2
-rw-r--r--packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx16
-rw-r--r--packages/anastasis-webui/src/pages/home/authMethod/AuthMethodTotpSetup.tsx1
-rw-r--r--packages/anastasis-webui/src/stories.tsx21
-rw-r--r--packages/anastasis-webui/src/test-utils.ts201
-rw-r--r--packages/anastasis-webui/src/utils/index.tsx14
-rwxr-xr-xpackages/anastasis-webui/watch/reply.sh17
-rwxr-xr-xpackages/anastasis-webui/watch/send_reload.sh7
-rwxr-xr-xpackages/anastasis-webui/watch/serve.sh4
-rw-r--r--packages/anastasis-webui/watch/web_socket_client.request6
-rw-r--r--packages/anastasis-webui/watch/web_socket_server.reply5
-rwxr-xr-xpackages/taler-wallet-webextension/clean_and_build.sh2
-rw-r--r--packages/taler-wallet-webextension/package.json1
-rw-r--r--pnpm-lock.yaml316
21 files changed, 657 insertions, 136 deletions
diff --git a/packages/anastasis-webui/clean_and_build.sh b/packages/anastasis-webui/clean_and_build.sh
index 300ed8930..2fa3ec777 100755
--- a/packages/anastasis-webui/clean_and_build.sh
+++ b/packages/anastasis-webui/clean_and_build.sh
@@ -10,16 +10,51 @@ cp \
src/scss/fonts/materialdesignicons-webfont-4.9.95.woff2 \
dist/fonts
-echo css
-pnpm exec sass -I . ./src/scss/main.scss dist/main.css &
-echo js
-pnpm exec esbuild --log-level=error --bundle src/main.ts --outdir=dist --target=es6 --loader:.svg=dataurl --format=iife --sourcemap --jsx-factory=h --jsx-fragment=Fragment --platform=browser &
+function build_css() {
+ pnpm exec sass -I . ./src/scss/main.scss dist/main.css
+}
+function build_js() {
+ pnpm exec esbuild --log-level=error --bundle $1 --outdir=dist --target=es6 --loader:.svg=dataurl --format=iife --sourcemap --jsx-factory=h --jsx-fragment=Fragment --platform=browser
+}
+
+function bundle() {
+ cat html/$1.html \
+ | sed -e '/ANASTASIS_SCRIPT_CONTENT/ {' -e 'r dist/main.js' -e 'd' -e '}' \
+ | sed -e '/ANASTASIS_STYLE_CONTENT/ {' -e 'r dist/main.css' -e 'd' -e '}' \
+ >dist/$1.html
+}
+
+function cleanup {
+ trap - SIGHUP SIGINT SIGTERM SIGQUIT
+ echo -n "Cleaning up... "
+ kill -- -$$
+ exit 1
+}
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT
+
+
+echo compile
+build_css &
+build_js src/main.ts &
+build_js src/main.test.ts &
wait -n
wait -n
+wait -n
+pnpm run --silent test -- -R dot
echo html
-cat ui.html \
- | sed -e '/ANASTASIS_SCRIPT_CONTENT/ {' -e 'r dist/main.js' -e 'd' -e '}' \
- | sed -e '/ANASTASIS_STYLE_CONTENT/ {' -e 'r dist/main.css' -e 'd' -e '}' \
- >dist/index.html
-echo done
+bundle ui
+bundle ui-dev
+
+
+if [ "WATCH" == "$1" ]; then
+
+ echo watch mode
+ inotifywait -e close_write -r src -q -m | while read line; do
+ DATE=$(date)
+ echo $DATE $line
+ build_js src/main.ts
+ bundle ui-dev
+ ./watch/send_reload.sh
+ done;
+fi
diff --git a/packages/anastasis-webui/dev.mjs b/packages/anastasis-webui/dev.mjs
index d6b6bf10d..3f4915ffc 100755
--- a/packages/anastasis-webui/dev.mjs
+++ b/packages/anastasis-webui/dev.mjs
@@ -1,4 +1,19 @@
#!/usr/bin/env node
+/*
+ This file is part of GNU Anastasis
+ (C) 2021-2022 Anastasis SARL
+
+ GNU Anastasis is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
/* eslint-disable no-undef */
import esbuild from 'esbuild'
import fs from 'fs';
@@ -41,14 +56,17 @@ const watcher = chokidar
broadcast(file, { type: "RELOAD" });
});
-
-fs.writeFileSync("dist/stories.html", fs.readFileSync("stories.html"))
+/**
+ * Just bundling UI Stories.
+ * FIXME: add linaria CSS after implementing Material so CSS will be bundled
+ */
+fs.writeFileSync("dist/index.html", fs.readFileSync("html/stories.html"))
fs.writeFileSync("dist/mocha.css", fs.readFileSync("node_modules/mocha/mocha.css"))
fs.writeFileSync("dist/mocha.js", fs.readFileSync("node_modules/mocha/mocha.js"))
fs.writeFileSync("dist/mocha.js.map", fs.readFileSync("node_modules/mocha/mocha.js.map"))
export const buildConfig = {
- entryPoints: ['src/stories.tsx'],
+ entryPoints: ['src/main.ts', 'src/stories.tsx'],
bundle: true,
outdir: 'dist',
minify: false,
@@ -75,7 +93,6 @@ const server = await esbuild
});
console.log(`Dev server is ready at http://localhost:${server.port}/.
-http://localhost:${server.port}/stories.html for the components stories.
The server is running a using websocket at ${devServerPort} to notify code change and live reload.
`);
diff --git a/packages/anastasis-webui/stories.html b/packages/anastasis-webui/html/stories.html
index 9f41fdeaf..9f41fdeaf 100644
--- a/packages/anastasis-webui/stories.html
+++ b/packages/anastasis-webui/html/stories.html
diff --git a/packages/anastasis-webui/html/ui-dev.html b/packages/anastasis-webui/html/ui-dev.html
new file mode 100644
index 000000000..4cc36268e
--- /dev/null
+++ b/packages/anastasis-webui/html/ui-dev.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html
+ lang="en"
+ class="has-aside-left has-aside-mobile-transition has-navbar-fixed-top has-aside-expanded"
+>
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <meta name="mobile-web-app-capable" content="yes" />
+ <meta name="apple-mobile-web-app-capable" content="yes" />
+
+ <link
+ rel="icon"
+ href="data:;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////////////7//v38//78/P/+/fz//vz7///+/v/+/f3//vz7///+/v/+/fz//v38///////////////////////+/v3///7+/////////////////////////////////////////////////////////v3//v79///////+/v3///////r28v/ct5//06SG/9Gffv/Xqo7/7N/V/9e2nf/bsJb/6uDW/9Sskf/euKH/+/j2///////+/v3//////+3azv+/eE3/2rWd/9Kkhv/Vr5T/48i2/8J+VP/Qn3//3ryn/795Tf/WrpP/2LCW/8B6T//w4Nb///////Pn4P+/d0v/9u3n/+7d0v/EhV7//v///+HDr//fxLD/zph2/+TJt//8/Pv/woBX//Lm3f/y5dz/v3hN//bu6f/JjGn/4sW0///////Df1j/8OLZ//v6+P+/elH/+vj1//jy7f+/elL//////+zYzP/Eg13//////967p//MlHT/wn5X///////v4Nb/yY1s///////jw7H/06KG////////////z5t9/+fNvf//////x4pn//Pp4v/8+vn/w39X/8WEX///////5s/A/9CbfP//////27Oc/9y2n////////////9itlf/gu6f//////86Vdf/r2Mz//////8SCXP/Df1j//////+7d0v/KkG7//////+HBrf/VpYr////////////RnoH/5sq6///////Ii2n/8ubf//39/P/Cf1j/xohk/+bNvv//////wn5W//Tq4//58/D/wHxV//7+/f/59fH/v3xU//39/P/w4Nf/xIFb///////hw7H/yo9t/+/f1f/AeU3/+/n2/+nSxP/FhmD//////9qzm//Upon/4MSx/96+qf//////xINc/+3bz//48e3/v3hN//Pn3///////6M+//752S//gw6//06aK/8J+VP/kzLr/zZd1/8OCWv/q18r/17KZ/9Ooi//fv6r/v3dK/+vWyP///////v39///////27un/1aeK/9Opjv/m1cf/1KCC/9a0nP/n08T/0Jx8/82YdP/QnHz/16yR//jx7P///////v39///////+/f3///7+///////+//7//v7+///////+/v7//v/+/////////////////////////v7//v79///////////////////+/v/+/Pv//v39///+/v/+/Pv///7+//7+/f/+/Pv//v39//79/P/+/Pv///7+////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
+ />
+ <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon" />
+ <style type="text/css">
+ /* <![CDATA[ */
+ ANASTASIS_STYLE_CONTENT
+ /* <![CDATA[ */
+ </style>
+ </head>
+
+ <body>
+ <div id="container" class="anastasis-container"></div>
+ <script type="application/javascript">
+ ANASTASIS_SCRIPT_CONTENT;
+ </script>
+ <script type="application/javascript">
+ function setupLiveReload(port) {
+ const socketPath = `ws://localhost:${port}/socket`;
+
+ const ws = new WebSocket(socketPath);
+ ws.onmessage = (message) => {
+ const event = JSON.parse(message.data);
+ if (event.type === "LOG") {
+ console.log(event.message);
+ }
+ if (event.type === "RELOAD") {
+ window.location.reload();
+ }
+ };
+ ws.onerror = (error) => {
+ console.error(error);
+ };
+ }
+ setupLiveReload(8003);
+ </script>
+ </body>
+</html>
diff --git a/packages/anastasis-webui/ui.html b/packages/anastasis-webui/html/ui.html
index 17c48e904..17c48e904 100644
--- a/packages/anastasis-webui/ui.html
+++ b/packages/anastasis-webui/html/ui.html
diff --git a/packages/anastasis-webui/package.json b/packages/anastasis-webui/package.json
index 95b85585d..7c57160ce 100644
--- a/packages/anastasis-webui/package.json
+++ b/packages/anastasis-webui/package.json
@@ -9,7 +9,7 @@
"dev": "./dev.mjs",
"prepare": "pnpm compile",
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
- "test": "echo no tests",
+ "test": "mocha --enable-source-maps 'dist/**/*.test.js'",
"pretty": "prettier --write src"
},
"dependencies": {
@@ -18,6 +18,7 @@
"date-fns": "2.28.0",
"jed": "1.1.1",
"preact": "^10.5.15",
+ "preact-render-to-string": "^5.1.19",
"preact-router": "^3.2.1",
"qrcode-generator": "^1.4.4"
},
@@ -34,6 +35,7 @@
},
"devDependencies": {
"@creativebulma/bulma-tooltip": "^1.2.0",
+ "@types/mocha": "^9.0.0",
"bulma": "^0.9.3",
"bulma-checkbox": "^1.1.1",
"bulma-radio": "^1.1.1",
diff --git a/packages/anastasis-webui/src/main.test.ts b/packages/anastasis-webui/src/main.test.ts
new file mode 100644
index 000000000..e65cca454
--- /dev/null
+++ b/packages/anastasis-webui/src/main.test.ts
@@ -0,0 +1,48 @@
+/*
+ This file is part of GNU Anastasis
+ (C) 2021-2022 Anastasis SARL
+
+ GNU Anastasis is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
+import { setupI18n } from "@gnu-taler/taler-util";
+import { renderNodeOrBrowser } from "./test-utils.js";
+import * as pages from "./pages/home/index.storiesNo.js";
+
+setupI18n("en", { en: {} });
+
+function testThisStory(st: any): any {
+ describe(`render examples for ${(st as any).default.title}`, () => {
+ Object.keys(st).forEach((k) => {
+ const Component = (st as any)[k];
+ if (k === "default" || !Component) return;
+
+ it(`example: ${k}`, () => {
+ renderNodeOrBrowser(Component, Component.args);
+ });
+ });
+ });
+}
+
+describe("render every storybook example", () => {
+ [pages].forEach(function testAll(st: any) {
+ if (Array.isArray(st.default)) {
+ st.default.forEach(testAll);
+ } else {
+ testThisStory(st);
+ }
+ });
+});
diff --git a/packages/anastasis-webui/src/pages/home/AddingProviderScreen.tsx b/packages/anastasis-webui/src/pages/home/AddingProviderScreen.tsx
index feeac274d..d4675f9da 100644
--- a/packages/anastasis-webui/src/pages/home/AddingProviderScreen.tsx
+++ b/packages/anastasis-webui/src/pages/home/AddingProviderScreen.tsx
@@ -223,7 +223,7 @@ function TableRow({
onDelete: (s: string) => void;
url: string;
info: AuthenticationProviderStatusOk;
-}) {
+}): VNode {
const [status, setStatus] = useState("checking");
useEffect(function () {
testProvider(url.endsWith("/") ? url.substring(0, url.length - 1) : url)
diff --git a/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx b/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx
index 43d865b48..534f9136d 100644
--- a/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx
+++ b/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx
@@ -125,13 +125,6 @@ export function ContinentSelectionScreen(): VNode {
</div>
</div>
</div>
-
- {/* {theCountry && <div class="field">
- <label class="label">Available currencies:</label>
- <div class="control">
- <input class="input is-small" type="text" readonly value={theCountry.currency} />
- </div>
- </div>} */}
</div>
<div class="column is-two-third">
<p>
@@ -151,18 +144,11 @@ export function ContinentSelectionScreen(): VNode {
}}
>
<p>
- If you just want to try out Anastasis, we recomment that you
+ If you just want to try out Anastasis, we recommend that you
choose <b>Testcontinent</b> with <b>Demoland</b>. For this special
country, you will be asked for a simple number and not real,
personal identifiable information.
</p>
- {/*
- <p>
- Because of the diversity of personally identifying information in
- different countries and cultures, we do not support all countries
- yet. If you want to improve the supported countries,{" "}
- <a href="mailto:contact@anastasis.lu">contact us</a>.
- </p> */}
</div>
</div>
</div>
diff --git a/packages/anastasis-webui/src/pages/home/authMethod/AuthMethodTotpSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethod/AuthMethodTotpSetup.tsx
index f9b292d94..0285c87e1 100644
--- a/packages/anastasis-webui/src/pages/home/authMethod/AuthMethodTotpSetup.tsx
+++ b/packages/anastasis-webui/src/pages/home/authMethod/AuthMethodTotpSetup.tsx
@@ -36,6 +36,7 @@ export function AuthMethodTotpSetup({
const [test, setTest] = useState("");
const secretKey = useMemo(() => {
const array = new Uint8Array(32);
+ if (typeof window === "undefined") return array;
return window.crypto.getRandomValues(array);
}, []);
diff --git a/packages/anastasis-webui/src/stories.tsx b/packages/anastasis-webui/src/stories.tsx
index a51dfb20f..351d6f37b 100644
--- a/packages/anastasis-webui/src/stories.tsx
+++ b/packages/anastasis-webui/src/stories.tsx
@@ -143,21 +143,24 @@ function ExampleList({
{k.examples.map((r) => {
const e = encodeURIComponent;
const eId = `${e(r.group)}-${e(r.component)}-${e(r.name)}`;
+ function doSelection(e: any): void {
+ e.preventDefault();
+ location.hash = `#${eId}`;
+ onSelectStory(r, eId);
+ }
const isSelected =
selected &&
selected.component === r.component &&
selected.group === r.group &&
selected.name === r.name;
return (
- <dd id={eId} key={r.name} data-selected={isSelected}>
- <a
- href={`#${eId}`}
- onClick={(e) => {
- e.preventDefault();
- location.hash = `#${eId}`;
- onSelectStory(r, eId);
- }}
- >
+ <dd
+ id={eId}
+ key={r.name}
+ data-selected={isSelected}
+ onClick={doSelection}
+ >
+ <a href={`#${eId}`} onClick={doSelection}>
{r.name}
</a>
</dd>
diff --git a/packages/anastasis-webui/src/test-utils.ts b/packages/anastasis-webui/src/test-utils.ts
new file mode 100644
index 000000000..1fcc753ee
--- /dev/null
+++ b/packages/anastasis-webui/src/test-utils.ts
@@ -0,0 +1,201 @@
+/*
+ This file is part of GNU Anastasis
+ (C) 2021-2022 Anastasis SARL
+
+ GNU Anastasis is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+import {
+ ComponentChildren,
+ Fragment,
+ FunctionalComponent,
+ h as create,
+ options,
+ render as renderIntoDom,
+ VNode,
+} from "preact";
+import { render as renderToString } from "preact-render-to-string";
+
+// When doing tests we want the requestAnimationFrame to be as fast as possible.
+// without this option the RAF will timeout after 100ms making the tests slower
+options.requestAnimationFrame = (fn: () => void) => {
+ // console.log("RAF called")
+ return fn();
+};
+
+export function createExample<Props>(
+ Component: FunctionalComponent<Props>,
+ props: Partial<Props> | (() => Partial<Props>),
+): ComponentChildren {
+ //FIXME: props are evaluated on build time
+ // in some cases we want to evaluated the props on render time so we can get some relative timestamp
+ // check how we can build evaluatedProps in render time
+ const evaluatedProps = typeof props === "function" ? props() : props;
+ const Render = (args: any): VNode => create(Component, args);
+ Render.args = evaluatedProps;
+ return Render;
+}
+
+export function createExampleWithCustomContext<Props, ContextProps>(
+ Component: FunctionalComponent<Props>,
+ props: Partial<Props> | (() => Partial<Props>),
+ ContextProvider: FunctionalComponent<ContextProps>,
+ contextProps: Partial<ContextProps>,
+): ComponentChildren {
+ const evaluatedProps = typeof props === "function" ? props() : props;
+ const Render = (args: any): VNode => create(Component, args);
+ const WithContext = (args: any): VNode =>
+ create(ContextProvider, {
+ ...contextProps,
+ children: [Render(args)],
+ } as any);
+ WithContext.args = evaluatedProps;
+ return WithContext;
+}
+
+export function NullLink({
+ children,
+}: {
+ children?: ComponentChildren;
+}): VNode {
+ return create("a", { children, href: "javascript:void(0);" });
+}
+
+export function renderNodeOrBrowser(Component: any, args: any): void {
+ const vdom = create(Component, args);
+ if (typeof window === "undefined") {
+ renderToString(vdom);
+ } else {
+ const div = document.createElement("div");
+ document.body.appendChild(div);
+ renderIntoDom(vdom, div);
+ renderIntoDom(null, div);
+ document.body.removeChild(div);
+ }
+}
+
+interface Mounted<T> {
+ unmount: () => void;
+ getLastResultOrThrow: () => T;
+ assertNoPendingUpdate: () => void;
+ waitNextUpdate: (s?: string) => Promise<void>;
+}
+
+const isNode = typeof window === "undefined";
+
+export function mountHook<T>(
+ callback: () => T,
+ Context?: ({ children }: { children: any }) => VNode,
+): Mounted<T> {
+ // const result: { current: T | null } = {
+ // current: null
+ // }
+ let lastResult: T | Error | null = null;
+
+ const listener: Array<() => void> = [];
+
+ // component that's going to hold the hook
+ function Component(): VNode {
+ try {
+ lastResult = callback();
+ } catch (e) {
+ if (e instanceof Error) {
+ lastResult = e;
+ } else {
+ lastResult = new Error(`mounting the hook throw an exception: ${e}`);
+ }
+ }
+
+ // notify to everyone waiting for an update and clean the queue
+ listener.splice(0, listener.length).forEach((cb) => cb());
+ return create(Fragment, {});
+ }
+
+ // create the vdom with context if required
+ const vdom = !Context
+ ? create(Component, {})
+ : create(Context, { children: [create(Component, {})] });
+
+ // waiter callback
+ async function waitNextUpdate(_label = ""): Promise<void> {
+ if (_label) _label = `. label: "${_label}"`;
+ await new Promise((res, rej) => {
+ const tid = setTimeout(() => {
+ rej(
+ Error(`waiting for an update but the hook didn't make one${_label}`),
+ );
+ }, 100);
+
+ listener.push(() => {
+ clearTimeout(tid);
+ res(undefined);
+ });
+ });
+ }
+
+ const customElement = {} as Element;
+ const parentElement = isNode ? customElement : document.createElement("div");
+ if (!isNode) {
+ document.body.appendChild(parentElement);
+ }
+
+ renderIntoDom(vdom, parentElement);
+
+ // clean up callback
+ function unmount(): void {
+ if (!isNode) {
+ document.body.removeChild(parentElement);
+ }
+ }
+
+ function getLastResult(): T | Error | null {
+ const copy = lastResult;
+ lastResult = null;
+ return copy;
+ }
+
+ function getLastResultOrThrow(): T {
+ const r = getLastResult();
+ if (r instanceof Error) throw r;
+ if (!r) throw Error("there was no last result");
+ return r;
+ }
+
+ async function assertNoPendingUpdate(): Promise<void> {
+ await new Promise((res, rej) => {
+ const tid = setTimeout(() => {
+ res(undefined);
+ }, 10);
+
+ listener.push(() => {
+ clearTimeout(tid);
+ rej(
+ Error(`Expecting no pending result but the hook got updated.
+ If the update was not intended you need to check the hook dependencies
+ (or dependencies of the internal state) but otherwise make
+ sure to consume the result before ending the test.`),
+ );
+ });
+ });
+
+ const r = getLastResult();
+ if (r)
+ throw Error(`There are still pending results.
+ This may happen because the hook did a new update but the test didn't consume the result using getLastResult`);
+ }
+ return {
+ unmount,
+ getLastResultOrThrow,
+ waitNextUpdate,
+ assertNoPendingUpdate,
+ };
+}
diff --git a/packages/anastasis-webui/src/utils/index.tsx b/packages/anastasis-webui/src/utils/index.tsx
index ce21071f7..204c48d18 100644
--- a/packages/anastasis-webui/src/utils/index.tsx
+++ b/packages/anastasis-webui/src/utils/index.tsx
@@ -209,10 +209,12 @@ export const reducerStatesExample = {
initial: undefined,
recoverySelectCountry: {
...base,
+ reducer_type: "recovery",
recovery_state: RecoveryStates.CountrySelecting,
} as ReducerState,
recoverySelectContinent: {
...base,
+ reducer_type: "recovery",
recovery_state: RecoveryStates.ContinentSelecting,
} as ReducerState,
secretSelection: {
@@ -222,10 +224,12 @@ export const reducerStatesExample = {
} as ReducerState,
recoveryFinished: {
...base,
+ reducer_type: "recovery",
recovery_state: RecoveryStates.RecoveryFinished,
} as ReducerState,
challengeSelecting: {
...base,
+ reducer_type: "recovery",
recovery_state: RecoveryStates.ChallengeSelecting,
} as ReducerState,
challengeSolving: {
@@ -235,34 +239,42 @@ export const reducerStatesExample = {
} as ReducerStateRecovery,
challengePaying: {
...base,
+ reducer_type: "recovery",
recovery_state: RecoveryStates.ChallengePaying,
} as ReducerState,
recoveryAttributeEditing: {
...base,
+ reducer_type: "recovery",
recovery_state: RecoveryStates.UserAttributesCollecting,
} as ReducerState,
backupSelectCountry: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.CountrySelecting,
} as ReducerState,
backupSelectContinent: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.ContinentSelecting,
} as ReducerState,
secretEdition: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.SecretEditing,
} as ReducerState,
policyReview: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.PoliciesReviewing,
} as ReducerState,
policyPay: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.PoliciesPaying,
} as ReducerState,
backupFinished: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.BackupFinished,
} as ReducerState,
authEditing: {
@@ -272,10 +284,12 @@ export const reducerStatesExample = {
} as ReducerState,
backupAttributeEditing: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.UserAttributesCollecting,
} as ReducerState,
truthsPaying: {
...base,
+ reducer_type: "backup",
backup_state: BackupStates.TruthsPaying,
} as ReducerState,
};
diff --git a/packages/anastasis-webui/watch/reply.sh b/packages/anastasis-webui/watch/reply.sh
new file mode 100755
index 000000000..1b42aa4e3
--- /dev/null
+++ b/packages/anastasis-webui/watch/reply.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+SERVER_KEY=258EAFA5-E914-47DA-95CA-C5AB0DC85B11
+
+while read line; do
+ LINE=$(echo $line | tr -d '\r')
+ case $LINE in
+ Sec-WebSocket-Key:*)
+ CLIENT_KEY="${LINE:19}"
+ export WS_ACCEPT=$( echo -n $CLIENT_KEY$SERVER_KEY | sha1sum | xxd -r -p | base64 )
+ ;;
+ "") break ;;
+ esac
+done
+
+cat watch/web_socket_server.reply | sed 's/$'"/`echo \\\r`/" | envsubst '$WS_ACCEPT'
+
+socat UNIX-RECV:./send_signal STDOUT
diff --git a/packages/anastasis-webui/watch/send_reload.sh b/packages/anastasis-webui/watch/send_reload.sh
new file mode 100755
index 000000000..87eef7d54
--- /dev/null
+++ b/packages/anastasis-webui/watch/send_reload.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+COMMAND='{"type":"RELOAD"}'
+LEN=$(printf '%x\n' ${#COMMAND})
+OPCODE=81
+cat <(echo -n $OPCODE$LEN | xxd -r -p) <(echo -n $COMMAND) | socat - UNIX-SEND:./send_signal
+
diff --git a/packages/anastasis-webui/watch/serve.sh b/packages/anastasis-webui/watch/serve.sh
new file mode 100755
index 000000000..cf2737416
--- /dev/null
+++ b/packages/anastasis-webui/watch/serve.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+socat TCP-LISTEN:8003,fork EXEC:"./watch/reply.sh"
+
diff --git a/packages/anastasis-webui/watch/web_socket_client.request b/packages/anastasis-webui/watch/web_socket_client.request
new file mode 100644
index 000000000..e7077b0cb
--- /dev/null
+++ b/packages/anastasis-webui/watch/web_socket_client.request
@@ -0,0 +1,6 @@
+GET /socket HTTP/1.1
+Connection: Upgrade
+Upgrade: websocket
+Sec-WebSocket-Version: 13
+Sec-WebSocket-Key: aaaaaaaaaaaaaaaaaaaaaa==
+
diff --git a/packages/anastasis-webui/watch/web_socket_server.reply b/packages/anastasis-webui/watch/web_socket_server.reply
new file mode 100644
index 000000000..b4e0db001
--- /dev/null
+++ b/packages/anastasis-webui/watch/web_socket_server.reply
@@ -0,0 +1,5 @@
+HTTP/1.1 101 Switching Protocols
+Upgrade: websocket
+Connection: Upgrade
+Sec-WebSocket-Accept: $WS_ACCEPT
+
diff --git a/packages/taler-wallet-webextension/clean_and_build.sh b/packages/taler-wallet-webextension/clean_and_build.sh
index 2662f8b2d..fb53124ef 100755
--- a/packages/taler-wallet-webextension/clean_and_build.sh
+++ b/packages/taler-wallet-webextension/clean_and_build.sh
@@ -2,7 +2,7 @@
set -e
-#rm -rf dist lib tsconfig.tsbuildinfo .linaria-cache
+rm -rf dist lib tsconfig.tsbuildinfo .linaria-cache
echo typecheck and bundle...
node build-fast-with-linaria.mjs &
diff --git a/packages/taler-wallet-webextension/package.json b/packages/taler-wallet-webextension/package.json
index 88baeb261..d9940776c 100644
--- a/packages/taler-wallet-webextension/package.json
+++ b/packages/taler-wallet-webextension/package.json
@@ -44,6 +44,7 @@
},
"devDependencies": {
"@babel/core": "7.13.16",
+ "@babel/plugin-transform-modules-commonjs": "^7.18.2",
"@babel/plugin-transform-react-jsx-source": "^7.12.13",
"@babel/preset-typescript": "^7.13.0",
"@babel/runtime": "^7.17.8",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ae0d56255..7e358f620 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -56,6 +56,7 @@ importers:
'@creativebulma/bulma-tooltip': ^1.2.0
'@gnu-taler/anastasis-core': workspace:*
'@gnu-taler/taler-util': workspace:*
+ '@types/mocha': ^9.0.0
bulma: ^0.9.3
bulma-checkbox: ^1.1.1
bulma-radio: ^1.1.1
@@ -66,6 +67,7 @@ importers:
jssha: ^3.2.0
mocha: ^9.2.0
preact: ^10.5.15
+ preact-render-to-string: ^5.1.19
preact-router: ^3.2.1
qrcode-generator: ^1.4.4
sass: 1.32.13
@@ -77,10 +79,12 @@ importers:
date-fns: 2.28.0
jed: 1.1.1
preact: 10.6.5
+ preact-render-to-string: 5.1.19_preact@10.6.5
preact-router: 3.2.1_preact@10.6.5
qrcode-generator: 1.4.4
devDependencies:
'@creativebulma/bulma-tooltip': 1.2.0
+ '@types/mocha': 9.0.0
bulma: 0.9.3
bulma-checkbox: 1.2.1
bulma-radio: 1.2.0
@@ -316,6 +320,7 @@ importers:
packages/taler-wallet-webextension:
specifiers:
'@babel/core': 7.13.16
+ '@babel/plugin-transform-modules-commonjs': ^7.18.2
'@babel/plugin-transform-react-jsx-source': ^7.12.13
'@babel/preset-typescript': ^7.13.0
'@babel/runtime': ^7.17.8
@@ -363,6 +368,7 @@ importers:
ws: 7.4.5
devDependencies:
'@babel/core': 7.13.16
+ '@babel/plugin-transform-modules-commonjs': 7.18.2_@babel+core@7.13.16
'@babel/plugin-transform-react-jsx-source': 7.14.5_@babel+core@7.13.16
'@babel/preset-typescript': 7.15.0_@babel+core@7.13.16
'@babel/runtime': 7.17.8
@@ -461,7 +467,7 @@ packages:
'@babel/code-frame': 7.16.7
'@babel/generator': 7.17.0
'@babel/helper-compilation-targets': 7.16.7_@babel+core@7.16.7
- '@babel/helper-module-transforms': 7.16.7
+ '@babel/helper-module-transforms': 7.18.0
'@babel/helpers': 7.16.7
'@babel/parser': 7.17.0
'@babel/template': 7.16.7
@@ -518,11 +524,20 @@ packages:
source-map: 0.5.7
dev: true
+ /@babel/generator/7.18.2:
+ resolution: {integrity: sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.18.4
+ '@jridgewell/gen-mapping': 0.3.1
+ jsesc: 2.5.2
+ dev: true
+
/@babel/helper-annotate-as-pure/7.14.5:
resolution: {integrity: sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-annotate-as-pure/7.16.7:
@@ -537,7 +552,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-explode-assignable-expression': 7.16.7
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-compilation-targets/7.16.7_@babel+core@7.13.16:
@@ -680,7 +695,7 @@ packages:
'@babel/core': 7.17.2
'@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2
'@babel/helper-module-imports': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/traverse': 7.17.0
debug: 4.3.3
lodash.debounce: 4.0.8
@@ -697,11 +712,16 @@ packages:
'@babel/types': 7.17.0
dev: true
+ /@babel/helper-environment-visitor/7.18.2:
+ resolution: {integrity: sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
/@babel/helper-explode-assignable-expression/7.16.7:
resolution: {integrity: sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-function-name/7.14.5:
@@ -710,7 +730,7 @@ packages:
dependencies:
'@babel/helper-get-function-arity': 7.14.5
'@babel/template': 7.16.7
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-function-name/7.16.7:
@@ -722,18 +742,26 @@ packages:
'@babel/types': 7.17.0
dev: true
+ /@babel/helper-function-name/7.17.9:
+ resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.16.7
+ '@babel/types': 7.18.4
+ dev: true
+
/@babel/helper-get-function-arity/7.14.5:
resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-get-function-arity/7.16.7:
resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-hoist-variables/7.16.7:
@@ -747,14 +775,14 @@ packages:
resolution: {integrity: sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-member-expression-to-functions/7.16.7:
resolution: {integrity: sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-module-imports/7.16.7:
@@ -780,18 +808,34 @@ packages:
- supports-color
dev: true
+ /@babel/helper-module-transforms/7.18.0:
+ resolution: {integrity: sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-environment-visitor': 7.16.7
+ '@babel/helper-module-imports': 7.16.7
+ '@babel/helper-simple-access': 7.18.2
+ '@babel/helper-split-export-declaration': 7.16.7
+ '@babel/helper-validator-identifier': 7.16.7
+ '@babel/template': 7.16.7
+ '@babel/traverse': 7.18.2
+ '@babel/types': 7.18.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@babel/helper-optimise-call-expression/7.14.5:
resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-optimise-call-expression/7.16.7:
resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-plugin-utils/7.14.5:
@@ -804,13 +848,18 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
+ /@babel/helper-plugin-utils/7.17.12:
+ resolution: {integrity: sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
/@babel/helper-remap-async-to-generator/7.16.8:
resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-annotate-as-pure': 7.16.7
'@babel/helper-wrap-function': 7.16.8
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
transitivePeerDependencies:
- supports-color
dev: true
@@ -821,8 +870,8 @@ packages:
dependencies:
'@babel/helper-member-expression-to-functions': 7.15.0
'@babel/helper-optimise-call-expression': 7.14.5
- '@babel/traverse': 7.17.0
- '@babel/types': 7.17.0
+ '@babel/traverse': 7.18.2
+ '@babel/types': 7.18.4
transitivePeerDependencies:
- supports-color
dev: true
@@ -847,18 +896,25 @@ packages:
'@babel/types': 7.17.0
dev: true
+ /@babel/helper-simple-access/7.18.2:
+ resolution: {integrity: sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.18.4
+ dev: true
+
/@babel/helper-skip-transparent-expression-wrappers/7.16.0:
resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-split-export-declaration/7.14.5:
resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
dev: true
/@babel/helper-split-export-declaration/7.16.7:
@@ -894,8 +950,8 @@ packages:
dependencies:
'@babel/helper-function-name': 7.16.7
'@babel/template': 7.16.7
- '@babel/traverse': 7.17.0
- '@babel/types': 7.17.0
+ '@babel/traverse': 7.18.2
+ '@babel/types': 7.18.4
transitivePeerDependencies:
- supports-color
dev: true
@@ -906,7 +962,7 @@ packages:
dependencies:
'@babel/template': 7.16.7
'@babel/traverse': 7.17.0
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
transitivePeerDependencies:
- supports-color
dev: true
@@ -947,6 +1003,14 @@ packages:
'@babel/types': 7.17.0
dev: true
+ /@babel/parser/7.18.4:
+ resolution: {integrity: sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.18.4
+ dev: true
+
/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.13.16:
resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==}
engines: {node: '>=6.9.0'}
@@ -964,7 +1028,7 @@ packages:
'@babel/core': ^7.0.0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.13.16:
@@ -986,7 +1050,7 @@ packages:
'@babel/core': ^7.13.0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-skip-transparent-expression-wrappers': 7.16.0
'@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.2
dev: true
@@ -1012,7 +1076,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-remap-async-to-generator': 7.16.8
'@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.2
transitivePeerDependencies:
@@ -1067,7 +1131,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-create-class-features-plugin': 7.17.1_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.2
transitivePeerDependencies:
- supports-color
@@ -1107,7 +1171,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.2
dev: true
@@ -1129,7 +1193,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.2
dev: true
@@ -1151,7 +1215,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.2
dev: true
@@ -1173,7 +1237,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.2
dev: true
@@ -1195,7 +1259,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.2
dev: true
@@ -1217,7 +1281,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.2
dev: true
@@ -1267,7 +1331,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.2
dev: true
@@ -1290,7 +1354,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-skip-transparent-expression-wrappers': 7.16.0
'@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.2
dev: true
@@ -1316,7 +1380,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-create-class-features-plugin': 7.17.1_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
transitivePeerDependencies:
- supports-color
dev: true
@@ -1345,7 +1409,7 @@ packages:
'@babel/core': 7.17.2
'@babel/helper-annotate-as-pure': 7.16.7
'@babel/helper-create-class-features-plugin': 7.17.1_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.2
transitivePeerDependencies:
- supports-color
@@ -1370,7 +1434,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.13.16:
@@ -1388,7 +1452,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.13.16:
@@ -1406,7 +1470,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.13.16:
@@ -1426,7 +1490,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-decorators/7.17.0_@babel+core@7.17.2:
@@ -1436,7 +1500,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.13.16:
@@ -1472,7 +1536,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.13.16:
@@ -1490,7 +1554,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.2:
@@ -1500,7 +1564,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.13.16:
@@ -1518,7 +1582,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.13.16:
@@ -1536,7 +1600,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.13.16:
@@ -1554,7 +1618,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.13.16:
@@ -1572,7 +1636,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.13.16:
@@ -1590,7 +1654,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.13.16:
@@ -1608,7 +1672,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.13.16:
@@ -1628,7 +1692,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.13.16:
@@ -1648,7 +1712,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.13.16:
@@ -1658,7 +1722,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.13.16
- '@babel/helper-plugin-utils': 7.14.5
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.2:
@@ -1668,7 +1732,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.13.16:
@@ -1688,7 +1752,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.13.16:
@@ -1713,7 +1777,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-module-imports': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-remap-async-to-generator': 7.16.8
transitivePeerDependencies:
- supports-color
@@ -1736,7 +1800,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.13.16:
@@ -1756,7 +1820,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-classes/7.16.7_@babel+core@7.13.16:
@@ -1789,7 +1853,7 @@ packages:
'@babel/helper-environment-visitor': 7.16.7
'@babel/helper-function-name': 7.16.7
'@babel/helper-optimise-call-expression': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-replace-supers': 7.16.7
'@babel/helper-split-export-declaration': 7.16.7
globals: 11.12.0
@@ -1814,7 +1878,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-destructuring/7.16.7_@babel+core@7.13.16:
@@ -1834,7 +1898,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.13.16:
@@ -1856,7 +1920,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.13.16:
@@ -1876,7 +1940,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.13.16:
@@ -1898,7 +1962,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-builder-binary-assignment-operator-visitor': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-for-of/7.16.7_@babel+core@7.13.16:
@@ -1918,7 +1982,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-function-name/7.16.7_@babel+core@7.13.16:
@@ -1942,7 +2006,7 @@ packages:
'@babel/core': 7.17.2
'@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2
'@babel/helper-function-name': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-literals/7.16.7_@babel+core@7.13.16:
@@ -1962,7 +2026,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.13.16:
@@ -1982,7 +2046,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.13.16:
@@ -2006,8 +2070,8 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-module-transforms': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-module-transforms': 7.18.0
+ '@babel/helper-plugin-utils': 7.17.12
babel-plugin-dynamic-import-node: 2.3.3
transitivePeerDependencies:
- supports-color
@@ -2028,16 +2092,31 @@ packages:
- supports-color
dev: true
- /@babel/plugin-transform-modules-commonjs/7.16.8_@babel+core@7.17.2:
- resolution: {integrity: sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==}
+ /@babel/plugin-transform-modules-commonjs/7.18.2_@babel+core@7.13.16:
+ resolution: {integrity: sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.13.16
+ '@babel/helper-module-transforms': 7.18.0
+ '@babel/helper-plugin-utils': 7.17.12
+ '@babel/helper-simple-access': 7.18.2
+ babel-plugin-dynamic-import-node: 2.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-modules-commonjs/7.18.2_@babel+core@7.17.2:
+ resolution: {integrity: sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-module-transforms': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
- '@babel/helper-simple-access': 7.16.7
+ '@babel/helper-module-transforms': 7.18.0
+ '@babel/helper-plugin-utils': 7.17.12
+ '@babel/helper-simple-access': 7.18.2
babel-plugin-dynamic-import-node: 2.3.3
transitivePeerDependencies:
- supports-color
@@ -2067,8 +2146,8 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-hoist-variables': 7.16.7
- '@babel/helper-module-transforms': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-module-transforms': 7.18.0
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-validator-identifier': 7.16.7
babel-plugin-dynamic-import-node: 2.3.3
transitivePeerDependencies:
@@ -2095,8 +2174,8 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-module-transforms': 7.16.7
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-module-transforms': 7.18.0
+ '@babel/helper-plugin-utils': 7.17.12
transitivePeerDependencies:
- supports-color
dev: true
@@ -2138,7 +2217,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-object-assign/7.16.7_@babel+core@7.17.2:
@@ -2171,7 +2250,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-replace-supers': 7.16.7
transitivePeerDependencies:
- supports-color
@@ -2194,7 +2273,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.13.16:
@@ -2214,7 +2293,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-react-jsx-source/7.14.5_@babel+core@7.13.16:
@@ -2278,7 +2357,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-runtime/7.17.0_@babel+core@7.13.16:
@@ -2315,7 +2394,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-spread/7.16.7_@babel+core@7.13.16:
@@ -2336,7 +2415,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/helper-skip-transparent-expression-wrappers': 7.16.0
dev: true
@@ -2357,7 +2436,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.13.16:
@@ -2377,7 +2456,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.13.16:
@@ -2397,7 +2476,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-typescript/7.15.0_@babel+core@7.13.16:
@@ -2422,7 +2501,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-create-class-features-plugin': 7.17.1_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.2
transitivePeerDependencies:
- supports-color
@@ -2445,7 +2524,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.13.16:
@@ -2467,7 +2546,7 @@ packages:
dependencies:
'@babel/core': 7.17.2
'@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.2
- '@babel/helper-plugin-utils': 7.16.7
+ '@babel/helper-plugin-utils': 7.17.12
dev: true
/@babel/preset-env/7.16.11_@babel+core@7.13.16:
@@ -2612,7 +2691,7 @@ packages:
'@babel/plugin-transform-literals': 7.16.7_@babel+core@7.17.2
'@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.17.2
'@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.17.2
- '@babel/plugin-transform-modules-commonjs': 7.16.8_@babel+core@7.17.2
+ '@babel/plugin-transform-modules-commonjs': 7.18.2_@babel+core@7.17.2
'@babel/plugin-transform-modules-systemjs': 7.16.7_@babel+core@7.17.2
'@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.17.2
'@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.17.2
@@ -2659,7 +2738,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.17.2
- '@babel/helper-plugin-utils': 7.14.5
+ '@babel/helper-plugin-utils': 7.17.12
'@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.2
'@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.2
'@babel/types': 7.17.0
@@ -2766,7 +2845,7 @@ packages:
'@babel/helper-hoist-variables': 7.16.7
'@babel/helper-split-export-declaration': 7.16.7
'@babel/parser': 7.17.0
- '@babel/types': 7.17.0
+ '@babel/types': 7.18.4
debug: 4.3.3
globals: 11.12.0
transitivePeerDependencies:
@@ -2791,6 +2870,24 @@ packages:
- supports-color
dev: true
+ /@babel/traverse/7.18.2:
+ resolution: {integrity: sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.16.7
+ '@babel/generator': 7.18.2
+ '@babel/helper-environment-visitor': 7.18.2
+ '@babel/helper-function-name': 7.17.9
+ '@babel/helper-hoist-variables': 7.16.7
+ '@babel/helper-split-export-declaration': 7.16.7
+ '@babel/parser': 7.18.4
+ '@babel/types': 7.18.4
+ debug: 4.3.3
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@babel/types/7.15.0:
resolution: {integrity: sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==}
engines: {node: '>=6.9.0'}
@@ -2815,6 +2912,14 @@ packages:
to-fast-properties: 2.0.0
dev: true
+ /@babel/types/7.18.4:
+ resolution: {integrity: sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.16.7
+ to-fast-properties: 2.0.0
+ dev: true
+
/@bcoe/v8-coverage/0.2.3:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true
@@ -2896,15 +3001,36 @@ packages:
chalk: 4.1.2
dev: true
+ /@jridgewell/gen-mapping/0.3.1:
+ resolution: {integrity: sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.1
+ '@jridgewell/sourcemap-codec': 1.4.10
+ '@jridgewell/trace-mapping': 0.3.13
+ dev: true
+
/@jridgewell/resolve-uri/3.0.4:
resolution: {integrity: sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==}
engines: {node: '>=6.0.0'}
dev: true
+ /@jridgewell/set-array/1.1.1:
+ resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
/@jridgewell/sourcemap-codec/1.4.10:
resolution: {integrity: sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==}
dev: true
+ /@jridgewell/trace-mapping/0.3.13:
+ resolution: {integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.0.4
+ '@jridgewell/sourcemap-codec': 1.4.10
+ dev: true
+
/@jridgewell/trace-mapping/0.3.4:
resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==}
dependencies:
@@ -11193,7 +11319,6 @@ packages:
dependencies:
preact: 10.6.5
pretty-format: 3.8.0
- dev: true
/preact-router/3.2.1_preact@10.6.5:
resolution: {integrity: sha512-KEN2VN1DxUlTwzW5IFkF13YIA2OdQ2OvgJTkQREF+AA2NrHRLaGbB68EjS4IeZOa1shvQ1FvEm3bSLta4sXBhg==}
@@ -11255,8 +11380,7 @@ packages:
dev: true
/pretty-format/3.8.0:
- resolution: {integrity: sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=}
- dev: true
+ resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
/pretty-ms/7.0.1:
resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==}