diff --git a/fullstack/task/packages/client/package.json b/fullstack/task/packages/client/package.json
index 819a4b34..b5d0fb41 100644
--- a/fullstack/task/packages/client/package.json
+++ b/fullstack/task/packages/client/package.json
@@ -22,11 +22,14 @@
"@types/react-dom": "18.0.6",
"@types/styled-components": "^5.1.26",
"@vitejs/plugin-react": "2.1.0",
+ "autoprefixer": "^10.4.21",
"cross-env": "7.0.3",
"eslint-import-resolver-typescript": "3.5.3",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-react": "7.31.8",
"jest": "28.1.3",
+ "postcss": "^8.5.3",
+ "tailwindcss": "^3.4.17",
"ts-jest": "28.0.8",
"vite": "3.1.0"
},
diff --git a/fullstack/task/packages/client/postcss.config.js b/fullstack/task/packages/client/postcss.config.js
new file mode 100644
index 00000000..33ad091d
--- /dev/null
+++ b/fullstack/task/packages/client/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/fullstack/task/packages/client/src/App.tsx b/fullstack/task/packages/client/src/App.tsx
index f62d2a02..b101bfdb 100644
--- a/fullstack/task/packages/client/src/App.tsx
+++ b/fullstack/task/packages/client/src/App.tsx
@@ -1,5 +1,14 @@
-function App() {
- return
TODO
;
-}
+import React from 'react';
+import { ExchangeRates } from './components/ExchangeRates';
+
+const App: React.FC = () => {
+ return (
+
+ );
+};
export default App;
diff --git a/fullstack/task/packages/client/src/components/ExchangeRates.tsx b/fullstack/task/packages/client/src/components/ExchangeRates.tsx
new file mode 100644
index 00000000..46fea25f
--- /dev/null
+++ b/fullstack/task/packages/client/src/components/ExchangeRates.tsx
@@ -0,0 +1,87 @@
+import React from 'react';
+import { gql, useQuery } from '@apollo/client';
+
+interface ExchangeRate {
+ country: string;
+ currency: string;
+ amount: number;
+ code: string;
+ rate: number;
+}
+
+interface ExchangeRateData {
+ exchangeRates: {
+ fetchedAt: string;
+ rates: ExchangeRate[];
+ };
+}
+
+const EXCHANGE_RATES_QUERY = gql`
+ query GetExchangeRates {
+ exchangeRates {
+ fetchedAt
+ rates {
+ country
+ currency
+ amount
+ code
+ rate
+ }
+ }
+ }
+`;
+
+export const ExchangeRates: React.FC = () => {
+ const { loading, error, data } = useQuery(EXCHANGE_RATES_QUERY);
+ const timeSinceFetch = data
+ ? Math.floor(
+ (new Date().getTime() - new Date(data.exchangeRates.fetchedAt).getTime()) / 1000
+ )
+ : 0;
+
+ if (loading) return Loading...
;
+ if (error) return Error: {error.message}
;
+
+ return (
+
+
Exchange Rates
+
Last updated: {timeSinceFetch} seconds ago
+
+
+
+
+ |
+ Country
+ |
+
+ Currency
+ |
+
+ Amount
+ |
+
+ Code
+ |
+
+ Rate
+ |
+
+
+
+ {data?.exchangeRates.rates.map((rate) => (
+
+ | {rate.country} |
+ {rate.currency} |
+ {rate.amount} |
+ {rate.code} |
+
+ {rate.rate.toFixed(3)}
+ |
+
+ ))}
+
+
+
+
+ );
+};
diff --git a/fullstack/task/packages/client/src/index.css b/fullstack/task/packages/client/src/index.css
new file mode 100644
index 00000000..a31e4441
--- /dev/null
+++ b/fullstack/task/packages/client/src/index.css
@@ -0,0 +1,3 @@
+@import 'tailwindcss/base';
+@import 'tailwindcss/components';
+@import 'tailwindcss/utilities';
diff --git a/fullstack/task/packages/client/src/main.tsx b/fullstack/task/packages/client/src/main.tsx
index ef5f39c2..21856139 100644
--- a/fullstack/task/packages/client/src/main.tsx
+++ b/fullstack/task/packages/client/src/main.tsx
@@ -2,9 +2,10 @@ import React from 'react';
import ReactDOM from 'react-dom/client';
import { ApolloClient, ApolloProvider, InMemoryCache } from '@apollo/client';
import App from './App';
+import './index.css';
const client = new ApolloClient({
- uri: 'http://localhost:4000/graphql',
+ uri: 'http://localhost:4001/graphql',
cache: new InMemoryCache(),
});
diff --git a/fullstack/task/packages/client/tailwind.config.js b/fullstack/task/packages/client/tailwind.config.js
new file mode 100644
index 00000000..b509c9f7
--- /dev/null
+++ b/fullstack/task/packages/client/tailwind.config.js
@@ -0,0 +1,10 @@
+module.exports = {
+ content: [
+ "./index.html",
+ "./src/**/*.{js,ts,jsx,tsx}",
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/fullstack/task/packages/server/.env b/fullstack/task/packages/server/.env
index 32fba8c8..f74aa0b8 100644
--- a/fullstack/task/packages/server/.env
+++ b/fullstack/task/packages/server/.env
@@ -8,4 +8,6 @@ GQL_DEBUG=true
GQL_PLAYGROUND=true
GQL_INTROSPECTION=true
+BANK_URL=https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt
+
PORT=4001
diff --git a/fullstack/task/packages/server/schema.gql b/fullstack/task/packages/server/schema.gql
index 2453a887..b75e320a 100644
--- a/fullstack/task/packages/server/schema.gql
+++ b/fullstack/task/packages/server/schema.gql
@@ -17,8 +17,23 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date
"""
scalar DateTime
+type ExchangeRate {
+ id: ID!
+ country: String!
+ currency: String!
+ amount: Float!
+ code: String!
+ rate: Float!
+ createdAt: DateTime!
+}
+
+type ExchangeRateCache {
+ fetchedAt: DateTime!
+ rates: [ExchangeRate!]!
+}
+
type Query {
- exchangeRates: String!
+ exchangeRates: ExchangeRateCache!
exampleByName(name: String!): Example
}
diff --git a/fullstack/task/packages/server/src/entities/exchange-rate.entity.ts b/fullstack/task/packages/server/src/entities/exchange-rate.entity.ts
new file mode 100644
index 00000000..a7b0187e
--- /dev/null
+++ b/fullstack/task/packages/server/src/entities/exchange-rate.entity.ts
@@ -0,0 +1,54 @@
+import { Field, Float, ID, ObjectType } from '@nestjs/graphql';
+import { IsNumber, IsString, MinLength } from 'class-validator';
+import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm';
+import { VAR_CHAR } from './constants';
+
+@ObjectType()
+@Entity()
+export class ExchangeRate {
+ @Field(() => ID)
+ @PrimaryGeneratedColumn('uuid')
+ public id!: string;
+
+ @IsString()
+ @MinLength(1)
+ @Field(() => String)
+ @Column({ ...VAR_CHAR })
+ public country!: string;
+
+ @IsString()
+ @MinLength(1)
+ @Field(() => String)
+ @Column({ ...VAR_CHAR })
+ public currency!: string;
+
+ @IsNumber()
+ @Field(() => Float)
+ @Column({ type: 'float' })
+ public amount!: number;
+
+ @IsString()
+ @MinLength(1)
+ @Field(() => String)
+ @Column({ ...VAR_CHAR })
+ @Index()
+ public code!: string;
+
+ @IsNumber()
+ @Field(() => Float)
+ @Column({ type: 'float' })
+ public rate!: number;
+
+ @Field(() => Date)
+ @Column({ type: 'timestamp' })
+ public createdAt!: Date;
+}
+
+@ObjectType()
+export class ExchangeRateCache {
+ @Field(() => Date)
+ public fetchedAt!: Date;
+
+ @Field(() => [ExchangeRate])
+ public rates!: ExchangeRate[];
+}
diff --git a/fullstack/task/packages/server/src/entities/index.ts b/fullstack/task/packages/server/src/entities/index.ts
index 6b536a4a..38ac79ca 100644
--- a/fullstack/task/packages/server/src/entities/index.ts
+++ b/fullstack/task/packages/server/src/entities/index.ts
@@ -1 +1,2 @@
export * from './example.entity';
+export * from './exchange-rate.entity';
diff --git a/fullstack/task/packages/server/src/migrations/1744935284746-add-exchange-rates.ts b/fullstack/task/packages/server/src/migrations/1744935284746-add-exchange-rates.ts
new file mode 100644
index 00000000..31731fd6
--- /dev/null
+++ b/fullstack/task/packages/server/src/migrations/1744935284746-add-exchange-rates.ts
@@ -0,0 +1,16 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class addExchangeRates1744935284746 implements MigrationInterface {
+ name = 'addExchangeRates1744935284746'
+
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(`CREATE TABLE "exchange_rate" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "country" character varying(255) NOT NULL, "currency" character varying(255) NOT NULL, "amount" double precision NOT NULL, "code" character varying(255) NOT NULL, "rate" double precision NOT NULL, "createdAt" TIMESTAMP NOT NULL, CONSTRAINT "PK_5c5d27d2b900ef6cdeef0398472" PRIMARY KEY ("id"))`);
+ await queryRunner.query(`CREATE INDEX "IDX_9c87dc76495d95ed8fd3a56809" ON "exchange_rate" ("code") `);
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(`DROP INDEX "public"."IDX_9c87dc76495d95ed8fd3a56809"`);
+ await queryRunner.query(`DROP TABLE "exchange_rate"`);
+ }
+
+}
diff --git a/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.module.ts b/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.module.ts
index d972c6e4..a48fd153 100644
--- a/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.module.ts
+++ b/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.module.ts
@@ -1,9 +1,11 @@
import { Module } from '@nestjs/common';
+import { TypeOrmModule } from '@nestjs/typeorm';
+import { ExchangeRate } from '../../entities';
import { ExchangeRateService } from './exchange-rate.service';
import { ExchangeRateResolver } from './exchange-rate.resolver';
@Module({
- imports: [],
+ imports: [TypeOrmModule.forFeature([ExchangeRate])],
providers: [ExchangeRateService, ExchangeRateResolver],
exports: [ExchangeRateService],
})
diff --git a/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.resolver.ts b/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.resolver.ts
index 39087b66..7527ee68 100644
--- a/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.resolver.ts
+++ b/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.resolver.ts
@@ -1,13 +1,13 @@
import { Query, Resolver } from '@nestjs/graphql';
+import { ExchangeRateCache } from '../../entities';
import { ExchangeRateService } from './exchange-rate.service';
@Resolver()
export class ExchangeRateResolver {
constructor(private readonly exchangeRateService: ExchangeRateService) {}
- // TODO: Implement a GraphQL Query that returns the exchange rates
- @Query(() => String)
- async exchangeRates(): Promise {
- return 'Hello';
+ @Query(() => ExchangeRateCache)
+ async exchangeRates(): Promise {
+ return this.exchangeRateService.getExchangeRates();
}
}
diff --git a/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.service.ts b/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.service.ts
index d9ee80bb..9e50e5d7 100644
--- a/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.service.ts
+++ b/fullstack/task/packages/server/src/services/exchange-rate/exchange-rate.service.ts
@@ -1,11 +1,58 @@
import { Injectable } from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+import { Repository } from 'typeorm';
+import axios from 'axios';
+import { ConfigService } from '@nestjs/config';
+import { ExchangeRate, ExchangeRateCache } from '../../entities';
@Injectable()
export class ExchangeRateService {
- public getExchangeRates = async () => {
- // TODO: Implement the fetching and parsing of the exchange rates.
- // Use this method in the resolver.
+ constructor(
+ @InjectRepository(ExchangeRate)
+ private readonly exchangeRateRepository: Repository,
+ private readonly configService: ConfigService
+ ) {}
- return [];
- };
+ private async fetchFromCNB(): Promise {
+ const bankUrl = this.configService.get('BANK_URL') ?? '';
+ const response = await axios.get(bankUrl);
+ const lines = response.data.split('\n');
+ const rates = lines.slice(2).filter((line: string) => line.trim());
+
+ return rates.map((line: string) => {
+ const [country, currency, amount, code, rate] = line.split('|');
+ return {
+ country,
+ currency,
+ amount: parseFloat(amount),
+ code,
+ rate: parseFloat(rate.replace(',', '.')),
+ createdAt: new Date(),
+ } as ExchangeRate;
+ });
+ }
+
+ public async getExchangeRates(): Promise {
+ const latestRates = await this.exchangeRateRepository.find({
+ order: { createdAt: 'DESC' },
+ });
+ if (
+ latestRates.length > 0 &&
+ new Date().getTime() - new Date(latestRates[0].createdAt).getTime() < 5 * 60 * 1000
+ ) {
+ return {
+ fetchedAt: latestRates[0].createdAt,
+ rates: latestRates,
+ };
+ }
+
+ const freshRates = await this.fetchFromCNB();
+ await this.exchangeRateRepository.clear();
+ const savedRates = await this.exchangeRateRepository.save(freshRates);
+
+ return {
+ fetchedAt: new Date(),
+ rates: savedRates,
+ };
+ }
}
diff --git a/fullstack/task/yarn.lock b/fullstack/task/yarn.lock
index cb18ed2c..c4e8192b 100644
--- a/fullstack/task/yarn.lock
+++ b/fullstack/task/yarn.lock
@@ -12,6 +12,13 @@ __metadata:
languageName: node
linkType: hard
+"@alloc/quick-lru@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "@alloc/quick-lru@npm:5.2.0"
+ checksum: bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8
+ languageName: node
+ linkType: hard
+
"@ampproject/remapping@npm:^2.2.0":
version: 2.2.1
resolution: "@ampproject/remapping@npm:2.2.1"
@@ -3301,6 +3308,13 @@ __metadata:
languageName: node
linkType: hard
+"arg@npm:^5.0.2":
+ version: 5.0.2
+ resolution: "arg@npm:5.0.2"
+ checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078
+ languageName: node
+ linkType: hard
+
"argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
@@ -3433,6 +3447,24 @@ __metadata:
languageName: node
linkType: hard
+"autoprefixer@npm:^10.4.21":
+ version: 10.4.21
+ resolution: "autoprefixer@npm:10.4.21"
+ dependencies:
+ browserslist: ^4.24.4
+ caniuse-lite: ^1.0.30001702
+ fraction.js: ^4.3.7
+ normalize-range: ^0.1.2
+ picocolors: ^1.1.1
+ postcss-value-parser: ^4.2.0
+ peerDependencies:
+ postcss: ^8.1.0
+ bin:
+ autoprefixer: bin/autoprefixer
+ checksum: 11770ce635a0520e457eaf2ff89056cd57094796a9f5d6d9375513388a5a016cd947333dcfd213b822fdd8a0b43ce68ae4958e79c6f077c41d87444c8cca0235
+ languageName: node
+ linkType: hard
+
"available-typed-arrays@npm:^1.0.5":
version: 1.0.5
resolution: "available-typed-arrays@npm:1.0.5"
@@ -3729,6 +3761,15 @@ __metadata:
languageName: node
linkType: hard
+"braces@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "braces@npm:3.0.3"
+ dependencies:
+ fill-range: ^7.1.1
+ checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69
+ languageName: node
+ linkType: hard
+
"browserslist@npm:^4.14.5, browserslist@npm:^4.21.9":
version: 4.21.11
resolution: "browserslist@npm:4.21.11"
@@ -3743,6 +3784,20 @@ __metadata:
languageName: node
linkType: hard
+"browserslist@npm:^4.24.4":
+ version: 4.24.4
+ resolution: "browserslist@npm:4.24.4"
+ dependencies:
+ caniuse-lite: ^1.0.30001688
+ electron-to-chromium: ^1.5.73
+ node-releases: ^2.0.19
+ update-browserslist-db: ^1.1.1
+ bin:
+ browserslist: cli.js
+ checksum: 64074bf6cf0a9ae3094d753270e3eae9cf925149db45d646f0bc67bacc2e46d7ded64a4e835b95f5fdcf0350f63a83c3755b32f80831f643a47f0886deb8a065
+ languageName: node
+ linkType: hard
+
"bs-logger@npm:0.x":
version: 0.2.6
resolution: "bs-logger@npm:0.2.6"
@@ -3864,6 +3919,13 @@ __metadata:
languageName: node
linkType: hard
+"camelcase-css@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "camelcase-css@npm:2.0.1"
+ checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1
+ languageName: node
+ linkType: hard
+
"camelcase@npm:^5.3.1":
version: 5.3.1
resolution: "camelcase@npm:5.3.1"
@@ -3892,6 +3954,13 @@ __metadata:
languageName: node
linkType: hard
+"caniuse-lite@npm:^1.0.30001688, caniuse-lite@npm:^1.0.30001702":
+ version: 1.0.30001714
+ resolution: "caniuse-lite@npm:1.0.30001714"
+ checksum: e68fbee9a115f842f0d907e033f14e8d476f965473556fb993c8870854a2608573eebf4dbc2aa5b03caa9c6224ff4afe63ea8c702566fbbcb78c369fba72395b
+ languageName: node
+ linkType: hard
+
"chalk@npm:3.0.0":
version: 3.0.0
resolution: "chalk@npm:3.0.0"
@@ -3956,6 +4025,25 @@ __metadata:
languageName: node
linkType: hard
+"chokidar@npm:^3.6.0":
+ version: 3.6.0
+ resolution: "chokidar@npm:3.6.0"
+ dependencies:
+ anymatch: ~3.1.2
+ braces: ~3.0.2
+ fsevents: ~2.3.2
+ glob-parent: ~5.1.2
+ is-binary-path: ~2.1.0
+ is-glob: ~4.0.1
+ normalize-path: ~3.0.0
+ readdirp: ~3.6.0
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d
+ languageName: node
+ linkType: hard
+
"chownr@npm:^2.0.0":
version: 2.0.0
resolution: "chownr@npm:2.0.0"
@@ -4080,6 +4168,7 @@ __metadata:
"@types/react-dom": 18.0.6
"@types/styled-components": ^5.1.26
"@vitejs/plugin-react": 2.1.0
+ autoprefixer: ^10.4.21
cross-env: 7.0.3
eslint-import-resolver-typescript: 3.5.3
eslint-plugin-import: 2.27.5
@@ -4088,10 +4177,12 @@ __metadata:
graphql-tag: 2.12.6
graphql-ws: 5.12.0
jest: 28.1.3
+ postcss: ^8.5.3
react: 18.2.0
react-dom: 18.2.0
react-is: 18.2.0
styled-components: 5.3.9
+ tailwindcss: ^3.4.17
ts-jest: 28.0.8
vite: 3.1.0
vite-tsconfig-paths: ^4.0.7
@@ -4195,7 +4286,7 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:4.1.1":
+"commander@npm:4.1.1, commander@npm:^4.0.0":
version: 4.1.1
resolution: "commander@npm:4.1.1"
checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977
@@ -4428,6 +4519,15 @@ __metadata:
languageName: node
linkType: hard
+"cssesc@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "cssesc@npm:3.0.0"
+ bin:
+ cssesc: bin/cssesc
+ checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2
+ languageName: node
+ linkType: hard
+
"cssfilter@npm:0.0.10":
version: 0.0.10
resolution: "cssfilter@npm:0.0.10"
@@ -4625,6 +4725,13 @@ __metadata:
languageName: node
linkType: hard
+"didyoumean@npm:^1.2.2":
+ version: 1.2.2
+ resolution: "didyoumean@npm:1.2.2"
+ checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e
+ languageName: node
+ linkType: hard
+
"diff-sequences@npm:^28.1.1":
version: 28.1.1
resolution: "diff-sequences@npm:28.1.1"
@@ -4665,6 +4772,13 @@ __metadata:
languageName: unknown
linkType: soft
+"dlv@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "dlv@npm:1.1.3"
+ checksum: d7381bca22ed11933a1ccf376db7a94bee2c57aa61e490f680124fa2d1cd27e94eba641d9f45be57caab4f9a6579de0983466f620a2cd6230d7ec93312105ae7
+ languageName: node
+ linkType: hard
+
"doctrine@npm:^2.1.0":
version: 2.1.0
resolution: "doctrine@npm:2.1.0"
@@ -4767,6 +4881,13 @@ __metadata:
languageName: node
linkType: hard
+"electron-to-chromium@npm:^1.5.73":
+ version: 1.5.138
+ resolution: "electron-to-chromium@npm:1.5.138"
+ checksum: 380c31027b08a482dbba9ae455e3d020bafb70117e54a894d2762f18e4fc1d238630b85b0d970eb826efc1272efb126ff6fbd454b3e0b389fb8d8b5df2f04524
+ languageName: node
+ linkType: hard
+
"emittery@npm:^0.10.2":
version: 0.10.2
resolution: "emittery@npm:0.10.2"
@@ -5164,6 +5285,13 @@ __metadata:
languageName: node
linkType: hard
+"escalade@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "escalade@npm:3.2.0"
+ checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e
+ languageName: node
+ linkType: hard
+
"escape-html@npm:~1.0.3":
version: 1.0.3
resolution: "escape-html@npm:1.0.3"
@@ -5767,6 +5895,19 @@ __metadata:
languageName: node
linkType: hard
+"fast-glob@npm:^3.3.2":
+ version: 3.3.3
+ resolution: "fast-glob@npm:3.3.3"
+ dependencies:
+ "@nodelib/fs.stat": ^2.0.2
+ "@nodelib/fs.walk": ^1.2.3
+ glob-parent: ^5.1.2
+ merge2: ^1.3.0
+ micromatch: ^4.0.8
+ checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd
+ languageName: node
+ linkType: hard
+
"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
version: 2.1.0
resolution: "fast-json-stable-stringify@npm:2.1.0"
@@ -5833,6 +5974,15 @@ __metadata:
languageName: node
linkType: hard
+"fill-range@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "fill-range@npm:7.1.1"
+ dependencies:
+ to-regex-range: ^5.0.1
+ checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798
+ languageName: node
+ linkType: hard
+
"finalhandler@npm:1.2.0":
version: 1.2.0
resolution: "finalhandler@npm:1.2.0"
@@ -5996,6 +6146,13 @@ __metadata:
languageName: node
linkType: hard
+"fraction.js@npm:^4.3.7":
+ version: 4.3.7
+ resolution: "fraction.js@npm:4.3.7"
+ checksum: e1553ae3f08e3ba0e8c06e43a3ab20b319966dfb7ddb96fd9b5d0ee11a66571af7f993229c88ebbb0d4a816eb813a24ed48207b140d442a8f76f33763b8d1f3f
+ languageName: node
+ linkType: hard
+
"fresh@npm:0.5.2":
version: 0.5.2
resolution: "fresh@npm:0.5.2"
@@ -6090,6 +6247,13 @@ __metadata:
languageName: node
linkType: hard
+"function-bind@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "function-bind@npm:1.1.2"
+ checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1
+ languageName: node
+ linkType: hard
+
"function.prototype.name@npm:^1.1.6":
version: 1.1.6
resolution: "function.prototype.name@npm:1.1.6"
@@ -6219,7 +6383,7 @@ __metadata:
languageName: node
linkType: hard
-"glob-parent@npm:^6.0.1":
+"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2":
version: 6.0.2
resolution: "glob-parent@npm:6.0.2"
dependencies:
@@ -6264,6 +6428,22 @@ __metadata:
languageName: node
linkType: hard
+"glob@npm:^10.3.10":
+ version: 10.4.5
+ resolution: "glob@npm:10.4.5"
+ dependencies:
+ foreground-child: ^3.1.0
+ jackspeak: ^3.1.2
+ minimatch: ^9.0.4
+ minipass: ^7.1.2
+ package-json-from-dist: ^1.0.0
+ path-scurry: ^1.11.1
+ bin:
+ glob: dist/esm/bin.mjs
+ checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a
+ languageName: node
+ linkType: hard
+
"glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0":
version: 7.2.3
resolution: "glob@npm:7.2.3"
@@ -6476,6 +6656,15 @@ __metadata:
languageName: node
linkType: hard
+"hasown@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "hasown@npm:2.0.2"
+ dependencies:
+ function-bind: ^1.1.2
+ checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db
+ languageName: node
+ linkType: hard
+
"help-me@npm:^3.0.0":
version: 3.0.0
resolution: "help-me@npm:3.0.0"
@@ -6803,6 +6992,15 @@ __metadata:
languageName: node
linkType: hard
+"is-core-module@npm:^2.16.0":
+ version: 2.16.1
+ resolution: "is-core-module@npm:2.16.1"
+ dependencies:
+ hasown: ^2.0.2
+ checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7
+ languageName: node
+ linkType: hard
+
"is-date-object@npm:^1.0.1":
version: 1.0.5
resolution: "is-date-object@npm:1.0.5"
@@ -7093,6 +7291,19 @@ __metadata:
languageName: node
linkType: hard
+"jackspeak@npm:^3.1.2":
+ version: 3.4.3
+ resolution: "jackspeak@npm:3.4.3"
+ dependencies:
+ "@isaacs/cliui": ^8.0.2
+ "@pkgjs/parseargs": ^0.11.0
+ dependenciesMeta:
+ "@pkgjs/parseargs":
+ optional: true
+ checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00
+ languageName: node
+ linkType: hard
+
"jest-changed-files@npm:^28.1.3":
version: 28.1.3
resolution: "jest-changed-files@npm:28.1.3"
@@ -7543,6 +7754,15 @@ __metadata:
languageName: node
linkType: hard
+"jiti@npm:^1.21.6":
+ version: 1.21.7
+ resolution: "jiti@npm:1.21.7"
+ bin:
+ jiti: bin/jiti.js
+ checksum: 9cd20dabf82e3a4cceecb746a69381da7acda93d34eed0cdb9c9bdff3bce07e4f2f4a016ca89924392c935297d9aedc58ff9f7d3281bc5293319ad244926e0b7
+ languageName: node
+ linkType: hard
+
"js-sdsl@npm:4.3.0":
version: 4.3.0
resolution: "js-sdsl@npm:4.3.0"
@@ -7804,6 +8024,13 @@ __metadata:
languageName: node
linkType: hard
+"lilconfig@npm:^3.0.0, lilconfig@npm:^3.1.3":
+ version: 3.1.3
+ resolution: "lilconfig@npm:3.1.3"
+ checksum: 644eb10830350f9cdc88610f71a921f510574ed02424b57b0b3abb66ea725d7a082559552524a842f4e0272c196b88dfe1ff7d35ffcc6f45736777185cd67c9a
+ languageName: node
+ linkType: hard
+
"lines-and-columns@npm:^1.1.6":
version: 1.2.4
resolution: "lines-and-columns@npm:1.2.4"
@@ -7969,6 +8196,13 @@ __metadata:
languageName: node
linkType: hard
+"lru-cache@npm:^10.2.0":
+ version: 10.4.3
+ resolution: "lru-cache@npm:10.4.3"
+ checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a
+ languageName: node
+ linkType: hard
+
"lru-cache@npm:^5.1.1":
version: 5.1.1
resolution: "lru-cache@npm:5.1.1"
@@ -8153,6 +8387,16 @@ __metadata:
languageName: node
linkType: hard
+"micromatch@npm:^4.0.8":
+ version: 4.0.8
+ resolution: "micromatch@npm:4.0.8"
+ dependencies:
+ braces: ^3.0.3
+ picomatch: ^2.3.1
+ checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
+ languageName: node
+ linkType: hard
+
"mime-db@npm:1.52.0":
version: 1.52.0
resolution: "mime-db@npm:1.52.0"
@@ -8228,6 +8472,15 @@ __metadata:
languageName: node
linkType: hard
+"minimatch@npm:^9.0.4":
+ version: 9.0.5
+ resolution: "minimatch@npm:9.0.5"
+ dependencies:
+ brace-expansion: ^2.0.1
+ checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28
+ languageName: node
+ linkType: hard
+
"minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
@@ -8309,6 +8562,13 @@ __metadata:
languageName: node
linkType: hard
+"minipass@npm:^7.1.2":
+ version: 7.1.2
+ resolution: "minipass@npm:7.1.2"
+ checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3
+ languageName: node
+ linkType: hard
+
"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
version: 2.1.2
resolution: "minizlib@npm:2.1.2"
@@ -8422,7 +8682,7 @@ __metadata:
languageName: node
linkType: hard
-"mz@npm:^2.4.0":
+"mz@npm:^2.4.0, mz@npm:^2.7.0":
version: 2.7.0
resolution: "mz@npm:2.7.0"
dependencies:
@@ -8442,6 +8702,15 @@ __metadata:
languageName: node
linkType: hard
+"nanoid@npm:^3.3.8":
+ version: 3.3.11
+ resolution: "nanoid@npm:3.3.11"
+ bin:
+ nanoid: bin/nanoid.cjs
+ checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29
+ languageName: node
+ linkType: hard
+
"natural-compare@npm:^1.4.0":
version: 1.4.0
resolution: "natural-compare@npm:1.4.0"
@@ -8557,6 +8826,13 @@ __metadata:
languageName: node
linkType: hard
+"node-releases@npm:^2.0.19":
+ version: 2.0.19
+ resolution: "node-releases@npm:2.0.19"
+ checksum: 917dbced519f48c6289a44830a0ca6dc944c3ee9243c468ebd8515a41c97c8b2c256edb7f3f750416bc37952cc9608684e6483c7b6c6f39f6bd8d86c52cfe658
+ languageName: node
+ linkType: hard
+
"nopt@npm:^5.0.0":
version: 5.0.0
resolution: "nopt@npm:5.0.0"
@@ -8586,6 +8862,13 @@ __metadata:
languageName: node
linkType: hard
+"normalize-range@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "normalize-range@npm:0.1.2"
+ checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184
+ languageName: node
+ linkType: hard
+
"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1":
version: 4.0.1
resolution: "npm-run-path@npm:4.0.1"
@@ -8698,7 +8981,7 @@ __metadata:
languageName: node
linkType: hard
-"object-hash@npm:3.0.0":
+"object-hash@npm:3.0.0, object-hash@npm:^3.0.0":
version: 3.0.0
resolution: "object-hash@npm:3.0.0"
checksum: 80b4904bb3857c52cc1bfd0b52c0352532ca12ed3b8a6ff06a90cd209dfda1b95cee059a7625eb9da29537027f68ac4619363491eedb2f5d3dddbba97494fd6c
@@ -8943,6 +9226,13 @@ __metadata:
languageName: node
linkType: hard
+"package-json-from-dist@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "package-json-from-dist@npm:1.0.1"
+ checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602
+ languageName: node
+ linkType: hard
+
"packet-reader@npm:1.0.0":
version: 1.0.0
resolution: "packet-reader@npm:1.0.0"
@@ -9074,6 +9364,16 @@ __metadata:
languageName: node
linkType: hard
+"path-scurry@npm:^1.11.1":
+ version: 1.11.1
+ resolution: "path-scurry@npm:1.11.1"
+ dependencies:
+ lru-cache: ^10.2.0
+ minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+ checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023
+ languageName: node
+ linkType: hard
+
"path-to-regexp@npm:0.1.7":
version: 0.1.7
resolution: "path-to-regexp@npm:0.1.7"
@@ -9181,6 +9481,13 @@ __metadata:
languageName: node
linkType: hard
+"picocolors@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "picocolors@npm:1.1.1"
+ checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045
+ languageName: node
+ linkType: hard
+
"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
@@ -9188,6 +9495,20 @@ __metadata:
languageName: node
linkType: hard
+"pify@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "pify@npm:2.3.0"
+ checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
+ languageName: node
+ linkType: hard
+
+"pirates@npm:^4.0.1":
+ version: 4.0.7
+ resolution: "pirates@npm:4.0.7"
+ checksum: 3dcbaff13c8b5bc158416feb6dc9e49e3c6be5fddc1ea078a05a73ef6b85d79324bbb1ef59b954cdeff000dbf000c1d39f32dc69310c7b78fbada5171b583e40
+ languageName: node
+ linkType: hard
+
"pirates@npm:^4.0.4":
version: 4.0.6
resolution: "pirates@npm:4.0.6"
@@ -9211,7 +9532,70 @@ __metadata:
languageName: node
linkType: hard
-"postcss-value-parser@npm:^4.0.2":
+"postcss-import@npm:^15.1.0":
+ version: 15.1.0
+ resolution: "postcss-import@npm:15.1.0"
+ dependencies:
+ postcss-value-parser: ^4.0.0
+ read-cache: ^1.0.0
+ resolve: ^1.1.7
+ peerDependencies:
+ postcss: ^8.0.0
+ checksum: 7bd04bd8f0235429009d0022cbf00faebc885de1d017f6d12ccb1b021265882efc9302006ba700af6cab24c46bfa2f3bc590be3f9aee89d064944f171b04e2a3
+ languageName: node
+ linkType: hard
+
+"postcss-js@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "postcss-js@npm:4.0.1"
+ dependencies:
+ camelcase-css: ^2.0.1
+ peerDependencies:
+ postcss: ^8.4.21
+ checksum: 5c1e83efeabeb5a42676193f4357aa9c88f4dc1b3c4a0332c132fe88932b33ea58848186db117cf473049fc233a980356f67db490bd0a7832ccba9d0b3fd3491
+ languageName: node
+ linkType: hard
+
+"postcss-load-config@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "postcss-load-config@npm:4.0.2"
+ dependencies:
+ lilconfig: ^3.0.0
+ yaml: ^2.3.4
+ peerDependencies:
+ postcss: ">=8.0.9"
+ ts-node: ">=9.0.0"
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+ checksum: 7c27dd3801db4eae207a5116fed2db6b1ebb780b40c3dd62a3e57e087093a8e6a14ee17ada729fee903152d6ef4826c6339eb135bee6208e0f3140d7e8090185
+ languageName: node
+ linkType: hard
+
+"postcss-nested@npm:^6.2.0":
+ version: 6.2.0
+ resolution: "postcss-nested@npm:6.2.0"
+ dependencies:
+ postcss-selector-parser: ^6.1.1
+ peerDependencies:
+ postcss: ^8.2.14
+ checksum: 2c86ecf2d0ce68f27c87c7e24ae22dc6dd5515a89fcaf372b2627906e11f5c1f36e4a09e4c15c20fd4a23d628b3d945c35839f44496fbee9a25866258006671b
+ languageName: node
+ linkType: hard
+
+"postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2":
+ version: 6.1.2
+ resolution: "postcss-selector-parser@npm:6.1.2"
+ dependencies:
+ cssesc: ^3.0.0
+ util-deprecate: ^1.0.2
+ checksum: ce9440fc42a5419d103f4c7c1847cb75488f3ac9cbe81093b408ee9701193a509f664b4d10a2b4d82c694ee7495e022f8f482d254f92b7ffd9ed9dea696c6f84
+ languageName: node
+ linkType: hard
+
+"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.2.0":
version: 4.2.0
resolution: "postcss-value-parser@npm:4.2.0"
checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f
@@ -9229,6 +9613,17 @@ __metadata:
languageName: node
linkType: hard
+"postcss@npm:^8.4.47, postcss@npm:^8.5.3":
+ version: 8.5.3
+ resolution: "postcss@npm:8.5.3"
+ dependencies:
+ nanoid: ^3.3.8
+ picocolors: ^1.1.1
+ source-map-js: ^1.2.1
+ checksum: da574620eb84ff60e65e1d8fc6bd5ad87a19101a23d0aba113c653434161543918229a0f673d89efb3b6d4906287eb04b957310dbcf4cbebacad9d1312711461
+ languageName: node
+ linkType: hard
+
"postgres-array@npm:~2.0.0":
version: 2.0.0
resolution: "postgres-array@npm:2.0.0"
@@ -9484,6 +9879,15 @@ __metadata:
languageName: node
linkType: hard
+"read-cache@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "read-cache@npm:1.0.0"
+ dependencies:
+ pify: ^2.3.0
+ checksum: cffc728b9ede1e0667399903f9ecaf3789888b041c46ca53382fa3a06303e5132774dc0a96d0c16aa702dbac1ea0833d5a868d414f5ab2af1e1438e19e6657c6
+ languageName: node
+ linkType: hard
+
"readable-stream@npm:^2.2.2":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
@@ -9631,6 +10035,19 @@ __metadata:
languageName: node
linkType: hard
+"resolve@npm:^1.1.7, resolve@npm:^1.22.8":
+ version: 1.22.10
+ resolution: "resolve@npm:1.22.10"
+ dependencies:
+ is-core-module: ^2.16.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf
+ languageName: node
+ linkType: hard
+
"resolve@npm:^2.0.0-next.3":
version: 2.0.0-next.4
resolution: "resolve@npm:2.0.0-next.4"
@@ -9657,6 +10074,19 @@ __metadata:
languageName: node
linkType: hard
+"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.22.8#~builtin":
+ version: 1.22.10
+ resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=07638b"
+ dependencies:
+ is-core-module: ^2.16.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d
+ languageName: node
+ linkType: hard
+
"resolve@patch:resolve@^2.0.0-next.3#~builtin":
version: 2.0.0-next.4
resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=07638b"
@@ -10158,6 +10588,13 @@ __metadata:
languageName: node
linkType: hard
+"source-map-js@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "source-map-js@npm:1.2.1"
+ checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b
+ languageName: node
+ linkType: hard
+
"source-map-support@npm:0.5.13":
version: 0.5.13
resolution: "source-map-support@npm:0.5.13"
@@ -10481,6 +10918,24 @@ __metadata:
languageName: node
linkType: hard
+"sucrase@npm:^3.35.0":
+ version: 3.35.0
+ resolution: "sucrase@npm:3.35.0"
+ dependencies:
+ "@jridgewell/gen-mapping": ^0.3.2
+ commander: ^4.0.0
+ glob: ^10.3.10
+ lines-and-columns: ^1.1.6
+ mz: ^2.7.0
+ pirates: ^4.0.1
+ ts-interface-checker: ^0.1.9
+ bin:
+ sucrase: bin/sucrase
+ sucrase-node: bin/sucrase-node
+ checksum: 9fc5792a9ab8a14dcf9c47dcb704431d35c1cdff1d17d55d382a31c2e8e3063870ad32ce120a80915498486246d612e30cda44f1624d9d9a10423e1a43487ad1
+ languageName: node
+ linkType: hard
+
"superagent@npm:^6.1.0":
version: 6.1.0
resolution: "superagent@npm:6.1.0"
@@ -10578,6 +11033,39 @@ __metadata:
languageName: node
linkType: hard
+"tailwindcss@npm:^3.4.17":
+ version: 3.4.17
+ resolution: "tailwindcss@npm:3.4.17"
+ dependencies:
+ "@alloc/quick-lru": ^5.2.0
+ arg: ^5.0.2
+ chokidar: ^3.6.0
+ didyoumean: ^1.2.2
+ dlv: ^1.1.3
+ fast-glob: ^3.3.2
+ glob-parent: ^6.0.2
+ is-glob: ^4.0.3
+ jiti: ^1.21.6
+ lilconfig: ^3.1.3
+ micromatch: ^4.0.8
+ normalize-path: ^3.0.0
+ object-hash: ^3.0.0
+ picocolors: ^1.1.1
+ postcss: ^8.4.47
+ postcss-import: ^15.1.0
+ postcss-js: ^4.0.1
+ postcss-load-config: ^4.0.2
+ postcss-nested: ^6.2.0
+ postcss-selector-parser: ^6.1.2
+ resolve: ^1.22.8
+ sucrase: ^3.35.0
+ bin:
+ tailwind: lib/cli.js
+ tailwindcss: lib/cli.js
+ checksum: bda962f30e9a2f0567e2ee936ec863d5178958078e577ced13da60b3af779062a53a7e95f2f32b5c558f12a7477dea3ce071441a7362c6d7bf50bc9e166728a4
+ languageName: node
+ linkType: hard
+
"tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1":
version: 2.2.1
resolution: "tapable@npm:2.2.1"
@@ -10772,6 +11260,13 @@ __metadata:
languageName: node
linkType: hard
+"ts-interface-checker@npm:^0.1.9":
+ version: 0.1.13
+ resolution: "ts-interface-checker@npm:0.1.13"
+ checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e
+ languageName: node
+ linkType: hard
+
"ts-invariant@npm:^0.10.3":
version: 0.10.3
resolution: "ts-invariant@npm:0.10.3"
@@ -11239,6 +11734,20 @@ __metadata:
languageName: node
linkType: hard
+"update-browserslist-db@npm:^1.1.1":
+ version: 1.1.3
+ resolution: "update-browserslist-db@npm:1.1.3"
+ dependencies:
+ escalade: ^3.2.0
+ picocolors: ^1.1.1
+ peerDependencies:
+ browserslist: ">= 4.21.0"
+ bin:
+ update-browserslist-db: cli.js
+ checksum: 7b6d8d08c34af25ee435bccac542bedcb9e57c710f3c42421615631a80aa6dd28b0a81c9d2afbef53799d482fb41453f714b8a7a0a8003e3b4ec8fb1abb819af
+ languageName: node
+ linkType: hard
+
"uri-js@npm:^4.2.2":
version: 4.4.1
resolution: "uri-js@npm:4.4.1"
@@ -11248,7 +11757,7 @@ __metadata:
languageName: node
linkType: hard
-"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1":
+"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
version: 1.0.2
resolution: "util-deprecate@npm:1.0.2"
checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2
@@ -11707,6 +12216,15 @@ __metadata:
languageName: node
linkType: hard
+"yaml@npm:^2.3.4":
+ version: 2.7.1
+ resolution: "yaml@npm:2.7.1"
+ bin:
+ yaml: bin.mjs
+ checksum: 385f8115ddfafdf8e599813cca8b2bf4e3f6a01b919fff5ae7da277e164df684d7dfe558b4085172094792b5a04786d3c55fa8b74abb0ee029873f031150bb80
+ languageName: node
+ linkType: hard
+
"yargs-parser@npm:21.0.1":
version: 21.0.1
resolution: "yargs-parser@npm:21.0.1"