Adds routing

Squashed commit of the following:

commit d26bffc33a
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Tue Jun 9 10:35:14 2026 +0200

     ups versions

commit 8bb12aaac1
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Fri May 22 15:56:44 2026 +0200

     📺 finlizes routing and improves bs

commit c3782509e8
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 16:10:51 2026 +0200

     first steps (footer)

commit 7c925d1fdb
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 15:24:20 2026 +0200

     📺 tsc-alias

commit e4e41197b9
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 14:40:47 2026 +0200

    🐛 fixes routing

commit 7d6240e28a
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 14:40:00 2026 +0200

    🐛 📺 fixes dev server

commit 139b1590ce
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed Apr 29 13:40:40 2026 +0200

     Uses original router

    - it has benefits to use hash properly

commit 3cc11b68de
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Tue Apr 28 17:16:00 2026 +0200

    🎉
This commit is contained in:
2026-06-09 10:39:23 +02:00
parent 0191347312
commit 656c2da8cf
42 changed files with 765 additions and 372 deletions
+10 -4
View File
@@ -4,9 +4,6 @@ This project uses [jaandrle/bs: The simplest possible build system using executa
## Available executables ## Available executables
If it makes sense, arguments are passed to internally used commands (e.g. `tsc`), e. g. `--help`. If it makes sense, arguments are passed to internally used commands (e.g. `tsc`), e. g. `--help`.
### bs/lint
This lints the project using `tsc`.
### bs/test ### bs/test
This lints the project and runs tests using `wtr`. This lints the project and runs tests using `wtr`.
@@ -19,8 +16,17 @@ This builds the project using `rollup`.
### bs/analyze ### bs/analyze
This analyze Custom Element manifest using the `@custom-elements-manifest/analyzer`. This analyze Custom Element manifest using the `@custom-elements-manifest/analyzer`.
### bs/dev/assets
Copies assets using `cp` into proper destination in `.tmp`.
### bs/dev/tsc
Builds typescript files using `tsc`.
### bs/dev/lint
Lints the project using `tsc`.
### bs/npm/lint ### bs/npm/lint
Linted projects npm dependencies. Lints projects npm dependencies.
### bs/npm/update ### bs/npm/update
Updates projects npm dependencies. Updates projects npm dependencies.
+7 -3
View File
@@ -5,8 +5,12 @@ set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3
exit 1; exit 1;
} }
# depends on # depends on
declare -r app='src/app-cfpodcasts.ts' declare -r app=(
declare -r cem='node_modules/.bin/cem' 'src/**/c-*.ts'
'src/**/app-*/index.ts'
'src/index.ts'
)
declare -r cem='node_modules/.bin/custom-elements-manifest'
help(){ help(){
if ! isHelp "${@}"; then return 0; fi if ! isHelp "${@}"; then return 0; fi
@@ -17,7 +21,7 @@ help(){
} }
main(){ main(){
help "${@}" help "${@}"
$cem analyze --litelement --globs "$app" "${@}" $cem analyze --litelement --globs "${app[@]}" "${@}"
} }
main "${@}" main "${@}"
+4
View File
@@ -5,6 +5,8 @@ set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3
exit 1; exit 1;
} }
# depends on # depends on
declare -r tsc='bs/dev/tsc'
declare -r assets='bs/dev/assets'
declare -r rollup='node_modules/.bin/rollup' declare -r rollup='node_modules/.bin/rollup'
declare -r analyze='bs/analyze' declare -r analyze='bs/analyze'
declare -r config='rollup.config.js' declare -r config='rollup.config.js'
@@ -20,6 +22,8 @@ help(){
main(){ main(){
help "${@}" help "${@}"
$tsc
$assets
rm -rf "$dist" rm -rf "$dist"
$rollup -c $config "${@}" $rollup -c $config "${@}"
$analyze --exclude "$dist" $analyze --exclude "$dist"
Executable
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3Ml53kvc
. bs/.common || {
echo 'Please run this script from the project root directory' >&2;
exit 1;
}
# depends on
declare -r paths='bs/dev/paths.js'
declare -r assets="$($paths 'src')/**/assets"
declare -r target="$($paths 'tscoutput')"
help(){
if ! isHelp "${@}"; then return 0; fi
echoReadmeInfo
echo
exit 0
}
main(){
help "${@}"
shopt -s globstar nullglob
for dir in $assets; do
cp -r "$dir" "$target/$dir"
done
}
main "${@}"
+1 -1
View File
@@ -16,7 +16,7 @@ help(){
} }
main(){ main(){
help "${@}" help "${@}"
$tsc "${@}" $tsc --noEmit "${@}"
} }
main "${@}" main "${@}"
+44
View File
@@ -0,0 +1,44 @@
#!/bin/env node
import tsconfig from "../../tsconfig.json" with { type: "json" };
export const paths = {
/** code source */
src: "src",
/** code processed by tsc */
tscoutput: tsconfig.compilerOptions.outDir,
/** code processed by tsc and rollup */
dist: "dist",
/** tempral results of tsc, tests, … */
tmp: ".tmp",
};
export default paths;
import { argv, exit } from "node:process";
import { fileURLToPath } from "node:url";
const [ _, script ] = argv;
if (script === fileURLToPath(import.meta.url))
main(argv.slice(2));
function main(args) {
if(args.includes("--help") || args.includes("-h")){
console.log(`
Usage: ${script} [options]
Options:
[type] … if omitted, echo all
`);
exit(0);
}
if(args.length === 0){
console.log(paths);
exit(0);
}
for(const arg of args){
const path = paths[arg];
if(!path){
console.error(`Unknown path: ${arg}`);
exit(1);
}
console.log(path);
}
}
Executable
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3Ml53kvc
. bs/.common || {
echo 'Please run this script from the project root directory' >&2;
exit 1;
}
# depends on
declare -r tsc='node_modules/.bin/tsc'
declare -r tscAlias='node_modules/.bin/tsc-alias'
help(){
if ! isHelp "${@}"; then return 0; fi
echoReadmeInfo
echo
$tsc --help
$tscAlias --help
exit 0
}
main(){
help "${@}"
$tsc "${@}"
$tscAlias "${@}"
}
main "${@}"
+13 -9
View File
@@ -4,20 +4,22 @@ set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3
echo 'Please run this script from the project root directory' >&2; echo 'Please run this script from the project root directory' >&2;
exit 1; exit 1;
} }
# "start:build": "web-dev-server --root-dir dist --app-index index.html --open",
# "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"web-dev-server\""
# depends on # depends on
declare -r server='node_modules/.bin/web-dev-server' declare -r server='node_modules/.bin/web-dev-server'
declare -r lint='bs/lint' declare -r lint='bs/dev/lint'
declare -r index='index.html' declare -r tsc='bs/dev/tsc'
declare -r assets='bs/dev/assets'
declare -r server_config='web-dev-server.config.js'
help(){ help(){
if ! isHelp "${@}"; then return 0; fi if ! isHelp "${@}"; then return 0; fi
echoReadmeInfo echoReadmeInfo
cat <<-EOF cat <<-EOF
Options:
./src Starts the development server (default) ./src Starts the development server (default)
./dist Starts the production server ./dist Starts the production server
Defaults:
See server config file: '$server_config'
EOF EOF
$server --help $server --help
exit 0 exit 0
@@ -25,13 +27,15 @@ EOF
main(){ main(){
help "${@}" help "${@}"
$lint
local -r target="${1:-./src}" # ./src or ./dist local -r target="${1:-./src}" # ./src or ./dist
if [[ "$target" == './dist' ]]; then if [[ "$target" =~ 'dist' ]]; then
# console warns because of config file, use npx serve? # console warns because of config file, use npx serve?
$server --root-dir "$target" --app-index $index --open $server "${@}"
else else
$lint --watch --preserveWatchOutput & $assets
$server & $tsc --watch --preserveWatchOutput &
$server "${@}" &
wait wait
fi fi
} }
+4 -6
View File
@@ -5,15 +5,13 @@ set -eo pipefail # this can be harmful, see https://www.youtube.com/watch?v=4Jo3
exit 1; exit 1;
} }
# depends on # depends on
declare -r lint='bs/lint' declare -r tsc='bs/dev/tsc'
declare -r wtr='node_modules/.bin/wtr' declare -r wtr='node_modules/.bin/web-test-runner'
help(){ help(){
if ! isHelp "${@}"; then return 0; fi if ! isHelp "${@}"; then return 0; fi
echoReadmeInfo echoReadmeInfo
cat <<EOF cat <<EOF
Options:
--watch, -w Runs in watch mode --watch, -w Runs in watch mode
EOF EOF
$wtr --help $wtr --help
@@ -22,12 +20,12 @@ EOF
main(){ main(){
help "$1" help "$1"
if [[ "$1" != "--watch" ]]; then if [[ "$1" != "--watch" ]]; then
$lint $tsc
$wtr "$@" --coverage $wtr "$@" --coverage
exit exit
fi fi
$lint --watch --preserveWatchOutput & $tsc --watch --preserveWatchOutput &
$wtr "${*}" & $wtr "${*}" &
wait wait
} }
+1
View File
@@ -0,0 +1 @@
v1.0.md
+4
View File
@@ -0,0 +1,4 @@
# v1.0.0
- [x] initial setup (`bs`, app structure, …)
- [x] adds routing support
+8
View File
@@ -0,0 +1,8 @@
# Development-related documentation
## [CommaFeed API.md](./CommaFeed\ API.md)
Exported API for [CommaFeed](https://github.com/CommaFeed/CommaFeed).
## Development TODO summary
- [PLAN.md](./PLAN.md): Overall plan for the project.
- [TASK.md](./TASK.md): Converted plan to overview of tasks.
+2 -1
View File
@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0"> <opml version="1.0">
<head> <head>
<dateCreated>Tue, 21 Apr 2026 11:06:35 GMT</dateCreated> <dateCreated>Fri, 24 Apr 2026 13:48:25 GMT</dateCreated>
<title>jaa-podcasty subscriptions in CommaFeed</title> <title>jaa-podcasty subscriptions in CommaFeed</title>
</head> </head>
<body> <body>
<outline text="Epizody z vypršených odběrů" type="rss" title="Epizody z vypršených odběrů" xmlUrl="https://jaandrle.cz/p/2026-04-07.xml" htmlUrl="https://jaandrle.cz/podcasts/" /> <outline text="Epizody z vypršených odběrů" type="rss" title="Epizody z vypršených odběrů" xmlUrl="https://jaandrle.cz/p/2026-04-07.xml" htmlUrl="https://jaandrle.cz/podcasts/" />
<outline text="Playlist: Čestmír &amp; Daniela - YouTube" type="rss" title="Playlist: Čestmír &amp; Daniela - YouTube" xmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" htmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" /> <outline text="Playlist: Čestmír &amp; Daniela - YouTube" type="rss" title="Playlist: Čestmír &amp; Daniela - YouTube" xmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" htmlUrl="http://rss-bridge.jaandrle.cz/?action=display&amp;bridge=YoutubeBridge&amp;token=Chief*Snowplow1*Drastic&amp;context=By+playlist+Id&amp;p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&amp;duration_min=&amp;duration_max=&amp;format=Atom" />
<outline text="5:59" type="rss" title="5:59" xmlUrl="https://feeds.transistor.fm/5-59" htmlUrl="https://www.seznamzpravy.cz/" /> <outline text="5:59" type="rss" title="5:59" xmlUrl="https://feeds.transistor.fm/5-59" htmlUrl="https://www.seznamzpravy.cz/" />
<outline text="Redneck &amp; Beneš" type="rss" title="Redneck &amp; Beneš" xmlUrl="https://www.voxpot.cz/pod/rss/844dd837-6063-4b77-99c5-5adf7c7622f5/redneck-benes.xml" htmlUrl="https://www.voxpot.cz/muj-ucet" />
<outline text="Pinepods News Podcast" type="rss" title="Pinepods News Podcast" xmlUrl="https://news.pinepods.online/feed.xml" htmlUrl="https://news.pinepods.online" /> <outline text="Pinepods News Podcast" type="rss" title="Pinepods News Podcast" xmlUrl="https://news.pinepods.online/feed.xml" htmlUrl="https://news.pinepods.online" />
<outline text="Český rozhlas - Věda" type="rss" title="Český rozhlas - Věda" xmlUrl="https://api.mujrozhlas.cz/rss/topic/8c432621-a9a9-4c0a-8376-ea4ae5707fbb.rss" htmlUrl="https://www.mujrozhlas.cz/topic/view/8c432621-a9a9-4c0a-8376-ea4ae5707fbb" /> <outline text="Český rozhlas - Věda" type="rss" title="Český rozhlas - Věda" xmlUrl="https://api.mujrozhlas.cz/rss/topic/8c432621-a9a9-4c0a-8376-ea4ae5707fbb.rss" htmlUrl="https://www.mujrozhlas.cz/topic/view/8c432621-a9a9-4c0a-8376-ea4ae5707fbb" />
<outline text="Bilance" type="rss" title="Bilance" xmlUrl="https://feeds.transistor.fm/bilance" htmlUrl="https://www.ceskatelevize.cz/porady/14021364946-bilance/" /> <outline text="Bilance" type="rss" title="Bilance" xmlUrl="https://feeds.transistor.fm/bilance" htmlUrl="https://www.ceskatelevize.cz/porady/14021364946-bilance/" />
+2 -2
View File
@@ -5,7 +5,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<meta name="Description" content="Put your description here."> <meta name="Description" content="Put your description here.">
<link rel="icon" type="image/svg+xml" href="./assets/logo.svg"> <link rel="icon" type="image/svg+xml" href="./.tmp/tsc/src/assets/logo.svg">
<base href="/"> <base href="/">
<style> <style>
@@ -23,7 +23,7 @@
<body> <body>
<app-cfpodcasts></app-cfpodcasts> <app-cfpodcasts></app-cfpodcasts>
<script type="module" src="./out-tsc/src/app-index.js"></script> <script type="module" src="./.tmp/tsc/src/index.js"></script>
</body> </body>
</html> </html>
+226 -188
View File
@@ -9,12 +9,13 @@
"version": "0.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@lit-labs/router": "^0.1.4",
"lit": "~3.3" "lit": "~3.3"
}, },
"devDependencies": { "devDependencies": {
"@custom-elements-manifest/analyzer": "~0.11", "@custom-elements-manifest/analyzer": "~0.11",
"@open-wc/testing": "~4.0", "@open-wc/testing": "~4.0",
"@rollup/plugin-babel": "~7.0", "@rollup/plugin-babel": "~7.1",
"@rollup/plugin-node-resolve": "~16.0", "@rollup/plugin-node-resolve": "~16.0",
"@types/mocha": "~10.0", "@types/mocha": "~10.0",
"@web/dev-server": "~0.4", "@web/dev-server": "~0.4",
@@ -23,9 +24,10 @@
"@web/test-runner": "~0.20", "@web/test-runner": "~0.20",
"babel-plugin-template-html-minifier": "~4.1", "babel-plugin-template-html-minifier": "~4.1",
"deepmerge": "~4.3", "deepmerge": "~4.3",
"rollup": "~4.59", "rollup": "~4.61",
"rollup-plugin-esbuild": "~6.2", "rollup-plugin-esbuild": "~6.2",
"rollup-plugin-workbox": "~8.1", "rollup-plugin-workbox": "~8.1",
"tsc-alias": "~1.8",
"tslib": "~2.8", "tslib": "~2.8",
"typescript": "~6.0" "typescript": "~6.0"
} }
@@ -2201,6 +2203,15 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@lit-labs/router": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@lit-labs/router/-/router-0.1.4.tgz",
"integrity": "sha512-xURH6fOPE0MYfXa1nyl+qTIhZRVWkFa2oggTRodKAI2q/HjA2Va7HEKe7fMm8DdnFE+zEI2aUGnStawKpVh3lQ==",
"license": "BSD-3-Clause",
"dependencies": {
"lit": "^2.0.0 || ^3.0.0"
}
},
"node_modules/@lit-labs/ssr-dom-shim": { "node_modules/@lit-labs/ssr-dom-shim": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz",
@@ -2435,9 +2446,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2452,9 +2460,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2469,9 +2474,6 @@
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2486,9 +2488,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2503,9 +2502,6 @@
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2520,9 +2516,6 @@
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2537,9 +2530,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2554,9 +2544,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2683,14 +2670,15 @@
} }
}, },
"node_modules/@rollup/plugin-babel": { "node_modules/@rollup/plugin-babel": {
"version": "7.0.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-7.0.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-7.1.0.tgz",
"integrity": "sha512-NS2+P7v80N3MQqehZEjgpaFb9UyX3URNMW/zvoECKGo4PY4DvJfQusTI7BX/Ks+CPvtTfk3TqcR6S9VYBi/C+A==", "integrity": "sha512-h9Y+xYha6p4wKO+FwdiPIkE+eIYCm8MzZPpX1iARIoFBnmKP9CnpT1p9dDf/DTFm6fyN8PmuLyRI5qZgchnitw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-module-imports": "^7.18.6", "@babel/helper-module-imports": "^7.18.6",
"@rollup/pluginutils": "^5.0.1" "@rollup/pluginutils": "^5.0.1",
"workerpool": "^9.0.0"
}, },
"engines": { "engines": {
"node": ">=14.0.0" "node": ">=14.0.0"
@@ -2806,9 +2794,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz",
"integrity": "sha512-xB0b51TB7IfDEzAojXahmr+gfA00uYVInJGgNNkeQG6RPnCPGr7udsylFLTubuIUSRE6FkcI1NElyRt83PP5oQ==", "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -2820,9 +2808,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz",
"integrity": "sha512-XOjPId0qwSDKHaIsdzHJtKCxX0+nH8MhBwvrNsT7tVyKmdTx1jJ4XzN5RZXCdTzMpufLb+B8llTC0D8uCrLhcw==", "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2834,9 +2822,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz",
"integrity": "sha512-vQuRd28p0gQpPrS6kppd8IrWmFo42U8Pz1XLRjSZXq5zCqyMDYFABT7/sywL11mO1EL10Qhh7MVPEwkG8GiBeg==", "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2848,9 +2836,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz",
"integrity": "sha512-x6VG6U29+Ivlnajrg1IHdzXeAwSoEHBFVO+CtC9Brugx6de712CUJobRUxsIA0KYrQvCmzNrMPFTT1A4CCqNTg==", "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2862,9 +2850,9 @@
] ]
}, },
"node_modules/@rollup/rollup-freebsd-arm64": { "node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz",
"integrity": "sha512-Sgi0Uo6t1YCHJMNO3Y8+bm+SvOanUGkoZKn/VJPwYUe2kp31X5KnXmzKd/NjW8iA3gFcfNZ64zh14uOGrIllCQ==", "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -2876,9 +2864,9 @@
] ]
}, },
"node_modules/@rollup/rollup-freebsd-x64": { "node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz",
"integrity": "sha512-AM4xnwEZwukdhk7laMWfzWu9JGSVnJd+Fowt6Fd7QW1nrf3h0Hp7Qx5881M4aqrUlKBCybOxz0jofvIIfl7C5g==", "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2890,16 +2878,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz",
"integrity": "sha512-KUizqxpwaR2AZdAUsMWfL/C94pUu7TKpoPd88c8yFVixJ+l9hejkrwoK5Zj3wiNh65UeyryKnJyxL1b7yNqFQA==", "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2907,16 +2892,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz",
"integrity": "sha512-MZoQ/am77ckJtZGFAtPucgUuJWiop3m2R3lw7tC0QCcbfl4DRhQUBUkHWCkcrT3pqy5Mzv5QQgY6Dmlba6iTWg==", "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2924,16 +2906,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz",
"integrity": "sha512-Sez95TP6xGjkWB1608EfhCX1gdGrO5wzyN99VqzRtC17x/1bhw5VU1V0GfKUwbW/Xr1J8mSasoFoJa6Y7aGGSA==", "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2941,16 +2920,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz",
"integrity": "sha512-9Cs2Seq98LWNOJzR89EGTZoiP8EkZ9UbQhBlDgfAkM6asVna1xJ04W2CLYWDN/RpUgOjtQvcv8wQVi1t5oQazA==", "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2958,16 +2934,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-loong64-gnu": { "node_modules/@rollup/rollup-linux-loong64-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz",
"integrity": "sha512-n9yqttftgFy7IrNEnHy1bOp6B4OSe8mJDiPkT7EqlM9FnKOwUMnCK62ixW0Kd9Clw0/wgvh8+SqaDXMFvw3KqQ==", "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2975,16 +2948,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-loong64-musl": { "node_modules/@rollup/rollup-linux-loong64-musl": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz",
"integrity": "sha512-SfpNXDzVTqs/riak4xXcLpq5gIQWsqGWMhN1AGRQKB4qGSs4r0sEs3ervXPcE1O9RsQ5bm8Muz6zmQpQnPss1g==", "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -2992,16 +2962,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-ppc64-gnu": { "node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz",
"integrity": "sha512-LjaChED0wQnjKZU+tsmGbN+9nN1XhaWUkAlSbTdhpEseCS4a15f/Q8xC2BN4GDKRzhhLZpYtJBZr2NZhR0jvNw==", "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3009,16 +2976,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-ppc64-musl": { "node_modules/@rollup/rollup-linux-ppc64-musl": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz",
"integrity": "sha512-ojW7iTJSIs4pwB2xV6QXGwNyDctvXOivYllttuPbXguuKDX5vwpqYJsHc6D2LZzjDGHML414Tuj3LvVPe1CT1A==", "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3026,16 +2990,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz",
"integrity": "sha512-FP+Q6WTcxxvsr0wQczhSE+tOZvFPV8A/mUE6mhZYFW9/eea/y/XqAgRoLLMuE9Cz0hfX5bi7p116IWoB+P237A==", "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3043,16 +3004,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-musl": { "node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz",
"integrity": "sha512-L1uD9b/Ig8Z+rn1KttCJjwhN1FgjRMBKsPaBsDKkfUl7GfFq71pU4vWCnpOsGljycFEbkHWARZLf4lMYg3WOLw==", "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3060,16 +3018,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz",
"integrity": "sha512-EZc9NGTk/oSUzzOD4nYY4gIjteo2M3CiozX6t1IXGCOdgxJTlVu/7EdPeiqeHPSIrxkLhavqpBAUCfvC6vBOug==", "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3077,16 +3032,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz",
"integrity": "sha512-NQ9KyU1Anuy59L8+HHOKM++CoUxrQWrZWXRik4BJFm+7i5NP6q/SW43xIBr80zzt+PDBJ7LeNmloQGfa0JGk0w==", "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3094,16 +3046,13 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz",
"integrity": "sha512-GZkLk2t6naywsveSFBsEb0PLU+JC9ggVjbndsbG20VPhar6D1gkMfCx4NfP9owpovBXTN+eRdqGSkDGIxPHhmQ==", "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
@@ -3111,9 +3060,9 @@
] ]
}, },
"node_modules/@rollup/rollup-openbsd-x64": { "node_modules/@rollup/rollup-openbsd-x64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz",
"integrity": "sha512-1hjG9Jpl2KDOetr64iQd8AZAEjkDUUK5RbDkYWsViYLC1op1oNzdjMJeFiofcGhqbNTaY2kfgqowE7DILifsrA==", "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -3125,9 +3074,9 @@
] ]
}, },
"node_modules/@rollup/rollup-openharmony-arm64": { "node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz",
"integrity": "sha512-ARoKfflk0SiiYm3r1fmF73K/yB+PThmOwfWCk1sr7x/k9dc3uGLWuEE9if+Pw21el8MSpp3TMnG5vLNsJ/MMGQ==", "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -3139,9 +3088,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz",
"integrity": "sha512-oOST61G6VM45Mz2vdzWMr1s2slI7y9LqxEV5fCoWi2MDONmMvgsJVHSXxce/I2xOSZPTZ47nDPOl1tkwKWSHcw==", "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -3153,9 +3102,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz",
"integrity": "sha512-x5WgLi5dWpRz7WclKBGEF15LcWTh0ewrHM6Cq4A+WUbkysUMZNeqt05bwPonOQ3ihPS/WMhAZV5zB1DfnI4Sxg==", "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -3167,9 +3116,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-gnu": { "node_modules/@rollup/rollup-win32-x64-gnu": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz",
"integrity": "sha512-wS+zHAJRVP5zOL0e+a3V3E/NTEwM2HEvvNKoDy5Xcfs0o8lljxn+EAFPkUsxihBdmDq1JWzXmmB9cbssCPdxxw==", "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -3181,9 +3130,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz",
"integrity": "sha512-rhHyrMeLpErT/C7BxcEsU4COHQUzHyrPYW5tOZUeUhziNtRuYxmDWvqQqzpuUt8xpOgmbKa1btGXfnA/ANVO+g==", "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -3343,9 +3292,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.8", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@@ -7961,9 +7910,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -7985,9 +7931,6 @@
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -8009,9 +7952,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -8033,9 +7973,6 @@
"x64" "x64"
], ],
"dev": true, "dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0", "license": "MPL-2.0",
"optional": true, "optional": true,
"os": [ "os": [
@@ -8445,6 +8382,20 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/mylas": {
"version": "2.1.14",
"resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.14.tgz",
"integrity": "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=16.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/raouldeheer"
}
},
"node_modules/nanocolors": { "node_modules/nanocolors": {
"version": "0.2.13", "version": "0.2.13",
"resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz",
@@ -8903,6 +8854,19 @@
"url": "https://github.com/sponsors/jonschlinkert" "url": "https://github.com/sponsors/jonschlinkert"
} }
}, },
"node_modules/plimit-lit": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz",
"integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==",
"dev": true,
"license": "MIT",
"dependencies": {
"queue-lit": "^1.5.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/portfinder": { "node_modules/portfinder": {
"version": "1.0.38", "version": "1.0.38",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
@@ -9065,6 +9029,16 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/queue-lit": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz",
"integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/queue-microtask": { "node_modules/queue-microtask": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -9419,13 +9393,13 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.59.1", "version": "4.61.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz",
"integrity": "sha512-iZKH8BeoCwTCBTZBZWQQMreekd4mdomwdjIQ40GC1oZm6o+8PnNMIxFOiCsGMWeS8iDJ7KZcl7KwmKk/0HOQpA==", "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/estree": "1.0.8" "@types/estree": "1.0.9"
}, },
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
@@ -9435,31 +9409,31 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.59.1", "@rollup/rollup-android-arm-eabi": "4.61.1",
"@rollup/rollup-android-arm64": "4.59.1", "@rollup/rollup-android-arm64": "4.61.1",
"@rollup/rollup-darwin-arm64": "4.59.1", "@rollup/rollup-darwin-arm64": "4.61.1",
"@rollup/rollup-darwin-x64": "4.59.1", "@rollup/rollup-darwin-x64": "4.61.1",
"@rollup/rollup-freebsd-arm64": "4.59.1", "@rollup/rollup-freebsd-arm64": "4.61.1",
"@rollup/rollup-freebsd-x64": "4.59.1", "@rollup/rollup-freebsd-x64": "4.61.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.59.1", "@rollup/rollup-linux-arm-gnueabihf": "4.61.1",
"@rollup/rollup-linux-arm-musleabihf": "4.59.1", "@rollup/rollup-linux-arm-musleabihf": "4.61.1",
"@rollup/rollup-linux-arm64-gnu": "4.59.1", "@rollup/rollup-linux-arm64-gnu": "4.61.1",
"@rollup/rollup-linux-arm64-musl": "4.59.1", "@rollup/rollup-linux-arm64-musl": "4.61.1",
"@rollup/rollup-linux-loong64-gnu": "4.59.1", "@rollup/rollup-linux-loong64-gnu": "4.61.1",
"@rollup/rollup-linux-loong64-musl": "4.59.1", "@rollup/rollup-linux-loong64-musl": "4.61.1",
"@rollup/rollup-linux-ppc64-gnu": "4.59.1", "@rollup/rollup-linux-ppc64-gnu": "4.61.1",
"@rollup/rollup-linux-ppc64-musl": "4.59.1", "@rollup/rollup-linux-ppc64-musl": "4.61.1",
"@rollup/rollup-linux-riscv64-gnu": "4.59.1", "@rollup/rollup-linux-riscv64-gnu": "4.61.1",
"@rollup/rollup-linux-riscv64-musl": "4.59.1", "@rollup/rollup-linux-riscv64-musl": "4.61.1",
"@rollup/rollup-linux-s390x-gnu": "4.59.1", "@rollup/rollup-linux-s390x-gnu": "4.61.1",
"@rollup/rollup-linux-x64-gnu": "4.59.1", "@rollup/rollup-linux-x64-gnu": "4.61.1",
"@rollup/rollup-linux-x64-musl": "4.59.1", "@rollup/rollup-linux-x64-musl": "4.61.1",
"@rollup/rollup-openbsd-x64": "4.59.1", "@rollup/rollup-openbsd-x64": "4.61.1",
"@rollup/rollup-openharmony-arm64": "4.59.1", "@rollup/rollup-openharmony-arm64": "4.61.1",
"@rollup/rollup-win32-arm64-msvc": "4.59.1", "@rollup/rollup-win32-arm64-msvc": "4.61.1",
"@rollup/rollup-win32-ia32-msvc": "4.59.1", "@rollup/rollup-win32-ia32-msvc": "4.61.1",
"@rollup/rollup-win32-x64-gnu": "4.59.1", "@rollup/rollup-win32-x64-gnu": "4.61.1",
"@rollup/rollup-win32-x64-msvc": "4.59.1", "@rollup/rollup-win32-x64-msvc": "4.61.1",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@@ -10384,6 +10358,63 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/tsc-alias": {
"version": "1.8.17",
"resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.17.tgz",
"integrity": "sha512-EIduCZHqbNwPm8BZYfq1aD7BQ697A4h6uSGMOFQfYGoQwfrYFTKwYfy9Bv42YxHkduVBcn9Zx0DkX111DKskyg==",
"dev": true,
"license": "MIT",
"dependencies": {
"chokidar": "^3.5.3",
"commander": "^9.0.0",
"get-tsconfig": "^4.10.0",
"globby": "^11.0.4",
"mylas": "^2.1.9",
"normalize-path": "^3.0.0",
"plimit-lit": "^1.2.6"
},
"bin": {
"tsc-alias": "dist/bin/index.js"
},
"engines": {
"node": ">=16.20.2"
}
},
"node_modules/tsc-alias/node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/tsc-alias/node_modules/commander": {
"version": "9.5.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || >=14"
}
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.8.1", "version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -11421,6 +11452,13 @@
"workbox-core": "7.4.0" "workbox-core": "7.4.0"
} }
}, },
"node_modules/workerpool": {
"version": "9.3.4",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz",
"integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/wrap-ansi": { "node_modules/wrap-ansi": {
"version": "8.1.0", "version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+4 -2
View File
@@ -11,12 +11,13 @@
"start": "bs/start" "start": "bs/start"
}, },
"dependencies": { "dependencies": {
"@lit-labs/router": "^0.1.4",
"lit": "~3.3" "lit": "~3.3"
}, },
"devDependencies": { "devDependencies": {
"@custom-elements-manifest/analyzer": "~0.11", "@custom-elements-manifest/analyzer": "~0.11",
"@open-wc/testing": "~4.0", "@open-wc/testing": "~4.0",
"@rollup/plugin-babel": "~7.0", "@rollup/plugin-babel": "~7.1",
"@rollup/plugin-node-resolve": "~16.0", "@rollup/plugin-node-resolve": "~16.0",
"@types/mocha": "~10.0", "@types/mocha": "~10.0",
"@web/dev-server": "~0.4", "@web/dev-server": "~0.4",
@@ -25,9 +26,10 @@
"@web/test-runner": "~0.20", "@web/test-runner": "~0.20",
"babel-plugin-template-html-minifier": "~4.1", "babel-plugin-template-html-minifier": "~4.1",
"deepmerge": "~4.3", "deepmerge": "~4.3",
"rollup": "~4.59", "rollup": "~4.61",
"rollup-plugin-esbuild": "~6.2", "rollup-plugin-esbuild": "~6.2",
"rollup-plugin-workbox": "~8.1", "rollup-plugin-workbox": "~8.1",
"tsc-alias": "~1.8",
"tslib": "~2.8", "tslib": "~2.8",
"typescript": "~6.0" "typescript": "~6.0"
}, },
+6 -4
View File
@@ -4,8 +4,10 @@ import { rollupPluginHTML as html } from "@web/rollup-plugin-html";
import { importMetaAssets } from "@web/rollup-plugin-import-meta-assets"; import { importMetaAssets } from "@web/rollup-plugin-import-meta-assets";
import esbuild from "rollup-plugin-esbuild"; import esbuild from "rollup-plugin-esbuild";
import { generateSW } from "rollup-plugin-workbox"; import { generateSW } from "rollup-plugin-workbox";
import { paths } from "./bs/dev/paths.js";
import { join } from "node:path"; import { join } from "node:path";
const pathDist = join.bind(null, paths.dist);
export default { export default {
input: "index.html", input: "index.html",
output: { output: {
@@ -13,7 +15,7 @@ export default {
chunkFileNames: "[hash].js", chunkFileNames: "[hash].js",
assetFileNames: "[hash][extname]", assetFileNames: "[hash][extname]",
format: "es", format: "es",
dir: "dist", dir: pathDist(),
}, },
preserveEntrySignatures: false, preserveEntrySignatures: false,
@@ -22,7 +24,7 @@ export default {
html({ html({
minify: true, minify: true,
injectServiceWorker: true, injectServiceWorker: true,
serviceWorkerPath: "dist/sw.js", serviceWorkerPath: pathDist("sw.js"),
}), }),
/** Resolve bare module imports */ /** Resolve bare module imports */
nodeResolve(), nodeResolve(),
@@ -59,9 +61,9 @@ export default {
globIgnores: ["polyfills/*.js", "nomodule-*.js"], globIgnores: ["polyfills/*.js", "nomodule-*.js"],
navigateFallback: "/index.html", navigateFallback: "/index.html",
// where to output the generated sw // where to output the generated sw
swDest: join("dist", "sw.js"), swDest: pathDist("sw.js"),
// directory to match patterns against to be precached // directory to match patterns against to be precached
globDirectory: join("dist"), globDirectory: pathDist(),
// cache any html js and css by default // cache any html js and css by default
globPatterns: ["**/*.{html,js,css,webmanifest}"], globPatterns: ["**/*.{html,js,css,webmanifest}"],
skipWaiting: true, skipWaiting: true,
+9
View File
@@ -0,0 +1,9 @@
import { css } from "lit";
export const styles = css`
:host {
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
`;
+14
View File
@@ -0,0 +1,14 @@
import { LitElement, html } from "lit";
import { property, customElement } from "lit/decorators.js";
import { styles } from "./index.css.js";
@customElement("app-episode")
export class AppEpisode extends LitElement {
static override styles = styles;
@property({ type: String }) override id = "";
override render() {
return html`
Episode ${this.id}
`;
}
}
+16
View File
@@ -0,0 +1,16 @@
import { route } from "@/core/route.js";
import { html } from "lit";
export const path = "/episodes/" as const;
export const routes = route(
{
path: "/episodes/:id/",
async enter() {
await import("./index.js");
return true;
},
render({ id }){
return html`<app-episode id=${id}></app-episode>`;
},
},
);
+9
View File
@@ -0,0 +1,9 @@
import { css } from "lit";
export const styles = css`
:host {
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
`;
+14
View File
@@ -0,0 +1,14 @@
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { styles } from "./index.css.js";
@customElement("app-episodes")
export class AppEpisodes extends LitElement {
static override styles = styles;
override render() {
return html`
<div class="logo"></div>
<a href="/episodes/1">Episode 1</a>
`;
}
}
+18
View File
@@ -0,0 +1,18 @@
import { route } from "@/core/route.js";
import { routes as routeEpisode } from "./:id/routes.js";
import { html } from "lit";
export const path = "/episodes/" as const;
export const routes = route(
{
path,
async enter() {
await import("./index.js");
return true;
},
render(){
return html`<app-episodes></app-episodes>`;
},
},
routeEpisode,
);
+9
View File
@@ -0,0 +1,9 @@
import { css } from "lit";
export const styles = css`
:host {
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
`;
+22
View File
@@ -0,0 +1,22 @@
import { html } from "lit";
import { fixture, expect } from "@open-wc/testing";
import type { AppHome } from "./index.js";
import "./index.js";
describe("AppHome", () => {
let element: AppHome;
beforeEach(async () => {
element = await fixture(html`<app-home></app-home>`);
});
it("renders a h1", () => {
const h1 = element.shadowRoot!.querySelector('h1')!;
expect(h1).to.exist;
expect(h1.textContent).to.equal('My app');
});
it("passes the a11y audit", async () => {
await expect(element).shadowDom.to.be.accessible();
});
});
+15
View File
@@ -0,0 +1,15 @@
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { styles } from "./index.css.js";
@customElement("app-home")
export class AppHome extends LitElement {
static override styles = styles;
override render() {
return html`
<h1>My app</h1>
<p>Hello world</p>
<a href="/episodes">Episode</a>
`;
}
}
+16
View File
@@ -0,0 +1,16 @@
import { route } from "@/core/route.js";
import { html } from "lit";
export const path = "/" as const;
export const routes = route(
{
path,
async enter() {
await import("./index.js");
return true;
},
render(){
return html`<app-home></app-home>`;
},
},
);
-33
View File
@@ -1,33 +0,0 @@
import { css } from "lit";
export const styles = css`
:host {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
font-size: calc(10px + 2vmin);
color: #1a2b42;
max-width: 960px;
margin: 0 auto;
text-align: center;
background-color: var(--app-cfpodcasts-background-color);
}
main {
flex-grow: 1;
}
.logo {
margin-top: 36px;
}
.app-footer {
font-size: calc(12px + 0.5vmin);
align-items: center;
}
.app-footer a {
margin-left: 5px;
}
`;
-39
View File
@@ -1,39 +0,0 @@
import { LitElement, html } from "lit";
import { property, customElement } from "lit/decorators.js";
import { styles } from "./app-index.css.js";
const logo = import.meta.resolve("../../assets/logo.svg");
@customElement("app-cfpodcasts")
export class AppCfpodcasts extends LitElement {
@property({ type: String }) header = "My app";
static styles = styles;
render() {
return html`
<main>
<div class="logo"><img alt="open-wc logo" src=${logo} /></div>
<h1>${this.header}</h1>
<p>Edit <code>src/AppCfpodcasts.ts</code> and save to reload.</p>
<a
class="app-link"
href="https://open-wc.org/guides/developing-components/code-examples"
target="_blank"
rel="noopener noreferrer"
>
Code examples
</a>
</main>
<p class="app-footer">
🚽 Made with love by
<a
target="_blank"
rel="noopener noreferrer"
href="https://github.com/open-wc"
>open-wc</a
>.
</p>
`;
}
}

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

+24
View File
@@ -0,0 +1,24 @@
import { LitElement, css, html } from "lit";
import { customElement } from "lit/decorators.js";
const styles = css`
:host {
position: absolute;
clip: rect(1px 1px 1px 1px);
clip: rect(1px, 1px, 1px, 1px);
padding: 0;
border: 0;
height: 1px;
width: 1px;
overflow: hidden;
}
`;
@customElement("c-sronly")
export class CSronly extends LitElement {
static override styles = styles;
override render() {
return html`
<slot></slot>
`;
}
}
+15
View File
@@ -0,0 +1,15 @@
import type { PathRouteConfig } from "@lit-labs/router";
export function route(...routes: (PathRouteConfig|PathRouteConfig[])[]): PathRouteConfig[] {
return routes.flatMap(function process(route){
if (Array.isArray(route)) // already processed
return route;
const { path, ...rest }= route;
if (!path.endsWith("/"))
throw new Error("path must end with „/”!");
return [
{ path, ...rest },
{ path: path.slice(0, -1), ...rest },
];
});
}
+37
View File
@@ -0,0 +1,37 @@
import { css } from "lit";
export const styles = css`
:host {
height: 100vh;
height: 100dvh;
display: grid;
grid-template-areas:
"main"
"footer";
grid-template-rows: auto 4ch;
overflow: hidden;
}
main {
grid-area: main;
overflow: scroll;
}
nav {
grid-area: footer;
display: flex;
flex-flow: row nowrap;
justify-content: space-evenly;
align-items: center;
padding: .5ch;
a {
display: block;
height: 100%;
aspect-ratio: 1;
}
img {
height: 100%;
}
}
`;
+27
View File
@@ -0,0 +1,27 @@
import { html } from "lit";
import { fixture, expect } from "@open-wc/testing";
import type { AppCfpodcasts } from "./index.js";
import "./index.js";
describe("App", () => {
let element: AppCfpodcasts;
let nav: HTMLElement;
beforeEach(async () => {
element = await fixture(html`<app-cfpodcasts></app-cfpodcasts>`);
nav = element.shadowRoot!.querySelector("nav")!;
});
it("renders <main>", () => {
const content = element.shadowRoot!.querySelector('main')!;
expect(content).to.exist;
});
it("has all pages", async () => {
const links = nav.querySelectorAll("a");
await expect(links.length).to.equal(2);
});
it("passes the a11y audit", async () => {
await expect(nav).shadowDom.to.be.accessible();
});
});
+39
View File
@@ -0,0 +1,39 @@
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { styles } from "./index.css.js";
import { Router } from "@lit-labs/router";
import * as routeHome from "./app-home/routes.js";
import * as routeEpisodes from "./app-episodes/routes.js";
import "./components/c-sronly.js";
const logo = new URL("./assets/logo.svg", import.meta.url);
@customElement("app-cfpodcasts")
export class AppCfpodcasts extends LitElement {
static override styles = styles;
private _routes = new Router(this, [
...routeHome.routes,
...routeEpisodes.routes,
]);
override render() {
console.log(this._routes); // TODO
return html`
<main>${this._routes.outlet()}</main>
<nav>
<a
href="${this._routes.link("/")}"
title="Home"
>
<img alt="" src=${logo} />
<c-sronly>Home</c-sronly>
</a>
<a
href="${this._routes.link(routeEpisodes.path)}"
>
Episodes
</a>
</nav>
`;
}
}
-22
View File
@@ -1,22 +0,0 @@
import { html } from 'lit';
import { fixture, expect } from '@open-wc/testing';
import type { AppCfpodcasts } from '../src/app-index.js';
import '../src/app-cfpodcasts.js';
describe('AppCfpodcasts', () => {
let element: AppCfpodcasts;
beforeEach(async () => {
element = await fixture(html`<app-cfpodcasts></app-cfpodcasts>`);
});
it('renders a h1', () => {
const h1 = element.shadowRoot!.querySelector('h1')!;
expect(h1).to.exist;
expect(h1.textContent).to.equal('My app');
});
it('passes the a11y audit', async () => {
await expect(element).shadowDom.to.be.accessible();
});
});
+25 -5
View File
@@ -1,21 +1,41 @@
{ {
"compilerOptions": { "compilerOptions": {
"verbatimModuleSyntax": true,
"noEmitOnError": true,
"target": "es2021", "target": "es2021",
"skipLibCheck": true,
"module": "NodeNext", "module": "NodeNext",
"moduleResolution": "NodeNext", "moduleResolution": "NodeNext",
"noEmitOnError": true, "isolatedModules": true,
"lib": ["es2021", "dom", "DOM.Iterable"],
"strict": true, "strict": true,
"esModuleInterop": false, "strictBindCallApply": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noUncheckedSideEffectImports": true,
"allowUnreachableCode": false,
"noUncheckedIndexedAccess": true,
"noPropertyAccessFromIndexSignature": true,
"erasableSyntaxOnly": true,
"noImplicitOverride": true,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"useDefineForClassFields": false,
"experimentalDecorators": true, "experimentalDecorators": true,
"importHelpers": true, "importHelpers": true,
"outDir": "out-tsc",
"noErrorTruncation": false,
"outDir": ".tmp/tsc",
"sourceMap": true, "sourceMap": true,
"inlineSources": true, "inlineSources": true,
"rootDir": "./", "rootDir": "./",
"incremental": true, "incremental": true,
"skipLibCheck": true "types": ["mocha"],
"lib": ["es2021", "dom", "DOM.Iterable"],
"paths": {
"@/*": ["./src/*"]
}
}, },
"include": ["**/*.ts"] "include": ["**/*.ts"]
} }
+20 -10
View File
@@ -1,21 +1,31 @@
// import { hmrPlugin, presets } from "@open-wc/dev-server-hmr"; // import { hmrPlugin, presets } from "@open-wc/dev-server-hmr";
/** Use Hot Module replacement by adding --hmr to the start command */ /** Use Hot Module replacement by adding --watch to the start command */
const hmr = process.argv.includes("--hmr"); //const hmr = process.argv.includes("--watch");
const [ mode ] = process.argv.slice(2);
import { paths } from "./bs/dev/paths.js";
import { join } from "node:path";
const pathDist = join.bind(null, paths.dist);
const target = mode !== "dist" // OR "src"
? {
rootDir: ".",
appIndex: "index.html",
}
: {
rootDir: pathDist(),
appIndex: pathDist("index.html"),
};
export default /** @type {import("@web/dev-server").DevServerConfig} */ ({ export default /** @type {import("@web/dev-server").DevServerConfig} */ ({
open: "/", open: "/", // SPA routing
watch: !hmr, nodeResolve: { // Resolve bare module imports
/** Resolve bare module imports */
nodeResolve: {
exportConditions: ["browser", "development"], exportConditions: ["browser", "development"],
}, },
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */ // esbuildTarget: "auto" // Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
// esbuildTarget: "auto"
/** Set appIndex to enable SPA routing */ ...target,
appIndex: "./index.html",
plugins: [ plugins: [
/** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */ /** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
+10 -4
View File
@@ -1,26 +1,32 @@
// import { playwrightLauncher } from '@web/test-runner-playwright'; // import { playwrightLauncher } from '@web/test-runner-playwright';
const filteredLogs = ['Running in dev mode', 'Lit is in dev mode']; const filteredLogs = ["Running in dev mode", "Lit is in dev mode"];
import { paths } from "./bs/dev/paths.js";
import { join } from "node:path";
export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({ export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({
/** Test files to run */ /** Test files to run */
files: 'out-tsc/test/**/*.test.js', files: join(paths.tscoutput, "src/**/*.test.js"),
/** Resolve bare module imports */ /** Resolve bare module imports */
nodeResolve: { nodeResolve: {
exportConditions: ['browser', 'development'], exportConditions: ["browser", "development"],
}, },
/** Filter out lit dev mode logs */ /** Filter out lit dev mode logs */
filterBrowserLogs(log) { filterBrowserLogs(log) {
for (const arg of log.args) { for (const arg of log.args) {
if (typeof arg === 'string' && filteredLogs.some(l => arg.includes(l))) { if (typeof arg === "string" && filteredLogs.some(l => arg.includes(l))) {
return false; return false;
} }
} }
return true; return true;
}, },
coverageConfig: {
reportDir: join(paths.tmp, "coverage"),
},
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */ /** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
// esbuildTarget: 'auto', // esbuildTarget: 'auto',