Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
ed632ad3fb
|
|||
|
5a0a2de0f0
|
|||
|
bcb51d5397
|
|||
|
97983aff87
|
|||
|
c000517fd1
|
|||
|
8fe3a87ee2
|
|||
|
b23974a51f
|
|||
|
656c2da8cf
|
@@ -1,13 +1,49 @@
|
|||||||
|
# CommaFeed Podcasts
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img width="200" src="./assets/logo.svg"></img>
|
<img width="200" src="./src/assets/logo.svg" alt="CommaFeed Podcasts logo">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# CommaFeed Podcasts
|
> **Experimental / WIP** – A progressive web application for podcast consumption, powered by [CommaFeed](https://github.com/Athou/commafeed) as the backend.
|
||||||
**Experimantal/WIP** PWA podcast app. Idea is to use [CommaFeed](https://github.com/Athou/commafeed) as a backend.
|
|
||||||
|
|
||||||
|
## Links
|
||||||
- [Plan](./changelog/PLAN.md), [Task](./changelog/TASK.md)
|
- [Plan](./changelog/PLAN.md), [Task](./changelog/TASK.md)
|
||||||
- [Building scripts](./bs/README.md)
|
|
||||||
- [](https://github.com/open-wc)
|
- [](https://github.com/open-wc)
|
||||||
- [What is Lit? – Lit](https://lit.dev/docs/)
|
- [What is Lit? – Lit](https://lit.dev/docs/)
|
||||||
- [@lit-labs/router - npm](https://www.npmjs.com/package/@lit-labs/router)
|
- [@lit-labs/router - npm](https://www.npmjs.com/package/@lit-labs/router)
|
||||||
- [lit-translate - npm](https://www.npmjs.com/package/lit-translate)
|
- [lit-translate - npm](https://www.npmjs.com/package/lit-translate)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- **PWA** support with offline caching.
|
||||||
|
- Client‑side routing via a lightweight router.
|
||||||
|
- Dynamic page rendering based on URL parameters (e.g., `/episodes/:id`).
|
||||||
|
- Built with Lit, TypeScript and Open‑WC tooling.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
bs/start
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build Scripts
|
||||||
|
See [bs/README.md](./bs/README.md) for available build and deployment scripts.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
Tests are written with `@open-wc/testing` (Mocha) / Web Test Runner and follow the `*.test.ts` convention. Run all tests via:
|
||||||
|
```bash
|
||||||
|
bs/test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
- Overall development plan: [docs/dev/PLAN.md](./docs/dev/PLAN.md)
|
||||||
|
- Overall task board: [docs/dev/TASK.md](./docs/dev/TASK.md)
|
||||||
|
- App source overview: [src/README.md](./src/README.md)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
TBD
|
||||||
|
<!--
|
||||||
|
Pull requests are welcome! Please read the contributing guidelines in `CONTRIBUTING.md` (if present) or open an issue to discuss major changes.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## License
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|||||||
+4
-2
@@ -9,9 +9,11 @@ isHelp() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
echoReadmeInfo() {
|
echoReadmeInfo() {
|
||||||
local -r script="bs/${0##*/}"
|
local -r script="bs/${0##*bs/}"
|
||||||
local info
|
local info
|
||||||
info="$(grep -A1 "## $script" "$readme" | tail -n1)"
|
if ! info="$(grep -A1 "## $script" "$readme" | tail -n1)"; then
|
||||||
|
info="No info found in $readme for $script"
|
||||||
|
fi
|
||||||
cat <<-EOF
|
cat <<-EOF
|
||||||
$info
|
$info
|
||||||
Usage: $script [options]
|
Usage: $script [options]
|
||||||
|
|||||||
+10
-4
@@ -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
@@ -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 "${@}"
|
||||||
|
|||||||
@@ -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
@@ -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 "${@}"
|
||||||
@@ -16,7 +16,7 @@ help(){
|
|||||||
}
|
}
|
||||||
main(){
|
main(){
|
||||||
help "${@}"
|
help "${@}"
|
||||||
$tsc "${@}"
|
$tsc --noEmit "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
main "${@}"
|
main "${@}"
|
||||||
Executable
+44
@@ -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
@@ -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 "${@}"
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# Basic Episodes Fetch
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
This plan focuses on adding a minimal **episodes‑fetch** feature that pulls podcast episodes from the CommaFeed backend
|
||||||
|
using environment variables for configuration.
|
||||||
|
|
||||||
|
The plan is derived from:
|
||||||
|
- `docs/dev/README.md` (API endpoints, authentication)
|
||||||
|
- `src/` structure and existing route system
|
||||||
|
- Build scripts in `bs/` – only linting is required at this stage.
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
1. **API client** (DONE)
|
||||||
|
- Adds `src/api` folder to the project structure (update also @src/README.md).
|
||||||
|
- Implement a lightweight wrapper around `fetch` in `src/api/fetchAPI.ts`.
|
||||||
|
- Build `authHeader()` that returns the Basic‑Auth header using for now hardcoded vars.
|
||||||
|
1. **Episode service** (DONE)
|
||||||
|
- Add `src/api/episodes.ts` with `getEpisodes(feedId)` and `getEpisode(id)`.
|
||||||
|
- Add data types
|
||||||
|
- Use `/rest/feed/entries?feed_id=${feedId}` endpoint.
|
||||||
|
1. **Page update** (TODO)
|
||||||
|
- Add fetching all episodes
|
||||||
|
- Update `<app-episodes>` to reflect loading state(s).
|
||||||
|
- Add episode list item component.
|
||||||
|
- Update `<app-episodes>` to render the episode list received from the route context.
|
||||||
|
1. **Testing** (TODO)
|
||||||
|
- Add unit tests for `api/*.ts` using project test setup.
|
||||||
|
- Add unit test for created component(s)
|
||||||
|
1. **Linting** (TODO)
|
||||||
|
- Ensure all new files satisfy the lint rule defined in `bs/dev/lint`.
|
||||||
|
|
||||||
|
## Expected Output
|
||||||
|
- Visiting `/episodes/` will display a list of episodes fetched from CommaFeed.
|
||||||
|
- Episodes are identified by their `id` and displayed with title, publish date, and an audio link if available.
|
||||||
|
- Authentication uses the env variables; no credentials are hard‑coded in source.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> **Note**: This plan intentionally keeps external dependencies minimal. It can be extended later for pagination, caching, or offline support.
|
||||||
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
v1.0.md
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# v1.0.0
|
||||||
|
|
||||||
|
- [x] initial setup (`bs`, app structure, …)
|
||||||
|
- [x] adds routing support
|
||||||
|
- [ ] [episodes basic fetch](./plans/plan-basic-episodes.md)
|
||||||
|
- [ ] :bug: cors
|
||||||
|
- [ ] :bug: `.env.js`/`ENV`
|
||||||
@@ -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.
|
||||||
@@ -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 & Daniela - YouTube" type="rss" title="Playlist: Čestmír & Daniela - YouTube" xmlUrl="http://rss-bridge.jaandrle.cz/?action=display&bridge=YoutubeBridge&token=Chief*Snowplow1*Drastic&context=By+playlist+Id&p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&duration_min=&duration_max=&format=Atom" htmlUrl="http://rss-bridge.jaandrle.cz/?action=display&bridge=YoutubeBridge&token=Chief*Snowplow1*Drastic&context=By+playlist+Id&p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&duration_min=&duration_max=&format=Atom" />
|
<outline text="Playlist: Čestmír & Daniela - YouTube" type="rss" title="Playlist: Čestmír & Daniela - YouTube" xmlUrl="http://rss-bridge.jaandrle.cz/?action=display&bridge=YoutubeBridge&token=Chief*Snowplow1*Drastic&context=By+playlist+Id&p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&duration_min=&duration_max=&format=Atom" htmlUrl="http://rss-bridge.jaandrle.cz/?action=display&bridge=YoutubeBridge&token=Chief*Snowplow1*Drastic&context=By+playlist+Id&p=PLPK5bz7v9zh1BFEHQrNri-iCeugTjq1Jj&duration_min=&duration_max=&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 & Beneš" type="rss" title="Redneck & 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
@@ -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>
|
||||||
|
|||||||
Generated
+353
-188
@@ -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,11 @@
|
|||||||
"@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",
|
"koa-proxies": "^0.12.4",
|
||||||
|
"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 +2204,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 +2447,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2452,9 +2461,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2469,9 +2475,6 @@
|
|||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2486,9 +2489,6 @@
|
|||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2503,9 +2503,6 @@
|
|||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2520,9 +2517,6 @@
|
|||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2537,9 +2531,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2554,9 +2545,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2683,14 +2671,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 +2795,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 +2809,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 +2823,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 +2837,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 +2851,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 +2865,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 +2879,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 +2893,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 +2907,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 +2921,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 +2935,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 +2949,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 +2963,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 +2977,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 +2991,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 +3005,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 +3019,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 +3033,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 +3047,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 +3061,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 +3075,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 +3089,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 +3103,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 +3117,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 +3131,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 +3293,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"
|
||||||
},
|
},
|
||||||
@@ -6085,6 +6035,13 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/eventemitter3": {
|
||||||
|
"version": "4.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
||||||
|
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/events-universal": {
|
"node_modules/events-universal": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
|
||||||
@@ -6297,6 +6254,27 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/follow-redirects": {
|
||||||
|
"version": "1.16.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
|
||||||
|
"integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"debug": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/for-each": {
|
"node_modules/for-each": {
|
||||||
"version": "0.3.5",
|
"version": "0.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
||||||
@@ -6837,6 +6815,21 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/http-proxy": {
|
||||||
|
"version": "1.18.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
|
||||||
|
"integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"eventemitter3": "^4.0.0",
|
||||||
|
"follow-redirects": "^1.0.0",
|
||||||
|
"requires-port": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/http-proxy-agent": {
|
"node_modules/http-proxy-agent": {
|
||||||
"version": "7.0.2",
|
"version": "7.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
|
||||||
@@ -7741,6 +7734,21 @@
|
|||||||
"etag": "^1.8.1"
|
"etag": "^1.8.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/koa-proxies": {
|
||||||
|
"version": "0.12.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/koa-proxies/-/koa-proxies-0.12.4.tgz",
|
||||||
|
"integrity": "sha512-xxrEtN0e7s7/gNRoOMUltCbuIaCWqTQUTZNWQqet/8MoxSW0hG422lx2Al9FfYO3nCeA+b5c5/YmILRzavivDA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"http-proxy": "^1.18.1",
|
||||||
|
"path-match": "^1.2.4",
|
||||||
|
"uuid": "^8.3.2"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"koa": ">=2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/koa-send": {
|
"node_modules/koa-send": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz",
|
||||||
@@ -7961,9 +7969,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 +7990,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 +8011,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 +8032,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 +8441,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",
|
||||||
@@ -8828,6 +8838,39 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/path-match": {
|
||||||
|
"version": "1.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-match/-/path-match-1.2.4.tgz",
|
||||||
|
"integrity": "sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==",
|
||||||
|
"deprecated": "This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"http-errors": "~1.4.0",
|
||||||
|
"path-to-regexp": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-match/node_modules/http-errors": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "2.0.1",
|
||||||
|
"statuses": ">= 1.2.1 < 2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-match/node_modules/inherits": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
"node_modules/path-parse": {
|
"node_modules/path-parse": {
|
||||||
"version": "1.0.7",
|
"version": "1.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||||
@@ -8859,6 +8902,23 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
|
"node_modules/path-to-regexp": {
|
||||||
|
"version": "1.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
|
||||||
|
"integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-to-regexp/node_modules/isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/path-type": {
|
"node_modules/path-type": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
||||||
@@ -8903,6 +8963,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 +9138,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",
|
||||||
@@ -9301,6 +9384,13 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/requires-port": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/resolve": {
|
"node_modules/resolve": {
|
||||||
"version": "1.22.11",
|
"version": "1.22.11",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
|
||||||
@@ -9419,13 +9509,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 +9525,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 +10474,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",
|
||||||
@@ -10699,6 +10846,17 @@
|
|||||||
"browserslist": ">= 4.21.0"
|
"browserslist": ">= 4.21.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/uuid": {
|
||||||
|
"version": "8.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||||
|
"deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/v8-to-istanbul": {
|
"node_modules/v8-to-istanbul": {
|
||||||
"version": "9.3.0",
|
"version": "9.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
|
||||||
@@ -11421,6 +11579,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",
|
||||||
|
|||||||
+5
-2
@@ -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,11 @@
|
|||||||
"@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",
|
"koa-proxies": "^0.12.4",
|
||||||
|
"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
@@ -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,
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
# CommaFeed Podcasts – Web Component/App
|
||||||
|
|
||||||
|
This repository contains the **source code** for a small progressive web application built with Lit and Open‑WC recommendations.
|
||||||
|
|
||||||
|
## High‑level structure
|
||||||
|
|
||||||
|
### Pages (`app-*`, `index.ts`, `*.css.ts`, `*.test.ts`)
|
||||||
|
Folder naming (`app-name`) corresponds to custom element name (`<app-name>`) and endpoint (`/name`).
|
||||||
|
Dynamic parameters are supported using `:` in the name (`app-:id`/`<app-episode id=${id}>`/`/episodes/:id`).
|
||||||
|
|
||||||
|
Each folder follows a consistent pattern:
|
||||||
|
|
||||||
|
1. **Page component file** – `index.ts` contains the Lit component definition.
|
||||||
|
1. **Styles** – `*.css.ts` holds the scoped CSS for that component.
|
||||||
|
1. **Tests** – optional `*.test.ts` hoding overall app router tests (probably integration test).
|
||||||
|
1. **Routing helper** – optional `routes.ts`
|
||||||
|
1. **README** – describes the module’s purpose and key files.
|
||||||
|
|
||||||
|
Below is an overview of the current pages:
|
||||||
|
|
||||||
|
- [`<app-home>`](./app-home)
|
||||||
|
- [`<app-episodes>`](./app-episodes)
|
||||||
|
|
||||||
|
*(More feature modules can be added in the future following the same pattern.)*
|
||||||
|
|
||||||
|
### Components (`src/components/`, `*.css.ts`, `*.test.ts`)
|
||||||
|
The `components/` folder contains re‐usable UI building blocks shared across feature modules.
|
||||||
|
|
||||||
|
- file naming: `c-name` (files `c-name.ts` and `c-name.css.ts`)
|
||||||
|
- folder follows the same pattern as pages (except no routes)
|
||||||
|
|
||||||
|
### Core (`src/core/`, `*.test.ts`)
|
||||||
|
The `core/` folder contains routing and translation infrastructure, and shared utilities.
|
||||||
|
|
||||||
|
The `*.test.ts` files are used for unit tests for given core file.
|
||||||
|
|
||||||
|
### Assets (`src/assets/`)
|
||||||
|
The `assets/` folder contains static files (logos, icons, etc.) that are imported by components.
|
||||||
|
|
||||||
|
Use `new URL('/assets/logo.png', import.meta.url)` to get the URL of a static file.
|
||||||
|
|
||||||
|
## How routing works
|
||||||
|
The application uses a lightweight client‑side router (see `core/routes.ts`).
|
||||||
|
Route definitions look like:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
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>`;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
```
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import { fetchAPI } from "./fetchAPI.js";
|
||||||
|
|
||||||
|
export interface Episode {
|
||||||
|
id: string;
|
||||||
|
title: string;
|
||||||
|
content: string; // HTML
|
||||||
|
date: number;
|
||||||
|
feedId: string;
|
||||||
|
feedName: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FeedEntriesResponse {
|
||||||
|
entries: Episode[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches all entries for a given feed.
|
||||||
|
* @param feedId - The ID of the feed.
|
||||||
|
*/
|
||||||
|
export async function getEpisodes(feedId: string= "all"): Promise<Episode[]> {
|
||||||
|
const response = await fetchAPI(`category/entries?id=${feedId}`);
|
||||||
|
if (!response.ok)
|
||||||
|
throw new Error(`Failed to fetch episodes: ${response.statusText}`);
|
||||||
|
const data = await response.json() as FeedEntriesResponse;
|
||||||
|
return data.entries || [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches a single episode by its ID.
|
||||||
|
* @param id - The ID of the episode.
|
||||||
|
*/
|
||||||
|
export async function getEpisode(id: string): Promise<Episode> {
|
||||||
|
const response = await fetchAPI(`feed/entry/${id}/`);
|
||||||
|
if (!response.ok)
|
||||||
|
throw new Error(`Failed to fetch episode: ${response.statusText}`);
|
||||||
|
return await response.json() as Episode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
const url_server = "";
|
||||||
|
const url_base = `${url_server}/rest`;
|
||||||
|
const [ username, password ] = ":".split(':');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the Basic Authentication header.
|
||||||
|
*/
|
||||||
|
export function authHeader(): string {
|
||||||
|
const credentials = btoa(`${username}:${password}`);
|
||||||
|
return `Basic ${credentials}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A lightweight wrapper around fetch for the CommaFeed API.
|
||||||
|
* @param endpoint - The API endpoint (e.g., '/rest/feed/')
|
||||||
|
* @param options - Fetch options
|
||||||
|
*/
|
||||||
|
export async function fetchAPI(endpoint: string, options: RequestInit = {}): Promise<Response> {
|
||||||
|
|
||||||
|
const url = `${url_base}/${endpoint}`;
|
||||||
|
const auth = authHeader();
|
||||||
|
|
||||||
|
options = { ...options };
|
||||||
|
const { headers = {} } = options;
|
||||||
|
Reflect.deleteProperty(options, "headers");
|
||||||
|
|
||||||
|
return fetch(url, {
|
||||||
|
...options,
|
||||||
|
headers: {
|
||||||
|
Authorization: auth,
|
||||||
|
Accept: "application/json",
|
||||||
|
...headers,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# `<app-episodes>`
|
||||||
|
|
||||||
|
Displays a list of podcast episodes.
|
||||||
|
|
||||||
|
## Subroutes
|
||||||
|
|
||||||
|
### `<app-:id>`
|
||||||
|
The component is routed to via `/episodes/:id?` where `:id` is an optional episode identifier used to show a specific episode.
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -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}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>`;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import { css } from "lit";
|
||||||
|
export const styles = css`
|
||||||
|
:host {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
--width: 33ch;
|
||||||
|
/* internal */
|
||||||
|
margin-inline: max(7.5ch, calc(50% - var(--width)));
|
||||||
|
}
|
||||||
|
.error {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import { LitElement, html } from "lit";
|
||||||
|
import { customElement, state, property } from "lit/decorators.js";
|
||||||
|
import { styles } from "./index.css.js";
|
||||||
|
import { getEpisodes, type Episode } from "../api/episodes.js";
|
||||||
|
import "../components/c-episode-list-card/index.js";
|
||||||
|
|
||||||
|
@customElement("app-episodes")
|
||||||
|
export class AppEpisodes extends LitElement {
|
||||||
|
static override styles = styles;
|
||||||
|
|
||||||
|
@property({ type: String }) feedId: string = "all";
|
||||||
|
@state() private episodes: Episode[] = [];
|
||||||
|
@state() private loading = true;
|
||||||
|
@state() private error: string | null = null;
|
||||||
|
|
||||||
|
override async firstUpdated() {
|
||||||
|
await this.fetchEpisodes();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async fetchEpisodes() {
|
||||||
|
this.loading = true;
|
||||||
|
this.error = null;
|
||||||
|
try {
|
||||||
|
this.episodes = await getEpisodes(this.feedId);
|
||||||
|
} catch (e) {
|
||||||
|
this.error = e instanceof Error ? e.message : "An unknown error occurred";
|
||||||
|
} finally {
|
||||||
|
this.loading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override render() {
|
||||||
|
if (this.loading) {
|
||||||
|
return html`<p>Loading episodes...</p>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.error) {
|
||||||
|
return html`<p class="error">Error: ${this.error}</p>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.episodes.length === 0) {
|
||||||
|
return html`<p>No episodes found.</p>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return html`
|
||||||
|
<h1>Episodes</h1>
|
||||||
|
${this.episodes.map((episode) => html`<c-episode-list-card .episode=${episode}></c-episode-list-card>`)}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import { route } from "@/core/route.js";
|
||||||
|
import { routes as routeEpisode } from "./app-: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,
|
||||||
|
);
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# app‑home
|
||||||
|
|
||||||
|
This feature module implements the home page of the podcast application and handles navigation logic.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
- `index.ts` – Lit component that renders the landing view.
|
||||||
|
- `router.js` (if any) – Routing helpers for navigating between pages.
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -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">Episodes</a>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>`;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
@@ -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 |
@@ -0,0 +1,31 @@
|
|||||||
|
import { css } from "lit";
|
||||||
|
|
||||||
|
export const styles = css`
|
||||||
|
:host {
|
||||||
|
display: grid;
|
||||||
|
grid-template-areas:
|
||||||
|
"title title"
|
||||||
|
"date feed"
|
||||||
|
"content content";
|
||||||
|
grid-template-rows:
|
||||||
|
fit-content
|
||||||
|
fit-content
|
||||||
|
1fr;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
grid-area: title;
|
||||||
|
text-wrap: balance;
|
||||||
|
text-wrap: pretty;
|
||||||
|
}
|
||||||
|
time, .feed {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
time { grid-area: date; }
|
||||||
|
.feed { grid-area: feed; }
|
||||||
|
.content {
|
||||||
|
grid-area: content;
|
||||||
|
max-height: 3.5lh;
|
||||||
|
overflow: auto;
|
||||||
|
font-size: .9em;
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { html } from "lit";
|
||||||
|
import { fixture, expect } from "@open-wc/testing";
|
||||||
|
import { type Episode } from "@/api/episodes.js";
|
||||||
|
import "./index.js";
|
||||||
|
|
||||||
|
describe("EpisodeListItem", () => {
|
||||||
|
const mockEpisode: Episode = {
|
||||||
|
id: "1",
|
||||||
|
title: "Test Episode",
|
||||||
|
date: 1781258812000,
|
||||||
|
content: "<b>Test content</b>",
|
||||||
|
feedId: "2",
|
||||||
|
feedName: "Test Feed",
|
||||||
|
};
|
||||||
|
|
||||||
|
it("renders correctly with episode data", async () => {
|
||||||
|
const el = await fixture(html`<episode-list-card .episode=${mockEpisode}></episode-list-card>`);
|
||||||
|
|
||||||
|
const title = el.shadowRoot!.querySelector("h2");
|
||||||
|
expect(title?.textContent).to.equal("Test Episode");
|
||||||
|
const time = el.shadowRoot!.querySelector("time");
|
||||||
|
expect(time?.textContent).to.contain("2023");
|
||||||
|
const feed = el.shadowRoot!.querySelector(".feed");
|
||||||
|
expect(feed?.textContent).to.equal("Test Feed");
|
||||||
|
const content = el.shadowRoot!.querySelector(".content");
|
||||||
|
expect(content?.innerHTML.trim()).to.equal("<b>Test content</b>");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("renders empty when no episode is provided", async () => {
|
||||||
|
const el = await fixture(html`<episode-list-card></episode-list-card>`);
|
||||||
|
expect(el.shadowRoot!.innerHTML.trim()).to.equal("");
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { LitElement, html } from "lit";
|
||||||
|
import { property, customElement } from "lit/decorators.js";
|
||||||
|
import { type Episode } from "@/api/episodes.js";
|
||||||
|
import { styles } from "./index.css.js";
|
||||||
|
import { templateContent } from "lit/directives/template-content.js";
|
||||||
|
|
||||||
|
@customElement("c-episode-list-card")
|
||||||
|
export class EpisodeListCard extends LitElement {
|
||||||
|
static override styles = styles;
|
||||||
|
|
||||||
|
@property({ type: Object }) episode!: Episode;
|
||||||
|
|
||||||
|
override render() {
|
||||||
|
if (!this.episode) return html``;
|
||||||
|
const { id, title, content, date, feedId, feedName }= this.episode;
|
||||||
|
const dateString = new Date(date).toLocaleDateString();
|
||||||
|
const template = document.createElement("template");
|
||||||
|
try {
|
||||||
|
// @ts-expect-error 2551
|
||||||
|
template.setHTML(content);
|
||||||
|
} catch (e) {
|
||||||
|
template.innerText = content;
|
||||||
|
}
|
||||||
|
return html`
|
||||||
|
<h2>
|
||||||
|
<a href="/episodes/${id}">${title}</a>
|
||||||
|
</h2>
|
||||||
|
<time datetime="${date}">${dateString}</time>
|
||||||
|
<a class="feed" href="/feeds/${feedId}">${feedName}</a>
|
||||||
|
<div class="content">
|
||||||
|
${templateContent(template)}
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 },
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -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%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
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="Navigate to the home page"
|
||||||
|
>
|
||||||
|
<img alt="" src=${logo} />
|
||||||
|
<c-sronly>Home</c-sronly>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="${this._routes.link(routeEpisodes.path)}"
|
||||||
|
title="Navigate to the list of episodes"
|
||||||
|
>
|
||||||
|
Episodes
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
+26
-5
@@ -1,21 +1,42 @@
|
|||||||
{
|
{
|
||||||
"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/*"],
|
||||||
|
"ENV": ["./.env.js"]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"include": ["**/*.ts"]
|
"include": ["**/*.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
+34
-10
@@ -1,21 +1,45 @@
|
|||||||
// 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"),
|
||||||
|
};
|
||||||
|
|
||||||
|
import proxy from "koa-proxies";
|
||||||
|
import { users } from "./.env.js";
|
||||||
|
const middleware = [
|
||||||
|
proxy("/rest", {
|
||||||
|
target: "https://rss.jaandrle.cz",
|
||||||
|
headers: {
|
||||||
|
Authorization: "Basic " + Buffer.from(users[0]).toString("base64"),
|
||||||
|
},
|
||||||
|
logs: true,
|
||||||
|
changeOrigin: true,
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
|
||||||
export default /** @type {import("@web/dev-server").DevServerConfig} */ ({
|
export default /** @type {import("@web/dev-server").DevServerConfig} */ ({
|
||||||
open: "/",
|
middleware,
|
||||||
watch: !hmr,
|
open: "/", // SPA routing
|
||||||
/** Resolve bare module imports */
|
nodeResolve: { // 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 */
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user