mirror of
https://github.com/catdevnull/transicion-desordenada-diablo
synced 2024-11-14 10:21:38 +00:00
WIP: sveltekit
This commit is contained in:
parent
0ee2b5993e
commit
6340a8f58b
35 changed files with 1245 additions and 21 deletions
10
frontend-sveltekit/.gitignore
vendored
Normal file
10
frontend-sveltekit/.gitignore
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
1
frontend-sveltekit/.npmrc
Normal file
1
frontend-sveltekit/.npmrc
Normal file
|
@ -0,0 +1 @@
|
|||
engine-strict=true
|
13
frontend-sveltekit/.prettierignore
Normal file
13
frontend-sveltekit/.prettierignore
Normal file
|
@ -0,0 +1,13 @@
|
|||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
8
frontend-sveltekit/.prettierrc
Normal file
8
frontend-sveltekit/.prettierrc
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"useTabs": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 100,
|
||||
"plugins": ["prettier-plugin-svelte"],
|
||||
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
||||
}
|
38
frontend-sveltekit/README.md
Normal file
38
frontend-sveltekit/README.md
Normal file
|
@ -0,0 +1,38 @@
|
|||
# create-svelte
|
||||
|
||||
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
|
||||
|
||||
## Creating a project
|
||||
|
||||
If you're seeing this, you've probably already done this step. Congrats!
|
||||
|
||||
```bash
|
||||
# create a new project in the current directory
|
||||
npm create svelte@latest
|
||||
|
||||
# create a new project in my-app
|
||||
npm create svelte@latest my-app
|
||||
```
|
||||
|
||||
## Developing
|
||||
|
||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
|
||||
# or start the server and open the app in a new browser tab
|
||||
npm run dev -- --open
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To create a production version of your app:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
You can preview the production build with `npm run preview`.
|
||||
|
||||
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
|
37
frontend-sveltekit/package.json
Normal file
37
frontend-sveltekit/package.json
Normal file
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"name": "frontend-sveltekit",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"lint": "prettier --check .",
|
||||
"format": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@poppanator/sveltekit-svg": "^4.1.3",
|
||||
"@sveltejs/adapter-auto": "^2.0.0",
|
||||
"@sveltejs/kit": "^1.27.4",
|
||||
"@tailwindcss/typography": "^0.5.10",
|
||||
"@types/streamsaver": "^2.0.4",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"postcss": "^8.4.32",
|
||||
"prettier": "^3.0.0",
|
||||
"prettier-plugin-svelte": "^3.0.0",
|
||||
"svelte": "^4.2.7",
|
||||
"svelte-check": "^3.6.0",
|
||||
"tailwindcss": "^3.3.6",
|
||||
"tslib": "^2.4.1",
|
||||
"typescript": "^5.0.0",
|
||||
"vite": "^4.4.2"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"common": "workspace:^",
|
||||
"eva-icons": "^1.1.3",
|
||||
"streamsaver": "^2.0.6"
|
||||
}
|
||||
}
|
24
frontend-sveltekit/src copy/App.svelte
Normal file
24
frontend-sveltekit/src copy/App.svelte
Normal file
|
@ -0,0 +1,24 @@
|
|||
<script lang="ts">
|
||||
import { currentRoute, type ComponentType } from "./lib/router";
|
||||
|
||||
import NotFound from "./lib/routes/NotFound.svelte";
|
||||
import Home from "./lib/routes/Home.svelte";
|
||||
import Dump from "./lib/routes/Dump.svelte";
|
||||
import Portal from "./lib/routes/Portal.svelte";
|
||||
import Dataset from "./lib/routes/Dataset.svelte";
|
||||
|
||||
function chooseComponent(route: ComponentType) {
|
||||
if (route === "NotFound") return NotFound;
|
||||
else if (route === "Home") return Home;
|
||||
else if (route === "Dataset") return Dataset;
|
||||
else if (route === "Portal") return Portal;
|
||||
else if (route === "Dump") return Dump;
|
||||
}
|
||||
|
||||
$: r = {
|
||||
component: chooseComponent($currentRoute.component) as any,
|
||||
params: $currentRoute.params as any,
|
||||
};
|
||||
</script>
|
||||
|
||||
<svelte:component this={r.component} params={r.params} />
|
8
frontend-sveltekit/src copy/main.ts
Normal file
8
frontend-sveltekit/src copy/main.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
import './app.css'
|
||||
import App from './App.svelte'
|
||||
|
||||
const app = new App({
|
||||
target: document.getElementById('app'),
|
||||
})
|
||||
|
||||
export default app
|
8
frontend-sveltekit/src copy/vite-env.d.ts
vendored
Normal file
8
frontend-sveltekit/src copy/vite-env.d.ts
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
/// <reference types="svelte" />
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
declare module "*svg?component" {
|
||||
import { ComponentType, SvelteComponentTyped } from "svelte";
|
||||
const icon: ComponentType<SvelteComponentTyped>;
|
||||
export default icon;
|
||||
}
|
3
frontend-sveltekit/src/app.css
Normal file
3
frontend-sveltekit/src/app.css
Normal file
|
@ -0,0 +1,3 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
12
frontend-sveltekit/src/app.d.ts
vendored
Normal file
12
frontend-sveltekit/src/app.d.ts
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
// See https://kit.svelte.dev/docs/types#app
|
||||
// for information about these interfaces
|
||||
declare global {
|
||||
namespace App {
|
||||
// interface Error {}
|
||||
// interface Locals {}
|
||||
// interface PageData {}
|
||||
// interface Platform {}
|
||||
}
|
||||
}
|
||||
|
||||
export {};
|
12
frontend-sveltekit/src/app.html
Normal file
12
frontend-sveltekit/src/app.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover" class="bg-gray-50 dark:bg-gray-900 dark:text-white">
|
||||
<div style="display: contents">%sveltekit.body%</div>
|
||||
</body>
|
||||
</html>
|
5
frontend-sveltekit/src/lib/components/Container.svelte
Normal file
5
frontend-sveltekit/src/lib/components/Container.svelte
Normal file
|
@ -0,0 +1,5 @@
|
|||
<div
|
||||
class="rounded-lg border dark:border-gray-700 bg-white dark:bg-gray-800 m-2"
|
||||
>
|
||||
<slot />
|
||||
</div>
|
15
frontend-sveltekit/src/lib/components/SourceLink.svelte
Normal file
15
frontend-sveltekit/src/lib/components/SourceLink.svelte
Normal file
|
@ -0,0 +1,15 @@
|
|||
<script lang="ts">
|
||||
import ExternalLink from "eva-icons/outline/svg/external-link-outline.svg?component";
|
||||
|
||||
export let href: string;
|
||||
</script>
|
||||
|
||||
<a
|
||||
class="flex items-center leading-none text-gray-600 dark:text-gray-300 gap-1 pt-2"
|
||||
{href}
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
<ExternalLink fill="currentColor" class="h-4" />
|
||||
<span class="underline">Fuente</span>
|
||||
</a>
|
64
frontend-sveltekit/src/lib/fetch.ts
Normal file
64
frontend-sveltekit/src/lib/fetch.ts
Normal file
|
@ -0,0 +1,64 @@
|
|||
import { zData, type Distribution, zError, zDumpMetadata } from 'common/schema.js';
|
||||
|
||||
export async function downloadFile(dataPath: string, datasetId: string, dist: Distribution) {
|
||||
const streamSaver = await import('streamsaver');
|
||||
if (!dist.downloadURL) throw new Error('no downloadURL');
|
||||
const outputS = streamSaver.createWriteStream(
|
||||
dist.downloadURL.slice(dist.downloadURL.lastIndexOf('/') + 1)
|
||||
);
|
||||
const res = await fetchGzipped(
|
||||
`${dataPath}/${datasetId}/${dist.identifier}/${dist.fileName || dist.identifier}.gz`
|
||||
);
|
||||
await res.body!.pipeTo(outputS);
|
||||
}
|
||||
|
||||
async function fetchGzipped(url: string): Promise<Response> {
|
||||
let res = await fetch(url);
|
||||
if (res.status === 404 && url.endsWith('.gz')) {
|
||||
// probar cargando el archivo no comprimido
|
||||
res = await fetch(url.slice(0, url.length - '.gz'.length));
|
||||
return res;
|
||||
}
|
||||
const ds = new DecompressionStream('gzip');
|
||||
const decompressedStream = res.body!.pipeThrough(ds);
|
||||
const resD = new Response(decompressedStream);
|
||||
return resD;
|
||||
}
|
||||
let cachedGzippedJson = new Map<string, { date: Date; data: unknown }>();
|
||||
|
||||
async function loadGzippedJson(url: string): Promise<unknown> {
|
||||
const cachedEntry = cachedGzippedJson.get(url);
|
||||
if (cachedEntry) {
|
||||
if (+cachedEntry.date + 10 * 60 * 1000 > +new Date()) {
|
||||
return cachedEntry.data;
|
||||
} else {
|
||||
cachedGzippedJson.delete(url);
|
||||
}
|
||||
}
|
||||
|
||||
const res = await fetchGzipped(url);
|
||||
const json = await res.json();
|
||||
cachedGzippedJson.set(url, { date: new Date(), data: json });
|
||||
return json;
|
||||
}
|
||||
|
||||
export async function fetchData(portalUrl: string) {
|
||||
const json = await loadGzippedJson(`${portalUrl}/data.json.gz`);
|
||||
if (import.meta.env.DEV) console.debug(json);
|
||||
return zData.parse(json);
|
||||
}
|
||||
export async function fetchDumpMetadata(dumpUrl: string) {
|
||||
const json = await loadGzippedJson(`${dumpUrl}/dump-metadata.json.gz`);
|
||||
if (import.meta.env.DEV) console.debug(json);
|
||||
return zDumpMetadata.parse(json);
|
||||
}
|
||||
export async function fetchErrors(url: string) {
|
||||
const res = await fetchGzipped(`${url}/errors.jsonl.gz`);
|
||||
const text = await res.text();
|
||||
const lines = text
|
||||
.split('\n')
|
||||
.filter((line) => !!line)
|
||||
.map((line) => JSON.parse(line))
|
||||
.map((json) => zError.parse(json));
|
||||
return lines;
|
||||
}
|
41
frontend-sveltekit/src/lib/nav/Nav.svelte
Normal file
41
frontend-sveltekit/src/lib/nav/Nav.svelte
Normal file
|
@ -0,0 +1,41 @@
|
|||
<script lang="ts">
|
||||
import { inject } from "regexparam";
|
||||
import ChevronRight from "eva-icons/outline/svg/chevron-right-outline.svg?component";
|
||||
import { generateDumpName, routes } from "../router";
|
||||
import NavItem from "./NavItem.svelte";
|
||||
|
||||
export let params:
|
||||
| { dumpUrl: string }
|
||||
| { dumpUrl: string; portal: string }
|
||||
| { dumpUrl: string; portal: string; id: string };
|
||||
|
||||
$: kind = "id" in params ? "dataset" : "portal" in params ? "portal" : "dump";
|
||||
|
||||
$: dumpName = generateDumpName(params.dumpUrl);
|
||||
</script>
|
||||
|
||||
<nav class="flex justify-between m-2">
|
||||
<ol
|
||||
class="flex items-center mb-3 text-sm text-neutral-500 dark:text-neutral-300 [&_.active-breadcrumb]:text-neutral-600 dark:[&_.active-breadcrumb]:text-neutral-200 [&_.active-breadcrumb]:font-bold sm:mb-0"
|
||||
class:active-breadcrumb={kind === "dump"}
|
||||
>
|
||||
<NavItem href={inject(routes.Dump, params)} active={kind === "dump"}
|
||||
>{dumpName}</NavItem
|
||||
>
|
||||
{#if "portal" in params}
|
||||
<ChevronRight class="w-5 h-5 text-neutral-400" fill="currentColor" />
|
||||
<NavItem href={inject(routes.Portal, params)} active={kind === "portal"}>
|
||||
{params.portal}
|
||||
</NavItem>
|
||||
{/if}
|
||||
{#if "id" in params}
|
||||
<ChevronRight class="w-5 h-5 text-neutral-400" fill="currentColor" />
|
||||
<NavItem
|
||||
href={inject(routes.Dataset, params)}
|
||||
active={kind === "dataset"}
|
||||
>
|
||||
{params.id}
|
||||
</NavItem>
|
||||
{/if}
|
||||
</ol>
|
||||
</nav>
|
14
frontend-sveltekit/src/lib/nav/NavItem.svelte
Normal file
14
frontend-sveltekit/src/lib/nav/NavItem.svelte
Normal file
|
@ -0,0 +1,14 @@
|
|||
<script lang="ts">
|
||||
export let active: boolean = false;
|
||||
export let href: string;
|
||||
</script>
|
||||
|
||||
<li class="flex items-center h-full">
|
||||
<a
|
||||
{href}
|
||||
class="inline-flex items-center px-2 py-1.5 space-x-1.5 rounded-md hover:text-neutral-900 hover:bg-neutral-100 dark:hover:text-gray-100 dark:hover:bg-gray-800"
|
||||
class:active-breadcrumb={active}
|
||||
>
|
||||
<span><slot /></span>
|
||||
</a>
|
||||
</li>
|
44
frontend-sveltekit/src/lib/router.ts
Normal file
44
frontend-sveltekit/src/lib/router.ts
Normal file
|
@ -0,0 +1,44 @@
|
|||
import navaid, { type Params } from "navaid";
|
||||
import { writable } from "svelte/store";
|
||||
|
||||
export const routes = {
|
||||
Home: "/",
|
||||
Dump: "/dump/:dumpUrl",
|
||||
Portal: "/dump/:dumpUrl/:portal",
|
||||
Dataset: "/dump/:dumpUrl/:portal/dataset/:id",
|
||||
};
|
||||
|
||||
export function generateDumpName(dumpUrl: string) {
|
||||
const clean = decodeURIComponent(dumpUrl).replace(/\/+$/, "");
|
||||
return clean.slice(clean.lastIndexOf("/") + 1);
|
||||
}
|
||||
|
||||
const title = "Archivo de portales de datos de Argentina";
|
||||
const titles: { [key in ComponentType]: (params: Params) => string } = {
|
||||
Home: () => title,
|
||||
NotFound: () => title,
|
||||
Dump: (params) => `${generateDumpName(params.dumpUrl)} - ${title}`,
|
||||
Portal: (params) => `${params.portal} - ${title}`,
|
||||
Dataset: (params) => `${params.id} - ${title}`,
|
||||
};
|
||||
|
||||
export type ComponentType = "NotFound" | keyof typeof routes;
|
||||
|
||||
type Route = {
|
||||
component: ComponentType;
|
||||
params?: Params;
|
||||
};
|
||||
export const currentRoute = writable<Route>({ component: "Home" });
|
||||
currentRoute.subscribe(
|
||||
(route) => (document.title = titles[route.component](route.params!)),
|
||||
);
|
||||
|
||||
export const router = navaid(undefined, () =>
|
||||
currentRoute.set({ component: "NotFound" }),
|
||||
);
|
||||
for (const [component, path] of Object.entries(routes)) {
|
||||
router.on(path, (params) =>
|
||||
currentRoute.set({ component: component as keyof typeof routes, params }),
|
||||
);
|
||||
}
|
||||
router.listen();
|
103
frontend-sveltekit/src/lib/routes/Dataset.svelte
Normal file
103
frontend-sveltekit/src/lib/routes/Dataset.svelte
Normal file
|
@ -0,0 +1,103 @@
|
|||
<script lang="ts">
|
||||
import ArrowBack from "eva-icons/outline/svg/arrow-back-outline.svg?component";
|
||||
import { downloadFile, fetchData, fetchErrors } from "../fetch";
|
||||
import NotFound from "./NotFound.svelte";
|
||||
import { inject } from "regexparam";
|
||||
import { routes } from "../router";
|
||||
import Nav from "../nav/Nav.svelte";
|
||||
import SourceLink from "../components/SourceLink.svelte";
|
||||
import Container from "../components/Container.svelte";
|
||||
|
||||
export let params: { dumpUrl: string; portal: string; id: string };
|
||||
$: url = decodeURIComponent(params.dumpUrl) + "/" + params.portal;
|
||||
|
||||
$: data = Promise.all([fetchData(url), fetchErrors(url)]).then(
|
||||
([data, errors]) => ({ data, errors }),
|
||||
);
|
||||
</script>
|
||||
|
||||
<main class="mx-auto max-w-3xl">
|
||||
<Nav {params} />
|
||||
|
||||
<Container>
|
||||
{#await data}
|
||||
<p class="p-6">Cargando dataset...</p>
|
||||
{:then { data, errors }}
|
||||
{@const dataset = data.dataset.find((d) => d.identifier === params.id)}
|
||||
{#if !dataset}
|
||||
<NotFound />
|
||||
{:else}
|
||||
<header
|
||||
class="py-5 px-6 border-b border-b-gray-200 dark:border-b-gray-700"
|
||||
>
|
||||
<h1 class="font-bold text-3xl">{dataset.title}</h1>
|
||||
<p class="text-xl">{dataset.description}</p>
|
||||
<!--
|
||||
lo saqué porque aún antes de que venga la motosierra estos links no funcionan...
|
||||
entonces no quiero dar la falsa impresión de que empezaron a bajar cosas cuando no es el caso.
|
||||
{#if dataset.landingPage}
|
||||
<a
|
||||
class="flex items-center leading-none text-gray-600 gap-1 pt-2"
|
||||
href={dataset.landingPage}
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
<ExternalLink fill="currentColor" class="h-4" />
|
||||
Fuente
|
||||
</a>
|
||||
{/if} -->
|
||||
</header>
|
||||
<ul class="divide-y divide-gray-100 dark:divide-gray-700">
|
||||
{#each dataset.distribution as dist}
|
||||
{@const error = errors.find(
|
||||
(e) =>
|
||||
e.datasetIdentifier === dataset.identifier &&
|
||||
e.distributionIdentifier === dist.identifier,
|
||||
)}
|
||||
<li class="flex px-6 py-5 justify-between items-center">
|
||||
<div>
|
||||
<h3>
|
||||
{dist.title}
|
||||
{#if dist.format}
|
||||
<span
|
||||
class="border border-current text-blue-800 dark:text-blue-400 relative inline-flex items-center text-xs font-semibold px-2 py-1 rounded-full ml-1"
|
||||
>
|
||||
<span>{dist.format}</span>
|
||||
</span>
|
||||
{/if}
|
||||
</h3>
|
||||
{#if !dist.downloadURL}
|
||||
<small class="block text-red-700">
|
||||
No está en este archivo porque el link de descarga estaba
|
||||
roto en la fuente al momento de descargarlo :(
|
||||
</small>
|
||||
{:else if error}
|
||||
<small class="block text-red-700">
|
||||
No está en este archivo porque hubo un error al descargarlo
|
||||
:(
|
||||
</small>
|
||||
{/if}
|
||||
{#if dist.fileName}
|
||||
<small>{dist.fileName}</small>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="flex flex-col items-center">
|
||||
{#if !error}
|
||||
<button
|
||||
type="button"
|
||||
class="inline-flex items-center justify-center px-4 py-2 text-sm font-medium tracking-wide text-white transition-colors duration-200 bg-blue-600 rounded-md hover:bg-blue-700 focus:ring-2 focus:ring-offset-2 focus:ring-blue-700 focus:shadow-outline focus:outline-none"
|
||||
on:click={() => downloadFile(url, dataset.identifier, dist)}
|
||||
>Descargar</button
|
||||
>
|
||||
{/if}
|
||||
{#if dist.downloadURL}
|
||||
<SourceLink href={dist.downloadURL} />
|
||||
{/if}
|
||||
</div>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
{/if}
|
||||
{/await}
|
||||
</Container>
|
||||
</main>
|
1
frontend-sveltekit/src/lib/routes/NotFound.svelte
Normal file
1
frontend-sveltekit/src/lib/routes/NotFound.svelte
Normal file
|
@ -0,0 +1 @@
|
|||
<h1>Esa página no pudo ser encontrada.</h1>
|
110
frontend-sveltekit/src/lib/routes/Portal.svelte
Normal file
110
frontend-sveltekit/src/lib/routes/Portal.svelte
Normal file
|
@ -0,0 +1,110 @@
|
|||
<script lang="ts">
|
||||
import { inject } from "regexparam";
|
||||
import ArrowForward from "eva-icons/outline/svg/arrow-forward-outline.svg?component";
|
||||
import { fetchData, fetchErrors } from "../fetch";
|
||||
import { routes } from "../router";
|
||||
import type { Dataset } from "common/schema";
|
||||
import Nav from "../nav/Nav.svelte";
|
||||
import SourceLink from "../components/SourceLink.svelte";
|
||||
import Container from "../components/Container.svelte";
|
||||
|
||||
export let params: { dumpUrl: string; portal: string };
|
||||
$: url = `${decodeURIComponent(params.dumpUrl)}/${params.portal}`;
|
||||
|
||||
$: data = Promise.all([fetchData(url), fetchErrors(url)]).then(
|
||||
([data, errors]) => ({ data, errors }),
|
||||
);
|
||||
|
||||
function arreglarHomepageUrl(url: string): string {
|
||||
if (!url.startsWith("http://") && !url.startsWith("https://"))
|
||||
return `https://${url}`;
|
||||
return url;
|
||||
}
|
||||
|
||||
function processStringForSearch(str: string): string {
|
||||
return str
|
||||
.toLowerCase()
|
||||
.replaceAll("á", "a")
|
||||
.replaceAll("é", "e")
|
||||
.replaceAll("í", "i")
|
||||
.replaceAll("ó", "o")
|
||||
.replaceAll("ú", "u")
|
||||
.replaceAll("ñ", "n");
|
||||
}
|
||||
|
||||
let query: string = "";
|
||||
function filterDatasets(datasets: Dataset[], query: string): Dataset[] {
|
||||
const q = processStringForSearch(query);
|
||||
return datasets.filter(
|
||||
(dataset) =>
|
||||
processStringForSearch(dataset.identifier).includes(q) ||
|
||||
processStringForSearch(dataset.title).includes(q),
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
||||
<main class="mx-auto max-w-3xl">
|
||||
<Nav {params} />
|
||||
|
||||
<Container>
|
||||
{#await data}
|
||||
<p class="p-6">Cargando..</p>
|
||||
{:then { data, errors }}
|
||||
<header
|
||||
class="py-5 px-6 border-b border-b-gray-200 dark:border-b-gray-700 leading-none"
|
||||
>
|
||||
<small>
|
||||
Viendo portal archivado de
|
||||
<a
|
||||
class="underline text-blue-500 dark:text-blue-300"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
href={url}>{url}</a
|
||||
>
|
||||
</small>
|
||||
<h1 class="font-bold text-3xl">{data.title}</h1>
|
||||
<p class="text-xl">{data.description}</p>
|
||||
{#if data.homepage}
|
||||
<SourceLink href={arreglarHomepageUrl(data.homepage)} />
|
||||
{/if}
|
||||
</header>
|
||||
|
||||
<div class="w-full mx-auto px-6 py-2">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Buscar..."
|
||||
class="flex w-full h-10 px-3 py-2 text-sm bg-white dark:bg-gray-800 border rounded-md border-neutral-300 dark:border-gray-700 ring-offset-background placeholder:text-neutral-500 dark:placeholder:text-gray-500 focus:border-neutral-300 dark:focus:border-gray-700 focus:outline-none focus:ring-2 focus:ring-neutral-400 dark:focus:ring-gray-600 disabled:cursor-not-allowed disabled:opacity-50"
|
||||
bind:value={query}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<ul class="divide-y divide-gray-100 dark:divide-gray-700">
|
||||
{#each filterDatasets(data.dataset, query) as dataset}
|
||||
{@const datasetLink = inject(routes.Dataset, {
|
||||
dumpUrl: params.dumpUrl,
|
||||
portal: params.portal,
|
||||
id: dataset.identifier,
|
||||
})}
|
||||
<li>
|
||||
<a
|
||||
class="flex px-6 py-5 hover:bg-gray-50 dark:hover:bg-gray-700 justify-between"
|
||||
href={datasetLink}
|
||||
>
|
||||
<div>
|
||||
<h3 class="text-lg">{dataset.title}</h3>
|
||||
<p class="text-sm">{dataset.description}</p>
|
||||
</div>
|
||||
<ArrowForward
|
||||
fill="currentColor"
|
||||
aria-hidden="true"
|
||||
class="w-6 shrink-0 text-gray-600 dark:text-gray-400 "
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
{:catch error}
|
||||
Hubo un error intenando cargar este portal archivado. <pre>{error}</pre>
|
||||
{/await}
|
||||
</Container>
|
||||
</main>
|
5
frontend-sveltekit/src/routes/+layout.svelte
Normal file
5
frontend-sveltekit/src/routes/+layout.svelte
Normal file
|
@ -0,0 +1,5 @@
|
|||
<script lang="ts">
|
||||
import '../app.css';
|
||||
</script>
|
||||
|
||||
<slot />
|
37
frontend-sveltekit/src/routes/+page.svelte
Normal file
37
frontend-sveltekit/src/routes/+page.svelte
Normal file
|
@ -0,0 +1,37 @@
|
|||
<script lang="ts">
|
||||
import Container from '../lib/components/Container.svelte';
|
||||
</script>
|
||||
|
||||
<main class="mx-auto prose dark:prose-invert">
|
||||
<Container>
|
||||
<div class="py-5 px-6">
|
||||
<h1>Archivo de portales de datos abiertos</h1>
|
||||
<p>
|
||||
Esta herramienta permite ver datos en archivos de portales de datos abiertos de <a
|
||||
href="https://github.com/catdevnull/transicion-desordenada-diablo/"
|
||||
rel="noopener">transicion-desordenada-diablo</a
|
||||
>
|
||||
(un mejor nombre sería genial), creada en el marco de
|
||||
<a href="https://bit.ly/CartaDatosAbiertos">un pedido hecho</a> al gobierno entrante el 10 de
|
||||
diciembre de 2023 por garantizar el mantenimiento de las políticas de datos públicos en Argentina.
|
||||
</p>
|
||||
|
||||
<div class="not-prose flex place-content-center">
|
||||
<a
|
||||
href={`/dump/${encodeURIComponent('https://archivos.nulo.ar/dump-2023-12-08/')}`}
|
||||
class="flex items-center justify-center px-4 py-2 text-xl font-medium text-white transition-colors duration-200 bg-blue-600 rounded-md hover:bg-blue-700 focus:ring-2 focus:ring-offset-2 focus:ring-blue-700 focus:shadow-outline focus:outline-none text-center"
|
||||
>
|
||||
Acceder al archivo creado el 8 de diciembre de 2023
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Los archivos y las herramientas fueron creados por
|
||||
<a href="https://nulo.ar">Nulo</a> con ayuda de varias personas. El código está disponible
|
||||
<a href="https://github.com/catdevnull/transicion-desordenada-diablo/" rel="noopener"
|
||||
>en GitHub</a
|
||||
>.
|
||||
</p>
|
||||
</div>
|
||||
</Container>
|
||||
</main>
|
45
frontend-sveltekit/src/routes/dump/[dumpUrl]/+page.svelte
Normal file
45
frontend-sveltekit/src/routes/dump/[dumpUrl]/+page.svelte
Normal file
|
@ -0,0 +1,45 @@
|
|||
<script lang="ts">
|
||||
import SourceLink from '$lib/components/SourceLink.svelte';
|
||||
import Container from '$lib/components/Container.svelte';
|
||||
import type { PageData } from './$types';
|
||||
|
||||
export let data: PageData;
|
||||
</script>
|
||||
|
||||
<main class="mx-auto max-w-3xl">
|
||||
<Container>
|
||||
<header class="py-5 px-6 border-b border-b-gray-200 dark:border-b-gray-700 leading-none">
|
||||
<small>
|
||||
Viendo archivo en
|
||||
<a
|
||||
class="underline text-blue-500 dark:text-blue-300"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
href={data.url}>{data.url}</a
|
||||
>
|
||||
</small>
|
||||
</header>
|
||||
|
||||
<ul class="divide-y divide-gray-100 dark:divide-gray-700">
|
||||
{#each data.metadata.sites as site}
|
||||
{@const portalLink = `/dump/${data.dumpUrl}`}
|
||||
<li>
|
||||
<div class="flex px-6 py-5 justify-between gap-3">
|
||||
<div class="flex flex-col">
|
||||
<h3 class="text-lg">{site.title}</h3>
|
||||
<p class="text-sm">{site.description}</p>
|
||||
</div>
|
||||
<div class="flex flex-col items-center justify-center shrink-0">
|
||||
<a
|
||||
href={portalLink}
|
||||
class="inline-flex items-center justify-center px-4 py-2 text-sm font-medium tracking-wide text-white transition-colors duration-200 bg-blue-600 rounded-md hover:bg-blue-700 focus:ring-2 focus:ring-offset-2 focus:ring-blue-700 focus:shadow-outline focus:outline-none"
|
||||
>Ver portal</a
|
||||
>
|
||||
<SourceLink href={site.url} />
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
</Container>
|
||||
</main>
|
12
frontend-sveltekit/src/routes/dump/[dumpUrl]/+page.ts
Normal file
12
frontend-sveltekit/src/routes/dump/[dumpUrl]/+page.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { fetchDumpMetadata } from '$lib/fetch';
|
||||
|
||||
/** @type {import('./$types').PageLoad} */
|
||||
export async function load({ params }) {
|
||||
const url = decodeURIComponent(params.dumpUrl);
|
||||
const metadata = await fetchDumpMetadata(url);
|
||||
return {
|
||||
dumpUrl: params.dumpUrl,
|
||||
url,
|
||||
metadata
|
||||
};
|
||||
}
|
BIN
frontend-sveltekit/static/favicon.png
Normal file
BIN
frontend-sveltekit/static/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
18
frontend-sveltekit/svelte.config.js
Normal file
18
frontend-sveltekit/svelte.config.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import adapter from '@sveltejs/adapter-auto';
|
||||
import { vitePreprocess } from '@sveltejs/kit/vite';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
|
||||
// for more information about preprocessors
|
||||
preprocess: vitePreprocess(),
|
||||
|
||||
kit: {
|
||||
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
|
||||
// If your environment is not supported or you settled on a specific environment, switch out the adapter.
|
||||
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
|
||||
adapter: adapter()
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
8
frontend-sveltekit/tailwind.config.js
Normal file
8
frontend-sveltekit/tailwind.config.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||
theme: {
|
||||
extend: {}
|
||||
},
|
||||
plugins: [require('@tailwindcss/typography')]
|
||||
};
|
18
frontend-sveltekit/tsconfig.json
Normal file
18
frontend-sveltekit/tsconfig.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"moduleResolution": "bundler"
|
||||
}
|
||||
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
|
||||
//
|
||||
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
||||
// from the referenced tsconfig.json - TypeScript does not merge them in
|
||||
}
|
7
frontend-sveltekit/vite.config.ts
Normal file
7
frontend-sveltekit/vite.config.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
import { sveltekit } from '@sveltejs/kit/vite';
|
||||
import { defineConfig } from 'vite';
|
||||
import svg from '@poppanator/sveltekit-svg';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [sveltekit(), svg()]
|
||||
});
|
|
@ -1,11 +1,16 @@
|
|||
import streamSaver from "streamsaver";
|
||||
import { zData, type Distribution, zError, zDumpMetadata } from "common/schema";
|
||||
import {
|
||||
zData,
|
||||
type Distribution,
|
||||
zError,
|
||||
zDumpMetadata,
|
||||
} from "common/schema.js";
|
||||
|
||||
export async function downloadFile(
|
||||
dataPath: string,
|
||||
datasetId: string,
|
||||
dist: Distribution,
|
||||
) {
|
||||
const streamSaver = await import("streamsaver");
|
||||
if (!dist.downloadURL) throw new Error("no downloadURL");
|
||||
const outputS = streamSaver.createWriteStream(
|
||||
dist.downloadURL.slice(dist.downloadURL.lastIndexOf("/") + 1),
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ["./index.html", "./src/**/*.svelte"],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [require("@tailwindcss/typography")],
|
||||
};
|
527
pnpm-lock.yaml
527
pnpm-lock.yaml
|
@ -49,6 +49,9 @@ importers:
|
|||
specifier: ^3.22.4
|
||||
version: 3.22.4
|
||||
devDependencies:
|
||||
'@poppanator/sveltekit-svg':
|
||||
specifier: ^4.1.3
|
||||
version: 4.1.3(svelte@4.2.8)(svgo@3.0.5)(vite@5.0.7)
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.1(svelte@4.2.8)(vite@5.0.7)
|
||||
|
@ -94,9 +97,64 @@ importers:
|
|||
vite:
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.7
|
||||
vite-plugin-svelte-svg:
|
||||
specifier: ^2.3.0
|
||||
version: 2.3.0(svelte@4.2.8)(vite@5.0.7)
|
||||
|
||||
frontend-sveltekit:
|
||||
dependencies:
|
||||
common:
|
||||
specifier: workspace:^
|
||||
version: link:../common
|
||||
eva-icons:
|
||||
specifier: ^1.1.3
|
||||
version: 1.1.3
|
||||
streamsaver:
|
||||
specifier: ^2.0.6
|
||||
version: 2.0.6
|
||||
devDependencies:
|
||||
'@poppanator/sveltekit-svg':
|
||||
specifier: ^4.1.3
|
||||
version: 4.1.3(svelte@4.2.8)(svgo@3.0.5)(vite@4.5.1)
|
||||
'@sveltejs/adapter-auto':
|
||||
specifier: ^2.0.0
|
||||
version: 2.1.1(@sveltejs/kit@1.27.7)
|
||||
'@sveltejs/kit':
|
||||
specifier: ^1.27.4
|
||||
version: 1.27.7(svelte@4.2.8)(vite@4.5.1)
|
||||
'@tailwindcss/typography':
|
||||
specifier: ^0.5.10
|
||||
version: 0.5.10(tailwindcss@3.3.6)
|
||||
'@types/streamsaver':
|
||||
specifier: ^2.0.4
|
||||
version: 2.0.4
|
||||
autoprefixer:
|
||||
specifier: ^10.4.16
|
||||
version: 10.4.16(postcss@8.4.32)
|
||||
postcss:
|
||||
specifier: ^8.4.32
|
||||
version: 8.4.32
|
||||
prettier:
|
||||
specifier: ^3.0.0
|
||||
version: 3.1.0
|
||||
prettier-plugin-svelte:
|
||||
specifier: ^3.0.0
|
||||
version: 3.1.2(prettier@3.1.0)(svelte@4.2.8)
|
||||
svelte:
|
||||
specifier: ^4.2.7
|
||||
version: 4.2.8
|
||||
svelte-check:
|
||||
specifier: ^3.6.0
|
||||
version: 3.6.2(postcss@8.4.32)(svelte@4.2.8)
|
||||
tailwindcss:
|
||||
specifier: ^3.3.6
|
||||
version: 3.3.6
|
||||
tslib:
|
||||
specifier: ^2.4.1
|
||||
version: 2.6.2
|
||||
typescript:
|
||||
specifier: ^5.0.0
|
||||
version: 5.3.3
|
||||
vite:
|
||||
specifier: ^4.4.2
|
||||
version: 4.5.1
|
||||
|
||||
packages:
|
||||
|
||||
|
@ -113,6 +171,15 @@ packages:
|
|||
'@jridgewell/trace-mapping': 0.3.20
|
||||
dev: true
|
||||
|
||||
/@esbuild/android-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm64@0.19.8:
|
||||
resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -122,6 +189,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.18.20:
|
||||
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.19.8:
|
||||
resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -131,6 +207,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.18.20:
|
||||
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.19.8:
|
||||
resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -140,6 +225,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.19.8:
|
||||
resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -149,6 +243,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.18.20:
|
||||
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.19.8:
|
||||
resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -158,6 +261,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.19.8:
|
||||
resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -167,6 +279,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.18.20:
|
||||
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.19.8:
|
||||
resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -176,6 +297,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.19.8:
|
||||
resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -185,6 +315,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.18.20:
|
||||
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.19.8:
|
||||
resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -194,6 +333,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.18.20:
|
||||
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.19.8:
|
||||
resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -203,6 +351,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.18.20:
|
||||
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.19.8:
|
||||
resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -212,6 +369,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.18.20:
|
||||
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.19.8:
|
||||
resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -221,6 +387,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.18.20:
|
||||
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.19.8:
|
||||
resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -230,6 +405,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.18.20:
|
||||
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.19.8:
|
||||
resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -239,6 +423,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.18.20:
|
||||
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.19.8:
|
||||
resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -248,6 +441,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.18.20:
|
||||
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.19.8:
|
||||
resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -257,6 +459,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.18.20:
|
||||
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.19.8:
|
||||
resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -266,6 +477,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.18.20:
|
||||
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.19.8:
|
||||
resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -275,6 +495,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.18.20:
|
||||
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.19.8:
|
||||
resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -284,6 +513,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.19.8:
|
||||
resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -293,6 +531,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.18.20:
|
||||
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.19.8:
|
||||
resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -302,6 +549,15 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.18.20:
|
||||
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.19.8:
|
||||
resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -314,7 +570,6 @@ packages:
|
|||
/@fastify/busboy@2.1.0:
|
||||
resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==}
|
||||
engines: {node: '>=14'}
|
||||
dev: false
|
||||
|
||||
/@jridgewell/gen-mapping@0.3.3:
|
||||
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
|
||||
|
@ -367,6 +622,34 @@ packages:
|
|||
fastq: 1.15.0
|
||||
dev: true
|
||||
|
||||
/@polka/url@1.0.0-next.24:
|
||||
resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
|
||||
dev: true
|
||||
|
||||
/@poppanator/sveltekit-svg@4.1.3(svelte@4.2.8)(svgo@3.0.5)(vite@4.5.1):
|
||||
resolution: {integrity: sha512-cKdFxFPPzS470xy2XFQ2m/URa9On4fw7n5wvBqAwVO4sY8dmski+2N3GKFELt4tvzM3JPjAqz76Ex7U5IpKeIg==}
|
||||
peerDependencies:
|
||||
svelte: '>=4.x'
|
||||
svgo: '>=3.x'
|
||||
vite: '>=4.x'
|
||||
dependencies:
|
||||
svelte: 4.2.8
|
||||
svgo: 3.0.5
|
||||
vite: 4.5.1
|
||||
dev: true
|
||||
|
||||
/@poppanator/sveltekit-svg@4.1.3(svelte@4.2.8)(svgo@3.0.5)(vite@5.0.7):
|
||||
resolution: {integrity: sha512-cKdFxFPPzS470xy2XFQ2m/URa9On4fw7n5wvBqAwVO4sY8dmski+2N3GKFELt4tvzM3JPjAqz76Ex7U5IpKeIg==}
|
||||
peerDependencies:
|
||||
svelte: '>=4.x'
|
||||
svgo: '>=3.x'
|
||||
vite: '>=4.x'
|
||||
dependencies:
|
||||
svelte: 4.2.8
|
||||
svgo: 3.0.5
|
||||
vite: 5.0.7
|
||||
dev: true
|
||||
|
||||
/@rollup/rollup-android-arm-eabi@4.7.0:
|
||||
resolution: {integrity: sha512-rGku10pL1StFlFvXX5pEv88KdGW6DHUghsxyP/aRYb9eH+74jTGJ3U0S/rtlsQ4yYq1Hcc7AMkoJOb1xu29Fxw==}
|
||||
cpu: [arm]
|
||||
|
@ -471,6 +754,59 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/@sveltejs/adapter-auto@2.1.1(@sveltejs/kit@1.27.7):
|
||||
resolution: {integrity: sha512-nzi6x/7/3Axh5VKQ8Eed3pYxastxoa06Y/bFhWb7h3Nu+nGRVxKAy3+hBJgmPCwWScy8n0TsstZjSVKfyrIHkg==}
|
||||
peerDependencies:
|
||||
'@sveltejs/kit': ^1.0.0
|
||||
dependencies:
|
||||
'@sveltejs/kit': 1.27.7(svelte@4.2.8)(vite@4.5.1)
|
||||
import-meta-resolve: 4.0.0
|
||||
dev: true
|
||||
|
||||
/@sveltejs/kit@1.27.7(svelte@4.2.8)(vite@4.5.1):
|
||||
resolution: {integrity: sha512-AzXYDoYt42clCBwLF9GTHsXyg2DFR31Ncyt8yxu8Aw4tgB433V+w+hcr1RTfAN9zKW2J2PY9FMQ8FoX/4Vw8CA==}
|
||||
engines: {node: ^16.14 || >=18}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
peerDependencies:
|
||||
svelte: ^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0
|
||||
vite: ^4.0.0
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1)
|
||||
'@types/cookie': 0.5.4
|
||||
cookie: 0.5.0
|
||||
devalue: 4.3.2
|
||||
esm-env: 1.0.0
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.5
|
||||
mrmime: 1.0.1
|
||||
sade: 1.8.1
|
||||
set-cookie-parser: 2.6.0
|
||||
sirv: 2.0.3
|
||||
svelte: 4.2.8
|
||||
tiny-glob: 0.2.9
|
||||
undici: 5.26.5
|
||||
vite: 4.5.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.1):
|
||||
resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==}
|
||||
engines: {node: ^14.18.0 || >= 16}
|
||||
peerDependencies:
|
||||
'@sveltejs/vite-plugin-svelte': ^2.2.0
|
||||
svelte: ^3.54.0 || ^4.0.0
|
||||
vite: ^4.0.0
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1)
|
||||
debug: 4.3.4
|
||||
svelte: 4.2.8
|
||||
vite: 4.5.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.7):
|
||||
resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
|
||||
engines: {node: ^18.0.0 || >=20}
|
||||
|
@ -487,6 +823,26 @@ packages:
|
|||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.8)(vite@4.5.1):
|
||||
resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==}
|
||||
engines: {node: ^14.18.0 || >= 16}
|
||||
peerDependencies:
|
||||
svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0
|
||||
vite: ^4.0.0
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.1)
|
||||
debug: 4.3.4
|
||||
deepmerge: 4.3.1
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.5
|
||||
svelte: 4.2.8
|
||||
svelte-hmr: 0.15.3(svelte@4.2.8)
|
||||
vite: 4.5.1
|
||||
vitefu: 0.2.5(vite@4.5.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.7):
|
||||
resolution: {integrity: sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==}
|
||||
engines: {node: ^18.0.0 || >=20}
|
||||
|
@ -532,6 +888,10 @@ packages:
|
|||
resolution: {integrity: sha512-BRbo1fOtyVbhfLyuCWw6wAWp+U8UQle+ZXu84MYYWzYSEB28dyfnRBIE99eoG+qdAC0po6L2ScIEivcT07UaMA==}
|
||||
dev: true
|
||||
|
||||
/@types/cookie@0.5.4:
|
||||
resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==}
|
||||
dev: true
|
||||
|
||||
/@types/estree@1.0.5:
|
||||
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
|
||||
dev: true
|
||||
|
@ -695,6 +1055,11 @@ packages:
|
|||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
dev: true
|
||||
|
||||
/cookie@0.5.0:
|
||||
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: true
|
||||
|
||||
/css-select@5.1.0:
|
||||
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
|
||||
dependencies:
|
||||
|
@ -766,6 +1131,10 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dev: true
|
||||
|
||||
/devalue@4.3.2:
|
||||
resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
|
||||
dev: true
|
||||
|
||||
/didyoumean@1.2.2:
|
||||
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
|
||||
dev: true
|
||||
|
@ -814,6 +1183,36 @@ packages:
|
|||
resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
|
||||
dev: true
|
||||
|
||||
/esbuild@0.18.20:
|
||||
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
optionalDependencies:
|
||||
'@esbuild/android-arm': 0.18.20
|
||||
'@esbuild/android-arm64': 0.18.20
|
||||
'@esbuild/android-x64': 0.18.20
|
||||
'@esbuild/darwin-arm64': 0.18.20
|
||||
'@esbuild/darwin-x64': 0.18.20
|
||||
'@esbuild/freebsd-arm64': 0.18.20
|
||||
'@esbuild/freebsd-x64': 0.18.20
|
||||
'@esbuild/linux-arm': 0.18.20
|
||||
'@esbuild/linux-arm64': 0.18.20
|
||||
'@esbuild/linux-ia32': 0.18.20
|
||||
'@esbuild/linux-loong64': 0.18.20
|
||||
'@esbuild/linux-mips64el': 0.18.20
|
||||
'@esbuild/linux-ppc64': 0.18.20
|
||||
'@esbuild/linux-riscv64': 0.18.20
|
||||
'@esbuild/linux-s390x': 0.18.20
|
||||
'@esbuild/linux-x64': 0.18.20
|
||||
'@esbuild/netbsd-x64': 0.18.20
|
||||
'@esbuild/openbsd-x64': 0.18.20
|
||||
'@esbuild/sunos-x64': 0.18.20
|
||||
'@esbuild/win32-arm64': 0.18.20
|
||||
'@esbuild/win32-ia32': 0.18.20
|
||||
'@esbuild/win32-x64': 0.18.20
|
||||
dev: true
|
||||
|
||||
/esbuild@0.19.8:
|
||||
resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -849,6 +1248,10 @@ packages:
|
|||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/esm-env@1.0.0:
|
||||
resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
|
||||
dev: true
|
||||
|
||||
/estree-walker@3.0.3:
|
||||
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
|
||||
dependencies:
|
||||
|
@ -939,6 +1342,14 @@ packages:
|
|||
path-is-absolute: 1.0.1
|
||||
dev: true
|
||||
|
||||
/globalyzer@0.1.0:
|
||||
resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
|
||||
dev: true
|
||||
|
||||
/globrex@0.1.2:
|
||||
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
|
||||
dev: true
|
||||
|
||||
/graceful-fs@4.2.11:
|
||||
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||
dev: true
|
||||
|
@ -958,6 +1369,10 @@ packages:
|
|||
resolve-from: 4.0.0
|
||||
dev: true
|
||||
|
||||
/import-meta-resolve@4.0.0:
|
||||
resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
|
||||
dev: true
|
||||
|
||||
/inflight@1.0.6:
|
||||
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
||||
dependencies:
|
||||
|
@ -1107,6 +1522,11 @@ packages:
|
|||
engines: {node: '>=4'}
|
||||
dev: true
|
||||
|
||||
/mrmime@1.0.1:
|
||||
resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
dev: true
|
||||
|
@ -1296,6 +1716,16 @@ packages:
|
|||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/prettier-plugin-svelte@3.1.2(prettier@3.1.0)(svelte@4.2.8):
|
||||
resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==}
|
||||
peerDependencies:
|
||||
prettier: ^3.0.0
|
||||
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
|
||||
dependencies:
|
||||
prettier: 3.1.0
|
||||
svelte: 4.2.8
|
||||
dev: true
|
||||
|
||||
/prettier-plugin-tailwindcss@0.5.9(prettier@3.1.0):
|
||||
resolution: {integrity: sha512-9x3t1s2Cjbut2QiP+O0mDqV3gLXTe2CgRlQDgucopVkUdw26sQi53p/q4qvGxMLBDfk/dcTV57Aa/zYwz9l8Ew==}
|
||||
engines: {node: '>=14.21.3'}
|
||||
|
@ -1407,6 +1837,14 @@ packages:
|
|||
glob: 7.2.3
|
||||
dev: true
|
||||
|
||||
/rollup@3.29.4:
|
||||
resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
|
||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/rollup@4.7.0:
|
||||
resolution: {integrity: sha512-7Kw0dUP4BWH78zaZCqF1rPyQ8D5DSU6URG45v1dqS/faNsx9WXyess00uTOZxKr7oR/4TOjO1CPudT8L1UsEgw==}
|
||||
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
||||
|
@ -1450,6 +1888,19 @@ packages:
|
|||
rimraf: 2.7.1
|
||||
dev: true
|
||||
|
||||
/set-cookie-parser@2.6.0:
|
||||
resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
|
||||
dev: true
|
||||
|
||||
/sirv@2.0.3:
|
||||
resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==}
|
||||
engines: {node: '>= 10'}
|
||||
dependencies:
|
||||
'@polka/url': 1.0.0-next.24
|
||||
mrmime: 1.0.1
|
||||
totalist: 3.0.1
|
||||
dev: true
|
||||
|
||||
/sorcery@0.11.0:
|
||||
resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==}
|
||||
hasBin: true
|
||||
|
@ -1656,6 +2107,13 @@ packages:
|
|||
any-promise: 1.3.0
|
||||
dev: true
|
||||
|
||||
/tiny-glob@0.2.9:
|
||||
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
|
||||
dependencies:
|
||||
globalyzer: 0.1.0
|
||||
globrex: 0.1.2
|
||||
dev: true
|
||||
|
||||
/to-regex-range@5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
engines: {node: '>=8.0'}
|
||||
|
@ -1663,6 +2121,11 @@ packages:
|
|||
is-number: 7.0.0
|
||||
dev: true
|
||||
|
||||
/totalist@3.0.1:
|
||||
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/ts-interface-checker@0.1.13:
|
||||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||
dev: true
|
||||
|
@ -1681,6 +2144,13 @@ packages:
|
|||
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
|
||||
dev: true
|
||||
|
||||
/undici@5.26.5:
|
||||
resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==}
|
||||
engines: {node: '>=14.0'}
|
||||
dependencies:
|
||||
'@fastify/busboy': 2.1.0
|
||||
dev: true
|
||||
|
||||
/undici@5.28.2:
|
||||
resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==}
|
||||
engines: {node: '>=14.0'}
|
||||
|
@ -1703,15 +2173,39 @@ packages:
|
|||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
dev: true
|
||||
|
||||
/vite-plugin-svelte-svg@2.3.0(svelte@4.2.8)(vite@5.0.7):
|
||||
resolution: {integrity: sha512-Bzo62u9Fj9PDldSvPrUgCzIFc9MmNbhxAUdBCofPyPyuVtoKaQxtsI01JXLk35x8/OQFHfxoTShEgPxtd4+c9Q==}
|
||||
/vite@4.5.1:
|
||||
resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
svelte: '>= 3.0.0 < 5.0.0'
|
||||
vite: < 5.0.0
|
||||
'@types/node': '>= 14'
|
||||
less: '*'
|
||||
lightningcss: ^1.21.0
|
||||
sass: '*'
|
||||
stylus: '*'
|
||||
sugarss: '*'
|
||||
terser: ^5.4.0
|
||||
peerDependenciesMeta:
|
||||
'@types/node':
|
||||
optional: true
|
||||
less:
|
||||
optional: true
|
||||
lightningcss:
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
stylus:
|
||||
optional: true
|
||||
sugarss:
|
||||
optional: true
|
||||
terser:
|
||||
optional: true
|
||||
dependencies:
|
||||
svelte: 4.2.8
|
||||
svgo: 3.0.5
|
||||
vite: 5.0.7
|
||||
esbuild: 0.18.20
|
||||
postcss: 8.4.32
|
||||
rollup: 3.29.4
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/vite@5.0.7:
|
||||
|
@ -1749,6 +2243,17 @@ packages:
|
|||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/vitefu@0.2.5(vite@4.5.1):
|
||||
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
|
||||
peerDependencies:
|
||||
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
|
||||
peerDependenciesMeta:
|
||||
vite:
|
||||
optional: true
|
||||
dependencies:
|
||||
vite: 4.5.1
|
||||
dev: true
|
||||
|
||||
/vitefu@0.2.5(vite@5.0.7):
|
||||
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
|
||||
peerDependencies:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
packages:
|
||||
- "frontend/"
|
||||
- "frontend-sveltekit/"
|
||||
- "downloader/"
|
||||
- "common/"
|
||||
|
|
Loading…
Reference in a new issue