diff --git a/packages/sst/build.mjs b/packages/sst/build.mjs index a76e15255..01592004d 100644 --- a/packages/sst/build.mjs +++ b/packages/sst/build.mjs @@ -1,5 +1,6 @@ import esbuild from "esbuild"; import fs from "fs"; +import path from "path"; const pkg = JSON.parse(fs.readFileSync("package.json")); @@ -172,4 +173,27 @@ await Promise.all( ) ); -console.log("Built"); +const distPkg = { + name: pkg.name, + version: pkg.version, + description: pkg.description, + license: pkg.license, + main: pkg.main || "dist/index.js", + bin: pkg.bin, + type: "module", + dependencies: pkg.dependencies, + peerDependencies: pkg.peerDependencies, + exports: pkg.exports, + repository: pkg.repository, + keywords: pkg.keywords, + author: pkg.author, +}; + +fs.writeFileSync( + path.resolve("dist/package.json"), + JSON.stringify(distPkg, null, 2) + "\n", + "utf-8" +); + console.log("→ dist/package.json written with version", pkg.version); + +console.log("Built"); \ No newline at end of file diff --git a/packages/sst/dist/package.json b/packages/sst/dist/package.json index 04a0ddfb6..86527bc5c 100644 --- a/packages/sst/dist/package.json +++ b/packages/sst/dist/package.json @@ -1,39 +1,18 @@ { "name": "sst", - "version": "2.40.8", - "bin": { - "sst": "cli/sst.js" - }, + "version": "2.48.5", "description": "A CLI to help deploy SST apps.", - "type": "module", "license": "MIT", - "scripts": { - "prepare": "", - "build": "node build.mjs && tsc", - "test": "vitest run", - "dev": "tsc -w" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/sst/v2.git", - "directory": "packages/cli" - }, - "exports": { - "./constructs/deprecated": "./constructs/deprecated/index.js", - "./constructs/future": "./constructs/future/index.js", - "./constructs": "./constructs/index.js", - "./context": "./context/index.js", - "./node/future/*": "./node/future/*/index.js", - "./node/*": "./node/*/index.js", - ".": "./index.js", - "./*": "./*" + "main": "dist/index.js", + "bin": { + "sst": "dist/cli/sst.js" }, - "homepage": "https://sst.dev", + "type": "module", "dependencies": { - "@aws-cdk/aws-lambda-python-alpha": "2.132.1-alpha.0", - "@aws-cdk/cloud-assembly-schema": "2.132.1", - "@aws-cdk/cloudformation-diff": "2.132.1", - "@aws-cdk/cx-api": "2.132.1", + "@aws-cdk/aws-lambda-python-alpha": "2.179.0-alpha.0", + "@aws-cdk/cloud-assembly-schema": "39.2.20", + "@aws-cdk/cloudformation-diff": "2.179.0", + "@aws-cdk/cx-api": "2.179.0", "@aws-crypto/sha256-js": "^5.2.0", "@aws-sdk/client-cloudformation": "^3.454.0", "@aws-sdk/client-ecs": "^3.454.0", @@ -57,16 +36,16 @@ "@babel/plugin-syntax-typescript": "^7.21.4", "@smithy/signature-v4": "^2.0.16", "@trpc/server": "9.16.0", - "adm-zip": "^0.5.10", - "aws-cdk-lib": "2.132.1", + "adm-zip": "0.5.14", + "aws-cdk-lib": "2.179.0", "aws-iot-device-sdk": "^2.2.13", "aws-sdk": "^2.1501.0", "builtin-modules": "3.2.0", - "cdk-assets": "2.132.1", + "cdk-assets": "3.0.0-rc.143", "chalk": "^5.2.0", "chokidar": "^3.5.3", "ci-info": "^3.7.0", - "colorette": "^2.0.19", + "colorette": "^2.0.20", "conf": "^10.2.0", "constructs": "10.3.0", "cross-spawn": "^7.0.3", @@ -74,7 +53,7 @@ "dotenv": "^16.0.3", "esbuild": "0.18.13", "express": "^4.18.2", - "fast-jwt": "^3.1.1", + "fast-jwt": "^3.3.3", "get-port": "^6.1.2", "glob": "^10.0.0", "graphql": "*", @@ -82,15 +61,15 @@ "immer": "9", "ink": "^4.0.0", "ink-spinner": "^5.0.0", - "kysely": "^0.25.0", + "kysely": "^0.27.4", "kysely-codegen": "^0.10.1", - "kysely-data-api": "^0.2.1", + "kysely-data-api": "^1.0.1", "minimatch": "^6.1.6", "openid-client": "^5.1.8", "ora": "^6.1.2", "react": "^18.0.0", "remeda": "^1.3.0", - "sst-aws-cdk": "2.132.1", + "sst-aws-cdk": "2.179.0-3", "tree-kill": "^1.2.2", "undici": "^5.12.0", "uuid": "^9.0.0", @@ -98,51 +77,23 @@ "yargs": "^17.6.2", "zod": "^3.21.4" }, - "devDependencies": { - "@aws-sdk/client-api-gateway": "^3.454.0", - "@aws-sdk/client-cloudfront": "^3.454.0", - "@aws-sdk/client-codebuild": "^3.454.0", - "@aws-sdk/client-sqs": "^3.454.0", - "@aws-sdk/types": "^3.451.0", - "@graphql-tools/merge": "^8.3.16", - "@sls-next/lambda-at-edge": "^3.7.0", - "@smithy/types": "^2.6.0", - "@tsconfig/node16": "^1.0.3", - "@tsconfig/node18": "^18.2.2", - "@types/adm-zip": "^0.5.0", - "@types/async": "^3.2.24", - "@types/aws-iot-device-sdk": "^2.2.8", - "@types/aws-lambda": "^8.10.128", - "@types/babel__core": "^7.1.20", - "@types/babel__generator": "^7.6.4", - "@types/cross-spawn": "^6.0.2", - "@types/express": "^4.17.14", - "@types/node": "^18.11.9", - "@types/react": "^18.0.28", - "@types/uuid": "^8.3.4", - "@types/ws": "^8.5.3", - "@types/yargs": "^17.0.13", - "archiver": "^5.3.1", - "astro-sst": "2.40.8", - "async": "^3.2.4", - "tsx": "^3.12.1", - "typescript": "^5.2.2", - "vitest": "^0.33.0" - }, "peerDependencies": { "@sls-next/lambda-at-edge": "^3.7.0" }, - "peerDependenciesMeta": { - "@sls-next/lambda-at-edge": { - "optional": true - } - }, - "bugs": { - "url": "https://github.com/sst/v2/issues" + "exports": { + "./constructs/deprecated": "./dist/constructs/deprecated/index.js", + "./constructs/future": "./dist/constructs/future/index.js", + "./constructs": "./dist/constructs/index.js", + "./context": "./dist/context/index.js", + "./node/future/*": "./dist/node/future/*/index.js", + "./node/*": "./dist/node/*/index.js", + ".": "./dist/index.js", + "./*": "./dist/*" }, - "main": "index.js", - "directories": { - "test": "test" + "repository": { + "type": "git", + "url": "git+https://github.com/sst/v2.git", + "directory": "packages/cli" }, "keywords": [], "author": "" diff --git a/packages/sst/package.json b/packages/sst/package.json index 12317e6d0..c214f2d57 100644 --- a/packages/sst/package.json +++ b/packages/sst/package.json @@ -6,8 +6,9 @@ "sideEffects": false, "name": "sst", "version": "2.48.5", + "main": "dist/index.js", "bin": { - "sst": "cli/sst.js" + "sst": "dist/cli/sst.js" }, "description": "A CLI to help deploy SST apps.", "type": "module", @@ -23,16 +24,16 @@ "url": "git+https://github.com/sst/v2.git", "directory": "packages/cli" }, - "exports": { - "./constructs/deprecated": "./constructs/deprecated/index.js", - "./constructs/future": "./constructs/future/index.js", - "./constructs": "./constructs/index.js", - "./context": "./context/index.js", - "./node/future/*": "./node/future/*/index.js", - "./node/*": "./node/*/index.js", - ".": "./index.js", - "./*": "./*" - }, + "exports": { + "./constructs/deprecated": "./dist/constructs/deprecated/index.js", + "./constructs/future": "./dist/constructs/future/index.js", + "./constructs": "./dist/constructs/index.js", + "./context": "./dist/context/index.js", + "./node/future/*": "./dist/node/future/*/index.js", + "./node/*": "./dist/node/*/index.js", + ".": "./dist/index.js", + "./*": "./dist/*" + }, "homepage": "https://sst.dev", "dependencies": { "@aws-cdk/aws-lambda-python-alpha": "2.179.0-alpha.0", @@ -71,7 +72,7 @@ "chalk": "^5.2.0", "chokidar": "^3.5.3", "ci-info": "^3.7.0", - "colorette": "^2.0.19", + "colorette": "^2.0.20", "conf": "^10.2.0", "constructs": "10.3.0", "cross-spawn": "^7.0.3", @@ -79,7 +80,7 @@ "dotenv": "^16.0.3", "esbuild": "0.18.13", "express": "^4.18.2", - "fast-jwt": "^5.0.5", + "fast-jwt": "^3.3.3", "get-port": "^6.1.2", "glob": "^10.0.0", "graphql": "*", @@ -87,9 +88,9 @@ "immer": "9", "ink": "^4.0.0", "ink-spinner": "^5.0.0", - "kysely": "^0.25.0", + "kysely": "^0.27.4", "kysely-codegen": "^0.10.1", - "kysely-data-api": "^0.2.1", + "kysely-data-api": "^1.0.1", "minimatch": "^6.1.6", "openid-client": "^5.1.8", "ora": "^6.1.2", @@ -145,7 +146,6 @@ "bugs": { "url": "https://github.com/sst/v2/issues" }, - "main": "index.js", "directories": { "test": "test" }, diff --git a/packages/sst/src/constructs/RDSv2.ts b/packages/sst/src/constructs/RDSv2.ts new file mode 100644 index 000000000..d3b1fa960 --- /dev/null +++ b/packages/sst/src/constructs/RDSv2.ts @@ -0,0 +1,364 @@ +import path from "path"; +import { globSync } from "glob"; +import fs from "fs"; +import url from "url"; +import * as crypto from "crypto"; +import { Construct } from "constructs"; +import { + Duration as CDKDuration, + CustomResource, +} from "aws-cdk-lib"; +import { + SubnetType, + Vpc, + IVpc, +} from "aws-cdk-lib/aws-ec2"; +import { + AuroraCapacityUnit, + AuroraMysqlEngineVersion, + AuroraPostgresEngineVersion, + DatabaseClusterEngine, + DatabaseCluster, + ClusterInstance, + IDatabaseCluster, + DatabaseClusterProps, + Endpoint, +} from "aws-cdk-lib/aws-rds"; +import { + Code, + Function as LambdaFunction, + Runtime, +} from "aws-cdk-lib/aws-lambda"; +import { PolicyStatement } from "aws-cdk-lib/aws-iam"; +import { Stack } from "./Stack.js"; +import { isCDKConstruct, getFunctionRef } from "./Construct.js"; +import { SSTConstruct } from "./Construct.js"; +import { Function as Fn } from "./Function.js"; +import { BindingProps } from "./util/binding.js"; +import { ISecret } from "aws-cdk-lib/aws-secretsmanager"; + +export interface RDSTv2Types { + path: string; + camelCase?: boolean; +} + +export interface RDSv2CdkServerlessClusterProps + extends Omit< + DatabaseClusterProps, + "vpc" | "engine" | "defaultDatabaseName" | "scaling" + > { + vpc?: IVpc; +} + +export interface RDSv2Props { + engine: + | "mysql8.0" + | "postgresql13.15" + | "postgresql13.12" + | "postgresql13.9" + | "postgresql14.10" + | "postgresql15.5" + | "postgresql16.1"; + defaultDatabaseName: string; + scaling?: { + minCapacity?: keyof typeof AuroraCapacityUnit | number; + maxCapacity?: keyof typeof AuroraCapacityUnit | number; + secondsUntilAutoPause?: number; + }; + migrations?: string; + types?: string | RDSTv2Types; + cdk?: { + id?: string; + cluster?: IDatabaseCluster | RDSv2CdkServerlessClusterProps; + secret?: ISecret; + }; +} + +const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); + +export class RDSv2 extends Construct implements SSTConstruct { + readonly id: string; + readonly cdk: { + cluster: DatabaseCluster; + }; + migratorFunction?: Fn; + private props: RDSv2Props; + private secret: ISecret; + + constructor(scope: Construct, id: string, props: RDSv2Props) { + super(scope, props.cdk?.id || id); + + this.validateRequiredProps(props); + this.id = id; + this.props = props; + this.cdk = {} as any; + + const { migrations, cdk } = props; + + if (cdk && isCDKConstruct(cdk.cluster)) { + this.validateCDKPropWhenIsConstruct(); + this.cdk.cluster = this.importCluster(); + this.secret = cdk.secret!; + } else { + this.validateCDKPropWhenIsClusterProps(); + this.cdk.cluster = this.createCluster(); + this.secret = this.cdk.cluster.secret!; + } + + if (migrations) { + this.runMigrations(migrations); + } + + const app = this.node.root as any; + app.registerTypes(this); + } + + get clusterArn(): string { + return this.cdk.cluster.clusterArn; + } + + get clusterIdentifier(): string { + return this.cdk.cluster.clusterIdentifier; + } + + get clusterEndpoint(): Endpoint { + return this.cdk.cluster.clusterEndpoint; + } + + get defaultDatabaseName(): string { + return this.props.defaultDatabaseName; + } + + get secretArn(): string { + return this.secret.secretArn; + } + + getConstructMetadata() { + const { engine, defaultDatabaseName, types } = this.props; + return { + type: "RDS", + data: { + engine, + secretArn: this.secretArn, + types: typeof types === "string" ? { path: types } : types, + clusterArn: this.clusterArn, + clusterIdentifier: this.clusterIdentifier, + defaultDatabaseName, + migrator: this.migratorFunction && getFunctionRef(this.migratorFunction), + }, + }; + } + + getBindings(): BindingProps { + return { + clientPackage: "rds", + variables: { + clusterArn: { type: "plain", value: this.clusterArn }, + secretArn: { type: "plain", value: this.secretArn }, + defaultDatabaseName: { type: "plain", value: this.defaultDatabaseName }, + }, + permissions: { + "rds-data:*": [this.clusterArn], + "secretsmanager:GetSecretValue": [ + this.secret.secretFullArn || `${this.secret.secretArn}*`, + ], + "secretsmanager:DescribeSecret": [ + this.secret.secretFullArn || `${this.secret.secretArn}*`, + ], + ...(this.secret.encryptionKey + ? { "kms:Decrypt": [this.secret.encryptionKey.keyArn] } + : {}), + }, + }; + } + + runMigrations(migrations: string, database?: string): void { + this.validateMigrationsFileExists(migrations); + this.createMigrationsFunction(migrations); + this.createMigrationCustomResource(migrations, database); + } + + private validateRequiredProps(props: RDSv2Props) { + if (!props.engine) { + throw new Error(`Missing "engine" in the "${this.node.id}" RDS`); + } + if (!props.defaultDatabaseName) { + throw new Error(`Missing "defaultDatabaseName" in the "${this.node.id}" RDS`); + } + } + + private validateCDKPropWhenIsConstruct() { + if (!this.props.cdk?.secret) { + throw new Error( + `Missing "cdk.secret" in the "${this.node.id}" RDS. You must provide a secret to import an existing RDS Serverless Cluster.` + ); + } + } + + private validateCDKPropWhenIsClusterProps() { + const props = this.props.cdk?.cluster as any; + if (props?.engine) throw new Error(`Use "engine" at the top level.`); + if (props?.defaultDatabaseName) throw new Error(`Use "defaultDatabaseName" at the top level.`); + if (props?.scaling) throw new Error(`Use "scaling" at the top level.`); + if (props?.enableDataApi === false) throw new Error(`Data API must be enabled.`); + if (props?.credentials?.password) throw new Error(`Only SecretManager credentials are supported.`); + } + + private validateMigrationsFileExists(migrations: string) { + if (!fs.existsSync(migrations)) { + throw new Error(`Cannot find the migrations in "${path.resolve(migrations)}".`); + } + } + + private getEngine(engine: RDSv2Props["engine"]) { + const versions: Record = { + "mysql8.0": AuroraMysqlEngineVersion.VER_3_04_0, + "postgresql13.15": AuroraPostgresEngineVersion.VER_13_15, + "postgresql13.12": AuroraPostgresEngineVersion.VER_13_12, + "postgresql13.9": AuroraPostgresEngineVersion.VER_13_9, + "postgresql14.10": AuroraPostgresEngineVersion.VER_14_10, + "postgresql15.5": AuroraPostgresEngineVersion.VER_15_5, + "postgresql16.1": AuroraPostgresEngineVersion.VER_16_1, + }; + return engine.includes("mysql") + ? DatabaseClusterEngine.auroraMysql({ version: versions[engine] }) + : DatabaseClusterEngine.auroraPostgres({ version: versions[engine] }); + } + + private getScaling(scaling?: RDSv2Props["scaling"]) { + const max = + typeof scaling?.maxCapacity === "string" + ? AuroraCapacityUnit[scaling.maxCapacity] + : scaling?.maxCapacity; + const min = + typeof scaling?.minCapacity === "string" + ? AuroraCapacityUnit[scaling.minCapacity] + : scaling?.minCapacity; + if (scaling?.secondsUntilAutoPause && min !== 0) { + throw new Error( + `The "secondsUntilAutoPause" option requires min capacity of 0. Got min: ${min}` + ); + } + return { + serverlessV2MinCapacity: min, + serverlessV2MaxCapacity: max, + serverlessV2SecondsUntilAutoPause: scaling?.secondsUntilAutoPause, + }; + } + + private getVpc(props: RDSv2CdkServerlessClusterProps) { + return props.vpc ?? new Vpc(this, "vpc", { natGateways: 0 }); + } + + private getVpcSubnets(props: RDSv2CdkServerlessClusterProps) { + return props.vpc + ? props.vpcSubnets + : { subnetType: SubnetType.PRIVATE_ISOLATED }; + } + + private createCluster(): DatabaseCluster { + const { engine, defaultDatabaseName, scaling, cdk } = this.props; + const app = this.node.root as any; + const clusterProps = cdk?.cluster || {}; + const name = app.logicalPrefixedName(this.node.id); + return new DatabaseCluster(this, "Cluster", { + clusterIdentifier: name, + ...clusterProps, + defaultDatabaseName, + enableDataApi: true, + engine: this.getEngine(engine), + writer: ClusterInstance.serverlessV2(`${name}-serverless-v2-writer`), + ...this.getScaling(scaling), + vpc: this.getVpc(clusterProps), + vpcSubnets: this.getVpcSubnets(clusterProps), + }); + } + + private importCluster(): DatabaseCluster { + return this.props.cdk!.cluster as DatabaseCluster; + } + + private createMigrationsFunction(migrations: string) { + const { engine, defaultDatabaseName } = this.props; + const app = this.node.root as any; + const migrationsDestination = "sst_rds_migration_scripts"; + + this.migratorFunction = new Fn(this, "MigrationFunction", { + handler: path.resolve( + path.join(__dirname, "../support/rds-migrator/index.handler") + ), + runtime: "nodejs18.x", + timeout: 900, + memorySize: 1024, + environment: { + RDS_ARN: this.cdk.cluster.clusterArn, + RDS_SECRET: this.cdk.cluster.secret!.secretArn, + RDS_DATABASE: defaultDatabaseName, + RDS_ENGINE_MODE: engine.includes("postgres") ? "postgres" : "mysql", + RDS_MIGRATIONS_PATH: app.mode === "dev" ? migrations : migrationsDestination, + }, + permissions: [this.cdk.cluster], + copyFiles: [{ from: migrations, to: migrationsDestination }], + nodejs: { + install: ["kysely", "kysely-data-api"], + format: "esm", + }, + _doNotAllowOthersToBind: true, + }); + + this.migratorFunction._overrideMetadataHandler = "rds-migrator/index.handler"; + } + + private createMigrationCustomResource(migrations: string, database?: string) { + const app = this.node.root as any; + + const handler = new LambdaFunction(this, "MigrationHandler", { + code: Code.fromAsset(path.join(__dirname, "../support/script-function")), + runtime: Runtime.NODEJS_20_X, + handler: "index.handler", + timeout: CDKDuration.minutes(15), + memorySize: 1024, + initialPolicy: [ + new PolicyStatement({ + actions: ["cloudformation:DescribeStacks"], + resources: [Stack.of(this).stackId], + }), + ], + }); + + this.migratorFunction?.grantInvoke(handler); + + const hash = + app.mode === "dev" ? 0 : this.generateMigrationsHash(migrations); + + const resource = new CustomResource(this, "MigrationResource", { + serviceToken: handler.functionArn, + resourceType: "Custom::SSTScript", + properties: { + UserCreateFunction: + app.mode === "dev" ? undefined : this.migratorFunction?.functionName, + UserUpdateFunction: + app.mode === "dev" ? undefined : this.migratorFunction?.functionName, + UserParams: JSON.stringify({ database }), + MigrationsHash: hash, + }, + }); + + resource.node.addDependency(this.cdk.cluster); + } + + private generateMigrationsHash(migrations: string): string { + const files = globSync("**", { + dot: true, + nodir: true, + follow: true, + cwd: migrations, + ignore: ["**/node_modules/**"], + }); + + return crypto + .createHash("md5") + .update(files.map((file) => fs.readFileSync(path.join(migrations, file))).join("")) + .digest("hex"); + } +} diff --git a/packages/sst/src/constructs/Schedule.ts b/packages/sst/src/constructs/Schedule.ts new file mode 100644 index 000000000..de9ba2568 --- /dev/null +++ b/packages/sst/src/constructs/Schedule.ts @@ -0,0 +1,114 @@ +import { Construct } from "constructs"; +import { CfnSchedule } from "aws-cdk-lib/aws-scheduler"; +import { Role, ServicePrincipal, PolicyStatement } from "aws-cdk-lib/aws-iam"; +import { Function as Func } from "./Function.js"; +import { getFunctionRef } from "./Construct.js"; +import { SSTConstruct } from "./Construct.js"; +import { Permissions } from "./util/permission.js"; +import { BindingResource } from "./util/binding.js"; + +type ScheduleJob = + | string + | { + function: string; + cdk?: { + target?: Partial; + }; +}; + +export interface ScheduleProps { + schedule?: `rate(${string})` | `cron(${string})`; + timezone?: string; + enabled?: boolean; + description?: string; + retryPolicy?: CfnSchedule.RetryPolicyProperty; + job: ScheduleJob; + cdk?: { id?: string }; +} + +export class Schedule extends Construct implements SSTConstruct { + readonly id: string; + readonly jobFunction: Func; + readonly invokeRole: Role; + readonly scheduleResource: CfnSchedule; + + constructor(scope: Construct, id: string, props: ScheduleProps) { + super(scope, props.cdk?.id || id); + this.id = id; + + if (!props.schedule) { + throw new Error(`Missing "schedule" in the "${this.node.id}" Schedule`); + } + + let jobDefinition: string; + let jobTargetOverride: Partial = {}; + + if (typeof props.job === "string") { + jobDefinition = props.job; + } else if (typeof props.job === "object" && "function" in props.job) { + jobDefinition = props.job.function; + jobTargetOverride = props.job.cdk?.target ?? {}; + } else { + throw new Error(`Invalid "job" property provided to Schedule: ${props.job}`); + } + + this.jobFunction = Func.fromDefinition( + this, + `Job_${this.node.id}`, + jobDefinition + ); + + this.invokeRole = new Role(this, "ScheduleLambdaInvokeRole", { + assumedBy: new ServicePrincipal("scheduler.amazonaws.com"), + }); + + this.invokeRole.addToPolicy( + new PolicyStatement({ + actions: ["lambda:InvokeFunction"], + resources: [this.jobFunction.functionArn], + }) + ); + + const target: CfnSchedule.TargetProperty = { + arn: this.jobFunction.functionArn, + roleArn: this.invokeRole.roleArn, + ...jobTargetOverride, + ...(props.retryPolicy ? { retryPolicy: props.retryPolicy } : {}), + }; + + this.scheduleResource = new CfnSchedule(this, "ScheduleResource", { + flexibleTimeWindow: { mode: "OFF" }, + scheduleExpression: props.schedule, + scheduleExpressionTimezone: props.timezone, + target, + state: props.enabled === false ? "DISABLED" : "ENABLED", + description: props.description, + }); + + const app = this.node.root as any; + app.registerTypes?.(this); + } + + bind = (constructs: BindingResource[]) => { + this.jobFunction.bind(constructs); + }; + + attachPermissions = (permissions: Permissions) => { + this.jobFunction.attachPermissions(permissions); + }; + + getConstructMetadata() { + return { + type: "Schedule", + data: { + schedule: this.scheduleResource.scheduleExpression, + job: getFunctionRef(this.jobFunction), + scheduleResourceName: this.scheduleResource.node.id, + }, + }; + } + + getBindings() { + return undefined; + } +} diff --git a/packages/sst/sst-2.48.5.tgz b/packages/sst/sst-2.48.5.tgz new file mode 100644 index 000000000..fe4edb039 Binary files /dev/null and b/packages/sst/sst-2.48.5.tgz differ diff --git a/packages/sst/support/rds-migrator/index.mjs b/packages/sst/support/rds-migrator/index.mjs index a4cc9a109..4bb6ecd0e 100644 --- a/packages/sst/support/rds-migrator/index.mjs +++ b/packages/sst/support/rds-migrator/index.mjs @@ -1,107 +1,109 @@ -"use strict"; +// Unminified code sourced from: https://github.com/sst/v2/blob/master/packages/sst/support/rds-migrator/index.mjs -import path from "path"; -import { Kysely, Migrator, NO_MIGRATIONS } from "kysely"; -import { DataApiDialect } from "kysely-data-api"; -import { RDSData } from "@aws-sdk/client-rds-data"; -import url from "url"; +'use strict'; + +import path from 'path'; +import { Kysely, Migrator, NO_MIGRATIONS } from 'kysely'; +import { DataApiDialect } from 'kysely-data-api'; +import { RDSData } from '@aws-sdk/client-rds-data'; +import url from 'url'; export async function handler(evt) { - console.log("initializing db"); - const db = new Kysely({ - dialect: new DataApiDialect({ - mode: process.env.RDS_ENGINE_MODE, - driver: { - client: new RDSData({}), - database: evt?.database || process.env.RDS_DATABASE, - secretArn: process.env.RDS_SECRET, - resourceArn: process.env.RDS_ARN, - }, - }), - }); + console.log('initializing db'); + const db = new Kysely({ + dialect: new DataApiDialect({ + mode: process.env.RDS_ENGINE_MODE, + driver: { + client: new RDSData({}), + database: evt?.database || process.env.RDS_DATABASE, + secretArn: process.env.RDS_SECRET, + resourceArn: process.env.RDS_ARN, + }, + }), + }); - console.log("creating migrator"); - const migrator = new Migrator({ - db, - provider: new DynamicFileMigrationProvider( - path.resolve(process.env.RDS_MIGRATIONS_PATH) - ), - /* - provider: process.env.LAMBDA_TASK_ROOT - ? new FileMigrationProvider(path.resolve(process.env.RDS_MIGRATIONS_PATH)) - : new DynamicFileMigrationProvider( - path.resolve(process.env.RDS_MIGRATIONS_PATH) + console.log('creating migrator'); + const migrator = new Migrator({ + db, + provider: new DynamicFileMigrationProvider( + path.resolve(process.env.RDS_MIGRATIONS_PATH) ), - */ - }); + /* + provider: process.env.LAMBDA_TASK_ROOT + ? new FileMigrationProvider(path.resolve(process.env.RDS_MIGRATIONS_PATH)) + : new DynamicFileMigrationProvider( + path.resolve(process.env.RDS_MIGRATIONS_PATH) + ), + */ + }); - console.log("processing event", evt); - if (!evt.type || evt.type === "latest") { - console.log("migrating to latest"); - const result = await migrator.migrateToLatest(); - const err = - result.error || result.results?.find((r) => r.status === "Error"); - if (err) throw err; - return result; - } + console.log('processing event', evt); + if (!evt.type || evt.type === 'latest') { + console.log('migrating to latest'); + const result = await migrator.migrateToLatest(); + const err = + result.error || result.results?.find((r) => r.status === 'Error'); + if (err) throw err; + return result; + } - if (evt.type === "to") { - console.log("migrating to", evt.data.name); - if (!evt.data.name) return await migrator.migrateTo(NO_MIGRATIONS); - const result = await migrator.migrateTo(evt.data.name); - const err = - result.error || result.results?.find((r) => r.status === "Error"); - if (err) throw err; - return result; - } + if (evt.type === 'to') { + console.log('migrating to', evt.data.name); + if (!evt.data.name) return await migrator.migrateTo(NO_MIGRATIONS); + const result = await migrator.migrateTo(evt.data.name); + const err = + result.error || result.results?.find((r) => r.status === 'Error'); + if (err) throw err; + return result; + } - if (evt.type === "list") { - console.log("listing migrations"); - return await migrator.getMigrations(); - } + if (evt.type === 'list') { + console.log('listing migrations'); + return await migrator.getMigrations(); + } } class DynamicFileMigrationProvider { - #migrationFolderPath; + #migrationFolderPath; - constructor(migrationFolderPath) { - this.#migrationFolderPath = migrationFolderPath; - } + constructor(migrationFolderPath) { + this.#migrationFolderPath = migrationFolderPath; + } - async getMigrations() { - // Import these dynamically so that we don't have any top level - // node dependencies. - const fs = await import("fs/promises"); - const path = await import("path"); + async getMigrations() { + // Import these dynamically so that we don't have any top level + // node dependencies. + const fs = await import('fs/promises'); + const path = await import('path'); - const migrations = {}; - const files = await fs.readdir(this.#migrationFolderPath); + const migrations = {}; + const files = await fs.readdir(this.#migrationFolderPath); - for (const fileName of files) { - if ( - fileName.endsWith(".js") || - fileName.endsWith(".cjs") || - fileName.endsWith(".mjs") - ) { - const [name] = path.basename(fileName).split("."); - const fullPath = path.join(this.#migrationFolderPath, fileName); - if (process.env.LAMBDA_TASK_ROOT) { - const migration = await import(fullPath); - migrations[name] = migration; - continue; - } - const copy = fullPath.replace(/(mjs|cjs|js)$/g, `${Date.now()}.$1`); - try { - await fs.copyFile(fullPath, copy); - const migration = await import(url.pathToFileURL(copy).href); - migrations[name] = migration; - } catch (ex) { - console.error(ex); + for (const fileName of files) { + if ( + fileName.endsWith('.js') || + fileName.endsWith('.cjs') || + fileName.endsWith('.mjs') + ) { + const [name] = path.basename(fileName).split('.'); + const fullPath = path.join(this.#migrationFolderPath, fileName); + if (process.env.LAMBDA_TASK_ROOT) { + const migration = await import(fullPath); + migrations[name] = migration; + continue; + } + const copy = fullPath.replace(/(mjs|cjs|js)$/g, `${Date.now()}.$1`); + try { + await fs.copyFile(fullPath, copy); + const migration = await import(url.pathToFileURL(copy).href); + migrations[name] = migration; + } catch (ex) { + console.error(ex); + } + await fs.rm(copy); + } } - await fs.rm(copy); - } - } - return migrations; - } + return migrations; + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4b3fac76..9346673d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -319,13 +319,13 @@ importers: version: 3.454.0(aws-crt@1.25.0) '@aws-sdk/client-sts': specifier: ^3.454.0 - version: 3.726.1(aws-crt@1.25.0) + version: 3.750.0(aws-crt@1.25.0) '@aws-sdk/config-resolver': specifier: ^3.374.0 version: 3.374.0 '@aws-sdk/credential-providers': specifier: ^3.454.0 - version: 3.726.1(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0) + version: 3.750.0(aws-crt@1.25.0) '@aws-sdk/middleware-retry': specifier: ^3.374.0 version: 3.374.0 @@ -381,7 +381,7 @@ importers: specifier: ^3.7.0 version: 3.9.0 colorette: - specifier: ^2.0.19 + specifier: ^2.0.20 version: 2.0.20 conf: specifier: ^10.2.0 @@ -405,7 +405,7 @@ importers: specifier: ^4.18.2 version: 4.21.2 fast-jwt: - specifier: ^3.1.1 + specifier: ^3.3.3 version: 3.3.3 get-port: specifier: ^6.1.2 @@ -429,14 +429,14 @@ importers: specifier: ^5.0.0 version: 5.0.0(ink@4.4.1(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) kysely: - specifier: ^0.25.0 - version: 0.25.0 + specifier: ^0.27.4 + version: 0.27.6 kysely-codegen: specifier: ^0.10.1 - version: 0.10.1(kysely@0.25.0) + version: 0.10.1(kysely@0.27.6) kysely-data-api: - specifier: ^0.2.1 - version: 0.2.1(@aws-sdk/client-rds-data@3.454.0(aws-crt@1.25.0))(kysely@0.25.0) + specifier: ^1.0.1 + version: 1.0.1(@aws-sdk/client-rds-data@3.454.0(aws-crt@1.25.0))(kysely@0.27.6) minimatch: specifier: ^6.1.6 version: 6.2.0 @@ -488,7 +488,7 @@ importers: version: 3.726.1(aws-crt@1.25.0) '@aws-sdk/types': specifier: ^3.451.0 - version: 3.723.0 + version: 3.734.0 '@graphql-tools/merge': specifier: ^8.3.16 version: 8.4.2(graphql@16.10.0) @@ -921,10 +921,6 @@ packages: resolution: {integrity: sha512-puWrIjMboMAuJ/0poB1TNKZyr9Lpv1jHcSFrUIRezDPxs+lLi/Mvkcb7GVt5WHaC4+PHsk7UglbhNQIm3fRo4A==} engines: {node: '>=14.0.0'} - '@aws-sdk/client-cognito-identity@3.726.1': - resolution: {integrity: sha512-ry0LrRm1/uo2EcPvjN38gQe2YhbnOXDhOw01j4e+aSbsBm2VumvY7d5DOLODC4i+95bxZq0pGvojqgHWM9oS0Q==} - engines: {node: '>=18.0.0'} - '@aws-sdk/client-cognito-identity@3.750.0': resolution: {integrity: sha512-ia5+l7U1ludU/YqQAnEMj5DIp1kfMTu14lUOMG3uTIwTcj8OjkCvAe6BuM0OY6zd8enrJYWLqIqxuKPOWw4I7Q==} engines: {node: '>=18.0.0'} @@ -1098,10 +1094,6 @@ packages: resolution: {integrity: sha512-bZ5K7N5L4+Pa2epbVpUQqd1XLG2uU8BGs/Sd+2nbgTf+lNQJyIxAg/Qsrjz9MzmY8zzQIeRQEkNmR6yVAfCmmQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.726.1': - resolution: {integrity: sha512-/ZvcmEscWYHT0935QN1B1crz4RJzy0tXf20ViH9ShsC5e08jBn3qrjYhO4gUGjNDCwrWe3US8Mg6l1vrRrN1Og==} - engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.750.0': resolution: {integrity: sha512-TwBzrxgIWcQk846XFn0A9DHBHbfg4sHR3M2GL4E7NcffEkh7r642ILiLa58VvQjO2nB1tcOOFtRqbZvVOKexUw==} engines: {node: '>=18.0.0'} @@ -1250,10 +1242,6 @@ packages: resolution: {integrity: sha512-Nz8zs3YJ+GOTSrq+LyzbbC1Ffpt7pK38gcOyNZv76pP5MswKTUKNYBJehqwa+i7FcFQHsCk3TdhR8MT1ZR23uA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-providers@3.726.1': - resolution: {integrity: sha512-hfRjdKYe65ioT1L9NZsDiRRoE4hPWacamUwsN/DjyMzctuCaL4vHkc5VXMfZj/s+17eUa+lyQFrLwel/zYpmgg==} - engines: {node: '>=18.0.0'} - '@aws-sdk/credential-providers@3.750.0': resolution: {integrity: sha512-HpJyLHAjcn/IcvsL4WhEIgbzEWfTnn29u8QFNa5Ii9pVtxdeP/DkSthP3SNxLK2jVNcqWL9xago02SiasNOKfw==} engines: {node: '>=18.0.0'} @@ -8489,14 +8477,14 @@ packages: pg: optional: true - kysely-data-api@0.2.1: - resolution: {integrity: sha512-KmASvF1gmjVqyU9WOUXhCQlv29ofR+xc2DhjaIomz1+Bjd/VtR2/3g4ZuXwG1L4lWGKxMuo5iOvK3XyPbB4LdQ==} + kysely-data-api@1.0.1: + resolution: {integrity: sha512-Bw1ap6yjBTRmTJ0ohiMfrBmPmyey+pmRj46xj6cudvhEntl/1OfuYNOos9E7B1Z+oKcaL8gjEHym65zP8DMiUA==} peerDependencies: '@aws-sdk/client-rds-data': 3.x - kysely: 0.x + kysely: ^0.27.3 - kysely@0.25.0: - resolution: {integrity: sha512-srn0efIMu5IoEBk0tBmtGnoUss4uwvxtbFQWG/U2MosfqIace1l43IFP1PmEpHRDp+Z79xIcKEqmHH3dAvQdQA==} + kysely@0.27.6: + resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==} engines: {node: '>=14.0.0'} latest-version@5.1.0: @@ -8577,6 +8565,7 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -8586,6 +8575,7 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.isinteger@4.0.4: resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} @@ -9039,6 +9029,7 @@ packages: node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} @@ -12190,13 +12181,13 @@ snapshots: '@aws-crypto/crc32@2.0.0': dependencies: '@aws-crypto/util': 2.0.2 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 tslib: 1.14.1 '@aws-crypto/crc32@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 tslib: 1.14.1 '@aws-crypto/crc32@5.2.0': @@ -12208,13 +12199,13 @@ snapshots: '@aws-crypto/crc32c@2.0.0': dependencies: '@aws-crypto/util': 2.0.2 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 tslib: 1.14.1 '@aws-crypto/crc32c@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 tslib: 1.14.1 '@aws-crypto/crc32c@5.2.0': @@ -12235,7 +12226,7 @@ snapshots: dependencies: '@aws-crypto/ie11-detection': 2.0.2 '@aws-crypto/supports-web-crypto': 2.0.2 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-locate-window': 3.723.0 '@aws-sdk/util-utf8-browser': 3.52.0 tslib: 1.14.1 @@ -12245,7 +12236,7 @@ snapshots: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.451.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-locate-window': 3.723.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -12265,7 +12256,7 @@ snapshots: '@aws-crypto/sha256-js': 2.0.0 '@aws-crypto/supports-web-crypto': 2.0.2 '@aws-crypto/util': 2.0.2 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-locate-window': 3.723.0 '@aws-sdk/util-utf8-browser': 3.52.0 tslib: 1.14.1 @@ -12276,7 +12267,7 @@ snapshots: '@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.451.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-locate-window': 3.723.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -12286,7 +12277,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-locate-window': 3.723.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -12294,19 +12285,19 @@ snapshots: '@aws-crypto/sha256-js@2.0.0': dependencies: '@aws-crypto/util': 2.0.2 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 tslib: 1.14.1 '@aws-crypto/sha256-js@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.451.0 + '@aws-sdk/types': 3.734.0 tslib: 1.14.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@2.0.2': @@ -12323,19 +12314,19 @@ snapshots: '@aws-crypto/util@2.0.2': dependencies: - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-utf8-browser': 3.52.0 tslib: 1.14.1 '@aws-crypto/util@3.0.0': dependencies: - '@aws-sdk/types': 3.451.0 + '@aws-sdk/types': 3.734.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.723.0 + '@aws-sdk/types': 3.734.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -12642,7 +12633,7 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0) '@aws-sdk/client-sts': 3.699.0(aws-crt@1.25.0) '@aws-sdk/core': 3.696.0 '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0) @@ -12825,52 +12816,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-cognito-identity@3.726.1(aws-crt@1.25.0)': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/middleware-host-header': 3.723.0 - '@aws-sdk/middleware-logger': 3.723.0 - '@aws-sdk/middleware-recursion-detection': 3.723.0 - '@aws-sdk/middleware-user-agent': 3.726.0 - '@aws-sdk/region-config-resolver': 3.723.0 - '@aws-sdk/types': 3.723.0 - '@aws-sdk/util-endpoints': 3.726.0 - '@aws-sdk/util-user-agent-browser': 3.723.0 - '@aws-sdk/util-user-agent-node': 3.726.0(aws-crt@1.25.0) - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.0 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.1 - '@smithy/middleware-retry': 4.0.1 - '@smithy/middleware-serde': 4.0.1 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.0 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.1 - '@smithy/util-defaults-mode-node': 4.0.1 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/client-cognito-identity@3.750.0(aws-crt@1.25.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -13993,7 +13938,7 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0) + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0) '@aws-sdk/client-sts': 3.699.0(aws-crt@1.25.0) '@aws-sdk/core': 3.696.0 '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0) @@ -14083,13 +14028,13 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': + '@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) + '@aws-sdk/client-sts': 3.750.0(aws-crt@1.25.0) '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0) '@aws-sdk/middleware-host-header': 3.696.0 '@aws-sdk/middleware-logger': 3.696.0 '@aws-sdk/middleware-recursion-detection': 3.696.0 @@ -14305,26 +14250,26 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.723.0 '@aws-sdk/util-user-agent-node': 3.726.0(aws-crt@1.25.0) '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.0 + '@smithy/core': 3.1.4 '@smithy/fetch-http-handler': 5.0.1 '@smithy/hash-node': 4.0.1 '@smithy/invalid-dependency': 4.0.1 '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.1 - '@smithy/middleware-retry': 4.0.1 - '@smithy/middleware-serde': 4.0.1 + '@smithy/middleware-endpoint': 4.0.5 + '@smithy/middleware-retry': 4.0.6 + '@smithy/middleware-serde': 4.0.2 '@smithy/middleware-stack': 4.0.1 '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.1 + '@smithy/node-http-handler': 4.0.2 '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.0 + '@smithy/smithy-client': 4.1.5 '@smithy/types': 4.1.0 '@smithy/url-parser': 4.0.1 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.1 - '@smithy/util-defaults-mode-node': 4.0.1 + '@smithy/util-defaults-mode-browser': 4.0.6 + '@smithy/util-defaults-mode-node': 4.0.6 '@smithy/util-endpoints': 3.0.1 '@smithy/util-middleware': 4.0.1 '@smithy/util-retry': 4.0.1 @@ -14652,16 +14597,6 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-cognito-identity@3.726.1(aws-crt@1.25.0)': - dependencies: - '@aws-sdk/client-cognito-identity': 3.726.1(aws-crt@1.25.0) - '@aws-sdk/types': 3.723.0 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-cognito-identity@3.750.0(aws-crt@1.25.0)': dependencies: '@aws-sdk/client-cognito-identity': 3.750.0(aws-crt@1.25.0) @@ -14727,10 +14662,10 @@ snapshots: '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@smithy/fetch-http-handler': 5.0.1 - '@smithy/node-http-handler': 4.0.1 + '@smithy/node-http-handler': 4.0.2 '@smithy/property-provider': 4.0.1 '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.0 + '@smithy/smithy-client': 4.1.5 '@smithy/types': 4.1.0 '@smithy/util-stream': 4.0.1 tslib: 2.8.1 @@ -14802,15 +14737,15 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-ini@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': + '@aws-sdk/credential-provider-ini@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0)': dependencies: - '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) + '@aws-sdk/client-sts': 3.750.0(aws-crt@1.25.0) '@aws-sdk/core': 3.696.0 '@aws-sdk/credential-provider-env': 3.696.0 '@aws-sdk/credential-provider-http': 3.696.0 '@aws-sdk/credential-provider-process': 3.696.0 '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0)) + '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0)) '@aws-sdk/types': 3.696.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 @@ -14821,25 +14756,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-ini@3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': - dependencies: - '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-env': 3.723.0 - '@aws-sdk/credential-provider-http': 3.723.0 - '@aws-sdk/credential-provider-process': 3.723.0 - '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0)) - '@aws-sdk/types': 3.723.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-ini@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': dependencies: '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) @@ -14926,14 +14842,14 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': + '@aws-sdk/credential-provider-node@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0)': dependencies: '@aws-sdk/credential-provider-env': 3.696.0 '@aws-sdk/credential-provider-http': 3.696.0 - '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) + '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0) '@aws-sdk/credential-provider-process': 3.696.0 '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0)) + '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0)) '@aws-sdk/types': 3.696.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 @@ -14945,25 +14861,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.723.0 - '@aws-sdk/credential-provider-http': 3.723.0 - '@aws-sdk/credential-provider-ini': 3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-process': 3.723.0 - '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0)) - '@aws-sdk/types': 3.723.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/credential-provider-node@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0)': dependencies: '@aws-sdk/credential-provider-env': 3.723.0 @@ -15078,20 +14975,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-sso@3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0)': - dependencies: - '@aws-sdk/client-sso': 3.726.0(aws-crt@1.25.0) - '@aws-sdk/core': 3.723.0 - '@aws-sdk/token-providers': 3.723.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0)) - '@aws-sdk/types': 3.723.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-sso@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0)': dependencies: '@aws-sdk/client-sso': 3.726.0(aws-crt@1.25.0) @@ -15141,9 +15024,9 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.696.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))': + '@aws-sdk/credential-provider-web-identity@3.696.0(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))': dependencies: - '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) + '@aws-sdk/client-sts': 3.750.0(aws-crt@1.25.0) '@aws-sdk/core': 3.696.0 '@aws-sdk/types': 3.696.0 '@smithy/property-provider': 3.1.11 @@ -15170,29 +15053,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-providers@3.726.1(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0)': - dependencies: - '@aws-sdk/client-cognito-identity': 3.726.1(aws-crt@1.25.0) - '@aws-sdk/client-sso': 3.726.0(aws-crt@1.25.0) - '@aws-sdk/client-sts': 3.726.1(aws-crt@1.25.0) - '@aws-sdk/core': 3.723.0 - '@aws-sdk/credential-provider-cognito-identity': 3.726.1(aws-crt@1.25.0) - '@aws-sdk/credential-provider-env': 3.723.0 - '@aws-sdk/credential-provider-http': 3.723.0 - '@aws-sdk/credential-provider-ini': 3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-process': 3.723.0 - '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0)) - '@aws-sdk/types': 3.723.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-providers@3.750.0(aws-crt@1.25.0)': dependencies: '@aws-sdk/client-cognito-identity': 3.750.0(aws-crt@1.25.0) @@ -15606,11 +15466,11 @@ snapshots: '@aws-sdk/core': 3.723.0 '@aws-sdk/types': 3.723.0 '@aws-sdk/util-arn-parser': 3.723.0 - '@smithy/core': 3.1.0 + '@smithy/core': 3.1.4 '@smithy/node-config-provider': 4.0.1 '@smithy/protocol-http': 5.0.1 '@smithy/signature-v4': 5.0.1 - '@smithy/smithy-client': 4.1.0 + '@smithy/smithy-client': 4.1.5 '@smithy/types': 4.1.0 '@smithy/util-config-provider': 4.0.0 '@smithy/util-middleware': 4.0.1 @@ -16000,22 +15860,13 @@ snapshots: '@aws-sdk/token-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.750.0(aws-crt@1.25.0))(aws-crt@1.25.0) '@aws-sdk/types': 3.696.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/token-providers@3.723.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0(aws-crt@1.25.0))(aws-crt@1.25.0))': - dependencies: - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) - '@aws-sdk/types': 3.723.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - '@aws-sdk/token-providers@3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1(aws-crt@1.25.0))(aws-crt@1.25.0) @@ -18797,7 +18648,7 @@ snapshots: '@next/polyfill-module@11.1.2': {} - '@next/react-dev-overlay@11.1.2(react-dom@17.0.2(react@18.3.1))(react@17.0.2)': + '@next/react-dev-overlay@11.1.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/code-frame': 7.12.11 anser: 1.4.9 @@ -18807,7 +18658,7 @@ snapshots: data-uri-to-buffer: 3.0.1 platform: 1.3.6 react: 17.0.2 - react-dom: 17.0.2(react@18.3.1) + react-dom: 17.0.2(react@17.0.2) shell-quote: 1.7.2 source-map: 0.8.0-beta.0 stacktrace-parser: 0.1.10 @@ -19484,7 +19335,7 @@ snapshots: fs-extra: 9.1.0 is-animated: 2.0.2 jsonwebtoken: 8.5.1 - next: 11.1.2(@babel/core@7.26.0)(react-dom@17.0.2(react@18.3.1))(react@17.0.2)(typescript@5.2.2)(webpack@5.97.1(esbuild@0.18.13)) + next: 11.1.2(@babel/core@7.26.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.2.2)(webpack@5.97.1(esbuild@0.18.13)) node-fetch: 2.6.5 normalize-path: 3.0.0 path-to-regexp: 6.2.0 @@ -25308,20 +25159,20 @@ snapshots: kolorist@1.8.0: {} - kysely-codegen@0.10.1(kysely@0.25.0): + kysely-codegen@0.10.1(kysely@0.27.6): dependencies: chalk: 4.1.2 dotenv: 16.4.7 - kysely: 0.25.0 + kysely: 0.27.6 micromatch: 4.0.8 minimist: 1.2.8 - kysely-data-api@0.2.1(@aws-sdk/client-rds-data@3.454.0(aws-crt@1.25.0))(kysely@0.25.0): + kysely-data-api@1.0.1(@aws-sdk/client-rds-data@3.454.0(aws-crt@1.25.0))(kysely@0.27.6): dependencies: '@aws-sdk/client-rds-data': 3.454.0(aws-crt@1.25.0) - kysely: 0.25.0 + kysely: 0.27.6 - kysely@0.25.0: {} + kysely@0.27.6: {} latest-version@5.1.0: dependencies: @@ -25830,13 +25681,13 @@ snapshots: next-tick@1.1.0: {} - next@11.1.2(@babel/core@7.26.0)(react-dom@17.0.2(react@18.3.1))(react@17.0.2)(typescript@5.2.2)(webpack@5.97.1(esbuild@0.18.13)): + next@11.1.2(@babel/core@7.26.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.2.2)(webpack@5.97.1(esbuild@0.18.13)): dependencies: '@babel/runtime': 7.15.3 '@hapi/accept': 5.0.2 '@next/env': 11.1.2 '@next/polyfill-module': 11.1.2 - '@next/react-dev-overlay': 11.1.2(react-dom@17.0.2(react@18.3.1))(react@17.0.2) + '@next/react-dev-overlay': 11.1.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@next/react-refresh-utils': 11.1.2(react-refresh@0.8.3)(webpack@5.97.1(esbuild@0.18.13)) '@node-rs/helper': 1.2.1 assert: 2.0.0 @@ -25871,7 +25722,7 @@ snapshots: querystring-es3: 0.2.1 raw-body: 2.4.1 react: 17.0.2 - react-dom: 17.0.2(react@18.3.1) + react-dom: 17.0.2(react@17.0.2) react-is: 17.0.2 react-refresh: 0.8.3 stream-browserify: 3.0.0 @@ -26947,13 +26798,6 @@ snapshots: react: 17.0.2 scheduler: 0.20.2 - react-dom@17.0.2(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react: 18.3.1 - scheduler: 0.20.2 - react-error-overlay@6.0.11: {} react-fast-compare@3.2.2: {}