diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9370b2d..ef9c922 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: - uses: pnpm/action-setup@v2 with: version: "8.7.6" - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node_version }} cache: "pnpm" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d6fdd8c..c9db543 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,7 +7,7 @@ on: description: The version of node to use required: false type: string - default: "18" + default: "20" pnpm_version: description: The version of PNPM to use required: false @@ -84,7 +84,7 @@ jobs: - uses: pnpm/action-setup@v2 with: version: ${{ inputs.pnpm_version }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: ${{ inputs.node_version }} cache: "pnpm" diff --git a/apps/infra/cdk.context.json b/apps/infra/cdk.context.json deleted file mode 100644 index 2ab6569..0000000 --- a/apps/infra/cdk.context.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "hosted-zone:account=738697399292:domainName=astro-aws.org:region=us-east-1": { - "Id": "/hostedzone/Z0584480MGUI8KRBPWM", - "Name": "astro-aws.org." - } -} diff --git a/apps/infra/package.json b/apps/infra/package.json index fedeeee..64d522a 100644 --- a/apps/infra/package.json +++ b/apps/infra/package.json @@ -30,6 +30,7 @@ "dependencies": { "@astro-aws/constructs": "workspace:^", "@astro-aws/docs": "workspace:^", + "@aws-sdk/client-acm": "^3.460.0", "aws-cdk": "^2.109.0", "aws-cdk-lib": "^2.109.0", "constructs": "^10.3.0", @@ -40,6 +41,7 @@ }, "devDependencies": { "@astro-aws/scripts": "workspace:^", + "@types/aws-lambda": "^8.10.126", "@types/node": "^18.18.0", "eslint-config-get-off-my-lawn": "^7.2.0" }, diff --git a/apps/infra/src/bin/infra.ts b/apps/infra/src/bin/infra.ts index e08e30b..b996525 100644 --- a/apps/infra/src/bin/infra.ts +++ b/apps/infra/src/bin/infra.ts @@ -5,9 +5,9 @@ import { ENVIRONMENT_PROPS, } from "../lib/constants/environments.js" import { WebsiteStack } from "../lib/stacks/website-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" +import { RedirectStack } from "../lib/stacks/redirect-stack.js" const app = new App() @@ -20,30 +20,13 @@ const createStackName = ( Object.entries(ENVIRONMENT_PROPS).forEach(([environment, environmentProps]) => { environmentProps.websites.forEach((websiteProps) => { - 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, - }, - ) + // eslint-disable-next-line no-param-reassign + delete websiteProps.redirectAliases } new WebsiteStack( @@ -57,10 +40,25 @@ Object.entries(ENVIRONMENT_PROPS).forEach(([environment, environmentProps]) => { { ...environmentProps, ...websiteProps, - certificate: certificateStack?.certificate, - hostedZone: certificateStack?.hostedZone, }, ) + + if (websiteProps.redirectAliases && websiteProps.hostedZoneName) { + new RedirectStack( + app, + createStackName( + environment, + "Redirect", + websiteProps.runtime, + websiteProps.mode, + ), + { + ...environmentProps, + aliases: websiteProps.redirectAliases, + hostedZoneName: websiteProps.hostedZoneName, + }, + ) + } }) if (environment === Environments.DEV) { diff --git a/apps/infra/src/lib/constants/environments.ts b/apps/infra/src/lib/constants/environments.ts index f30062d..9b2b07f 100644 --- a/apps/infra/src/lib/constants/environments.ts +++ b/apps/infra/src/lib/constants/environments.ts @@ -21,11 +21,12 @@ const Environments = { type Environment = (typeof Environments)[keyof typeof Environments] -type EnvironmentProps = Readonly< - AstroAWSStackProps & { - websites: readonly (Partial & StaticWebsiteStackProps)[] - } -> +type EnvironmentProps = AstroAWSStackProps & { + websites: readonly (Partial & + StaticWebsiteStackProps & { + redirectAliases?: [string, ...string[]] + })[] +} const ENVIRONMENT_PROPS: Record = { [Environments.DEV]: { @@ -96,10 +97,11 @@ const ENVIRONMENT_PROPS: Record = { environment: Environments.PROD, websites: [ { - aliases: ["www.docs", "docs"], + aliases: ["www.docs"], hostedZoneName: "astro-aws.org", mode: "static", package: "@astro-aws/docs", + redirectAliases: ["", "www", "docs"], runtime: "nodejs20", }, ], @@ -125,6 +127,6 @@ const ENVIRONMENT_PROPS: Record = { }, ], }, -} as const +} export { Environments, ENVIRONMENT_PROPS, type Environment } diff --git a/apps/infra/src/lib/constructs/cross-region-certificate.ts b/apps/infra/src/lib/constructs/cross-region-certificate.ts new file mode 100644 index 0000000..6bcd431 --- /dev/null +++ b/apps/infra/src/lib/constructs/cross-region-certificate.ts @@ -0,0 +1,136 @@ +// eslint-disable-next-line max-classes-per-file +import * as path from "node:path" + +import { Stack, CustomResource, Duration } from "aws-cdk-lib/core" +import { Provider } from "aws-cdk-lib/custom-resources" +import { Construct } from "constructs" +import { Code, Function, Runtime } from "aws-cdk-lib/aws-lambda" +import { PolicyStatement } from "aws-cdk-lib/aws-iam" +import { + Certificate, + type ICertificate, +} from "aws-cdk-lib/aws-certificatemanager" + +class CrossRegionCertificateProvider extends Construct { + private readonly provider: Provider + + public constructor(scope: Construct, id: string) { + super(scope, id) + + const onEventHandler = new Function( + this, + "CrossRegionCertificateProviderEventHandler", + { + code: Code.fromAsset( + path.resolve(".", "support", "cross-region-certificate"), + ), + handler: "index.onEvent", + initialPolicy: [ + new PolicyStatement({ + actions: ["acm:RequestCertificate", "acm:DeleteCertificate"], + resources: ["*"], + }), + ], + runtime: Runtime.NODEJS_20_X, + }, + ) + + const isCompleteHandler = new Function( + this, + "CrossRegionCertificateProviderCompleteHandler", + { + code: Code.fromAsset( + path.resolve(".", "support", "cross-region-certificate"), + ), + handler: "index.isComplete", + initialPolicy: [ + new PolicyStatement({ + actions: ["acm:DescribeCertificate"], + resources: ["*"], + }), + ], + runtime: Runtime.NODEJS_20_X, + }, + ) + + this.provider = new Provider(this, "CrossRegionCertificateProvider", { + isCompleteHandler, + onEventHandler, + queryInterval: Duration.seconds(15), + totalTimeout: Duration.minutes(20), + }) + } + + public static getOrCreate(scope: Construct) { + const stack = Stack.of(scope) + const id = + "org.astro-aws.cdk.custom-resources.cross-region-certificate-provider" + const x = + (stack.node.tryFindChild(id) as + | CrossRegionCertificateProvider + | undefined) ?? new CrossRegionCertificateProvider(stack, id) + + return x.provider.serviceToken + } +} + +type CerticateStatus = + | "EXPIRED" + | "FAILED" + | "INACTIVE" + | "ISSUED" + | "PENDING_VALIDATION" + | "REVOKED" + | "VALIDATION_TIMED_OUT" + | undefined + +type CrossRegionCertificateProperties = { + domainName: string + alternateNames?: string[] + region?: string +} + +class CrossRegionCertificate extends Construct { + public readonly certificateArn: string + public readonly domainName: string + public readonly alternateNames: string[] + public readonly region: string + public readonly status: CerticateStatus + public readonly certificate: ICertificate + + public constructor( + scope: Construct, + id: string, + properties: CrossRegionCertificateProperties, + ) { + super(scope, id) + + const resource = new CustomResource(this, "Resource", { + properties: { + alternateNames: properties.alternateNames ?? [], + domainName: properties.domainName, + idempotenceToken: this.node.addr, + region: properties.region ?? Stack.of(this).region, + }, + resourceType: "Custom::CrossRegionCertificate", + serviceToken: CrossRegionCertificateProvider.getOrCreate(this), + }) + + this.certificateArn = resource.getAttString("certificateArn") + this.domainName = resource.getAttString("domainName") + this.alternateNames = resource.getAtt("alternateNames").toStringList() + this.region = resource.getAttString("region") + this.status = resource.getAttString("status") as CerticateStatus + this.certificate = Certificate.fromCertificateArn( + this, + "Certificate", + this.certificateArn, + ) + } +} + +export { + type CrossRegionCertificateProperties, + type CerticateStatus, + CrossRegionCertificate, +} diff --git a/apps/infra/src/lib/stacks/certificate-stack.ts b/apps/infra/src/lib/stacks/certificate-stack.ts index a6ae37d..2e61dc7 100644 --- a/apps/infra/src/lib/stacks/certificate-stack.ts +++ b/apps/infra/src/lib/stacks/certificate-stack.ts @@ -32,7 +32,7 @@ export class CertificateStack extends Stack { const { hostedZoneName, aliases } = props const [domainName, ...restDomainNames] = aliases.map((alias) => - [alias, hostedZoneName].join("."), + [alias, hostedZoneName].filter(Boolean).join("."), ) as [string, ...string[]] this.hostedZone = HostedZone.fromLookup(this, "HostedZone", { diff --git a/apps/infra/src/lib/stacks/redirect-stack.ts b/apps/infra/src/lib/stacks/redirect-stack.ts index 4b6e30e..5aefa60 100644 --- a/apps/infra/src/lib/stacks/redirect-stack.ts +++ b/apps/infra/src/lib/stacks/redirect-stack.ts @@ -1,60 +1,61 @@ -import { Stack, Duration } from "aws-cdk-lib/core" -import type { Certificate } from "aws-cdk-lib/aws-certificatemanager" +import * as path from "node:path" + +import { Stack } from "aws-cdk-lib/core" import { Distribution, Function, FunctionCode, FunctionEventType, + ViewerProtocolPolicy, } from "aws-cdk-lib/aws-cloudfront" import type { Construct } from "constructs" -import type { Dashboard } from "aws-cdk-lib/aws-cloudwatch" import { AaaaRecord, ARecord, + HostedZone, 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" +import { S3Origin } from "aws-cdk-lib/aws-cloudfront-origins" +import { BlockPublicAccess, Bucket, BucketEncryption } from "aws-cdk-lib/aws-s3" -import { DistributionMetric } from "../constructs/distribution-metric.js" -import { BasicGraphWidget } from "../constructs/basic-graph-widget.js" import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" +import { CrossRegionCertificate } from "../constructs/cross-region-certificate.js" export type RedirectStackProps = AstroAWSStackProps & { - cloudwatchDashboard: Dashboard - certificate: Certificate - hostedZone: IHostedZone + hostedZoneName: string + aliases: [string, ...string[]] } export class RedirectStack extends Stack { public constructor(scope: Construct, id: string, props: RedirectStackProps) { super(scope, id, props) - const { - hostedZoneName, - alias, - cloudwatchDashboard, - hostedZone, - certificate, - } = props + const { hostedZoneName, aliases } = props - const domainName = [alias, hostedZoneName].filter(Boolean).join(".") + const domainNames = aliases.map((alias) => + [alias, hostedZoneName].filter(Boolean).join("."), + ) as [string, ...string[]] const wwwRedirectFunction = new Function(this, "WwwRedirectFunction", { - code: FunctionCode.fromInline(` - function handler(event) { - return { - statusCode: 301, - statusDescription: "Moved Permanently", - headers: { - location: { - value: "https://${domainName}" + event.request.uri, - } - } - } - } - `), + code: FunctionCode.fromFile({ + filePath: path.resolve(".", "support", "redirect", "index.js"), + }), + }) + + const [domainName, ...alternateNames] = domainNames + + const { certificate } = new CrossRegionCertificate(this, "Certificate", { + alternateNames, + domainName, + region: "us-east-1", + }) + + const bucket = new Bucket(this, "RedirectBucket", { + blockPublicAccess: BlockPublicAccess.BLOCK_ALL, + encryption: BucketEncryption.S3_MANAGED, + enforceSSL: true, + versioned: true, }) const distribution = new Distribution(this, "WWWRedirectDistribution", { @@ -66,42 +67,28 @@ export class RedirectStack extends Stack { function: wwwRedirectFunction, }, ], - origin: new HttpOrigin(domainName.replace("www.", "")), + origin: new S3Origin(bucket), + viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS, }, - domainNames: [domainName], + domainNames, }) - new ARecord(this, "ARecord", { - recordName: `www.${domainName}`, - target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), - zone: hostedZone, + const hostedZone = HostedZone.fromLookup(this, "HostedZone", { + domainName: hostedZoneName, }) - new AaaaRecord(this, "AaaaRecord", { - recordName: `www.${domainName}`, - target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), - zone: hostedZone, - }) + domainNames.forEach((domain) => { + new ARecord(this, `${domain}-ARecord`, { + recordName: domain, + target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), + zone: hostedZone, + }) - const distribution5xxErrorRateMetric = new DistributionMetric({ - distribution, - label: "Redirect CloudFront 5xx error rate", - metricName: "5xxErrorRate", - period: Duration.minutes(5), - statistic: "Sum", + new AaaaRecord(this, `${domain}-AaaaRecord`, { + recordName: domain, + target: RecordTarget.fromAlias(new CloudFrontTarget(distribution)), + zone: hostedZone, + }) }) - - const distributionRequestsMetric = new DistributionMetric({ - distribution, - label: "Redirect CloudFront requests", - metricName: "Requests", - period: Duration.minutes(5), - statistic: "Sum", - }) - - cloudwatchDashboard.addWidgets( - new BasicGraphWidget({ metric: distribution5xxErrorRateMetric }), - new BasicGraphWidget({ metric: distributionRequestsMetric }), - ) } } diff --git a/apps/infra/src/lib/stacks/website-stack.ts b/apps/infra/src/lib/stacks/website-stack.ts index e38e55c..000dd21 100644 --- a/apps/infra/src/lib/stacks/website-stack.ts +++ b/apps/infra/src/lib/stacks/website-stack.ts @@ -2,19 +2,24 @@ import { cwd, env } from "node:process" import { getPnpmWorkspaces } from "workspace-tools" import { CfnOutput, Duration, Stack } from "aws-cdk-lib/core" -import type { Certificate } from "aws-cdk-lib/aws-certificatemanager" +import type { ICertificate } from "aws-cdk-lib/aws-certificatemanager" import { CachePolicy, PriceClass, ResponseHeadersPolicy, + ViewerProtocolPolicy, } from "aws-cdk-lib/aws-cloudfront" 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" import type { ConcreteWidget, 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, + HostedZone, + RecordTarget, +} from "aws-cdk-lib/aws-route53" import { CloudFrontTarget } from "aws-cdk-lib/aws-route53-targets" import { BlockPublicAccess, @@ -27,6 +32,7 @@ import { DistributionMetric } from "../constructs/distribution-metric.js" import { BasicGraphWidget } from "../constructs/basic-graph-widget.js" import { Environments } from "../constants/environments.js" import type { AstroAWSStackProps } from "../types/astro-aws-stack-props.js" +import { CrossRegionCertificate } from "../constructs/cross-region-certificate.js" type StaticWebsiteStackProps = { aliases?: readonly [string, ...string[]] @@ -39,8 +45,6 @@ type StaticWebsiteStackProps = { type WebsiteStackProps = AstroAWSStackProps & StaticWebsiteStackProps & { cloudwatchDashboard?: Dashboard - certificate?: Certificate - hostedZone?: IHostedZone } class WebsiteStack extends Stack { @@ -51,20 +55,45 @@ class WebsiteStack extends Stack { const { aliases, - certificate, cloudwatchDashboard, mode, environment, - hostedZone, hostedZoneName, runtime, } = props + const hostedZone = hostedZoneName + ? HostedZone.fromLookup(this, "HostedZone", { + domainName: hostedZoneName, + }) + : undefined + const distDir = mode === "static" ? "dist" : `dist/${mode}` const domainNames = aliases?.map((alias) => [alias, hostedZoneName].filter(Boolean).join("."), ) + let certificate: ICertificate | undefined + + if (hostedZone && domainNames?.length) { + const [domainName, ...alternateNames] = domainNames as [ + string, + ...string[], + ] + + const crossRegionCertificate = new CrossRegionCertificate( + this, + "Certificate", + { + alternateNames, + domainName, + region: "us-east-1", + }, + ) + + certificate = crossRegionCertificate.certificate + } + const cachePolicy = new CachePolicy(this, "CachePolicy", { minTtl: Duration.days(365), }) @@ -80,6 +109,7 @@ class WebsiteStack extends Stack { cloudfrontDistribution: { apiBehavior: { cachePolicy, + viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS, }, certificate, comment: environment, @@ -98,6 +128,7 @@ class WebsiteStack extends Stack { }, }, ), + viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS, }, domainNames, errorResponses: [ @@ -133,7 +164,7 @@ class WebsiteStack extends Stack { outDir: [this.#getWorkspacePath(props.package), distDir].join("/"), }) - if (hostedZone && domainNames) { + if (hostedZone && domainNames?.length) { domainNames.forEach((domainName) => { new ARecord(this, `ARecord-${domainName}`, { recordName: domainName, diff --git a/apps/infra/support/cross-region-certificate/index.mjs b/apps/infra/support/cross-region-certificate/index.mjs new file mode 100644 index 0000000..bbb8d01 --- /dev/null +++ b/apps/infra/support/cross-region-certificate/index.mjs @@ -0,0 +1,89 @@ +import { randomUUID } from "node:crypto" + +import { + ACMClient, + DeleteCertificateCommand, + DescribeCertificateCommand, + RequestCertificateCommand, +} from "@aws-sdk/client-acm" + +/** @type {import("aws-lambda").CdkCustomResourceHandler} */ +const onEvent = async (event) => { + const { region, domainName, alternateNames, idempotencyToken } = + event.ResourceProperties + const client = new ACMClient({ + region, + }) + + if (event.RequestType === "Create" || event.RequestType === "Update") { + const result = await client.send( + new RequestCertificateCommand({ + DomainName: domainName, + IdempotencyToken: idempotencyToken, + SubjectAlternativeNames: alternateNames?.length + ? alternateNames + : undefined, + ValidationMethod: "DNS", + }), + ) + + return { + Data: { + alternateNames, + certificateArn: result.CertificateArn, + domainName, + region, + }, + PhysicalResourceId: result.CertificateArn, + } + } + + await client.send( + new DeleteCertificateCommand({ + CertificateArn: event.PhysicalResourceId, + }), + ) + + return { + Data: {}, + PhysicalResourceId: randomUUID(), + } +} + +/** @type {import("aws-lambda").CdkCustomResourceIsCompleteHandler} */ +const isComplete = async (event) => { + const client = new ACMClient({ + region: event.Data.region, + }) + + if (event.RequestType === "Create" || event.RequestType === "Update") { + const result = await client.send( + new DescribeCertificateCommand({ + CertificateArn: event.Data.certificateArn, + }), + ) + + if (result.Certificate.Status === "ISSUED") { + return { + Data: { + status: result.Certificate.Status, + }, + IsComplete: true, + } + } else if (result.Certificate.Status === "PENDING_VALIDATION") { + return { + IsComplete: false, + } + } + + throw new Error( + `Unexpected certificate status: ${result.Certificate.Status}`, + ) + } + + return { + IsComplete: true, + } +} + +export { onEvent, isComplete } diff --git a/apps/infra/support/redirect/index.js b/apps/infra/support/redirect/index.js new file mode 100644 index 0000000..9419565 --- /dev/null +++ b/apps/infra/support/redirect/index.js @@ -0,0 +1,39 @@ +/* eslint-disable eslint-comments/disable-enable-pair, unicorn/no-abusive-eslint-disable */ +/* eslint-disable */ + +/** @param event {import("aws-lambda").CloudFrontFunctionsEvent}*/ +function handler(event) { + var qs = getURLSearchParams(event.request.querystring) + return { + statusCode: 307, + statusDescription: "Temporary Redirect", + headers: { + location: { + value: "https://www.docs.astro-aws.org" + event.request.uri + qs, + }, + }, + } +} + +/** @param obj {import("aws-lambda").CloudFrontFunctionsEvent["request"]["querystring"]}*/ +function getURLSearchParams(obj) { + var str = [] + + for (var param in obj) { + if (obj[param].multiValue) { + str.push( + obj[param].multiValue.map((item) => param + "=" + item.value).join("&"), + ) + } else if (obj[param].value === "") { + str.push(param) + } else { + str.push(param + "=" + obj[param].value) + } + } + + if (str.length) { + return "?" + str.join("&") + } + + return "" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3571eb4..47d8745 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,6 +77,9 @@ importers: "@astro-aws/docs": specifier: workspace:^ version: link:../docs + "@aws-sdk/client-acm": + specifier: ^3.460.0 + version: 3.460.0 aws-cdk: specifier: ^2.109.0 version: 2.109.0 @@ -102,6 +105,9 @@ importers: "@astro-aws/scripts": specifier: workspace:^ version: link:../../scripts + "@types/aws-lambda": + specifier: ^8.10.126 + version: 8.10.126 "@types/node": specifier: ^18.18.0 version: 18.18.4 @@ -556,6 +562,549 @@ packages: integrity: sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg==, } + /@aws-crypto/crc32@3.0.0: + resolution: + { + integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==, + } + dependencies: + "@aws-crypto/util": 3.0.0 + "@aws-sdk/types": 3.460.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/ie11-detection@3.0.0: + resolution: + { + integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==, + } + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-browser@3.0.0: + resolution: + { + integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==, + } + dependencies: + "@aws-crypto/ie11-detection": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-crypto/supports-web-crypto": 3.0.0 + "@aws-crypto/util": 3.0.0 + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-locate-window": 3.310.0 + "@aws-sdk/util-utf8-browser": 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-js@3.0.0: + resolution: + { + integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==, + } + dependencies: + "@aws-crypto/util": 3.0.0 + "@aws-sdk/types": 3.460.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/supports-web-crypto@3.0.0: + resolution: + { + integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==, + } + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/util@3.0.0: + resolution: + { + integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==, + } + dependencies: + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-utf8-browser": 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-sdk/client-acm@3.460.0: + resolution: + { + integrity: sha512-oBwRR9XY4aA4OmvRK19qaDBeLwRPC9Xc/fiBV8Nk1/1Kt8tDlQxK6gkQB1XOfz6u3Lhopw4+KjooXvw4TkpIXg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sts": 3.460.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.460.0 + "@aws-sdk/middleware-host-header": 3.460.0 + "@aws-sdk/middleware-logger": 3.460.0 + "@aws-sdk/middleware-recursion-detection": 3.460.0 + "@aws-sdk/middleware-signing": 3.460.0 + "@aws-sdk/middleware-user-agent": 3.460.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-endpoints": 3.460.0 + "@aws-sdk/util-user-agent-browser": 3.460.0 + "@aws-sdk/util-user-agent-node": 3.460.0 + "@smithy/config-resolver": 2.0.19 + "@smithy/fetch-http-handler": 2.2.7 + "@smithy/hash-node": 2.0.16 + "@smithy/invalid-dependency": 2.0.14 + "@smithy/middleware-content-length": 2.0.16 + "@smithy/middleware-endpoint": 2.2.1 + "@smithy/middleware-retry": 2.0.21 + "@smithy/middleware-serde": 2.0.14 + "@smithy/middleware-stack": 2.0.8 + "@smithy/node-config-provider": 2.1.6 + "@smithy/node-http-handler": 2.1.10 + "@smithy/protocol-http": 3.0.10 + "@smithy/smithy-client": 2.1.16 + "@smithy/types": 2.6.0 + "@smithy/url-parser": 2.0.14 + "@smithy/util-base64": 2.0.1 + "@smithy/util-body-length-browser": 2.0.0 + "@smithy/util-body-length-node": 2.1.0 + "@smithy/util-defaults-mode-browser": 2.0.20 + "@smithy/util-defaults-mode-node": 2.0.26 + "@smithy/util-endpoints": 1.0.5 + "@smithy/util-retry": 2.0.7 + "@smithy/util-utf8": 2.0.2 + "@smithy/util-waiter": 2.0.14 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sso@3.460.0: + resolution: + { + integrity: sha512-p5D9C8LKJs5yoBn5cCs2Wqzrp5YP5BYcP774bhGMFEu/LCIUyWzudwN3+/AObSiq8R8SSvBY2zQD4h+k3NjgTQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/middleware-host-header": 3.460.0 + "@aws-sdk/middleware-logger": 3.460.0 + "@aws-sdk/middleware-recursion-detection": 3.460.0 + "@aws-sdk/middleware-user-agent": 3.460.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-endpoints": 3.460.0 + "@aws-sdk/util-user-agent-browser": 3.460.0 + "@aws-sdk/util-user-agent-node": 3.460.0 + "@smithy/config-resolver": 2.0.19 + "@smithy/fetch-http-handler": 2.2.7 + "@smithy/hash-node": 2.0.16 + "@smithy/invalid-dependency": 2.0.14 + "@smithy/middleware-content-length": 2.0.16 + "@smithy/middleware-endpoint": 2.2.1 + "@smithy/middleware-retry": 2.0.21 + "@smithy/middleware-serde": 2.0.14 + "@smithy/middleware-stack": 2.0.8 + "@smithy/node-config-provider": 2.1.6 + "@smithy/node-http-handler": 2.1.10 + "@smithy/protocol-http": 3.0.10 + "@smithy/smithy-client": 2.1.16 + "@smithy/types": 2.6.0 + "@smithy/url-parser": 2.0.14 + "@smithy/util-base64": 2.0.1 + "@smithy/util-body-length-browser": 2.0.0 + "@smithy/util-body-length-node": 2.1.0 + "@smithy/util-defaults-mode-browser": 2.0.20 + "@smithy/util-defaults-mode-node": 2.0.26 + "@smithy/util-endpoints": 1.0.5 + "@smithy/util-retry": 2.0.7 + "@smithy/util-utf8": 2.0.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sts@3.460.0: + resolution: + { + integrity: sha512-Z4h9hZJG5RB9iwhyXlkcnJqCP25+rgIrT8UDryItJfWyK+Pberk1Zft7XwEiyDGXoc48BJvtf7SbOwx3cutgFw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.460.0 + "@aws-sdk/middleware-host-header": 3.460.0 + "@aws-sdk/middleware-logger": 3.460.0 + "@aws-sdk/middleware-recursion-detection": 3.460.0 + "@aws-sdk/middleware-sdk-sts": 3.460.0 + "@aws-sdk/middleware-signing": 3.460.0 + "@aws-sdk/middleware-user-agent": 3.460.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-endpoints": 3.460.0 + "@aws-sdk/util-user-agent-browser": 3.460.0 + "@aws-sdk/util-user-agent-node": 3.460.0 + "@smithy/config-resolver": 2.0.19 + "@smithy/fetch-http-handler": 2.2.7 + "@smithy/hash-node": 2.0.16 + "@smithy/invalid-dependency": 2.0.14 + "@smithy/middleware-content-length": 2.0.16 + "@smithy/middleware-endpoint": 2.2.1 + "@smithy/middleware-retry": 2.0.21 + "@smithy/middleware-serde": 2.0.14 + "@smithy/middleware-stack": 2.0.8 + "@smithy/node-config-provider": 2.1.6 + "@smithy/node-http-handler": 2.1.10 + "@smithy/protocol-http": 3.0.10 + "@smithy/smithy-client": 2.1.16 + "@smithy/types": 2.6.0 + "@smithy/url-parser": 2.0.14 + "@smithy/util-base64": 2.0.1 + "@smithy/util-body-length-browser": 2.0.0 + "@smithy/util-body-length-node": 2.1.0 + "@smithy/util-defaults-mode-browser": 2.0.20 + "@smithy/util-defaults-mode-node": 2.0.26 + "@smithy/util-endpoints": 1.0.5 + "@smithy/util-retry": 2.0.7 + "@smithy/util-utf8": 2.0.2 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/core@3.451.0: + resolution: + { + integrity: sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/smithy-client": 2.1.16 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-env@3.460.0: + resolution: + { + integrity: sha512-WWdaRJFuYRc2Ue9NKDy2NIf8pQRNx/QRVmrsk6EkIID8uWlQIOePk3SWTVV0TZIyPrbfSEaSnJRZoShphJ6PAg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/property-provider": 2.0.15 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-ini@3.460.0: + resolution: + { + integrity: sha512-1IEUmyaWzt2M3mONO8QyZtPy0f9ccaEjCo48ZQLgptWxUI+Ohga9gPK0mqu1kTJOjv4JJGACYHzLwEnnpltGlA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/credential-provider-env": 3.460.0 + "@aws-sdk/credential-provider-process": 3.460.0 + "@aws-sdk/credential-provider-sso": 3.460.0 + "@aws-sdk/credential-provider-web-identity": 3.460.0 + "@aws-sdk/types": 3.460.0 + "@smithy/credential-provider-imds": 2.1.2 + "@smithy/property-provider": 2.0.15 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-node@3.460.0: + resolution: + { + integrity: sha512-PbPo92WIgNlF6V4eWKehYGYjTqf0gU9vr09LeQUc3bTm1DJhJw1j+HU/3PfQ8LwTkBQePO7MbJ5A2n6ckMwfMg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/credential-provider-env": 3.460.0 + "@aws-sdk/credential-provider-ini": 3.460.0 + "@aws-sdk/credential-provider-process": 3.460.0 + "@aws-sdk/credential-provider-sso": 3.460.0 + "@aws-sdk/credential-provider-web-identity": 3.460.0 + "@aws-sdk/types": 3.460.0 + "@smithy/credential-provider-imds": 2.1.2 + "@smithy/property-provider": 2.0.15 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-process@3.460.0: + resolution: + { + integrity: sha512-ng+0FMc4EaxLAwdttCwf2nzNf4AgcqAHZ8pKXUf8qF/KVkoyTt3UZKW7P2FJI01zxwP+V4yAwVt95PBUKGn4YQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/property-provider": 2.0.15 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-sso@3.460.0: + resolution: + { + integrity: sha512-KnrQieOw17+aHEzE3SwfxjeSQ5ZTe2HeAzxkaZF++GxhNul/PkVnLzjGpIuB9bn71T9a2oNfG3peDUA+m2l2kw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/client-sso": 3.460.0 + "@aws-sdk/token-providers": 3.460.0 + "@aws-sdk/types": 3.460.0 + "@smithy/property-provider": 2.0.15 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-web-identity@3.460.0: + resolution: + { + integrity: sha512-7OeaZgC3HmJZGE0I0ZiKInUMF2LyA0IZiW85AYFnAZzAIfv1cXk/1UnDAoFIQhOZfnUBXivStagz892s480ryw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/property-provider": 2.0.15 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-host-header@3.460.0: + resolution: + { + integrity: sha512-qBeDyuJkEuHe87Xk6unvFO9Zg5j6zM8bQOOZITocTLfu9JN0u5V4GQ/yopvpv+nQHmC/MGr0G7p+kIXMrg/Q2A==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/protocol-http": 3.0.10 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-logger@3.460.0: + resolution: + { + integrity: sha512-w2AJ6HOJ+Ggx9+VDKuWBHk5S0ZxYEo2EY2IFh0qtCQ1RDix/ur1QEzOOL5vNjHlZKPv/dseIwhgsTCac8UHXbQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-recursion-detection@3.460.0: + resolution: + { + integrity: sha512-wmzm1/2NzpcCVCAsGqqiTBK+xNyLmQwTOq63rcW6eeq6gYOO0cyTZROOkVRrrsKWPBigrSFFHvDrEvonOMtKAg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/protocol-http": 3.0.10 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-sdk-sts@3.460.0: + resolution: + { + integrity: sha512-eAaKBULwvIEToKweJtZ+gLrDPVwdi/XYjiJMJFBVDFk1n6kfHeS6BlNVrw713YrThpPiWfKNz8U3TvWtvD2Wpg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/middleware-signing": 3.460.0 + "@aws-sdk/types": 3.460.0 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-signing@3.460.0: + resolution: + { + integrity: sha512-f7dPf0TdyGMMlMoaGLV85nCfcGZOMIaNm+nR0x21H4SJyn1vCNSLMD6Nksav26hAdI3zreBtI2enudj8YYl2XA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/property-provider": 2.0.15 + "@smithy/protocol-http": 3.0.10 + "@smithy/signature-v4": 2.0.16 + "@smithy/types": 2.6.0 + "@smithy/util-middleware": 2.0.7 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-user-agent@3.460.0: + resolution: + { + integrity: sha512-0gBSOCr+RtwRUCSRLn9H3RVnj9ercvk/QKTHIr33CgfEdyZtIGpHWUSs6uqiQydPTRzjCm5SfUa6ESGhRVMM6A==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-endpoints": 3.460.0 + "@smithy/protocol-http": 3.0.10 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/region-config-resolver@3.451.0: + resolution: + { + integrity: sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.1.6 + "@smithy/types": 2.6.0 + "@smithy/util-config-provider": 2.0.0 + "@smithy/util-middleware": 2.0.7 + tslib: 2.6.2 + dev: false + + /@aws-sdk/token-providers@3.460.0: + resolution: + { + integrity: sha512-EvSIPMI1gXk3gEkdtbZCW+p3Bjmt2gOR1m7ibQD7qLj4l0dKXhp4URgTqB1ExH3S4qUq0M/XSGKbGLZpvunHNg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/middleware-host-header": 3.460.0 + "@aws-sdk/middleware-logger": 3.460.0 + "@aws-sdk/middleware-recursion-detection": 3.460.0 + "@aws-sdk/middleware-user-agent": 3.460.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.460.0 + "@aws-sdk/util-endpoints": 3.460.0 + "@aws-sdk/util-user-agent-browser": 3.460.0 + "@aws-sdk/util-user-agent-node": 3.460.0 + "@smithy/config-resolver": 2.0.19 + "@smithy/fetch-http-handler": 2.2.7 + "@smithy/hash-node": 2.0.16 + "@smithy/invalid-dependency": 2.0.14 + "@smithy/middleware-content-length": 2.0.16 + "@smithy/middleware-endpoint": 2.2.1 + "@smithy/middleware-retry": 2.0.21 + "@smithy/middleware-serde": 2.0.14 + "@smithy/middleware-stack": 2.0.8 + "@smithy/node-config-provider": 2.1.6 + "@smithy/node-http-handler": 2.1.10 + "@smithy/property-provider": 2.0.15 + "@smithy/protocol-http": 3.0.10 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/smithy-client": 2.1.16 + "@smithy/types": 2.6.0 + "@smithy/url-parser": 2.0.14 + "@smithy/util-base64": 2.0.1 + "@smithy/util-body-length-browser": 2.0.0 + "@smithy/util-body-length-node": 2.1.0 + "@smithy/util-defaults-mode-browser": 2.0.20 + "@smithy/util-defaults-mode-node": 2.0.26 + "@smithy/util-endpoints": 1.0.5 + "@smithy/util-retry": 2.0.7 + "@smithy/util-utf8": 2.0.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/types@3.460.0: + resolution: + { + integrity: sha512-MyZSWS/FV8Bnux5eD9en7KLgVxevlVrGNEP3X2D7fpnUlLhl0a7k8+OpSI2ozEQB8hIU2DLc/XXTKRerHSefxQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-endpoints@3.460.0: + resolution: + { + integrity: sha512-myH6kM5WP4IWULHDHMYf2Q+BCYVGlzqJgiBmO10kQEtJSeAGZZ49eoFFYgKW8ZAYB5VnJ+XhXVB1TRA+vR4l5A==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/util-endpoints": 1.0.5 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-locate-window@3.310.0: + resolution: + { + integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==, + } + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-browser@3.460.0: + resolution: + { + integrity: sha512-FRCzW+TyjKnvxsargPVrjayBfp/rvObYHZyZ2OSqrVw8lkkPCb4e/WZOeIiXZuhdhhoah7wMuo6zGwtFF3bYKg==, + } + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/types": 2.6.0 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-node@3.460.0: + resolution: + { + integrity: sha512-+kSoR9ABGpJ5Xc7v0VwpgTQbgyI4zuezC8K4pmKAGZsSsVWg4yxptoy2bDqoFL7qfRlWviMVTkQRMvR4D44WxA==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + "@aws-sdk/types": 3.460.0 + "@smithy/node-config-provider": 2.1.6 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-utf8-browser@3.259.0: + resolution: + { + integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==, + } + dependencies: + tslib: 2.6.2 + dev: false + /@babel/code-frame@7.22.13: resolution: { @@ -1898,298 +2447,782 @@ packages: } engines: { node: ">=6.0.0" } - /@jridgewell/sourcemap-codec@1.4.15: + /@jridgewell/sourcemap-codec@1.4.15: + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + } + + /@jridgewell/trace-mapping@0.3.19: + resolution: + { + integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, + } + dependencies: + "@jridgewell/resolve-uri": 3.1.1 + "@jridgewell/sourcemap-codec": 1.4.15 + + /@lshay/eslint-config@0.2.5(eslint@8.53.0)(typescript@5.2.2): + resolution: + { + integrity: sha512-v+2JeLXw3FM4cP44pXp6nQ8VqRFvxPHfIiJdbVAXvHhhkMmwpbasVIJDDF5C5gOUKNLK64LkAeC3g7PtSsNvPA==, + } + engines: { node: 16.x || 18.x } + peerDependencies: + 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.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 + - supports-color + - typescript + dev: false + + /@lshay/prettier-config@0.6.1(prettier@3.1.0): + resolution: + { + integrity: sha512-DWMN6W1PCg7LhlQPHd5jGU64yTlkediMxQnT2VfF8yuoZa2Nesk9c3Y95bQpN+dayP6bZGsgFSMdlF8YKhlqVw==, + } + engines: { node: 16.x || 18.x || 20.x } + peerDependencies: + prettier: 2.x || 3.x + dependencies: + merge-anything: 5.1.7 + prettier: 3.1.0 + prettier-plugin-astro: 0.12.0 + 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" + - "@shopify/prettier-plugin-liquid" + - "@shufo/prettier-plugin-blade" + - "@trivago/prettier-plugin-sort-imports" + - prettier-plugin-css-order + - prettier-plugin-import-sort + - prettier-plugin-marko + - prettier-plugin-organize-attributes + - prettier-plugin-organize-imports + - prettier-plugin-style-order + - prettier-plugin-svelte + - prettier-plugin-twig-melody + - supports-color + dev: false + + /@manypkg/find-root@1.1.0: + resolution: + { + integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, + } + dependencies: + "@babel/runtime": 7.22.15 + "@types/node": 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: false + + /@manypkg/get-packages@1.1.3: + resolution: + { + integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, + } + dependencies: + "@babel/runtime": 7.22.15 + "@changesets/types": 4.1.0 + "@manypkg/find-root": 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: false + + /@mdx-js/mdx@2.3.0: + resolution: + { + integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==, + } + dependencies: + "@types/estree-jsx": 1.0.0 + "@types/mdx": 2.0.7 + estree-util-build-jsx: 2.2.2 + estree-util-is-identifier-name: 2.1.0 + estree-util-to-js: 1.2.0 + estree-walker: 3.0.3 + hast-util-to-estree: 2.3.3 + markdown-extensions: 1.1.1 + periscopic: 3.1.0 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.2 + unist-util-stringify-position: 3.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - 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: + { + integrity: sha512-PbGRnV5HGSfRGLjf8uTh1MaWgLwnjKjWiGVjK752ifITJbZ28/5AmLAFT2shDYeux8BHgpgVll5QXu7GN3YLFw==, + } + dependencies: + glob: 7.1.7 + + /@next/eslint-plugin-next@13.2.4: + resolution: + { + integrity: sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ==, + } + dependencies: + glob: 7.1.7 + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + /@nodelib/fs.walk@1.2.8: + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.15.0 + + /@pagefind/darwin-arm64@1.0.3: + resolution: + { + integrity: sha512-vsHDtvao3W4iFCxVc4S0BVhpj3E2MAoIVM7RmuQfGp1Ng22nGLRaMP6FguLO8TMabRJdvp4SVr227hL4WGKOHA==, + } + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@pagefind/darwin-x64@1.0.3: + resolution: + { + integrity: sha512-NhEXHHYmB/hT6lx5rCcmnVTxH+uIkMAd43bzEqMwHQosqTZEIQfwihmV39H+m8yo7jFvz3zRbJNzhAh7G4PiwA==, + } + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@pagefind/default-ui@1.0.3: + resolution: + { + integrity: sha512-WieFJXvezyvjZh49I8j7a7Kz3LsXYY2Uep3IWvG5NG05mmiurURXjXc+KyrpIp/iAycSnjrC1TDJ8CdES/ee3A==, + } + dev: false + + /@pagefind/linux-arm64@1.0.3: + resolution: + { + integrity: sha512-RGsMt4AmGT8WxCSeP09arU7Za6Vf/We4TWHVSbY7vDMuwWql9Ngoib/q1cP9dIAIMdkXh9ePG/S3mGnJYsdzuQ==, + } + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@pagefind/linux-x64@1.0.3: + resolution: + { + integrity: sha512-o+VCKaqImL42scSH1n5gUfppYSNyu3BuGTvtKKgWHmycbL+A3fkFH+ZOFbaLeN7LVTvJqJIOYbk4j2yaq9784Q==, + } + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@pagefind/windows-x64@1.0.3: + resolution: + { + integrity: sha512-S+Yq4FyvXJm4F+iN/wRiLvEEF8Xs9lTKGtQGaRHXJslQyl65dytDDPIULXJXIadrDbnMrnTt4C2YHmEUIyUIHg==, + } + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@pkgjs/parseargs@0.11.0: + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: ">=14" } + requiresBuild: true + dev: true + optional: true + + /@pkgr/utils@2.4.2: + resolution: + { + integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: false + + /@rushstack/eslint-patch@1.1.0: + resolution: + { + integrity: sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==, + } + + /@rushstack/eslint-patch@1.5.1: + resolution: + { + integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==, + } + dev: false + + /@sinclair/typebox@0.27.8: + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } + dev: true + + /@sindresorhus/merge-streams@1.0.0: + resolution: + { + integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==, + } + engines: { node: ">=18" } + dev: false + + /@smithy/abort-controller@2.0.14: + resolution: + { + integrity: sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/config-resolver@2.0.19: + resolution: + { + integrity: sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.1.6 + "@smithy/types": 2.6.0 + "@smithy/util-config-provider": 2.0.0 + "@smithy/util-middleware": 2.0.7 + tslib: 2.6.2 + dev: false + + /@smithy/credential-provider-imds@2.1.2: + resolution: + { + integrity: sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.1.6 + "@smithy/property-provider": 2.0.15 + "@smithy/types": 2.6.0 + "@smithy/url-parser": 2.0.14 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-codec@2.0.14: + resolution: + { + integrity: sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA==, + } + dependencies: + "@aws-crypto/crc32": 3.0.0 + "@smithy/types": 2.6.0 + "@smithy/util-hex-encoding": 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/fetch-http-handler@2.2.7: + resolution: + { + integrity: sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ==, + } + dependencies: + "@smithy/protocol-http": 3.0.10 + "@smithy/querystring-builder": 2.0.14 + "@smithy/types": 2.6.0 + "@smithy/util-base64": 2.0.1 + tslib: 2.6.2 + dev: false + + /@smithy/hash-node@2.0.16: + resolution: + { + integrity: sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + "@smithy/util-buffer-from": 2.0.0 + "@smithy/util-utf8": 2.0.2 + tslib: 2.6.2 + dev: false + + /@smithy/invalid-dependency@2.0.14: + resolution: + { + integrity: sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ==, + } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/is-array-buffer@2.0.0: + resolution: + { + integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==, + } + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/middleware-content-length@2.0.16: + resolution: + { + integrity: sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/protocol-http": 3.0.10 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-endpoint@2.2.1: + resolution: + { + integrity: sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/middleware-serde": 2.0.14 + "@smithy/node-config-provider": 2.1.6 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/types": 2.6.0 + "@smithy/url-parser": 2.0.14 + "@smithy/util-middleware": 2.0.7 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-retry@2.0.21: + resolution: + { + integrity: sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.1.6 + "@smithy/protocol-http": 3.0.10 + "@smithy/service-error-classification": 2.0.7 + "@smithy/types": 2.6.0 + "@smithy/util-middleware": 2.0.7 + "@smithy/util-retry": 2.0.7 + tslib: 2.6.2 + uuid: 8.3.2 + dev: false + + /@smithy/middleware-serde@2.0.14: + resolution: + { + integrity: sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-stack@2.0.8: + resolution: + { + integrity: sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/node-config-provider@2.1.6: + resolution: + { + integrity: sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/property-provider": 2.0.15 + "@smithy/shared-ini-file-loader": 2.2.5 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/node-http-handler@2.1.10: + resolution: + { + integrity: sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/abort-controller": 2.0.14 + "@smithy/protocol-http": 3.0.10 + "@smithy/querystring-builder": 2.0.14 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/property-provider@2.0.15: resolution: { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + integrity: sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==, } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false - /@jridgewell/trace-mapping@0.3.19: + /@smithy/protocol-http@3.0.10: resolution: { - integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, + integrity: sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==, } + engines: { node: ">=14.0.0" } dependencies: - "@jridgewell/resolve-uri": 3.1.1 - "@jridgewell/sourcemap-codec": 1.4.15 + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false - /@lshay/eslint-config@0.2.5(eslint@8.53.0)(typescript@5.2.2): + /@smithy/querystring-builder@2.0.14: resolution: { - integrity: sha512-v+2JeLXw3FM4cP44pXp6nQ8VqRFvxPHfIiJdbVAXvHhhkMmwpbasVIJDDF5C5gOUKNLK64LkAeC3g7PtSsNvPA==, + integrity: sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==, } - engines: { node: 16.x || 18.x } - peerDependencies: - eslint: 8.x + engines: { node: ">=14.0.0" } dependencies: - "@next/eslint-plugin-next": 13.2.4 - "@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 - - supports-color - - typescript + "@smithy/types": 2.6.0 + "@smithy/util-uri-escape": 2.0.0 + tslib: 2.6.2 dev: false - /@lshay/prettier-config@0.6.1(prettier@3.1.0): + /@smithy/querystring-parser@2.0.14: resolution: { - integrity: sha512-DWMN6W1PCg7LhlQPHd5jGU64yTlkediMxQnT2VfF8yuoZa2Nesk9c3Y95bQpN+dayP6bZGsgFSMdlF8YKhlqVw==, + integrity: sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==, } - engines: { node: 16.x || 18.x || 20.x } - peerDependencies: - prettier: 2.x || 3.x + engines: { node: ">=14.0.0" } dependencies: - merge-anything: 5.1.7 - prettier: 3.1.0 - prettier-plugin-astro: 0.12.0 - 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" - - "@shopify/prettier-plugin-liquid" - - "@shufo/prettier-plugin-blade" - - "@trivago/prettier-plugin-sort-imports" - - prettier-plugin-css-order - - prettier-plugin-import-sort - - prettier-plugin-marko - - prettier-plugin-organize-attributes - - prettier-plugin-organize-imports - - prettier-plugin-style-order - - prettier-plugin-svelte - - prettier-plugin-twig-melody - - supports-color + "@smithy/types": 2.6.0 + tslib: 2.6.2 dev: false - /@manypkg/find-root@1.1.0: + /@smithy/service-error-classification@2.0.7: resolution: { - integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, + integrity: sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==, } + engines: { node: ">=14.0.0" } dependencies: - "@babel/runtime": 7.22.15 - "@types/node": 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 + "@smithy/types": 2.6.0 dev: false - /@manypkg/get-packages@1.1.3: + /@smithy/shared-ini-file-loader@2.2.5: resolution: { - integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, + integrity: sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==, } + engines: { node: ">=14.0.0" } dependencies: - "@babel/runtime": 7.22.15 - "@changesets/types": 4.1.0 - "@manypkg/find-root": 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 + "@smithy/types": 2.6.0 + tslib: 2.6.2 dev: false - /@mdx-js/mdx@2.3.0: + /@smithy/signature-v4@2.0.16: resolution: { - integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==, + integrity: sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==, } + engines: { node: ">=14.0.0" } dependencies: - "@types/estree-jsx": 1.0.0 - "@types/mdx": 2.0.7 - estree-util-build-jsx: 2.2.2 - estree-util-is-identifier-name: 2.1.0 - estree-util-to-js: 1.2.0 - estree-walker: 3.0.3 - hast-util-to-estree: 2.3.3 - markdown-extensions: 1.1.1 - periscopic: 3.1.0 - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.2 - unist-util-stringify-position: 3.0.3 - unist-util-visit: 4.1.2 - vfile: 5.3.7 - transitivePeerDependencies: - - supports-color + "@smithy/eventstream-codec": 2.0.14 + "@smithy/is-array-buffer": 2.0.0 + "@smithy/types": 2.6.0 + "@smithy/util-hex-encoding": 2.0.0 + "@smithy/util-middleware": 2.0.7 + "@smithy/util-uri-escape": 2.0.0 + "@smithy/util-utf8": 2.0.2 + tslib: 2.6.2 dev: false - /@middy/core@5.0.1: + /@smithy/smithy-client@2.1.16: resolution: { - integrity: sha512-/Ax7xXmQjlO/YBiVgSkqwWeiS9uPHNxlJy/Upr1DmqExBG7IOs0GGxIfce8G0brS+Hb2oUJS/X3F2SokVJCNSQ==, + integrity: sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==, } - engines: { node: ">=18" } + engines: { node: ">=14.0.0" } dependencies: - "@datastream/core": 0.0.35 + "@smithy/middleware-stack": 2.0.8 + "@smithy/types": 2.6.0 + "@smithy/util-stream": 2.0.21 + tslib: 2.6.2 dev: false - /@next/eslint-plugin-next@12.0.10: + /@smithy/types@2.6.0: resolution: { - integrity: sha512-PbGRnV5HGSfRGLjf8uTh1MaWgLwnjKjWiGVjK752ifITJbZ28/5AmLAFT2shDYeux8BHgpgVll5QXu7GN3YLFw==, + integrity: sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==, } + engines: { node: ">=14.0.0" } dependencies: - glob: 7.1.7 + tslib: 2.6.2 + dev: false - /@next/eslint-plugin-next@13.2.4: + /@smithy/url-parser@2.0.14: resolution: { - integrity: sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ==, + integrity: sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==, } dependencies: - glob: 7.1.7 + "@smithy/querystring-parser": 2.0.14 + "@smithy/types": 2.6.0 + tslib: 2.6.2 dev: false - /@nodelib/fs.scandir@2.1.5: + /@smithy/util-base64@2.0.1: resolution: { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + integrity: sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==, } - engines: { node: ">= 8" } + engines: { node: ">=14.0.0" } dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: 1.2.0 + "@smithy/util-buffer-from": 2.0.0 + tslib: 2.6.2 + dev: false - /@nodelib/fs.stat@2.0.5: + /@smithy/util-body-length-browser@2.0.0: resolution: { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==, } - engines: { node: ">= 8" } + dependencies: + tslib: 2.6.2 + dev: false - /@nodelib/fs.walk@1.2.8: + /@smithy/util-body-length-node@2.1.0: resolution: { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==, } - engines: { node: ">= 8" } + engines: { node: ">=14.0.0" } dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: 1.15.0 + tslib: 2.6.2 + dev: false - /@pagefind/darwin-arm64@1.0.3: + /@smithy/util-buffer-from@2.0.0: resolution: { - integrity: sha512-vsHDtvao3W4iFCxVc4S0BVhpj3E2MAoIVM7RmuQfGp1Ng22nGLRaMP6FguLO8TMabRJdvp4SVr227hL4WGKOHA==, + integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==, } - cpu: [arm64] - os: [darwin] - requiresBuild: true + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/is-array-buffer": 2.0.0 + tslib: 2.6.2 dev: false - optional: true - /@pagefind/darwin-x64@1.0.3: + /@smithy/util-config-provider@2.0.0: resolution: { - integrity: sha512-NhEXHHYmB/hT6lx5rCcmnVTxH+uIkMAd43bzEqMwHQosqTZEIQfwihmV39H+m8yo7jFvz3zRbJNzhAh7G4PiwA==, + integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==, } - cpu: [x64] - os: [darwin] - requiresBuild: true + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 dev: false - optional: true - /@pagefind/default-ui@1.0.3: + /@smithy/util-defaults-mode-browser@2.0.20: resolution: { - integrity: sha512-WieFJXvezyvjZh49I8j7a7Kz3LsXYY2Uep3IWvG5NG05mmiurURXjXc+KyrpIp/iAycSnjrC1TDJ8CdES/ee3A==, + integrity: sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw==, } + engines: { node: ">= 10.0.0" } + dependencies: + "@smithy/property-provider": 2.0.15 + "@smithy/smithy-client": 2.1.16 + "@smithy/types": 2.6.0 + bowser: 2.11.0 + tslib: 2.6.2 dev: false - /@pagefind/linux-arm64@1.0.3: + /@smithy/util-defaults-mode-node@2.0.26: resolution: { - integrity: sha512-RGsMt4AmGT8WxCSeP09arU7Za6Vf/We4TWHVSbY7vDMuwWql9Ngoib/q1cP9dIAIMdkXh9ePG/S3mGnJYsdzuQ==, + integrity: sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==, } - cpu: [arm64] - os: [linux] - requiresBuild: true + engines: { node: ">= 10.0.0" } + dependencies: + "@smithy/config-resolver": 2.0.19 + "@smithy/credential-provider-imds": 2.1.2 + "@smithy/node-config-provider": 2.1.6 + "@smithy/property-provider": 2.0.15 + "@smithy/smithy-client": 2.1.16 + "@smithy/types": 2.6.0 + tslib: 2.6.2 dev: false - optional: true - /@pagefind/linux-x64@1.0.3: + /@smithy/util-endpoints@1.0.5: resolution: { - integrity: sha512-o+VCKaqImL42scSH1n5gUfppYSNyu3BuGTvtKKgWHmycbL+A3fkFH+ZOFbaLeN7LVTvJqJIOYbk4j2yaq9784Q==, + integrity: sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw==, } - cpu: [x64] - os: [linux] - requiresBuild: true + engines: { node: ">= 14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.1.6 + "@smithy/types": 2.6.0 + tslib: 2.6.2 dev: false - optional: true - /@pagefind/windows-x64@1.0.3: + /@smithy/util-hex-encoding@2.0.0: resolution: { - integrity: sha512-S+Yq4FyvXJm4F+iN/wRiLvEEF8Xs9lTKGtQGaRHXJslQyl65dytDDPIULXJXIadrDbnMrnTt4C2YHmEUIyUIHg==, + integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==, } - cpu: [x64] - os: [win32] - requiresBuild: true + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 dev: false - optional: true - /@pkgjs/parseargs@0.11.0: + /@smithy/util-middleware@2.0.7: resolution: { - integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + integrity: sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==, } - engines: { node: ">=14" } - requiresBuild: true - dev: true - optional: true + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.6.0 + tslib: 2.6.2 + dev: false - /@pkgr/utils@2.4.2: + /@smithy/util-retry@2.0.7: resolution: { - integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, + integrity: sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==, } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + engines: { node: ">= 14.0.0" } dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.1 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 + "@smithy/service-error-classification": 2.0.7 + "@smithy/types": 2.6.0 tslib: 2.6.2 dev: false - /@rushstack/eslint-patch@1.1.0: + /@smithy/util-stream@2.0.21: resolution: { - integrity: sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==, + integrity: sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA==, } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/fetch-http-handler": 2.2.7 + "@smithy/node-http-handler": 2.1.10 + "@smithy/types": 2.6.0 + "@smithy/util-base64": 2.0.1 + "@smithy/util-buffer-from": 2.0.0 + "@smithy/util-hex-encoding": 2.0.0 + "@smithy/util-utf8": 2.0.2 + tslib: 2.6.2 + dev: false - /@rushstack/eslint-patch@1.5.1: + /@smithy/util-uri-escape@2.0.0: resolution: { - integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==, + integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==, } + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 dev: false - /@sinclair/typebox@0.27.8: + /@smithy/util-utf8@2.0.2: resolution: { - integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + integrity: sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==, } - dev: true + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/util-buffer-from": 2.0.0 + tslib: 2.6.2 + dev: false - /@sindresorhus/merge-streams@1.0.0: + /@smithy/util-waiter@2.0.14: resolution: { - integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==, + integrity: sha512-Q6gSz4GUNjNGhrfNg+2Mjy+7K4pEI3r82x1b/+3dSc03MQqobMiUrRVN/YK/4nHVagvBELCoXsiHAFQJNQ5BeA==, } - engines: { node: ">=18" } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/abort-controller": 2.0.14 + "@smithy/types": 2.6.0 + tslib: 2.6.2 dev: false /@types/acorn@4.0.6: @@ -3548,6 +4581,13 @@ packages: } dev: false + /bowser@2.11.0: + resolution: + { + integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, + } + dev: false + /boxen@7.1.1: resolution: { @@ -5772,6 +6812,16 @@ packages: engines: { node: ">=6" } dev: false + /fast-xml-parser@4.2.5: + resolution: + { + integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==, + } + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastparse@1.1.2: resolution: { @@ -11235,6 +12285,13 @@ packages: acorn: 8.10.0 dev: true + /strnum@1.0.5: + resolution: + { + integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, + } + dev: false + /style-to-object@0.4.2: resolution: { @@ -12126,6 +13183,14 @@ packages: hasBin: true dev: true + /uuid@8.3.2: + resolution: + { + integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, + } + hasBin: true + dev: false + /uvu@0.5.6: resolution: {