From 102ea0226bc9ef583c9e11040896c93c26581496 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 22 Nov 2023 16:38:08 -0500 Subject: [PATCH] components directory --- cmd/sst/main.go | 4 - examples/test/sst.config.ts | 12 +- examples/test/test.ts | 0 internal/components/components.go | 56 ++ .../components/package.json | 1 + .../components/pnpm-lock.yaml | 798 +++++++++++++++++- internal/components/src/components/index.ts | 20 + internal/components/src/components/nextjs.ts | 1 + internal/components/src/global.d.ts | 35 + internal/components/src/runtime/index.ts | 7 + pkg/js/js.go | 4 +- pkg/project/components/src/index.ts | 1 - pkg/project/deps.go | 60 +- pkg/project/stack.go | 100 ++- pkg/project/types.go | 57 -- 15 files changed, 968 insertions(+), 188 deletions(-) create mode 100644 examples/test/test.ts create mode 100644 internal/components/components.go rename {pkg/project => internal}/components/package.json (80%) rename {pkg/project => internal}/components/pnpm-lock.yaml (65%) create mode 100644 internal/components/src/components/index.ts create mode 100644 internal/components/src/components/nextjs.ts create mode 100644 internal/components/src/global.d.ts create mode 100644 internal/components/src/runtime/index.ts delete mode 100644 pkg/project/components/src/index.ts delete mode 100644 pkg/project/types.go diff --git a/cmd/sst/main.go b/cmd/sst/main.go index aea8718d2..aa55ba771 100644 --- a/cmd/sst/main.go +++ b/cmd/sst/main.go @@ -237,10 +237,6 @@ func initProject() (*project.Project, error) { return nil, err } - if err := p.GenerateTypes(); err != nil { - return nil, err - } - if !p.CheckDeps() { err = p.InstallDeps() if err != nil { diff --git a/examples/test/sst.config.ts b/examples/test/sst.config.ts index 732d60b70..ecc678d05 100644 --- a/examples/test/sst.config.ts +++ b/examples/test/sst.config.ts @@ -1,4 +1,4 @@ -/// +/// export default { config() { @@ -9,14 +9,10 @@ export default { }; }, async run() { - const a = new aws.s3.Bucket("my-bucket", { - tags: { - foo: "1123", - }, - }); - + const bucket = new aws.s3.Bucket("my-bucket"); + new sst.FunctionCodeUpdater("updator"); return { - url: util.interpolate`https://${a.bucketDomainName}`, + url: util.interpolate`https://${bucket.bucketDomainName}`, }; }, }; diff --git a/examples/test/test.ts b/examples/test/test.ts new file mode 100644 index 000000000..e69de29bb diff --git a/internal/components/components.go b/internal/components/components.go new file mode 100644 index 000000000..f02962794 --- /dev/null +++ b/internal/components/components.go @@ -0,0 +1,56 @@ +package components + +import ( + "embed" + "io" + "os" + "path/filepath" +) + +//go:embed src/* package.json +var files embed.FS + +func CopyTo(srcDir, destDir string) error { + // Create the destination directory if it doesn't exist + if err := os.MkdirAll(destDir, 0755); err != nil { + return err + } + + // List all files and directories in the embedded FS + entries, err := files.ReadDir(srcDir) + if err != nil { + return err + } + + // Loop through each entry (file or directory) + for _, entry := range entries { + srcPath := filepath.Join(srcDir, entry.Name()) + destPath := filepath.Join(destDir, entry.Name()) + + if entry.IsDir() { + // If it's a directory, recursively copy its contents + if err := CopyTo(srcPath, destPath); err != nil { + return err + } + } else { + // If it's a file, copy it to the destination directory + srcFile, err := files.Open(srcPath) + if err != nil { + return err + } + defer srcFile.Close() + + destFile, err := os.Create(destPath) + if err != nil { + return err + } + defer destFile.Close() + + if _, err := io.Copy(destFile, srcFile); err != nil { + return err + } + } + } + + return nil +} diff --git a/pkg/project/components/package.json b/internal/components/package.json similarity index 80% rename from pkg/project/components/package.json rename to internal/components/package.json index 8123ab65e..6daea0ac3 100644 --- a/pkg/project/components/package.json +++ b/internal/components/package.json @@ -2,6 +2,7 @@ "$schema": "https://json.schemastore.org/package.json", "name": "sst", "dependencies": { + "@aws-sdk/client-sts": "^3.454.0", "@pulumi/aws": "5.43.0", "@pulumi/pulumi": "3.94.2" } diff --git a/pkg/project/components/pnpm-lock.yaml b/internal/components/pnpm-lock.yaml similarity index 65% rename from pkg/project/components/pnpm-lock.yaml rename to internal/components/pnpm-lock.yaml index eba279279..022ee1cc4 100644 --- a/pkg/project/components/pnpm-lock.yaml +++ b/internal/components/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@aws-sdk/client-sts': + specifier: ^3.454.0 + version: 3.454.0 '@pulumi/aws': specifier: 5.43.0 version: 5.43.0 @@ -12,13 +15,413 @@ dependencies: specifier: 3.94.2 version: 3.94.2 -devDependencies: - '@tsconfig/node18': - specifier: ^18.2.2 - version: 18.2.2 - packages: + /@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.451.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.451.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.451.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.451.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-sdk/client-sso@3.451.0: + resolution: {integrity: sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==} + 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.451.0 + '@aws-sdk/middleware-logger': 3.451.0 + '@aws-sdk/middleware-recursion-detection': 3.451.0 + '@aws-sdk/middleware-user-agent': 3.451.0 + '@aws-sdk/region-config-resolver': 3.451.0 + '@aws-sdk/types': 3.451.0 + '@aws-sdk/util-endpoints': 3.451.0 + '@aws-sdk/util-user-agent-browser': 3.451.0 + '@aws-sdk/util-user-agent-node': 3.451.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.454.0: + resolution: {integrity: sha512-0fDvr8WeB6IYO8BUCzcivWmahgGl/zDbaYfakzGnt4mrl5ztYaXE875WI6b7+oFcKMRvN+KLvwu5TtyFuNY+GQ==} + 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.451.0 + '@aws-sdk/middleware-host-header': 3.451.0 + '@aws-sdk/middleware-logger': 3.451.0 + '@aws-sdk/middleware-recursion-detection': 3.451.0 + '@aws-sdk/middleware-sdk-sts': 3.451.0 + '@aws-sdk/middleware-signing': 3.451.0 + '@aws-sdk/middleware-user-agent': 3.451.0 + '@aws-sdk/region-config-resolver': 3.451.0 + '@aws-sdk/types': 3.451.0 + '@aws-sdk/util-endpoints': 3.451.0 + '@aws-sdk/util-user-agent-browser': 3.451.0 + '@aws-sdk/util-user-agent-node': 3.451.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.451.0: + resolution: {integrity: sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.0 + '@smithy/property-provider': 2.0.15 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-ini@3.451.0: + resolution: {integrity: sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.451.0 + '@aws-sdk/credential-provider-process': 3.451.0 + '@aws-sdk/credential-provider-sso': 3.451.0 + '@aws-sdk/credential-provider-web-identity': 3.451.0 + '@aws-sdk/types': 3.451.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.451.0: + resolution: {integrity: sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.451.0 + '@aws-sdk/credential-provider-ini': 3.451.0 + '@aws-sdk/credential-provider-process': 3.451.0 + '@aws-sdk/credential-provider-sso': 3.451.0 + '@aws-sdk/credential-provider-web-identity': 3.451.0 + '@aws-sdk/types': 3.451.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.451.0: + resolution: {integrity: sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.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.451.0: + resolution: {integrity: sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.451.0 + '@aws-sdk/token-providers': 3.451.0 + '@aws-sdk/types': 3.451.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.451.0: + resolution: {integrity: sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.0 + '@smithy/property-provider': 2.0.15 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-host-header@3.451.0: + resolution: {integrity: sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.0 + '@smithy/protocol-http': 3.0.10 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-logger@3.451.0: + resolution: {integrity: sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.0 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-recursion-detection@3.451.0: + resolution: {integrity: sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.0 + '@smithy/protocol-http': 3.0.10 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-sdk-sts@3.451.0: + resolution: {integrity: sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.451.0 + '@aws-sdk/types': 3.451.0 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-signing@3.451.0: + resolution: {integrity: sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.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.451.0: + resolution: {integrity: sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.0 + '@aws-sdk/util-endpoints': 3.451.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.451.0: + resolution: {integrity: sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==} + 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.451.0 + '@aws-sdk/middleware-logger': 3.451.0 + '@aws-sdk/middleware-recursion-detection': 3.451.0 + '@aws-sdk/middleware-user-agent': 3.451.0 + '@aws-sdk/region-config-resolver': 3.451.0 + '@aws-sdk/types': 3.451.0 + '@aws-sdk/util-endpoints': 3.451.0 + '@aws-sdk/util-user-agent-browser': 3.451.0 + '@aws-sdk/util-user-agent-node': 3.451.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.451.0: + resolution: {integrity: sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-endpoints@3.451.0: + resolution: {integrity: sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.451.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.451.0: + resolution: {integrity: sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==} + dependencies: + '@aws-sdk/types': 3.451.0 + '@smithy/types': 2.6.0 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-node@3.451.0: + resolution: {integrity: sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/types': 3.451.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 + /@grpc/grpc-js@1.9.6: resolution: {integrity: sha512-yq3qTy23u++8zdvf+h4mz4ohDFi681JAkMZZPTKh8zmUVh0AKLisFlgxcn22FMNowXz15oJ6pqgwT7DJ+PdJvg==} engines: {node: ^8.13.0 || >=10.10.0} @@ -279,9 +682,360 @@ packages: resolution: {integrity: sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==} dev: false - /@tsconfig/node18@18.2.2: - resolution: {integrity: sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==} - dev: true + /@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-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/protocol-http@3.0.10: + resolution: {integrity: sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-builder@2.0.14: + resolution: {integrity: sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + '@smithy/util-uri-escape': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-parser@2.0.14: + resolution: {integrity: sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/service-error-classification@2.0.7: + resolution: {integrity: sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + dev: false + + /@smithy/shared-ini-file-loader@2.2.5: + resolution: {integrity: sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/signature-v4@2.0.16: + resolution: {integrity: sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==} + engines: {node: '>=14.0.0'} + dependencies: + '@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 + + /@smithy/smithy-client@2.1.16: + resolution: {integrity: sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-stack': 2.0.8 + '@smithy/types': 2.6.0 + '@smithy/util-stream': 2.0.21 + tslib: 2.6.2 + dev: false + + /@smithy/types@2.6.0: + resolution: {integrity: sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/url-parser@2.0.14: + resolution: {integrity: sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==} + dependencies: + '@smithy/querystring-parser': 2.0.14 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-base64@2.0.1: + resolution: {integrity: sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-body-length-browser@2.0.0: + resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-body-length-node@2.1.0: + resolution: {integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-buffer-from@2.0.0: + resolution: {integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/is-array-buffer': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-config-provider@2.0.0: + resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-defaults-mode-browser@2.0.20: + resolution: {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 + + /@smithy/util-defaults-mode-node@2.0.26: + resolution: {integrity: sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==} + 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 + + /@smithy/util-endpoints@1.0.5: + resolution: {integrity: sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.6 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-hex-encoding@2.0.0: + resolution: {integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-middleware@2.0.7: + resolution: {integrity: sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-retry@2.0.7: + resolution: {integrity: sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/service-error-classification': 2.0.7 + '@smithy/types': 2.6.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-stream@2.0.21: + resolution: {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 + + /@smithy/util-uri-escape@2.0.0: + resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-utf8@2.0.2: + resolution: {integrity: sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.0.0 + tslib: 2.6.2 + dev: false /@types/node@20.9.4: resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==} @@ -376,6 +1130,10 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -590,6 +1348,13 @@ packages: strip-final-newline: 2.0.0 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 + /find-up@6.3.0: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1352,6 +2117,10 @@ packages: engines: {node: '>=6'} dev: false + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -1372,6 +2141,14 @@ packages: yn: 2.0.0 dev: false + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -1462,6 +2239,11 @@ packages: hasBin: true dev: false + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: diff --git a/internal/components/src/components/index.ts b/internal/components/src/components/index.ts new file mode 100644 index 000000000..5a234d716 --- /dev/null +++ b/internal/components/src/components/index.ts @@ -0,0 +1,20 @@ +export * from "./nextjs"; + +import * as pulumi from "@pulumi/pulumi"; +import * as aws from "@pulumi/aws"; +import { STSClient, GetCallerIdentityCommand } from "@aws-sdk/client-sts"; + +class Provider implements pulumi.dynamic.ResourceProvider { + async create(): Promise { + const client = new STSClient(); + const identity = await client.send(new GetCallerIdentityCommand({})); + return { id: "foo", outs: { account: identity.Account } }; + } +} + +export class FunctionCodeUpdater extends pulumi.dynamic.Resource { + account!: pulumi.Output; + constructor(name: string) { + super(new Provider(), name, { account: undefined }); + } +} diff --git a/internal/components/src/components/nextjs.ts b/internal/components/src/components/nextjs.ts new file mode 100644 index 000000000..65ea9a1b9 --- /dev/null +++ b/internal/components/src/components/nextjs.ts @@ -0,0 +1 @@ +export class Nextjs {} diff --git a/internal/components/src/global.d.ts b/internal/components/src/global.d.ts new file mode 100644 index 000000000..5bd9752b3 --- /dev/null +++ b/internal/components/src/global.d.ts @@ -0,0 +1,35 @@ +import "@types/node"; +import "@pulumi/aws"; +import "@pulumi/pulumi"; +import "./components/index"; + +declare global { + // @ts-expect-error + export import aws = require("@pulumi/aws"); + + // @ts-expect-error + export import util = require("@pulumi/pulumi"); + + // @ts-expect-error + export import sst = require("./components/index"); + + export const app: { + region: string; + stage: string; + name: string; + mode: "deploy" | "remove"; + paths: { + root: string; + temp: string; + home: string; + }; + aws: { + AWS_ACCESS_KEY_ID: string; + AWS_SECRET_ACCESS_KEY: string; + AWS_SESSION_TOKEN: string; + }; + bootstrap: { + bucket: string; + }; + }; +} diff --git a/internal/components/src/runtime/index.ts b/internal/components/src/runtime/index.ts new file mode 100644 index 000000000..6c5303774 --- /dev/null +++ b/internal/components/src/runtime/index.ts @@ -0,0 +1,7 @@ +import * as _aws from "@pulumi/aws"; +import * as _util from "@pulumi/pulumi"; +import * as _sst from "../components/index"; + +globalThis.aws = _aws; +globalThis.util = _util; +globalThis.sst = _sst; diff --git a/pkg/js/js.go b/pkg/js/js.go index da906a6e1..c40b5f361 100644 --- a/pkg/js/js.go +++ b/pkg/js/js.go @@ -151,8 +151,8 @@ func (p *Process) Eval(input EvalOptions) error { `, }, External: []string{ - "@pulumi/pulumi", - "@pulumi/aws", + "@pulumi/*", + "@aws-sdk/*", }, Format: esbuild.FormatESModule, Platform: esbuild.PlatformNode, diff --git a/pkg/project/components/src/index.ts b/pkg/project/components/src/index.ts deleted file mode 100644 index ce8bfdafa..000000000 --- a/pkg/project/components/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export const TEST = "lol"; diff --git a/pkg/project/deps.go b/pkg/project/deps.go index c00972bf1..55ec3d0f4 100644 --- a/pkg/project/deps.go +++ b/pkg/project/deps.go @@ -1,23 +1,14 @@ package project import ( - "embed" "encoding/json" - "io" "log/slog" "os" "os/exec" "path/filepath" -) - -//go:embed components/src/* components/package.json -var sstFiles embed.FS -var VERSIONS = [][]string{ - {"sst-ion", "0.0.2"}, - {"@pulumi/aws", "~"}, - {"@pulumi/pulumi", "~"}, -} + "github.com/sst/ion/internal/components" +) func (p *Project) CheckDeps() bool { if p.version == "dev" { @@ -36,7 +27,7 @@ func (p *Project) CheckDeps() bool { func (p *Project) InstallDeps() error { slog.Info("installing dependencies") - err := copyEmbeddedFiles("components", p.PathTemp()) + err := components.CopyTo(".", p.PathTemp()) if err != nil { return err } @@ -85,48 +76,3 @@ func getPackageJson(proj *Project, pkg string) (*PackageJson, error) { } return &parsed, nil } - -func copyEmbeddedFiles(srcDir, destDir string) error { - // Create the destination directory if it doesn't exist - if err := os.MkdirAll(destDir, 0755); err != nil { - return err - } - - // List all files and directories in the embedded FS - entries, err := sstFiles.ReadDir(srcDir) - if err != nil { - return err - } - - // Loop through each entry (file or directory) - for _, entry := range entries { - srcPath := filepath.Join(srcDir, entry.Name()) - destPath := filepath.Join(destDir, entry.Name()) - - if entry.IsDir() { - // If it's a directory, recursively copy its contents - if err := copyEmbeddedFiles(srcPath, destPath); err != nil { - return err - } - } else { - // If it's a file, copy it to the destination directory - srcFile, err := sstFiles.Open(srcPath) - if err != nil { - return err - } - defer srcFile.Close() - - destFile, err := os.Create(destPath) - if err != nil { - return err - } - defer destFile.Close() - - if _, err := io.Copy(destFile, srcFile); err != nil { - return err - } - } - } - - return nil -} diff --git a/pkg/project/stack.go b/pkg/project/stack.go index c22cd4a1e..eaf9461f8 100644 --- a/pkg/project/stack.go +++ b/pkg/project/stack.go @@ -24,62 +24,60 @@ func (s *stack) runtime() (string, error) { if err != nil { return "", err } + inject := map[string]interface{}{ + "region": s.project.Region(), + "stage": s.project.Stage(), + "name": s.project.Name(), + "paths": map[string]string{ + "root": s.project.PathRoot(), + "temp": s.project.PathTemp(), + "home": global.ConfigDir(), + }, + "aws": map[string]string{ + "AWS_ACCESS_KEY_ID": credentials.AccessKeyID, + "AWS_SECRET_ACCESS_KEY": credentials.SecretAccessKey, + "AWS_SESSION_TOKEN": credentials.SessionToken, + }, + "bootstrap": map[string]string{ + "bucket": bootstrap, + }, + } + injectBytes, err := json.Marshal(inject) + if err != nil { + return "", err + } return fmt.Sprintf(` + globalThis.app = %v + import "./src/runtime" + import { LocalWorkspace } from "@pulumi/pulumi/automation/index.js"; import mod from '%s'; - import * as _aws from "@pulumi/aws"; - import * as _util from "@pulumi/pulumi"; - import * as _sst from "./src/index" - - globalThis.aws = _aws - globalThis.util = _util - globalThis.sst = _sst - globalThis.app = { - region: "%s", - stage: "%s", - name: "%s", - bootstrap: { - bucket: "%s" - } - } - - const stack = await LocalWorkspace.createOrSelectStack({ - program: mod.run, - projectName: "%s", - stackName: "%s", - }, { - pulumiHome: "%s", - projectSettings: { - main: "%s", - name: "%v", - runtime: "nodejs", - backend: { - url: "%v" + const stack = await LocalWorkspace.createOrSelectStack( + { + program: mod.run, + projectName: app.name, + stackName: app.stage, + }, + { + pulumiHome: app.paths.home, + projectSettings: { + main: app.paths.root, + name: app.name, + runtime: "nodejs", + backend: { + url: "s3://" + app.bootstrap.bucket, + }, + }, + envVars: { + PULUMI_CONFIG_PASSPHRASE: "", + PULUMI_EXPERIMENTAL: "1", + PULUMI_SKIP_CHECKPOINTS: "true", + ...app.aws, }, }, - envVars: { - PULUMI_CONFIG_PASSPHRASE: "", - PULUMI_EXPERIMENTAL: "1", - PULUMI_SKIP_CHECKPOINTS: "true", - AWS_ACCESS_KEY_ID: "%s", - AWS_SECRET_ACCESS_KEY: "%s", - AWS_SESSION_TOKEN: "%s", - } - }) - `, - s.project.PathConfig(), - s.project.Region(), - s.project.Stage(), - s.project.Name(), - bootstrap, - s.project.Name(), - s.project.Stage(), - global.ConfigDir(), - s.project.PathRoot(), - s.project.Name(), - "s3://"+bootstrap, - credentials.AccessKeyID, credentials.SecretAccessKey, credentials.SessionToken, + ); + `, string(injectBytes), s.project.PathConfig(), ), nil } @@ -95,7 +93,7 @@ func (s *stack) run(cmd string) (StackEventStream, error) { Code: fmt.Sprintf(` %v await stack.%v({ - // onOutput: (line) => console.log(new Date().toISOString(), line), + onOutput: (line) => console.log(new Date().toISOString(), line), onEvent: (evt) => { console.log("~e" + JSON.stringify(evt)) // console.log(JSON.stringify(evt, null, 4)) diff --git a/pkg/project/types.go b/pkg/project/types.go deleted file mode 100644 index c2ee081db..000000000 --- a/pkg/project/types.go +++ /dev/null @@ -1,57 +0,0 @@ -package project - -import ( - "log/slog" - "os" - "path/filepath" -) - -const TYPES_DATA = ` -import "../src/index"; -import "@types/node"; -import "@pulumi/aws"; -import "@pulumi/pulumi"; - -declare global { - // @ts-expect-error - export import aws = require("@pulumi/aws"); - - // @ts-expect-error - export import util = require("@pulumi/pulumi"); - - // @ts-expect-error - export import sst = require("../src/index"); - - - export const app: { - region: string; - bootstrap: { - bucket: string; - }; - }; -} -` - -func (p *Project) GenerateTypes() error { - path := filepath.Join( - p.PathTemp(), - "types", - "global.d.ts", - ) - slog.Info("generating types", "path", path) - err := os.MkdirAll(filepath.Dir(path), 0755) - if err != nil { - return err - } - err = os.WriteFile( - path, - []byte(TYPES_DATA), - 0644, - ) - if err != nil { - return err - } - - return nil - -}