diff --git a/API.md b/API.md deleted file mode 100644 index c64e514..0000000 --- a/API.md +++ /dev/null @@ -1,217 +0,0 @@ -# Inicio de sesion - -```ts -// HTTP POST -// Url: /login - -// Frontend envia el correo del usuario -{ - correo_usuario: string -} - -// Backend responde con una lista de matriculas -// Si el correo es valido y el usuario tiene alguna matricula -{ - matriculas: Array // Un array de id_laboratorio -} -// Si el correo es valido pero el usuario no tiene matriculas -{ - matriculas: [] // Un array vacio -} -// Si el correo es invalido: Se envia HTTP 401 -``` - - - - - -# Lista cursos - -```ts -// HTTP GET -// Url: /cursos - -// El frontend pide una lista de la informacion de todos los cursos - -// Backend responde con una lista de todos los cursos -[ - { - id_curso: number, - id_datos_carrera: any, // Opcional - nombre_curso: string, - curso_anio: number | string, // Numero o string, dependiendo de como este en DB - abreviado: string, - } -] -``` - - - - - -# Carga de horarios - -```ts -// HTTP POST -// Url: /horarios - -// El frontend envia una lista de cursos, de los cuales recuperar sus datos -{ - cursos: Array // Un array de id_curso -} - -// Backend responde con los cursos especificados y sus horarios -[ - // Cada objeto dentro del array sera un Curso - { - id_curso: number, - id_datos_carrera: any, // Opcional - nombre_curso: string, - curso_anio: number | string, - abreviado: string, - // Un array de objetos, estos objetos son de la entidad Laboratorio - laboratorios: [ - { - id_laboratorio: number, - id_curso: number, - grupo: string, - docente: string, - // Array de objetos de la entidad Horario - horario: [ - { - id_horario: number, - id_laboratorio: number, - dia: string, - hora_inicio: string, - hora_fin: string, - } - ] - } - ] - } -] - -``` - - - - -# Matricula - -```ts -// HTTP POST -// Url: /matricula - -// Frontend envia una lista de horarios en los cuales se matricula y el usuario -{ - correo_usuario: string, // Correo del usuario - horarios: Array // Array de id_laboratorio -} - -// Backend devuelve HTTP 200 si exitoso, HTTP 400 si hay error (no hay cupos) -``` - - - - - -# Recuperacion de matricula - -```ts -// HTTP POST -// Url: /recuperacion - -// Frontend envia una lista de id_laboratorio -{ - matriculas: Array // Array de id_laboratorio -} - -// Backend devuelve: -// Por cada id_laboratorio: datos del curso y el laboratorio -[ - // Un objeto asi por cada id_laboratorio - { - nombre_curso: string, // Este es el campo `nombre_curso` de la entidad Curso - grupo: string, // Campo `grupo` de la entidad Laboratorio - docente: string, // Campo `docente` de la entidad Laboratorio - } -] -``` - - - - - -# Creacion de datos - -Endpoints para insertar datos a la db - -```ts -// POST /crear-carrera - -// Front -{ - nombre_carrera: string -} - -// Backend -{ - id_carrera: number // id de la carrera creada -} -``` - -```ts -// POST /crear-curso - -// Front -{ - id_datos_carrera: number, - nombre_curso: string, - curso_anio: string, // Ejm: "1er", "2do", etc - abreviado: string -} - -// Backend -{ - id_curso: number // id del curso creado -} -``` - -```ts -// POST /crear-laboratorio - -// Front -{ - id_curso: number, - grupo: string, // Una letra - docente: string, - max_estudiantes: number -} - -// Backend -{ - id_laboratorio: number // id del lab creado -} -``` - -```ts -// POST /crear-horario - -// Front -{ - id_laboratorio: number, - dia: string, // "Lunes", "Martes", etc - hora_inicio: string, // "07:00" - hora_fin: string, // "08:50" -} - -// Backend -{ - id_horario: number // id del horario creado -} -``` - - - - - diff --git a/__tests__/celdas.ts b/__tests__/celdas.ts index 43bf902..182572e 100644 --- a/__tests__/celdas.ts +++ b/__tests__/celdas.ts @@ -1,52 +1,171 @@ +interface Curso { + // Nombre completo del curso + nombre: string, + // Nombre del curso abreviado + abreviado: string, + // Información de las horas de teoria + Teoria: { + // grupo es una letra: A, B, C, D + [grupo: string]: DatosGrupo, + }, + // Información de las horas de laboratorio + Laboratorio?: { + // grupo es una letra: A, B, C, D + [grupo: string]: DatosGrupo, + }, +} + +interface DatosGrupo { + // Nombre del docente de este grupo + Docente: string, + /* + Las horas del curso en el siguiente formato: DD_HHMM + DD puede ser Lu, Ma, Mi, Ju, Vi + Ejm: Ma0850, Vi1640, Ju1550 + */ + Horas: string[] +} + // Exclusivo de un unico dia -import { GrupoDia, TableInput } from "../src/Views/SistemasMovil/Table"; -import { generarMapaCeldas, MapaCeldas } from "../src/Views/SistemasMovil/mapaCeldas"; - type Input = { - offsetVertical: number, + horaInicio: number, nroHoras: number, } +type Output = { + horaInicio: number, + nroHoras: number, + offset: number, // 0, 1, 2 + fraccion: number, // por cuanto dividir la celda. 1, 2, 3, ... +} + +class MapaCeldas { + // Almacena referencias a input + private mapa: Map> = new Map(); + + private disponible(nroFila: number, nroColumna: number): boolean { + if (!this.mapa.has(nroFila)) return true; + + const fila = this.mapa.get(nroFila)!; + + return fila.has(nroColumna) === false; + } + + private obtenerFilaOCrear(nro: number): Map { + if (!this.mapa.has(nro)) { + const m = new Map(); + this.mapa.set(nro, m); + return m; + } + + return this.mapa.get(nro)!; + } + + // Devuelve el offset + public solicitar(inicio: number, cantidad: number, input: Input): number { + const filas = []; + for (let i = 0; i < cantidad; i += 1) filas.push(inicio + i); + + for (let offsetActual = 0; offsetActual < 8; offsetActual += 1) { + let todasCeldasDisponibles = true; + for (const fila of filas) { + if (!this.disponible(fila, offsetActual)) { + todasCeldasDisponibles = false; + break; + } + } + + if (todasCeldasDisponibles) { + // Crear estas celdas y almacenar + filas.forEach((nroFila) => { + const fila = this.obtenerFilaOCrear(nroFila); + fila.set(offsetActual, input); + }); + + // Devolver nro de offset + return offsetActual; + } + } + + throw new Error("Limite de celdas alcanzado"); + } + + public generarFraccion(nroFila: number, nroColumna: number, cantidad: number): number { + let fraccionActual = 1; + for (let i = 0; i < cantidad; i += 1) { + const nroFilaActual = nroFila + i; + const filaActual = this.mapa.get(nroFilaActual)!; + const numeroColumnas = filaActual.size; + if (numeroColumnas > fraccionActual) { + fraccionActual = numeroColumnas; + } + } + + return fraccionActual; + } +} + +function generarMapaCeldas(entrada: Readonly>): Array { + const mapa = new MapaCeldas(); + const salida: Array = []; + + // Obtener los offsets de cada curso + for (const input of entrada) { + const offset = mapa.solicitar(input.horaInicio, input.nroHoras, input); + salida.push({ + ...input, + offset, + fraccion: -1, + }); + } + + // Generar las fracciones de cada curso + for (const output of salida) { + output.fraccion = mapa.generarFraccion(output.horaInicio, output.offset, output.nroHoras); + } + + return salida; +} describe("generarMapaCeldas", () => { it("vacio si input es vacio", () => { - const input: Array = []; + const input: Array = []; const output = generarMapaCeldas(input); expect(output.length).toBe(0); }); it("funciona con 1 curso", () => { - const input: Array = [ + const input: Array = [ { - offsetVertical: 0, + horaInicio: 0, nroHoras: 2, }, ]; const output = generarMapaCeldas(input)[0]; expect(output).not.toBeUndefined(); - expect(output.offsetHorizontal).toBe(0); + expect(output.offset).toBe(0); expect(output.fraccion).toBe(1); }); it("funciona con 2 cursos", () => { - const input: Array = [ + const input: Array = [ { - offsetVertical: 0, + horaInicio: 0, nroHoras: 2, }, { - offsetVertical: 1, + horaInicio: 1, nroHoras: 3, }, ]; const output1 = generarMapaCeldas(input)[0]; - expect(output1.offsetHorizontal).toBe(0); + expect(output1.offset).toBe(0); expect(output1.fraccion).toBe(2); const output2 = generarMapaCeldas(input)[1]; - expect(output2.offsetHorizontal).toBe(1); + expect(output2.offset).toBe(1); expect(output2.fraccion).toBe(2); }); }); @@ -55,29 +174,29 @@ describe("MapaCeldas", () => { it("crea 1", () => { const mapa = new MapaCeldas(); const input = {} as unknown as Input; - const offset = mapa.solicitar(0, 2); + const offset = mapa.solicitar(0, 2, input); expect(offset).toBe(0); }); it("crea varios que no se solapan", () => { const mapa = new MapaCeldas(); const input = {} as unknown as Input; - let offset = mapa.solicitar(0, 2); + let offset = mapa.solicitar(0, 2, input); expect(offset).toBe(0); - offset = mapa.solicitar(4, 3); + offset = mapa.solicitar(4, 3, input); expect(offset).toBe(0); - offset = mapa.solicitar(7, 4); + offset = mapa.solicitar(7, 4, input); expect(offset).toBe(0); }); it("crea varios que se solapan", () => { const mapa = new MapaCeldas(); const input = {} as unknown as Input; - let offset = mapa.solicitar(0, 2); + let offset = mapa.solicitar(0, 2, input); expect(offset).toBe(0); - offset = mapa.solicitar(0, 2); + offset = mapa.solicitar(0, 2, input); expect(offset).toBe(1); - offset = mapa.solicitar(0, 4); + offset = mapa.solicitar(0, 4, input); expect(offset).toBe(2); }); @@ -93,33 +212,33 @@ describe("MapaCeldas", () => { */ const mapa = new MapaCeldas(); const input = {} as unknown as Input; - let offset = mapa.solicitar(0, 2); + let offset = mapa.solicitar(0, 2, input); expect(offset).toBe(0); - offset = mapa.solicitar(1, 3); + offset = mapa.solicitar(1, 3, input); expect(offset).toBe(1); - offset = mapa.solicitar(1, 4); + offset = mapa.solicitar(1, 4, input); expect(offset).toBe(2); - offset = mapa.solicitar(2, 3); + offset = mapa.solicitar(2, 3, input); expect(offset).toBe(0); - offset = mapa.solicitar(4, 2); + offset = mapa.solicitar(4, 2, input); expect(offset).toBe(1); }); it("genera offsets", () => { const mapa = new MapaCeldas(); const input = {} as unknown as Input; - let offset = mapa.solicitar(0, 2); + let offset = mapa.solicitar(0, 2, input); expect(offset).toBe(0); let fraccion = mapa.generarFraccion(0, offset, 2); expect(fraccion).toBe(1); - offset = mapa.solicitar(1, 3); + offset = mapa.solicitar(1, 3, input); fraccion = mapa.generarFraccion(1, offset, 3); expect(fraccion).toBe(2); - mapa.solicitar(1, 4); - mapa.solicitar(2, 3); - offset = mapa.solicitar(4, 2); + mapa.solicitar(1, 4, input); + mapa.solicitar(2, 3, input); + offset = mapa.solicitar(4, 2, input); fraccion = mapa.generarFraccion(4, offset, 2); expect(fraccion).toBe(3); }); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index b0b26c2..0000000 --- a/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { - preset: "ts-jest", - testEnvironment: "node", -}; diff --git a/netlify.toml b/netlify.toml deleted file mode 100644 index 6de963a..0000000 --- a/netlify.toml +++ /dev/null @@ -1,6 +0,0 @@ -[build.environment] -NPM_FLAGS="--version" -NODE_VERSION="16" -[build] -command = "npx pnpm install --store=node_modules/.pnpm-store && npx pnpm build" - diff --git a/package.json b/package.json index ee51d2b..f8ce5be 100755 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "jest": "^29.1.2", "normalize.css": "^8.0.1", "solid-app-router": "^0.3.2", - "solid-js": "1.5.7", + "solid-js": "^1.3.12", "ts-jest": "^29.0.3", "typescript": "^4.6.2", "vite": "^2.8.6", @@ -35,7 +35,6 @@ "Node 10" ], "dependencies": { - "swiper": "^8.4.4", "yaml": "^1.10.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6abd7ff..34c5d1d 100755 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,84 +1,102 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' -specifiers: - '@types/jest': 26.0.20 - '@types/node': 14.14.20 - '@typescript-eslint/eslint-plugin': ^4.19.0 - '@typescript-eslint/parser': ^4.19.0 - aphrodite: ^2.4.0 - browserslist: ^4.20.2 - component-register: 0.7.x - eslint: ^7.22.0 - eslint-plugin-react: ^7.23.1 - jest: ^29.1.2 - normalize.css: ^8.0.1 - solid-app-router: ^0.3.2 - solid-js: 1.5.7 - swiper: ^8.4.4 - ts-jest: ^29.0.3 - typescript: ^4.6.2 - vite: ^2.8.6 - vite-plugin-solid: ^2.2.6 - yaml: ^1.10.0 +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - swiper: 8.4.4 - yaml: 1.10.0 + yaml: + specifier: ^1.10.0 + version: 1.10.0 devDependencies: - '@types/jest': 26.0.20 - '@types/node': 14.14.20 - '@typescript-eslint/eslint-plugin': 4.19.0_iyvuzu35chqcmd5bwc3xm5yn5y - '@typescript-eslint/parser': 4.19.0_fptv3jwziuge6fofprjqm5efei - aphrodite: 2.4.0 - browserslist: 4.20.2 - component-register: 0.7.1 - eslint: 7.22.0 - eslint-plugin-react: 7.23.1_eslint@7.22.0 - jest: 29.1.2_@types+node@14.14.20 - normalize.css: 8.0.1 - solid-app-router: 0.3.2_solid-js@1.5.7 - solid-js: 1.5.7 - ts-jest: 29.0.3_u3tawnhld4dxccrvbviil55jbq - typescript: 4.6.3 - vite: 2.9.0 - vite-plugin-solid: 2.2.6 + '@types/jest': + specifier: 26.0.20 + version: 26.0.20 + '@types/node': + specifier: 14.14.20 + version: 14.14.20 + '@typescript-eslint/eslint-plugin': + specifier: ^4.19.0 + version: 4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.22.0)(typescript@4.6.3) + '@typescript-eslint/parser': + specifier: ^4.19.0 + version: 4.19.0(eslint@7.22.0)(typescript@4.6.3) + aphrodite: + specifier: ^2.4.0 + version: 2.4.0 + browserslist: + specifier: ^4.20.2 + version: 4.20.2 + component-register: + specifier: 0.7.x + version: 0.7.1 + eslint: + specifier: ^7.22.0 + version: 7.22.0 + eslint-plugin-react: + specifier: ^7.23.1 + version: 7.23.1(eslint@7.22.0) + jest: + specifier: ^29.1.2 + version: 29.1.2(@types/node@14.14.20) + normalize.css: + specifier: ^8.0.1 + version: 8.0.1 + solid-app-router: + specifier: ^0.3.2 + version: 0.3.2(solid-js@1.3.13) + solid-js: + specifier: ^1.3.12 + version: 1.3.13 + ts-jest: + specifier: ^29.0.3 + version: 29.0.3(@babel/core@7.17.8)(jest@29.1.2)(typescript@4.6.3) + typescript: + specifier: ^4.6.2 + version: 4.6.3 + vite: + specifier: ^2.8.6 + version: 2.9.0 + vite-plugin-solid: + specifier: ^2.2.6 + version: 2.2.6 packages: - /@ampproject/remapping/2.1.2: + /@ampproject/remapping@2.1.2: resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/trace-mapping': 0.3.4 dev: true - /@babel/code-frame/7.12.11: + /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.10.4 dev: true - /@babel/code-frame/7.16.7: + /@babel/code-frame@7.16.7: resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.16.10 dev: true - /@babel/compat-data/7.17.7: + /@babel/compat-data@7.17.7: resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.17.8: + /@babel/core@7.17.8: resolution: {integrity: sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.1.2 '@babel/code-frame': 7.16.7 '@babel/generator': 7.17.7 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.17.7(@babel/core@7.17.8) '@babel/helper-module-transforms': 7.17.7 '@babel/helpers': 7.17.8 '@babel/parser': 7.17.8 @@ -94,7 +112,7 @@ packages: - supports-color dev: true - /@babel/generator/7.17.7: + /@babel/generator@7.17.7: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} dependencies: @@ -103,14 +121,14 @@ packages: source-map: 0.5.7 dev: true - /@babel/helper-annotate-as-pure/7.16.7: + /@babel/helper-annotate-as-pure@7.16.7: resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.8: + /@babel/helper-compilation-targets@7.17.7(@babel/core@7.17.8): resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} engines: {node: '>=6.9.0'} peerDependencies: @@ -123,7 +141,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.17.8: + /@babel/helper-create-class-features-plugin@7.17.6(@babel/core@7.17.8): resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -141,14 +159,14 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor/7.16.7: + /@babel/helper-environment-visitor@7.16.7: resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-function-name/7.16.7: + /@babel/helper-function-name@7.16.7: resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} engines: {node: '>=6.9.0'} dependencies: @@ -157,42 +175,42 @@ packages: '@babel/types': 7.17.0 dev: true - /@babel/helper-get-function-arity/7.16.7: + /@babel/helper-get-function-arity@7.16.7: resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-hoist-variables/7.16.7: + /@babel/helper-hoist-variables@7.16.7: resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-member-expression-to-functions/7.17.7: + /@babel/helper-member-expression-to-functions@7.17.7: resolution: {integrity: sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-module-imports/7.16.0: + /@babel/helper-module-imports@7.16.0: resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-module-imports/7.16.7: + /@babel/helper-module-imports@7.16.7: resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-module-transforms/7.17.7: + /@babel/helper-module-transforms@7.17.7: resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} engines: {node: '>=6.9.0'} dependencies: @@ -208,19 +226,19 @@ packages: - supports-color dev: true - /@babel/helper-optimise-call-expression/7.16.7: + /@babel/helper-optimise-call-expression@7.16.7: resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-plugin-utils/7.16.7: + /@babel/helper-plugin-utils@7.16.7: resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers/7.16.7: + /@babel/helper-replace-supers@7.16.7: resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==} engines: {node: '>=6.9.0'} dependencies: @@ -233,35 +251,35 @@ packages: - supports-color dev: true - /@babel/helper-simple-access/7.17.7: + /@babel/helper-simple-access@7.17.7: resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-split-export-declaration/7.16.7: + /@babel/helper-split-export-declaration@7.16.7: resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.17.0 dev: true - /@babel/helper-validator-identifier/7.12.11: + /@babel/helper-validator-identifier@7.12.11: resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} dev: true - /@babel/helper-validator-identifier/7.16.7: + /@babel/helper-validator-identifier@7.16.7: resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.16.7: + /@babel/helper-validator-option@7.16.7: resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.17.8: + /@babel/helpers@7.17.8: resolution: {integrity: sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==} engines: {node: '>=6.9.0'} dependencies: @@ -272,7 +290,7 @@ packages: - supports-color dev: true - /@babel/highlight/7.10.4: + /@babel/highlight@7.10.4: resolution: {integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==} dependencies: '@babel/helper-validator-identifier': 7.12.11 @@ -280,7 +298,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/highlight/7.16.10: + /@babel/highlight@7.16.10: resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} engines: {node: '>=6.9.0'} dependencies: @@ -289,7 +307,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.17.8: + /@babel/parser@7.17.8: resolution: {integrity: sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -297,7 +315,7 @@ packages: '@babel/types': 7.17.0 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.8: + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.8): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -306,7 +324,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.17.8: + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -315,7 +333,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.8: + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.17.8): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -324,7 +342,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.17.8: + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.17.8): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -333,7 +351,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.8: + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -342,7 +360,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.8: + /@babel/plugin-syntax-jsx@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -352,7 +370,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.8: + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.17.8): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -361,7 +379,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.8: + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -370,7 +388,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.8: + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.8): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -379,7 +397,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.8: + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -388,7 +406,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.8: + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -397,7 +415,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.8: + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.8): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -406,7 +424,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.8: + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.8): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -416,7 +434,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.8: + /@babel/plugin-syntax-typescript@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} engines: {node: '>=6.9.0'} peerDependencies: @@ -426,21 +444,21 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.17.8: + /@babel/plugin-transform-typescript@7.16.8(@babel/core@7.17.8): resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.17.8 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.8) '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.8 + '@babel/plugin-syntax-typescript': 7.16.7(@babel/core@7.17.8) transitivePeerDependencies: - supports-color dev: true - /@babel/preset-typescript/7.16.7_@babel+core@7.17.8: + /@babel/preset-typescript@7.16.7(@babel/core@7.17.8): resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -449,12 +467,12 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.16.7 '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.8 + '@babel/plugin-transform-typescript': 7.16.8(@babel/core@7.17.8) transitivePeerDependencies: - supports-color dev: true - /@babel/template/7.16.7: + /@babel/template@7.16.7: resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} engines: {node: '>=6.9.0'} dependencies: @@ -463,7 +481,7 @@ packages: '@babel/types': 7.17.0 dev: true - /@babel/traverse/7.17.3: + /@babel/traverse@7.17.3: resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} engines: {node: '>=6.9.0'} dependencies: @@ -481,7 +499,7 @@ packages: - supports-color dev: true - /@babel/types/7.17.0: + /@babel/types@7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} dependencies: @@ -489,11 +507,11 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage/0.2.3: + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@eslint/eslintrc/0.4.0: + /@eslint/eslintrc@0.4.0: resolution: {integrity: sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -510,7 +528,7 @@ packages: - supports-color dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -521,12 +539,12 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console/29.1.2: + /@jest/console@29.1.2: resolution: {integrity: sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -538,7 +556,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core/29.1.2: + /@jest/core@29.1.2: resolution: {integrity: sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -559,7 +577,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.0.0 - jest-config: 29.1.2_@types+node@14.14.20 + jest-config: 29.1.2(@types/node@14.14.20) jest-haste-map: 29.1.2 jest-message-util: 29.1.2 jest-regex-util: 29.0.0 @@ -580,7 +598,7 @@ packages: - ts-node dev: true - /@jest/environment/29.1.2: + /@jest/environment@29.1.2: resolution: {integrity: sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -590,14 +608,14 @@ packages: jest-mock: 29.1.2 dev: true - /@jest/expect-utils/29.1.2: + /@jest/expect-utils@29.1.2: resolution: {integrity: sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.0.0 dev: true - /@jest/expect/29.1.2: + /@jest/expect@29.1.2: resolution: {integrity: sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -607,7 +625,7 @@ packages: - supports-color dev: true - /@jest/fake-timers/29.1.2: + /@jest/fake-timers@29.1.2: resolution: {integrity: sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -619,7 +637,7 @@ packages: jest-util: 29.1.2 dev: true - /@jest/globals/29.1.2: + /@jest/globals@29.1.2: resolution: {integrity: sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -631,7 +649,7 @@ packages: - supports-color dev: true - /@jest/reporters/29.1.2: + /@jest/reporters@29.1.2: resolution: {integrity: sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -669,14 +687,14 @@ packages: - supports-color dev: true - /@jest/schemas/29.0.0: + /@jest/schemas@29.0.0: resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.24.46 dev: true - /@jest/source-map/29.0.0: + /@jest/source-map@29.0.0: resolution: {integrity: sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -685,7 +703,7 @@ packages: graceful-fs: 4.2.10 dev: true - /@jest/test-result/29.1.2: + /@jest/test-result@29.1.2: resolution: {integrity: sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -695,7 +713,7 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.1.2: + /@jest/test-sequencer@29.1.2: resolution: {integrity: sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -705,7 +723,7 @@ packages: slash: 3.0.0 dev: true - /@jest/transform/29.1.2: + /@jest/transform@29.1.2: resolution: {integrity: sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -728,7 +746,7 @@ packages: - supports-color dev: true - /@jest/types/26.6.2: + /@jest/types@26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} dependencies: @@ -739,7 +757,7 @@ packages: chalk: 4.1.0 dev: true - /@jest/types/29.1.2: + /@jest/types@29.1.2: resolution: {integrity: sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -751,39 +769,39 @@ packages: chalk: 4.1.0 dev: true - /@jridgewell/resolve-uri/3.0.5: + /@jridgewell/resolve-uri@3.0.5: resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec/1.4.11: + /@jridgewell/sourcemap-codec@1.4.11: resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.16: + /@jridgewell/trace-mapping@0.3.16: resolution: {integrity: sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.4: + /@jridgewell/trace-mapping@0.3.4: resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} dependencies: '@jridgewell/resolve-uri': 3.0.5 '@jridgewell/sourcemap-codec': 1.4.11 dev: true - /@nodelib/fs.scandir/2.1.4: + /@nodelib/fs.scandir@2.1.4: resolution: {integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==} engines: {node: '>= 8'} dependencies: @@ -791,12 +809,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.4: + /@nodelib/fs.stat@2.0.4: resolution: {integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.6: + /@nodelib/fs.walk@1.2.6: resolution: {integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==} engines: {node: '>= 8'} dependencies: @@ -804,23 +822,23 @@ packages: fastq: 1.11.0 dev: true - /@sinclair/typebox/0.24.46: + /@sinclair/typebox@0.24.46: resolution: {integrity: sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw==} dev: true - /@sinonjs/commons/1.8.3: + /@sinonjs/commons@1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/9.1.2: + /@sinonjs/fake-timers@9.1.2: resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} dependencies: '@sinonjs/commons': 1.8.3 dev: true - /@types/babel__core/7.1.19: + /@types/babel__core@7.1.19: resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} dependencies: '@babel/parser': 7.17.8 @@ -830,87 +848,87 @@ packages: '@types/babel__traverse': 7.18.2 dev: true - /@types/babel__generator/7.6.4: + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.17.0 dev: true - /@types/babel__template/7.4.1: + /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.17.8 '@babel/types': 7.17.0 dev: true - /@types/babel__traverse/7.18.2: + /@types/babel__traverse@7.18.2: resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} dependencies: '@babel/types': 7.17.0 dev: true - /@types/graceful-fs/4.1.5: + /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: '@types/node': 14.14.20 dev: true - /@types/istanbul-lib-coverage/2.0.3: + /@types/istanbul-lib-coverage@2.0.3: resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==} dev: true - /@types/istanbul-lib-report/3.0.0: + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.3 dev: true - /@types/istanbul-reports/3.0.0: + /@types/istanbul-reports@3.0.0: resolution: {integrity: sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/26.0.20: + /@types/jest@26.0.20: resolution: {integrity: sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==} dependencies: jest-diff: 26.6.2 pretty-format: 26.6.2 dev: true - /@types/json-schema/7.0.7: + /@types/json-schema@7.0.7: resolution: {integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==} dev: true - /@types/node/14.14.20: + /@types/node@14.14.20: resolution: {integrity: sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==} dev: true - /@types/prettier/2.7.1: + /@types/prettier@2.7.1: resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} dev: true - /@types/stack-utils/2.0.1: + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/yargs-parser/20.2.0: + /@types/yargs-parser@20.2.0: resolution: {integrity: sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==} dev: true - /@types/yargs/15.0.12: + /@types/yargs@15.0.12: resolution: {integrity: sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw==} dependencies: '@types/yargs-parser': 20.2.0 dev: true - /@types/yargs/17.0.13: + /@types/yargs@17.0.13: resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} dependencies: '@types/yargs-parser': 20.2.0 dev: true - /@typescript-eslint/eslint-plugin/4.19.0_iyvuzu35chqcmd5bwc3xm5yn5y: + /@typescript-eslint/eslint-plugin@4.19.0(@typescript-eslint/parser@4.19.0)(eslint@7.22.0)(typescript@4.6.3): resolution: {integrity: sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -921,8 +939,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.19.0_fptv3jwziuge6fofprjqm5efei - '@typescript-eslint/parser': 4.19.0_fptv3jwziuge6fofprjqm5efei + '@typescript-eslint/experimental-utils': 4.19.0(eslint@7.22.0)(typescript@4.6.3) + '@typescript-eslint/parser': 4.19.0(eslint@7.22.0)(typescript@4.6.3) '@typescript-eslint/scope-manager': 4.19.0 debug: 4.3.1 eslint: 7.22.0 @@ -930,13 +948,13 @@ packages: lodash: 4.17.21 regexpp: 3.1.0 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.6.3 + tsutils: 3.21.0(typescript@4.6.3) typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils/4.19.0_fptv3jwziuge6fofprjqm5efei: + /@typescript-eslint/experimental-utils@4.19.0(eslint@7.22.0)(typescript@4.6.3): resolution: {integrity: sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -945,7 +963,7 @@ packages: '@types/json-schema': 7.0.7 '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0_typescript@4.6.3 + '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.6.3) eslint: 7.22.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -954,7 +972,7 @@ packages: - typescript dev: true - /@typescript-eslint/parser/4.19.0_fptv3jwziuge6fofprjqm5efei: + /@typescript-eslint/parser@4.19.0(eslint@7.22.0)(typescript@4.6.3): resolution: {integrity: sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -966,7 +984,7 @@ packages: dependencies: '@typescript-eslint/scope-manager': 4.19.0 '@typescript-eslint/types': 4.19.0 - '@typescript-eslint/typescript-estree': 4.19.0_typescript@4.6.3 + '@typescript-eslint/typescript-estree': 4.19.0(typescript@4.6.3) debug: 4.3.1 eslint: 7.22.0 typescript: 4.6.3 @@ -974,7 +992,7 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/4.19.0: + /@typescript-eslint/scope-manager@4.19.0: resolution: {integrity: sha512-GGy4Ba/hLXwJXygkXqMzduqOMc+Na6LrJTZXJWVhRrSuZeXmu8TAnniQVKgj8uTRKe4igO2ysYzH+Np879G75g==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: @@ -982,12 +1000,12 @@ packages: '@typescript-eslint/visitor-keys': 4.19.0 dev: true - /@typescript-eslint/types/4.19.0: + /@typescript-eslint/types@4.19.0: resolution: {integrity: sha512-A4iAlexVvd4IBsSTNxdvdepW0D4uR/fwxDrKUa+iEY9UWvGREu2ZyB8ylTENM1SH8F7bVC9ac9+si3LWNxcBuA==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree/4.19.0_typescript@4.6.3: + /@typescript-eslint/typescript-estree@4.19.0(typescript@4.6.3): resolution: {integrity: sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1002,13 +1020,13 @@ packages: globby: 11.0.3 is-glob: 4.0.1 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.6.3 + tsutils: 3.21.0(typescript@4.6.3) typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/visitor-keys/4.19.0: + /@typescript-eslint/visitor-keys@4.19.0: resolution: {integrity: sha512-aGPS6kz//j7XLSlgpzU2SeTqHPsmRYxFztj2vPuMMFJXZudpRSehE3WCV+BaxwZFvfAqMoSd86TEuM0PQ59E/A==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: @@ -1016,7 +1034,7 @@ packages: eslint-visitor-keys: 2.0.0 dev: true - /acorn-jsx/5.3.1_acorn@7.4.1: + /acorn-jsx@5.3.1(acorn@7.4.1): resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1024,13 +1042,13 @@ packages: acorn: 7.4.1 dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -1039,7 +1057,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv/7.2.3: + /ajv@7.2.3: resolution: {integrity: sha512-idv5WZvKVXDqKralOImQgPM9v6WOdLNa0IY3B3doOjw/YxRGT8I+allIJ6kd7Uaj+SF1xZUSU+nPM5aDNBVtnw==} dependencies: fast-deep-equal: 3.1.3 @@ -1048,48 +1066,48 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors/4.1.1: + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: true - /ansi-regex/5.0.0: + /ansi-regex@5.0.0: resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} engines: {node: '>=8'} dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true - /ansi-styles/5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /anymatch/3.1.2: + /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: @@ -1097,7 +1115,7 @@ packages: picomatch: 2.3.1 dev: true - /aphrodite/2.4.0: + /aphrodite@2.4.0: resolution: {integrity: sha512-1rVRlLco+j1YAT5aKEE8Wuw5zWV+tI41/quEheJAG0vNaGHE64iJ/a2SiVMz8Uc80VdP2/Hjlfd2bPJOWsqJuQ==} dependencies: asap: 2.0.6 @@ -1105,13 +1123,13 @@ packages: string-hash: 1.1.3 dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /array-includes/3.1.3: + /array-includes@3.1.3: resolution: {integrity: sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==} engines: {node: '>= 0.4'} dependencies: @@ -1122,12 +1140,12 @@ packages: is-string: 1.0.5 dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array.prototype.flatmap/1.2.4: + /array.prototype.flatmap@1.2.4: resolution: {integrity: sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==} engines: {node: '>= 0.4'} dependencies: @@ -1137,16 +1155,16 @@ packages: function-bind: 1.1.1 dev: true - /asap/2.0.6: + /asap@2.0.6: resolution: {integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=} dev: true - /astral-regex/2.0.0: + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /babel-jest/29.1.2_@babel+core@7.17.8: + /babel-jest@29.1.2(@babel/core@7.17.8): resolution: {integrity: sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1156,7 +1174,7 @@ packages: '@jest/transform': 29.1.2 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.0.2_@babel+core@7.17.8 + babel-preset-jest: 29.0.2(@babel/core@7.17.8) chalk: 4.1.0 graceful-fs: 4.2.10 slash: 3.0.0 @@ -1164,7 +1182,7 @@ packages: - supports-color dev: true - /babel-plugin-istanbul/6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -1177,7 +1195,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.0.2: + /babel-plugin-jest-hoist@29.0.2: resolution: {integrity: sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -1187,38 +1205,38 @@ packages: '@types/babel__traverse': 7.18.2 dev: true - /babel-plugin-jsx-dom-expressions/0.32.11_@babel+core@7.17.8: + /babel-plugin-jsx-dom-expressions@0.32.11(@babel/core@7.17.8): resolution: {integrity: sha512-hytqY33SGW6B3obSLt8K5X510UwtNkTktCCWgwba+QOOV0CowDFiqeL+0ru895FLacFaYANHFTu1y76dg3GVtw==} dependencies: '@babel/helper-module-imports': 7.16.0 - '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.8 + '@babel/plugin-syntax-jsx': 7.16.7(@babel/core@7.17.8) '@babel/types': 7.17.0 html-entities: 2.3.2 transitivePeerDependencies: - '@babel/core' dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.17.8: + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.17.8): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.8 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.8 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.8 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.8) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.17.8) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.17.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.17.8) dev: true - /babel-preset-jest/29.0.2_@babel+core@7.17.8: + /babel-preset-jest@29.0.2(@babel/core@7.17.8): resolution: {integrity: sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1226,36 +1244,36 @@ packages: dependencies: '@babel/core': 7.17.8 babel-plugin-jest-hoist: 29.0.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.8 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.17.8) dev: true - /babel-preset-solid/1.3.13_@babel+core@7.17.8: + /babel-preset-solid@1.3.13(@babel/core@7.17.8): resolution: {integrity: sha512-MZnmsceI9yiHlwwFCSALTJhadk2eea/+2UP4ec4jkPZFR+XRKTLoIwRkrBh7uLtvHF+3lHGyUaXtZukOmmUwhA==} dependencies: - babel-plugin-jsx-dom-expressions: 0.32.11_@babel+core@7.17.8 + babel-plugin-jsx-dom-expressions: 0.32.11(@babel/core@7.17.8) transitivePeerDependencies: - '@babel/core' dev: true - /balanced-match/1.0.0: + /balanced-match@1.0.0: resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.0 concat-map: 0.0.1 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /browserslist/4.20.2: + /browserslist@4.20.2: resolution: {integrity: sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1267,50 +1285,50 @@ packages: picocolors: 1.0.0 dev: true - /bs-logger/0.2.6: + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 dev: true - /bser/2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.1 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001322: + /caniuse-lite@1.0.30001322: resolution: {integrity: sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==} dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -1319,7 +1337,7 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.0: + /chalk@4.1.0: resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} engines: {node: '>=10'} dependencies: @@ -1327,20 +1345,20 @@ packages: supports-color: 7.2.0 dev: true - /char-regex/1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /ci-info/3.5.0: + /ci-info@3.5.0: resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} dev: true - /cjs-module-lexer/1.2.2: + /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -1349,51 +1367,51 @@ packages: wrap-ansi: 7.0.0 dev: true - /co/4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage/1.0.1: + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /component-register/0.7.1: + /component-register@0.7.1: resolution: {integrity: sha512-8cob6SUcl/y66nboT+4wXXOFvC/RYdyfcx7YA4KSvM3JQd1Oh/k8w+G4e960d4hPUgeM/jc5rF67pQDcmStQrg==} dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /convert-source-map/1.7.0: + /convert-source-map@1.7.0: resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} dependencies: safe-buffer: 5.1.2 dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -1402,18 +1420,14 @@ packages: which: 2.0.2 dev: true - /css-in-js-utils/2.0.1: + /css-in-js-utils@2.0.1: resolution: {integrity: sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==} dependencies: hyphenate-style-name: 1.0.4 isobject: 3.0.1 dev: true - /csstype/3.1.1: - resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - dev: true - - /debug/4.3.1: + /debug@4.3.1: resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} engines: {node: '>=6.0'} peerDependencies: @@ -1425,95 +1439,89 @@ packages: ms: 2.1.2 dev: true - /dedent/0.7.0: + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-is/0.1.3: + /deep-is@0.1.3: resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} dev: true - /deepmerge/4.2.2: + /deepmerge@4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} dev: true - /define-properties/1.1.3: + /define-properties@1.1.3: resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} engines: {node: '>= 0.4'} dependencies: object-keys: 1.1.1 dev: true - /detect-newline/3.1.0: + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /diff-sequences/26.6.2: + /diff-sequences@26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} dev: true - /diff-sequences/29.0.0: + /diff-sequences@29.0.0: resolution: {integrity: sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /doctrine/2.1.0: + /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /dom7/4.0.4: - resolution: {integrity: sha512-DSSgBzQ4rJWQp1u6o+3FVwMNnT5bzQbMb+o31TjYYeRi05uAcpF8koxdfzeoe5ElzPmua7W7N28YJhF7iEKqIw==} - dependencies: - ssr-window: 4.0.2 - dev: false - - /electron-to-chromium/1.4.101: + /electron-to-chromium@1.4.101: resolution: {integrity: sha512-XJH+XmJjACx1S7ASl/b//KePcda5ocPnFH2jErztXcIS8LpP0SE6rX8ZxiY5/RaDPnaF1rj0fPaHfppzb0e2Aw==} dev: true - /emittery/0.10.2: + /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} dev: true - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - /enquirer/2.3.6: + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.1 dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.18.0: + /es-abstract@1.18.0: resolution: {integrity: sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==} engines: {node: '>= 0.4'} dependencies: @@ -1535,7 +1543,7 @@ packages: unbox-primitive: 1.0.1 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -1544,7 +1552,7 @@ packages: is-symbol: 1.0.3 dev: true - /esbuild-android-64/0.14.29: + /esbuild-android-64@0.14.29: resolution: {integrity: sha512-tJuaN33SVZyiHxRaVTo1pwW+rn3qetJX/SRuc/83rrKYtyZG0XfsQ1ao1nEudIt9w37ZSNXR236xEfm2C43sbw==} engines: {node: '>=12'} cpu: [x64] @@ -1553,7 +1561,7 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.14.29: + /esbuild-android-arm64@0.14.29: resolution: {integrity: sha512-D74dCv6yYnMTlofVy1JKiLM5JdVSQd60/rQfJSDP9qvRAI0laPXIG/IXY1RG6jobmFMUfL38PbFnCqyI/6fPXg==} engines: {node: '>=12'} cpu: [arm64] @@ -1562,7 +1570,7 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.14.29: + /esbuild-darwin-64@0.14.29: resolution: {integrity: sha512-+CJaRvfTkzs9t+CjGa0Oa28WoXa7EeLutQhxus+fFcu0MHhsBhlmeWHac3Cc/Sf/xPi1b2ccDFfzGYJCfV0RrA==} engines: {node: '>=12'} cpu: [x64] @@ -1571,7 +1579,7 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.14.29: + /esbuild-darwin-arm64@0.14.29: resolution: {integrity: sha512-5Wgz/+zK+8X2ZW7vIbwoZ613Vfr4A8HmIs1XdzRmdC1kG0n5EG5fvKk/jUxhNlrYPx1gSY7XadQ3l4xAManPSw==} engines: {node: '>=12'} cpu: [arm64] @@ -1580,7 +1588,7 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.14.29: + /esbuild-freebsd-64@0.14.29: resolution: {integrity: sha512-VTfS7Bm9QA12JK1YXF8+WyYOfvD7WMpbArtDj6bGJ5Sy5xp01c/q70Arkn596aGcGj0TvQRplaaCIrfBG1Wdtg==} engines: {node: '>=12'} cpu: [x64] @@ -1589,7 +1597,7 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.14.29: + /esbuild-freebsd-arm64@0.14.29: resolution: {integrity: sha512-WP5L4ejwLWWvd3Fo2J5mlXvG3zQHaw5N1KxFGnUc4+2ZFZknP0ST63i0IQhpJLgEJwnQpXv2uZlU1iWZjFqEIg==} engines: {node: '>=12'} cpu: [arm64] @@ -1598,7 +1606,7 @@ packages: dev: true optional: true - /esbuild-linux-32/0.14.29: + /esbuild-linux-32@0.14.29: resolution: {integrity: sha512-4myeOvFmQBWdI2U1dEBe2DCSpaZyjdQtmjUY11Zu2eQg4ynqLb8Y5mNjNU9UN063aVsCYYfbs8jbken/PjyidA==} engines: {node: '>=12'} cpu: [ia32] @@ -1607,7 +1615,7 @@ packages: dev: true optional: true - /esbuild-linux-64/0.14.29: + /esbuild-linux-64@0.14.29: resolution: {integrity: sha512-iaEuLhssReAKE7HMwxwFJFn7D/EXEs43fFy5CJeA4DGmU6JHh0qVJD2p/UP46DvUXLRKXsXw0i+kv5TdJ1w5pg==} engines: {node: '>=12'} cpu: [x64] @@ -1616,16 +1624,7 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.14.29: - resolution: {integrity: sha512-OXa9D9QL1hwrAnYYAHt/cXAuSCmoSqYfTW/0CEY0LgJNyTxJKtqc5mlwjAZAvgyjmha0auS/sQ0bXfGf2wAokQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.14.29: + /esbuild-linux-arm64@0.14.29: resolution: {integrity: sha512-KYf7s8wDfUy+kjKymW3twyGT14OABjGHRkm9gPJ0z4BuvqljfOOUbq9qT3JYFnZJHOgkr29atT//hcdD0Pi7Mw==} engines: {node: '>=12'} cpu: [arm64] @@ -1634,7 +1633,16 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.14.29: + /esbuild-linux-arm@0.14.29: + resolution: {integrity: sha512-OXa9D9QL1hwrAnYYAHt/cXAuSCmoSqYfTW/0CEY0LgJNyTxJKtqc5mlwjAZAvgyjmha0auS/sQ0bXfGf2wAokQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le@0.14.29: resolution: {integrity: sha512-05jPtWQMsZ1aMGfHOvnR5KrTvigPbU35BtuItSSWLI2sJu5VrM8Pr9Owym4wPvA4153DFcOJ1EPN/2ujcDt54g==} engines: {node: '>=12'} cpu: [mips64el] @@ -1643,7 +1651,7 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.14.29: + /esbuild-linux-ppc64le@0.14.29: resolution: {integrity: sha512-FYhBqn4Ir9xG+f6B5VIQVbRuM4S6qwy29dDNYFPoxLRnwTEKToIYIUESN1qHyUmIbfO0YB4phG2JDV2JDN9Kgw==} engines: {node: '>=12'} cpu: [ppc64] @@ -1652,7 +1660,7 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.14.29: + /esbuild-linux-riscv64@0.14.29: resolution: {integrity: sha512-eqZMqPehkb4nZcffnuOpXJQdGURGd6GXQ4ZsDHSWyIUaA+V4FpMBe+5zMPtXRD2N4BtyzVvnBko6K8IWWr36ew==} engines: {node: '>=12'} cpu: [riscv64] @@ -1661,7 +1669,7 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.14.29: + /esbuild-linux-s390x@0.14.29: resolution: {integrity: sha512-o7EYajF1rC/4ho7kpSG3gENVx0o2SsHm7cJ5fvewWB/TEczWU7teDgusGSujxCYcMottE3zqa423VTglNTYhjg==} engines: {node: '>=12'} cpu: [s390x] @@ -1670,7 +1678,7 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.14.29: + /esbuild-netbsd-64@0.14.29: resolution: {integrity: sha512-/esN6tb6OBSot6+JxgeOZeBk6P8V/WdR3GKBFeFpSqhgw4wx7xWUqPrdx4XNpBVO7X4Ipw9SAqgBrWHlXfddww==} engines: {node: '>=12'} cpu: [x64] @@ -1679,7 +1687,7 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.14.29: + /esbuild-openbsd-64@0.14.29: resolution: {integrity: sha512-jUTdDzhEKrD0pLpjmk0UxwlfNJNg/D50vdwhrVcW/D26Vg0hVbthMfb19PJMatzclbK7cmgk1Nu0eNS+abzoHw==} engines: {node: '>=12'} cpu: [x64] @@ -1688,7 +1696,7 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.14.29: + /esbuild-sunos-64@0.14.29: resolution: {integrity: sha512-EfhQN/XO+TBHTbkxwsxwA7EfiTHFe+MNDfxcf0nj97moCppD9JHPq48MLtOaDcuvrTYOcrMdJVeqmmeQ7doTcg==} engines: {node: '>=12'} cpu: [x64] @@ -1697,7 +1705,7 @@ packages: dev: true optional: true - /esbuild-windows-32/0.14.29: + /esbuild-windows-32@0.14.29: resolution: {integrity: sha512-uoyb0YAJ6uWH4PYuYjfGNjvgLlb5t6b3zIaGmpWPOjgpr1Nb3SJtQiK4YCPGhONgfg2v6DcJgSbOteuKXhwqAw==} engines: {node: '>=12'} cpu: [ia32] @@ -1706,7 +1714,7 @@ packages: dev: true optional: true - /esbuild-windows-64/0.14.29: + /esbuild-windows-64@0.14.29: resolution: {integrity: sha512-X9cW/Wl95QjsH8WUyr3NqbmfdU72jCp71cH3pwPvI4CgBM2IeOUDdbt6oIGljPu2bf5eGDIo8K3Y3vvXCCTd8A==} engines: {node: '>=12'} cpu: [x64] @@ -1715,7 +1723,7 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.14.29: + /esbuild-windows-arm64@0.14.29: resolution: {integrity: sha512-+O/PI+68fbUZPpl3eXhqGHTGK7DjLcexNnyJqtLZXOFwoAjaXlS5UBCvVcR3o2va+AqZTj8o6URaz8D2K+yfQQ==} engines: {node: '>=12'} cpu: [arm64] @@ -1724,7 +1732,7 @@ packages: dev: true optional: true - /esbuild/0.14.29: + /esbuild@0.14.29: resolution: {integrity: sha512-SQS8cO8xFEqevYlrHt6exIhK853Me4nZ4aMW6ieysInLa0FMAL+AKs87HYNRtR2YWRcEIqoXAHh+Ytt5/66qpg==} engines: {node: '>=12'} hasBin: true @@ -1752,22 +1760,22 @@ packages: esbuild-windows-arm64: 0.14.29 dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} engines: {node: '>=0.8.0'} dev: true - /escape-string-regexp/2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /eslint-plugin-react/7.23.1_eslint@7.22.0: + /eslint-plugin-react@7.23.1(eslint@7.22.0): resolution: {integrity: sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==} engines: {node: '>=4'} peerDependencies: @@ -1788,7 +1796,7 @@ packages: string.prototype.matchall: 4.0.4 dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -1796,24 +1804,24 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils/2.1.0: + /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true - /eslint-visitor-keys/1.3.0: + /eslint-visitor-keys@1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.0.0: + /eslint-visitor-keys@2.0.0: resolution: {integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==} engines: {node: '>=10'} dev: true - /eslint/7.22.0: + /eslint@7.22.0: resolution: {integrity: sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true @@ -1859,51 +1867,51 @@ packages: - supports-color dev: true - /espree/7.3.1: + /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.1_acorn@7.4.1 + acorn-jsx: 5.3.1(acorn@7.4.1) eslint-visitor-keys: 1.3.0 dev: true - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery/1.4.0: + /esquery@1.4.0: resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} engines: {node: '>=0.10'} dependencies: estraverse: 5.2.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.2.0 dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.2.0: + /estraverse@5.2.0: resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} engines: {node: '>=4.0'} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -1918,12 +1926,12 @@ packages: strip-final-newline: 2.0.0 dev: true - /exit/0.1.2: + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expect/29.1.2: + /expect@29.1.2: resolution: {integrity: sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -1934,11 +1942,11 @@ packages: jest-util: 29.1.2 dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob/3.2.5: + /fast-glob@3.2.5: resolution: {integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==} engines: {node: '>=8'} dependencies: @@ -1950,41 +1958,41 @@ packages: picomatch: 2.2.2 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - /fastq/1.11.0: + /fastq@1.11.0: resolution: {integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==} dependencies: reusify: 1.0.4 dev: true - /fb-watchman/2.0.2: + /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -1992,7 +2000,7 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -2000,15 +2008,15 @@ packages: rimraf: 3.0.2 dev: true - /flatted/3.1.1: + /flatted@3.1.1: resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -2016,25 +2024,25 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /functional-red-black-tree/1.0.1: + /functional-red-black-tree@1.0.1: resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic/1.1.1: + /get-intrinsic@1.1.1: resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} dependencies: function-bind: 1.1.1 @@ -2042,24 +2050,24 @@ packages: has-symbols: 1.0.2 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.1 dev: true - /glob/7.1.6: + /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 @@ -2070,26 +2078,26 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals/12.4.0: + /globals@12.4.0: resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} engines: {node: '>=8'} dependencies: type-fest: 0.8.1 dev: true - /globals/13.7.0: + /globals@13.7.0: resolution: {integrity: sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globby/11.0.3: + /globby@11.0.3: resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} engines: {node: '>=10'} dependencies: @@ -2101,64 +2109,64 @@ packages: slash: 3.0.0 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /has-bigints/1.0.1: + /has-bigints@1.0.1: resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} engines: {node: '>=4'} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true - /has-symbols/1.0.2: + /has-symbols@1.0.2: resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} engines: {node: '>= 0.4'} dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /html-entities/2.3.2: + /html-entities@2.3.2: resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} dev: true - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /hyphenate-style-name/1.0.4: + /hyphenate-style-name@1.0.4: resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} dev: true - /ignore/4.0.6: + /ignore@4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} dev: true - /ignore/5.1.8: + /ignore@5.1.8: resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} engines: {node: '>= 4'} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -2166,7 +2174,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local/3.1.0: + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -2175,29 +2183,29 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} engines: {node: '>=0.8.19'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-style-prefixer/5.1.2: + /inline-style-prefixer@5.1.2: resolution: {integrity: sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA==} dependencies: css-in-js-utils: 2.0.1 dev: true - /internal-slot/1.0.3: + /internal-slot@1.0.3: resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} engines: {node: '>= 0.4'} dependencies: @@ -2206,81 +2214,81 @@ packages: side-channel: 1.0.4 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint/1.0.1: + /is-bigint@1.0.1: resolution: {integrity: sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==} dev: true - /is-boolean-object/1.1.0: + /is-boolean-object@1.1.0: resolution: {integrity: sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 dev: true - /is-callable/1.2.3: + /is-callable@1.2.3: resolution: {integrity: sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.2.0: + /is-core-module@2.2.0: resolution: {integrity: sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==} dependencies: has: 1.0.3 dev: true - /is-core-module/2.8.1: + /is-core-module@2.8.1: resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} dependencies: has: 1.0.3 dev: true - /is-date-object/1.0.2: + /is-date-object@1.0.2: resolution: {integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==} engines: {node: '>= 0.4'} dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true - /is-generator-fn/2.1.0: + /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-glob/4.0.1: + /is-glob@4.0.1: resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-negative-zero/2.0.1: + /is-negative-zero@2.0.1: resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.4: + /is-number-object@1.0.4: resolution: {integrity: sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==} engines: {node: '>= 0.4'} dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-regex/1.1.2: + /is-regex@1.1.2: resolution: {integrity: sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==} engines: {node: '>= 0.4'} dependencies: @@ -2288,43 +2296,43 @@ packages: has-symbols: 1.0.2 dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-string/1.0.5: + /is-string@1.0.5: resolution: {integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==} engines: {node: '>= 0.4'} dev: true - /is-symbol/1.0.3: + /is-symbol@1.0.3: resolution: {integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.2 dev: true - /is-what/4.1.7: + /is-what@4.1.7: resolution: {integrity: sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==} engines: {node: '>=12.13'} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true - /isobject/3.0.1: + /isobject@3.0.1: resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} engines: {node: '>=0.10.0'} dev: true - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.1: + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -2337,7 +2345,7 @@ packages: - supports-color dev: true - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -2346,7 +2354,7 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: @@ -2357,7 +2365,7 @@ packages: - supports-color dev: true - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -2365,7 +2373,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/29.0.0: + /jest-changed-files@29.0.0: resolution: {integrity: sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2373,7 +2381,7 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus/29.1.2: + /jest-circus@29.1.2: resolution: {integrity: sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2400,7 +2408,7 @@ packages: - supports-color dev: true - /jest-cli/29.1.2_@types+node@14.14.20: + /jest-cli@29.1.2(@types/node@14.14.20): resolution: {integrity: sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -2417,7 +2425,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.1.2_@types+node@14.14.20 + jest-config: 29.1.2(@types/node@14.14.20) jest-util: 29.1.2 jest-validate: 29.1.2 prompts: 2.4.2 @@ -2428,7 +2436,7 @@ packages: - ts-node dev: true - /jest-config/29.1.2_@types+node@14.14.20: + /jest-config@29.1.2(@types/node@14.14.20): resolution: {integrity: sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2444,7 +2452,7 @@ packages: '@jest/test-sequencer': 29.1.2 '@jest/types': 29.1.2 '@types/node': 14.14.20 - babel-jest: 29.1.2_@babel+core@7.17.8 + babel-jest: 29.1.2(@babel/core@7.17.8) chalk: 4.1.0 ci-info: 3.5.0 deepmerge: 4.2.2 @@ -2467,7 +2475,7 @@ packages: - supports-color dev: true - /jest-diff/26.6.2: + /jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} dependencies: @@ -2477,7 +2485,7 @@ packages: pretty-format: 26.6.2 dev: true - /jest-diff/29.1.2: + /jest-diff@29.1.2: resolution: {integrity: sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2487,14 +2495,14 @@ packages: pretty-format: 29.1.2 dev: true - /jest-docblock/29.0.0: + /jest-docblock@29.0.0: resolution: {integrity: sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/29.1.2: + /jest-each@29.1.2: resolution: {integrity: sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2505,7 +2513,7 @@ packages: pretty-format: 29.1.2 dev: true - /jest-environment-node/29.1.2: + /jest-environment-node@29.1.2: resolution: {integrity: sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2517,17 +2525,17 @@ packages: jest-util: 29.1.2 dev: true - /jest-get-type/26.3.0: + /jest-get-type@26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} dev: true - /jest-get-type/29.0.0: + /jest-get-type@29.0.0: resolution: {integrity: sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.1.2: + /jest-haste-map@29.1.2: resolution: {integrity: sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2546,7 +2554,7 @@ packages: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.1.2: + /jest-leak-detector@29.1.2: resolution: {integrity: sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2554,7 +2562,7 @@ packages: pretty-format: 29.1.2 dev: true - /jest-matcher-utils/29.1.2: + /jest-matcher-utils@29.1.2: resolution: {integrity: sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2564,7 +2572,7 @@ packages: pretty-format: 29.1.2 dev: true - /jest-message-util/29.1.2: + /jest-message-util@29.1.2: resolution: {integrity: sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2579,7 +2587,7 @@ packages: stack-utils: 2.0.5 dev: true - /jest-mock/29.1.2: + /jest-mock@29.1.2: resolution: {integrity: sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2588,7 +2596,7 @@ packages: jest-util: 29.1.2 dev: true - /jest-pnp-resolver/1.2.2_jest-resolve@29.1.2: + /jest-pnp-resolver@1.2.2(jest-resolve@29.1.2): resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -2600,12 +2608,12 @@ packages: jest-resolve: 29.1.2 dev: true - /jest-regex-util/29.0.0: + /jest-regex-util@29.0.0: resolution: {integrity: sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.1.2: + /jest-resolve-dependencies@29.1.2: resolution: {integrity: sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2615,14 +2623,14 @@ packages: - supports-color dev: true - /jest-resolve/29.1.2: + /jest-resolve@29.1.2: resolution: {integrity: sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.0 graceful-fs: 4.2.10 jest-haste-map: 29.1.2 - jest-pnp-resolver: 1.2.2_jest-resolve@29.1.2 + jest-pnp-resolver: 1.2.2(jest-resolve@29.1.2) jest-util: 29.1.2 jest-validate: 29.1.2 resolve: 1.22.0 @@ -2630,7 +2638,7 @@ packages: slash: 3.0.0 dev: true - /jest-runner/29.1.2: + /jest-runner@29.1.2: resolution: {integrity: sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2659,7 +2667,7 @@ packages: - supports-color dev: true - /jest-runtime/29.1.2: + /jest-runtime@29.1.2: resolution: {integrity: sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2689,14 +2697,14 @@ packages: - supports-color dev: true - /jest-snapshot/29.1.2: + /jest-snapshot@29.1.2: resolution: {integrity: sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.17.8 '@babel/generator': 7.17.7 - '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.8 + '@babel/plugin-syntax-jsx': 7.16.7(@babel/core@7.17.8) + '@babel/plugin-syntax-typescript': 7.16.7(@babel/core@7.17.8) '@babel/traverse': 7.17.3 '@babel/types': 7.17.0 '@jest/expect-utils': 29.1.2 @@ -2704,7 +2712,7 @@ packages: '@jest/types': 29.1.2 '@types/babel__traverse': 7.18.2 '@types/prettier': 2.7.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.8 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.17.8) chalk: 4.1.0 expect: 29.1.2 graceful-fs: 4.2.10 @@ -2721,7 +2729,7 @@ packages: - supports-color dev: true - /jest-util/29.1.2: + /jest-util@29.1.2: resolution: {integrity: sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2733,7 +2741,7 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate/29.1.2: + /jest-validate@29.1.2: resolution: {integrity: sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2745,7 +2753,7 @@ packages: pretty-format: 29.1.2 dev: true - /jest-watcher/29.1.2: + /jest-watcher@29.1.2: resolution: {integrity: sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2759,7 +2767,7 @@ packages: string-length: 4.0.2 dev: true - /jest-worker/29.1.2: + /jest-worker@29.1.2: resolution: {integrity: sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2769,7 +2777,7 @@ packages: supports-color: 8.1.1 dev: true - /jest/29.1.2_@types+node@14.14.20: + /jest@29.1.2(@types/node@14.14.20): resolution: {integrity: sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -2782,18 +2790,18 @@ packages: '@jest/core': 29.1.2 '@jest/types': 29.1.2 import-local: 3.1.0 - jest-cli: 29.1.2_@types+node@14.14.20 + jest-cli: 29.1.2(@types/node@14.14.20) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -2801,29 +2809,29 @@ packages: esprima: 4.0.1 dev: true - /jsesc/2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse/1.0.0: + /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} dev: true - /json5/2.1.3: + /json5@2.1.3: resolution: {integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==} engines: {node: '>=6'} hasBin: true @@ -2831,13 +2839,13 @@ packages: minimist: 1.2.5 dev: true - /json5/2.2.1: + /json5@2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} hasBin: true dev: true - /jsx-ast-utils/3.2.0: + /jsx-ast-utils@3.2.0: resolution: {integrity: sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==} engines: {node: '>=4.0'} dependencies: @@ -2845,17 +2853,17 @@ packages: object.assign: 4.1.2 dev: true - /kleur/3.0.3: + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /leven/3.1.0: + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -2863,57 +2871,57 @@ packages: type-check: 0.4.0 dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /lodash.memoize/4.1.2: + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /loose-envify/1.4.0: + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /make-dir/3.1.0: + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror/1.0.12: + /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /merge-anything/5.0.2: + /merge-anything@5.0.2: resolution: {integrity: sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==} engines: {node: '>=12.13'} dependencies: @@ -2921,16 +2929,16 @@ packages: ts-toolbelt: 9.6.0 dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /micromatch/4.0.2: + /micromatch@4.0.2: resolution: {integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==} engines: {node: '>=8'} dependencies: @@ -2938,7 +2946,7 @@ packages: picomatch: 2.2.2 dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -2946,74 +2954,74 @@ packages: picomatch: 2.3.1 dev: true - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true - /minimatch/3.0.4: + /minimatch@3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 dev: true - /minimist/1.2.5: + /minimist@1.2.5: resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /nanoid/3.3.2: + /nanoid@3.3.2: resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.2: + /node-releases@2.0.2: resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /normalize.css/8.0.1: + /normalize.css@8.0.1: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.9.0: + /object-inspect@1.9.0: resolution: {integrity: sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.2: + /object.assign@4.1.2: resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} engines: {node: '>= 0.4'} dependencies: @@ -3023,7 +3031,7 @@ packages: object-keys: 1.1.1 dev: true - /object.entries/1.1.3: + /object.entries@1.1.3: resolution: {integrity: sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==} engines: {node: '>= 0.4'} dependencies: @@ -3033,7 +3041,7 @@ packages: has: 1.0.3 dev: true - /object.fromentries/2.0.4: + /object.fromentries@2.0.4: resolution: {integrity: sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==} engines: {node: '>= 0.4'} dependencies: @@ -3043,7 +3051,7 @@ packages: has: 1.0.3 dev: true - /object.values/1.1.3: + /object.values@1.1.3: resolution: {integrity: sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==} engines: {node: '>= 0.4'} dependencies: @@ -3053,20 +3061,20 @@ packages: has: 1.0.3 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 dev: true - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: true - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -3078,40 +3086,40 @@ packages: word-wrap: 1.2.3 dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -3121,61 +3129,61 @@ packages: lines-and-columns: 1.2.4 dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-parse/1.0.6: + /path-parse@1.0.6: resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch/2.2.2: + /picomatch@2.2.2: resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} engines: {node: '>=8.6'} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /pirates/4.0.5: + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /postcss/8.4.12: + /postcss@8.4.12: resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} engines: {node: ^10 || ^12 || >=14} dependencies: @@ -3184,12 +3192,12 @@ packages: source-map-js: 1.0.2 dev: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /pretty-format/26.6.2: + /pretty-format@26.6.2: resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} engines: {node: '>= 10'} dependencies: @@ -3199,7 +3207,7 @@ packages: react-is: 17.0.1 dev: true - /pretty-format/29.1.2: + /pretty-format@29.1.2: resolution: {integrity: sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3208,12 +3216,12 @@ packages: react-is: 18.2.0 dev: true - /progress/2.0.3: + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /prompts/2.4.2: + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -3221,7 +3229,7 @@ packages: sisteransi: 1.0.5 dev: true - /prop-types/15.7.2: + /prop-types@15.7.2: resolution: {integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==} dependencies: loose-envify: 1.4.0 @@ -3229,28 +3237,28 @@ packages: react-is: 16.13.1 dev: true - /punycode/2.1.1: + /punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /react-is/16.13.1: + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true - /react-is/17.0.1: + /react-is@17.0.1: resolution: {integrity: sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==} dev: true - /react-is/18.2.0: + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /regexp.prototype.flags/1.3.1: + /regexp.prototype.flags@1.3.1: resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==} engines: {node: '>= 0.4'} dependencies: @@ -3258,44 +3266,44 @@ packages: define-properties: 1.1.3 dev: true - /regexpp/3.1.0: + /regexpp@3.1.0: resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} engines: {node: '>=8'} dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true - /require-from-string/2.0.2: + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /resolve-cwd/3.0.0: + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve.exports/1.1.0: + /resolve.exports@1.1.0: resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} engines: {node: '>=10'} dev: true - /resolve/1.22.0: + /resolve@1.22.0: resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} hasBin: true dependencies: @@ -3304,26 +3312,26 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /resolve/2.0.0-next.3: + /resolve@2.0.0-next.3: resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==} dependencies: is-core-module: 2.2.0 path-parse: 1.0.6 dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.1.6 dev: true - /rollup/2.70.1: + /rollup@2.70.1: resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} engines: {node: '>=10.0.0'} hasBin: true @@ -3331,22 +3339,22 @@ packages: fsevents: 2.3.2 dev: true - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver/7.3.5: + /semver@7.3.5: resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} engines: {node: '>=10'} hasBin: true @@ -3354,19 +3362,19 @@ packages: lru-cache: 6.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -3374,20 +3382,20 @@ packages: object-inspect: 1.9.0 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /sisteransi/1.0.5: + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /slice-ansi/4.0.0: + /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -3396,21 +3404,19 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /solid-app-router/0.3.2_solid-js@1.5.7: + /solid-app-router@0.3.2(solid-js@1.3.13): resolution: {integrity: sha512-zh6Ui87xy23JUxrH0z1xAROJPpiuxa3JRx9jP2qqjr07q2EKQOjn9BrmTFvQd/azQWzLjSMU+hN2fy6kLh5Bdw==} peerDependencies: solid-js: ^1.3.5 dependencies: - solid-js: 1.5.7 + solid-js: 1.3.13 dev: true - /solid-js/1.5.7: - resolution: {integrity: sha512-L1UuyMuZZARAwzXo5NZDhE6yxc14aqNbVOUoGzvlcxRZo1Cm4ExhPV0diEfwDyiKG/igqNNLkNurHkXiI5sVEg==} - dependencies: - csstype: 3.1.1 + /solid-js@1.3.13: + resolution: {integrity: sha512-1EBEIW9u2yqT5QNjFdvz/tMAoKsDdaRA2Jbgykd2Dt13Ia0D4mV+BFvPkOaseSyu7DsMKS23+ZZofV8BVKmpuQ==} dev: true - /solid-refresh/0.4.0_solid-js@1.5.7: + /solid-refresh@0.4.0(solid-js@1.3.13): resolution: {integrity: sha512-5XCUz845n/sHPzKK2i2G2EeV61tAmzv6SqzqhXcPaYhrgzVy7nKTQaBpKK8InKrriq9Z2JFF/mguIU00t/73xw==} peerDependencies: solid-js: ^1.3.0 @@ -3418,51 +3424,47 @@ packages: '@babel/generator': 7.17.7 '@babel/helper-module-imports': 7.16.7 '@babel/types': 7.17.0 - solid-js: 1.5.7 + solid-js: 1.3.13 dev: true - /source-map-js/1.0.2: + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} dev: true - /source-map-support/0.5.13: + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true - /ssr-window/4.0.2: - resolution: {integrity: sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==} - dev: false - - /stack-utils/2.0.5: + /stack-utils@2.0.5: resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /string-hash/1.1.3: + /string-hash@1.1.3: resolution: {integrity: sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=} dev: true - /string-length/4.0.2: + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -3470,7 +3472,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/4.2.2: + /string-width@4.2.2: resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} engines: {node: '>=8'} dependencies: @@ -3479,7 +3481,7 @@ packages: strip-ansi: 6.0.0 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -3488,7 +3490,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.matchall/4.0.4: + /string.prototype.matchall@4.0.4: resolution: {integrity: sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==} dependencies: call-bind: 1.0.2 @@ -3500,71 +3502,71 @@ packages: side-channel: 1.0.4 dev: true - /string.prototype.trimend/1.0.4: + /string.prototype.trimend@1.0.4: resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 dev: true - /string.prototype.trimstart/1.0.4: + /string.prototype.trimstart@1.0.4: resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 dev: true - /strip-ansi/6.0.0: + /strip-ansi@6.0.0: resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.0 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-hyperlinks/2.3.0: + /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} dependencies: @@ -3572,21 +3574,12 @@ packages: supports-color: 7.2.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /swiper/8.4.4: - resolution: {integrity: sha512-jA/8BfOZwT8PqPSnMX0TENZYitXEhNa7ZSNj1Diqh5LZyUJoBQaZcqAiPQ/PIg1+IPaRn/V8ZYVb0nxHMh51yw==} - engines: {node: '>= 4.7.0'} - requiresBuild: true - dependencies: - dom7: 4.0.4 - ssr-window: 4.0.2 - dev: false - - /table/6.0.7: + /table@6.0.7: resolution: {integrity: sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==} engines: {node: '>=10.0.0'} dependencies: @@ -3596,7 +3589,7 @@ packages: string-width: 4.2.2 dev: true - /terminal-link/2.1.1: + /terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} dependencies: @@ -3604,7 +3597,7 @@ packages: supports-hyperlinks: 2.3.0 dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -3613,27 +3606,27 @@ packages: minimatch: 3.0.4 dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true - /tmpl/1.0.5: + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} engines: {node: '>=4'} dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /ts-jest/29.0.3_u3tawnhld4dxccrvbviil55jbq: + /ts-jest@29.0.3(@babel/core@7.17.8)(jest@29.1.2)(typescript@4.6.3): resolution: {integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3654,9 +3647,10 @@ packages: esbuild: optional: true dependencies: + '@babel/core': 7.17.8 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.1.2_@types+node@14.14.20 + jest: 29.1.2(@types/node@14.14.20) jest-util: 29.1.2 json5: 2.2.1 lodash.memoize: 4.1.2 @@ -3666,15 +3660,15 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-toolbelt/9.6.0: + /ts-toolbelt@9.6.0: resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} dev: true - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tsutils/3.21.0_typescript@4.6.3: + /tsutils@3.21.0(typescript@4.6.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -3684,40 +3678,40 @@ packages: typescript: 4.6.3 dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /typescript/4.6.3: + /typescript@4.6.3: resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /unbox-primitive/1.0.1: + /unbox-primitive@1.0.1: resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} dependencies: function-bind: 1.1.1 @@ -3726,17 +3720,17 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true - /v8-compile-cache/2.3.0: + /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul/9.0.1: + /v8-to-istanbul@9.0.1: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: @@ -3745,15 +3739,15 @@ packages: convert-source-map: 1.7.0 dev: true - /vite-plugin-solid/2.2.6: + /vite-plugin-solid@2.2.6: resolution: {integrity: sha512-J1RnmqkZZJSNYDW7vZj0giKKHLWGr9tS/gxR70WDSTYfhyXrgukbZdIfSEFbtrsg8ZiQ2t2zXcvkWoeefenqKw==} dependencies: '@babel/core': 7.17.8 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 - babel-preset-solid: 1.3.13_@babel+core@7.17.8 + '@babel/preset-typescript': 7.16.7(@babel/core@7.17.8) + babel-preset-solid: 1.3.13(@babel/core@7.17.8) merge-anything: 5.0.2 - solid-js: 1.5.7 - solid-refresh: 0.4.0_solid-js@1.5.7 + solid-js: 1.3.13 + solid-refresh: 0.4.0(solid-js@1.3.13) vite: 2.9.0 transitivePeerDependencies: - less @@ -3762,7 +3756,7 @@ packages: - supports-color dev: true - /vite/2.9.0: + /vite@2.9.0: resolution: {integrity: sha512-5NAnNqzPmZzJvrswZGeTS2JHrBGIzIWJA2hBTTMYuoBVEMh0xwE0b5yyIXFxf7F07hrK4ugX2LJ7q6t7iIbd4Q==} engines: {node: '>=12.2.0'} hasBin: true @@ -3786,13 +3780,13 @@ packages: fsevents: 2.3.2 dev: true - /walker/1.0.8: + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.1 @@ -3802,7 +3796,7 @@ packages: is-symbol: 1.0.3 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -3810,12 +3804,12 @@ packages: isexe: 2.0.0 dev: true - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -3824,11 +3818,11 @@ packages: strip-ansi: 6.0.1 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} dev: true - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -3836,26 +3830,26 @@ packages: signal-exit: 3.0.7 dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml/1.10.0: + /yaml@1.10.0: resolution: {integrity: sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==} engines: {node: '>= 6'} dev: false - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true - /yargs/17.6.0: + /yargs@17.6.0: resolution: {integrity: sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==} engines: {node: '>=12'} dependencies: @@ -3868,7 +3862,7 @@ packages: yargs-parser: 21.1.1 dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true diff --git a/public/img/wall1.webp b/public/img/wall1.webp deleted file mode 100644 index 1ceef0b..0000000 Binary files a/public/img/wall1.webp and /dev/null differ diff --git a/src/API/CargaHorarios.ts b/src/API/CargaHorarios.ts deleted file mode 100644 index e434898..0000000 --- a/src/API/CargaHorarios.ts +++ /dev/null @@ -1,186 +0,0 @@ -/* -// HTTP POST -// Url: /horarios - -// El frontend envia una lista de cursos, de los cuales recuperar sus datos -{ - cursos: Array // Un array de id_curso -} - -// Backend responde con los cursos especificados y sus horarios -[ - // Cada objeto dentro del array sera un Curso - { - id_curso: number, - id_datos_carrera: any, // Opcional - nombre_curso: string, - curso_anio: number | string, - abreviado: string, - // Un array de objetos, estos objetos son de la entidad Laboratorio - laboratorios: [ - { - id_laboratorio: number, - id_curso: number, - grupo: string, - docente: string, - // Array de objetos de la entidad Horario - horario: [ - { - id_horario: number, - dia: string, - hora_inicio: string, - hora_fin: string, - } - ] - } - ] - } -] - */ - - -import { SERVER_PATH } from "../Store"; - -export type Horario = { - id_horario: number, - id_laboratorio: number, - dia: string, - hora_inicio: string, - hora_fin: string, -} -export type Laboratorio = { - id_laboratorio: number, - id_curso: number, - grupo: string, - docente: string, - // Array de objetos de la entidad Horario - horarios: Array -} -export type CursoCompleto = { - id_curso: number, - nombre_curso: string, - curso_anio: number | string, - abreviado: string, - // Un array de objetos, estos objetos son de la entidad Laboratorio - laboratorios: Array -} - -type InputData = { - cursos: Array -} -export type ListaCursosCompleto = Array - -type GetHorariosFn = (_: InputData) => Promise - -export const getHorarios: GetHorariosFn = async(data) => { - const response = await fetch(`${SERVER_PATH}/horarios`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(data), - }); - return await response.json(); -}; - -export const getHorariosMock: GetHorariosFn = async(_) => { - const c1: CursoCompleto = { - id_curso: 0, - nombre_curso: "Gestion de Sistemas y Tecnologias de Informacion", - curso_anio: "5to", - abreviado: "GSTI", - laboratorios: [ - { - id_laboratorio: 0, - id_curso: 0, - grupo: "A", - docente: "Luis Rocha", - horarios: [ - { - id_horario: 0, - id_laboratorio: 0, - hora_inicio: "1830", - hora_fin: "1920", - dia: "Jueves", - }, - { - id_horario: 1, - id_laboratorio: 0, - hora_inicio: "1550", - hora_fin: "1740", - dia: "Viernes", - }, - ], - }, - { - id_laboratorio: 1, - id_curso: 0, - grupo: "B", - docente: "Luis Rocha", - horarios: [ - { - id_horario: 2, - id_laboratorio: 1, - hora_inicio: "0700", - hora_fin: "0850", - dia: "Lunes", - }, - { - id_horario: 3, - id_laboratorio: 1, - hora_inicio: "1400", - hora_fin: "1640", - dia: "Miercoles", - }, - { - id_horario: 6, - id_laboratorio: 1, - hora_inicio: "1400", - hora_fin: "1640", - dia: "Viernes", - }, - ], - }, - ], - }; - const c2: CursoCompleto = { - id_curso: 1, - nombre_curso: "Plataformas Emergentes", - curso_anio: "5to", - abreviado: "PE", - laboratorios: [ - { - id_laboratorio: 2, - id_curso: 1, - grupo: "A", - docente: "Diego Iquira", - horarios: [ - { - id_horario: 4, - id_laboratorio: 2, - hora_inicio: "0850", - hora_fin: "1040", - dia: "Jueves", - }, - ], - }, - { - id_laboratorio: 3, - id_curso: 1, - grupo: "B", - docente: "Diego Iquira", - horarios: [ - { - id_horario: 5, - id_laboratorio: 3, - hora_inicio: "1740", - hora_fin: "1920", - dia: "Martes", - }, - ], - }, - ], - }; - - return [c1, c2]; -}; diff --git a/src/API/ListaCursos.ts b/src/API/ListaCursos.ts deleted file mode 100644 index 9b154f6..0000000 --- a/src/API/ListaCursos.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* -// HTTP GET -// Url: /cursos - -// El frontend pide una lista de la informacion de todos los cursos - -// Backend responde con una lista de todos los cursos -[ - { - id_curso: number, - id_datos_carrera: any, // Opcional - nombre_curso: string, - curso_anio: number | string, // Numero o string, dependiendo de como este en DB - abreviado: string, - } -] -*/ - -import { SERVER_PATH } from "../Store"; - -export type InfoCurso = { - id_curso: number, - nombre_curso: string, - curso_anio: string, - abreviado: string, -} -// `"1er"`, `"2do"`, etc -type NombreAnio = string -export type RespuestaListaCursos = {[key: NombreAnio]: Array} -type ListaCursosFn = () => Promise - -export const getAllListaCursos: ListaCursosFn = async() => { - const response = await fetch(`${SERVER_PATH}/cursos`); - const data = await response.json() as Array; - - const resultMap: RespuestaListaCursos = {}; - data.forEach((curso) => { - if (resultMap[curso.curso_anio] === undefined) { - resultMap[curso.curso_anio] = []; - } - - resultMap[curso.curso_anio]?.push(curso); - }); - - return resultMap; -}; - -export const getAllListaCursosMock: ListaCursosFn = async() => { - const arr5to: Array = [ - { - id_curso: 0, - nombre_curso: "Gestion de Sistemas y Tecnologias de Informacion", - curso_anio: "5to", - abreviado: "GSTI", - }, - { - id_curso: 1, - nombre_curso: "Practicas Pre Profesionales", - curso_anio: "5to", - abreviado: "PPP", - }, - ]; - const arr4to: Array = [ - { - id_curso: 2, - nombre_curso: "Diseño y Arquitectura de Software", - curso_anio: "4to", - abreviado: "DAS", - }, - { - id_curso: 3, - nombre_curso: "Gestion de Proyectos de Software", - curso_anio: "4to", - abreviado: "GPS", - }, - ]; - - return { - "5to": arr5to, - "4to": arr4to, - }; -}; diff --git a/src/API/Login.ts b/src/API/Login.ts deleted file mode 100644 index 73fa550..0000000 --- a/src/API/Login.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { SERVER_PATH } from "../Store"; - -type IdLaboratorio = number; -type LoginData = {correo_usuario: string}; -type LoginResponse = Promise<{matriculas: Array} | null>; -export type LoginFunction = (data: LoginData) => LoginResponse; - -// Mock for a login without courses -export const mockLoginEmpty: LoginFunction = async(data) => ({matriculas: []}); - -// Mock for a login with courses -export const mockLoginNotEmpty: LoginFunction = async(_) => ({ - matriculas: [0, 1, 2, 3], -}); - -// Error login mock -export const mockLoginWithError: LoginFunction = async(_) => null; - -// Standard login -export const loginFn: LoginFunction = async(data) => { - const petition = await fetch(`${SERVER_PATH}/login`, { - method: "POST", - headers: { - "Accept": "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify({ - correo_usuario: data.correo_usuario, - }), - }); - if (!petition.ok) return null; - return await petition.json() as {matriculas: Array}; -}; - diff --git a/src/API/VerMatricula.ts b/src/API/VerMatricula.ts deleted file mode 100644 index 8c1edf9..0000000 --- a/src/API/VerMatricula.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {SERVER_PATH} from "../Store"; - -type Input = { - matriculas: Array -} -export type InfoMatricula = { - nombre_curso: string, - grupo: string, - docente: string, -} -type VerMatriculaFn = (_: Input) => Promise>; - -export const getMatricula: VerMatriculaFn = async(input) => { - const response = await fetch(`${SERVER_PATH}/recuperacion`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(input), - }); - return await response.json(); -}; - -export const getMatriculaMock: VerMatriculaFn = async(_) => [ - { - nombre_curso: "Plataformas Emergentes", - grupo: "LA", - docente: "Diego Iquira", - }, - { - nombre_curso: "Gestión de Proyectos de Software", - grupo: "LB", - docente: "Luis Rocha", - }, -]; - diff --git a/src/App.tsx b/src/App.tsx index 6393f89..d96f9da 100755 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,21 +1,16 @@ -import { Sistemas } from "./Views/pc/Sistemas"; +import { Main } from "./Views/Main"; import { Index } from "./Views/Index"; import { Editor } from "./Views/Editor"; import { useRouter } from "./Router"; import { Switch, Match, Show } from "solid-js"; import { Wallpaper } from "./Wallpaper"; -import { SistemasMovil } from "./Views/SistemasMovil"; -import { SeleccionCursos } from "./Views/SeleccionCursos"; -import { VerMatricula } from "./Views/VerMatricula"; -import {SeleccionCursos as SeleccionCursosPC} from "./Views/pc/SeleccionCursos"; -import { VerMatricula as VerMatriculaPC } from "./Views/pc/VerMatricula"; function App() { const route = useRouter(); const isMobile = screen.width <= 500; return ( -
+
@@ -26,24 +21,8 @@ function App() { - - - - - - - - - - - - - - - - - - + +
diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/BotonIcono.tsx b/src/ContenedorHorarios/BotonIcono.tsx similarity index 87% rename from src/Views/pc/Sistemas/ContenedorHorarios/BotonIcono.tsx rename to src/ContenedorHorarios/BotonIcono.tsx index 273eeae..e416db0 100644 --- a/src/Views/pc/Sistemas/ContenedorHorarios/BotonIcono.tsx +++ b/src/ContenedorHorarios/BotonIcono.tsx @@ -1,5 +1,5 @@ -import { css } from "aphrodite"; -import {estilosGlobales} from "../../../../Estilos"; +import { css } from "aphrodite" +import { estilosGlobales } from "../Estilos" interface BotonMaxMinProps { icono: string, @@ -21,5 +21,5 @@ export function BotonIcono(props: BotonMaxMinProps) { >
- ); + ) } diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/BotonMaxMin.tsx b/src/ContenedorHorarios/BotonMaxMin.tsx similarity index 78% rename from src/Views/pc/Sistemas/ContenedorHorarios/BotonMaxMin.tsx rename to src/ContenedorHorarios/BotonMaxMin.tsx index 25d4b0f..9da4f8a 100644 --- a/src/Views/pc/Sistemas/ContenedorHorarios/BotonMaxMin.tsx +++ b/src/ContenedorHorarios/BotonMaxMin.tsx @@ -1,6 +1,6 @@ -import { css } from "aphrodite"; -import { estilosGlobales } from "../../../../Estilos"; -import {EstadoLayout} from "../ContenedorHorarios"; +import { css } from "aphrodite" +import { estilosGlobales } from "../Estilos" +import { EstadoLayout } from "./ContenedorHorarios" interface BotonMaxMinProps { fnMaximizar: () => void, @@ -10,19 +10,19 @@ interface BotonMaxMinProps { } export function BotonMaxMin(props: BotonMaxMinProps) { - const horariosMax = () => props.estadoActualLayout() === props.estadoLayoutMax; + const horariosMax = () => props.estadoActualLayout() === props.estadoLayoutMax - const tituloBoton = () => (horariosMax() ? "Minimizar" : "Maximizar"); - const iconoBoton = () => (horariosMax() ? "ph-arrows-in" : "ph-arrows-out"); + const tituloBoton = () => (horariosMax() ? "Minimizar" : "Maximizar") + const iconoBoton = () => (horariosMax() ? "ph-arrows-in" : "ph-arrows-out") const funcionBoton = () => { - const estaMaximizado = horariosMax(); + const estaMaximizado = horariosMax() if (estaMaximizado) { - props.fnMinimizar(); + props.fnMinimizar() } else { - props.fnMaximizar(); + props.fnMaximizar() } - }; + } return ( - ); + ) } diff --git a/src/ContenedorHorarios/ContenedorHorarios.tsx b/src/ContenedorHorarios/ContenedorHorarios.tsx new file mode 100755 index 0000000..01974d4 --- /dev/null +++ b/src/ContenedorHorarios/ContenedorHorarios.tsx @@ -0,0 +1,137 @@ +import YAML from "yaml" +import { css, StyleSheet } from "aphrodite" +import { MiHorario } from "./MiHorario" +import { Horarios } from "./Horarios" +import { + Anios, + Cursos, + DatosHorario, + DatosHorarioRaw, + DatosGrupo, +} from "../types/DatosHorario" +import { estilosGlobales } from "../Estilos" +import { batch, createEffect, createMemo, createSignal, Show } from "solid-js" +import { useListaCursos } from "./useListaCursos" + +const datosPromise = (async() => { + const file = await fetch("/horarios/2022_2_fps_ingenieriadesistemas.yaml") + const text = await file.text() + const datosRaw = YAML.parse(text) as DatosHorarioRaw + + // Agregar los campos faltantes a DatosHorarioRaw para que sea DatosHorario + const datos: DatosHorario = { + ...datosRaw, + años: {}, + } + + const anios: Anios = {} + for (const [nombreAnio, anio] of Object.entries(datosRaw.años)) { + const anioData: Cursos = {} + for (const [nombreCurso, curso] of Object.entries(anio)) { + + const gruposTeoria: { [k: string]: DatosGrupo } = {} + for (const [key, data] of Object.entries(curso.Teoria)) { + gruposTeoria[key] = Object.assign({seleccionado: false}, data) + } + + const gruposLab: { [k: string]: DatosGrupo } = {} + for (const [key, data] of Object.entries(curso.Laboratorio ?? {})) { + gruposLab[key] = Object.assign({seleccionado: false}, data) + } + + anioData[nombreCurso] = { + ...curso, + oculto: false, + Teoria: gruposTeoria, + Laboratorio: gruposLab, + } + } + + anios[nombreAnio] = anioData + } + + datos.años = anios + return datos +})() + +const ElemCargando = () => ( +
+ Recuperando horarios... +
+) + +export type EstadoLayout = "MaxPersonal" | "Normal" | "MaxHorarios"; + +const { + listaCursos: cursosUsuario, + setListaCursos: setCursosUsuarios, + agregarCursoALista: agregarCursoUsuario, +} = useListaCursos() + +export function ContenedorHorarios() { + const [datosCargados, setDatosCargados] = createSignal(false) + const [datos, setDatos] = createSignal(null) + const [estadoLayout, setEstadoLayout] = ( + createSignal(localStorage.getItem("estadoLayout") as EstadoLayout || "Normal") + ) + + const e = createMemo(() => { + let templateColumns = "" + switch (estadoLayout()) { + case "MaxHorarios": { + templateColumns = "0 auto" + break + } + case "MaxPersonal": { + templateColumns = "auto 0m" + break + } + case "Normal": { + templateColumns = "50% 50%" + } + } + + localStorage.setItem("estadoLayout", estadoLayout()) + + return StyleSheet.create({ + contenedor: { + display: "grid", + gridTemplateColumns: templateColumns, + }, + }) + }) + + createEffect(async() => { + const datos = await datosPromise + batch(() => { + setDatos(datos) + setDatosCargados(true) + }) + }) + + return ( +
+
+ +
+
+ + agregarCursoUsuario(JSON.parse(JSON.stringify(c)))} + listaCursosUsuario={cursosUsuario} + setCursosUsuarios={setCursosUsuarios} + /> + +
+
+ ) +} diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/CursosElem.tsx b/src/ContenedorHorarios/CursosElem.tsx similarity index 73% rename from src/Views/pc/Sistemas/ContenedorHorarios/CursosElem.tsx rename to src/ContenedorHorarios/CursosElem.tsx index d9ca607..46f12ee 100755 --- a/src/Views/pc/Sistemas/ContenedorHorarios/CursosElem.tsx +++ b/src/ContenedorHorarios/CursosElem.tsx @@ -1,10 +1,9 @@ -import { Cursos, DatosGrupo, ListaCursosUsuario, Curso } from "../../../../types/DatosHorario"; -import { createMemo, For } from "solid-js"; -import { produce, SetStoreFunction } from "solid-js/store"; -import { StyleSheet, css } from "aphrodite"; -import { estilosGlobales } from "../../../../Estilos"; -import { TablaObserver } from "./TablaObserver"; -import { setGruposSeleccionados } from "../../../../Store"; +import { Cursos, DatosGrupo, ListaCursosUsuario, Curso } from "../types/DatosHorario" +import { createMemo, For } from "solid-js" +import { produce, SetStoreFunction } from "solid-js/store" +import { StyleSheet, css } from "aphrodite" +import { estilosGlobales } from "../Estilos" +import { TablaObserver } from "./TablaObserver" const e = StyleSheet.create({ inline: { @@ -34,20 +33,21 @@ const e = StyleSheet.create({ border: "none", color: "var(--color)", }, -}); +}) const claseCursoNoAgregado = css( e.contenedorCurso, estilosGlobales.contenedor, -); +) -const claseCursoOculto = css(e.cursoOculto); +const claseCursoOculto = css(e.cursoOculto) interface Props { version: number, dataAnio: Cursos, anioActual: () => string, fnAgregarCurso: (c: Curso) => void, + listaCursosUsuario: ListaCursosUsuario, esCursoMiHorario: boolean, setCursosUsuarios: SetStoreFunction, tablaObserver: TablaObserver, @@ -64,7 +64,7 @@ interface PropsIndicadorGrupo { } function IndicadorGrupo(props: PropsIndicadorGrupo) { - const id = `${props.idParcial}_${props.esLab ? "L" : "T"}_${props.nombre}`; + const id = `${props.idParcial}_${props.esLab ? "L" : "T"}_${props.nombre}` return ( {props.esLab ? "L" : ""}{props.nombre} - ); + ) } const agruparProfesores = ( @@ -84,21 +84,31 @@ const agruparProfesores = ( esLab: boolean, setCursosUsuarios: FnSetCursosUsuarios, ) => { - const profesores: { [k: string]: [string, () => void][] } = {}; + const profesores: { [k: string]: [string, () => void][] } = {} for (const [grupo, datosGrupo] of Object.entries(datos)) { - const nombreProfesor = datosGrupo.Docente; + const nombreProfesor = datosGrupo.Docente if (!profesores[nombreProfesor]) { - profesores[nombreProfesor] = []; + profesores[nombreProfesor] = [] } profesores[nombreProfesor].push([ grupo, () => { - setGruposSeleccionados(datosGrupo.id_laboratorio, (x) => !x); + setCursosUsuarios("cursos", Number(indiceCurso), "Teoria", produce<{ [p: string]: DatosGrupo }>((x) => { + const grupoActualSeleccionado = x[grupo].seleccionado + + if (grupoActualSeleccionado) { + x[grupo].seleccionado = false + } else { + for (const xKey in x) { + x[xKey].seleccionado = xKey === grupo + } + } + })) }, - ]); + ]) } - return profesores; -}; + return profesores +} function CursoE( indiceCurso: string, @@ -107,27 +117,42 @@ function CursoE( claseCursoAgregado: string, props: Props, ) { - const idCurso = `${props.version}_${anio()}_${datosCurso.abreviado}`; + const idCurso = `${props.version}_${anio()}_${datosCurso.abreviado}` + + const cursoAgregadoMemo = createMemo( + () => props.listaCursosUsuario.cursos.find((x) => x.nombre === datosCurso.nombre && !x.oculto) !== undefined, + undefined, + { + equals: + (x, y) => x === y, + }, + ) + + const tituloMemo = createMemo(() => (cursoAgregadoMemo() + ? "Remover de mi horario" + : "Agregar a mi horario")) const claseMemo = createMemo(() => { if (props.esCursoMiHorario && datosCurso.oculto) { - return claseCursoOculto; + return claseCursoOculto } - return claseCursoNoAgregado; - }); + return cursoAgregadoMemo() + ? claseCursoAgregado + : claseCursoNoAgregado + }) const profesoresTeoria = createMemo(() => agruparProfesores( datosCurso.Teoria, Number(indiceCurso), false, props.setCursosUsuarios, - )); + )) const profesoresLab = createMemo(() => agruparProfesores( datosCurso.Laboratorio ?? {}, Number(indiceCurso), true, props.setCursosUsuarios, - )); + )) const IndicadorGrupos = (profesor: string, grupos: [string, () => void][], esLab: boolean) => ( @@ -147,7 +172,7 @@ function CursoE( } - ); + ) return (
@@ -172,18 +197,24 @@ function CursoE( +
- ); + ) } export function CursosElem(props: Props) { - const anio = () => props.anioActual().substring(0, props.anioActual().indexOf(" ")); + const anio = () => props.anioActual().substring(0, props.anioActual().indexOf(" ")) const claseCursoAgregado = css( e.contenedorCurso, estilosGlobales.contenedor, !props.esCursoMiHorario && estilosGlobales.contenedorCursorActivo, - ); + ) return ( <> @@ -191,5 +222,5 @@ export function CursosElem(props: Props) { {([indiceCurso, datosCurso]) => CursoE(indiceCurso, datosCurso, anio, claseCursoAgregado, props)} - ); + ) } diff --git a/src/ContenedorHorarios/Horarios.tsx b/src/ContenedorHorarios/Horarios.tsx new file mode 100755 index 0000000..84c36da --- /dev/null +++ b/src/ContenedorHorarios/Horarios.tsx @@ -0,0 +1,139 @@ +import { Curso, Cursos, DatosHorario, ListaCursosUsuario } from "../types/DatosHorario" +import { batch, createMemo, createSignal, For, Match, Switch, untrack } from "solid-js" +import {SetStoreFunction} from "solid-js/store" +import { css } from "aphrodite" +import { estilosGlobales } from "../Estilos" +import { Tabla } from "./Tabla" +import { CursosElem } from "./CursosElem" +import { EstadoLayout } from "./ContenedorHorarios" +import { BotonMaxMin } from "./BotonMaxMin" +import { useListaCursos } from "./useListaCursos" +import { TablaObserver } from "./TablaObserver" + +interface HorariosProps { + data: DatosHorario, + estadoLayout: EstadoLayout, + setEstadoLayout: (v: EstadoLayout) => EstadoLayout, + fnAgregarCurso: (c: Curso) => void, + listaCursosUsuario: ListaCursosUsuario, + setCursosUsuarios: SetStoreFunction +} + +const { + setListaCursos, + agregarCursoALista, + eliminarCursosDeLista, +} = useListaCursos() + +export function Horarios(props: HorariosProps) { + const [anioActual, setAnioActual] = createSignal("1er año") + + const tablaObserver = new TablaObserver() + + const elAnios = ( + + {([nombre]) => { + const clases = createMemo(() => { + const vAnio = anioActual() + return css( + estilosGlobales.contenedor, + estilosGlobales.inlineBlock, + estilosGlobales.contenedorCursor, + estilosGlobales.contenedorCursorSoft, + nombre === vAnio && estilosGlobales.contenedorCursorActivo, + ) + }) + + return ( + + ) + }} + + ) + + const dataTabla = createMemo(() => { + const anio = anioActual() + const obj: Cursos = {} + untrack(() => { + const cursos = props.data.años[anio] + batch(() => { + eliminarCursosDeLista() + + let i = 0 + for (const [, curso] of Object.entries(cursos)) { + // El curso devuelto por esta fun. es reactivo + obj[i] = agregarCursoALista(curso) + i += 1 + } + }) + }) + + return obj + }) + + const fnMaximizar = () => props.setEstadoLayout("MaxHorarios") + const fnMinimizar = () => props.setEstadoLayout("Normal") + const estadoActualLayout = () => props.estadoLayout + + return ( +
+ + +
+
+ Horarios disponibles +
+
+ {elAnios} + | + +
+
+ +
+
+ +
+
+ + {/* + + */} +
+ + + +
+ ) +} diff --git a/src/ContenedorHorarios/MiHorario.tsx b/src/ContenedorHorarios/MiHorario.tsx new file mode 100755 index 0000000..40511ca --- /dev/null +++ b/src/ContenedorHorarios/MiHorario.tsx @@ -0,0 +1,146 @@ +import { estilosGlobales } from "../Estilos" +import { StyleSheet, css } from "aphrodite" +import { Tabla } from "./Tabla" +import { EstadoLayout } from "./ContenedorHorarios" +import { Switch, Match, createMemo } from "solid-js" +import {SetStoreFunction} from "solid-js/store" +import { BotonMaxMin } from "./BotonMaxMin" +import { BotonIcono } from "./BotonIcono" +import { Curso, Cursos, ListaCursosUsuario } from "../types/DatosHorario" +import { CursosElem } from "./CursosElem" +import { TablaObserver } from "./TablaObserver" + +interface MiHorarioProps { + estadoLayout: EstadoLayout, + setEstadoLayout: (v: EstadoLayout) => EstadoLayout, + cursosUsuario: ListaCursosUsuario, + fnAgregarCurso: (c: Curso) => void, + setCursosUsuarios: SetStoreFunction +} + +const e = StyleSheet.create({ + horario: {}, + boton: { + textDecoration: "none", + // paddingRight: "0.5rem", + "::before": { + fontSize: "1rem", + // transform: "translateY(0.2rem)", + textDecoration: "none", + }, + }, +}) + +export function MiHorario(props: MiHorarioProps) { + const tablaObserver = new TablaObserver() + + const datosMiHorario = createMemo(() => { + const obj: Cursos = {} + props.cursosUsuario.cursos.forEach((x, i) => { + obj[i] = x + }) + return obj + }) + + const fnMaximizar = () => props.setEstadoLayout("MaxPersonal") + const fnMinimizar = () => props.setEstadoLayout("Normal") + const estadoActualLayout = () => props.estadoLayout + + /* TODO: En barra superior colocar todos los horarios. En barra inferior el horario + actual. + Al hacer click en un horario de la barra superior, llevarlo al inicio de la lista. + */ + return ( +
+ + + +
+
+ Mi horario +
+
+ +
+
+ Mi horario +
+ | + {/* + {}} + /> + {}} + /> + {}} + /> + {}} + /> + | + */} + +
+ +
+ +
+ + "Mi horario"} + dataAnio={datosMiHorario()} + fnAgregarCurso={props.fnAgregarCurso} + listaCursosUsuario={props.cursosUsuario} + esCursoMiHorario + setCursosUsuarios={props.setCursosUsuarios} + tablaObserver={tablaObserver} + /> +
+ + {/* + + */} +
+ + +
+ ) +} diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/Tabla.tsx b/src/ContenedorHorarios/Tabla.tsx similarity index 61% rename from src/Views/pc/Sistemas/ContenedorHorarios/Tabla.tsx rename to src/ContenedorHorarios/Tabla.tsx index c310782..6b0df56 100755 --- a/src/Views/pc/Sistemas/ContenedorHorarios/Tabla.tsx +++ b/src/ContenedorHorarios/Tabla.tsx @@ -1,11 +1,11 @@ -import { StyleSheet, css } from "aphrodite"; -import { batch, createMemo, For } from "solid-js"; -import { produce, SetStoreFunction } from "solid-js/store"; -import {estilosGlobales} from "../../../../Estilos"; -import { Cursos, ListaCursosUsuario, DataProcesada, DatosGrupo } from "../../../../types/DatosHorario"; -import { Dia, dias, gruposSeleccionados, horas, setGruposSeleccionados } from "../../../../Store"; -import { FilaTabla } from "./Tabla/FilaTabla"; -import { TablaObserver } from "./TablaObserver"; +import { StyleSheet, css } from "aphrodite" +import { batch, createMemo, For } from "solid-js" +import { produce, SetStoreFunction } from "solid-js/store" +import { estilosGlobales } from "../Estilos" +import { Cursos, ListaCursosUsuario, DataProcesada, DatosGrupo } from "../types/DatosHorario" +import { Dia, dias, horas } from "../Store" +import { FilaTabla } from "./Tabla/FilaTabla" +import { TablaObserver } from "./TablaObserver" export const coloresBorde = Object.freeze([ "rgba(33,150,243,1)", @@ -13,22 +13,22 @@ export const coloresBorde = Object.freeze([ "rgba(236,64,122 ,1)", "rgba(29,233,182 ,1)", "rgba(244,67,54,1)", -]); +]) export const diaANum = (d: Dia) => { switch (d) { case "Lunes": - return 0; + return 0 case "Martes": - return 1; + return 1 case "Miercoles": - return 2; + return 2 case "Jueves": - return 3; + return 3 case "Viernes": - return 4; + return 4 } -}; +} const e = StyleSheet.create({ fila: { @@ -81,34 +81,34 @@ const e = StyleSheet.create({ celdaCursoTeoria: { fontWeight: "bold", }, -}); +}) type FnSetCursosUsuarios = SetStoreFunction; const procesarAnio = (data: Cursos, anio: string, version: number, setCursosUsuarios: FnSetCursosUsuarios) => { - const obj: DataProcesada = {}; + const obj: DataProcesada = {} for (const [indiceCurso, curso] of Object.entries(data)) { - if (curso.oculto) continue; + if (curso.oculto) continue - const nombreAbreviado = curso.abreviado; + const nombreAbreviado = curso.abreviado for (const [grupoStr, grupo] of Object.entries(curso.Teoria)) { for (const hora of grupo.Horas) { - const dia = hora.substring(0, 2); - const horas = hora.substring(2, 4); - const minutos = hora.substr(4); + const dia = hora.substring(0, 2) + const horas = hora.substring(2, 4) + const minutos = hora.substr(4) - const horaCompleta = `${horas}:${minutos}`; + const horaCompleta = `${horas}:${minutos}` - const id = `${version}_${anio}_${nombreAbreviado}_T_${grupoStr}`; + const id = `${version}_${anio}_${nombreAbreviado}_T_${grupoStr}` if (!(horaCompleta in obj)) { - obj[horaCompleta] = {}; + obj[horaCompleta] = {} } if (!(dia in obj[horaCompleta])) { - obj[horaCompleta][dia] = []; + obj[horaCompleta][dia] = [] } obj[horaCompleta][dia].push({ @@ -117,28 +117,38 @@ const procesarAnio = (data: Cursos, anio: string, version: number, setCursosUsua esLab: false, datosGrupo: grupo, fnSeleccionar: () => { + setCursosUsuarios("cursos", Number(indiceCurso), "Teoria", produce<{ [p: string]: DatosGrupo }>((x) => { + const grupoActualSeleccionado = x[grupoStr].seleccionado + if (grupoActualSeleccionado) { + x[grupoStr].seleccionado = false + } else { + for (const xKey in x) { + x[xKey].seleccionado = xKey === grupoStr + } + } + })) }, - }); + }) } } for (const [grupoStr, grupo] of Object.entries(curso.Laboratorio ?? {})) { for (const hora of grupo.Horas) { - const dia = hora.substring(0, 2); - const horas = hora.substring(2, 4); - const minutos = hora.substr(4); + const dia = hora.substring(0, 2) + const horas = hora.substring(2, 4) + const minutos = hora.substr(4) - const horaCompleta = `${horas}:${minutos}`; + const horaCompleta = `${horas}:${minutos}` - const id = `${version}_${anio}_${nombreAbreviado}_L_${grupoStr}`; + const id = `${version}_${anio}_${nombreAbreviado}_L_${grupoStr}` if (!(horaCompleta in obj)) { - obj[horaCompleta] = {}; + obj[horaCompleta] = {} } if (!(dia in obj[horaCompleta])) { - obj[horaCompleta][dia] = []; + obj[horaCompleta][dia] = [] } obj[horaCompleta][dia].push({ @@ -147,15 +157,30 @@ const procesarAnio = (data: Cursos, anio: string, version: number, setCursosUsua esLab: true, datosGrupo: grupo, fnSeleccionar: () => { - setGruposSeleccionados(grupo.id_laboratorio, (x) => !x); + setCursosUsuarios( + "cursos", + Number(indiceCurso), + "Laboratorio", + produce<{ [p: string]: DatosGrupo }>((x) => { + const grupoActualSeleccionado = x[grupoStr].seleccionado + + if (grupoActualSeleccionado) { + x[grupoStr].seleccionado = false + } else { + for (const xKey in x) { + x[xKey].seleccionado = xKey === grupoStr + } + } + }), + ) }, - }); + }) } } } - return obj; -}; + return obj +} interface Props { data: Cursos, @@ -166,12 +191,12 @@ interface Props { } export function Tabla(props: Props) { - const anio = () => props.anio.substring(0, props.anio.indexOf(" ")); - const data = createMemo(() => procesarAnio(props.data, anio(), props.version, props.setCursosUsuarios)); + const anio = () => props.anio.substring(0, props.anio.indexOf(" ")) + const data = createMemo(() => procesarAnio(props.data, anio(), props.version, props.setCursosUsuarios)) const celdas = createMemo(() => { // Hace reaccionar a la reactividad de Solid - const d = data(); + const d = data() return ( {(hora) => ( @@ -182,8 +207,8 @@ export function Tabla(props: Props) { /> )} - ); - }); + ) + }) return (
@@ -198,5 +223,5 @@ export function Tabla(props: Props) {
{celdas()}
- ); + ) } diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/Tabla/CeldaFila.tsx b/src/ContenedorHorarios/Tabla/CeldaFila.tsx similarity index 63% rename from src/Views/pc/Sistemas/ContenedorHorarios/Tabla/CeldaFila.tsx rename to src/ContenedorHorarios/Tabla/CeldaFila.tsx index 1a9ad95..4c2d72d 100755 --- a/src/Views/pc/Sistemas/ContenedorHorarios/Tabla/CeldaFila.tsx +++ b/src/ContenedorHorarios/Tabla/CeldaFila.tsx @@ -1,9 +1,9 @@ -import { StyleSheet, css } from "aphrodite"; -import { estilosGlobales } from "../../../../../Estilos"; -import { For, createSignal, createMemo, createEffect, onCleanup } from "solid-js"; -import { Dia } from "../../../../../Store"; -import { DatosGrupo } from "../../../../../types/DatosHorario"; -import {TablaObserver} from "../TablaObserver"; +import { StyleSheet, css } from "aphrodite" +import { estilosGlobales } from "../../Estilos" +import { For, createSignal, createMemo, createEffect, onCleanup } from "solid-js" +import { Dia } from "../../Store" +import { DatosGrupo } from "../../types/DatosHorario" +import { TablaObserver } from "../TablaObserver" const e = StyleSheet.create({ celdaComun: { @@ -42,7 +42,7 @@ const e = StyleSheet.create({ celdaResaltadoSeleccionado: { textDecoration: "underline", }, -}); +}) const eColores = StyleSheet.create({ lunes: { @@ -62,7 +62,7 @@ const eColores = StyleSheet.create({ viernes: { backgroundColor: "rgba(244,67,54,1)", }, -}); +}) const clasesColores = { Lunes: css(eColores.lunes), @@ -70,7 +70,7 @@ const clasesColores = { Miercoles: css(eColores.miercoles), Jueves: css(eColores.jueves), Viernes: css(eColores.viernes), -}; +} interface DatosProps { id: string, @@ -97,110 +97,108 @@ interface Props { tablaObserver: TablaObserver, } -const claseSeldaSeleccionada = css(e.celdaSeleccionado); +const claseSeldaSeleccionada = css(e.celdaSeleccionado) function RenderFila(datos: DatosProps, props: Props) { - const id = datos.id; - const txt = datos.txt; - const esLab = datos.esLab; - const fnSeleccionar = datos.fnSeleccionar; + const id = datos.id + const txt = datos.txt + const esLab = datos.esLab + const fnSeleccionar = datos.fnSeleccionar - const estadoCeldaMemo = props.tablaObserver.registrarConId(id, datos.datosGrupo); + const estadoCeldaMemo = props.tablaObserver.registrarConId(id, datos.datosGrupo) - const [estabaResaltado, setEstabaResaltado] = createSignal(false); + const [estabaResaltado, setEstabaResaltado] = createSignal(false) // Limpiar los memos, porque cuando se desmonta la celda esos memos quedan sin efecto onCleanup(() => { - props.tablaObserver.limpiar(id); - }); + props.tablaObserver.limpiar(id) + }) const clases = createMemo( () => { const clases = [ e.celdaCurso, esLab ? e.celdaCursoLab : e.celdaCursoTeoria, - ]; - let adicional = ""; + ] + let adicional = "" - const estadoCelda = estadoCeldaMemo(); + const estadoCelda = estadoCeldaMemo() switch (estadoCelda) { case "Normal": { if (estabaResaltado()) { - props.fnDesresaltarFila(); - setEstabaResaltado(false); + props.fnDesresaltarFila() + setEstabaResaltado(false) } - break; + break } case "Oculto": { if (estabaResaltado()) { - props.fnDesresaltarFila(); - setEstabaResaltado(false); + props.fnDesresaltarFila() + setEstabaResaltado(false) } - clases.push(e.celdaOculto); - break; + clases.push(e.celdaOculto) + break } case "Resaltado": { - props.fnResaltarFila(); - setEstabaResaltado(true); - clases.push(e.celdaResaltado); - adicional = clasesColores[props.dia]; - break; + props.fnResaltarFila() + setEstabaResaltado(true) + clases.push(e.celdaResaltado) + adicional = clasesColores[props.dia] + break } case "Seleccionado": { if (estabaResaltado()) { - props.fnDesresaltarFila(); - setEstabaResaltado(false); + props.fnDesresaltarFila() + setEstabaResaltado(false) } - clases.push(e.celdaSeleccionado); - break; + clases.push(e.celdaSeleccionado) + break } case "ResaltadoOculto": { - props.fnResaltarFila(); - setEstabaResaltado(true); + props.fnResaltarFila() + setEstabaResaltado(true) - clases.push(e.celdaResaltadoOculto); - adicional = clasesColores[props.dia]; - break; + clases.push(e.celdaResaltadoOculto) + adicional = clasesColores[props.dia] + break } case "ResaltadoSeleccionado": { - props.fnResaltarFila(); - setEstabaResaltado(true); + props.fnResaltarFila() + setEstabaResaltado(true) - clases.push(e.celdaResaltadoSeleccionado); - adicional = clasesColores[props.dia]; - break; + clases.push(e.celdaResaltadoSeleccionado) + adicional = clasesColores[props.dia] + break } } - return `${css(...clases)} ${adicional}`; + return `${css(...clases)} ${adicional}` }, undefined, - { - equals: (x, y) => x === y, - }, - ); + (x, y) => x === y, + ) return ( - ); + ) } export function CeldaFila(props: Props) { - const datos = props.datos; + const datos = props.datos return (
@@ -208,5 +206,5 @@ export function CeldaFila(props: Props) { {(datos) => RenderFila(datos, props)}
- ); + ) } diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/Tabla/FilaTabla.tsx b/src/ContenedorHorarios/Tabla/FilaTabla.tsx similarity index 79% rename from src/Views/pc/Sistemas/ContenedorHorarios/Tabla/FilaTabla.tsx rename to src/ContenedorHorarios/Tabla/FilaTabla.tsx index 7da16ae..0b9994c 100755 --- a/src/Views/pc/Sistemas/ContenedorHorarios/Tabla/FilaTabla.tsx +++ b/src/ContenedorHorarios/Tabla/FilaTabla.tsx @@ -1,12 +1,12 @@ -import { StyleSheet, css } from "aphrodite"; -import { estilosGlobales } from "../../../../../Estilos"; -import { For, createMemo } from "solid-js"; -import {createStore, Store} from "solid-js/store"; -import { Dia, dias } from "../../../../../Store"; -import { CeldaFila } from "./CeldaFila"; -import { DataProcesada } from "../../../../../types/DatosHorario"; -import { coloresBorde, diaANum } from "../Tabla"; -import { TablaObserver } from "../TablaObserver"; +import { StyleSheet, css } from "aphrodite" +import { estilosGlobales } from "../../Estilos" +import { For, createMemo } from "solid-js" +import {createStore, Store} from "solid-js/store" +import { Dia, dias } from "../../Store" +import { CeldaFila } from "./CeldaFila" +import { DataProcesada } from "../../types/DatosHorario" +import { coloresBorde, diaANum } from "../Tabla" +import { TablaObserver } from "../TablaObserver" const e = StyleSheet.create({ celdaHora: { @@ -50,7 +50,7 @@ const e = StyleSheet.create({ celdaResaltadoTransparente: { backgroundColor: "transparent", }, -}); +}) const [diasResaltados, setDiasResaltados] = createStore({ Lunes: 0, @@ -58,7 +58,7 @@ const [diasResaltados, setDiasResaltados] = createStore({ Miercoles: 0, Jueves: 0, Viernes: 0, -} as { [k: string]: number }); +} as { [k: string]: number }) interface Props { hora: string, @@ -69,7 +69,7 @@ interface Props { const diasFilter = createMemo(() => Object.entries(diasResaltados) .filter((x) => x[1] > 0) .map((x) => x[0] as Dia) - .sort((x, y) => (diaANum(x) > diaANum(y) ? 1 : -1))); + .sort((x, y) => (diaANum(x) > diaANum(y) ? 1 : -1))) const useDiasResaltados: () => [ Store<{ [k: string]: boolean }>, @@ -82,26 +82,26 @@ const useDiasResaltados: () => [ Miercoles: false, Jueves: false, Viernes: false, - } as { [k: string]: boolean }); + } as { [k: string]: boolean }) const fnResaltar = (d: Dia) => { - setDiasResaltadosLocal(d, true); - setDiasResaltados(d, (v) => v + 1); - }; + setDiasResaltadosLocal(d, true) + setDiasResaltados(d, (v) => v + 1) + } const fnDesresaltar = (d: Dia) => { - setDiasResaltadosLocal(d, false); - setDiasResaltados(d, (v) => v - 1); - }; + setDiasResaltadosLocal(d, false) + setDiasResaltados(d, (v) => v - 1) + } - return [diasResaltadosLocal, fnResaltar, fnDesresaltar]; -}; + return [diasResaltadosLocal, fnResaltar, fnDesresaltar] +} export function FilaTabla(props: Props) { - const [diasResaltadosLocal, fnResaltar, fnDesresaltar] = useDiasResaltados(); + const [diasResaltadosLocal, fnResaltar, fnDesresaltar] = useDiasResaltados() - const hora = props.hora; - const data = props.data; + const hora = props.hora + const data = props.data return (
@@ -133,10 +133,10 @@ export function FilaTabla(props: Props) {
{(dia) => { - const diaStr = dia.substring(0, 2); - const horaStr = hora.substring(0, 5); + const diaStr = dia.substring(0, 2) + const horaStr = hora.substring(0, 5) - const datos = data?.[horaStr]?.[diaStr] ?? []; + const datos = data?.[horaStr]?.[diaStr] ?? [] return ( - ); + ) }}
- ); + ) } diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/TablaObserver.ts b/src/ContenedorHorarios/TablaObserver.ts similarity index 70% rename from src/Views/pc/Sistemas/ContenedorHorarios/TablaObserver.ts rename to src/ContenedorHorarios/TablaObserver.ts index 9b5274c..4dd9a31 100644 --- a/src/Views/pc/Sistemas/ContenedorHorarios/TablaObserver.ts +++ b/src/ContenedorHorarios/TablaObserver.ts @@ -1,7 +1,6 @@ -import { createMemo, createEffect, untrack } from "solid-js"; -import {createStore, SetStoreFunction, Store, produce} from "solid-js/store"; -import { DatosGrupo } from "../../../../types/DatosHorario"; -import { gruposSeleccionados } from "../../../../Store"; +import { createMemo, createEffect, untrack } from "solid-js" +import {createStore, SetStoreFunction, Store, produce} from "solid-js/store" +import { DatosGrupo } from "../types/DatosHorario" const createMemoDefault = (f: () => T) => createMemo( f, @@ -9,7 +8,7 @@ const createMemoDefault = (f: () => T) => createMemo( { equals: (x, y) => x === y, }, -); +) /** * - Normal @@ -63,18 +62,17 @@ export class TablaObserver { curso: undefined, esLab: undefined, grupo: undefined, - }); - this.resaltado = resaltado; - this.setResaltado = setResaltado; + }) + this.resaltado = resaltado + this.setResaltado = setResaltado - const [seleccionado, setSeleccionado] = createStore({}); - this.seleccionado = seleccionado; - this.setSeleccionado = setSeleccionado; + const [seleccionado, setSeleccionado] = createStore({}) + this.seleccionado = seleccionado + this.setSeleccionado = setSeleccionado } /** * Crea un memo que indica el estado de la celda - * @param id_laboratorio Id del laboratorio * @param anio El año * @param curso Curso abreviado * @param esLab Si es laboratorio @@ -82,82 +80,89 @@ export class TablaObserver { * @param datosGrupo Contiene `seleccionado`, se usa ese valor reactivo */ private registrar( - id_laboratorio: number, anio: string, curso: string, esLab: boolean, grupo: string, datosGrupo: DatosGrupo, ): () => EstadoCelda { - const resaltado = this.resaltado; + const resaltado = this.resaltado const resaltadoMemo = createMemoDefault(() => { if (resaltado.anio === anio && resaltado.curso === curso) { if (resaltado.esLab === undefined) { - return true; + return true } else if (resaltado.esLab !== esLab) { - return false; + return false } else { if (resaltado.grupo === undefined) { - return true; - } else return resaltado.grupo === grupo; + return true + } else return resaltado.grupo === grupo } } else { - return false; + return false } - }); + }) // Registrar curso en `seleccionado` this.setSeleccionado((obj: Store) => { - const nuevoObj = {...obj}; + const nuevoObj = {...obj} if (!nuevoObj[anio]) { - nuevoObj[anio] = {}; + nuevoObj[anio] = {} } if (!nuevoObj[anio][curso]) { nuevoObj[anio][curso] = { Laboratorio: [], Teoria: [], - }; + } } - return nuevoObj; - }); + return nuevoObj + }) // Crear un effect para que cada vez que la celda se seleccione se actualize `seleccionado` createEffect(() => { - const seleccionado = datosGrupo.seleccionado; + const seleccionado = datosGrupo.seleccionado if (seleccionado) { - this.setSeleccionado(anio, curso, esLab ? "Laboratorio" : "Teoria", (x) => [...x, grupo]); + this.setSeleccionado(anio, curso, esLab ? "Laboratorio" : "Teoria", (x) => [...x, grupo]) } else { - this.setSeleccionado(anio, curso, esLab ? "Laboratorio" : "Teoria", (x) => x.filter((x) => x !== grupo)); + this.setSeleccionado(anio, curso, esLab ? "Laboratorio" : "Teoria", (x) => x.filter((x) => x !== grupo)) } - }); + }) - const seleccionadoMemo = createMemoDefault(() => ((gruposSeleccionados[id_laboratorio]) ? "Seleccionado" : "Normal")); + const seleccionadoMemo = createMemoDefault(() => { + const gruposSeleccionados = this.seleccionado[anio][curso][esLab ? "Laboratorio" : "Teoria"] + + if (gruposSeleccionados.length > 0) { + return gruposSeleccionados.find((x) => x === grupo) ? "Seleccionado" : "Oculto" + } else { + return "Normal" + } + }) return createMemoDefault((): EstadoCelda => { - const resaltado = resaltadoMemo(); - const seleccionado = seleccionadoMemo(); + const resaltado = resaltadoMemo() + const seleccionado = seleccionadoMemo() switch (seleccionado) { case "Normal": { - return resaltado ? "Resaltado" : "Normal"; + return resaltado ? "Resaltado" : "Normal" } case "Oculto": { - return resaltado ? "ResaltadoOculto" : "Oculto"; + return resaltado ? "ResaltadoOculto" : "Oculto" } case "Seleccionado": { - return resaltado ? "ResaltadoSeleccionado" : "Seleccionado"; + return resaltado ? "ResaltadoSeleccionado" : "Seleccionado" } default: { - let _: never; + let _: never // eslint-disable-next-line prefer-const - _ = seleccionado; - return _; + _ = seleccionado + return _ } } - }); + }) } /** @@ -167,13 +172,13 @@ export class TablaObserver { */ registrarConId(id: string, datosGrupo: DatosGrupo): () => EstadoCelda { if (this.memos[id]) { - return this.memos[id]; + return this.memos[id] } - const [, anio, curso, lab, grupo] = id.split("_"); - const memo = this.registrar(datosGrupo.id_laboratorio, anio, curso, lab === "L", grupo, datosGrupo); - this.memos[id] = memo; - return memo; + const [, anio, curso, lab, grupo] = id.split("_") + const memo = this.registrar(anio, curso, lab === "L", grupo, datosGrupo) + this.memos[id] = memo + return memo } /** @@ -181,24 +186,24 @@ export class TablaObserver { * @param id Id a resaltar - YYYYMMDD_Año_Curso[\_Lab[_Grupo]] */ resaltar(id: string) { - const [, anio, curso, lab, grupo] = id.split("_"); + const [, anio, curso, lab, grupo] = id.split("_") if (anio === undefined || curso === undefined) { - console.error("Error al intentar resaltar celda: anio o curso son undefined:", anio, curso); - return; + console.error("Error al intentar resaltar celda: anio o curso son undefined:", anio, curso) + return } - let esLab: boolean | undefined; + let esLab: boolean | undefined if (lab === undefined) { - esLab = undefined; + esLab = undefined } else { - esLab = lab === "L"; + esLab = lab === "L" } this.setResaltado({ anio, curso, esLab, grupo, - }); + }) } quitarResaltado() { @@ -207,10 +212,10 @@ export class TablaObserver { curso: undefined, esLab: undefined, grupo: undefined, - }); + }) } limpiar(id: string) { - delete this.memos[id]; + delete this.memos[id] } } diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/useListaCursos.ts b/src/ContenedorHorarios/useListaCursos.ts similarity index 50% rename from src/Views/pc/Sistemas/ContenedorHorarios/useListaCursos.ts rename to src/ContenedorHorarios/useListaCursos.ts index f14032f..396b917 100644 --- a/src/Views/pc/Sistemas/ContenedorHorarios/useListaCursos.ts +++ b/src/ContenedorHorarios/useListaCursos.ts @@ -1,5 +1,5 @@ -import {createStore, SetStoreFunction, Store} from "solid-js/store"; -import { Curso, ListaCursosUsuario } from "../../../../types/DatosHorario"; +import {createStore, SetStoreFunction, Store} from "solid-js/store" +import { Curso, ListaCursosUsuario } from "../types/DatosHorario" interface ReturnType { listaCursos: Store, @@ -9,27 +9,33 @@ interface ReturnType { } export const useListaCursos = (): ReturnType => { - const [listaCursos, setListaCursos] = createStore({}); + const [listaCursos, setListaCursos] = createStore({ + sigIndice: 0, + cursos: [], + }) const agregarCursoALista = (curso: Curso): Curso => { // Si el horario ya se habia agregado, ocultarlo - if (listaCursos[curso.nombre]) { - setListaCursos(curso.nombre, "oculto", (x) => !x); - return listaCursos[curso.nombre]; + const cursoActualIndex = listaCursos.cursos.findIndex((x) => x.nombre === curso.nombre) + if (cursoActualIndex !== -1) { + setListaCursos("cursos", cursoActualIndex, "oculto", (x) => !x) + return listaCursos.cursos[cursoActualIndex] } else { - setListaCursos(curso.nombre, curso); - return listaCursos[curso.nombre]; + setListaCursos("cursos", listaCursos.sigIndice, curso) + setListaCursos("sigIndice", (x) => x + 1) + return listaCursos.cursos[listaCursos.sigIndice - 1] } - }; + } const eliminarCursosDeLista = () => { - setListaCursos({}); - }; + setListaCursos("cursos", []) + setListaCursos("sigIndice", 0) + } return { listaCursos, setListaCursos, agregarCursoALista, eliminarCursosDeLista, - }; -}; + } +} diff --git a/src/Estilos.ts b/src/Estilos.ts index 40a2b76..1cd622a 100755 --- a/src/Estilos.ts +++ b/src/Estilos.ts @@ -1,4 +1,4 @@ -import { StyleSheet } from "aphrodite"; +import { StyleSheet } from "aphrodite" export const estilosGlobales = StyleSheet.create({ contenedor: { @@ -58,4 +58,4 @@ export const estilosGlobales = StyleSheet.create({ padding: "0.25rem 0.35rem", borderRadius: "5px", }, -}); +}) diff --git a/src/Router.tsx b/src/Router.tsx index 3be99d5..7e23553 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -1,31 +1,31 @@ -import { createSignal, JSX } from "solid-js"; +import { createSignal, JSX } from "solid-js" export const useRouter = (): () => string => { - let rutaPrevia = window.location.hash; + let rutaPrevia = window.location.hash if (rutaPrevia === "") { - window.history.pushState({}, "Horarios UNSA", "#/"); - rutaPrevia = "/"; + window.history.pushState({}, "Horarios UNSA", "#/") + rutaPrevia = "/" } else { - rutaPrevia = rutaPrevia.substr(1); + rutaPrevia = rutaPrevia.substr(1) } - const [rutaActual, setRutaActual] = createSignal(rutaPrevia); + const [rutaActual, setRutaActual] = createSignal(rutaPrevia) const fnEffect = () => { - const nuevaRuta = window.location.hash.substr(1); - setRutaActual(nuevaRuta); - }; + const nuevaRuta = window.location.hash.substr(1) + setRutaActual(nuevaRuta) + } - window.addEventListener("hashchange", fnEffect); + window.addEventListener("hashchange", fnEffect) - return rutaActual; -}; + return rutaActual +} export function RouterLink(props: { to: string, className?: string, children: JSX.Element }) { return ( {props.children} - ); + ) } diff --git a/src/Store.ts b/src/Store.ts index 8ecfec5..38eb32f 100755 --- a/src/Store.ts +++ b/src/Store.ts @@ -1,5 +1,4 @@ import { createSignal } from "solid-js"; -import { createStore } from "solid-js/store"; export type Dia = "Lunes" | "Martes" | "Miercoles" | "Jueves" | "Viernes"; @@ -29,7 +28,6 @@ export const horasDescanso = [ "15:40 - 15:50", "17:30 - 17:40", ]; -export const SERVER_PATH = "https://matriculas.fly.dev/sistema"; const numImgGuardado = Number(localStorage.getItem("num-img") ?? "0"); const tamanoLetraGuardado = Number(/* localStorage.getItem("tamano-letra") ?? */ "16"); @@ -37,5 +35,3 @@ const tamanoLetraGuardado = Number(/* localStorage.getItem("tamano-letra") ?? */ export const [numWallpaper, setNumWallpaper] = createSignal(numImgGuardado); export const [tamanoLetra, setTamanoLetra] = createSignal(tamanoLetraGuardado); export const [isMobile, setIsMobile] = createSignal(screen.width < 500); - -export const [gruposSeleccionados, setGruposSeleccionados] = createStore<{[k: number]: boolean}>({}); diff --git a/src/Views/Editor.tsx b/src/Views/Editor.tsx index e69ea08..ed7bd76 100644 --- a/src/Views/Editor.tsx +++ b/src/Views/Editor.tsx @@ -2,8 +2,8 @@ import { BarraSuperior } from "../BarraSuperior"; import { estilosGlobales } from "../Estilos"; import { StyleSheet, css } from "aphrodite"; import { Separador } from "../Separador"; -import { Tabla } from "./pc/Sistemas/ContenedorHorarios/Tabla"; -import { TablaObserver } from "./pc/Sistemas/ContenedorHorarios/TablaObserver"; +import { Tabla } from "../ContenedorHorarios/Tabla"; +import { TablaObserver } from "../ContenedorHorarios/TablaObserver"; import { Curso, Cursos } from "../types/DatosHorario"; import { For, createMemo } from "solid-js"; import {createStore} from "solid-js/store"; diff --git a/src/Views/Index.tsx b/src/Views/Index.tsx index f5ea7ee..2d89bca 100644 --- a/src/Views/Index.tsx +++ b/src/Views/Index.tsx @@ -1,10 +1,8 @@ import { estilosGlobales } from "../Estilos"; import { StyleSheet, css } from "aphrodite/no-important"; import { RouterLink } from "../Router"; -import { batch, createSignal, Show } from "solid-js"; -import { isMobile, setGruposSeleccionados } from "../Store"; -import { MobileIndex } from "./MobileIndex"; -import { loginFn } from "../API/Login"; +import { Show } from "solid-js"; +import { isMobile } from "../Store"; const e = StyleSheet.create({ contenedorGlobal: { @@ -31,51 +29,55 @@ const e = StyleSheet.create({ verticalAlign: "bottom", marginRight: "0.5rem", }, - inputCorreo: { - width: "100%", - backgroundColor: "rgba(159,159,159,0.44)", - border: "none", - borderBottom: "solid 2px var(--color-texto)", - padding: "0.5rem 1rem", - boxSizing: "border-box", - marginTop: "1rem", - borderRadius: "5px", - }, }); +function MobileIndex() { + const s = StyleSheet.create({ + boton: { + backgroundColor: "var(--color-primario)", + color: "white", + padding: "1rem 5rem", + borderRadius: "25px", + margin: "1.5rem 0", + boxShadow: "2px 2px 2px 0 gray", + cursor: "pointer", + }, + entrada: { + borderTop: "none", + borderRight: "none", + borderLeft: "none", + borderBottom: "solid 2px gray", + padding: "0.75rem 1rem", + }, + }); -export function Index() { - const [msgErrorVisible, setMsgErrorVisible] = createSignal(false); - const inputElement = ; + const inputElement = ; - const login = async(ev: Event) => { - ev.preventDefault(); - const email = (inputElement as HTMLInputElement).value; - const response = await loginFn({correo_usuario: email}); - - if (response === null) { - setMsgErrorVisible(true); - setTimeout(() => setMsgErrorVisible(false), 2500); - } else if (!response.matriculas || response.matriculas.length === 0) { - localStorage.setItem("correo", email); - window.location.href = "#/pc/seleccion-cursos/"; - } else if (response.matriculas.length > 0) { - localStorage.setItem("correo", email); - batch(() => { - for (const id_lab of response.matriculas) { - setGruposSeleccionados(id_lab, true); - } - }); - window.location.href = "#/pc/ver-matricula/"; - } + const login = () => { + console.log((inputElement as HTMLInputElement).value); }; + return ( +
+
+

Iniciar sesión

+
+
+ {inputElement} +
+ +
+
+ ); +} + +export function Index() { return ( <> -
-
-
+
+
+

Horarios UNSA

-

- Inicia sesión con tu correo institucional. -
- {inputElement} +

+ Esta página te permite crear tu horario fácilmente, sin importar de que + año son los cursos. +

+

+ Por ahora solo está disponible para ing. de sistemas. Proximamente se habilitarán + otras carreras. +

+

+ Se recomienda usar un computador/laptop y un navegador actualizado (Firefox, Chrome, + Qutebrowser).

- - El correo es invalido -
- -
-
+ + Ing. de Sistemas + + {/* + + */} + + + Editor + - + Código fuente en GitHub
diff --git a/src/Views/Main.tsx b/src/Views/Main.tsx new file mode 100644 index 0000000..2cce948 --- /dev/null +++ b/src/Views/Main.tsx @@ -0,0 +1,49 @@ +import { BarraSuperior } from "../BarraSuperior" +import { ContenedorHorarios } from "../ContenedorHorarios/ContenedorHorarios" +import { Show, createSignal } from "solid-js" +import { css } from "aphrodite" +import { estilosGlobales } from "../Estilos" +import { Creditos } from "../Creditos" +import { Separador } from "../Separador" + +export function Main() { + /// @ts-ignore + const soportaBackdropFilter = document.body.style.backdropFilter !== undefined + const mostrarMensajeBackdropFilterRaw = !localStorage.getItem("mensaje-backdrop-filter-oculto") + + const [mostrarMensajeBackdropFilter, setMostrarMensaje] = createSignal(mostrarMensajeBackdropFilterRaw) + + const ocultarMensajeBackdropFilter = () => { + setMostrarMensaje(false) + localStorage.setItem("mensaje-backdrop-filter-oculto", "true") + } + + return ( +
+ + +
+ Tu navegador no soporta "backdrop-filter". Este es solo un efecto + visual, no afecta la funcionalidad de la página.  + + No volver a mostrar. + +
+
+ {/* +
+ Solo teoria por ahora. Actualizado el 2021/03/28. Fuente:  + + Página de Facebook de la escuela. + +
+ */} + + + +
+ ) +} diff --git a/src/Views/MobileIndex.tsx b/src/Views/MobileIndex.tsx deleted file mode 100644 index 610f7be..0000000 --- a/src/Views/MobileIndex.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { css, StyleSheet } from "aphrodite/no-important"; -import { batch, createSignal } from "solid-js"; -import { SERVER_PATH, setGruposSeleccionados } from "../Store"; -import { loginFn } from "../API/Login"; - -const e = StyleSheet.create({ - contenedorGlobal: { - width: "100vw", - height: "100vh", - display: "flex", - alignItems: "center", - justifyContent: "center", - }, - cont: { - width: "30rem", - }, - parrafo: { - textAlign: "justify", - lineHeight: "1.4rem", - }, - botonAccion: { - width: "30rem", - display: "inline-block", - textAlign: "center", - }, - iconoGitHub: { - fontSize: "1.25rem", - verticalAlign: "bottom", - marginRight: "0.5rem", - }, -}); - -export function MobileIndex() { - const s = StyleSheet.create({ - boton: { - backgroundColor: "var(--color-primario)", - color: "white", - padding: "1rem 5rem", - borderRadius: "25px", - margin: "1.5rem 0", - boxShadow: "2px 2px 2px 0 gray", - cursor: "pointer", - }, - entrada: { - borderTop: "none", - borderRight: "none", - borderLeft: "none", - borderBottom: "solid 2px gray", - padding: "0.75rem 1rem", - }, - }); - const [msgErrorVisible, setMsgErrorVisible] = createSignal(false); - - const inputElement = ; - - const login = async(ev: Event) => { - ev.preventDefault(); - const email = (inputElement as HTMLInputElement).value; - const response = await loginFn({correo_usuario: email}); - - if (response === null) { - setMsgErrorVisible(true); - setTimeout(() => setMsgErrorVisible(false), 2500); - } else { - localStorage.setItem("correo", email); - window.location.href = "#/seleccion-cursos/"; - } - }; - - return ( -
-
-

Iniciar sesión

-
-
-
login(ev)}> - {inputElement} -
- -
- El correo es invalido -
-
- ); -} diff --git a/src/Views/SeleccionCursos.tsx b/src/Views/SeleccionCursos.tsx deleted file mode 100644 index 6e55fd3..0000000 --- a/src/Views/SeleccionCursos.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { TopBar } from "./SistemasMovil/TopBar"; -import { StyleSheet, css } from "aphrodite/no-important"; -import { Card } from "../components/Card"; -import { createSignal, For } from "solid-js"; -import { getAllListaCursos, RespuestaListaCursos } from "../API/ListaCursos"; -import { Button } from "../components/Button"; - -const s = StyleSheet.create({ - checkbox: { - width: "1.25rem", - height: "1.25rem", - margin: "0 0.5rem", - }, - grid: { - display: "grid", - gridTemplateColumns: "3rem auto", - gridRowGap: "1rem", - }, -}); - -export function SeleccionCursos() { - const [cursos, setCursos] = createSignal({}); - const [msjErr, setMsjError] = createSignal(false); - - // Recuperar cursos de back - (async() => setCursos(await getAllListaCursos()))(); - - const submit = (ev: Event) => { - ev.preventDefault(); - const form = ev.target as HTMLFormElement; - // Los checkboxes - const elements = form.elements; - const idsAEnviar: Array = []; - for (let i = 0; i < elements.length; i += 1) { - const inputBox = elements[i] as HTMLInputElement; - if (inputBox.checked) { - idsAEnviar.push(inputBox.value); - } - } - - if (idsAEnviar.length === 0) { - setMsjError(true); - setTimeout(() => setMsjError(false), 2500); - return; - } - - // Almacenar en localStorage - localStorage.setItem("cursos-seleccionados", JSON.stringify(idsAEnviar)); - // Ir a sig pantalla - window.location.href = "#/sistemas-movil/"; - }; - - return ( -
- - - -

Escoge los cursos en los que matricularte

-
-
submit(ev)}> - - {([nombreAnio, infoCurso]) => ( - -

{nombreAnio} año

-
- - {(curso) => ( - <> - - {curso.nombre_curso} - - )} - -
-
- )} -
-
- Selecciona al menos 1 curso -
-
-
-
- ); -} - - diff --git a/src/Views/SistemasMovil.tsx b/src/Views/SistemasMovil.tsx deleted file mode 100644 index 8d47804..0000000 --- a/src/Views/SistemasMovil.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import { TopBar } from "./SistemasMovil/TopBar"; -import { GrupoDia, Table, TableInput } from "./SistemasMovil/Table"; -import { getHorarios, Horario, ListaCursosCompleto } from "../API/CargaHorarios"; -import { createSignal } from "solid-js"; -import { generarMapaCeldas } from "./SistemasMovil/mapaCeldas"; -import { Button } from "../components/Button"; -import { gruposSeleccionados, SERVER_PATH } from "../Store"; - -export function SistemasMovil() { - const [rawData, setRawData] = createSignal([]); - - // Obtener cursos seleccionados del servidor - (async() => { - const cursos: Array = JSON.parse(localStorage.getItem("cursos-seleccionados") ?? "[]"); - const data = await getHorarios({ - cursos: cursos.map((x) => parseInt(x, 10)), - }); - setRawData(data); - })(); - - const matricular = async() => { - const laboratoriosAMatricular = Object.entries(gruposSeleccionados) - .filter((x) => x[1] === true) - .map((x) => x[0]); - - const response = await fetch(`${SERVER_PATH}/matricula`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - correo_usuario: localStorage.getItem("correo"), - horarios: laboratoriosAMatricular, - }), - }); - if (response.ok) { - window.location.href = "#/ver-matricula/"; - } else { - alert("No se pudo procesar la matricula"); - } - }; - - return ( -
- - -
-
-
- - ); -} - - -function transformar(input: ListaCursosCompleto): TableInput { - const data: TableInput = { - lunes: [], - martes: [], - miercoles: [], - jueves: [], - viernes: [], - }; - - // Organizar por dias - for (const curso of input) { - for (const lab of curso.laboratorios) { - for (const horas of lab.horarios) { - const dia = horas.dia; - const [idx, nroHoras] = infoDiaAOffsets(horas.hora_inicio, horas.hora_fin); - const datos = { - id_horario: horas.id_horario, - id_laboratorio: lab.id_laboratorio, - abreviado: curso.abreviado, - grupo: lab.grupo, - offsetVertical: idx, - nroHoras: nroHoras, - offsetHorizontal: 0, - fraccion: 0, - }; - - if (dia === "Lunes") { - data.lunes.push(datos); - } else if (dia === "Martes") { - data.martes.push(datos); - } else if (dia === "Miercoles") { - data.miercoles.push(datos); - } else if (dia === "Jueves") { - data.jueves.push(datos); - } else if (dia === "Viernes") { - data.viernes.push(datos); - } - } - } - } - - // Procesar cada dia y devolver - return { - lunes: generarMapaCeldas(data.lunes), - martes: generarMapaCeldas(data.martes), - miercoles: generarMapaCeldas(data.miercoles), - jueves: generarMapaCeldas(data.jueves), - viernes: generarMapaCeldas(data.viernes), - }; -} - -const horasStr = ["0700","0750","0850","0940","1040","1130","1220","1310","1400", - "1450","1550","1640","1740","1830","1920","2010","2100","2150"]; - -const horas = [ - 700, - 750, - 850, - 940, - 1040, - 1130, - 1220, - 1310, - 1400, - 1450, - 1550, - 1640, - 1740, - 1830, - 1920, - 2010, - 2100, - 2150, -]; - -/** - * Convierte horas en texto a offsets - */ -// Ejm: 0700, 0850 -> 0, 2 -function infoDiaAOffsets(horaInicio: string, horaFinal: string): [number, number] { - const inicio = parseInt(horaInicio, 10); - const final = parseInt(horaFinal, 10); - - const idxInicio = horas.findIndex((x) => x === inicio); - let nroHoras = 0; - - for (let i = idxInicio; i < horas.length; i += 1) { - if (final > horas[i]) { - nroHoras += 1; - } else { - break; - } - } - - return [idxInicio, nroHoras]; -} - -// inicio: 1740 fin 2010 -> 1740,1830,1920 -export function infoDiaAListaHoras(horas: Array): Array { - const horasFin: Array = []; - - for (const grupoHoras of horas) { - const [idx, cantidad] = infoDiaAOffsets(grupoHoras.hora_inicio, grupoHoras.hora_fin); - const strDia = grupoHoras.dia.substring(0, 2); - - for (let i = 0; i < cantidad; i += 1) { - horasFin.push(`${strDia}${horasStr[idx + i]}`); - } - } - - return horasFin; -} diff --git a/src/Views/SistemasMovil/Grupo.tsx b/src/Views/SistemasMovil/Grupo.tsx deleted file mode 100644 index 06d1653..0000000 --- a/src/Views/SistemasMovil/Grupo.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { css, StyleSheet } from "aphrodite/no-important"; -import { GrupoDia } from "./Table"; -import { gruposSeleccionados, setGruposSeleccionados } from "../../Store"; - -const colores: Array<[string, string]> = [ - ["#FFEBEE", "#F44336"], - ["#F3E5F5", "#9C27B0"], - ["#E8EAF6", "#3F51B5"], - ["#E1F5FE", "#03A9F4"], - ["#E0F2F1", "#009688"], - ["#F1F8E9", "#689F38"], - ["#FFF9C4", "#FBC02D"], - ["#FBE9E7", "#F4511E"], - ["#EFEBE9", "#795548"], -]; - -export function Grupo(props: { data: GrupoDia }) { - const [colorDesactivado, colorActivado] = colores[props.data.id_laboratorio % 9]; - const ss = StyleSheet.create({ - button: { - display: "inline-block", - padding: "0.2rem 1rem", - textAlign: "left", - borderRadius: "10px", - border: `solid 2px ${colorActivado}`, - position: "absolute", - }, - }); - - const estiloFondo = () => { - if (gruposSeleccionados[props.data.id_laboratorio]) { - return `background-color: ${colorActivado}; color: white; font-weight: 600;`; - } else { - return `background-color: ${colorDesactivado};`; - } - }; - - const estilo = () => { - const fraccion = props.data.fraccion; - const offsetHorizontal = props.data.offsetHorizontal; - const offsetVertical = props.data.offsetVertical; - const nroHoras = props.data.nroHoras; - - return `left: calc((43vw / ${fraccion}) * ${offsetHorizontal}); top: ${offsetVertical * 3}rem;` + - `height: ${nroHoras * 3}rem; width: calc(100% / ${fraccion});`; - }; - - const handleClick = () => { - setGruposSeleccionados(props.data.id_laboratorio, (x) => !x); - }; - - return ( - - ); -} diff --git a/src/Views/SistemasMovil/Table.tsx b/src/Views/SistemasMovil/Table.tsx deleted file mode 100644 index df01b0b..0000000 --- a/src/Views/SistemasMovil/Table.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { StyleSheet, css } from "aphrodite/no-important"; -import { createSignal, For } from "solid-js"; -import { Swiper, SwiperSlide } from "swiper/solid"; -import { horas } from "../../Store"; - -import "swiper/css"; -import { Grupo } from "./Grupo"; - -const s = StyleSheet.create({ - container: { - display: "grid", - gridTemplateColumns: "13vw 1fr", - textAlign: "center", - fontSize: "0.9rem", - }, - tableIndex: { - backgroundColor: "rgb(108,67,75)", - color: "white", - padding: "0.5rem 0.25rem", - textAlign: "center", - width: "42vw", - }, - columna: { - borderRight: "solid 2px var(--color-borde)", - }, - celdaHora: { - position: "relative", - top: "-0.75rem", - height: "3rem", - }, -}); - -export type GrupoDia = { - id_horario: number, - id_laboratorio: number, - abreviado: string, - grupo: string, - offsetVertical: number, // 07:00 -> 0, 07:50 -> 1 - nroHoras: number, - offsetHorizontal: number, // 0, 1, 2 - fraccion: number, // por cuanto dividir la celda. 1, 2, 3, ... -} - -function Dia(props: { dia: string, grupos: Array }) { - const ss = StyleSheet.create({ - contenedorDia: { - position: "relative", - width: "42vw", - }, - }); - return ( -
-
{props.dia}
-
- - {(grupo) => ( - - )} - -
-
- ); -} - -export type TableInput = { - lunes: Array, - martes: Array, - miercoles: Array, - jueves: Array, - viernes: Array, -} - -export function Table(props: { datos: TableInput }) { - const lunes = ; - const martes = ; - const miercoles = ; - const jueves = ; - const viernes = ; - - return ( -
-
-
 
- - {(hora) =>
{hora.substring(0, 5)}
} -
-
- - {lunes} - {martes} - {miercoles} - {jueves} - {viernes} - -
- ); -} diff --git a/src/Views/SistemasMovil/TopBar.tsx b/src/Views/SistemasMovil/TopBar.tsx deleted file mode 100644 index 1a2c365..0000000 --- a/src/Views/SistemasMovil/TopBar.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { StyleSheet, css } from "aphrodite/no-important"; - -const s = StyleSheet.create({ - bar: { - backgroundColor: "var(--color-primario)", - color: "white", - height: "3.5rem", - display: "flex", - alignItems: "center", - position: "sticky", - top: 0, - zIndex: 100, - }, - icon: { - display: "inline-block", - color: "white", - fontSize: "1.5rem", - verticalAlign: "bottom", - cursor: "pointer", - height: "1.5rem", - padding: "0 0.5rem", - }, - barLabel: { - color: "white", - padding: "0 1rem", - fontWeight: 500, - fontSize: "1.25rem", - }, -}); - -export function TopBar(props: {tituloBarra: string}) { - return ( - - ); -} diff --git a/src/Views/SistemasMovil/mapaCeldas.ts b/src/Views/SistemasMovil/mapaCeldas.ts deleted file mode 100644 index 12153ff..0000000 --- a/src/Views/SistemasMovil/mapaCeldas.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { GrupoDia } from "./Table"; - -export class MapaCeldas { - // Almacena referencias a input - private mapa: Map> = new Map(); - - private disponible(nroFila: number, nroColumna: number): boolean { - if (!this.mapa.has(nroFila)) return true; - - const fila = this.mapa.get(nroFila)!; - - return fila.has(nroColumna) === false; - } - - private obtenerFilaOCrear(nro: number): Map { - if (!this.mapa.has(nro)) { - const m = new Map(); - this.mapa.set(nro, m); - return m; - } - - return this.mapa.get(nro)!; - } - - // Devuelve el offset - public solicitar(inicio: number, cantidad: number): number { - const filas = []; - for (let i = 0; i < cantidad; i += 1) filas.push(inicio + i); - - for (let offsetActual = 0; offsetActual < 8; offsetActual += 1) { - let todasCeldasDisponibles = true; - for (const fila of filas) { - if (!this.disponible(fila, offsetActual)) { - todasCeldasDisponibles = false; - break; - } - } - - if (todasCeldasDisponibles) { - // Crear estas celdas y almacenar - filas.forEach((nroFila) => { - const fila = this.obtenerFilaOCrear(nroFila); - fila.set(offsetActual, null); - }); - - // Devolver nro de offset - return offsetActual; - } - } - - throw new Error("Limite de celdas alcanzado"); - } - - public generarFraccion(nroFila: number, nroColumna: number, cantidad: number): number { - let fraccionActual = 1; - for (let i = 0; i < cantidad; i += 1) { - const nroFilaActual = nroFila + i; - const filaActual = this.mapa.get(nroFilaActual)!; - const numeroColumnas = filaActual.size; - if (numeroColumnas > fraccionActual) { - fraccionActual = numeroColumnas; - } - } - - return fraccionActual; - } -} - -export function generarMapaCeldas(entrada: Readonly>): Array { - const mapa = new MapaCeldas(); - const salida: Array = []; - - // Obtener los offsets de cada curso - for (const input of entrada) { - const offset = mapa.solicitar(input.offsetVertical, input.nroHoras); - salida.push({ - ...input, - offsetHorizontal: offset, - fraccion: -1, - }); - } - - // Generar las fracciones de cada curso - for (const output of salida) { - output.fraccion = mapa.generarFraccion(output.offsetVertical, output.offsetHorizontal, output.nroHoras); - } - - return salida; -} diff --git a/src/Views/VerMatricula.tsx b/src/Views/VerMatricula.tsx deleted file mode 100644 index d3cf54d..0000000 --- a/src/Views/VerMatricula.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { TopBar } from "./SistemasMovil/TopBar"; -import { Card } from "../components/Card"; -import { createSignal, For } from "solid-js"; -import { getMatricula, InfoMatricula } from "../API/VerMatricula"; -import { gruposSeleccionados } from "../Store"; - -export function VerMatricula() { - const [infoMatriculas, setInfoMatriculas] = createSignal>([]); - - (async() => { - const laboratorios = Object.entries(gruposSeleccionados) - .filter((x) => x[1] === true) - .map((x) => parseInt(x[0], 10)); - setInfoMatriculas(await getMatricula({matriculas: laboratorios})); - })(); - - return ( -
- - -

Tu matrícula

- - {(matricula) => ( -
-

{matricula.nombre_curso}

-

Grupo: {matricula.grupo}

-

Docente: {matricula.docente}

-
- )} -
-
-
- ); -} diff --git a/src/Views/pc/SeleccionCursos.tsx b/src/Views/pc/SeleccionCursos.tsx deleted file mode 100644 index 20f1cf9..0000000 --- a/src/Views/pc/SeleccionCursos.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import { css, StyleSheet } from "aphrodite/no-important"; -import { estilosGlobales } from "../../Estilos"; -import { createSignal, For } from "solid-js"; -import { getAllListaCursos, RespuestaListaCursos } from "../../API/ListaCursos"; - -const e = StyleSheet.create({ - contenedorGlobal: { - width: "100vw", - height: "100vh", - display: "flex", - alignItems: "center", - justifyContent: "center", - }, - cont: { - width: "30rem", - }, - parrafo: { - textAlign: "justify", - lineHeight: "1.4rem", - }, - botonAccion: { - width: "30rem", - display: "inline-block", - textAlign: "center", - }, - iconoGitHub: { - fontSize: "1.25rem", - verticalAlign: "bottom", - marginRight: "0.5rem", - }, - inputCorreo: { - width: "100%", - backgroundColor: "rgba(159,159,159,0.44)", - border: "none", - borderBottom: "solid 2px var(--color-texto)", - padding: "0.5rem 1rem", - boxSizing: "border-box", - marginTop: "1rem", - borderRadius: "5px", - }, - checkbox: { - width: "1.25rem", - height: "1.25rem", - margin: "0 0.5rem", - }, - grid: { - display: "grid", - gridTemplateColumns: "3rem auto", - gridRowGap: "1rem", - }, -}); - -export function SeleccionCursos() { - const [cursos, setCursos] = createSignal({}); - const [msgErr, setMsgError] = createSignal(false); - - // Recuperar cursos de back - (async() => setCursos(await getAllListaCursos()))(); - - const submit = (ev: Event) => { - ev.preventDefault(); - const form = ev.target as HTMLFormElement; - // Los checkboxes - const elements = form.elements; - const idsAEnviar: Array = []; - for (let i = 0; i < elements.length; i += 1) { - const inputBox = elements[i] as HTMLInputElement; - if (inputBox.checked) { - idsAEnviar.push(inputBox.value); - } - } - - if (idsAEnviar.length === 0) { - setMsgError(true); - setTimeout(() => setMsgError(false), 2500); - return; - } - - // Almacenar en localStorage - localStorage.setItem("cursos-seleccionados", JSON.stringify(idsAEnviar)); - // Ir a sig pantalla - window.location.href = "#/pc/sistemas/"; - }; - - return ( -
-
-
-
-

- Seleccion de cursos -

-

Selecciona los cursos en los que matricularte

- - - {([nombreAnio, infoCurso]) => ( - <> -

{nombreAnio} año

-
- - {(curso) => ( - <> - - {curso.nombre_curso} - - )} - -
- - )} -
-
- - Selecciona al menos un curso - -
- - -
-
- ); -} diff --git a/src/Views/pc/Sistemas.tsx b/src/Views/pc/Sistemas.tsx deleted file mode 100644 index 95fee8a..0000000 --- a/src/Views/pc/Sistemas.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { BarraSuperior } from "../../BarraSuperior"; -import { ContenedorHorarios } from "./Sistemas/ContenedorHorarios"; -import { Creditos } from "../../Creditos"; -import { Separador } from "../../Separador"; -import { createSignal } from "solid-js"; -import { getHorarios, ListaCursosCompleto } from "../../API/CargaHorarios"; -import { Cursos, DatosGrupo } from "../../types/DatosHorario"; -import { infoDiaAListaHoras } from "../SistemasMovil"; -import { StyleSheet, css } from "aphrodite/no-important"; -import { estilosGlobales } from "../../Estilos"; -import { gruposSeleccionados, SERVER_PATH } from "../../Store"; - -const s = StyleSheet.create({ - botonAccion: { - width: "50%", - display: "inline-block", - textAlign: "center", - backgroundColor: "var(--color-primario)", - }, -}); - -export function Sistemas() { - const [data, setData] = createSignal({}); - - // Obtener cursos seleccionados del servidor - (async() => { - const cursos: Array = JSON.parse(localStorage.getItem("cursos-seleccionados") ?? "[]"); - const data = await getHorarios({ - cursos: cursos.map((x) => parseInt(x, 10)), - }); - setData(listaCursosADatos(data)); - })(); - - const matricular = async() => { - const laboratoriosAMatricular = Object.entries(gruposSeleccionados) - .filter((x) => x[1] === true) - .map((x) => x[0]); - - const response = await fetch(`${SERVER_PATH}/matricula`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - correo_usuario: localStorage.getItem("correo"), - horarios: laboratoriosAMatricular, - }), - }); - if (response.ok) { - window.location.href = "#/pc/ver-matricula/"; - } else { - alert("No se pudo procesar la matricula"); - } - }; - - return ( -
- - - - - -
- -
- -
- ); -} - -function listaCursosADatos(cursosEntrada: ListaCursosCompleto): Cursos { - const result: Cursos = {}; - - for (const curso of cursosEntrada) { - const gruposLab: {[grupo: string]: DatosGrupo} = {}; - for (const lab of curso.laboratorios) { - gruposLab[lab.grupo] = { - id_laboratorio: lab.id_laboratorio, - Docente: lab.docente, - Horas: infoDiaAListaHoras(lab.horarios), - seleccionado: false, - }; - } - - result[curso.nombre_curso] = { - nombre: curso.nombre_curso, - abreviado: curso.abreviado, - oculto: false, - Teoria: {}, - Laboratorio: gruposLab, - }; - } - - return result; -} - diff --git a/src/Views/pc/Sistemas/ContenedorHorarios.tsx b/src/Views/pc/Sistemas/ContenedorHorarios.tsx deleted file mode 100755 index 61cf7e7..0000000 --- a/src/Views/pc/Sistemas/ContenedorHorarios.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import YAML from "yaml"; -import { css, StyleSheet } from "aphrodite"; -import { MiHorario } from "./ContenedorHorarios/MiHorario"; -import { - Anios, - Cursos, - DatosHorario, - DatosGrupo, -} from "../../../types/DatosHorario"; -import { batch, createEffect, createMemo, createSignal, Show } from "solid-js"; -import { useListaCursos } from "./ContenedorHorarios/useListaCursos"; - -export type EstadoLayout = "MaxPersonal" | "Normal" | "MaxHorarios"; - -const { - listaCursos: cursosUsuario, - setListaCursos: setCursosUsuarios, - agregarCursoALista: agregarCursoUsuario, -} = useListaCursos(); - -export function ContenedorHorarios(props: {datos: Cursos}) { - - createEffect(async() => { - const d2 = props.datos; - batch(() => { - Object.entries(d2).forEach(([_, curso]) => agregarCursoUsuario(curso)); - }); - }); - - return ( - - ); -} diff --git a/src/Views/pc/Sistemas/ContenedorHorarios/MiHorario.tsx b/src/Views/pc/Sistemas/ContenedorHorarios/MiHorario.tsx deleted file mode 100755 index 45f8042..0000000 --- a/src/Views/pc/Sistemas/ContenedorHorarios/MiHorario.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { estilosGlobales } from "../../../../Estilos"; -import { StyleSheet, css } from "aphrodite"; -import {Tabla} from "./Tabla"; -import { EstadoLayout } from "../ContenedorHorarios"; -import { Switch, Match, createMemo } from "solid-js"; -import {SetStoreFunction} from "solid-js/store"; -import { BotonMaxMin } from "./BotonMaxMin"; -import { BotonIcono } from "./BotonIcono"; -import { Curso, Cursos, ListaCursosUsuario } from "../../../../types/DatosHorario"; -import { CursosElem } from "./CursosElem"; -import { TablaObserver } from "./TablaObserver"; - -interface MiHorarioProps { - cursos: Cursos, - fnAgregarCurso: (c: Curso) => void, - setCursosUsuarios: SetStoreFunction -} - -const e = StyleSheet.create({ - horario: {}, - boton: { - textDecoration: "none", - // paddingRight: "0.5rem", - "::before": { - fontSize: "1rem", - // transform: "translateY(0.2rem)", - textDecoration: "none", - }, - }, -}); - -export function MiHorario(props: MiHorarioProps) { - const tablaObserver = new TablaObserver(); - - const datosMiHorario = createMemo(() => { - const obj: Cursos = {}; - Object.entries(props.cursos).forEach(([_, x], i) => { - obj[i] = x; - }); - return obj; - }); - - return ( -
-
- Mi horario -
- -
- -
- - "Mi horario"} - dataAnio={datosMiHorario()} - fnAgregarCurso={props.fnAgregarCurso} - esCursoMiHorario - setCursosUsuarios={props.setCursosUsuarios} - tablaObserver={tablaObserver} - /> -
- ); -} diff --git a/src/Views/pc/VerMatricula.tsx b/src/Views/pc/VerMatricula.tsx deleted file mode 100644 index 6ed513d..0000000 --- a/src/Views/pc/VerMatricula.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { css, StyleSheet } from "aphrodite/no-important"; -import { estilosGlobales } from "../../Estilos"; -import { createSignal, For } from "solid-js"; -import { getMatricula, InfoMatricula } from "../../API/VerMatricula"; -import { gruposSeleccionados } from "../../Store"; - -const e = StyleSheet.create({ - contenedorGlobal: { - width: "100vw", - height: "100vh", - display: "flex", - alignItems: "center", - justifyContent: "center", - }, - cont: { - width: "30rem", - }, - parrafo: { - textAlign: "justify", - lineHeight: "1.4rem", - }, - botonAccion: { - width: "30rem", - display: "inline-block", - textAlign: "center", - }, - iconoGitHub: { - fontSize: "1.25rem", - verticalAlign: "bottom", - marginRight: "0.5rem", - }, - inputCorreo: { - width: "100%", - backgroundColor: "rgba(159,159,159,0.44)", - border: "none", - borderBottom: "solid 2px var(--color-texto)", - padding: "0.5rem 1rem", - boxSizing: "border-box", - marginTop: "1rem", - borderRadius: "5px", - }, - checkbox: { - width: "1.25rem", - height: "1.25rem", - margin: "0 0.5rem", - }, - grid: { - display: "grid", - gridTemplateColumns: "3rem auto", - gridRowGap: "1rem", - }, -}); - -export function VerMatricula() { - const [infoMatriculas, setInfoMatriculas] = createSignal>([]); - - (async() => { - const laboratorios = Object.entries(gruposSeleccionados) - .filter((x) => x[1] === true) - .map((x) => parseInt(x[0], 10)); - setInfoMatriculas(await getMatricula({matriculas: laboratorios})); - })(); - - return ( -
-
- -
-

- Matricula realizada -

- - {(matricula) => ( -
-

{matricula.nombre_curso}

-

Grupo: {matricula.grupo}

-

Docente: {matricula.docente}

-
- )} -
- -
-
-
- ); -} diff --git a/src/components/Button.tsx b/src/components/Button.tsx deleted file mode 100644 index 043c7ae..0000000 --- a/src/components/Button.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { StyleSheet, css } from "aphrodite/no-important"; - -export function Button(props: {texto: string, onClick?: () => void}) { - const s = StyleSheet.create({ - boton: { - backgroundColor: "var(--color-primario)", - color: "white", - padding: "1rem 5rem", - borderRadius: "25px", - margin: "1.5rem 0", - boxShadow: "2px 2px 2px 0 gray", - cursor: "pointer", - }, - }); - return ( - - ); -} diff --git a/src/components/Card.tsx b/src/components/Card.tsx deleted file mode 100644 index 7cc6ebd..0000000 --- a/src/components/Card.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { JSX } from "solid-js"; -import { StyleSheet, css } from "aphrodite/no-important"; - -const s = StyleSheet.create({ - card: { - padding: "0.5rem", - border: "solid 2px var(--color-borde)", - borderRadius: "10px", - margin: "0.5rem", - }, -}); - -export function Card(props: {children?: JSX.Element}) { - return ( -
- {props.children} -
- ); -} diff --git a/src/styles/global.css b/src/styles/global.css index 1df264e..1db1445 100755 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -1,7 +1,6 @@ :root { --color-texto: white; --color-primario: #531925; - --color-borde: rgba(83, 25, 37, 0.49); } body { diff --git a/src/types/DatosHorario.ts b/src/types/DatosHorario.ts index 91210a0..3eb6c34 100755 --- a/src/types/DatosHorario.ts +++ b/src/types/DatosHorario.ts @@ -27,7 +27,6 @@ export interface DatosHorarioRaw { } export interface DatosGrupo { - id_laboratorio: number, Docente: string, Horas: string[] seleccionado: boolean @@ -45,8 +44,9 @@ export interface Curso { } } -export type ListaCursosUsuario = { - [key: string]: Curso +export interface ListaCursosUsuario { + sigIndice: number, + cursos: Curso[] } export interface Cursos {