From 839b1887b49f11aae7fc28b4b0962a7e6f881b09 Mon Sep 17 00:00:00 2001 From: Luke Shay <38476395+lukeshay@users.noreply.github.com> Date: Thu, 16 Nov 2023 19:36:17 -0600 Subject: [PATCH] Added support for 404 page and response streaming (#109) * streaming and 404 * fixed domains * removed powertools * format and lint * fixed tests * fixed engines * fixed node 20 * added changeset --- .changeset/gorgeous-bees-learn.md | 6 + .changeset/serious-guests-switch.md | 6 + .eslintrc.cjs | 1 + .github/workflows/ci.yml | 1 + .tool-versions | 2 +- .vscode/settings.json | 2 +- apps/docs/package.json | 10 +- apps/infra/cdk.context.json | 9 - apps/infra/cdk.json | 2 +- apps/infra/package.json | 12 +- apps/infra/src/bin/infra.ts | 88 +- apps/infra/src/lib/constants/environments.ts | 127 +- .../src/lib/constructs/basic-graph-widget.ts | 4 +- .../infra/src/lib/stacks/certificate-stack.ts | 12 +- .../infra/src/lib/stacks/github-oidc-stack.ts | 4 +- .../src/lib/stacks/github-users-stack.ts | 2 +- apps/infra/src/lib/stacks/monitoring-stack.ts | 2 +- apps/infra/src/lib/stacks/redirect-stack.ts | 12 +- apps/infra/src/lib/stacks/website-stack.ts | 98 +- .../src/lib/types/astro-aws-stack-props.ts | 5 - examples/base/astro.config.ts | 32 +- examples/base/package.json | 18 +- examples/base/src/middleware.ts | 21 +- examples/base/src/pages/404.astro | 17 + examples/base/src/pages/index.astro | 1 - examples/base/src/pages/prerender.astro | 30 + package.json | 10 +- packages/adapter/package.json | 54 +- packages/adapter/src/__tests__/index.test.ts | 13 +- packages/adapter/src/args.ts | 6 + packages/adapter/src/index.ts | 5 +- .../src/lambda/__tests__/helpers.test.ts | 119 -- packages/adapter/src/lambda/constants.ts | 56 +- packages/adapter/src/lambda/handler.ts | 207 --- packages/adapter/src/lambda/handlers/edge.ts | 170 ++ .../adapter/src/lambda/handlers/ssr-stream.ts | 1 + packages/adapter/src/lambda/handlers/ssr.ts | 177 ++ packages/adapter/src/lambda/helpers.ts | 131 +- packages/adapter/src/lambda/index.ts | 80 - packages/adapter/src/lambda/logger.ts | 7 - packages/adapter/src/lambda/middleware.ts | 39 + packages/adapter/src/lambda/types.d.ts | 30 - packages/adapter/src/lambda/types.ts | 10 + packages/adapter/src/log.ts | 28 +- packages/adapter/src/shared.ts | 17 +- packages/constructs/package.json | 8 +- .../astro-aws-cloudfront-distribution.ts | 18 +- .../src/constructs/astro-aws-origin.ts | 11 +- .../constructs/src/constructs/astro-aws.ts | 11 +- pnpm-lock.yaml | 1599 ++++++++++------- scripts/package.json | 14 +- scripts/src/utils/ts-util.ts | 8 +- tsconfig.base.json | 4 +- 53 files changed, 1904 insertions(+), 1453 deletions(-) create mode 100644 .changeset/gorgeous-bees-learn.md create mode 100644 .changeset/serious-guests-switch.md create mode 100644 examples/base/src/pages/404.astro create mode 100644 examples/base/src/pages/prerender.astro delete mode 100644 packages/adapter/src/lambda/__tests__/helpers.test.ts delete mode 100644 packages/adapter/src/lambda/handler.ts create mode 100644 packages/adapter/src/lambda/handlers/edge.ts create mode 100644 packages/adapter/src/lambda/handlers/ssr-stream.ts create mode 100644 packages/adapter/src/lambda/handlers/ssr.ts delete mode 100644 packages/adapter/src/lambda/index.ts delete mode 100644 packages/adapter/src/lambda/logger.ts create mode 100644 packages/adapter/src/lambda/middleware.ts delete mode 100644 packages/adapter/src/lambda/types.d.ts create mode 100644 packages/adapter/src/lambda/types.ts diff --git a/.changeset/gorgeous-bees-learn.md b/.changeset/gorgeous-bees-learn.md new file mode 100644 index 0000000..cfd2dbc --- /dev/null +++ b/.changeset/gorgeous-bees-learn.md @@ -0,0 +1,6 @@ +--- +"@astro-aws/constructs": minor +"@astro-aws/adapter": minor +--- + +Added support for response streaming diff --git a/.changeset/serious-guests-switch.md b/.changeset/serious-guests-switch.md new file mode 100644 index 0000000..0045d1c --- /dev/null +++ b/.changeset/serious-guests-switch.md @@ -0,0 +1,6 @@ +--- +"@astro-aws/constructs": minor +"@astro-aws/adapter": minor +--- + +Added support for 404 pages diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 1c85158..b5b8a18 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -15,6 +15,7 @@ module.exports = { rules: { "import/no-useless-path-segments": "off", "no-console": "off", + "no-warning-comments": "off", }, settings: { "import/parsers": { diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 29a0c96..9370b2d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,7 @@ jobs: matrix: node_version: - 18 + - 20 cmd: - build - test diff --git a/.tool-versions b/.tool-versions index 9f0ea12..7caf03a 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -nodejs 18.18.0 \ No newline at end of file +nodejs 18 diff --git a/.vscode/settings.json b/.vscode/settings.json index 8d1f776..7142db7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "cSpell.words": ["astro", "awslambda", "streamify"], + "cSpell.words": ["astro", "awslambda", "powertools", "streamify"], "files.associations": { "*.mdx": "markdown" }, diff --git a/apps/docs/package.json b/apps/docs/package.json index ae168a1..8a1b008 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -30,17 +30,17 @@ "start": "astro dev" }, "dependencies": { - "@astrojs/starlight": "^0.11.0", - "astro": "^3.2.4", + "@astrojs/starlight": "^0.12.0", + "astro": "^3.5.5", "sharp": "^0.32.6" }, "devDependencies": { "@astro-aws/adapter": "workspace:^", - "eslint": "^8.51.0", - "prettier": "^3.0.3", + "eslint": "^8.53.0", + "prettier": "^3.1.0", "rimraf": "^5.0.5" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" } } diff --git a/apps/infra/cdk.context.json b/apps/infra/cdk.context.json index d43aa62..2ab6569 100644 --- a/apps/infra/cdk.context.json +++ b/apps/infra/cdk.context.json @@ -1,15 +1,6 @@ { - "acknowledged-issue-numbers": [8607], - "hosted-zone:account=357382603627:domainName=astro-aws.org:region=us-east-1": { - "Id": "/hostedzone/Z07804331OLCIOIZL4YQN", - "Name": "astro-aws.org." - }, "hosted-zone:account=738697399292:domainName=astro-aws.org:region=us-east-1": { "Id": "/hostedzone/Z0584480MGUI8KRBPWM", "Name": "astro-aws.org." - }, - "hosted-zone:account=738697399292:domainName=astro-aws.org:region=us-east-2": { - "Id": "/hostedzone/Z0584480MGUI8KRBPWM", - "Name": "astro-aws.org." } } diff --git a/apps/infra/cdk.json b/apps/infra/cdk.json index 1f0d31f..782343e 100644 --- a/apps/infra/cdk.json +++ b/apps/infra/cdk.json @@ -1,5 +1,5 @@ { - "app": "node --enable-source-maps --es-module-specifier-resolution node dist/bin/infra.js", + "app": "node --enable-source-maps dist/bin/infra.js", "context": { "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, diff --git a/apps/infra/package.json b/apps/infra/package.json index 04d53bf..fedeeee 100644 --- a/apps/infra/package.json +++ b/apps/infra/package.json @@ -30,13 +30,13 @@ "dependencies": { "@astro-aws/constructs": "workspace:^", "@astro-aws/docs": "workspace:^", - "aws-cdk": "^2.100.0", - "aws-cdk-lib": "^2.100.0", + "aws-cdk": "^2.109.0", + "aws-cdk-lib": "^2.109.0", "constructs": "^10.3.0", - "eslint": "^8.51.0", - "prettier": "^3.0.3", + "eslint": "^8.53.0", + "prettier": "^3.1.0", "typescript": "^5.2.2", - "workspace-tools": "^0.35.2" + "workspace-tools": "^0.36.3" }, "devDependencies": { "@astro-aws/scripts": "workspace:^", @@ -44,7 +44,7 @@ "eslint-config-get-off-my-lawn": "^7.2.0" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" }, "cli": { "clean": [ diff --git a/apps/infra/src/bin/infra.ts b/apps/infra/src/bin/infra.ts index 1757a40..e08e30b 100644 --- a/apps/infra/src/bin/infra.ts +++ b/apps/infra/src/bin/infra.ts @@ -4,35 +4,64 @@ import { Environments, ENVIRONMENT_PROPS, } from "../lib/constants/environments.js" -import { MonitoringStack } from "../lib/stacks/monitoring-stack.js" import { WebsiteStack } from "../lib/stacks/website-stack.js" -import { RedirectStack } from "../lib/stacks/redirect-stack.js" -import type { CertificateStackProps } from "../lib/stacks/certificate-stack.js" import { CertificateStack } from "../lib/stacks/certificate-stack.js" import { GitHubOIDCStack } from "../lib/stacks/github-oidc-stack.js" import { GitHubUsersStack } from "../lib/stacks/github-users-stack.js" const app = new App() -const createStackName = (environment: string, stack: string) => - `AstroAWS-${environment}-${stack}` +const createStackName = ( + environment: string, + stack: string, + runtime?: string, + mode?: string, +) => ["AstroAWS", environment, stack, runtime, mode].filter(Boolean).join("-") Object.entries(ENVIRONMENT_PROPS).forEach(([environment, environmentProps]) => { - const monitoringStack = new MonitoringStack( - app, - createStackName(environment, "Monitoring"), - environmentProps, - ) + environmentProps.websites.forEach((websiteProps) => { + let certificateStack: CertificateStack | undefined - let certificateStack: CertificateStack | undefined + if (environment === Environments.DEV) { + // eslint-disable-next-line no-param-reassign + delete websiteProps.hostedZoneName + // eslint-disable-next-line no-param-reassign + delete websiteProps.aliases + } + + if (websiteProps.hostedZoneName && websiteProps.aliases) { + certificateStack = new CertificateStack( + app, + createStackName( + environment, + "Certificate", + websiteProps.runtime, + websiteProps.mode, + ), + { + ...environmentProps, + aliases: websiteProps.aliases, + hostedZoneName: websiteProps.hostedZoneName, + }, + ) + } - if (environmentProps.hostedZoneName) { - certificateStack = new CertificateStack( + new WebsiteStack( app, - createStackName(environment, "Certificate"), - environmentProps as CertificateStackProps, + createStackName( + environment, + "Website", + websiteProps.runtime, + websiteProps.mode, + ), + { + ...environmentProps, + ...websiteProps, + certificate: certificateStack?.certificate, + hostedZone: certificateStack?.hostedZone, + }, ) - } + }) if (environment === Environments.DEV) { new GitHubUsersStack( @@ -48,33 +77,6 @@ Object.entries(ENVIRONMENT_PROPS).forEach(([environment, environmentProps]) => { ) } - new WebsiteStack(app, createStackName(environment, "Website"), { - ...environmentProps, - certificate: certificateStack?.certificate, - cloudwatchDashboard: monitoringStack.cloudwatchDashboard, - hostedZone: certificateStack?.hostedZone, - }) - - if (environment === Environments.PROD && environmentProps.hostedZoneName) { - const redirectProps = { - ...environmentProps, - alias: ["www", environmentProps.alias].filter(Boolean).join("."), - } - - const redirectCertificateStack = new CertificateStack( - app, - createStackName(environment, "RedirectCertificate"), - redirectProps as CertificateStackProps, - ) - - new RedirectStack(app, createStackName(environment, "Redirect"), { - ...redirectProps, - certificate: redirectCertificateStack.certificate, - cloudwatchDashboard: monitoringStack.cloudwatchDashboard, - hostedZone: redirectCertificateStack.hostedZone, - }) - } - Tags.of(app).add("Project", "AstroAWS") Tags.of(app).add("Environment", environment) }) diff --git a/apps/infra/src/lib/constants/environments.ts b/apps/infra/src/lib/constants/environments.ts index e5c0814..9382fcb 100644 --- a/apps/infra/src/lib/constants/environments.ts +++ b/apps/infra/src/lib/constants/environments.ts @@ -1,6 +1,7 @@ import { env } from "node:process" import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" +import { type StaticWebsiteStackProps } from "../stacks/website-stack.js" const base = { analyticsReporting: false, @@ -14,61 +15,111 @@ const base = { const Environments = { DEV: "DEV", - EDGE: "EDGE", PERSONAL: "PERSONAL", PROD: "PROD", - SSR: "SSR", - STREAM: "STREAM", } as const type Environment = (typeof Environments)[keyof typeof Environments] -const ENVIRONMENT_PROPS: Record = { +type EnvironmentProps = Readonly< + AstroAWSStackProps & { + websites: readonly (Partial & StaticWebsiteStackProps)[] + } +> + +const ENVIRONMENT_PROPS: Record = { [Environments.DEV]: { ...base, - alias: "static.dev", environment: Environments.DEV, - hostedZoneName: "astro-aws.org", - package: "@astro-aws/docs", - }, - [Environments.EDGE]: { - ...base, - alias: "edge.dev", - distDir: "dist/edge", - env: { - ...base.env, - region: "us-east-1", - }, - environment: Environments.EDGE, - hostedZoneName: "astro-aws.org", - package: "@astro-aws/examples-base", + websites: [ + { + aliases: ["www.static.dev", "static.dev"], + hostedZoneName: "astro-aws.org", + mode: "static", + package: "@astro-aws/docs", + runtime: "nodejs20", + }, + { + aliases: ["www.ssr.nodejs18.dev", "ssr.nodejs18.dev"], + hostedZoneName: "astro-aws.org", + mode: "ssr", + package: "@astro-aws/examples-base", + runtime: "nodejs18", + }, + { + aliases: ["www.stream.nodejs18.dev", "stream.nodejs18.dev"], + hostedZoneName: "astro-aws.org", + mode: "ssr-stream", + package: "@astro-aws/examples-base", + runtime: "nodejs18", + }, + { + aliases: ["www.edge.nodejs18.dev", "edge.nodejs18.dev"], + env: { + ...base.env, + region: "us-east-1", + }, + hostedZoneName: "astro-aws.org", + mode: "edge", + package: "@astro-aws/examples-base", + runtime: "nodejs18", + }, + { + aliases: ["www.ssr.nodejs20.dev", "ssr.nodejs20.dev"], + hostedZoneName: "astro-aws.org", + mode: "ssr", + package: "@astro-aws/examples-base", + runtime: "nodejs20", + }, + { + aliases: ["www.stream.nodejs20.dev", "stream.nodejs20.dev"], + hostedZoneName: "astro-aws.org", + mode: "ssr-stream", + package: "@astro-aws/examples-base", + runtime: "nodejs20", + }, + { + aliases: ["www.edge.nodejs20.dev", "edge.nodejs20.dev"], + env: { + ...base.env, + region: "us-east-1", + }, + hostedZoneName: "astro-aws.org", + mode: "edge", + package: "@astro-aws/examples-base", + runtime: "nodejs20", + }, + ], }, [Environments.PROD]: { ...base, environment: Environments.PROD, - hostedZoneName: "astro-aws.org", - package: "@astro-aws/docs", + websites: [ + { + aliases: ["www", "*"], + hostedZoneName: "astro-aws.org", + mode: "static", + package: "@astro-aws/docs", + }, + ], }, [Environments.PERSONAL]: { ...base, environment: Environments.PERSONAL, - package: "@astro-aws/docs", - }, - [Environments.SSR]: { - ...base, - alias: "ssr.dev", - distDir: "dist/ssr", - environment: Environments.SSR, - hostedZoneName: "astro-aws.org", - package: "@astro-aws/examples-base", - }, - [Environments.STREAM]: { - ...base, - alias: "stream.dev", - distDir: "dist/ssr-stream", - environment: Environments.STREAM, - hostedZoneName: "astro-aws.org", - package: "@astro-aws/examples-base", + websites: [ + { + mode: "static", + package: "@astro-aws/docs", + }, + { + mode: "ssr", + package: "@astro-aws/examples-base", + }, + { + mode: "ssr-stream", + package: "@astro-aws/examples-base", + }, + ], }, } as const diff --git a/apps/infra/src/lib/constructs/basic-graph-widget.ts b/apps/infra/src/lib/constructs/basic-graph-widget.ts index f9076af..36a4f3f 100644 --- a/apps/infra/src/lib/constructs/basic-graph-widget.ts +++ b/apps/infra/src/lib/constructs/basic-graph-widget.ts @@ -1,5 +1,5 @@ import type { GraphWidgetProps, Metric } from "aws-cdk-lib/aws-cloudwatch" -import { GraphWidget } from "aws-cdk-lib/aws-cloudwatch" +import { GRID_WIDTH, GraphWidget } from "aws-cdk-lib/aws-cloudwatch" export type BasicGraphWidgetProps = Omit< GraphWidgetProps, @@ -13,7 +13,7 @@ export class BasicGraphWidget extends GraphWidget { const { metric, ...graphWidgetProps } = props super({ - width: 12, + width: GRID_WIDTH / 2, ...graphWidgetProps, left: [metric], title: metric.label, diff --git a/apps/infra/src/lib/stacks/certificate-stack.ts b/apps/infra/src/lib/stacks/certificate-stack.ts index 8a252b9..a6ae37d 100644 --- a/apps/infra/src/lib/stacks/certificate-stack.ts +++ b/apps/infra/src/lib/stacks/certificate-stack.ts @@ -4,12 +4,12 @@ import { CertificateValidation, } from "aws-cdk-lib/aws-certificatemanager" import type { Construct } from "constructs" -import type { IHostedZone } from "aws-cdk-lib/aws-route53" -import { HostedZone } from "aws-cdk-lib/aws-route53" +import { HostedZone, type IHostedZone } from "aws-cdk-lib/aws-route53" import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" export type CertificateStackProps = AstroAWSStackProps & { + aliases: readonly [string, ...string[]] hostedZoneName: string } @@ -30,9 +30,10 @@ export class CertificateStack extends Stack { }, }) - const { hostedZoneName, alias } = props - - const domainName = [alias, hostedZoneName].filter(Boolean).join(".") + const { hostedZoneName, aliases } = props + const [domainName, ...restDomainNames] = aliases.map((alias) => + [alias, hostedZoneName].join("."), + ) as [string, ...string[]] this.hostedZone = HostedZone.fromLookup(this, "HostedZone", { domainName: hostedZoneName, @@ -40,6 +41,7 @@ export class CertificateStack extends Stack { this.certificate = new Certificate(this, "Certificate", { domainName, + subjectAlternativeNames: restDomainNames, validation: CertificateValidation.fromDns(this.hostedZone), }) } diff --git a/apps/infra/src/lib/stacks/github-oidc-stack.ts b/apps/infra/src/lib/stacks/github-oidc-stack.ts index 3b1e501..807cb4f 100644 --- a/apps/infra/src/lib/stacks/github-oidc-stack.ts +++ b/apps/infra/src/lib/stacks/github-oidc-stack.ts @@ -7,8 +7,8 @@ import { Role, } from "aws-cdk-lib/aws-iam" -import type { AstroAWSStackProps } from "../types/astro-aws-stack-props" -import { Environments } from "../constants/environments" +import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" +import { Environments } from "../constants/environments.js" export type GitHubOIDCStackProps = AstroAWSStackProps diff --git a/apps/infra/src/lib/stacks/github-users-stack.ts b/apps/infra/src/lib/stacks/github-users-stack.ts index a7577fc..28b9aa7 100644 --- a/apps/infra/src/lib/stacks/github-users-stack.ts +++ b/apps/infra/src/lib/stacks/github-users-stack.ts @@ -10,7 +10,7 @@ import { import { SecretValue, Stack } from "aws-cdk-lib/core" import { Secret } from "aws-cdk-lib/aws-secretsmanager" -import type { AstroAWSStackProps } from "../types/astro-aws-stack-props" +import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" export type GitHubUsersStackProps = AstroAWSStackProps diff --git a/apps/infra/src/lib/stacks/monitoring-stack.ts b/apps/infra/src/lib/stacks/monitoring-stack.ts index a4f10fa..ca9d11b 100644 --- a/apps/infra/src/lib/stacks/monitoring-stack.ts +++ b/apps/infra/src/lib/stacks/monitoring-stack.ts @@ -2,7 +2,7 @@ import { Stack } from "aws-cdk-lib/core" import { Dashboard } from "aws-cdk-lib/aws-cloudwatch" import type { Construct } from "constructs" -import type { AstroAWSStackProps } from "../types/astro-aws-stack-props" +import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" export type MonitoringStackProps = AstroAWSStackProps diff --git a/apps/infra/src/lib/stacks/redirect-stack.ts b/apps/infra/src/lib/stacks/redirect-stack.ts index 0d9f11c..4b6e30e 100644 --- a/apps/infra/src/lib/stacks/redirect-stack.ts +++ b/apps/infra/src/lib/stacks/redirect-stack.ts @@ -8,8 +8,12 @@ import { } from "aws-cdk-lib/aws-cloudfront" import type { Construct } from "constructs" import type { Dashboard } from "aws-cdk-lib/aws-cloudwatch" -import type { IHostedZone } from "aws-cdk-lib/aws-route53" -import { AaaaRecord, ARecord, RecordTarget } from "aws-cdk-lib/aws-route53" +import { + AaaaRecord, + ARecord, + RecordTarget, + type IHostedZone, +} from "aws-cdk-lib/aws-route53" import { CloudFrontTarget } from "aws-cdk-lib/aws-route53-targets" import { HttpOrigin } from "aws-cdk-lib/aws-cloudfront-origins" @@ -68,13 +72,13 @@ export class RedirectStack extends Stack { }) new ARecord(this, "ARecord", { - recordName: domainName, + recordName: `www.${domainName}`, target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), zone: hostedZone, }) new AaaaRecord(this, "AaaaRecord", { - recordName: domainName, + recordName: `www.${domainName}`, target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), zone: hostedZone, }) diff --git a/apps/infra/src/lib/stacks/website-stack.ts b/apps/infra/src/lib/stacks/website-stack.ts index b340e86..f480f53 100644 --- a/apps/infra/src/lib/stacks/website-stack.ts +++ b/apps/infra/src/lib/stacks/website-stack.ts @@ -8,7 +8,7 @@ import { PriceClass, ResponseHeadersPolicy, } from "aws-cdk-lib/aws-cloudfront" -import { Architecture } from "aws-cdk-lib/aws-lambda" +import { Architecture, Runtime, Tracing } from "aws-cdk-lib/aws-lambda" import type { Construct } from "constructs" import { AstroAWS } from "@astro-aws/constructs" import { LogQueryWidget } from "aws-cdk-lib/aws-cloudwatch" @@ -28,51 +28,53 @@ import { BasicGraphWidget } from "../constructs/basic-graph-widget.js" import { Environments } from "../constants/environments.js" import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" -export type WebsiteStackProps = AstroAWSStackProps & { - cloudwatchDashboard: Dashboard - certificate?: Certificate - hostedZone?: IHostedZone +type StaticWebsiteStackProps = { + aliases?: readonly [string, ...string[]] + mode: string + hostedZoneName?: string + package: string + runtime: string } -export class WebsiteStack extends Stack { +type WebsiteStackProps = AstroAWSStackProps & + StaticWebsiteStackProps & { + cloudwatchDashboard?: Dashboard + certificate?: Certificate + hostedZone?: IHostedZone + } + +class WebsiteStack extends Stack { private static readonly WORKSPACE_INFO = getPnpmWorkspaces(cwd()) public constructor(scope: Construct, id: string, props: WebsiteStackProps) { super(scope, id, props) const { - alias, + aliases, certificate, cloudwatchDashboard, - distDir, + mode, environment, hostedZone, hostedZoneName, + runtime, } = props - const domainName = [alias, hostedZoneName].filter(Boolean).join(".") - const domainNames = [domainName].filter(Boolean) + const distDir = mode === "static" ? "dist" : `dist/${mode}` + const domainNames = aliases?.map((alias) => + [alias, hostedZoneName].filter(Boolean).join("."), + ) const cachePolicy = new CachePolicy(this, "CachePolicy", { minTtl: Duration.days(365), }) - // const cfLogInjestFunction = Function.fromFunctionAttributes(this, "CfLogInjestLambda", { - // architecture: Architecture.ARM_64, - // functionArn: "arn:aws:lambda:us-east-1:738697399292:function:CfLogIngestStack-LambdaD247545B-IHTgL5hMPXUT", - // sameEnvironment: false, - // }); - const accessLogBucket = new Bucket(this, "AccessLogBucket", { accessControl: BucketAccessControl.LOG_DELIVERY_WRITE, blockPublicAccess: BlockPublicAccess.BLOCK_ALL, encryption: BucketEncryption.S3_MANAGED, }) - // accessLogBucket.addObjectCreatedNotification(new LambdaDestination(cfLogInjestFunction), { - // prefix: "cloudfront/", - // }); - const astroAwsConstruct = new AstroAWS(this, "AstroAWSConstruct", { cdk: { cloudfrontDistribution: { @@ -115,40 +117,42 @@ export class WebsiteStack extends Stack { lambdaFunction: { architecture: Architecture.ARM_64, environment: { - ASTRO_AWS_LOG_LEVEL: "trace", + DOMAIN: String(domainNames?.[0]), }, + runtime: new Runtime(`${runtime}.x`), + tracing: Tracing.ACTIVE, }, s3Bucket: { serverAccessLogsBucket: accessLogBucket, serverAccessLogsPrefix: "s3/", }, }, - outDir: [this.#getWorkspacePath(props.package), distDir ?? "dist"].join( - "/", - ), + outDir: [this.#getWorkspacePath(props.package), distDir].join("/"), }) - if (hostedZone) { - new ARecord(this, "ARecord", { - recordName: domainName, - target: RecordTarget.fromAlias( - new CloudFrontTarget(astroAwsConstruct.cdk.cloudfrontDistribution), - ), - zone: hostedZone, - }) + if (hostedZone && domainNames) { + domainNames.forEach((domainName) => { + new ARecord(this, `ARecord-${domainName}`, { + recordName: domainName, + target: RecordTarget.fromAlias( + new CloudFrontTarget(astroAwsConstruct.cdk.cloudfrontDistribution), + ), + zone: hostedZone, + }) - new AaaaRecord(this, "AaaaRecord", { - recordName: domainName, - target: RecordTarget.fromAlias( - new CloudFrontTarget(astroAwsConstruct.cdk.cloudfrontDistribution), - ), - zone: hostedZone, + new AaaaRecord(this, `AaaaRecord-${domainName}`, { + recordName: domainName, + target: RecordTarget.fromAlias( + new CloudFrontTarget(astroAwsConstruct.cdk.cloudfrontDistribution), + ), + zone: hostedZone, + }) }) } const distribution5xxErrorRateMetric = new DistributionMetric({ distribution: astroAwsConstruct.cdk.cloudfrontDistribution, - label: "CloudFront 5xx error rate", + label: `${mode.toUpperCase()} - CloudFront 5xx error rate`, metricName: "5xxErrorRate", period: Duration.minutes(5), statistic: "Sum", @@ -156,7 +160,7 @@ export class WebsiteStack extends Stack { const distributionRequestsMetric = new DistributionMetric({ distribution: astroAwsConstruct.cdk.cloudfrontDistribution, - label: "CloudFront requests", + label: `${mode.toUpperCase()} - CloudFront requests`, metricName: "Requests", period: Duration.minutes(5), statistic: "Sum", @@ -174,34 +178,34 @@ export class WebsiteStack extends Stack { astroAwsConstruct.cdk.lambdaFunction.logGroup.logGroupName, ], queryLines: ["fields @timestamp, @message", "sort @timestamp desc"], - title: "Lambda logs", + title: `${mode.toUpperCase()} - Lambda logs`, width: 24, }) const lambdaFailureRateMetric = astroAwsConstruct.cdk.lambdaFunction.metricErrors({ - label: "Lambda failure rate", + label: `${mode.toUpperCase()} - Lambda failure rate`, period: Duration.minutes(5), statistic: "sum", }) const lambdaInvocationsMetric = astroAwsConstruct.cdk.lambdaFunction.metricInvocations({ - label: "Lambda invocations", + label: `${mode.toUpperCase()} - Lambda invocations`, period: Duration.minutes(5), statistic: "sum", }) const lambdaDurationMetric = astroAwsConstruct.cdk.lambdaFunction.metricDuration({ - label: "Lambda duration", + label: `${mode.toUpperCase()} - Lambda duration`, period: Duration.minutes(5), statistic: "avg", }) const lambdaThrottlesMetric = astroAwsConstruct.cdk.lambdaFunction.metricThrottles({ - label: "Lambda throttles", + label: `${mode.toUpperCase()} - Lambda throttles`, period: Duration.minutes(5), statistic: "sum", }) @@ -216,7 +220,7 @@ export class WebsiteStack extends Stack { ) } - cloudwatchDashboard.addWidgets(...widgets) + cloudwatchDashboard?.addWidgets(...widgets) new CfnOutput(this, "CloudFrontDistributionId", { value: astroAwsConstruct.cdk.cloudfrontDistribution.distributionId, @@ -240,3 +244,5 @@ export class WebsiteStack extends Stack { return workspace.path } } + +export { type StaticWebsiteStackProps, type WebsiteStackProps, WebsiteStack } diff --git a/apps/infra/src/lib/types/astro-aws-stack-props.ts b/apps/infra/src/lib/types/astro-aws-stack-props.ts index 7bed7ad..c01f147 100644 --- a/apps/infra/src/lib/types/astro-aws-stack-props.ts +++ b/apps/infra/src/lib/types/astro-aws-stack-props.ts @@ -4,15 +4,10 @@ import type { Environment } from "../constants/environments.js" export type AstroAWSStackProps = Readonly< Omit & { - alias?: string - distDir?: string env: { account: string region: string } environment: Environment - hostedZoneName?: string - package: string - skipDashboard?: boolean } > diff --git a/examples/base/astro.config.ts b/examples/base/astro.config.ts index 4d2dce2..0afe35b 100644 --- a/examples/base/astro.config.ts +++ b/examples/base/astro.config.ts @@ -10,8 +10,38 @@ const mode = env.MODE as "edge" | "ssr-stream" | "ssr" export default defineConfig({ adapter: aws({ mode, + powertools: { + middleware: { + logger: { + logErrors: true, + logEvent: true, + logResult: true, + }, + metrics: { + captureColdStartMetric: true, + }, + tracer: { + captureResponse: true, + }, + }, + options: { + logger: { + logLevel: "DEBUG", + sampleRateValue: 1, + serviceName: "astro-aws", + }, + metrics: { + namespace: "astro-aws", + serviceName: "astro-aws", + }, + tracer: { + captureHTTPsRequests: true, + serviceName: "astro-aws", + }, + }, + }, }), integrations: [tailwind()], outDir: `./dist/${mode}`, - output: "hybrid", + output: "server", }) diff --git a/examples/base/package.json b/examples/base/package.json index 03aedea..7b1c589 100644 --- a/examples/base/package.json +++ b/examples/base/package.json @@ -34,21 +34,23 @@ }, "dependencies": { "@astrojs/tailwind": "^5.0.2", - "@faker-js/faker": "^8.1.0", - "astro": "^3.2.4", - "daisyui": "^3.9.2", - "tailwindcss": "^3.3.3" + "@faker-js/faker": "^8.3.1", + "@middy/core": "^5.0.1", + "astro": "^3.5.5", + "daisyui": "^4.1.1", + "http-status-codes": "^2.3.0", + "tailwindcss": "^3.3.5" }, "devDependencies": { "@astro-aws/adapter": "workspace:^", - "@astrojs/check": "^0.2.0", - "eslint": "^8.51.0", + "@astrojs/check": "^0.3.1", + "eslint": "^8.53.0", "npm-run-all": "^4.1.5", - "prettier": "^3.0.3", + "prettier": "^3.1.0", "rimraf": "^5.0.5", "typescript": "^5.2.2" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" } } diff --git a/examples/base/src/middleware.ts b/examples/base/src/middleware.ts index fa6ff3d..a3a21ae 100644 --- a/examples/base/src/middleware.ts +++ b/examples/base/src/middleware.ts @@ -1,12 +1,29 @@ // eslint-disable-next-line import/no-unresolved import { defineMiddleware } from "astro:middleware" +import { StatusCodes } from "http-status-codes" + +export const onRequest = defineMiddleware(async ({ locals, url }, next) => { + console.log("Running middleware for base") -export const onRequest = defineMiddleware(async ({ locals }, next) => { // eslint-disable-next-line no-param-reassign - locals.title = "New title" + locals.title = "Example" // eslint-disable-next-line no-param-reassign locals.rows = Array.from({ length: 100 }).map((_, i) => i + 1) + if ( + typeof import.meta.env.DOMAIN === "string" && + url.host !== import.meta.env.DOMAIN + ) { + const redirectUrl = new URL( + `${url.pathname}${url.search}`, + import.meta.env.DOMAIN, + ) + + console.log(`Redirecting to ${redirectUrl.toString()}`) + + return Response.redirect(redirectUrl, StatusCodes.PERMANENT_REDIRECT) + } + // return a Response or the result of calling `next()` return next() }) diff --git a/examples/base/src/pages/404.astro b/examples/base/src/pages/404.astro new file mode 100644 index 0000000..2b63695 --- /dev/null +++ b/examples/base/src/pages/404.astro @@ -0,0 +1,17 @@ +--- +import Layout from '../layouts/Layout.astro'; +--- + + +
+
+
+
+

404 Not Found

+

The page you requested was not found.

+
+
+
+
+
+ diff --git a/examples/base/src/pages/index.astro b/examples/base/src/pages/index.astro index 6ae3687..9b412a8 100644 --- a/examples/base/src/pages/index.astro +++ b/examples/base/src/pages/index.astro @@ -1,7 +1,6 @@ --- import Layout from '../layouts/Layout.astro'; import PersonRow from "../components/home/PersonRow.astro" - --- diff --git a/examples/base/src/pages/prerender.astro b/examples/base/src/pages/prerender.astro new file mode 100644 index 0000000..6d4e404 --- /dev/null +++ b/examples/base/src/pages/prerender.astro @@ -0,0 +1,30 @@ +--- +import Layout from '../layouts/Layout.astro'; +import PersonRow from "../components/home/PersonRow.astro" + +export const prerender = true +--- + + +
+
+ + + + + + + + + + + + {Astro.locals.rows.map((n) => ( + + ))} + +
NameEmailPhone
+
+
+
+ diff --git a/package.json b/package.json index b912382..0934040 100644 --- a/package.json +++ b/package.json @@ -48,14 +48,14 @@ "@lshay/eslint-config": "^0.2.5", "@lshay/prettier-config": "^0.6.1", "@rushstack/eslint-patch": "^1.5.1", - "eslint": "^8.51.0", + "eslint": "^8.53.0", "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.28.1", - "prettier": "^3.0.3", - "turbo": "^1.10.15", + "eslint-plugin-import": "^2.29.0", + "prettier": "^3.1.0", + "turbo": "^1.10.16", "typescript": "^5.2.2" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" } } diff --git a/packages/adapter/package.json b/packages/adapter/package.json index 9e2257b..2d7c91f 100644 --- a/packages/adapter/package.json +++ b/packages/adapter/package.json @@ -24,13 +24,37 @@ "import": "./dist/index.js", "types": "./dist/index.d.ts" }, - "./lambda/index": { - "import": "./dist/lambda/index.js", - "types": "./dist/lambda/index.d.ts" + "./powertools": { + "import": "./dist/powertools.js", + "types": "./dist/powertools.d.ts" }, - "./lambda/index.js": { - "import": "./dist/lambda/index.js", - "types": "./dist/lambda/index.d.ts" + "./powertools.js": { + "import": "./dist/powertools.js", + "types": "./dist/powertools.d.ts" + }, + "./lambda/handlers/ssr": { + "import": "./dist/lambda/handlers/ssr.js", + "types": "./dist/lambda/handlers/ssr.d.ts" + }, + "./lambda/handlers/ssr.js": { + "import": "./dist/lambda/handlers/ssr.js", + "types": "./dist/lambda/handlers/ssr.d.ts" + }, + "./lambda/handlers/ssr-stream": { + "import": "./dist/lambda/handlers/ssr-stream.js", + "types": "./dist/lambda/handlers/ssr-stream.d.ts" + }, + "./lambda/handlers/ssr-stream.js": { + "import": "./dist/lambda/handlers/ssr-stream.js", + "types": "./dist/lambda/handlers/ssr-stream.d.ts" + }, + "./lambda/handlers/edge": { + "import": "./dist/lambda/handlers/edge.js", + "types": "./dist/lambda/handlers/edge.d.ts" + }, + "./lambda/handlers/edge.js": { + "import": "./dist/lambda/handlers/edge.js", + "types": "./dist/lambda/handlers/edge.d.ts" } }, "files": [ @@ -48,19 +72,21 @@ }, "dependencies": { "@astrojs/webapi": "^2.2.0", - "esbuild": "^0.19.4", + "@middy/core": "^5.0.1", + "esbuild": "^0.19.5", + "http-status-codes": "^2.3.0", "merge-anything": "^5.1.7", - "pino": "^8.16.0" + "pino": "^8.16.2" }, "devDependencies": { "@astro-aws/scripts": "workspace:^", - "@faker-js/faker": "^8.1.0", - "@types/aws-lambda": "^8.10.124", + "@faker-js/faker": "^8.3.1", + "@types/aws-lambda": "^8.10.126", "@types/node": "^18.18.0", - "astro": "^3.2.4", + "astro": "^3.5.5", "aws-lambda": "^1.0.7", - "eslint": "^8.51.0", - "prettier": "^3.0.3", + "eslint": "^8.53.0", + "prettier": "^3.1.0", "typescript": "^5.2.2", "vitest": "^0.34.6" }, @@ -68,7 +94,7 @@ "astro": ">=1" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" }, "publishConfig": { "access": "public" diff --git a/packages/adapter/src/__tests__/index.test.ts b/packages/adapter/src/__tests__/index.test.ts index d8b458e..5191719 100644 --- a/packages/adapter/src/__tests__/index.test.ts +++ b/packages/adapter/src/__tests__/index.test.ts @@ -22,6 +22,9 @@ describe("index.ts", () => { describe("getAdapter", () => { const args: Args = { binaryMediaTypes: [faker.string.sample()], + esBuildOptions: {}, + locals: {}, + mode: "ssr", } describe("when there are arguments", () => { @@ -36,10 +39,12 @@ describe("index.ts", () => { args: { ...args, esBuildOptions: {}, + locals: {}, + mode: "ssr", }, exports: ["handler"], name: ADAPTER_NAME, - serverEntrypoint: `${ADAPTER_NAME}/lambda/index.js`, + serverEntrypoint: `${ADAPTER_NAME}/lambda/handlers/ssr.js`, supportedAstroFeatures: { assets: { isSharpCompatible: false, @@ -66,10 +71,12 @@ describe("index.ts", () => { args: { binaryMediaTypes: [], esBuildOptions: {}, + locals: {}, + mode: "ssr", }, exports: ["handler"], name: ADAPTER_NAME, - serverEntrypoint: `${ADAPTER_NAME}/lambda/index.js`, + serverEntrypoint: `${ADAPTER_NAME}/lambda/handlers/ssr.js`, supportedAstroFeatures: { assets: { isSharpCompatible: false, @@ -210,6 +217,8 @@ describe("index.ts", () => { { ...args, esBuildOptions: {}, + locals: {}, + mode: "ssr", }, ) }) diff --git a/packages/adapter/src/args.ts b/packages/adapter/src/args.ts index 13ba452..ffa45a2 100644 --- a/packages/adapter/src/args.ts +++ b/packages/adapter/src/args.ts @@ -1,5 +1,7 @@ import type { BuildOptions } from "esbuild" +import { type WithLoggerOptions } from "./lambda/middleware.js" + type EsBuildOptions = Omit< BuildOptions, "bundle" | "entryPoints" | "outdir" | "platform" @@ -10,8 +12,12 @@ type Args = { binaryMediaTypes: string[] /** Configures ESBuild options that are not configured automatically. */ esBuildOptions: EsBuildOptions + /** Astro.locals that you want passed into the application. */ + locals: object /** Specifies where you want your app deployed to. */ mode: "edge" | "ssr-stream" | "ssr" + /** Settings for logging. */ + logger?: WithLoggerOptions } export { type EsBuildOptions, type Args } diff --git a/packages/adapter/src/index.ts b/packages/adapter/src/index.ts index 17932bf..7c03cd0 100644 --- a/packages/adapter/src/index.ts +++ b/packages/adapter/src/index.ts @@ -11,6 +11,7 @@ import { warn } from "./log.js" const DEFAULT_ARGS: Args = { binaryMediaTypes: [], esBuildOptions: {}, + locals: {}, mode: "ssr", } @@ -25,7 +26,9 @@ const getAdapter = (args: Partial = {}): AstroAdapter => ({ }, exports: ["handler"], name: ADAPTER_NAME, - serverEntrypoint: `${ADAPTER_NAME}/lambda/index.js`, + serverEntrypoint: `${ADAPTER_NAME}/lambda/handlers/${ + args.mode ?? DEFAULT_ARGS.mode + }.js`, supportedAstroFeatures: { assets: { isSharpCompatible: false, diff --git a/packages/adapter/src/lambda/__tests__/helpers.test.ts b/packages/adapter/src/lambda/__tests__/helpers.test.ts deleted file mode 100644 index b89effd..0000000 --- a/packages/adapter/src/lambda/__tests__/helpers.test.ts +++ /dev/null @@ -1,119 +0,0 @@ -import type { App } from "astro/app" -import { beforeEach, describe, expect, test, vi } from "vitest" -import { faker } from "@faker-js/faker" - -import { - createLambdaFunctionResponse, - createLambdaEdgeFunctionResponse, -} from "../helpers.js" - -const knownBinaryMediaTypes = new Set(["image/png", "image/jpeg"]) - -describe("helpers", () => { - describe("createFunctionResponse", () => { - let response: Response, - app: App, - fnResponse: Awaited>, - body: string, - headers: Record - - beforeEach(async () => { - body = faker.string.sample() - headers = { - "content-type": "text/plain", - } - - response = new Response(body, { - headers, - status: 200, - }) - - app = { - setCookieHeaders: vi.fn(() => []), - } as unknown as App - - fnResponse = await createLambdaFunctionResponse( - app, - response, - knownBinaryMediaTypes, - ) - }) - - test("creates function response", () => { - expect(app.setCookieHeaders).toHaveBeenCalledTimes(1) - expect(app.setCookieHeaders).toHaveBeenCalledWith(response) - - expect(fnResponse).toStrictEqual({ - body, - cookies: [], - headers, - isBase64Encoded: false, - statusCode: 200, - }) - }) - }) - - describe("createLambdaEdgeFunctionResponse", () => { - let response: Response, - app: App, - fnResponse: Awaited>, - body: string, - headers: Record - - beforeEach(async () => { - body = faker.string.sample() - headers = { - "content-type": "text/plain", - } - - response = new Response(body, { - headers, - status: 200, - }) - - app = { - setCookieHeaders: vi.fn(() => [ - "newCookie=newValue", - "deleteCookie=deleted; Expires=Thu, 01 Jan 1970 00:00:00 GMT", - ]), - } as unknown as App - - fnResponse = await createLambdaEdgeFunctionResponse( - app, - response, - knownBinaryMediaTypes, - ) - }) - - test("creates function response", () => { - expect(app.setCookieHeaders).toHaveBeenCalledTimes(1) - expect(app.setCookieHeaders).toHaveBeenCalledWith(response) - - expect(fnResponse).toStrictEqual({ - body, - bodyEncoding: "text", - headers: { - "content-type": [ - { - key: "content-type", - value: "text/plain", - }, - ], - "set-cookie": [ - { - key: "set-cookie", - value: "newCookie=newValue", - }, - { - key: "set-cookie", - value: - "deleteCookie=deleted; Expires=Thu, 01 Jan 1970 00:00:00 GMT", - }, - ], - }, - status: "200", - statusDescription: "", - }) - }) - }) -}) diff --git a/packages/adapter/src/lambda/constants.ts b/packages/adapter/src/lambda/constants.ts index 2f56b75..dcf0d42 100644 --- a/packages/adapter/src/lambda/constants.ts +++ b/packages/adapter/src/lambda/constants.ts @@ -1,4 +1,4 @@ -export const DISALLOWED_EDGE_HEADERS = [ +const DISALLOWED_EDGE_HEADERS = [ "Connection", "Expect", "Keep-Alive", @@ -35,3 +35,57 @@ export const DISALLOWED_EDGE_HEADERS = [ "X-Amz-Cf-.*", "X-Edge-.*", ].map((str) => new RegExp(`^${str.toLowerCase()}$`, "u")) + +const KNOWN_BINARY_MEDIA_TYPES = [ + "application/epub+zip", + "application/java-archive", + "application/msword", + "application/octet-stream", + "application/pdf", + "application/rtf", + "application/vnd.amazon.ebook", + "application/vnd.apple.installer+xml", + "application/vnd.ms-excel", + "application/vnd.ms-powerpoint", + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/x-7z-compressed", + "application/x-apple-diskimage", + "application/x-bzip", + "application/x-bzip2", + "application/x-gzip", + "application/x-java-archive", + "application/x-rar-compressed", + "application/x-tar", + "application/x-zip", + "application/zip", + "audio/3gpp", + "audio/aac", + "audio/basic", + "audio/mpeg", + "audio/ogg", + "audio/wavaudio/webm", + "audio/x-aiff", + "audio/x-midi", + "audio/x-wav", + "font/otf", + "font/woff", + "font/woff2", + "image/bmp", + "image/gif", + "image/jpeg", + "image/png", + "image/tiff", + "image/vnd.microsoft.icon", + "image/webp", + "video/3gpp", + "video/mp2t", + "video/mpeg", + "video/ogg", + "video/quicktime", + "video/webm", + "video/x-msvideo", +] + +export { DISALLOWED_EDGE_HEADERS, KNOWN_BINARY_MEDIA_TYPES } diff --git a/packages/adapter/src/lambda/handler.ts b/packages/adapter/src/lambda/handler.ts deleted file mode 100644 index 491c8b7..0000000 --- a/packages/adapter/src/lambda/handler.ts +++ /dev/null @@ -1,207 +0,0 @@ -import type { NodeApp } from "astro/app/node" -import type { - APIGatewayProxyEventV2, - APIGatewayProxyStructuredResultV2, - CloudFrontRequestEvent, -} from "aws-lambda" - -import type { Args } from "../args.js" - -import { - createLambdaEdgeFunctionResponse, - createLambdaFunctionHeaders, - createLambdaFunctionResponse, - createRequestBody, -} from "./helpers.js" -import { logger } from "./logger.js" - -const streamResponse = ( - responseStream: ResponseStream, - body: ArrayBuffer | string, - metadata: Omit, -) => { - const stream = awslambda.HttpResponseStream.from(responseStream, metadata) - - stream.write(body) - stream.end() - - return stream -} - -const withLog = - ( - fn: (event: TEvent, stream: TStream) => Promise, - ) => - async (event: TEvent, stream: TStream) => { - logger.info(event, "fnRequest") - - const result = await fn(event, stream) - - if (result) { - logger.info(result, "fnResponse") - } - - return result - } - -const createCloudFrontRequestEvent = ( - app: NodeApp, - knownBinaryMediaTypes: Set, -) => - withLog(async (originalEvent: CloudFrontRequestEvent) => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const cloudfrontRequest = originalEvent.Records[0]!.cf.request - - const { - body, - headers: eventHeaders, - querystring, - uri, - method, - } = cloudfrontRequest - - const headers = new Headers( - Object.fromEntries( - Object.entries(eventHeaders).map(([key, value]) => [ - value[0]?.key ?? key, - value[0]?.value, - ]), - ) as HeadersInit, - ) - - const scheme = headers.get("x-forwarded-protocol") ?? "https" - const host = headers.get("x-forwarded-host") ?? headers.get("host") ?? "" - const qs = querystring.length ? `?${querystring}` : "" - const url = new URL(`${uri}${qs}`, `${scheme}://${host}`) - - const request = new Request(url, { - body: body?.data - ? createRequestBody(method, body.data, body.encoding) - : undefined, - headers, - method, - }) - const routeData = app.match(request) - - if (!routeData) { - return cloudfrontRequest - } - - const response = await app.render(request, routeData) - const fnResponse = await createLambdaEdgeFunctionResponse( - app, - response, - knownBinaryMediaTypes, - ) - - return fnResponse - }) - -const createAPIGatewayProxyEventV2Handler = ( - args: Args, - app: NodeApp, - knownBinaryMediaTypes: Set, -) => { - const shouldStream = args.mode === "ssr-stream" - - const handler = withLog( - async ( - originalEvent: APIGatewayProxyEventV2, - responseStream: ResponseStream, - ) => { - logger.debug("Handling AWS Lambda event") - - const event = originalEvent - - const { - body: requestBody, - cookies, - headers: eventHeaders, - isBase64Encoded, - rawQueryString, - rawPath, - requestContext: { - http: { method }, - }, - } = event - - const headers = new Headers({ - ...eventHeaders, - cookie: cookies?.join("; ") ?? "", - }) - - const scheme = eventHeaders["x-forwarded-protocol"] ?? "https" - const host = eventHeaders["x-forwarded-host"] ?? eventHeaders.host ?? "" - const qs = rawQueryString.length ? `?${rawQueryString}` : "" - const url = new URL(`${rawPath}${qs}`, `${scheme}://${host}`) - - const request = new Request(url, { - body: createRequestBody(method, requestBody, isBase64Encoded), - headers, - method, - }) - const routeData = app.match(request) - - if (!routeData) { - if (shouldStream) { - logger.debug("Streaming response") - - const metadata = { - headers: { - "content-type": "text/plain", - }, - statusCode: 404, - } - - logger.info(metadata, "fnResponse") - - streamResponse(responseStream, "Not found", metadata) - - return - } - - // eslint-disable-next-line consistent-return - return { - body: "Not found", - statusCode: 404, - } - } - - const response = await app.render(request, routeData) - - if (shouldStream) { - logger.debug("Streaming response") - - const { cookies: responseCookies, headers: responseHeaders } = - createLambdaFunctionHeaders(app, response, knownBinaryMediaTypes) - - const metadata = { - cookies: responseCookies, - headers: responseHeaders, - statusCode: response.status, - } - - logger.info(metadata, "fnResponse") - - const body = await response.arrayBuffer() - - streamResponse(responseStream, body, metadata) - - return - } - - const fnResponse = await createLambdaFunctionResponse( - app, - response, - knownBinaryMediaTypes, - ) - - // eslint-disable-next-line consistent-return - return fnResponse - }, - ) - - return shouldStream ? awslambda.streamifyResponse(handler) : handler -} - -export { createCloudFrontRequestEvent, createAPIGatewayProxyEventV2Handler } diff --git a/packages/adapter/src/lambda/handlers/edge.ts b/packages/adapter/src/lambda/handlers/edge.ts new file mode 100644 index 0000000..a1b6792 --- /dev/null +++ b/packages/adapter/src/lambda/handlers/edge.ts @@ -0,0 +1,170 @@ +import { NodeApp } from "astro/app/node" +import type { + CloudFrontHeaders, + CloudFrontRequest, + CloudFrontRequestEvent, + CloudFrontRequestHandler, + CloudFrontRequestResult, + CloudFrontResponseEvent, + CloudFrontResponseResult, +} from "aws-lambda" +import { type SSRManifest } from "astro" +import { polyfill } from "@astrojs/webapi" + +import type { Args } from "../../args.js" +import { createRequestBody, parseContentType } from "../helpers.js" +import { + DISALLOWED_EDGE_HEADERS, + KNOWN_BINARY_MEDIA_TYPES, +} from "../constants.js" +import { withLogger } from "../middleware.js" + +polyfill(globalThis, { + exclude: "window document", +}) + +const createLambdaEdgeFunctionResponse = async ( + app: NodeApp, + response: Response, + knownBinaryMediaTypes: Set, +): Promise => { + const cookies = [...app.setCookieHeaders(response)] + + const responseHeadersObj = Object.fromEntries(response.headers.entries()) + + const headers: CloudFrontHeaders = { + ...Object.fromEntries( + Object.entries(responseHeadersObj) + .filter( + ([key]) => + !DISALLOWED_EDGE_HEADERS.some((reg) => reg.test(key.toLowerCase())), + ) + .map(([key, value]) => [ + key.toLowerCase(), + [ + { + key, + value, + }, + ], + ]), + ), + ...(cookies.length > 0 && { + "set-cookie": cookies.map((cookie) => ({ + key: "set-cookie", + value: cookie, + })), + }), + } + const responseContentType = parseContentType( + response.headers.get("content-type"), + ) + const bodyEncoding = knownBinaryMediaTypes.has(responseContentType) + ? "base64" + : "text" + + return { + body: (await response.text()) as string, + bodyEncoding, + headers, + status: String(response.status), + statusDescription: response.statusText, + } +} + +const createExports = ( + manifest: SSRManifest, + args: Args, +): { handler: CloudFrontRequestHandler } => { + const app = new NodeApp(manifest, false) + + const knownBinaryMediaTypes = new Set([ + ...KNOWN_BINARY_MEDIA_TYPES, + ...args.binaryMediaTypes, + ]) + + const handleRequest = async ( + request: Request, + matchNotFound: boolean, + def: CloudFrontRequestResult | CloudFrontResponseResult, + ): Promise => { + const routeData = app.match(request, { matchNotFound }) + + if (!routeData) { + return def + } + + const response = await app.render(request, routeData, args.locals) + const fnResponse = await createLambdaEdgeFunctionResponse( + app, + response, + knownBinaryMediaTypes, + ) + + return fnResponse + } + + const handler = async ( + event: CloudFrontRequestEvent | CloudFrontResponseEvent, + ): Promise => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const record = event.Records[0]!.cf + + const headers = new Headers( + Object.fromEntries( + Object.entries(record.request.headers).map(([key, value]) => [ + value[0]?.key ?? key, + value[0]?.value, + ]), + ) as HeadersInit, + ) + + const scheme = headers.get("x-forwarded-protocol") ?? "https" + const host = headers.get("x-forwarded-host") ?? headers.get("host") ?? "" + const qs = record.request.querystring.length + ? `?${record.request.querystring}` + : "" + + const requestInit: RequestInit = { + headers, + method: record.request.method, + } + + if ("response" in record) { + if (record.response.status === "404") { + const url = new URL(`404${qs}`, `https://${host}`) + + const request = new Request(url, requestInit) + + return handleRequest(request, true, record.response) + } + + return record.response + } + + const cloudFrontRequest = record.request as unknown as CloudFrontRequest + + const url = new URL( + `${cloudFrontRequest.uri.replace(/\/?index\.html$/u, "")}${qs}`, + `${scheme}://${host}`, + ) + + requestInit.body = cloudFrontRequest.body?.data + ? createRequestBody( + cloudFrontRequest.method, + cloudFrontRequest.body.data, + cloudFrontRequest.body.encoding, + ) + : undefined + + const request = new Request(url, requestInit) + + return handleRequest(request, false, cloudFrontRequest) + } + + return { + handler: withLogger(args.logger, handler), + } +} + +export { createExports } diff --git a/packages/adapter/src/lambda/handlers/ssr-stream.ts b/packages/adapter/src/lambda/handlers/ssr-stream.ts new file mode 100644 index 0000000..0bb8ec6 --- /dev/null +++ b/packages/adapter/src/lambda/handlers/ssr-stream.ts @@ -0,0 +1 @@ +export * from "./ssr.js" diff --git a/packages/adapter/src/lambda/handlers/ssr.ts b/packages/adapter/src/lambda/handlers/ssr.ts new file mode 100644 index 0000000..653346b --- /dev/null +++ b/packages/adapter/src/lambda/handlers/ssr.ts @@ -0,0 +1,177 @@ +import { Buffer } from "node:buffer" + +import { NodeApp } from "astro/app/node" +import type { + APIGatewayProxyEventV2, + APIGatewayProxyHandlerV2, +} from "aws-lambda" +import middy from "@middy/core" +import { type SSRManifest } from "astro" +import { polyfill } from "@astrojs/webapi" + +import type { Args } from "../../args.js" +import { + createReadableStream, + createRequestBody, + parseContentType, +} from "../helpers.js" +import { withLogger } from "../middleware.js" +import { KNOWN_BINARY_MEDIA_TYPES } from "../constants.js" +import { type CloudfrontResult } from "../types.js" + +polyfill(globalThis, { + exclude: "window document", +}) + +const createLambdaFunctionHeaders = ( + app: NodeApp, + response: Response, + knownBinaryMediaTypes: Set, +) => { + const cookies = [...app.setCookieHeaders(response)] + const intermediateHeaders = new Headers(response.headers) + + intermediateHeaders.delete("set-cookie") + + const headers = Object.fromEntries(intermediateHeaders.entries()) + const responseContentType = parseContentType(headers["content-type"]) + const isBase64Encoded = knownBinaryMediaTypes.has(responseContentType) + + return { + cookies, + headers, + isBase64Encoded, + responseContentType, + } +} + +const createAPIGatewayProxyEventV2ResponseBody = async ( + response: Response, + shouldStream: boolean, + isBase64Encoded: boolean, +) => { + if (shouldStream) { + return createReadableStream(await response.arrayBuffer()) + } + + return isBase64Encoded + ? Buffer.from(await response.arrayBuffer()).toString("base64") + : ((await response.text()) as string) +} + +const createLambdaFunctionResponse = async ( + app: NodeApp, + response: Response, + knownBinaryMediaTypes: Set, + shouldStream: boolean, +): Promise => { + const { cookies, headers, isBase64Encoded } = createLambdaFunctionHeaders( + app, + response, + knownBinaryMediaTypes, + ) + + const body = await createAPIGatewayProxyEventV2ResponseBody( + response, + shouldStream, + isBase64Encoded, + ) + + return { + body, + cookies, + headers, + isBase64Encoded, + statusCode: response.status, + } +} + +const createExports = ( + manifest: SSRManifest, + args: Args, +): { handler: APIGatewayProxyHandlerV2 } => { + const shouldStream = args.mode === "ssr-stream" + + const app = new NodeApp(manifest, shouldStream) + + const knownBinaryMediaTypes = new Set([ + ...KNOWN_BINARY_MEDIA_TYPES, + ...args.binaryMediaTypes, + ]) + + const handler: APIGatewayProxyHandlerV2 = async ( + event: APIGatewayProxyEventV2, + ) => { + const headers = new Headers() + + for (const [k, v] of Object.entries(event.headers)) { + if (v) headers.set(k, v) + } + + if (event.cookies) { + headers.set("cookie", event.cookies.join("; ")) + } + + const qs = event.rawQueryString.length ? `?${event.rawQueryString}` : "" + const url = new URL( + `${event.rawPath.replace(/\/?index\.html$/u, "")}${qs}`, + `https://${event.requestContext.domainName}`, + ) + + const request = new Request(url, { + body: createRequestBody( + event.requestContext.http.method, + event.body, + event.isBase64Encoded, + ), + headers, + method: event.requestContext.http.method, + }) + + let routeData = app.match(request, { matchNotFound: true }) + + if (!routeData) { + const request404 = new Request( + new URL(`404${qs}`, `https://${event.requestContext.domainName}`), + { + body: createRequestBody( + event.requestContext.http.method, + event.body, + event.isBase64Encoded, + ), + headers, + method: event.requestContext.http.method, + }, + ) + + routeData = app.match(request404, { matchNotFound: true }) + + if (!routeData) { + return { + body: shouldStream ? createReadableStream("Not found") : "Not found", + headers: { + "content-type": "text/plain", + }, + statusCode: 404, + } + } + } + + const response = await app.render(request, routeData, args.locals) + + return createLambdaFunctionResponse( + app, + response, + knownBinaryMediaTypes, + shouldStream, + ) + } + + return { + handler: middy({ streamifyResponse: shouldStream }).handler( + withLogger(args.logger, handler), + ), + } +} + +export { createExports } diff --git a/packages/adapter/src/lambda/helpers.ts b/packages/adapter/src/lambda/helpers.ts index 6f28d6f..30285b9 100644 --- a/packages/adapter/src/lambda/helpers.ts +++ b/packages/adapter/src/lambda/helpers.ts @@ -1,13 +1,16 @@ import { Buffer } from "node:buffer" - -import type { - APIGatewayProxyResultV2, - CloudFrontHeaders, - CloudFrontRequestResult, -} from "aws-lambda" -import type { NodeApp } from "astro/app/node" - -import { DISALLOWED_EDGE_HEADERS } from "./constants.js" +import { Readable } from "node:stream" + +const createReadableStream = (val: ArrayBuffer | string): Readable => + new Readable({ + // eslint-disable-next-line get-off-my-lawn/prefer-arrow-functions + read() { + // @ts-expect-error - TS doesn't like this but it is valid + this.push(Buffer.from(val)) + // eslint-disable-next-line unicorn/no-null + this.push(null) + }, + }) const parseContentType = (header?: string | null) => header?.split(";")[0] ?? "" @@ -17,116 +20,10 @@ const createRequestBody = ( isBase64Encoded: boolean | string, ) => { if (method !== "GET" && method !== "HEAD" && body) { - const encoding = - typeof isBase64Encoded === "boolean" - ? isBase64Encoded - ? "base64" - : "utf-8" - : (isBase64Encoded as BufferEncoding) - - return encoding === "base64" ? Buffer.from(body, encoding).toString() : body + return body && isBase64Encoded ? Buffer.from(body, "base64") : body } return undefined } -const createLambdaFunctionHeaders = ( - app: NodeApp, - response: Response, - knownBinaryMediaTypes: Set, -) => { - const cookies = [...app.setCookieHeaders(response)] - - response.headers.delete("Set-Cookie") - - const headers = Object.fromEntries(response.headers.entries()) - const responseContentType = parseContentType(headers["content-type"]) - const isBase64Encoded = knownBinaryMediaTypes.has(responseContentType) - - return { - cookies, - headers, - isBase64Encoded, - responseContentType, - } -} - -const createLambdaFunctionResponse = async ( - app: NodeApp, - response: Response, - knownBinaryMediaTypes: Set, -): Promise => { - const { cookies, headers, isBase64Encoded } = createLambdaFunctionHeaders( - app, - response, - knownBinaryMediaTypes, - ) - const body = isBase64Encoded - ? Buffer.from(await response.arrayBuffer()).toString("base64") - : ((await response.text()) as string) - - return { - body, - cookies, - headers, - isBase64Encoded, - statusCode: response.status, - } -} - -const createLambdaEdgeFunctionResponse = async ( - app: NodeApp, - response: Response, - knownBinaryMediaTypes: Set, -): Promise => { - const cookies = [...app.setCookieHeaders(response)] - - const responseHeadersObj = Object.fromEntries(response.headers.entries()) - - const headers: CloudFrontHeaders = { - ...Object.fromEntries( - Object.entries(responseHeadersObj) - .filter( - ([key]) => - !DISALLOWED_EDGE_HEADERS.some((reg) => reg.test(key.toLowerCase())), - ) - .map(([key, value]) => [ - key.toLowerCase(), - [ - { - key, - value, - }, - ], - ]), - ), - ...(cookies.length > 0 && { - "set-cookie": cookies.map((cookie) => ({ - key: "set-cookie", - value: cookie, - })), - }), - } - const responseContentType = parseContentType( - response.headers.get("content-type"), - ) - const bodyEncoding = knownBinaryMediaTypes.has(responseContentType) - ? "base64" - : "text" - - return { - body: (await response.text()) as string, - bodyEncoding, - headers, - status: String(response.status), - statusDescription: response.statusText, - } -} - -export { - parseContentType, - createRequestBody, - createLambdaFunctionResponse, - createLambdaEdgeFunctionResponse, - createLambdaFunctionHeaders, -} +export { parseContentType, createRequestBody, createReadableStream } diff --git a/packages/adapter/src/lambda/index.ts b/packages/adapter/src/lambda/index.ts deleted file mode 100644 index 11f4fdd..0000000 --- a/packages/adapter/src/lambda/index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { polyfill } from "@astrojs/webapi" -import type { SSRManifest } from "astro" -import { NodeApp } from "astro/app/node" - -import type { Args } from "../args.js" - -import { - createAPIGatewayProxyEventV2Handler, - createCloudFrontRequestEvent, -} from "./handler.js" - -polyfill(globalThis, { - exclude: "window document", -}) - -export const createExports = (manifest: SSRManifest, args: Args) => { - const app = new NodeApp(manifest) - - const { binaryMediaTypes, mode } = args - - const knownBinaryMediaTypes = new Set([ - "application/epub+zip", - "application/java-archive", - "application/msword", - "application/octet-stream", - "application/pdf", - "application/rtf", - "application/vnd.amazon.ebook", - "application/vnd.apple.installer+xml", - "application/vnd.ms-excel", - "application/vnd.ms-powerpoint", - "application/vnd.openxmlformats-officedocument.presentationml.presentation", - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "application/x-7z-compressed", - "application/x-apple-diskimage", - "application/x-bzip", - "application/x-bzip2", - "application/x-gzip", - "application/x-java-archive", - "application/x-rar-compressed", - "application/x-tar", - "application/x-zip", - "application/zip", - "audio/3gpp", - "audio/aac", - "audio/basic", - "audio/mpeg", - "audio/ogg", - "audio/wavaudio/webm", - "audio/x-aiff", - "audio/x-midi", - "audio/x-wav", - "font/otf", - "font/woff", - "font/woff2", - "image/bmp", - "image/gif", - "image/jpeg", - "image/png", - "image/tiff", - "image/vnd.microsoft.icon", - "image/webp", - "video/3gpp", - "video/mp2t", - "video/mpeg", - "video/ogg", - "video/quicktime", - "video/webm", - "video/x-msvideo", - ...binaryMediaTypes, - ]) - - const handler = - mode === "edge" - ? createCloudFrontRequestEvent(app, knownBinaryMediaTypes) - : createAPIGatewayProxyEventV2Handler(args, app, knownBinaryMediaTypes) - - return { handler } -} diff --git a/packages/adapter/src/lambda/logger.ts b/packages/adapter/src/lambda/logger.ts deleted file mode 100644 index 873722c..0000000 --- a/packages/adapter/src/lambda/logger.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { env } from "node:process" - -import { pino } from "pino" - -export const logger = pino({ - level: env.ASTRO_AWS_LOG_LEVEL ?? "fatal", -}) diff --git a/packages/adapter/src/lambda/middleware.ts b/packages/adapter/src/lambda/middleware.ts new file mode 100644 index 0000000..83b8ef3 --- /dev/null +++ b/packages/adapter/src/lambda/middleware.ts @@ -0,0 +1,39 @@ +import { type Handler } from "aws-lambda" + +type WithLoggerOptions = { + logErrors?: boolean + logEvent?: boolean + logResult?: boolean +} + +const withLogger = + ( + options: WithLoggerOptions | undefined, + handler: Handler, + ): Handler => + async (event, context, callback) => { + if (options?.logEvent) { + console.log("Lambda invocation event", { event }) + } + + let result: TResult + + try { + // @ts-expect-error - need void + result = await handler(event, context, callback) + } catch (error) { + if (options?.logErrors ?? true) { + console.log("Lambda invocation error", { error }) + } + + throw error as Error + } + + if (options?.logResult) { + console.log("Lambda invocation result", { result }) + } + + return result + } + +export { type WithLoggerOptions, withLogger } diff --git a/packages/adapter/src/lambda/types.d.ts b/packages/adapter/src/lambda/types.d.ts deleted file mode 100644 index 219c7c8..0000000 --- a/packages/adapter/src/lambda/types.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { Writable } from "node:stream" - -import type { - APIGatewayProxyEventV2, - APIGatewayProxyStructuredResultV2, -} from "aws-lambda" - -declare global { - type ResponseStream = Writable - - type AWSLambda = { - HttpResponseStream: { - from: ( - responseStream: ResponseStream, - metadata: Omit< - APIGatewayProxyStructuredResultV2, - "body" | "isBase64Encoded" - >, - ) => ResponseStream - } - streamifyResponse: ( - fn: ( - event: APIGatewayProxyEventV2, - stream: ResponseStream, - ) => Promise, - ) => (event: APIGatewayProxyEventV2) => Promise - } - - const awslambda: AWSLambda -} diff --git a/packages/adapter/src/lambda/types.ts b/packages/adapter/src/lambda/types.ts new file mode 100644 index 0000000..cf59ae8 --- /dev/null +++ b/packages/adapter/src/lambda/types.ts @@ -0,0 +1,10 @@ +import { type Readable } from "node:stream" + +import { type APIGatewayProxyStructuredResultV2 } from "aws-lambda" + +export type CloudfrontResult = Omit< + APIGatewayProxyStructuredResultV2, + "body" +> & { + body: Readable | string +} diff --git a/packages/adapter/src/log.ts b/packages/adapter/src/log.ts index 6521994..2aabc48 100644 --- a/packages/adapter/src/log.ts +++ b/packages/adapter/src/log.ts @@ -1,11 +1,33 @@ +import { env } from "node:process" + import { ADAPTER_NAME } from "./constants.js" +const LogLevels: Record = { + DEBUG: 1, + INFO: 2, + WARN: 3, + // eslint-disable-next-line sort-keys + ERROR: 4, +} + +const logLevel = LogLevels[env.ASTRO_AWS_LOG_LEVEL ?? "INFO"] ?? 2 + +const debug = (message?: unknown, ...optionalParams: unknown[]) => { + if (logLevel <= 1) { + console.debug(`[${ADAPTER_NAME}]`, message, ...optionalParams) + } +} + const warn = (message?: unknown, ...optionalParams: unknown[]) => { - console.warn(`[${ADAPTER_NAME}]`, message, ...optionalParams) + if (logLevel <= 3) { + console.warn(`[${ADAPTER_NAME}]`, message, ...optionalParams) + } } const log = (message?: unknown, ...optionalParams: unknown[]) => { - console.log(`[${ADAPTER_NAME}]`, message, ...optionalParams) + if (logLevel <= 2) { + console.log(`[${ADAPTER_NAME}]`, message, ...optionalParams) + } } -export { warn, log } +export { warn, log, debug } diff --git a/packages/adapter/src/shared.ts b/packages/adapter/src/shared.ts index 8fbf5ee..926aaa3 100644 --- a/packages/adapter/src/shared.ts +++ b/packages/adapter/src/shared.ts @@ -13,17 +13,13 @@ const DEFAULT_CONFIG: BuildOptions = { target: "node16", } -const createEsBuildConfig = ( - entryFile: string, - outDir: string, - { esBuildOptions = {} }: Args, -) => - mergeAndConcat(DEFAULT_CONFIG, esBuildOptions, { +const bundleEntry = async (entryFile: string, outDir: string, args: Args) => { + const config = mergeAndConcat(DEFAULT_CONFIG, args.esBuildOptions, { banner: { js: [ "import { createRequire as topLevelCreateRequire } from 'module';", "const require = topLevelCreateRequire(import.meta.url);", - esBuildOptions.banner?.js ?? "", + args.esBuildOptions.banner?.js ?? "", ].join(""), }, entryPoints: [entryFile], @@ -32,10 +28,9 @@ const createEsBuildConfig = ( outExtension: { ".js": ".mjs", }, - }) as BuildOptions + } satisfies BuildOptions) -const bundleEntry = async (entryFile: string, outDir: string, args: Args) => { - await build(createEsBuildConfig(entryFile, outDir, args)) + await build(config) } -export { createEsBuildConfig, bundleEntry } +export { bundleEntry } diff --git a/packages/constructs/package.json b/packages/constructs/package.json index 8206bfe..82d73a0 100644 --- a/packages/constructs/package.json +++ b/packages/constructs/package.json @@ -37,10 +37,10 @@ "devDependencies": { "@astro-aws/scripts": "workspace:^", "@types/node": "^18.18.0", - "aws-cdk-lib": "^2.100.0", + "aws-cdk-lib": "^2.109.0", "constructs": "^10.3.0", - "eslint": "^8.51.0", - "prettier": "^3.0.3", + "eslint": "^8.53.0", + "prettier": "^3.1.0", "typescript": "^5.2.2" }, "peerDependencies": { @@ -48,7 +48,7 @@ "constructs": "^10.1.0" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" }, "publishConfig": { "access": "public" diff --git a/packages/constructs/src/constructs/astro-aws-cloudfront-distribution.ts b/packages/constructs/src/constructs/astro-aws-cloudfront-distribution.ts index 74141dc..6828156 100644 --- a/packages/constructs/src/constructs/astro-aws-cloudfront-distribution.ts +++ b/packages/constructs/src/constructs/astro-aws-cloudfront-distribution.ts @@ -9,12 +9,12 @@ import { LambdaEdgeEventType, OriginRequestPolicy, ResponseHeadersPolicy, + ViewerProtocolPolicy, type BehaviorOptions, type DistributionProps, type EdgeLambda, type FunctionAssociation, type IOrigin, - ViewerProtocolPolicy, } from "aws-cdk-lib/aws-cloudfront" import { @@ -92,11 +92,17 @@ class AstroAWSCloudfrontDistribution extends AstroAWSBaseConstruct< this.props.cdk?.cloudfrontDistribution?.defaultBehavior?.edgeLambdas ?? [] if (this.metadata?.args.mode === "edge" && this.props.lambdaFunction) { - edgeLambdas.push({ - eventType: LambdaEdgeEventType.ORIGIN_REQUEST, - functionVersion: this.props.lambdaFunction.currentVersion, - includeBody: true, - }) + edgeLambdas.push( + { + eventType: LambdaEdgeEventType.ORIGIN_REQUEST, + functionVersion: this.props.lambdaFunction.currentVersion, + includeBody: true, + }, + { + eventType: LambdaEdgeEventType.ORIGIN_RESPONSE, + functionVersion: this.props.lambdaFunction.currentVersion, + }, + ) } this.#cloudfrontDistribution = new Distribution(this, "Distribution", { diff --git a/packages/constructs/src/constructs/astro-aws-origin.ts b/packages/constructs/src/constructs/astro-aws-origin.ts index db028b1..720eaaa 100644 --- a/packages/constructs/src/constructs/astro-aws-origin.ts +++ b/packages/constructs/src/constructs/astro-aws-origin.ts @@ -77,12 +77,19 @@ class AstroAWSOrigin extends AstroAWSBaseConstruct< if (this.metadata?.args.mode.includes("ssr")) { this.#originGroup = new OriginGroup({ ...this.props.cdk?.originGroup, - fallbackOrigin: this.#s3Origin, + fallbackOrigin: this.#lambdaFunctionOrigin, fallbackStatusCodes: [ + 400, + 403, 404, + 416, + 500, + 502, + 503, + 504, ...(this.props.cdk?.originGroup?.fallbackStatusCodes ?? []), ], - primaryOrigin: this.#lambdaFunctionOrigin, + primaryOrigin: this.#s3Origin, }) this.#origin = this.#originGroup diff --git a/packages/constructs/src/constructs/astro-aws.ts b/packages/constructs/src/constructs/astro-aws.ts index 5f0a8e8..3c3fe13 100644 --- a/packages/constructs/src/constructs/astro-aws.ts +++ b/packages/constructs/src/constructs/astro-aws.ts @@ -33,7 +33,7 @@ import type { import { AstroAWSCloudfrontDistribution } from "./astro-aws-cloudfront-distribution.js" type AstroAWSCdkProps = { - lambdaFunction?: Omit + lambdaFunction?: Omit } type AstroAWSProps = { @@ -128,20 +128,23 @@ class AstroAWS extends AstroAWSBaseConstruct { const { environment = {}, architecture, + runtime = Runtime.NODEJS_18_X, + memorySize = 512, + description = "SSR Lambda Function", ...givenProps } = this.props.cdk?.lambdaFunction ?? {} this.#lambdaFunction = new Function(this, "Function", { - description: "SSR Lambda Function", - memorySize: 512, - runtime: Runtime.NODEJS_18_X, ...givenProps, architecture: this.metadata?.args.mode === "edge" ? Architecture.X86_64 : architecture, code: Code.fromAsset(resolve(this.distDir, "lambda")), + description, handler: "entry.handler", + memorySize, + runtime, }) Object.entries(environment).forEach(([key, value]) => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 956a1ed..3571eb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,28 +18,28 @@ importers: version: 2.26.2 "@lshay/eslint-config": specifier: ^0.2.5 - version: 0.2.5(eslint@8.51.0)(typescript@5.2.2) + version: 0.2.5(eslint@8.53.0)(typescript@5.2.2) "@lshay/prettier-config": specifier: ^0.6.1 - version: 0.6.1(prettier@3.0.3) + version: 0.6.1(prettier@3.1.0) "@rushstack/eslint-patch": specifier: ^1.5.1 version: 1.5.1 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0) + version: 3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0) eslint-plugin-import: - specifier: ^2.28.1 - version: 2.28.1(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + specifier: ^2.29.0 + version: 2.29.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 turbo: - specifier: ^1.10.15 - version: 1.10.15 + specifier: ^1.10.16 + version: 1.10.16 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -47,11 +47,11 @@ importers: apps/docs: dependencies: "@astrojs/starlight": - specifier: ^0.11.0 - version: 0.11.0(astro@3.2.4) + specifier: ^0.12.0 + version: 0.12.0(astro@3.5.5) astro: - specifier: ^3.2.4 - version: 3.2.4(@types/node@18.18.4) + specifier: ^3.5.5 + version: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) sharp: specifier: ^0.32.6 version: 0.32.6 @@ -60,11 +60,11 @@ importers: specifier: workspace:^ version: link:../../packages/adapter eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -78,26 +78,26 @@ importers: specifier: workspace:^ version: link:../docs aws-cdk: - specifier: ^2.100.0 - version: 2.100.0 + specifier: ^2.109.0 + version: 2.109.0 aws-cdk-lib: - specifier: ^2.100.0 - version: 2.100.0(constructs@10.3.0) + specifier: ^2.109.0 + version: 2.109.0(constructs@10.3.0) constructs: specifier: ^10.3.0 version: 10.3.0 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 typescript: specifier: ^5.2.2 version: 5.2.2 workspace-tools: - specifier: ^0.35.2 - version: 0.35.2 + specifier: ^0.36.3 + version: 0.36.3 devDependencies: "@astro-aws/scripts": specifier: workspace:^ @@ -107,41 +107,47 @@ importers: version: 18.18.4 eslint-config-get-off-my-lawn: specifier: ^7.2.0 - version: 7.2.0(eslint@8.51.0) + version: 7.2.0(eslint@8.53.0) examples/base: dependencies: "@astrojs/tailwind": specifier: ^5.0.2 - version: 5.0.2(astro@3.2.4)(tailwindcss@3.3.3) + version: 5.0.2(astro@3.5.5)(tailwindcss@3.3.5) "@faker-js/faker": - specifier: ^8.1.0 - version: 8.1.0 + specifier: ^8.3.1 + version: 8.3.1 + "@middy/core": + specifier: ^5.0.1 + version: 5.0.1 astro: - specifier: ^3.2.4 - version: 3.2.4(@types/node@18.18.4) + specifier: ^3.5.5 + version: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) daisyui: - specifier: ^3.9.2 - version: 3.9.2 + specifier: ^4.1.1 + version: 4.1.1(postcss@8.4.29) + http-status-codes: + specifier: ^2.3.0 + version: 2.3.0 tailwindcss: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.3.5 + version: 3.3.5 devDependencies: "@astro-aws/adapter": specifier: workspace:^ version: link:../../packages/adapter "@astrojs/check": - specifier: ^0.2.0 - version: 0.2.0(prettier@3.0.3)(typescript@5.2.2) + specifier: ^0.3.1 + version: 0.3.1(prettier@3.1.0)(typescript@5.2.2) eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 npm-run-all: specifier: ^4.1.5 version: 4.1.5 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -154,40 +160,46 @@ importers: "@astrojs/webapi": specifier: ^2.2.0 version: 2.2.0 + "@middy/core": + specifier: ^5.0.1 + version: 5.0.1 esbuild: - specifier: ^0.19.4 - version: 0.19.4 + specifier: ^0.19.5 + version: 0.19.5 + http-status-codes: + specifier: ^2.3.0 + version: 2.3.0 merge-anything: specifier: ^5.1.7 version: 5.1.7 pino: - specifier: ^8.16.0 - version: 8.16.0 + specifier: ^8.16.2 + version: 8.16.2 devDependencies: "@astro-aws/scripts": specifier: workspace:^ version: link:../../scripts "@faker-js/faker": - specifier: ^8.1.0 - version: 8.1.0 + specifier: ^8.3.1 + version: 8.3.1 "@types/aws-lambda": - specifier: ^8.10.124 - version: 8.10.124 + specifier: ^8.10.126 + version: 8.10.126 "@types/node": specifier: ^18.18.0 version: 18.18.4 astro: - specifier: ^3.2.4 - version: 3.2.4(@types/node@18.18.4) + specifier: ^3.5.5 + version: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) aws-lambda: specifier: ^1.0.7 version: 1.0.7 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -204,17 +216,17 @@ importers: specifier: ^18.18.0 version: 18.18.4 aws-cdk-lib: - specifier: ^2.100.0 - version: 2.100.0(constructs@10.3.0) + specifier: ^2.109.0 + version: 2.109.0(constructs@10.3.0) constructs: specifier: ^10.3.0 version: 10.3.0 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -222,30 +234,30 @@ importers: scripts: dependencies: commander: - specifier: ^11.0.0 - version: 11.0.0 + specifier: ^11.1.0 + version: 11.1.0 cosmiconfig: specifier: ^8.3.6 version: 8.3.6(typescript@5.2.2) esbuild: - specifier: ^0.19.4 - version: 0.19.4 + specifier: ^0.19.5 + version: 0.19.5 globby: - specifier: ^13.2.2 - version: 13.2.2 + specifier: ^14.0.0 + version: 14.0.0 devDependencies: "@types/node": specifier: ^18.18.0 version: 18.18.4 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 tsx: - specifier: ^3.13.0 - version: 3.13.0 + specifier: ^4.1.2 + version: 4.1.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -276,16 +288,16 @@ packages: "@jridgewell/gen-mapping": 0.3.3 "@jridgewell/trace-mapping": 0.3.19 - /@astrojs/check@0.2.0(prettier@3.0.3)(typescript@5.2.2): + /@astrojs/check@0.3.1(prettier@3.1.0)(typescript@5.2.2): resolution: { - integrity: sha512-QS8TBRNrxBNEKm9hsP4xI+ao2XJ5JZfMZ1GpHqM7HCGPwWe5oWSPtDXGM8zutZ6kH3ilK0k1euqkzxrhcTP1Cg==, + integrity: sha512-3LjEUvh7Z4v9NPokaqKMXQ0DwnSXfmtcyAuWVTjNt9yzjv54SxykobV5CTOB3TIko+Rqg59ejamJBxaJN6fvkw==, } hasBin: true peerDependencies: typescript: ^5.0.0 dependencies: - "@astrojs/language-server": 2.3.3(prettier@3.0.3)(typescript@5.2.2) + "@astrojs/language-server": 2.5.2(prettier@3.1.0)(typescript@5.2.2) chokidar: 3.5.3 fast-glob: 3.3.1 kleur: 4.1.5 @@ -296,13 +308,6 @@ packages: - prettier-plugin-astro dev: true - /@astrojs/compiler@1.5.7: - resolution: - { - integrity: sha512-dFU7GAMbpTUGPkRoCoMQrGFlTe3qIiQMSOxIXp/nB1Do4My9uogjEmBHdR5Cwr4i6rc5/1R3Od9v8kU/pkHXGQ==, - } - dev: true - /@astrojs/compiler@1.8.2: resolution: { @@ -310,10 +315,10 @@ packages: } dev: false - /@astrojs/compiler@2.1.0: + /@astrojs/compiler@2.3.2: resolution: { - integrity: sha512-Mp+qrNhly+27bL/Zq8lGeUY+YrdoU0eDfIlAeGIPrzt0PnI/jGpvPUdCaugv4zbCrDkOUScFfcbeEiYumrdJnw==, + integrity: sha512-jkY7bCVxl27KeZsSxIZ+pqACe+g8VQUdTiSJRj/sXYdIaZlW3ZMq4qF2M17P/oDt3LBq0zLNwQr4Cb7fSpRGxQ==, } /@astrojs/internal-helpers@0.2.1: @@ -322,10 +327,10 @@ packages: integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==, } - /@astrojs/language-server@2.3.3(prettier@3.0.3)(typescript@5.2.2): + /@astrojs/language-server@2.5.2(prettier@3.1.0)(typescript@5.2.2): resolution: { - integrity: sha512-ObIjAdjKJFHsKCmaFHc6tbpomMkX1580UbxbgnCr6zEpIZuQobH/zlKwIaSDcmQOQtt8ICs921AYTM+kOg8p6w==, + integrity: sha512-O5SMzoQ65wSxA1KygreI9UJYmHpgt15bSYBxceHwqX7OCDM4Ek8mr6mZn45LGDtwM3dp1uup7kp8exfRPwIFbA==, } hasBin: true peerDependencies: @@ -337,30 +342,30 @@ packages: prettier-plugin-astro: optional: true dependencies: - "@astrojs/compiler": 1.5.7 + "@astrojs/compiler": 2.3.2 "@jridgewell/sourcemap-codec": 1.4.15 - "@volar/kit": 1.10.1(typescript@5.2.2) - "@volar/language-core": 1.10.1 - "@volar/language-server": 1.10.1 - "@volar/language-service": 1.10.1 - "@volar/source-map": 1.10.1 - "@volar/typescript": 1.10.1 + "@volar/kit": 1.10.10(typescript@5.2.2) + "@volar/language-core": 1.10.10 + "@volar/language-server": 1.10.10 + "@volar/language-service": 1.10.10 + "@volar/source-map": 1.10.10 + "@volar/typescript": 1.10.10 fast-glob: 3.3.1 muggle-string: 0.3.1 - prettier: 3.0.3 - volar-service-css: 0.0.13(@volar/language-service@1.10.1) - volar-service-emmet: 0.0.13(@volar/language-service@1.10.1) - volar-service-html: 0.0.13(@volar/language-service@1.10.1) - volar-service-prettier: 0.0.13(@volar/language-service@1.10.1)(prettier@3.0.3) - volar-service-typescript: 0.0.13(@volar/language-service@1.10.1)(@volar/typescript@1.10.1) - volar-service-typescript-twoslash-queries: 0.0.13(@volar/language-service@1.10.1) + prettier: 3.1.0 + volar-service-css: 0.0.16(@volar/language-service@1.10.10) + volar-service-emmet: 0.0.16(@volar/language-service@1.10.10) + volar-service-html: 0.0.16(@volar/language-service@1.10.10) + volar-service-prettier: 0.0.16(@volar/language-service@1.10.10)(prettier@3.1.0) + volar-service-typescript: 0.0.16(@volar/language-service@1.10.10)(@volar/typescript@1.10.10) + volar-service-typescript-twoslash-queries: 0.0.16(@volar/language-service@1.10.10) vscode-html-languageservice: 5.1.0 - vscode-uri: 3.0.7 + vscode-uri: 3.0.8 transitivePeerDependencies: - typescript dev: true - /@astrojs/markdown-remark@3.2.1(astro@3.2.4): + /@astrojs/markdown-remark@3.2.1(astro@3.5.5): resolution: { integrity: sha512-Z4YNMRtgFZeHhB29uCZl0B9MbMZddW9ZKCNucapoysbvygbDFF1gGtqpVnf+Lyv3rUBHwM/J5qWB2MSZuTuz1g==, @@ -369,7 +374,7 @@ packages: astro: ^3.2.3 dependencies: "@astrojs/prism": 3.0.0 - astro: 3.2.4(@types/node@18.18.4) + astro: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) github-slugger: 2.0.0 import-meta-resolve: 3.0.0 mdast-util-definitions: 6.0.0 @@ -385,8 +390,35 @@ packages: vfile: 5.3.7 transitivePeerDependencies: - supports-color + dev: false - /@astrojs/mdx@1.1.1(astro@3.2.4): + /@astrojs/markdown-remark@3.5.0(astro@3.5.5): + resolution: + { + integrity: sha512-q7vdIqzYhxpsfghg2YmkmSXCfp4w7lBTYP+SSHw89wVhC5Riltr3u8w2otBRxNLSByNi+ht/gGkFC23Shetytw==, + } + peerDependencies: + astro: ^3.0.0 + dependencies: + "@astrojs/prism": 3.0.0 + astro: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) + github-slugger: 2.0.0 + import-meta-resolve: 3.0.0 + mdast-util-definitions: 6.0.0 + rehype-raw: 6.1.1 + rehype-stringify: 9.0.4 + remark-gfm: 3.0.1 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + remark-smartypants: 2.0.0 + shikiji: 0.6.13 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + + /@astrojs/mdx@1.1.1(astro@3.5.5): resolution: { integrity: sha512-3dfL12ZqI6NCjx0iVOYVSyljlVgsxds5mOhe78xoCVjyqSpZZsxzz4Dt5WfGxDon2nc2bD6XGiZ2PIy8fmX6NQ==, @@ -395,10 +427,10 @@ packages: peerDependencies: astro: ^3.2.3 dependencies: - "@astrojs/markdown-remark": 3.2.1(astro@3.2.4) + "@astrojs/markdown-remark": 3.2.1(astro@3.5.5) "@mdx-js/mdx": 2.3.0 acorn: 8.10.0 - astro: 3.2.4(@types/node@18.18.4) + astro: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) es-module-lexer: 1.3.1 estree-util-visit: 1.2.1 github-slugger: 2.0.0 @@ -434,21 +466,21 @@ packages: zod: 3.21.1 dev: false - /@astrojs/starlight@0.11.0(astro@3.2.4): + /@astrojs/starlight@0.12.0(astro@3.5.5): resolution: { - integrity: sha512-ZnYB1AHetRujy25fSW4uvJTn2ry8nFspMCySWkeB1VT7QzTTgol9y19o1HTWVessViJhlavayHAjd42Pru1rww==, + integrity: sha512-WPLpq82vbTznNfQjtdLBjKGuDsQE3tpPxFqosjxX+pSeMES/Cz5Dmzla78ej7xWIp7zjovPqkNytbC1EaeOMwA==, } peerDependencies: astro: ^3.2.0 dependencies: - "@astrojs/mdx": 1.1.1(astro@3.2.4) + "@astrojs/mdx": 1.1.1(astro@3.5.5) "@astrojs/sitemap": 3.0.0 "@pagefind/default-ui": 1.0.3 "@types/mdast": 3.0.12 - astro: 3.2.4(@types/node@18.18.4) + astro: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) bcp-47: 2.1.0 - execa: 7.2.0 + execa: 8.0.1 hast-util-select: 5.0.5 hastscript: 7.2.0 pagefind: 1.0.3 @@ -462,7 +494,7 @@ packages: - supports-color dev: false - /@astrojs/tailwind@5.0.2(astro@3.2.4)(tailwindcss@3.3.3): + /@astrojs/tailwind@5.0.2(astro@3.5.5)(tailwindcss@3.3.5): resolution: { integrity: sha512-oXqeqmBlkQmsltrsU9nEWeXOtrZIAHW8dcmX7BCdrjzPnU6dPwWzAwhddNQ9ihKiWwsLnlbwQZIo2CDigcZlIA==, @@ -471,19 +503,19 @@ packages: astro: ^3.2.4 tailwindcss: ^3.0.24 dependencies: - astro: 3.2.4(@types/node@18.18.4) + astro: 3.5.5(@types/node@18.18.4)(typescript@5.2.2) autoprefixer: 10.4.16(postcss@8.4.29) postcss: 8.4.29 postcss-load-config: 4.0.1(postcss@8.4.29) - tailwindcss: 3.3.3 + tailwindcss: 3.3.5 transitivePeerDependencies: - ts-node dev: false - /@astrojs/telemetry@3.0.3: + /@astrojs/telemetry@3.0.4: resolution: { - integrity: sha512-j19Cf5mfyLt9hxgJ9W/FMdAA5Lovfp7/CINNB/7V71GqvygnL7KXhRC3TzfB+PsVQcBtgWZzCXhUWRbmJ64Raw==, + integrity: sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==, } engines: { node: ">=18.14.1" } dependencies: @@ -506,10 +538,10 @@ packages: undici: 5.24.0 dev: false - /@aws-cdk/asset-awscli-v1@2.2.200: + /@aws-cdk/asset-awscli-v1@2.2.201: resolution: { - integrity: sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg==, + integrity: sha512-INZqcwDinNaIdb5CtW3ez5s943nX5stGBQS6VOP2JDlOFP81hM3fds/9NDknipqfUkZM43dx+HgVvkXYXXARCQ==, } /@aws-cdk/asset-kubectl-v20@2.1.2: @@ -591,7 +623,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.17.0(@babel/core@7.17.0)(eslint@8.51.0): + /@babel/eslint-parser@7.17.0(@babel/core@7.17.0)(eslint@8.53.0): resolution: { integrity: sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==, @@ -602,7 +634,7 @@ packages: eslint: ^7.5.0 || ^8.0.0 dependencies: "@babel/core": 7.17.0 - eslint: 8.51.0 + eslint: 8.53.0 eslint-scope: 5.1.1 eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -959,12 +991,6 @@ packages: "@babel/helper-validator-identifier": 7.22.15 to-fast-properties: 2.0.0 - /@balena/dockerignore@1.0.2: - resolution: - { - integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==, - } - /@changesets/apply-release-plan@6.1.4: resolution: { @@ -1225,6 +1251,16 @@ packages: prettier: 2.8.8 dev: false + /@datastream/core@0.0.35: + resolution: + { + integrity: sha512-jmKFcDTYqtDy8DHPahaheg3MlLBiQboYX4jYX8oxE1tO5x7cfLl5M6bqR/o46RCEFZ3M9yMVfEEh0hy5raErEw==, + } + engines: { node: ">=18" } + dependencies: + cloneable-readable: 3.0.0 + dev: false + /@emmetio/abbreviation@2.3.3: resolution: { @@ -1261,10 +1297,10 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.19.4: + /@esbuild/android-arm64@0.19.5: resolution: { - integrity: sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==, + integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==, } engines: { node: ">=12" } cpu: [arm64] @@ -1283,10 +1319,10 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.19.4: + /@esbuild/android-arm@0.19.5: resolution: { - integrity: sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==, + integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==, } engines: { node: ">=12" } cpu: [arm] @@ -1305,10 +1341,10 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.19.4: + /@esbuild/android-x64@0.19.5: resolution: { - integrity: sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==, + integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==, } engines: { node: ">=12" } cpu: [x64] @@ -1327,10 +1363,10 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.19.4: + /@esbuild/darwin-arm64@0.19.5: resolution: { - integrity: sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==, + integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==, } engines: { node: ">=12" } cpu: [arm64] @@ -1349,10 +1385,10 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.19.4: + /@esbuild/darwin-x64@0.19.5: resolution: { - integrity: sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==, + integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==, } engines: { node: ">=12" } cpu: [x64] @@ -1371,10 +1407,10 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.19.4: + /@esbuild/freebsd-arm64@0.19.5: resolution: { - integrity: sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==, + integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==, } engines: { node: ">=12" } cpu: [arm64] @@ -1393,10 +1429,10 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.19.4: + /@esbuild/freebsd-x64@0.19.5: resolution: { - integrity: sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==, + integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==, } engines: { node: ">=12" } cpu: [x64] @@ -1415,10 +1451,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.19.4: + /@esbuild/linux-arm64@0.19.5: resolution: { - integrity: sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==, + integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==, } engines: { node: ">=12" } cpu: [arm64] @@ -1437,10 +1473,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.19.4: + /@esbuild/linux-arm@0.19.5: resolution: { - integrity: sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==, + integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==, } engines: { node: ">=12" } cpu: [arm] @@ -1459,10 +1495,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.19.4: + /@esbuild/linux-ia32@0.19.5: resolution: { - integrity: sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==, + integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==, } engines: { node: ">=12" } cpu: [ia32] @@ -1481,10 +1517,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.19.4: + /@esbuild/linux-loong64@0.19.5: resolution: { - integrity: sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==, + integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==, } engines: { node: ">=12" } cpu: [loong64] @@ -1503,10 +1539,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.19.4: + /@esbuild/linux-mips64el@0.19.5: resolution: { - integrity: sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==, + integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==, } engines: { node: ">=12" } cpu: [mips64el] @@ -1525,10 +1561,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.19.4: + /@esbuild/linux-ppc64@0.19.5: resolution: { - integrity: sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==, + integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==, } engines: { node: ">=12" } cpu: [ppc64] @@ -1547,10 +1583,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.19.4: + /@esbuild/linux-riscv64@0.19.5: resolution: { - integrity: sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==, + integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==, } engines: { node: ">=12" } cpu: [riscv64] @@ -1569,10 +1605,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.19.4: + /@esbuild/linux-s390x@0.19.5: resolution: { - integrity: sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==, + integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==, } engines: { node: ">=12" } cpu: [s390x] @@ -1591,10 +1627,10 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.19.4: + /@esbuild/linux-x64@0.19.5: resolution: { - integrity: sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==, + integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==, } engines: { node: ">=12" } cpu: [x64] @@ -1613,10 +1649,10 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.19.4: + /@esbuild/netbsd-x64@0.19.5: resolution: { - integrity: sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==, + integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==, } engines: { node: ">=12" } cpu: [x64] @@ -1635,10 +1671,10 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.19.4: + /@esbuild/openbsd-x64@0.19.5: resolution: { - integrity: sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==, + integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==, } engines: { node: ">=12" } cpu: [x64] @@ -1657,10 +1693,10 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.19.4: + /@esbuild/sunos-x64@0.19.5: resolution: { - integrity: sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==, + integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==, } engines: { node: ">=12" } cpu: [x64] @@ -1679,10 +1715,10 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.19.4: + /@esbuild/win32-arm64@0.19.5: resolution: { - integrity: sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==, + integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==, } engines: { node: ">=12" } cpu: [arm64] @@ -1701,10 +1737,10 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.19.4: + /@esbuild/win32-ia32@0.19.5: resolution: { - integrity: sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==, + integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==, } engines: { node: ">=12" } cpu: [ia32] @@ -1723,10 +1759,10 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.19.4: + /@esbuild/win32-x64@0.19.5: resolution: { - integrity: sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==, + integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==, } engines: { node: ">=12" } cpu: [x64] @@ -1734,7 +1770,7 @@ packages: requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): resolution: { integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, @@ -1743,7 +1779,7 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.53.0 eslint-visitor-keys: 3.4.3 /@eslint-community/regexpp@4.8.1: @@ -1753,10 +1789,10 @@ packages: } engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - /@eslint/eslintrc@2.1.2: + /@eslint/eslintrc@2.1.3: resolution: { - integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==, + integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==, } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: @@ -1772,28 +1808,28 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/js@8.51.0: + /@eslint/js@8.53.0: resolution: { - integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==, + integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==, } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - /@faker-js/faker@8.1.0: + /@faker-js/faker@8.3.1: resolution: { - integrity: sha512-38DT60rumHfBYynif3lmtxMqMqmsOQIxQgEuPZxCk2yUYN0eqWpTACgxi0VpidvsJB8CRxCpvP7B3anK85FjtQ==, + integrity: sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==, } engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: ">=6.14.13" } - /@humanwhocodes/config-array@0.11.11: + /@humanwhocodes/config-array@0.11.13: resolution: { - integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==, + integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==, } engines: { node: ">=10.10.0" } dependencies: - "@humanwhocodes/object-schema": 1.2.1 + "@humanwhocodes/object-schema": 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1806,10 +1842,10 @@ packages: } engines: { node: ">=12.22" } - /@humanwhocodes/object-schema@1.2.1: + /@humanwhocodes/object-schema@2.0.1: resolution: { - integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, + integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==, } /@isaacs/cliui@8.0.2: @@ -1877,7 +1913,7 @@ packages: "@jridgewell/resolve-uri": 3.1.1 "@jridgewell/sourcemap-codec": 1.4.15 - /@lshay/eslint-config@0.2.5(eslint@8.51.0)(typescript@5.2.2): + /@lshay/eslint-config@0.2.5(eslint@8.53.0)(typescript@5.2.2): resolution: { integrity: sha512-v+2JeLXw3FM4cP44pXp6nQ8VqRFvxPHfIiJdbVAXvHhhkMmwpbasVIJDDF5C5gOUKNLK64LkAeC3g7PtSsNvPA==, @@ -1887,12 +1923,12 @@ packages: eslint: 8.x dependencies: "@next/eslint-plugin-next": 13.2.4 - "@typescript-eslint/eslint-plugin": 5.55.0(@typescript-eslint/parser@5.55.0)(eslint@8.51.0)(typescript@5.2.2) - "@typescript-eslint/parser": 5.55.0(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 - eslint-config-get-off-my-lawn: 7.2.0(eslint@8.51.0) - eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.51.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.51.0) + "@typescript-eslint/eslint-plugin": 5.55.0(@typescript-eslint/parser@5.55.0)(eslint@8.53.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.55.0(eslint@8.53.0)(typescript@5.2.2) + eslint: 8.53.0 + eslint-config-get-off-my-lawn: 7.2.0(eslint@8.53.0) + eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.53.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.53.0) transitivePeerDependencies: - eslint-import-resolver-webpack - jest @@ -1900,7 +1936,7 @@ packages: - typescript dev: false - /@lshay/prettier-config@0.6.1(prettier@3.0.3): + /@lshay/prettier-config@0.6.1(prettier@3.1.0): resolution: { integrity: sha512-DWMN6W1PCg7LhlQPHd5jGU64yTlkediMxQnT2VfF8yuoZa2Nesk9c3Y95bQpN+dayP6bZGsgFSMdlF8YKhlqVw==, @@ -1910,13 +1946,13 @@ packages: prettier: 2.x || 3.x dependencies: merge-anything: 5.1.7 - prettier: 3.0.3 + prettier: 3.1.0 prettier-plugin-astro: 0.12.0 - prettier-plugin-jsdoc: 1.1.1(prettier@3.0.3) - prettier-plugin-packagejson: 2.4.5(prettier@3.0.3) - prettier-plugin-sh: 0.13.1(prettier@3.0.3) - prettier-plugin-sort-json: 3.1.0(prettier@3.0.3) - prettier-plugin-tailwindcss: 0.5.5(prettier-plugin-astro@0.12.0)(prettier-plugin-jsdoc@1.1.1)(prettier@3.0.3) + prettier-plugin-jsdoc: 1.1.1(prettier@3.1.0) + prettier-plugin-packagejson: 2.4.5(prettier@3.1.0) + prettier-plugin-sh: 0.13.1(prettier@3.1.0) + prettier-plugin-sort-json: 3.1.0(prettier@3.1.0) + prettier-plugin-tailwindcss: 0.5.5(prettier-plugin-astro@0.12.0)(prettier-plugin-jsdoc@1.1.1)(prettier@3.1.0) transitivePeerDependencies: - "@ianvs/prettier-plugin-sort-imports" - "@prettier/plugin-pug" @@ -1987,6 +2023,16 @@ packages: - supports-color dev: false + /@middy/core@5.0.1: + resolution: + { + integrity: sha512-/Ax7xXmQjlO/YBiVgSkqwWeiS9uPHNxlJy/Upr1DmqExBG7IOs0GGxIfce8G0brS+Hb2oUJS/X3F2SokVJCNSQ==, + } + engines: { node: ">=18" } + dependencies: + "@datastream/core": 0.0.35 + dev: false + /@next/eslint-plugin-next@12.0.10: resolution: { @@ -2138,6 +2184,14 @@ packages: } dev: true + /@sindresorhus/merge-streams@1.0.0: + resolution: + { + integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==, + } + engines: { node: ">=18" } + dev: false + /@types/acorn@4.0.6: resolution: { @@ -2147,10 +2201,10 @@ packages: "@types/estree": 1.0.1 dev: false - /@types/aws-lambda@8.10.124: + /@types/aws-lambda@8.10.126: resolution: { - integrity: sha512-PHqK0SuAkFS3tZjceqRXecxxrWIN3VqTicuialtK2wZmvBy7H9WGc3u3+wOgaZB7N8SpSXDpWk9qa7eorpTStg==, + integrity: sha512-5eh4ffLdGYgGYI1Xr6W5L4IVse4RR7L2ns5OVUXA52nW5GFapIcGMcCzHAIMMOdpcQs3aGVxbvFlJNZH6IpgEQ==, } dev: true @@ -2238,6 +2292,14 @@ packages: dependencies: "@types/unist": 2.0.8 + /@types/hast@3.0.3: + resolution: + { + integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==, + } + dependencies: + "@types/unist": 3.0.0 + /@types/is-ci@3.0.0: resolution: { @@ -2259,12 +2321,6 @@ packages: integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, } - /@types/json5@0.0.30: - resolution: - { - integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==, - } - /@types/mdast@3.0.12: resolution: { @@ -2341,12 +2397,6 @@ packages: integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==, } - /@types/resolve@1.20.2: - resolution: - { - integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==, - } - /@types/sax@1.2.4: resolution: { @@ -2374,7 +2424,7 @@ packages: integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==, } - /@typescript-eslint/eslint-plugin@5.10.2(@typescript-eslint/parser@5.10.2)(eslint@8.51.0)(typescript@4.5.5): + /@typescript-eslint/eslint-plugin@5.10.2(@typescript-eslint/parser@5.10.2)(eslint@8.53.0)(typescript@4.5.5): resolution: { integrity: sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==, @@ -2388,12 +2438,12 @@ packages: typescript: optional: true dependencies: - "@typescript-eslint/parser": 5.10.2(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.10.2(eslint@8.53.0)(typescript@5.2.2) "@typescript-eslint/scope-manager": 5.10.2 - "@typescript-eslint/type-utils": 5.10.2(eslint@8.51.0)(typescript@4.5.5) - "@typescript-eslint/utils": 5.10.2(eslint@8.51.0)(typescript@4.5.5) + "@typescript-eslint/type-utils": 5.10.2(eslint@8.53.0)(typescript@4.5.5) + "@typescript-eslint/utils": 5.10.2(eslint@8.53.0)(typescript@4.5.5) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.53.0 functional-red-black-tree: 1.0.1 ignore: 5.2.4 regexpp: 3.2.0 @@ -2403,7 +2453,7 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/eslint-plugin@5.55.0(@typescript-eslint/parser@5.55.0)(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@5.55.0(@typescript-eslint/parser@5.55.0)(eslint@8.53.0)(typescript@5.2.2): resolution: { integrity: sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg==, @@ -2418,12 +2468,12 @@ packages: optional: true dependencies: "@eslint-community/regexpp": 4.8.1 - "@typescript-eslint/parser": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.55.0(eslint@8.53.0)(typescript@5.2.2) "@typescript-eslint/scope-manager": 5.55.0 - "@typescript-eslint/type-utils": 5.55.0(eslint@8.51.0)(typescript@5.2.2) - "@typescript-eslint/utils": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/type-utils": 5.55.0(eslint@8.53.0)(typescript@5.2.2) + "@typescript-eslint/utils": 5.55.0(eslint@8.53.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.53.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -2434,7 +2484,7 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@5.10.2(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/parser@5.10.2(eslint@8.53.0)(typescript@5.2.2): resolution: { integrity: sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==, @@ -2451,12 +2501,12 @@ packages: "@typescript-eslint/types": 5.10.2 "@typescript-eslint/typescript-estree": 5.10.2(typescript@5.2.2) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.53.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@5.55.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/parser@5.55.0(eslint@8.53.0)(typescript@5.2.2): resolution: { integrity: sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==, @@ -2473,7 +2523,7 @@ packages: "@typescript-eslint/types": 5.55.0 "@typescript-eslint/typescript-estree": 5.55.0(typescript@5.2.2) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.53.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -2508,7 +2558,7 @@ packages: "@typescript-eslint/types": 5.62.0 "@typescript-eslint/visitor-keys": 5.62.0 - /@typescript-eslint/type-utils@5.10.2(eslint@8.51.0)(typescript@4.5.5): + /@typescript-eslint/type-utils@5.10.2(eslint@8.53.0)(typescript@4.5.5): resolution: { integrity: sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==, @@ -2521,15 +2571,15 @@ packages: typescript: optional: true dependencies: - "@typescript-eslint/utils": 5.10.2(eslint@8.51.0)(typescript@4.5.5) + "@typescript-eslint/utils": 5.10.2(eslint@8.53.0)(typescript@4.5.5) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.53.0 tsutils: 3.21.0(typescript@4.5.5) typescript: 4.5.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/type-utils@5.55.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@5.55.0(eslint@8.53.0)(typescript@5.2.2): resolution: { integrity: sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA==, @@ -2543,9 +2593,9 @@ packages: optional: true dependencies: "@typescript-eslint/typescript-estree": 5.55.0(typescript@5.2.2) - "@typescript-eslint/utils": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/utils": 5.55.0(eslint@8.53.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.53.0 tsutils: 3.21.0(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -2665,7 +2715,7 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@5.10.2(eslint@8.51.0)(typescript@4.5.5): + /@typescript-eslint/utils@5.10.2(eslint@8.53.0)(typescript@4.5.5): resolution: { integrity: sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==, @@ -2678,14 +2728,14 @@ packages: "@typescript-eslint/scope-manager": 5.10.2 "@typescript-eslint/types": 5.10.2 "@typescript-eslint/typescript-estree": 5.10.2(typescript@4.5.5) - eslint: 8.51.0 + eslint: 8.53.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.51.0) + eslint-utils: 3.0.0(eslint@8.53.0) transitivePeerDependencies: - supports-color - typescript - /@typescript-eslint/utils@5.55.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.55.0(eslint@8.53.0)(typescript@5.2.2): resolution: { integrity: sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw==, @@ -2694,13 +2744,13 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.51.0) + "@eslint-community/eslint-utils": 4.4.0(eslint@8.53.0) "@types/json-schema": 7.0.12 "@types/semver": 7.5.1 "@typescript-eslint/scope-manager": 5.55.0 "@typescript-eslint/types": 5.55.0 "@typescript-eslint/typescript-estree": 5.55.0(typescript@5.2.2) - eslint: 8.51.0 + eslint: 8.53.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2708,7 +2758,7 @@ packages: - typescript dev: false - /@typescript-eslint/utils@5.62.0(eslint@8.51.0)(typescript@4.5.5): + /@typescript-eslint/utils@5.62.0(eslint@8.53.0)(typescript@4.5.5): resolution: { integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==, @@ -2717,13 +2767,13 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.51.0) + "@eslint-community/eslint-utils": 4.4.0(eslint@8.53.0) "@types/json-schema": 7.0.12 "@types/semver": 7.5.1 "@typescript-eslint/scope-manager": 5.62.0 "@typescript-eslint/types": 5.62.0 "@typescript-eslint/typescript-estree": 5.62.0(typescript@4.5.5) - eslint: 8.51.0 + eslint: 8.53.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -2760,6 +2810,12 @@ packages: "@typescript-eslint/types": 5.62.0 eslint-visitor-keys: 3.4.3 + /@ungap/structured-clone@1.2.0: + resolution: + { + integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, + } + /@vitest/expect@0.34.6: resolution: { @@ -2813,77 +2869,78 @@ packages: pretty-format: 29.7.0 dev: true - /@volar/kit@1.10.1(typescript@5.2.2): + /@volar/kit@1.10.10(typescript@5.2.2): resolution: { - integrity: sha512-+aR3rvgER14VfjFflhD6k161uLdshpuK1tQUrnl8phpKtSGJDXHkTl/WkNk2xCEuE4goShS9nTvruTyrI9gGBw==, + integrity: sha512-V2SyUPCPUhueqH8j5t48LJ0QsjExGSXzTv/XOdkUHV7hJ/ekyRGFqKxcfBtMq/nK6Tgu2G1ba+6u0d7e6wKcQw==, } peerDependencies: typescript: "*" dependencies: - "@volar/language-service": 1.10.1 + "@volar/language-service": 1.10.10 typesafe-path: 0.2.2 typescript: 5.2.2 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 dev: true - /@volar/language-core@1.10.1: + /@volar/language-core@1.10.10: resolution: { - integrity: sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==, + integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==, } dependencies: - "@volar/source-map": 1.10.1 + "@volar/source-map": 1.10.10 dev: true - /@volar/language-server@1.10.1: + /@volar/language-server@1.10.10: resolution: { - integrity: sha512-UXgRMAPKoy4EZBcBT1SFp8YIb5AJqe7Is1/TnqRUq0LBBV2M7HpEeHHI8E4fy05Eg4TlSVRcrlZtiTrY9fRjJg==, + integrity: sha512-F2PRBU+CRjT7L9qe8bjof/uz/LbAXVmgwNU2gOSX2y1bUl3E8DHmD0dB6pwIVublvkx+Ivg/0r3Z6oyxfPPruQ==, } dependencies: - "@volar/language-core": 1.10.1 - "@volar/language-service": 1.10.1 - "@volar/typescript": 1.10.1 - "@vscode/l10n": 0.0.11 + "@volar/language-core": 1.10.10 + "@volar/language-service": 1.10.10 + "@volar/typescript": 1.10.10 + "@vscode/l10n": 0.0.16 + path-browserify: 1.0.1 request-light: 0.7.0 - typesafe-path: 0.2.2 - vscode-languageserver: 8.1.0 - vscode-languageserver-protocol: 3.17.3 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 dev: true - /@volar/language-service@1.10.1: + /@volar/language-service@1.10.10: resolution: { - integrity: sha512-9AfMd8DeBuiw5twyXCL4Dw/9dg7djs2GAMQ5YY6LlN4v6u5IwU+foM/un5F7yzE94v2cuI+NN9LtHeR87AXpRA==, + integrity: sha512-P4fiPWDI6fLGO6BghlksCVHs1nr9gvWAMDyma3Bca4aowxXusxjUVTsnJq0EVorIN5uIr1Xel4B/tNdXt/IKyw==, } dependencies: - "@volar/language-core": 1.10.1 - "@volar/source-map": 1.10.1 - vscode-languageserver-protocol: 3.17.3 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 + "@volar/language-core": 1.10.10 + "@volar/source-map": 1.10.10 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 dev: true - /@volar/source-map@1.10.1: + /@volar/source-map@1.10.10: resolution: { - integrity: sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==, + integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==, } dependencies: muggle-string: 0.3.1 dev: true - /@volar/typescript@1.10.1: + /@volar/typescript@1.10.10: resolution: { - integrity: sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==, + integrity: sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==, } dependencies: - "@volar/language-core": 1.10.1 + "@volar/language-core": 1.10.10 + path-browserify: 1.0.1 dev: true /@vscode/emmet-helper@2.9.2: @@ -2899,13 +2956,6 @@ packages: vscode-uri: 2.1.2 dev: true - /@vscode/l10n@0.0.11: - resolution: - { - integrity: sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==, - } - dev: true - /@vscode/l10n@0.0.16: resolution: { @@ -2967,17 +3017,6 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.12.0: - resolution: - { - integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, - } - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - /ansi-align@3.0.1: resolution: { @@ -3013,6 +3052,7 @@ packages: { integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==, } + dev: false /ansi-styles@3.2.1: resolution: @@ -3203,13 +3243,6 @@ packages: integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==, } - /astral-regex@2.0.0: - resolution: - { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, - } - engines: { node: ">=8" } - /astring@1.8.6: resolution: { @@ -3218,18 +3251,18 @@ packages: hasBin: true dev: false - /astro@3.2.4(@types/node@18.18.4): + /astro@3.5.5(@types/node@18.18.4)(typescript@5.2.2): resolution: { - integrity: sha512-e95Yz6tYG6Q2SEOCzujqCHq9/HOB2z085KP1K36kGuGtu0qaa3mmnz3R9FpKM/W5SbmrNgUv4QaP207EUkMp5Q==, + integrity: sha512-zJDZhO8XheXzpqkZgBXlP8e3j8psf0A21fh5Bq4HNR6gOmgOnM62Pok3O2ClbGygabfl2Preeun0pBRFn5+y0A==, } engines: { node: ">=18.14.1", npm: ">=6.14.0" } hasBin: true dependencies: - "@astrojs/compiler": 2.1.0 + "@astrojs/compiler": 2.3.2 "@astrojs/internal-helpers": 0.2.1 - "@astrojs/markdown-remark": 3.2.1(astro@3.2.4) - "@astrojs/telemetry": 3.0.3 + "@astrojs/markdown-remark": 3.5.0(astro@3.5.5) + "@astrojs/telemetry": 3.0.4 "@babel/core": 7.22.17 "@babel/generator": 7.22.15 "@babel/parser": 7.22.16 @@ -3245,10 +3278,11 @@ packages: common-ancestor-path: 1.0.1 cookie: 0.5.0 debug: 4.3.4 + deterministic-object-hash: 1.3.1 devalue: 4.3.2 diff: 5.1.0 es-module-lexer: 1.3.1 - esbuild: 0.19.4 + esbuild: 0.19.5 estree-walker: 3.0.3 execa: 8.0.1 fast-glob: 3.3.1 @@ -3259,9 +3293,11 @@ packages: js-yaml: 4.1.0 kleur: 4.1.5 magic-string: 0.30.3 + mdast-util-to-hast: 12.3.0 mime: 3.0.0 ora: 7.0.1 p-limit: 4.0.0 + p-queue: 7.4.1 path-to-regexp: 6.2.1 preferred-pm: 3.1.2 probe-image-size: 7.2.3 @@ -3270,17 +3306,17 @@ packages: resolve: 1.22.4 semver: 7.5.4 server-destroy: 1.0.1 - shiki: 0.14.4 + shikiji: 0.6.13 string-width: 6.1.0 strip-ansi: 7.1.0 - tsconfig-resolver: 3.0.1 + tsconfck: 3.0.0(typescript@5.2.2) unist-util-visit: 4.1.2 vfile: 5.3.7 vite: 4.4.9(@types/node@18.18.4) vitefu: 0.2.4(vite@4.4.9) which-pm: 2.1.1 yargs-parser: 21.1.1 - zod: 3.21.1 + zod: 3.22.4 optionalDependencies: sharp: 0.32.6 transitivePeerDependencies: @@ -3292,6 +3328,7 @@ packages: - sugarss - supports-color - terser + - typescript /atomic-sleep@1.0.0: resolution: @@ -3327,29 +3364,19 @@ packages: } engines: { node: ">= 0.4" } - /aws-cdk-lib@2.100.0(constructs@10.3.0): + /aws-cdk-lib@2.109.0(constructs@10.3.0): resolution: { - integrity: sha512-oWDPcbdqD69wDIUvcGdbDxmKcDfkCg515wf8JkiQLnhAI/AFyKAVTEWhbSUi00lvJQNUjX8Mal2lbKlCRA4hjQ==, + integrity: sha512-Va5j3eOrepm0H7a/VPvzCDRuPAL7z/xYMlrMJdFYHA3G1GmRvXnDgHWTiUYXh1AuBqJ4zUd4StRrBQhufAtHWw==, } engines: { node: ">= 14.15.0" } peerDependencies: constructs: ^10.0.0 dependencies: - "@aws-cdk/asset-awscli-v1": 2.2.200 + "@aws-cdk/asset-awscli-v1": 2.2.201 "@aws-cdk/asset-kubectl-v20": 2.1.2 "@aws-cdk/asset-node-proxy-agent-v6": 2.0.1 - "@balena/dockerignore": 1.0.2 - case: 1.6.3 constructs: 10.3.0 - fs-extra: 11.1.1 - ignore: 5.2.4 - jsonschema: 1.4.1 - minimatch: 3.1.2 - punycode: 2.3.0 - semver: 7.5.4 - table: 6.8.1 - yaml: 1.10.2 bundledDependencies: - "@balena/dockerignore" - case @@ -3362,10 +3389,10 @@ packages: - table - yaml - /aws-cdk@2.100.0: + /aws-cdk@2.109.0: resolution: { - integrity: sha512-Gt/4wPuEiBYw2tl0+cN0EbLxxJEvltcJxSQAcVHgNbqvDj49KUJ/oCbZ335dF0gK/hrVVb70xfNiYbBSPOsmvg==, + integrity: sha512-e06YlA4HsKZCOdh3ApynZauJ3/224o/q5vOso3Fs5ksLkYhfXREl+O7UmAOZ1Nenq5ADNgccvNwuChQWbNSvSg==, } engines: { node: ">= 14.15.0" } hasBin: true @@ -3423,6 +3450,7 @@ packages: { integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==, } + requiresBuild: true /bail@2.0.2: resolution: @@ -3497,6 +3525,7 @@ packages: { integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, } + requiresBuild: true dependencies: buffer: 5.7.1 inherits: 2.0.4 @@ -3617,6 +3646,7 @@ packages: { integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, } + requiresBuild: true dependencies: base64-js: 1.5.1 ieee754: 1.2.1 @@ -3722,13 +3752,6 @@ packages: integrity: sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw==, } - /case@1.6.3: - resolution: - { - integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==, - } - engines: { node: ">= 0.8.0" } - /ccount@2.0.1: resolution: { @@ -3842,6 +3865,7 @@ packages: { integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==, } + requiresBuild: true /ci-info@3.8.0: resolution: @@ -3912,6 +3936,15 @@ packages: engines: { node: ">=0.8" } dev: false + /cloneable-readable@3.0.0: + resolution: + { + integrity: sha512-Lkfd9IRx1nfiBr7UHNxJSl/x7DOeUfYmxzCkxYJC2tyc/9vKgV75msgLGurGQsak/NvJDHMWcshzEXRlxfvhqg==, + } + dependencies: + readable-stream: 4.4.2 + dev: false + /clsx@2.0.0: resolution: { @@ -3953,6 +3986,7 @@ packages: { integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, } + requiresBuild: true dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 @@ -3963,27 +3997,21 @@ packages: integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==, } engines: { node: ">=12.5.0" } + requiresBuild: true dependencies: color-convert: 2.0.1 color-string: 1.9.1 - /colord@2.9.3: - resolution: - { - integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==, - } - dev: false - /comma-separated-tokens@2.0.3: resolution: { integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, } - /commander@11.0.0: + /commander@11.1.0: resolution: { - integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==, + integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==, } engines: { node: ">=16" } dev: false @@ -4168,20 +4196,27 @@ packages: stream-transform: 2.1.3 dev: false - /daisyui@3.9.2: + /culori@3.2.0: + resolution: + { + integrity: sha512-HIEbTSP7vs1mPq/2P9In6QyFE0Tkpevh0k9a+FkjhD+cwsYm9WRSbn4uMdW9O0yXlNYC3ppxL3gWWPOcvEl57w==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dev: false + + /daisyui@4.1.1(postcss@8.4.29): resolution: { - integrity: sha512-yJZ1QjHUaL+r9BkquTdzNHb7KIgAJVFh0zbOXql2Wu0r7zx5qZNLxclhjN0WLoIpY+o2h/8lqXg7ijj8oTigOw==, + integrity: sha512-tWOWo4uQocaAQlfUFZeINR+je+Zy95MVfFjQ1UUvWbW8+VQLjFep4otOyXgghvqtNebh0Pej2yxA1ni9dIsFaA==, } engines: { node: ">=16.9.0" } dependencies: - colord: 2.9.3 css-selector-tokenizer: 0.8.0 - postcss: 8.4.29 + culori: 3.2.0 + picocolors: 1.0.0 postcss-js: 4.0.1(postcss@8.4.29) - tailwindcss: 3.3.3 transitivePeerDependencies: - - ts-node + - postcss dev: false /damerau-levenshtein@1.0.8: @@ -4270,6 +4305,7 @@ packages: integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, } engines: { node: ">=10" } + requiresBuild: true dependencies: mimic-response: 3.1.0 @@ -4289,6 +4325,7 @@ packages: integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, } engines: { node: ">=4.0.0" } + requiresBuild: true /deep-is@0.1.4: resolution: @@ -4388,6 +4425,7 @@ packages: integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==, } engines: { node: ">=8" } + requiresBuild: true /detect-newline@4.0.0: resolution: @@ -4397,6 +4435,12 @@ packages: engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dev: false + /deterministic-object-hash@1.3.1: + resolution: + { + integrity: sha512-kQDIieBUreEgY+akq0N7o4FzZCr27dPG1xr3wq267vPwDlSXQ3UMcBXHqTGUBaM/5WDS1jwTYjxRhUzHeuiAvw==, + } + /devalue@4.3.2: resolution: { @@ -4410,7 +4454,6 @@ packages: } dependencies: dequal: 2.0.3 - dev: false /didyoumean@1.2.2: resolution: @@ -4544,6 +4587,7 @@ packages: { integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, } + requiresBuild: true dependencies: once: 1.4.0 @@ -4568,6 +4612,13 @@ packages: strip-ansi: 6.0.1 dev: false + /entities@4.5.0: + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: ">=0.12" } + /error-ex@1.3.2: resolution: { @@ -4691,37 +4742,37 @@ packages: "@esbuild/win32-ia32": 0.18.20 "@esbuild/win32-x64": 0.18.20 - /esbuild@0.19.4: + /esbuild@0.19.5: resolution: { - integrity: sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==, + integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==, } engines: { node: ">=12" } hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.19.4 - "@esbuild/android-arm64": 0.19.4 - "@esbuild/android-x64": 0.19.4 - "@esbuild/darwin-arm64": 0.19.4 - "@esbuild/darwin-x64": 0.19.4 - "@esbuild/freebsd-arm64": 0.19.4 - "@esbuild/freebsd-x64": 0.19.4 - "@esbuild/linux-arm": 0.19.4 - "@esbuild/linux-arm64": 0.19.4 - "@esbuild/linux-ia32": 0.19.4 - "@esbuild/linux-loong64": 0.19.4 - "@esbuild/linux-mips64el": 0.19.4 - "@esbuild/linux-ppc64": 0.19.4 - "@esbuild/linux-riscv64": 0.19.4 - "@esbuild/linux-s390x": 0.19.4 - "@esbuild/linux-x64": 0.19.4 - "@esbuild/netbsd-x64": 0.19.4 - "@esbuild/openbsd-x64": 0.19.4 - "@esbuild/sunos-x64": 0.19.4 - "@esbuild/win32-arm64": 0.19.4 - "@esbuild/win32-ia32": 0.19.4 - "@esbuild/win32-x64": 0.19.4 + "@esbuild/android-arm": 0.19.5 + "@esbuild/android-arm64": 0.19.5 + "@esbuild/android-x64": 0.19.5 + "@esbuild/darwin-arm64": 0.19.5 + "@esbuild/darwin-x64": 0.19.5 + "@esbuild/freebsd-arm64": 0.19.5 + "@esbuild/freebsd-x64": 0.19.5 + "@esbuild/linux-arm": 0.19.5 + "@esbuild/linux-arm64": 0.19.5 + "@esbuild/linux-ia32": 0.19.5 + "@esbuild/linux-loong64": 0.19.5 + "@esbuild/linux-mips64el": 0.19.5 + "@esbuild/linux-ppc64": 0.19.5 + "@esbuild/linux-riscv64": 0.19.5 + "@esbuild/linux-s390x": 0.19.5 + "@esbuild/linux-x64": 0.19.5 + "@esbuild/netbsd-x64": 0.19.5 + "@esbuild/openbsd-x64": 0.19.5 + "@esbuild/sunos-x64": 0.19.5 + "@esbuild/win32-arm64": 0.19.5 + "@esbuild/win32-ia32": 0.19.5 + "@esbuild/win32-x64": 0.19.5 /escalade@3.1.1: resolution: @@ -4751,7 +4802,7 @@ packages: } engines: { node: ">=12" } - /eslint-config-get-off-my-lawn@7.2.0(eslint@8.51.0): + /eslint-config-get-off-my-lawn@7.2.0(eslint@8.53.0): resolution: { integrity: sha512-bKY9toOU0Skw0OyVHJmMNB+XBW7ZG6PHZUe70Eqp5WuEIRe7HibR7UBTkjehdN+BjJXdmf6blJlTd5SoNiZ7Fg==, @@ -4761,30 +4812,30 @@ packages: eslint: ">=8.7.0" dependencies: "@babel/core": 7.17.0 - "@babel/eslint-parser": 7.17.0(@babel/core@7.17.0)(eslint@8.51.0) + "@babel/eslint-parser": 7.17.0(@babel/core@7.17.0)(eslint@8.53.0) "@babel/preset-react": 7.16.7(@babel/core@7.17.0) "@next/eslint-plugin-next": 12.0.10 "@rushstack/eslint-patch": 1.1.0 - "@typescript-eslint/eslint-plugin": 5.10.2(@typescript-eslint/parser@5.10.2)(eslint@8.51.0)(typescript@4.5.5) - "@typescript-eslint/parser": 5.10.2(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/eslint-plugin": 5.10.2(@typescript-eslint/parser@5.10.2)(eslint@8.53.0)(typescript@4.5.5) + "@typescript-eslint/parser": 5.10.2(eslint@8.53.0)(typescript@5.2.2) confusing-browser-globals: 1.0.11 - eslint: 8.51.0 - eslint-config-prettier: 8.3.0(eslint@8.51.0) - eslint-import-resolver-typescript: 2.5.0(eslint-plugin-import@2.25.4)(eslint@8.51.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.51.0) - eslint-plugin-get-off-my-lawn: 3.0.0(eslint@8.51.0) - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) - eslint-plugin-jest: 26.0.0(@typescript-eslint/eslint-plugin@5.10.2)(eslint@8.51.0)(typescript@4.5.5) - eslint-plugin-jest-formatting: 3.1.0(eslint@8.51.0) - eslint-plugin-jsonc: 2.1.0(eslint@8.51.0) - eslint-plugin-jsx-a11y: 6.5.1(eslint@8.51.0) - eslint-plugin-node: 11.1.0(eslint@8.51.0) - eslint-plugin-objects: 1.1.1(eslint@8.51.0) - eslint-plugin-react: 7.28.0(eslint@8.51.0) - eslint-plugin-react-hooks: 4.3.0(eslint@8.51.0) - eslint-plugin-react-native: 4.0.0(eslint@8.51.0) + eslint: 8.53.0 + eslint-config-prettier: 8.3.0(eslint@8.53.0) + eslint-import-resolver-typescript: 2.5.0(eslint-plugin-import@2.25.4)(eslint@8.53.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.53.0) + eslint-plugin-get-off-my-lawn: 3.0.0(eslint@8.53.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-plugin-jest: 26.0.0(@typescript-eslint/eslint-plugin@5.10.2)(eslint@8.53.0)(typescript@4.5.5) + eslint-plugin-jest-formatting: 3.1.0(eslint@8.53.0) + eslint-plugin-jsonc: 2.1.0(eslint@8.53.0) + eslint-plugin-jsx-a11y: 6.5.1(eslint@8.53.0) + eslint-plugin-node: 11.1.0(eslint@8.53.0) + eslint-plugin-objects: 1.1.1(eslint@8.53.0) + eslint-plugin-react: 7.28.0(eslint@8.53.0) + eslint-plugin-react-hooks: 4.3.0(eslint@8.53.0) + eslint-plugin-react-native: 4.0.0(eslint@8.53.0) eslint-plugin-security: 1.4.0 - eslint-plugin-unicorn: 40.1.0(eslint@8.51.0) + eslint-plugin-unicorn: 40.1.0(eslint@8.53.0) fs-extra: 10.0.0 merge-anything: 4.0.5 semver: 7.3.5 @@ -4794,7 +4845,7 @@ packages: - jest - supports-color - /eslint-config-prettier@8.3.0(eslint@8.51.0): + /eslint-config-prettier@8.3.0(eslint@8.53.0): resolution: { integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==, @@ -4803,7 +4854,7 @@ packages: peerDependencies: eslint: ">=7.0.0" dependencies: - eslint: 8.51.0 + eslint: 8.53.0 /eslint-import-resolver-node@0.3.9: resolution: @@ -4812,12 +4863,12 @@ packages: } dependencies: debug: 3.2.7 - is-core-module: 2.13.0 + is-core-module: 2.13.1 resolve: 1.22.4 transitivePeerDependencies: - supports-color - /eslint-import-resolver-typescript@2.5.0(eslint-plugin-import@2.25.4)(eslint@8.51.0): + /eslint-import-resolver-typescript@2.5.0(eslint-plugin-import@2.25.4)(eslint@8.53.0): resolution: { integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==, @@ -4828,8 +4879,8 @@ packages: eslint-plugin-import: "*" dependencies: debug: 4.3.4 - eslint: 8.51.0 - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint: 8.53.0 + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) glob: 7.2.3 is-glob: 4.0.3 resolve: 1.22.4 @@ -4837,7 +4888,7 @@ packages: transitivePeerDependencies: - supports-color - /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.51.0): + /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.53.0): resolution: { integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==, @@ -4849,8 +4900,8 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 - eslint: 8.51.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.51.0) + eslint: 8.53.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.53.0) get-tsconfig: 4.7.2 globby: 13.2.2 is-core-module: 2.13.0 @@ -4860,7 +4911,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0): resolution: { integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==, @@ -4872,9 +4923,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 - eslint: 8.51.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint: 8.53.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) fast-glob: 3.3.1 get-tsconfig: 4.7.2 is-core-module: 2.13.0 @@ -4885,7 +4936,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: { integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, @@ -4909,15 +4960,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - "@typescript-eslint/parser": 5.10.2(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.10.2(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0) transitivePeerDependencies: - supports-color - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.3)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.3)(eslint@8.53.0): resolution: { integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, @@ -4941,16 +4992,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - "@typescript-eslint/parser": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.55.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.51.0) + eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.53.0) transitivePeerDependencies: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: { integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, @@ -4974,15 +5025,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - "@typescript-eslint/parser": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.55.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.55.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0) transitivePeerDependencies: - supports-color - /eslint-plugin-es@3.0.1(eslint@8.51.0): + /eslint-plugin-es@3.0.1(eslint@8.53.0): resolution: { integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==, @@ -4991,11 +5042,11 @@ packages: peerDependencies: eslint: ">=4.19.1" dependencies: - eslint: 8.51.0 + eslint: 8.53.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - /eslint-plugin-eslint-comments@3.2.0(eslint@8.51.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.53.0): resolution: { integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==, @@ -5005,10 +5056,10 @@ packages: eslint: ">=4.19.1" dependencies: escape-string-regexp: 1.0.5 - eslint: 8.51.0 + eslint: 8.53.0 ignore: 5.2.4 - /eslint-plugin-get-off-my-lawn@3.0.0(eslint@8.51.0): + /eslint-plugin-get-off-my-lawn@3.0.0(eslint@8.53.0): resolution: { integrity: sha512-U3dt1cHDHyjY0b6KsvPm/LI59oR95XhYiviCmPpWnk7hgKftfY4TXYlD3XNS7veLfdbQRnQLDK5SgTnntaR6NQ==, @@ -5018,10 +5069,10 @@ packages: eslint: ">=7.29.0" dependencies: dot-prop: 6.0.1 - eslint: 8.51.0 + eslint: 8.53.0 import-modules: 2.1.0 - /eslint-plugin-import@2.25.4(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + /eslint-plugin-import@2.25.4(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: { integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==, @@ -5034,14 +5085,14 @@ packages: "@typescript-eslint/parser": optional: true dependencies: - "@typescript-eslint/parser": 5.10.2(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.10.2(eslint@8.53.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.flat: 1.3.2 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.10.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -5054,7 +5105,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.51.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.53.0): resolution: { integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==, @@ -5067,15 +5118,15 @@ packages: "@typescript-eslint/parser": optional: true dependencies: - "@typescript-eslint/parser": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.55.0(eslint@8.53.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.3)(eslint@8.51.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.3)(eslint@8.53.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -5090,10 +5141,10 @@ packages: - supports-color dev: false - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: { - integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==, + integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==, } engines: { node: ">=4" } peerDependencies: @@ -5103,18 +5154,18 @@ packages: "@typescript-eslint/parser": optional: true dependencies: - "@typescript-eslint/parser": 5.55.0(eslint@8.51.0)(typescript@5.2.2) + "@typescript-eslint/parser": 5.55.0(eslint@8.53.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) - has: 1.0.3 - is-core-module: 2.13.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + hasown: 2.0.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.7 @@ -5127,7 +5178,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-jest-formatting@3.1.0(eslint@8.51.0): + /eslint-plugin-jest-formatting@3.1.0(eslint@8.53.0): resolution: { integrity: sha512-XyysraZ1JSgGbLSDxjj5HzKKh0glgWf+7CkqxbTqb7zEhW7X2WHo5SBQ8cGhnszKN+2Lj3/oevBlHNbHezoc/A==, @@ -5136,9 +5187,9 @@ packages: peerDependencies: eslint: ">=0.8.0" dependencies: - eslint: 8.51.0 + eslint: 8.53.0 - /eslint-plugin-jest@26.0.0(@typescript-eslint/eslint-plugin@5.10.2)(eslint@8.51.0)(typescript@4.5.5): + /eslint-plugin-jest@26.0.0(@typescript-eslint/eslint-plugin@5.10.2)(eslint@8.53.0)(typescript@4.5.5): resolution: { integrity: sha512-Fvs0YgJ/nw9FTrnqTuMGVrkozkd07jkQzWm0ajqyHlfcsdkxGfAuv30fgfWHOnHiCr9+1YQ365CcDX7vrNhqQg==, @@ -5154,14 +5205,14 @@ packages: jest: optional: true dependencies: - "@typescript-eslint/eslint-plugin": 5.10.2(@typescript-eslint/parser@5.10.2)(eslint@8.51.0)(typescript@4.5.5) - "@typescript-eslint/utils": 5.62.0(eslint@8.51.0)(typescript@4.5.5) - eslint: 8.51.0 + "@typescript-eslint/eslint-plugin": 5.10.2(@typescript-eslint/parser@5.10.2)(eslint@8.53.0)(typescript@4.5.5) + "@typescript-eslint/utils": 5.62.0(eslint@8.53.0)(typescript@4.5.5) + eslint: 8.53.0 transitivePeerDependencies: - supports-color - typescript - /eslint-plugin-jsonc@2.1.0(eslint@8.51.0): + /eslint-plugin-jsonc@2.1.0(eslint@8.53.0): resolution: { integrity: sha512-ueuFWW+u/hjU9+j5Ov+ZoWIukMlaWrB+MS/wfKYWqKkAVr7U9zYqUu4ZwLh2AHU3+FjvmS8+1Va5bP6J/ERVyg==, @@ -5170,12 +5221,12 @@ packages: peerDependencies: eslint: ">=6.0.0" dependencies: - eslint: 8.51.0 - eslint-utils: 3.0.0(eslint@8.51.0) + eslint: 8.53.0 + eslint-utils: 3.0.0(eslint@8.53.0) jsonc-eslint-parser: 2.3.0 natural-compare: 1.4.0 - /eslint-plugin-jsx-a11y@6.5.1(eslint@8.51.0): + /eslint-plugin-jsx-a11y@6.5.1(eslint@8.53.0): resolution: { integrity: sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==, @@ -5192,13 +5243,13 @@ packages: axobject-query: 2.2.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.51.0 + eslint: 8.53.0 has: 1.0.3 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - /eslint-plugin-node@11.1.0(eslint@8.51.0): + /eslint-plugin-node@11.1.0(eslint@8.53.0): resolution: { integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==, @@ -5207,22 +5258,22 @@ packages: peerDependencies: eslint: ">=5.16.0" dependencies: - eslint: 8.51.0 - eslint-plugin-es: 3.0.1(eslint@8.51.0) + eslint: 8.53.0 + eslint-plugin-es: 3.0.1(eslint@8.53.0) eslint-utils: 2.1.0 ignore: 5.2.4 minimatch: 3.1.2 resolve: 1.22.4 semver: 6.3.1 - /eslint-plugin-objects@1.1.1(eslint@8.51.0): + /eslint-plugin-objects@1.1.1(eslint@8.53.0): resolution: { integrity: sha1-EqZrUqo4PaoOEw06M+dQ/0Tqk5U= } peerDependencies: eslint: ">=0.8.1" dependencies: - eslint: 8.51.0 + eslint: 8.53.0 - /eslint-plugin-react-hooks@4.3.0(eslint@8.51.0): + /eslint-plugin-react-hooks@4.3.0(eslint@8.53.0): resolution: { integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==, @@ -5231,7 +5282,7 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.51.0 + eslint: 8.53.0 /eslint-plugin-react-native-globals@0.1.2: resolution: @@ -5239,7 +5290,7 @@ packages: integrity: sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==, } - /eslint-plugin-react-native@4.0.0(eslint@8.51.0): + /eslint-plugin-react-native@4.0.0(eslint@8.53.0): resolution: { integrity: sha512-kMmdxrSY7A1WgdqaGC+rY/28rh7kBGNBRsk48ovqkQmdg5j4K+DaFmegENDzMrdLkoufKGRNkKX6bgSwQTCAxQ==, @@ -5248,12 +5299,12 @@ packages: eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: "@babel/traverse": 7.22.17 - eslint: 8.51.0 + eslint: 8.53.0 eslint-plugin-react-native-globals: 0.1.2 transitivePeerDependencies: - supports-color - /eslint-plugin-react@7.28.0(eslint@8.51.0): + /eslint-plugin-react@7.28.0(eslint@8.53.0): resolution: { integrity: sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==, @@ -5265,7 +5316,7 @@ packages: array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.53.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -5286,7 +5337,7 @@ packages: dependencies: safe-regex: 1.1.0 - /eslint-plugin-unicorn@40.1.0(eslint@8.51.0): + /eslint-plugin-unicorn@40.1.0(eslint@8.53.0): resolution: { integrity: sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==, @@ -5298,8 +5349,8 @@ packages: "@babel/helper-validator-identifier": 7.22.15 ci-info: 3.8.0 clean-regexp: 1.0.0 - eslint: 8.51.0 - eslint-utils: 3.0.0(eslint@8.51.0) + eslint: 8.53.0 + eslint-utils: 3.0.0(eslint@8.53.0) esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -5340,7 +5391,7 @@ packages: dependencies: eslint-visitor-keys: 1.3.0 - /eslint-utils@3.0.0(eslint@8.51.0): + /eslint-utils@3.0.0(eslint@8.53.0): resolution: { integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, @@ -5349,7 +5400,7 @@ packages: peerDependencies: eslint: ">=5" dependencies: - eslint: 8.51.0 + eslint: 8.53.0 eslint-visitor-keys: 2.1.0 /eslint-visitor-keys@1.3.0: @@ -5373,21 +5424,22 @@ packages: } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - /eslint@8.51.0: + /eslint@8.53.0: resolution: { - integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==, + integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==, } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } hasBin: true dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.51.0) + "@eslint-community/eslint-utils": 4.4.0(eslint@8.53.0) "@eslint-community/regexpp": 4.8.1 - "@eslint/eslintrc": 2.1.2 - "@eslint/js": 8.51.0 - "@humanwhocodes/config-array": 0.11.11 + "@eslint/eslintrc": 2.1.3 + "@eslint/js": 8.53.0 + "@humanwhocodes/config-array": 0.11.13 "@humanwhocodes/module-importer": 1.0.1 "@nodelib/fs.walk": 1.2.8 + "@ungap/structured-clone": 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -5543,6 +5595,12 @@ packages: engines: { node: ">=6" } dev: false + /eventemitter3@5.0.1: + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } + /events@1.1.1: resolution: { @@ -5618,6 +5676,7 @@ packages: integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==, } engines: { node: ">=6" } + requiresBuild: true /extend-shallow@2.0.1: resolution: @@ -5664,6 +5723,7 @@ packages: { integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, } + requiresBuild: true /fast-glob@3.3.1: resolution: @@ -5678,6 +5738,20 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-glob@3.3.2: + resolution: + { + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, + } + engines: { node: ">=8.6.0" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + /fast-json-stable-stringify@2.1.0: resolution: { @@ -5808,6 +5882,7 @@ packages: { integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, } + requiresBuild: true /fs-extra@10.0.0: resolution: @@ -5820,17 +5895,6 @@ packages: jsonfile: 6.1.0 universalify: 2.0.0 - /fs-extra@11.1.1: - resolution: - { - integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, - } - engines: { node: ">=14.14" } - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - /fs-extra@7.0.1: resolution: { @@ -5888,6 +5952,12 @@ packages: integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, } + /function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + /function.prototype.name@1.1.6: resolution: { @@ -6016,6 +6086,7 @@ packages: { integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==, } + requiresBuild: true /github-slugger@2.0.0: resolution: @@ -6156,6 +6227,21 @@ packages: slash: 4.0.0 dev: false + /globby@14.0.0: + resolution: + { + integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==, + } + engines: { node: ">=18" } + dependencies: + "@sindresorhus/merge-streams": 1.0.0 + fast-glob: 3.3.2 + ignore: 5.2.4 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + dev: false + /gopd@1.0.1: resolution: { @@ -6263,6 +6349,15 @@ packages: dependencies: function-bind: 1.1.1 + /hasown@2.0.0: + resolution: + { + integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==, + } + engines: { node: ">= 0.4" } + dependencies: + function-bind: 1.1.2 + /hast-util-from-parse5@7.1.2: resolution: { @@ -6277,6 +6372,21 @@ packages: vfile-location: 4.1.0 web-namespaces: 2.0.1 + /hast-util-from-parse5@8.0.1: + resolution: + { + integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==, + } + dependencies: + "@types/hast": 3.0.3 + "@types/unist": 3.0.0 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.3.0 + vfile: 6.0.1 + vfile-location: 5.0.2 + web-namespaces: 2.0.1 + /hast-util-has-property@2.0.1: resolution: { @@ -6292,6 +6402,14 @@ packages: dependencies: "@types/hast": 2.3.5 + /hast-util-parse-selector@4.0.0: + resolution: + { + integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==, + } + dependencies: + "@types/hast": 3.0.3 + /hast-util-raw@7.2.3: resolution: { @@ -6310,6 +6428,26 @@ packages: web-namespaces: 2.0.1 zwitch: 2.0.4 + /hast-util-raw@9.0.1: + resolution: + { + integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==, + } + dependencies: + "@types/hast": 3.0.3 + "@types/unist": 3.0.0 + "@ungap/structured-clone": 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + /hast-util-select@5.0.5: resolution: { @@ -6376,6 +6514,25 @@ packages: stringify-entities: 4.0.3 zwitch: 2.0.4 + /hast-util-to-html@9.0.0: + resolution: + { + integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==, + } + dependencies: + "@types/hast": 3.0.3 + "@types/unist": 3.0.0 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 9.0.1 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + /hast-util-to-parse5@7.1.0: resolution: { @@ -6389,6 +6546,20 @@ packages: web-namespaces: 2.0.1 zwitch: 2.0.4 + /hast-util-to-parse5@8.0.0: + resolution: + { + integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==, + } + dependencies: + "@types/hast": 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + /hast-util-to-string@2.0.0: resolution: { @@ -6404,6 +6575,14 @@ packages: integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==, } + /hast-util-whitespace@3.0.0: + resolution: + { + integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, + } + dependencies: + "@types/hast": 3.0.3 + /hastscript@7.2.0: resolution: { @@ -6416,6 +6595,18 @@ packages: property-information: 6.3.0 space-separated-tokens: 2.0.2 + /hastscript@8.0.0: + resolution: + { + integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==, + } + dependencies: + "@types/hast": 3.0.3 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + /hosted-git-info@2.8.9: resolution: { @@ -6434,12 +6625,25 @@ packages: integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==, } + /html-void-elements@3.0.0: + resolution: + { + integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, + } + /http-cache-semantics@4.1.1: resolution: { integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, } + /http-status-codes@2.3.0: + resolution: + { + integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==, + } + dev: false + /human-id@1.0.2: resolution: { @@ -6556,6 +6760,7 @@ packages: { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, } + requiresBuild: true /inline-style-parser@0.1.1: resolution: @@ -6624,6 +6829,7 @@ packages: { integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, } + requiresBuild: true /is-bigint@1.0.4: resolution: @@ -6693,6 +6899,14 @@ packages: dependencies: has: 1.0.3 + /is-core-module@2.13.1: + resolution: + { + integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==, + } + dependencies: + hasown: 2.0.0 + /is-date-object@1.0.5: resolution: { @@ -7099,12 +7313,6 @@ packages: integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, } - /json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } - /json-stable-stringify-without-jsonify@1.0.1: resolution: { @@ -7172,12 +7380,6 @@ packages: optionalDependencies: graceful-fs: 4.2.11 - /jsonschema@1.4.1: - resolution: - { - integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==, - } - /jsx-ast-utils@3.3.5: resolution: { @@ -7322,12 +7524,6 @@ packages: } dev: false - /lodash.truncate@4.4.2: - resolution: - { - integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, - } - /lodash@4.17.21: resolution: { @@ -7692,6 +7888,21 @@ packages: unist-util-position: 4.0.4 unist-util-visit: 4.1.2 + /mdast-util-to-hast@13.0.2: + resolution: + { + integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==, + } + dependencies: + "@types/hast": 3.0.3 + "@types/mdast": 4.0.0 + "@ungap/structured-clone": 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + /mdast-util-to-markdown@1.5.0: resolution: { @@ -8150,7 +8361,6 @@ packages: dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false /micromark-util-chunked@1.1.0: resolution: @@ -8260,7 +8470,6 @@ packages: { integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==, } - dev: false /micromark-util-events-to-acorn@1.2.3: resolution: @@ -8344,7 +8553,6 @@ packages: micromark-util-character: 2.0.1 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 - dev: false /micromark-util-subtokenize@1.1.0: resolution: @@ -8380,7 +8588,6 @@ packages: { integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==, } - dev: false /micromark-util-types@1.1.0: resolution: @@ -8393,7 +8600,6 @@ packages: { integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==, } - dev: false /micromark@3.2.0: resolution: @@ -8486,6 +8692,7 @@ packages: integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, } engines: { node: ">=10" } + requiresBuild: true /min-indent@1.0.1: resolution: @@ -8529,6 +8736,7 @@ packages: { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, } + requiresBuild: true /minipass@7.0.3: resolution: @@ -8551,6 +8759,7 @@ packages: { integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==, } + requiresBuild: true /mlly@1.4.2: resolution: @@ -8627,6 +8836,7 @@ packages: { integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==, } + requiresBuild: true /natural-compare-lite@1.4.0: resolution: @@ -8676,6 +8886,7 @@ packages: integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==, } engines: { node: ">=10" } + requiresBuild: true dependencies: semver: 7.5.4 @@ -8684,6 +8895,7 @@ packages: { integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==, } + requiresBuild: true /node-fetch@2.7.0: resolution: @@ -9035,6 +9247,23 @@ packages: engines: { node: ">=6" } dev: false + /p-queue@7.4.1: + resolution: + { + integrity: sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==, + } + engines: { node: ">=12" } + dependencies: + eventemitter3: 5.0.1 + p-timeout: 5.1.0 + + /p-timeout@5.1.0: + resolution: + { + integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==, + } + engines: { node: ">=12" } + /p-try@2.2.0: resolution: { @@ -9138,6 +9367,21 @@ packages: integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, } + /parse5@7.1.2: + resolution: + { + integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, + } + dependencies: + entities: 4.5.0 + + /path-browserify@1.0.1: + resolution: + { + integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==, + } + dev: true + /path-exists@4.0.0: resolution: { @@ -9214,6 +9458,14 @@ packages: } engines: { node: ">=8" } + /path-type@5.0.0: + resolution: + { + integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==, + } + engines: { node: ">=12" } + dev: false + /pathe@1.1.1: resolution: { @@ -9301,10 +9553,10 @@ packages: } dev: false - /pino@8.16.0: + /pino@8.16.2: resolution: { - integrity: sha512-UUmvQ/7KTZt/vHjhRrnyS7h+J7qPBQnpG80V56xmIC+o9IqYmQOw/UIny9S9zYDfRBR0ClouCr464EkBMIT7Fw==, + integrity: sha512-2advCDGVEvkKu9TTVSa/kWW7Z3htI/sBKEZpqiHk6ive0i/7f5b1rsU8jn0aimxqfnSz5bj/nOYkwhBUn5xxvg==, } hasBin: true dependencies: @@ -9453,6 +9705,7 @@ packages: } engines: { node: ">=10" } hasBin: true + requiresBuild: true dependencies: detect-libc: 2.0.2 expand-template: 2.0.3 @@ -9494,11 +9747,11 @@ packages: engines: { node: ^14.15.0 || >=16.0.0 } dependencies: "@astrojs/compiler": 1.8.2 - prettier: 3.0.3 + prettier: 3.1.0 sass-formatter: 0.7.8 dev: false - /prettier-plugin-jsdoc@1.1.1(prettier@3.0.3): + /prettier-plugin-jsdoc@1.1.1(prettier@3.1.0): resolution: { integrity: sha512-yA13k0StQ+g0RJBrmo2IldVSp3ANXlJdsNzQNhGtQ0LY7JFC+u01No/1Z9xp0ZhT4u98BXlPAc4SC0iambqy5A==, @@ -9510,12 +9763,12 @@ packages: binary-searching: 2.0.5 comment-parser: 1.4.0 mdast-util-from-markdown: 2.0.0 - prettier: 3.0.3 + prettier: 3.1.0 transitivePeerDependencies: - supports-color dev: false - /prettier-plugin-packagejson@2.4.5(prettier@3.0.3): + /prettier-plugin-packagejson@2.4.5(prettier@3.1.0): resolution: { integrity: sha512-glG71jE1gO3y5+JNAhC8X+4yrlN28rub6Aj461SKbaPie9RgMiHKcInH2Moi2VGOfkTXaEHBhg4uVMBqa+kBUA==, @@ -9526,12 +9779,12 @@ packages: prettier: optional: true dependencies: - prettier: 3.0.3 + prettier: 3.1.0 sort-package-json: 2.5.1 synckit: 0.8.5 dev: false - /prettier-plugin-sh@0.13.1(prettier@3.0.3): + /prettier-plugin-sh@0.13.1(prettier@3.1.0): resolution: { integrity: sha512-ytMcl1qK4s4BOFGvsc9b0+k9dYECal7U29bL/ke08FEUsF/JLN0j6Peo0wUkFDG4y2UHLMhvpyd6Sd3zDXe/eg==, @@ -9541,11 +9794,11 @@ packages: prettier: ^3.0.0 dependencies: mvdan-sh: 0.10.1 - prettier: 3.0.3 + prettier: 3.1.0 sh-syntax: 0.4.1 dev: false - /prettier-plugin-sort-json@3.1.0(prettier@3.0.3): + /prettier-plugin-sort-json@3.1.0(prettier@3.1.0): resolution: { integrity: sha512-eIDEUjwzekiVd+oKrpd0aoACBTp5zOW71wDTNy+qQ5C9Q8oqt9n9wCm4F+SeRZbXfgblh/WYIguJynImlBXrvQ==, @@ -9554,10 +9807,10 @@ packages: peerDependencies: prettier: ^3.0.0 dependencies: - prettier: 3.0.3 + prettier: 3.1.0 dev: false - /prettier-plugin-tailwindcss@0.5.5(prettier-plugin-astro@0.12.0)(prettier-plugin-jsdoc@1.1.1)(prettier@3.0.3): + /prettier-plugin-tailwindcss@0.5.5(prettier-plugin-astro@0.12.0)(prettier-plugin-jsdoc@1.1.1)(prettier@3.1.0): resolution: { integrity: sha512-voy0CjWv/CM8yeaduv5ZwovovpTGMR5LbzlhGF+LtEvMJt9wBeVTVnW781hL38R/RcDXCJwN2rolsgr94B/n0Q==, @@ -9612,9 +9865,9 @@ packages: prettier-plugin-twig-melody: optional: true dependencies: - prettier: 3.0.3 + prettier: 3.1.0 prettier-plugin-astro: 0.12.0 - prettier-plugin-jsdoc: 1.1.1(prettier@3.0.3) + prettier-plugin-jsdoc: 1.1.1(prettier@3.1.0) dev: false /prettier@2.8.8: @@ -9626,10 +9879,10 @@ packages: hasBin: true dev: false - /prettier@3.0.3: + /prettier@3.1.0: resolution: { - integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, + integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==, } engines: { node: ">=14" } hasBin: true @@ -9725,6 +9978,7 @@ packages: { integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, } + requiresBuild: true dependencies: end-of-stream: 1.4.4 once: 1.4.0 @@ -9763,6 +10017,7 @@ packages: { integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==, } + requiresBuild: true /quick-format-unescaped@4.0.4: resolution: @@ -9785,6 +10040,7 @@ packages: integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, } hasBin: true + requiresBuild: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -10074,13 +10330,6 @@ packages: } engines: { node: ">=0.10.0" } - /require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } - /require-main-filename@2.0.0: resolution: { @@ -10486,6 +10735,15 @@ packages: jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 + dev: false + + /shikiji@0.6.13: + resolution: + { + integrity: sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA==, + } + dependencies: + hast-util-to-html: 9.0.0 /side-channel@1.0.4: resolution: @@ -10522,12 +10780,14 @@ packages: { integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==, } + requiresBuild: true /simple-get@4.0.1: resolution: { integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==, } + requiresBuild: true dependencies: decompress-response: 6.0.0 once: 1.4.0 @@ -10538,6 +10798,7 @@ packages: { integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, } + requiresBuild: true dependencies: is-arrayish: 0.3.2 @@ -10576,16 +10837,13 @@ packages: engines: { node: ">=12" } dev: false - /slice-ansi@4.0.0: + /slash@5.1.0: resolution: { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, + integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==, } - engines: { node: ">=10" } - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 + engines: { node: ">=14.16" } + dev: false /smartwrap@2.0.2: resolution: @@ -10783,6 +11041,7 @@ packages: { integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==, } + requiresBuild: true dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -10928,13 +11187,6 @@ packages: } engines: { node: ">=4" } - /strip-bom@4.0.0: - resolution: - { - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, - } - engines: { node: ">=8" } - /strip-final-newline@2.0.0: resolution: { @@ -10965,6 +11217,7 @@ packages: integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, } engines: { node: ">=0.10.0" } + requiresBuild: true /strip-json-comments@3.1.1: resolution: @@ -11053,23 +11306,10 @@ packages: tslib: 2.6.2 dev: false - /table@6.8.1: - resolution: - { - integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==, - } - engines: { node: ">=10.0.0" } - dependencies: - ajv: 8.12.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - /tailwindcss@3.3.3: + /tailwindcss@3.3.5: resolution: { - integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==, + integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==, } engines: { node: ">=14.0.0" } hasBin: true @@ -11112,6 +11352,7 @@ packages: { integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==, } + requiresBuild: true dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -11123,6 +11364,7 @@ packages: { integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==, } + requiresBuild: true dependencies: mkdirp-classic: 0.5.3 pump: 3.0.0 @@ -11134,6 +11376,7 @@ packages: integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, } engines: { node: ">=6" } + requiresBuild: true dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -11146,6 +11389,7 @@ packages: { integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==, } + requiresBuild: true dependencies: b4a: 1.6.4 fast-fifo: 1.3.2 @@ -11290,6 +11534,21 @@ packages: integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==, } + /tsconfck@3.0.0(typescript@5.2.2): + resolution: + { + integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==, + } + engines: { node: ^18 || >=20 } + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.2.2 + /tsconfig-paths@3.14.2: resolution: { @@ -11301,19 +11560,6 @@ packages: minimist: 1.2.8 strip-bom: 3.0.0 - /tsconfig-resolver@3.0.1: - resolution: - { - integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==, - } - dependencies: - "@types/json5": 0.0.30 - "@types/resolve": 1.20.2 - json5: 2.2.3 - resolve: 1.22.4 - strip-bom: 4.0.0 - type-fest: 0.13.1 - /tslib@1.14.1: resolution: { @@ -11351,11 +11597,12 @@ packages: tslib: 1.14.1 typescript: 5.2.2 - /tsx@3.13.0: + /tsx@4.1.2: resolution: { - integrity: sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==, + integrity: sha512-1spM1bFV6MP2s4tO4tDC7g52fsaFdtEWdO4GfGdqi20qUgPbnAJqixOyIAvCSx1DDj3YIUB4CD06owTWUsOAuQ==, } + engines: { node: ">=18.0.0" } hasBin: true dependencies: esbuild: 0.18.20 @@ -11387,13 +11634,14 @@ packages: { integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, } + requiresBuild: true dependencies: safe-buffer: 5.2.1 - /turbo-darwin-64@1.10.15: + /turbo-darwin-64@1.10.16: resolution: { - integrity: sha512-Sik5uogjkRTe1XVP9TC2GryEMOJCaKE2pM/O9uLn4koQDnWKGcLQv+mDU+H+9DXvKLnJnKCD18OVRkwK5tdpoA==, + integrity: sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==, } cpu: [x64] os: [darwin] @@ -11401,10 +11649,10 @@ packages: dev: false optional: true - /turbo-darwin-arm64@1.10.15: + /turbo-darwin-arm64@1.10.16: resolution: { - integrity: sha512-xwqyFDYUcl2xwXyGPmHkmgnNm4Cy0oNzMpMOBGRr5x64SErS7QQLR4VHb0ubiR+VAb8M+ECPklU6vD1Gm+wekg==, + integrity: sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==, } cpu: [arm64] os: [darwin] @@ -11412,10 +11660,10 @@ packages: dev: false optional: true - /turbo-linux-64@1.10.15: + /turbo-linux-64@1.10.16: resolution: { - integrity: sha512-dM07SiO3RMAJ09Z+uB2LNUSkPp3I1IMF8goH5eLj+d8Kkwoxd/+qbUZOj9RvInyxU/IhlnO9w3PGd3Hp14m/nA==, + integrity: sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==, } cpu: [x64] os: [linux] @@ -11423,10 +11671,10 @@ packages: dev: false optional: true - /turbo-linux-arm64@1.10.15: + /turbo-linux-arm64@1.10.16: resolution: { - integrity: sha512-MkzKLkKYKyrz4lwfjNXH8aTny5+Hmiu4SFBZbx+5C0vOlyp6fV5jZANDBvLXWiDDL4DSEAuCEK/2cmN6FVH1ow==, + integrity: sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==, } cpu: [arm64] os: [linux] @@ -11434,10 +11682,10 @@ packages: dev: false optional: true - /turbo-windows-64@1.10.15: + /turbo-windows-64@1.10.16: resolution: { - integrity: sha512-3TdVU+WEH9ThvQGwV3ieX/XHebtYNHv9HARHauPwmVj3kakoALkpGxLclkHFBLdLKkqDvmHmXtcsfs6cXXRHJg==, + integrity: sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==, } cpu: [x64] os: [win32] @@ -11445,10 +11693,10 @@ packages: dev: false optional: true - /turbo-windows-arm64@1.10.15: + /turbo-windows-arm64@1.10.16: resolution: { - integrity: sha512-l+7UOBCbfadvPMYsX08hyLD+UIoAkg6ojfH+E8aud3gcA1padpjCJTh9gMpm3QdMbKwZteT5uUM+wyi6Rbbyww==, + integrity: sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==, } cpu: [arm64] os: [win32] @@ -11456,19 +11704,19 @@ packages: dev: false optional: true - /turbo@1.10.15: + /turbo@1.10.16: resolution: { - integrity: sha512-mKKkqsuDAQy1wCCIjCdG+jOCwUflhckDMSRoeBPcIL/CnCl7c5yRDFe7SyaXloUUkt4tUR0rvNIhVCcT7YeQpg==, + integrity: sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==, } hasBin: true optionalDependencies: - turbo-darwin-64: 1.10.15 - turbo-darwin-arm64: 1.10.15 - turbo-linux-64: 1.10.15 - turbo-linux-arm64: 1.10.15 - turbo-windows-64: 1.10.15 - turbo-windows-arm64: 1.10.15 + turbo-darwin-64: 1.10.16 + turbo-darwin-arm64: 1.10.16 + turbo-linux-64: 1.10.16 + turbo-linux-arm64: 1.10.16 + turbo-windows-64: 1.10.16 + turbo-windows-arm64: 1.10.16 dev: false /type-check@0.4.0: @@ -11494,6 +11742,7 @@ packages: integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, } engines: { node: ">=10" } + dev: false /type-fest@0.20.2: resolution: @@ -11635,6 +11884,14 @@ packages: integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==, } + /unicorn-magic@0.1.0: + resolution: + { + integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==, + } + engines: { node: ">=18" } + dev: false + /unified@10.1.2: resolution: { @@ -11697,6 +11954,14 @@ packages: dependencies: "@types/unist": 2.0.8 + /unist-util-position@5.0.0: + resolution: + { + integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, + } + dependencies: + "@types/unist": 3.0.0 + /unist-util-remove-position@4.0.2: resolution: { @@ -11733,7 +11998,6 @@ packages: } dependencies: "@types/unist": 3.0.0 - dev: false /unist-util-visit-children@2.0.2: resolution: @@ -11893,6 +12157,15 @@ packages: "@types/unist": 2.0.8 vfile: 5.3.7 + /vfile-location@5.0.2: + resolution: + { + integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==, + } + dependencies: + "@types/unist": 3.0.0 + vfile: 6.0.1 + /vfile-message@3.1.4: resolution: { @@ -11902,6 +12175,15 @@ packages: "@types/unist": 2.0.8 unist-util-stringify-position: 3.0.3 + /vfile-message@4.0.2: + resolution: + { + integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==, + } + dependencies: + "@types/unist": 3.0.0 + unist-util-stringify-position: 4.0.0 + /vfile@5.3.7: resolution: { @@ -11913,6 +12195,16 @@ packages: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 + /vfile@6.0.1: + resolution: + { + integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==, + } + dependencies: + "@types/unist": 3.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + /vite-node@0.34.6(@types/node@18.18.4): resolution: { @@ -12057,10 +12349,10 @@ packages: - terser dev: true - /volar-service-css@0.0.13(@volar/language-service@1.10.1): + /volar-service-css@0.0.16(@volar/language-service@1.10.10): resolution: { - integrity: sha512-WAuo7oDYgTQ1cr45EqTGoPGtClj0f5PZDQARgQveXKu0CQgyXn8Bs7c4EjDR0fNLhiG3moBEs2uSUGxjSKghxw==, + integrity: sha512-gK/XD35t/P3SQrUuS8LMlCnE2ItIk+kXI6gPvBYl1NZ7O+tLH8rUWXA32YgpwNoITxYrm/G1seaq08zs4aiPvg==, } peerDependencies: "@volar/language-service": ~1.10.0 @@ -12068,15 +12360,15 @@ packages: "@volar/language-service": optional: true dependencies: - "@volar/language-service": 1.10.1 - vscode-css-languageservice: 6.2.7 - vscode-uri: 3.0.7 + "@volar/language-service": 1.10.10 + vscode-css-languageservice: 6.2.10 + vscode-uri: 3.0.8 dev: true - /volar-service-emmet@0.0.13(@volar/language-service@1.10.1): + /volar-service-emmet@0.0.16(@volar/language-service@1.10.10): resolution: { - integrity: sha512-y/U3up9b3YA8DL36h6KUGnBoH/TUmr1Iv9HWuSeWJKoA6LOt57AOIgzl7+/zY8d+0+C0jGqpV4CM8V5+TjptvQ==, + integrity: sha512-8sWWywzVJOD+PWDArOXDWbiRlM7+peydFhXJT71i4X1WPW32RyPxn6FypvciO+amqpfZP2rXfB9eibIJ+EofSQ==, } peerDependencies: "@volar/language-service": ~1.10.0 @@ -12084,15 +12376,15 @@ packages: "@volar/language-service": optional: true dependencies: - "@volar/language-service": 1.10.1 + "@volar/language-service": 1.10.10 "@vscode/emmet-helper": 2.9.2 - volar-service-html: 0.0.13(@volar/language-service@1.10.1) + volar-service-html: 0.0.16(@volar/language-service@1.10.10) dev: true - /volar-service-html@0.0.13(@volar/language-service@1.10.1): + /volar-service-html@0.0.16(@volar/language-service@1.10.10): resolution: { - integrity: sha512-Y4pfmNsIpkDTixJVdobRMDZm5Ax90magUCdYl6HUN0/RstxHb3ogEodTT1GtNmoek/YYTrxbWZYN/Yq49+9zdg==, + integrity: sha512-/oEXXgry++1CnTXQBUNf9B8MZfTlYZuJfZA7Zx9MN7WS4ZPxk3BFOdal/cXH6RNR2ruNEYr5QTW9rsqtoUscag==, } peerDependencies: "@volar/language-service": ~1.10.0 @@ -12100,15 +12392,15 @@ packages: "@volar/language-service": optional: true dependencies: - "@volar/language-service": 1.10.1 + "@volar/language-service": 1.10.10 vscode-html-languageservice: 5.1.0 - vscode-uri: 3.0.7 + vscode-uri: 3.0.8 dev: true - /volar-service-prettier@0.0.13(@volar/language-service@1.10.1)(prettier@3.0.3): + /volar-service-prettier@0.0.16(@volar/language-service@1.10.10)(prettier@3.1.0): resolution: { - integrity: sha512-4V/v+oNXyoC4QRNCY6JDAD4BvVatuswyH8o7flgO/XHDRIG+WwGo8Avsbmq4TLktjBGFUa4Gb9aK9+RkznEEZQ==, + integrity: sha512-Kj2ZdwJGEvfYbsHW8Sjrew/7EB4PgRoas4f8yAJzUUVxIC/kvhUwLDxQc8+N2IibomN76asJGWe+i6VZZvgIkw==, } peerDependencies: "@volar/language-service": ~1.10.0 @@ -12119,14 +12411,14 @@ packages: prettier: optional: true dependencies: - "@volar/language-service": 1.10.1 - prettier: 3.0.3 + "@volar/language-service": 1.10.10 + prettier: 3.1.0 dev: true - /volar-service-typescript-twoslash-queries@0.0.13(@volar/language-service@1.10.1): + /volar-service-typescript-twoslash-queries@0.0.16(@volar/language-service@1.10.10): resolution: { - integrity: sha512-KGk5ek2v7T8OSY9YdMmqGOT0KkoUQAe8RbPmoZibT9F3vgmmWVgaAoIlDZ1vwt7VfQeZvRmhvRJhqpCA80ZF8Q==, + integrity: sha512-0gPrkDTD2bMj2AnSNykOKhfmPnBFE2LS1lF3LWA7qu1ChRnJF0sodwCCbbeNYJ9+yth956ApoU1BVQ8UrMg+yw==, } peerDependencies: "@volar/language-service": ~1.10.0 @@ -12134,13 +12426,13 @@ packages: "@volar/language-service": optional: true dependencies: - "@volar/language-service": 1.10.1 + "@volar/language-service": 1.10.10 dev: true - /volar-service-typescript@0.0.13(@volar/language-service@1.10.1)(@volar/typescript@1.10.1): + /volar-service-typescript@0.0.16(@volar/language-service@1.10.10)(@volar/typescript@1.10.10): resolution: { - integrity: sha512-fwpoA1L/bCXz5hl9W4EYJYNyorocfdfbLQ9lTM3rPVOzjRZVknEE8XP31RMPZhEg3sOxKh18+sLEL7j3bip8ew==, + integrity: sha512-k/qFKM2oxs/3fhbr/vcBSHnCLZ1HN3Aeh+bGvV9Lc9qIhrNyCVsDFOUJN1Qp4dI72+Y+eFSIDCLHmFEZdsP2EA==, } peerDependencies: "@volar/language-service": ~1.10.0 @@ -12149,25 +12441,26 @@ packages: "@volar/language-service": optional: true dependencies: - "@volar/language-service": 1.10.1 - "@volar/typescript": 1.10.1 + "@volar/language-service": 1.10.10 + "@volar/typescript": 1.10.10 + path-browserify: 1.0.1 semver: 7.5.4 typescript-auto-import-cache: 0.3.0 - vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-textdocument: 1.0.11 vscode-nls: 5.2.0 - vscode-uri: 3.0.7 + vscode-uri: 3.0.8 dev: true - /vscode-css-languageservice@6.2.7: + /vscode-css-languageservice@6.2.10: resolution: { - integrity: sha512-Jd8wpIg5kJ15CfrieoEPvu3gGFc36sbM3qXCtjVq5zrnLEX5NhHxikMDtf8AgQsYklXiDqiZLKoBnzkJtRbTHQ==, + integrity: sha512-sYUZPku4mQ06AWGCbMyjv2tdR6juBW6hTbVPFwbJvNVzdtEfBioQOgkdXg7yMJNWnXkvWSU1FL2kb4Vxu5Cdyw==, } dependencies: "@vscode/l10n": 0.0.16 - vscode-languageserver-textdocument: 1.0.8 - vscode-languageserver-types: 3.17.3 - vscode-uri: 3.0.7 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 dev: true /vscode-html-languageservice@5.1.0: @@ -12179,25 +12472,32 @@ packages: "@vscode/l10n": 0.0.16 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 - vscode-uri: 3.0.7 + vscode-uri: 3.0.8 dev: true - /vscode-jsonrpc@8.1.0: + /vscode-jsonrpc@8.2.0: resolution: { - integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==, + integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==, } engines: { node: ">=14.0.0" } dev: true - /vscode-languageserver-protocol@3.17.3: + /vscode-languageserver-protocol@3.17.5: resolution: { - integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==, + integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==, } dependencies: - vscode-jsonrpc: 8.1.0 - vscode-languageserver-types: 3.17.3 + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + dev: true + + /vscode-languageserver-textdocument@1.0.11: + resolution: + { + integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==, + } dev: true /vscode-languageserver-textdocument@1.0.8: @@ -12214,14 +12514,21 @@ packages: } dev: true - /vscode-languageserver@8.1.0: + /vscode-languageserver-types@3.17.5: + resolution: + { + integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==, + } + dev: true + + /vscode-languageserver@9.0.1: resolution: { - integrity: sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==, + integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==, } hasBin: true dependencies: - vscode-languageserver-protocol: 3.17.3 + vscode-languageserver-protocol: 3.17.5 dev: true /vscode-nls@5.2.0: @@ -12236,12 +12543,14 @@ packages: { integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==, } + dev: false /vscode-textmate@8.0.0: resolution: { integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==, } + dev: false /vscode-uri@2.1.2: resolution: @@ -12250,10 +12559,10 @@ packages: } dev: true - /vscode-uri@3.0.7: + /vscode-uri@3.0.8: resolution: { - integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==, + integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==, } dev: true @@ -12399,10 +12708,10 @@ packages: dependencies: string-width: 5.1.2 - /workspace-tools@0.35.2: + /workspace-tools@0.36.3: resolution: { - integrity: sha512-x637etwRdY3kbiSAJzAUbja4gzL/kMbDy8WX8yGK+ZvRlMY3o+G3UzvdEjwipVZ7C+RIUVdk/QV/hoRzbUcKiQ==, + integrity: sha512-9kx+l+1ClwFbp5CM+3jwNYDFI2sHl0T1oA7ld/LKMnDcMm3225p6UjFUuXo7yMjBWCc2Yecat+0vqTHmdrzYlA==, } dependencies: "@yarnpkg/lockfile": 1.1.0 @@ -12506,13 +12815,6 @@ packages: integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, } - /yaml@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, - } - engines: { node: ">= 6" } - /yaml@2.3.2: resolution: { @@ -12593,6 +12895,13 @@ packages: { integrity: sha512-+dTu2m6gmCbO9Ahm4ZBDapx2O6ZY9QSPXst2WXjcznPMwf2YNpn3RevLx4KkZp1OPW/ouFcoBtBzFz/LeY69oA==, } + dev: false + + /zod@3.22.4: + resolution: + { + integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==, + } /zwitch@2.0.4: resolution: diff --git a/scripts/package.json b/scripts/package.json index e467a3a..fc5a505 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -28,22 +28,22 @@ "root": false }, "dependencies": { - "commander": "^11.0.0", + "commander": "^11.1.0", "cosmiconfig": "^8.3.6", - "esbuild": "^0.19.4", - "globby": "^13.2.2" + "esbuild": "^0.19.5", + "globby": "^14.0.0" }, "devDependencies": { "@types/node": "^18.18.0", - "eslint": "^8.51.0", - "prettier": "^3.0.3", - "tsx": "^3.13.0", + "eslint": "^8.53.0", + "prettier": "^3.1.0", + "tsx": "^4.1.2", "typescript": "^5.2.2" }, "peerDependencies": { "typescript": "^5.2.2" }, "engines": { - "node": "18.x" + "node": "18.x || 20.x" } } diff --git a/scripts/src/utils/ts-util.ts b/scripts/src/utils/ts-util.ts index c0a3b54..6e937bb 100644 --- a/scripts/src/utils/ts-util.ts +++ b/scripts/src/utils/ts-util.ts @@ -7,10 +7,10 @@ const findTsConfigPath = () => existsSync("./tsconfig.build.json") ? "./tsconfig.build.json" : existsSync("./tsconfig.json") - ? "./tsconfig.json" - : existsSync("../tsconfig.base.json") - ? "../tsconfig.base.json" - : "../../tsconfig.base.json" + ? "./tsconfig.json" + : existsSync("../tsconfig.base.json") + ? "../tsconfig.base.json" + : "../../tsconfig.base.json" const findTsConfig = () => resolve(findTsConfigPath()) diff --git a/tsconfig.base.json b/tsconfig.base.json index 1f644b1..808d005 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -7,8 +7,8 @@ "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ES2020", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", "moduleResolution": "Node", "noFallthroughCasesInSwitch": true, "noImplicitOverride": true,