diff --git a/.cursorrules b/.cursorrules deleted file mode 100644 index 54d8e57c..00000000 --- a/.cursorrules +++ /dev/null @@ -1,6 +0,0 @@ -```sh -bun vitest run -bun vitest run ./test/smoke.test.ts # specific test - -bun gen # re-generate the clients -``` \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 951e4ac3..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: CI/CD Pipeline - -on: - pull_request: - branches: [main] - workflow_dispatch: {} - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - BUN_VERSION: "1.2.20" - -jobs: - lint-and-typecheck: - name: Lint & Type Check - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: ${{ env.BUN_VERSION }} - - - name: Install dependencies - run: bun install --frozen-lockfile - - - name: Run Biome linter - run: bun biome check - - - name: Type check - run: bun run build diff --git a/.github/workflows/pkg-pr.yml b/.github/workflows/pkg-pr.yml deleted file mode 100644 index 67fc5c65..00000000 --- a/.github/workflows/pkg-pr.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Publish Preview Package -on: - push: - branches: [main] - pull_request: - -jobs: - pkg-pr: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v1 - with: - bun-version: latest - - - name: Install dependencies - run: bun install - - - name: Build - run: bun run build - - - run: bunx pkg-pr-new publish diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 09517740..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: Release NPM Package - -on: - push: - branches: - - main - -permissions: - contents: write - pull-requests: write - id-token: write - -jobs: - release: - runs-on: ubuntu-latest - if: startsWith(github.event.head_commit.message, 'chore(release):') - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Extract version from commit message - id: version - run: | - VERSION=$(echo "${{ github.event.head_commit.message }}" | sed -E 's/^chore\(release\): //') - echo "version=$VERSION" >> $GITHUB_OUTPUT - - - name: Create and push tag - if: steps.version.outputs.version != '' - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - # Check if tag exists before creating - if ! git rev-parse "v${{ steps.version.outputs.version }}" >/dev/null 2>&1; then - git tag -a "v${{ steps.version.outputs.version }}" -m "Release v${{ steps.version.outputs.version }}" - git push --tags - else - echo "Tag v${{ steps.version.outputs.version }} already exists, skipping creation" - fi - - - name: Set node - uses: actions/setup-node@v4 - if: steps.version.outputs.version != '' - with: - registry-url: https://registry.npmjs.org/ - node-version: 22 - - - name: Setup Bun - uses: oven-sh/setup-bun@v1 - if: steps.version.outputs.version != '' - with: - bun-version: latest - - - name: Install dependencies - if: steps.version.outputs.version != '' - run: bun install - - - name: Build - if: steps.version.outputs.version != '' - run: bun run build - - - name: Create GitHub Release - if: steps.version.outputs.version != '' - run: | - # Check if release exists before creating - if ! gh release view "v${{ steps.version.outputs.version }}" >/dev/null 2>&1; then - bunx changelogithub - else - echo "Release v${{ steps.version.outputs.version }} already exists, skipping creation" - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Create NPM Release - if: steps.version.outputs.version != '' - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_CONFIG_PROVENANCE: true - run: | - # Configure npm token for both npm and bun - npm config set '//registry.npmjs.org/:_authToken' "${NODE_AUTH_TOKEN}" - if ! npm view "itty-aws@${{ steps.version.outputs.version }}" version >/dev/null 2>&1; then - # Bun respects NPM_CONFIG_TOKEN for auth; also pass provenance - export NPM_CONFIG_TOKEN="${NODE_AUTH_TOKEN}" - bun run publish:npm - else - echo "Version ${{ steps.version.outputs.version }} already published to npm, skipping publish" - fi diff --git a/.gitignore b/.gitignore index e27e7290..a14702c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,34 @@ -node_modules/ -dist/ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache *.tsbuildinfo -itty-aws.tgz \ No newline at end of file + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 50ba84fa..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "aws-models"] - path = aws-models - url = https://github.com/aws/api-models-aws.git diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 23d0e5a0..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "editor.codeLens": false, - "editor.formatOnSave": true, - "editor.formatOnSaveMode": "file", - "editor.codeActionsOnSave": { - "source.fixAll.ruff": "always", - "source.fixAll": "explicit", - "source.organizeImports": "explicit", - "source.organizeImports.biome": "explicit" - }, - "rewrap.autoWrap.enabled": false, - "[rust]": { - "editor.insertSpaces": true, - "editor.tabSize": 4 - }, - "[toml]": { - "editor.defaultFormatter": "tamasfe.even-better-toml" - }, - "[json]": { - "editor.indentSize": 2, - "editor.insertSpaces": true, - "editor.defaultFormatter": "biomejs.biome" - }, - "[markdown]": { - "editor.formatOnSave": false, - "editor.defaultFormatter": null - }, - "[mdx]": { - "editor.defaultFormatter": null, - "editor.formatOnSave": false - }, - "editor.inlayHints.enabled": "offUnlessPressed", - "files.exclude": { - "**/__pycache__": true, - "**/*.pyc": true - }, - "vitest.disableWorkspaceWarning": true, - "[typescript]": { - "editor.indentSize": 2, - "editor.defaultFormatter": "biomejs.biome" - }, - "[javascript]": { - "editor.indentSize": 2, - "editor.defaultFormatter": "biomejs.biome" - }, - "[tsx]": { - "editor.indentSize": 2, - "editor.defaultFormatter": "biomejs.biome" - }, - "[jsx]": { - "editor.indentSize": 2, - "editor.defaultFormatter": "biomejs.biome" - } -} diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index b826ae4a..00000000 --- a/AGENTS.md +++ /dev/null @@ -1,40 +0,0 @@ -# Repository Guidelines - -## Project Structure & Module Organization -- `src/`: Core library (e.g., `client.ts`, `aws.ts`, `utils.ts`). Generated service types live in `src/services/*/` and AWS protocol helpers in `src/protocols/`. -- `scripts/`: Codegen and maintenance (e.g., `generate-*.ts`, `bundle-size.ts`, `bump.ts`). -- `aws-models/`: Git submodule with upstream AWS Smithy models. -- `dist/`: TypeScript build output consumed by package exports. -- `test/`: Vitest suites (see `test/protocols/*.test.ts`). - -## Build, Test, and Development Commands -- Build: `bun run build` β€” compiles TypeScript (`tsc -b`) to `dist/`. -- Generate clients: `bun run generate` β€” regenerates service types, formats with Biome, then builds. -- Bundle size: `bun run bundle:size` β€” reports approximate bundle footprint. -- Publish (maintainers): `bun run publish:npm`. - -## Coding Style & Naming Conventions -- Language: TypeScript (ESM; `"type": "module"`). Prefer `Effect`-first APIs and explicit types. -- Formatting/Lint: Biome. ALWAYS run `bun biome check --write .` after making changes (target specific paths when possible for speed). -- Indentation: 2 spaces; keep lines concise and pure functions where possible. -- File naming: kebab-case for scripts, lowerCamelCase for members, PascalCase for types. - -## Agent Workflow (Codex CLI) -- Implement minimal, targeted changes. -- Build locally with `tsc -b` when relevant. -- ALWAYS format with Biome before finishing: `bun biome check --write .` (or `bun biome check --write `). -- Optionally run tests or smoke checks when touching protocols or serializers. - -## Testing Guidelines -- Framework: Vitest (`vitest.config.ts` sets `environment: "node"`, `globals: true`). -- Location/naming: place specs in `test/` using `*.test.ts` (subfolders allowed, e.g., `test/smoke/`). -- Run: `bun run vitest test/smoke/`. Aim for smoke tests against a real AWS account to test actual request / response. Keep it to read-only actions or actions that are low-cost and quick to run. - -## Commit & Pull Request Guidelines -- Commits: concise, imperative subject; optional scope. Conventional prefixes welcome (`feat:`, `fix:`, `chore:`) but not strictly required (align with existing history). -- PRs: include a clear summary, rationale, and links to related issues. Note any generated files or scripts used. Add screenshots only when output differs meaningfully (e.g., debug logs). -- Checks: ensure build and tests pass; run Biome formatting before requesting review. - -## Security & Configuration Tips -- Never commit credentials. Use AWS profiles/ENV vars supported by `@aws-sdk/credential-providers`. -- Keep changes minimal to `src/` and regenerate via `bun run generate` when models or generators change. diff --git a/AWS_SERVICE_SUPPORT.md b/AWS_SERVICE_SUPPORT.md deleted file mode 100644 index c7b3f15c..00000000 --- a/AWS_SERVICE_SUPPORT.md +++ /dev/null @@ -1,439 +0,0 @@ -# AWS Service Support - -This document provides an overview of AWS services supported by itty-aws. - -## Summary - -- **Total Services**: 414 - -### By Protocol - -- **restJson1**: 245 services (e.g., Lambda, API Gateway, EKS, EFS) -- **awsJson1_1**: 105 services (e.g., CloudTrail, Secrets Manager, WAFv2, CloudWatch Events, CloudWatch Logs) -- **awsJson1_0**: 43 services (e.g., DynamoDB, SQS, Step Functions (SFN)) -- **awsQuery**: 16 services (e.g., IAM, CloudWatch, RDS, DocDB) -- **restXml**: 4 services (e.g., S3, CloudFront, Route 53, S3 Control) -- **ec2Query**: 1 services (EC2) - -## Full Service Details - -| Service Name | SDK ID | Protocol | Version | ARN Namespace | Endpoint Prefix | -|--------------|--------|----------|---------|---------------|-----------------| -| accessanalyzer | AccessAnalyzer | restJson1 | 2019-11-01 | access-analyzer | | -| account | Account | restJson1 | 2021-02-01 | account | | -| acm | ACM | awsJson1_1 | 2015-12-08 | acm | acm | -| acm-pca | ACM PCA | awsJson1_1 | 2017-08-22 | acm-pca | acm-pca | -| aiops | AIOps | restJson1 | 2018-05-10 | aiops | | -| amp | amp | restJson1 | 2020-08-01 | aps | | -| amplify | Amplify | restJson1 | 2017-07-25 | amplify | amplify | -| amplifybackend | AmplifyBackend | restJson1 | 2020-08-11 | amplifybackend | amplifybackend | -| amplifyuibuilder | AmplifyUIBuilder | restJson1 | 2021-08-11 | amplifyuibuilder | | -| api-gateway | API Gateway | restJson1 | 2015-07-09 | apigateway | apigateway | -| apigatewaymanagementapi | ApiGatewayManagementApi | restJson1 | 2018-11-29 | apigateway | execute-api | -| apigatewayv2 | ApiGatewayV2 | restJson1 | 2018-11-29 | apigateway | apigateway | -| app-mesh | App Mesh | restJson1 | 2019-01-25 | appmesh | | -| appconfig | AppConfig | restJson1 | 2019-10-09 | appconfig | appconfig | -| appconfigdata | AppConfigData | restJson1 | 2021-11-11 | appconfigdata | appconfigdata | -| appfabric | AppFabric | restJson1 | 2023-05-19 | appfabric | | -| appflow | Appflow | restJson1 | 2020-08-23 | appflow | appflow | -| appintegrations | AppIntegrations | restJson1 | 2020-07-29 | app-integrations | app-integrations | -| application-auto-scaling | Application Auto Scaling | awsJson1_1 | 2016-02-06 | application-autoscaling | application-autoscaling | -| application-discovery-service | Application Discovery Service | awsJson1_1 | 2015-11-01 | discovery | discovery | -| application-insights | Application Insights | awsJson1_1 | 2018-11-25 | applicationinsights | applicationinsights | -| application-signals | Application Signals | restJson1 | 2024-04-15 | application-signals | application-signals | -| applicationcostprofiler | ApplicationCostProfiler | restJson1 | 2020-09-10 | application-cost-profiler | application-cost-profiler | -| apprunner | AppRunner | awsJson1_0 | 2020-05-15 | apprunner | apprunner | -| appstream | AppStream | awsJson1_1 | 2016-12-01 | appstream | appstream2 | -| appsync | AppSync | restJson1 | 2017-07-25 | appsync | appsync | -| apptest | AppTest | restJson1 | 2022-12-06 | apptest | apptest | -| arc-region-switch | ARC Region switch | awsJson1_0 | 2022-07-26 | arc-region-switch | arc-region-switch | -| arc-zonal-shift | ARC Zonal Shift | restJson1 | 2022-10-30 | | arc-zonal-shift | -| artifact | Artifact | restJson1 | 2018-05-10 | artifact | | -| athena | Athena | awsJson1_1 | 2017-05-18 | athena | athena | -| auditmanager | AuditManager | restJson1 | 2017-07-25 | auditmanager | auditmanager | -| auto-scaling | Auto Scaling | awsQuery | 2011-01-01 | autoscaling | autoscaling | -| auto-scaling-plans | Auto Scaling Plans | awsJson1_1 | 2018-01-06 | autoscaling-plans | autoscaling-plans | -| b2bi | b2bi | awsJson1_0 | 2022-06-23 | | b2bi | -| backup | Backup | restJson1 | 2018-11-15 | backup | backup | -| backup-gateway | Backup Gateway | awsJson1_0 | 2021-01-01 | backup-gateway | backup-gateway | -| backupsearch | BackupSearch | restJson1 | 2018-05-10 | backup-search | backup-search | -| batch | Batch | restJson1 | 2016-08-10 | batch | batch | -| bcm-data-exports | BCM Data Exports | awsJson1_1 | 2023-11-26 | bcm-data-exports | bcm-data-exports | -| bcm-pricing-calculator | BCM Pricing Calculator | awsJson1_0 | 2024-06-19 | bcm-pricing-calculator | | -| bedrock | Bedrock | restJson1 | 2023-04-20 | | bedrock | -| bedrock-agent | Bedrock Agent | restJson1 | 2023-06-05 | bedrock | bedrock-agent | -| bedrock-agent-runtime | Bedrock Agent Runtime | restJson1 | 2023-07-26 | bedrock | bedrock-agent-runtime | -| bedrock-agentcore | Bedrock AgentCore | restJson1 | 2024-02-28 | bedrock-agentcore | bedrock-agentcore | -| bedrock-agentcore-control | Bedrock AgentCore Control | restJson1 | 2023-06-05 | bedrock-agentcore | bedrock-agentcore-control | -| bedrock-data-automation | Bedrock Data Automation | restJson1 | 2023-07-26 | bedrock | bedrock-data-automation | -| bedrock-data-automation-runtime | Bedrock Data Automation Runtime | awsJson1_1 | 2024-06-13 | bedrock | bedrock-data-automation-runtime | -| bedrock-runtime | Bedrock Runtime | restJson1 | 2023-09-30 | | bedrock-runtime | -| billing | Billing | awsJson1_0 | 2023-09-07 | billing | billing | -| billingconductor | billingconductor | restJson1 | 2021-07-30 | billingconductor | | -| braket | Braket | restJson1 | 2019-09-01 | | | -| budgets | Budgets | awsJson1_1 | 2016-10-20 | budgets | budgets | -| chatbot | chatbot | restJson1 | 2017-10-11 | chatbot | chatbot | -| chime | Chime | restJson1 | 2018-05-01 | chime | chime | -| chime-sdk-identity | Chime SDK Identity | restJson1 | 2021-04-20 | chime | identity-chime | -| chime-sdk-media-pipelines | Chime SDK Media Pipelines | restJson1 | 2021-07-15 | chime | media-pipelines-chime | -| chime-sdk-meetings | Chime SDK Meetings | restJson1 | 2021-07-15 | chime | meetings-chime | -| chime-sdk-messaging | Chime SDK Messaging | restJson1 | 2021-05-15 | chime | messaging-chime | -| chime-sdk-voice | Chime SDK Voice | restJson1 | 2022-08-03 | chime | voice-chime | -| cleanrooms | CleanRooms | restJson1 | 2022-02-17 | cleanrooms | | -| cleanroomsml | CleanRoomsML | restJson1 | 2023-09-06 | cleanrooms-ml | | -| cloud9 | Cloud9 | awsJson1_1 | 2017-09-23 | cloud9 | cloud9 | -| cloudcontrol | CloudControl | awsJson1_0 | 2021-09-30 | | cloudcontrolapi | -| clouddirectory | CloudDirectory | restJson1 | 2017-01-11 | clouddirectory | clouddirectory | -| cloudformation | CloudFormation | awsQuery | 2010-05-15 | cloudformation | cloudformation | -| cloudfront | CloudFront | restXml | 2020-05-31 | cloudfront | cloudfront | -| cloudfront-keyvaluestore | CloudFront KeyValueStore | restJson1 | 2022-07-26 | key-value-store | cloudfront-keyvaluestore | -| cloudhsm | CloudHSM | awsJson1_1 | 2014-05-30 | cloudhsm | cloudhsm | -| cloudhsm-v2 | CloudHSM V2 | awsJson1_1 | 2017-04-28 | cloudhsm | cloudhsmv2 | -| cloudsearch | CloudSearch | awsQuery | 2013-01-01 | cloudsearch | cloudsearch | -| cloudsearch-domain | CloudSearch Domain | restJson1 | 2013-01-01 | cloudsearch | cloudsearchdomain | -| cloudtrail | CloudTrail | awsJson1_1 | 2013-11-01 | cloudtrail | cloudtrail | -| cloudtrail-data | CloudTrail Data | restJson1 | 2021-08-11 | | cloudtrail-data | -| cloudwatch | CloudWatch | awsQuery | 2010-08-01 | monitoring | monitoring | -| cloudwatch-events | CloudWatch Events | awsJson1_1 | 2015-10-07 | events | events | -| cloudwatch-logs | CloudWatch Logs | awsJson1_1 | 2014-03-28 | logs | logs | -| codeartifact | codeartifact | restJson1 | 2018-09-22 | codeartifact | codeartifact | -| codebuild | CodeBuild | awsJson1_1 | 2016-10-06 | codebuild | codebuild | -| codecatalyst | CodeCatalyst | restJson1 | 2022-09-28 | | codecatalyst | -| codecommit | CodeCommit | awsJson1_1 | 2015-04-13 | codecommit | codecommit | -| codeconnections | CodeConnections | awsJson1_0 | 2023-12-01 | codeconnections | codeconnections | -| codedeploy | CodeDeploy | awsJson1_1 | 2014-10-06 | codedeploy | codedeploy | -| codeguru-reviewer | CodeGuru Reviewer | restJson1 | 2019-09-19 | codeguru-reviewer | codeguru-reviewer | -| codeguru-security | CodeGuru Security | restJson1 | 2018-05-10 | codeguru-security | | -| codeguruprofiler | CodeGuruProfiler | restJson1 | 2019-07-18 | codeguru-profiler | codeguru-profiler | -| codepipeline | CodePipeline | awsJson1_1 | 2015-07-09 | codepipeline | codepipeline | -| codestar-connections | CodeStar connections | awsJson1_0 | 2019-12-01 | codestar-connections | codestar-connections | -| codestar-notifications | codestar notifications | restJson1 | 2019-10-15 | codestar-notifications | codestar-notifications | -| cognito-identity | Cognito Identity | awsJson1_1 | 2014-06-30 | cognito-identity | cognito-identity | -| cognito-identity-provider | Cognito Identity Provider | awsJson1_1 | 2016-04-18 | cognito-idp | cognito-idp | -| cognito-sync | Cognito Sync | restJson1 | 2014-06-30 | cognito-sync | cognito-sync | -| comprehend | Comprehend | awsJson1_1 | 2017-11-27 | comprehend | comprehend | -| comprehendmedical | ComprehendMedical | awsJson1_1 | 2018-10-30 | comprehendmedical | comprehendmedical | -| compute-optimizer | Compute Optimizer | awsJson1_0 | 2019-11-01 | compute-optimizer | compute-optimizer | -| config-service | Config Service | awsJson1_1 | 2014-11-12 | config | config | -| connect | Connect | restJson1 | 2017-08-08 | connect | connect | -| connect-contact-lens | Connect Contact Lens | restJson1 | 2020-08-21 | connect | contact-lens | -| connectcampaigns | ConnectCampaigns | restJson1 | 2021-01-30 | connect-campaigns | | -| connectcampaignsv2 | ConnectCampaignsV2 | restJson1 | 2024-04-23 | connect-campaigns | | -| connectcases | ConnectCases | restJson1 | 2022-10-03 | cases | cases | -| connectparticipant | ConnectParticipant | restJson1 | 2018-09-07 | connect | participant.connect | -| controlcatalog | ControlCatalog | restJson1 | 2018-05-10 | controlcatalog | | -| controltower | ControlTower | restJson1 | 2018-05-10 | controltower | controltower | -| cost-and-usage-report-service | Cost and Usage Report Service | awsJson1_1 | 2017-01-06 | cur | cur | -| cost-explorer | Cost Explorer | awsJson1_1 | 2017-10-25 | ce | ce | -| cost-optimization-hub | Cost Optimization Hub | awsJson1_0 | 2022-07-26 | | cost-optimization-hub | -| customer-profiles | Customer Profiles | restJson1 | 2020-08-15 | profile | profile | -| data-pipeline | Data Pipeline | awsJson1_1 | 2012-10-29 | datapipeline | datapipeline | -| database-migration-service | Database Migration Service | awsJson1_1 | 2016-01-01 | dms | dms | -| databrew | DataBrew | restJson1 | 2017-07-25 | databrew | databrew | -| dataexchange | DataExchange | restJson1 | 2017-07-25 | dataexchange | dataexchange | -| datasync | DataSync | awsJson1_1 | 2018-11-09 | datasync | datasync | -| datazone | DataZone | restJson1 | 2018-05-10 | datazone | | -| dax | DAX | awsJson1_1 | 2017-04-19 | dax | dax | -| deadline | deadline | restJson1 | 2023-10-12 | deadline | | -| detective | Detective | restJson1 | 2018-10-26 | detective | api.detective | -| device-farm | Device Farm | awsJson1_1 | 2015-06-23 | devicefarm | devicefarm | -| devops-guru | DevOps Guru | restJson1 | 2020-12-01 | devops-guru | devops-guru | -| direct-connect | Direct Connect | awsJson1_1 | 2012-10-25 | directconnect | directconnect | -| directory-service | Directory Service | awsJson1_1 | 2015-04-16 | ds | ds | -| directory-service-data | Directory Service Data | restJson1 | 2023-05-31 | ds | ds-data | -| dlm | DLM | restJson1 | 2018-01-12 | dlm | dlm | -| docdb | DocDB | awsQuery | 2014-10-31 | rds | rds | -| docdb-elastic | DocDB Elastic | restJson1 | 2022-11-28 | docdb-elastic | | -| drs | drs | restJson1 | 2020-02-26 | drs | | -| dsql | DSQL | restJson1 | 2018-05-10 | dsql | dsql | -| dynamodb | DynamoDB | awsJson1_0 | 2012-08-10 | dynamodb | dynamodb | -| dynamodb-streams | DynamoDB Streams | awsJson1_0 | 2012-08-10 | dynamodb | streams.dynamodb | -| ebs | EBS | restJson1 | 2019-11-02 | ebs | ebs | -| ec2 | EC2 | ec2Query | 2016-11-15 | ec2 | ec2 | -| ec2-instance-connect | EC2 Instance Connect | awsJson1_1 | 2018-04-02 | ec2-instance-connect | ec2-instance-connect | -| ecr | ECR | awsJson1_1 | 2015-09-21 | ecr | api.ecr | -| ecr-public | ECR PUBLIC | awsJson1_1 | 2020-10-30 | ecr-public | api.ecr-public | -| ecs | ECS | awsJson1_1 | 2014-11-13 | ecs | ecs | -| efs | EFS | restJson1 | 2015-02-01 | elasticfilesystem | elasticfilesystem | -| eks | EKS | restJson1 | 2017-11-01 | eks | eks | -| eks-auth | EKS Auth | restJson1 | 2023-11-26 | eks-auth | eks-auth | -| elastic-beanstalk | Elastic Beanstalk | awsQuery | 2010-12-01 | elasticbeanstalk | elasticbeanstalk | -| elastic-load-balancing | Elastic Load Balancing | awsQuery | 2012-06-01 | elasticloadbalancing | elasticloadbalancing | -| elastic-load-balancing-v2 | Elastic Load Balancing v2 | awsQuery | 2015-12-01 | elasticloadbalancing | elasticloadbalancing | -| elastic-transcoder | Elastic Transcoder | restJson1 | 2012-09-25 | elastictranscoder | elastictranscoder | -| elasticache | ElastiCache | awsQuery | 2015-02-02 | elasticache | elasticache | -| elasticsearch-service | Elasticsearch Service | restJson1 | 2015-01-01 | es | es | -| emr | EMR | awsJson1_1 | 2009-03-31 | elasticmapreduce | elasticmapreduce | -| emr-containers | EMR containers | restJson1 | 2020-10-01 | emr-containers | emr-containers | -| emr-serverless | EMR Serverless | restJson1 | 2021-07-13 | emr-serverless | | -| entityresolution | EntityResolution | restJson1 | 2018-05-10 | entityresolution | | -| eventbridge | EventBridge | awsJson1_1 | 2015-10-07 | events | events | -| evidently | Evidently | restJson1 | 2021-02-01 | evidently | | -| evs | evs | awsJson1_0 | 2023-07-27 | evs | | -| finspace | finspace | restJson1 | 2021-03-12 | finspace | finspace | -| finspace-data | finspace data | restJson1 | 2020-07-13 | finspace-api | finspace-api | -| firehose | Firehose | awsJson1_1 | 2015-08-04 | firehose | firehose | -| fis | fis | restJson1 | 2020-12-01 | fis | fis | -| fms | FMS | awsJson1_1 | 2018-01-01 | fms | fms | -| forecast | forecast | awsJson1_1 | 2018-06-26 | forecast | forecast | -| forecastquery | forecastquery | awsJson1_1 | 2018-06-26 | forecast | forecastquery | -| frauddetector | FraudDetector | awsJson1_1 | 2019-11-15 | frauddetector | frauddetector | -| freetier | FreeTier | awsJson1_0 | 2023-09-07 | | freetier | -| fsx | FSx | awsJson1_1 | 2018-03-01 | fsx | fsx | -| gamelift | GameLift | awsJson1_1 | 2015-10-01 | gamelift | gamelift | -| gameliftstreams | GameLiftStreams | restJson1 | 2018-05-10 | gameliftstreams | | -| geo-maps | Geo Maps | restJson1 | 2020-11-19 | geo-maps | | -| geo-places | Geo Places | restJson1 | 2020-11-19 | geo-places | | -| geo-routes | Geo Routes | restJson1 | 2020-11-19 | geo-routes | | -| glacier | Glacier | restJson1 | 2012-06-01 | glacier | glacier | -| global-accelerator | Global Accelerator | awsJson1_1 | 2018-08-08 | globalaccelerator | globalaccelerator | -| glue | Glue | awsJson1_1 | 2017-03-31 | glue | glue | -| grafana | grafana | restJson1 | 2020-08-18 | grafana | | -| greengrass | Greengrass | restJson1 | 2017-06-07 | greengrass | greengrass | -| greengrassv2 | GreengrassV2 | restJson1 | 2020-11-30 | greengrass | greengrass | -| groundstation | GroundStation | restJson1 | 2019-05-23 | groundstation | | -| guardduty | GuardDuty | restJson1 | 2017-11-28 | guardduty | guardduty | -| health | Health | awsJson1_1 | 2016-08-04 | health | health | -| healthlake | HealthLake | awsJson1_0 | 2017-07-01 | healthlake | healthlake | -| iam | IAM | awsQuery | 2010-05-08 | iam | iam | -| identitystore | identitystore | awsJson1_1 | 2020-06-15 | identitystore | identitystore | -| imagebuilder | imagebuilder | restJson1 | 2019-12-02 | imagebuilder | imagebuilder | -| inspector | Inspector | awsJson1_1 | 2016-02-16 | inspector | inspector | -| inspector-scan | Inspector Scan | restJson1 | 2023-08-08 | inspector-scan | | -| inspector2 | Inspector2 | restJson1 | 2020-06-08 | inspector2 | | -| internetmonitor | InternetMonitor | restJson1 | 2021-06-03 | internetmonitor | | -| invoicing | Invoicing | awsJson1_0 | 2024-12-01 | invoicing | invoicing | -| iot | IoT | restJson1 | 2015-05-28 | iot | iot | -| iot-data-plane | IoT Data Plane | restJson1 | 2015-05-28 | iotdata | data-ats.iot | -| iot-events | IoT Events | restJson1 | 2018-07-27 | iotevents | iotevents | -| iot-events-data | IoT Events Data | restJson1 | 2018-10-23 | ioteventsdata | data.iotevents | -| iot-jobs-data-plane | IoT Jobs Data Plane | restJson1 | 2017-09-29 | iot-jobs-data | data.jobs.iot | -| iot-managed-integrations | IoT Managed Integrations | restJson1 | 2025-03-03 | iotmanagedintegrations | api.iotmanagedintegrations | -| iot-wireless | IoT Wireless | restJson1 | 2020-11-22 | iotwireless | api.iotwireless | -| iotanalytics | IoTAnalytics | restJson1 | 2017-11-27 | iotanalytics | iotanalytics | -| iotdeviceadvisor | IotDeviceAdvisor | restJson1 | 2020-09-18 | iotdeviceadvisor | api.iotdeviceadvisor | -| iotfleethub | IoTFleetHub | restJson1 | 2020-11-03 | iotfleethub | api.fleethub.iot | -| iotfleetwise | IoTFleetWise | awsJson1_0 | 2021-06-17 | iotfleetwise | | -| iotsecuretunneling | IoTSecureTunneling | awsJson1_1 | 2018-10-05 | iotsecuredtunneling | api.tunneling.iot | -| iotsitewise | IoTSiteWise | restJson1 | 2019-12-02 | iotsitewise | iotsitewise | -| iotthingsgraph | IoTThingsGraph | awsJson1_1 | 2018-09-06 | iotthingsgraph | iotthingsgraph | -| iottwinmaker | IoTTwinMaker | restJson1 | 2021-11-29 | | iottwinmaker | -| ivs | ivs | restJson1 | 2020-07-14 | ivs | | -| ivs-realtime | IVS RealTime | restJson1 | 2020-07-14 | ivs | ivsrealtime | -| ivschat | ivschat | restJson1 | 2020-07-14 | ivschat | | -| kafka | Kafka | restJson1 | 2018-11-14 | kafka | kafka | -| kafkaconnect | KafkaConnect | restJson1 | 2021-09-14 | kafkaconnect | kafkaconnect | -| kendra | kendra | awsJson1_1 | 2019-02-03 | kendra | kendra | -| kendra-ranking | Kendra Ranking | awsJson1_0 | 2022-10-19 | kendra-ranking | kendra-ranking | -| keyspaces | Keyspaces | awsJson1_0 | 2022-02-10 | cassandra | cassandra | -| keyspacesstreams | KeyspacesStreams | awsJson1_0 | 2024-09-09 | cassandra | cassandra-streams | -| kinesis | Kinesis | awsJson1_1 | 2013-12-02 | kinesis | kinesis | -| kinesis-analytics | Kinesis Analytics | awsJson1_1 | 2015-08-14 | kinesisanalytics | kinesisanalytics | -| kinesis-analytics-v2 | Kinesis Analytics V2 | awsJson1_1 | 2018-05-23 | kinesisanalytics | kinesisanalytics | -| kinesis-video | Kinesis Video | restJson1 | 2017-09-30 | kinesisvideo | kinesisvideo | -| kinesis-video-archived-media | Kinesis Video Archived Media | restJson1 | 2017-09-30 | kinesisvideo | kinesisvideo | -| kinesis-video-media | Kinesis Video Media | restJson1 | 2017-09-30 | kinesisvideo | kinesisvideo | -| kinesis-video-signaling | Kinesis Video Signaling | restJson1 | 2019-12-04 | kinesisvideo | kinesisvideo | -| kinesis-video-webrtc-storage | Kinesis Video WebRTC Storage | restJson1 | 2018-05-10 | kinesisvideo | kinesisvideo | -| kms | KMS | awsJson1_1 | 2014-11-01 | kms | kms | -| lakeformation | LakeFormation | restJson1 | 2017-03-31 | lakeformation | lakeformation | -| lambda | Lambda | restJson1 | 2015-03-31 | lambda | lambda | -| launch-wizard | Launch Wizard | restJson1 | 2018-05-10 | launchwizard | launchwizard | -| lex-model-building-service | Lex Model Building Service | restJson1 | 2017-04-19 | lex | models.lex | -| lex-models-v2 | Lex Models V2 | restJson1 | 2020-08-07 | lex | models-v2-lex | -| lex-runtime-service | Lex Runtime Service | restJson1 | 2016-11-28 | lex | runtime.lex | -| lex-runtime-v2 | Lex Runtime V2 | restJson1 | 2020-08-07 | lex | runtime-v2-lex | -| license-manager | License Manager | awsJson1_1 | 2018-08-01 | license-manager | license-manager | -| license-manager-linux-subscriptions | License Manager Linux Subscriptions | restJson1 | 2018-05-10 | license-manager-linux-subscriptions | | -| license-manager-user-subscriptions | License Manager User Subscriptions | restJson1 | 2018-05-10 | license-manager-user-subscriptions | | -| lightsail | Lightsail | awsJson1_1 | 2016-11-28 | lightsail | lightsail | -| location | Location | restJson1 | 2020-11-19 | geo | | -| lookoutequipment | LookoutEquipment | awsJson1_0 | 2020-12-15 | lookoutequipment | lookoutequipment | -| lookoutmetrics | LookoutMetrics | restJson1 | 2017-07-25 | lookoutmetrics | lookoutmetrics | -| lookoutvision | LookoutVision | restJson1 | 2020-11-20 | lookoutvision | lookoutvision | -| m2 | m2 | restJson1 | 2021-04-28 | m2 | m2 | -| machine-learning | Machine Learning | awsJson1_1 | 2014-12-12 | machinelearning | machinelearning | -| macie2 | Macie2 | restJson1 | 2020-01-01 | macie2 | macie2 | -| mailmanager | MailManager | awsJson1_0 | 2023-10-17 | ses | mail-manager | -| managedblockchain | ManagedBlockchain | restJson1 | 2018-09-24 | managedblockchain | managedblockchain | -| managedblockchain-query | ManagedBlockchain Query | restJson1 | 2023-05-04 | managedblockchain-query | | -| marketplace-agreement | Marketplace Agreement | awsJson1_0 | 2020-03-01 | | agreement-marketplace | -| marketplace-catalog | Marketplace Catalog | restJson1 | 2018-09-17 | aws-marketplace | catalog.marketplace | -| marketplace-commerce-analytics | Marketplace Commerce Analytics | awsJson1_1 | 2015-07-01 | marketplacecommerceanalytics | marketplacecommerceanalytics | -| marketplace-deployment | Marketplace Deployment | restJson1 | 2023-01-25 | aws-marketplace | deployment-marketplace | -| marketplace-entitlement-service | Marketplace Entitlement Service | awsJson1_1 | 2017-01-11 | aws-marketplace | entitlement.marketplace | -| marketplace-metering | Marketplace Metering | awsJson1_1 | 2016-01-14 | aws-marketplace | metering.marketplace | -| marketplace-reporting | Marketplace Reporting | restJson1 | 2018-05-10 | aws-marketplace | reporting-marketplace | -| mediaconnect | MediaConnect | restJson1 | 2018-11-14 | mediaconnect | | -| mediaconvert | MediaConvert | restJson1 | 2017-08-29 | mediaconvert | mediaconvert | -| medialive | MediaLive | restJson1 | 2017-10-14 | medialive | medialive | -| mediapackage | MediaPackage | restJson1 | 2017-10-12 | mediapackage | mediapackage | -| mediapackage-vod | MediaPackage Vod | restJson1 | 2018-11-07 | mediapackage-vod | mediapackage-vod | -| mediapackagev2 | MediaPackageV2 | restJson1 | 2022-12-25 | mediapackagev2 | mediapackagev2 | -| mediastore | MediaStore | awsJson1_1 | 2017-09-01 | mediastore | mediastore | -| mediastore-data | MediaStore Data | restJson1 | 2017-09-01 | mediastore | data.mediastore | -| mediatailor | MediaTailor | restJson1 | 2018-04-23 | mediatailor | api.mediatailor | -| medical-imaging | Medical Imaging | restJson1 | 2023-07-19 | medical-imaging | medical-imaging | -| memorydb | MemoryDB | awsJson1_1 | 2021-01-01 | memorydb | memory-db | -| mgn | mgn | restJson1 | 2020-02-26 | mgn | | -| migration-hub | Migration Hub | awsJson1_1 | 2017-05-31 | mgh | mgh | -| migration-hub-refactor-spaces | Migration Hub Refactor Spaces | restJson1 | 2021-10-26 | refactor-spaces | refactor-spaces | -| migrationhub-config | MigrationHub Config | awsJson1_1 | 2019-06-30 | mgh | migrationhub-config | -| migrationhuborchestrator | MigrationHubOrchestrator | restJson1 | 2021-08-28 | migrationhub-orchestrator | migrationhub-orchestrator | -| migrationhubstrategy | MigrationHubStrategy | restJson1 | 2020-02-19 | | migrationhub-strategy | -| mpa | MPA | restJson1 | 2022-07-26 | mpa | | -| mq | mq | restJson1 | 2017-11-27 | mq | mq | -| mturk | MTurk | awsJson1_1 | 2017-01-17 | mturk-requester | mturk-requester | -| mwaa | MWAA | restJson1 | 2020-07-01 | airflow | | -| neptune | Neptune | awsQuery | 2014-10-31 | rds | rds | -| neptune-graph | Neptune Graph | restJson1 | 2023-11-29 | neptune-graph | | -| neptunedata | neptunedata | restJson1 | 2023-08-01 | neptune-db | | -| network-firewall | Network Firewall | awsJson1_0 | 2020-11-12 | network-firewall | network-firewall | -| networkflowmonitor | NetworkFlowMonitor | restJson1 | 2023-04-19 | networkflowmonitor | | -| networkmanager | NetworkManager | restJson1 | 2019-07-05 | networkmanager | networkmanager | -| networkmonitor | NetworkMonitor | restJson1 | 2023-08-01 | networkmonitor | | -| notifications | Notifications | restJson1 | 2018-05-10 | notifications | notifications | -| notificationscontacts | NotificationsContacts | restJson1 | 2018-05-10 | notifications-contacts | notifications-contacts | -| oam | OAM | restJson1 | 2022-06-10 | oam | | -| observabilityadmin | ObservabilityAdmin | restJson1 | 2018-05-10 | observabilityadmin | | -| odb | odb | awsJson1_0 | 2024-08-20 | odb | | -| omics | Omics | restJson1 | 2022-11-28 | omics | | -| opensearch | OpenSearch | restJson1 | 2021-01-01 | es | es | -| opensearchserverless | OpenSearchServerless | awsJson1_0 | 2021-11-01 | aoss | | -| opsworks | OpsWorks | awsJson1_1 | 2013-02-18 | opsworks | opsworks | -| opsworkscm | OpsWorksCM | awsJson1_1 | 2016-11-01 | opsworks-cm | opsworks-cm | -| organizations | Organizations | awsJson1_1 | 2016-11-28 | organizations | organizations | -| osis | OSIS | restJson1 | 2022-01-01 | osis | osis | -| outposts | Outposts | restJson1 | 2019-12-03 | outposts | outposts | -| panorama | Panorama | restJson1 | 2019-07-24 | panorama | | -| partnercentral-selling | PartnerCentral Selling | awsJson1_0 | 2022-07-26 | partnercentral | partnercentral-selling | -| payment-cryptography | Payment Cryptography | awsJson1_0 | 2021-09-14 | payment-cryptography | controlplane.payment-cryptography | -| payment-cryptography-data | Payment Cryptography Data | restJson1 | 2022-02-03 | | dataplane.payment-cryptography | -| pca-connector-ad | Pca Connector Ad | restJson1 | 2018-05-10 | pca-connector-ad | | -| pca-connector-scep | Pca Connector Scep | restJson1 | 2018-05-10 | pca-connector-scep | | -| pcs | PCS | awsJson1_0 | 2023-02-10 | pcs | | -| personalize | Personalize | awsJson1_1 | 2018-05-22 | personalize | personalize | -| personalize-events | Personalize Events | restJson1 | 2018-03-22 | personalize | personalize-events | -| personalize-runtime | Personalize Runtime | restJson1 | 2018-05-22 | personalize | personalize-runtime | -| pi | PI | awsJson1_1 | 2018-02-27 | pi | pi | -| pinpoint | Pinpoint | restJson1 | 2016-12-01 | mobiletargeting | pinpoint | -| pinpoint-email | Pinpoint Email | restJson1 | 2018-07-26 | ses | email | -| pinpoint-sms-voice | Pinpoint SMS Voice | restJson1 | 2018-09-05 | sms-voice | sms-voice.pinpoint | -| pinpoint-sms-voice-v2 | Pinpoint SMS Voice V2 | awsJson1_0 | 2022-03-31 | sms-voice | sms-voice | -| pipes | Pipes | restJson1 | 2015-10-07 | pipes | pipes | -| polly | Polly | restJson1 | 2016-06-10 | polly | polly | -| pricing | Pricing | awsJson1_1 | 2017-10-15 | pricing | api.pricing | -| privatenetworks | PrivateNetworks | restJson1 | 2021-12-03 | private-networks | | -| proton | Proton | awsJson1_0 | 2020-07-20 | | proton | -| qapps | QApps | restJson1 | 2023-11-27 | qapps | data.qapps | -| qbusiness | QBusiness | restJson1 | 2023-11-27 | qbusiness | | -| qconnect | QConnect | restJson1 | 2020-10-19 | wisdom | | -| qldb | QLDB | restJson1 | 2019-01-02 | qldb | qldb | -| qldb-session | QLDB Session | awsJson1_0 | 2019-07-11 | qldb | session.qldb | -| quicksight | QuickSight | restJson1 | 2018-04-01 | quicksight | quicksight | -| ram | RAM | restJson1 | 2018-01-04 | ram | ram | -| rbin | rbin | restJson1 | 2021-06-15 | rbin | rbin | -| rds | RDS | awsQuery | 2014-10-31 | rds | rds | -| rds-data | RDS Data | restJson1 | 2018-08-01 | rds-data | | -| redshift | Redshift | awsQuery | 2012-12-01 | redshift | redshift | -| redshift-data | Redshift Data | awsJson1_1 | 2019-12-20 | redshift-data | | -| redshift-serverless | Redshift Serverless | awsJson1_1 | 2021-04-21 | redshift-serverless | | -| rekognition | Rekognition | awsJson1_1 | 2016-06-27 | rekognition | rekognition | -| repostspace | repostspace | restJson1 | 2022-05-13 | repostspace | | -| resiliencehub | resiliencehub | restJson1 | 2020-04-30 | resiliencehub | resiliencehub | -| resource-explorer-2 | Resource Explorer 2 | restJson1 | 2022-07-28 | resource-explorer-2 | resource-explorer-2 | -| resource-groups | Resource Groups | restJson1 | 2017-11-27 | resource-groups | resource-groups | -| resource-groups-tagging-api | Resource Groups Tagging API | awsJson1_1 | 2017-01-26 | tagging | tagging | -| robomaker | RoboMaker | restJson1 | 2018-06-29 | robomaker | robomaker | -| rolesanywhere | RolesAnywhere | restJson1 | 2018-05-10 | rolesanywhere | | -| route-53 | Route 53 | restXml | 2013-04-01 | route53 | route53 | -| route-53-domains | Route 53 Domains | awsJson1_1 | 2014-05-15 | route53domains | route53domains | -| route53-recovery-cluster | Route53 Recovery Cluster | awsJson1_0 | 2019-12-02 | route53-recovery-cluster | route53-recovery-cluster | -| route53-recovery-control-config | Route53 Recovery Control Config | restJson1 | 2020-11-02 | route53-recovery-control-config | route53-recovery-control-config | -| route53-recovery-readiness | Route53 Recovery Readiness | restJson1 | 2019-12-02 | route53-recovery-readiness | route53-recovery-readiness | -| route53profiles | Route53Profiles | restJson1 | 2018-05-10 | route53profiles | | -| route53resolver | Route53Resolver | awsJson1_1 | 2018-04-01 | route53resolver | route53resolver | -| rum | RUM | restJson1 | 2018-05-10 | rum | | -| s3 | S3 | restXml | 2006-03-01 | s3 | s3 | -| s3-control | S3 Control | restXml | 2018-08-20 | s3 | s3-control | -| s3outposts | S3Outposts | restJson1 | 2017-07-25 | s3-outposts | s3-outposts | -| s3tables | S3Tables | restJson1 | 2018-05-10 | s3tables | | -| s3vectors | S3Vectors | restJson1 | 2025-07-15 | s3vectors | s3vectors | -| sagemaker | SageMaker | awsJson1_1 | 2017-07-24 | sagemaker | api.sagemaker | -| sagemaker-a2i-runtime | SageMaker A2I Runtime | restJson1 | 2019-11-07 | sagemaker | a2i-runtime.sagemaker | -| sagemaker-edge | Sagemaker Edge | restJson1 | 2020-09-23 | sagemaker | edge.sagemaker | -| sagemaker-featurestore-runtime | SageMaker FeatureStore Runtime | restJson1 | 2020-07-01 | sagemaker | featurestore-runtime.sagemaker | -| sagemaker-geospatial | SageMaker Geospatial | restJson1 | 2020-05-27 | sagemaker-geospatial | | -| sagemaker-metrics | SageMaker Metrics | restJson1 | 2022-09-30 | sagemaker | metrics.sagemaker | -| sagemaker-runtime | SageMaker Runtime | restJson1 | 2017-05-13 | sagemaker | runtime.sagemaker | -| savingsplans | savingsplans | restJson1 | 2019-06-28 | savingsplans | savingsplans | -| scheduler | Scheduler | restJson1 | 2021-06-30 | scheduler | | -| schemas | schemas | restJson1 | 2019-12-02 | schemas | schemas | -| secrets-manager | Secrets Manager | awsJson1_1 | 2017-10-17 | secretsmanager | secretsmanager | -| security-ir | Security IR | restJson1 | 2018-05-10 | security-ir | | -| securityhub | SecurityHub | restJson1 | 2018-10-26 | securityhub | securityhub | -| securitylake | SecurityLake | restJson1 | 2018-05-10 | securitylake | | -| serverlessapplicationrepository | ServerlessApplicationRepository | restJson1 | 2017-09-08 | serverlessrepo | serverlessrepo | -| service-catalog | Service Catalog | awsJson1_1 | 2015-12-10 | servicecatalog | servicecatalog | -| service-catalog-appregistry | Service Catalog AppRegistry | restJson1 | 2020-06-24 | servicecatalog | servicecatalog-appregistry | -| service-quotas | Service Quotas | awsJson1_1 | 2019-06-24 | servicequotas | servicequotas | -| servicediscovery | ServiceDiscovery | awsJson1_1 | 2017-03-14 | servicediscovery | servicediscovery | -| ses | SES | awsQuery | 2010-12-01 | ses | email | -| sesv2 | SESv2 | restJson1 | 2019-09-27 | ses | email | -| sfn | SFN | awsJson1_0 | 2016-11-23 | states | states | -| shield | Shield | awsJson1_1 | 2016-06-02 | shield | shield | -| signer | signer | restJson1 | 2017-08-25 | signer | signer | -| simspaceweaver | SimSpaceWeaver | restJson1 | 2022-10-28 | simspaceweaver | simspaceweaver | -| sms | SMS | awsJson1_1 | 2016-10-24 | sms | sms | -| snow-device-management | Snow Device Management | restJson1 | 2021-08-04 | snow-device-management | | -| snowball | Snowball | awsJson1_1 | 2016-06-30 | snowball | snowball | -| sns | SNS | awsQuery | 2010-03-31 | sns | sns | -| socialmessaging | SocialMessaging | restJson1 | 2024-01-01 | social-messaging | social-messaging | -| sqs | SQS | awsJson1_0 | 2012-11-05 | sqs | sqs | -| ssm | SSM | awsJson1_1 | 2014-11-06 | ssm | ssm | -| ssm-contacts | SSM Contacts | awsJson1_1 | 2021-05-03 | ssm-contacts | ssm-contacts | -| ssm-guiconnect | SSM GuiConnect | restJson1 | 2021-05-01 | ssm-guiconnect | | -| ssm-incidents | SSM Incidents | restJson1 | 2018-05-10 | ssm-incidents | | -| ssm-quicksetup | SSM QuickSetup | restJson1 | 2018-05-10 | ssm-quicksetup | | -| ssm-sap | Ssm Sap | restJson1 | 2018-05-10 | ssm-sap | ssm-sap | -| sso | SSO | restJson1 | 2019-06-10 | awsssoportal | portal.sso | -| sso-admin | SSO Admin | awsJson1_1 | 2020-07-20 | sso | sso | -| sso-oidc | SSO OIDC | restJson1 | 2019-06-10 | sso-oauth | oidc | -| storage-gateway | Storage Gateway | awsJson1_1 | 2013-06-30 | storagegateway | storagegateway | -| sts | STS | awsQuery | 2011-06-15 | sts | sts | -| supplychain | SupplyChain | restJson1 | 2024-01-01 | scn | scn | -| support | Support | awsJson1_1 | 2013-04-15 | support | support | -| support-app | Support App | restJson1 | 2021-08-20 | supportapp | | -| swf | SWF | awsJson1_0 | 2012-01-25 | swf | swf | -| synthetics | synthetics | restJson1 | 2017-10-11 | synthetics | synthetics | -| taxsettings | TaxSettings | restJson1 | 2018-05-10 | tax | | -| textract | Textract | awsJson1_1 | 2018-06-27 | textract | textract | -| timestream-influxdb | Timestream InfluxDB | awsJson1_0 | 2023-01-27 | timestream-influxdb | | -| timestream-query | Timestream Query | awsJson1_0 | 2018-11-01 | timestream | query.timestream | -| timestream-write | Timestream Write | awsJson1_0 | 2018-11-01 | timestream | ingest.timestream | -| tnb | tnb | restJson1 | 2008-10-21 | tnb | | -| transcribe | Transcribe | awsJson1_1 | 2017-10-26 | transcribe | transcribe | -| transcribe-streaming | Transcribe Streaming | restJson1 | 2017-10-26 | transcribe | transcribestreaming | -| transfer | Transfer | awsJson1_1 | 2018-11-05 | transfer | transfer | -| translate | Translate | awsJson1_1 | 2017-07-01 | translate | translate | -| trustedadvisor | TrustedAdvisor | restJson1 | 2022-09-15 | trustedadvisor | | -| verifiedpermissions | VerifiedPermissions | awsJson1_0 | 2021-12-01 | verifiedpermissions | verifiedpermissions | -| voice-id | Voice ID | awsJson1_0 | 2021-09-27 | voiceid | voiceid | -| vpc-lattice | VPC Lattice | restJson1 | 2022-11-30 | vpc-lattice | | -| waf | WAF | awsJson1_1 | 2015-08-24 | waf | waf | -| waf-regional | WAF Regional | awsJson1_1 | 2016-11-28 | waf-regional | waf-regional | -| wafv2 | WAFV2 | awsJson1_1 | 2019-07-29 | wafv2 | wafv2 | -| wellarchitected | WellArchitected | restJson1 | 2020-03-31 | wellarchitected | wellarchitected | -| wisdom | Wisdom | restJson1 | 2020-10-19 | wisdom | | -| workdocs | WorkDocs | restJson1 | 2016-05-01 | workdocs | workdocs | -| workmail | WorkMail | awsJson1_1 | 2017-10-01 | workmail | workmail | -| workmailmessageflow | WorkMailMessageFlow | restJson1 | 2019-05-01 | workmailmessageflow | workmailmessageflow | -| workspaces | WorkSpaces | awsJson1_1 | 2015-04-08 | workspaces | workspaces | -| workspaces-instances | Workspaces Instances | awsJson1_0 | 2022-07-26 | workspaces-instances | | -| workspaces-thin-client | WorkSpaces Thin Client | restJson1 | 2023-08-22 | thinclient | | -| workspaces-web | WorkSpaces Web | restJson1 | 2020-07-08 | workspaces-web | workspaces-web | -| xray | XRay | restJson1 | 2016-04-12 | xray | xray | - ---- - -*Generated on 2025-08-05 by itty-aws service support table generator* diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 2ad7984f..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,225 +0,0 @@ -## v0.7.2 - -###    πŸž Bug Fixes - -- Remove itty-aws and pathe as deps  -  by **Sam Goodwin** in https://github.com/sam-goodwin/itty-aws/issues/81 [(959c1)](https://github.com/sam-goodwin/itty-aws/commit/959c1fed) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.7.1...v0.7.2) - ---- - -## v0.7.1 - -###    πŸž Bug Fixes - -- **ec2**: InvalidSubnet.NotFound -> InvalidSubnetID.NotFound  -  by **Sam Goodwin** [(7ea15)](https://github.com/sam-goodwin/itty-aws/commit/7ea1579d) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.7.0...v0.7.1) - ---- - -## v0.7.0 - -###    πŸš€ Features - -- **ec2**: Patch more .NotFound errors  -  by **Sam Goodwin** [(89ecb)](https://github.com/sam-goodwin/itty-aws/commit/89ecba80) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.6.1...v0.7.0) - ---- - -## v0.6.1 - -###    πŸž Bug Fixes - -- Patch DeleteVpc with InvalidVpcID.NotFound error  -  by **Sam Goodwin** in https://github.com/sam-goodwin/itty-aws/issues/80 [(0a9c7)](https://github.com/sam-goodwin/itty-aws/commit/0a9c7c39) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.6.0...v0.6.1) - ---- - -## v0.6.0 - -###    πŸž Bug Fixes - -- Extract additional errors from waitable traits  -  by **Sam Goodwin** in https://github.com/sam-goodwin/itty-aws/issues/79 [(6f6f2)](https://github.com/sam-goodwin/itty-aws/commit/6f6f28aa) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.5.0...v0.6.0) - ---- - -## v0.5.0 - -###    πŸš€ Features - -- Generate service-specific errors union type  -  by **StackOps** and **stackops-ngin** in https://github.com/sam-goodwin/itty-aws/issues/74 [(38ef9)](https://github.com/sam-goodwin/itty-aws/commit/38ef9929) -- S3 restxml-1.0 and streaming endpoints  -  by **Michael K** in https://github.com/sam-goodwin/itty-aws/issues/76 [(b5cb0)](https://github.com/sam-goodwin/itty-aws/commit/b5cb0a0d) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.4.1...v0.5.0) - ---- - -## v0.4.1 - -###    πŸž Bug Fixes - -- **sso-oidc**: Use proper sigV4ServiceName to identity sso-oidc  -  by **Sam Goodwin** [(d89f7)](https://github.com/sam-goodwin/itty-aws/commit/d89f7e83) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.4.0...v0.4.1) - ---- - -## v0.4.0 - -###    πŸš€ Features - -- **sso-oidc**: Do not require AWS credentials for SSO OIDC  -  by **Sam Goodwin** [(3c607)](https://github.com/sam-goodwin/itty-aws/commit/3c607175) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.8...v0.4.0) - ---- - -## v0.3.8 - -###    πŸž Bug Fixes - -- Export credentials  -  by **StackOps** and **stackops-ngin** in https://github.com/sam-goodwin/itty-aws/issues/73 [(c6735)](https://github.com/sam-goodwin/itty-aws/commit/c6735431) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.7...v0.3.8) - ---- - -## v0.3.7 - -###    πŸž Bug Fixes - -- Export credentials and credentials.service  -  by **Sam Goodwin** in https://github.com/sam-goodwin/itty-aws/issues/72 [(986f1)](https://github.com/sam-goodwin/itty-aws/commit/986f10b6) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.6...v0.3.7) - ---- - -## v0.3.6 - -###    πŸž Bug Fixes - -- Do not set region for AWS IAM service  -  by **Sam Goodwin** [(1cc1c)](https://github.com/sam-goodwin/itty-aws/commit/1cc1cdd3) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.5...v0.3.6) - ---- - -## v0.3.5 - -###    πŸž Bug Fixes - -- Re-export CommonAwsError from all services  -  by **Sam Goodwin** [(33e03)](https://github.com/sam-goodwin/itty-aws/commit/33e03ecb) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.4...v0.3.5) - ---- - -## v0.3.4 - -###    πŸž Bug Fixes - -- Re-export errors to fix type portability errors  -  by **Sam Goodwin** [(c5e2e)](https://github.com/sam-goodwin/itty-aws/commit/c5e2e81b) -- Do not parse numbers with xml parser  -  by **Sam Goodwin** [(3af8d)](https://github.com/sam-goodwin/itty-aws/commit/3af8db1d) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.3...v0.3.4) - ---- - -## v0.3.3 - -###    πŸž Bug Fixes - -- Export error.ts from root  -  by **Sam Goodwin** [(d6023)](https://github.com/sam-goodwin/itty-aws/commit/d602365a) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.2...v0.3.3) - ---- - -## v0.3.2 - -###    πŸž Bug Fixes - -- Export a type for each Service  -  by **Sam Goodwin** [(fcd4b)](https://github.com/sam-goodwin/itty-aws/commit/fcd4b3f7) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.1...v0.3.2) - ---- - -## v0.3.1 - -###    πŸž Bug Fixes - -- Export all types for each service  -  by **Sam Goodwin** [(42cd1)](https://github.com/sam-goodwin/itty-aws/commit/42cd1a76) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.3.0...v0.3.1) - ---- - -## v0.3.0 - -###    πŸš€ Features - -- RestJson1 + improved error handling  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/61 [(4663c)](https://github.com/sam-goodwin/itty-aws/commit/4663cb53) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.2.2...v0.3.0) - ---- - -## v0.2.2 - -*No significant changes* - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.2.1...v0.2.2) - ---- - -## v0.2.1 - -###    πŸž Bug Fixes - -- Ec2 metadata reduction  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/57 [(60710)](https://github.com/sam-goodwin/itty-aws/commit/60710f69) -- Get ops from both locations in the spec  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/59 [(fe012)](https://github.com/sam-goodwin/itty-aws/commit/fe012729) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/v0.2.0...v0.2.1) - ---- - -## v0.2.0 - -###    πŸš€ Features - -- Implement SSM  -  by **sam** in https://github.com/sam-goodwin/itty-aws/issues/8 [(4012a)](https://github.com/sam-goodwin/itty-aws/commit/4012a83c) -- Set up repeatable test and improve error  -  by **sam** in https://github.com/sam-goodwin/itty-aws/issues/11 [(d42f5)](https://github.com/sam-goodwin/itty-aws/commit/d42f5a84) -- Support ClientOptions containing endpoint and credentials  -  by **sam** in https://github.com/sam-goodwin/itty-aws/issues/15 [(e6439)](https://github.com/sam-goodwin/itty-aws/commit/e6439d8b) -- Support EventBridge  -  by **sam** in https://github.com/sam-goodwin/itty-aws/issues/16 [(bd2cd)](https://github.com/sam-goodwin/itty-aws/commit/bd2cd1b7) -- Generate mappings for amz-target and json type from smithy  -  by **sam** in https://github.com/sam-goodwin/itty-aws/issues/18 [(15525)](https://github.com/sam-goodwin/itty-aws/commit/1552566e) -- Add S3 support  -  by **Naor Peled** in https://github.com/sam-goodwin/itty-aws/issues/19 [(f6d94)](https://github.com/sam-goodwin/itty-aws/commit/f6d94f18) -- Support < Node 18 using HTTPs and extend S3 support  -  by **sam** in https://github.com/sam-goodwin/itty-aws/issues/20 [(773bf)](https://github.com/sam-goodwin/itty-aws/commit/773bf0e2) -- Add SQS support  -  by **Cristian PallarΓ©s** in https://github.com/sam-goodwin/itty-aws/issues/34 [(fdb76)](https://github.com/sam-goodwin/itty-aws/commit/fdb76bcd) -- Move to effect  -  by **Sam Goodwin** in https://github.com/sam-goodwin/itty-aws/issues/36 [(b43b9)](https://github.com/sam-goodwin/itty-aws/commit/b43b9cb8) -- Use Effect's Stream for streaming properties  -  by **Sam Goodwin** [(7b080)](https://github.com/sam-goodwin/itty-aws/commit/7b080c81) -- Use AWS-published models and add support for all services  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/40 [(8d24a)](https://github.com/sam-goodwin/itty-aws/commit/8d24adcd) -- Dedicated protocol handlers  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/44 [(41aa8)](https://github.com/sam-goodwin/itty-aws/commit/41aa860e) -- Fully working ec2query protocol (bidirectional)  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/46 [(384eb)](https://github.com/sam-goodwin/itty-aws/commit/384eb662) -- Refactor services into a package.json export per service  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/49 [(fd828)](https://github.com/sam-goodwin/itty-aws/commit/fd828c2a) -- AWSquery protocol support  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/50 [(43224)](https://github.com/sam-goodwin/itty-aws/commit/43224f24) -- **ec2**: Add xml protocol support for ec2  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/38 [(d5f52)](https://github.com/sam-goodwin/itty-aws/commit/d5f52dde) - -###    πŸž Bug Fixes - -- Parsing XML of getObject  -  by **sam** [(ed8f3)](https://github.com/sam-goodwin/itty-aws/commit/ed8f3e44) -- Release.yml  -  by **Sam Goodwin** [(6fec7)](https://github.com/sam-goodwin/itty-aws/commit/6fec7a26) -- More efficient imports  -  by **Sam Goodwin** [(17da5)](https://github.com/sam-goodwin/itty-aws/commit/17da59ce) -- Use dynamic Content-Type headers based on AWS service protocol  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/37 [(d74e3)](https://github.com/sam-goodwin/itty-aws/commit/d74e32ff) -- Service names were wrong, couldn't use services via client  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/45 [(35379)](https://github.com/sam-goodwin/itty-aws/commit/35379f18) -- Ec2Query input transformation bug  -  by **Kirk Mitchener** in https://github.com/sam-goodwin/itty-aws/issues/52 [(74542)](https://github.com/sam-goodwin/itty-aws/commit/74542b1d) - -#####     [View changes on GitHub](https://github.com/sam-goodwin/itty-aws/compare/21e5a85d2d96268b9afbb10f2f1b83b64e0aabb0...v0.2.0) - ---- - diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 0d2b6ef1..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,82 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -`itty-aws` is a lightweight AWS SDK implementation for [Effect](https://effect.website) that provides type-safe AWS service clients generated from official AWS API specifications. It uses a single Proxy pattern to dynamically create service clients and implements aws4fetch for request signing. - -## Development Commands - -### Build and Test -- `bun run build` - Compile TypeScript to dist/ -- `bun run test:run` - Run tests once (no watch mode) -- `bun vitest run ./test/smoke/.test.ts` - Run specific smoke test file - -### Code Generation -- `bun run generate` or `bun gen` - Generate all service clients from AWS models + lint + build -- `bun scripts/generate-clients.ts` - Generate service clients only -- `bun scripts/generate-ec2-metadata.ts` - Generate EC2 metadata - -### Code Quality -- `bun biome check --write` - Run linter with auto-fix - -### Bundle Analysis -- `bun scripts/bundle-size.ts` - Analyze bundle size - -## Architecture - -### Core Components - -1. **AWS Proxy (`src/index.ts`)**: Main entry point that creates dynamic service proxies -2. **Service Client (`src/client.ts`)**: Core client implementation with request/response handling -3. **Generated Services (`src/services/`)**: Auto-generated TypeScript types for each AWS service -4. **AWS Models (`aws-models/`)**: Git submodule containing official AWS API specifications - -### Key Files - -- `src/client.ts`: Core AWS client with proxy-based method interception -- `src/aws.ts`: Type definitions and service interfaces -- `src/metadata.ts`: Service metadata (endpoints, protocols, target prefixes) -- `src/error.ts`: Common AWS error types and tagged error implementations -- `src/ec2-metadata.ts`: Auto-generated metadata for the EC2 Query protocol - -### Code Generation Process - -1. AWS API models are stored as Smithy JSON in `aws-models/models/` -2. `scripts/generate-clients.ts` reads these models and generates TypeScript interfaces -3. Each service gets its own file in `src/services/` with complete type definitions -4. The main AWS proxy dynamically creates service clients using these types - -### Request Flow - -1. `new AWS.ServiceName(config)` creates a service proxy -2. Method calls like `client.methodName(input)` are intercepted by the proxy -3. `createServiceProxy` converts the call to AWS API format -4. Request is signed with aws4fetch and sent to AWS -5. Response is parsed based on service protocol (JSON, XML, Query) -6. Errors are converted to typed Effect errors - -### Protocols Supported - -- `awsJson1_0` / `awsJson1_1`: JSON-based protocols (DynamoDB, etc.) -- `restJson1`: REST JSON protocol (S3, API Gateway, etc.) -- `ec2Query`: EC2-specific XML query protocol with custom parsers -- `awsQuery`: General XML query protocol - -## Important Notes - -- Uses Effect.js for functional error handling and composable operations -- All operations return `Effect` values -- Credentials are resolved automatically using AWS credential chain -- XML protocols (S3) are not fully supported yet -- Service generation requires the aws-models git submodule to be present - -## Testing - -Tests are located in `test/` and use Vitest. The test suite includes: -- `smoke.test.ts`: Basic integration tests -- `ec2-*.test.ts`: EC2-specific protocol tests -- `content-type.test.ts`: Content-Type header validation - -Run tests with AWS credentials configured for integration tests to pass. \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index e293cdf5..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,59 +0,0 @@ -# Contributing to itty-aws - -## Updating AWS API Models - -This project uses AWS API models from the official [`aws/api-models-aws`](https://github.com/aws/api-models-aws) repository via a git submodule. This submodule should be periodically updated and the itty-aws services regenerated. - -### Initial Setup - -When cloning this repository, you need to initialize and update the submodule: - -```bash -git submodule update --init --recursive -``` - -### Updating to Latest AWS Models - -To update the AWS models to the latest version: - -```bash -git submodule update --remote aws-models -git add aws-models -git commit -m "Update AWS models to latest version" -``` - -### After Updating Models - -After updating the AWS models, you should regenerate the TypeScript service clients: - -```bash -bun run generate -``` - -This will: -1. Read the updated models from `aws-models/models/` -2. Generate new TypeScript service definitions in `src/services/` -3. Format the code with Biome -4. Type-check with TypeScript - -### Development Workflow - -1. Update AWS models (if needed): `git submodule update --remote aws-models` -2. Generate clients: `bun run generate` -3. Build: `bun run build` -4. Run smoke tests: `bun run test:smoke` - - -## Bundle Size Comparison - -`itty-aws` includes a comprehensive bundle size comparison tool to measure bundle sizes against the official AWS SDK v3: - -```bash -# Compare bundle size of all itty-aws services with equivalent AWS SDK v3 service -bun scripts/bundle-compare.ts -``` - -The tool generates: -- **Markdown report** at `dist/bundle-compare/report.md` with size comparisons -- **Bundle artifacts** for inspection in `dist/bundle-compare/` - diff --git a/README.md b/README.md index 57916a78..39884667 100644 --- a/README.md +++ b/README.md @@ -1,641 +1,15 @@ -# itty-aws +# itty-aws-2 -A lightweight AWS SDK implementation for [Effect](https://effect.website) implemented with a single [Proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) and types generated from the AWS API specifications. - -`itty-aws` captures the entire AWS API surface area, including each API's exact error codes: - -- **Effect**: Type-safe error handling, built-in retries, composable operations -- **Simple API**: `client.apiName(..)` instead of `client.send(Command)` -- **Lightweight**: Much smaller than AWS SDK v3 -- **Fast cold starts**: No impact on Lambda startup times - -```ts -import { DynamoDB } from "itty-aws/dynamodb"; -import { Effect, Schedule } from "effect"; - -const ddb = new DynamoDB({ region: "us-east-1" }); - -// Type-safe operations with built-in error handling -const program = Effect.gen(function* () { - const user = yield* ddb.getItem({ - TableName: "users", - Key: { id: { S: "123" } } - }).pipe( - Effect.catchTag("ResourceNotFoundException", () => - Effect.succeed({ Item: undefined }) - ), - Effect.retry({ - times: 3, - schedule: Schedule.exponential("1 second") - }) - ); - - return user.Item; -}); -``` - -## Why? - -The official AWS SDK v3 is a massive 200+ NPM package monorepo with an awkward `client.send(new Command())` syntax that is a heavy dependency in your bundle. The `@effect-aws/*` project adapts the AWS SDK v3 to Effect, but at the cost of an additional 200+ NPM packages. - -`itty-aws` implements a standlone AWS SDK with a single NPM package containing a `Proxy` and types generated from the Smithy spec. - -`itty-aws` also brings back the good ol' days of `aws-sdk` (v2) where instead of the clunky `client.send(new Command())` syntax, `itty-aws` supports `client.apiName(..)` syntax: - -```ts -const client = new DynamoDB({ region: "us-east-1" }); - -// instead of just simply calling a method -yield* client.getItem({ - TableName: "users", - Key: { id: { S: "123" } } -}) -``` - -Compare this to the official AWS SDK v3, which requires you to construct a Command: - -```ts -import { DynamoDBClient, GetItemCommand } from "@aws-sdk/client-dynamodb"; - -const client = new DynamoDBClient({ region: "us-east-1" }); - -// instead of just simply calling a method -await client.send(new GetItemCommand({ - TableName: "users", - Key: { id: { S: "123" } } -})) -``` - -## Installation +To install dependencies: ```bash -npm install itty-aws -``` - -> [!NOTE] -> `itty-aws` requires [Effect](https://effect.website) as a peer dependency for type-safe error handling and composable operations. If your package manager does not automatically install peer dependencies, you will need to install `effect` as well. - -## Usage - -Create a client for the service you want to use. The service will expose each API as a method that returns an `Effect` value with the correct response and error types. - -```ts -import { DynamoDB } from "itty-aws/dynamodb"; -import { Effect, Console, Schedule } from "effect"; - -const ddb = new DynamoDB({ region: "us-east-1" }); - -const program = Effect.gen(function* () { - // All operations return Effect values with typed errors - const response = yield* ddb.getItem({ - TableName: "my-table", - Key: { pk: { S: "user#123" } } - }).pipe( - // Handle specific AWS errors - Effect.catchTag("ResourceNotFoundException", () => - Effect.succeed({ Item: undefined }) - ), - // Built-in retry with exponential backoff - Effect.retry({ - times: 3, - schedule: Schedule.exponential("1 second"), - while: (error) => error._tag === "ThrottlingException" - }), - Effect.timeout("30 seconds") - ); - - yield* Console.log("Item:", response.Item); -}); - -// Execute the program -Effect.runPromise(program); -``` - -## Exact Error Modeling - -Each operation's `Effect.Effect` type specifies exactly which errors can occur. This robust error handling allows you to handle errors exactly as you choose. - -```ts -putItem( - input: PutItemInput, -): Effect.Effect< - PutItemOutput, - | ConditionalCheckFailedException - | InternalServerError - | InvalidEndpointException - | ItemCollectionSizeLimitExceededException - | ProvisionedThroughputExceededException - | ReplicatedWriteConflictException - | RequestLimitExceeded - | ResourceNotFoundException - | TransactionConflictException - | CommonAwsError ->; -``` - -## Authentication - -`itty-aws` provides flexible authentication options. You can pass credentials directly to the client or use the AWS credential provider chain via Effect's dependency injection. - -### Option 1: Direct Credentials - -Pass credentials directly in the client configuration: - -```ts -import { DynamoDB } from "itty-aws/dynamodb"; - -const ddb = new DynamoDB({ - region: "us-east-1", - credentials: { - accessKeyId: "YOUR_ACCESS_KEY_ID", - secretAccessKey: "YOUR_SECRET_ACCESS_KEY", - sessionToken: "YOUR_SESSION_TOKEN" // optional - } -}); -``` - -### Option 2: AWS Credential Provider Chain (Recommended) - -For production applications, use the AWS credential provider chain that automatically resolves credentials from environment variables, IAM roles, SSO, credential files, etc.: - -```ts -import { DynamoDB } from "itty-aws/dynamodb"; -import { DefaultCredentials } from "itty-aws/credential.service"; -import { Credentials } from "itty-aws/credentials"; -import { Effect } from "effect"; - -const ddb = new DynamoDB({ region: "us-east-1" }); - -const program = Effect.gen(function* () { - const response = yield* ddb.getItem({ - TableName: "my-table", - Key: { pk: { S: "user#123" } } - }); - - return response.Item; -}).pipe( - Effect.provideService(Credentials, DefaultCredentials) -); - -Effect.runPromise(program); +bun install ``` -The `DefaultCredentials` provider uses the AWS SDK v3 credential-providers module, calling `fromNodeProviderChain()`. See the [documentation](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromnodeproviderchain). - -### Option 3: Custom Credential Provider - -You can also create custom credential providers: - -```ts -import { Credentials } from "itty-aws/credentials"; -import { Effect } from "effect"; +To run: -const customCredentials: Credentials = { - getCredentials: async () => ({ - accessKeyId: await getAccessKeyFromVault(), - secretAccessKey: await getSecretFromVault(), - sessionToken: await getSessionTokenFromVault() - }) -}; - -const program = Effect.gen(function* () { - // Your operations here -}).pipe( - Effect.provideService(Credentials, customCredentials) -); +```bash +bun run index.ts ``` -## How itty-aws Works - -We use the official AWS API models from the [`aws/api-models-aws`](https://github.com/aws/api-models-aws) repository as a git submodule to bring in the latest published Smithy models from AWS. - -Those models used to generate TypeScript types (types only, no runtime code) for each service in [src/services](src/services). - -The [src/client.ts](src/client.ts) contains the proxy that is used to dynamically construct: -1. the Client for a service. -2. TaggedError types for each error code. - -The service's client is a proxy that intercepts method calls to determine the API name and then submits the request to AWS. `aws4fetch` is used to sign the request. - -Service endpoints, AWS service names (used for signing), SerDe for the 6 procotols AWS uses across it's services, and other internal details are all extracted from the Smithy models to make a simplified user experience when interacting with any of the 400+ AWS services. - -All service errors are modeled with Effect's TaggedErrors, purely as `declare class` to avoid the code size cost of a physical class. The proxy constructs the correct `TaggedError` type on the fly from the AWS service response. - - -# Bundle Size Comparison (per service) - -- Target: Node 18, ESM -- Minification: on; tree-shaking; NODE_ENV=production -- Services tested: 408 -- aws-sdk-v3 failures: 6 - -| Service | itty-aws
(KB) | vs
aws-sdk-v3 | itty-aws
(no Effect, KB) | vs
aws-sdk-v3 | aws-sdk-v3
(KB) | -|---------|--------------:|--------:|--------------------------:|--------:|----------------:| -| AccessAnalyzer | 46 | β–Ό -32% | 5 | β–Ό -93% | 68 | -| Account | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ACM | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| ACMPCA | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| AIOps | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| amp | 46 | β–² +194% | 5 | β–Ό -69% | 16 | -| Amplify | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| AmplifyBackend | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| AmplifyUIBuilder | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| APIGateway | 47 | β–Ό -30% | 6 | β–Ό -91% | 67 | -| ApiGatewayManagementApi | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ApiGatewayV2 | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| AppMesh | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| AppConfig | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| AppConfigData | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| AppFabric | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Appflow | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| AppIntegrations | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| ApplicationAutoScaling | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| ApplicationDiscoveryService | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| ApplicationInsights | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| ApplicationSignals | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ApplicationCostProfiler | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| AppRunner | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| AppStream | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| AppSync | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| AppTest | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ARCZonalShift | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| Artifact | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Athena | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| AuditManager | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| AutoScaling | 61 | β–Ό -8% | 20 | β–Ό -69% | 67 | -| AutoScalingPlans | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| b2bi | 45 | β–² +202% | 4 | β–Ό -71% | 15 | -| Backup | 47 | β–Ό -30% | 6 | β–Ό -91% | 67 | -| BackupGateway | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| BackupSearch | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Batch | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| BCMDataExports | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| BCMPricingCalculator | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Bedrock | 46 | β–Ό -33% | 5 | β–Ό -92% | 69 | -| BedrockAgent | 46 | β–Ό -33% | 5 | β–Ό -92% | 69 | -| BedrockAgentRuntime | 46 | β–Ό -39% | 5 | β–Ό -93% | 75 | -| BedrockAgentCore | 46 | β–Ό -38% | 5 | β–Ό -93% | 74 | -| BedrockAgentCoreControl | 46 | β–Ό -32% | 5 | β–Ό -93% | 68 | -| BedrockDataAutomation | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| BedrockDataAutomationRuntime | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| BedrockRuntime | 46 | β–Ό -43% | 5 | β–Ό -94% | 81 | -| Billing | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| billingconductor | 46 | β–² +194% | 5 | β–Ό -68% | 16 | -| Braket | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| chatbot | 46 | β–² +183% | 5 | β–Ό -70% | 16 | -| Chime | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| ChimeSDKIdentity | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| ChimeSDKMediaPipelines | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ChimeSDKMeetings | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ChimeSDKMessaging | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| ChimeSDKVoice | 47 | β–Ό -30% | 6 | β–Ό -91% | 67 | -| CleanRooms | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| CleanRoomsML | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| Cloud9 | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| CloudControl | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| CloudDirectory | 46 | β–Ό -32% | 5 | β–Ό -92% | 68 | -| CloudFormation | 64 | β–Ό -7% | 23 | β–Ό -66% | 69 | -| CloudFront | 46 | β–Ό -38% | 5 | β–Ό -93% | 73 | -| CloudFrontKeyValueStore | 46 | β–Ό -35% | 5 | β–Ό -93% | 70 | -| CloudHSM | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| CloudHSMV2 | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| CloudSearch | 55 | β–Ό -18% | 14 | β–Ό -79% | 67 | -| CloudSearchDomain | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| CloudTrail | 45 | β–Ό -35% | 4 | β–Ό -94% | 69 | -| CloudTrailData | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| CloudWatch | 58 | β–Ό -17% | 17 | β–Ό -76% | 69 | -| CloudWatchEvents | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| CloudWatchLogs | 45 | β–Ό -39% | 4 | β–Ό -94% | 74 | -| codeartifact | 46 | β–² +187% | 5 | β–Ό -68% | 16 | -| CodeBuild | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| CodeCatalyst | 46 | β–² +2% | 5 | β–Ό -89% | 45 | -| CodeCommit | 45 | β–Ό -38% | 4 | β–Ό -94% | 73 | -| CodeConnections | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| CodeDeploy | 45 | β–Ό -36% | 4 | β–Ό -94% | 70 | -| CodeGuruReviewer | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| CodeGuruSecurity | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| CodeGuruProfiler | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| CodePipeline | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| codestarnotifications | 46 | β–² +194% | 5 | β–Ό -70% | 16 | -| CognitoIdentity | 45 | β–Ό -30% | 4 | β–Ό -93% | 65 | -| CognitoIdentityProvider | 45 | β–Ό -35% | 4 | β–Ό -94% | 70 | -| CognitoSync | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| Comprehend | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| ComprehendMedical | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| ComputeOptimizer | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| ConfigService | 45 | β–Ό -34% | 4 | β–Ό -94% | 69 | -| Connect | 49 | β–Ό -28% | 8 | β–Ό -88% | 68 | -| ConnectContactLens | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ConnectCampaigns | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| ConnectCampaignsV2 | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ConnectCases | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ConnectParticipant | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ControlCatalog | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ControlTower | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| CostExplorer | 45 | β–Ό -34% | 4 | β–Ό -94% | 68 | -| CostOptimizationHub | 45 | β–Ό -34% | 4 | β–Ό -94% | 68 | -| CustomerProfiles | 46 | β–Ό -31% | 6 | β–Ό -92% | 67 | -| DataPipeline | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| DatabaseMigrationService | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| DataBrew | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| DataExchange | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| DataSync | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| DataZone | 47 | β–Ό -31% | 6 | β–Ό -91% | 68 | -| DAX | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| deadline | 47 | β–² +192% | 6 | β–Ό -64% | 16 | -| Detective | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| DeviceFarm | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| DevOpsGuru | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| DirectConnect | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| DirectoryService | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| DirectoryServiceData | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| DLM | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| DocDB | 58 | β–Ό -17% | 17 | β–Ό -75% | 70 | -| DocDBElastic | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| drs | 46 | β–² +195% | 5 | β–Ό -68% | 16 | -| DSQL | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| DynamoDB | 45 | β–Ό -39% | 4 | β–Ό -94% | 74 | -| DynamoDBStreams | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| EBS | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| EC2 | 137 | β–² +106% | 96 | β–² +45% | 67 | -| EC2InstanceConnect | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| ECR | 45 | β–Ό -34% | 4 | β–Ό -94% | 68 | -| ECRPUBLIC | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| ECS | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| EFS | 46 | β–Ό -34% | 5 | β–Ό -93% | 69 | -| EKS | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| EKSAuth | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ElasticBeanstalk | 59 | β–Ό -13% | 18 | β–Ό -73% | 67 | -| ElasticLoadBalancing | 56 | β–Ό -18% | 15 | β–Ό -78% | 68 | -| ElasticTranscoder | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ElastiCache | 61 | β–Ό -14% | 20 | β–Ό -71% | 71 | -| ElasticsearchService | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| EMR | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| EMRServerless | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| EntityResolution | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| EventBridge | 45 | β–Ό -35% | 4 | β–Ό -94% | 70 | -| Evidently | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| evs | 45 | β–² +221% | 4 | β–Ό -70% | 14 | -| finspace | 46 | β–² +175% | 5 | β–Ό -70% | 17 | -| finspacedata | 46 | β–² +194% | 5 | β–Ό -69% | 16 | -| Firehose | 45 | β–Ό -34% | 4 | β–Ό -94% | 68 | -| fis | 46 | β–² +189% | 5 | β–Ό -70% | 16 | -| FMS | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| forecast | 45 | β–² +221% | 4 | β–Ό -70% | 14 | -| forecastquery | 45 | β–² +212% | 4 | β–Ό -70% | 15 | -| FraudDetector | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| FreeTier | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| FSx | 45 | β–Ό -34% | 4 | β–Ό -94% | 69 | -| GameLift | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| GameLiftStreams | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| GeoMaps | 46 | β–Ό -33% | 5 | β–Ό -93% | 68 | -| GeoPlaces | 46 | β–Ό -35% | 5 | β–Ό -93% | 70 | -| GeoRoutes | 46 | β–Ό -38% | 5 | β–Ό -94% | 73 | -| Glacier | 46 | β–Ό -33% | 5 | β–Ό -92% | 69 | -| GlobalAccelerator | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| Glue | 45 | β–Ό -34% | 4 | β–Ό -94% | 68 | -| grafana | 46 | β–² +193% | 5 | β–Ό -69% | 16 | -| Greengrass | 46 | β–Ό -31% | 6 | β–Ό -92% | 67 | -| GreengrassV2 | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| GroundStation | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| GuardDuty | 46 | β–Ό -30% | 5 | β–Ό -92% | 66 | -| Health | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| HealthLake | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| IAM | 62 | β–Ό -10% | 22 | β–Ό -69% | 69 | -| identitystore | 45 | β–² +208% | 4 | β–Ό -71% | 15 | -| imagebuilder | 46 | β–² +192% | 5 | β–Ό -67% | 16 | -| Inspector | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| InspectorScan | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| Inspector2 | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| InternetMonitor | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| Invoicing | 45 | β–Ό -31% | 4 | β–Ό -94% | 66 | -| IoT | 48 | β–Ό -29% | 8 | β–Ό -89% | 68 | -| IoTDataPlane | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| IoTEvents | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| IoTEventsData | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| IoTJobsDataPlane | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| IoTManagedIntegrations | 46 | β–Ό -30% | 5 | β–Ό -92% | 66 | -| IoTWireless | 47 | β–Ό -30% | 6 | β–Ό -91% | 66 | -| IoTAnalytics | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| IotDeviceAdvisor | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| IoTFleetHub | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| IoTFleetWise | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| IoTSecureTunneling | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| IoTSiteWise | 47 | β–Ό -37% | 6 | β–Ό -92% | 74 | -| IoTThingsGraph | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| IoTTwinMaker | 46 | β–Ό -32% | 5 | β–Ό -93% | 68 | -| ivs | 46 | β–² +200% | 5 | β–Ό -68% | 15 | -| IVSRealTime | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ivschat | 46 | β–² +175% | 5 | β–Ό -72% | 17 | -| Kafka | 46 | β–Ό -32% | 5 | β–Ό -92% | 67 | -| KafkaConnect | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| kendra | 45 | β–² +216% | 4 | β–Ό -70% | 14 | -| KendraRanking | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Keyspaces | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| KeyspacesStreams | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| Kinesis | 45 | β–Ό -40% | 4 | β–Ό -94% | 76 | -| KinesisAnalytics | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| KinesisAnalyticsV2 | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| KinesisVideo | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| KinesisVideoArchivedMedia | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| KinesisVideoMedia | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| KinesisVideoSignaling | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| KinesisVideoWebRTCStorage | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| KMS | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| LakeFormation | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| Lambda | 46 | β–Ό -38% | 5 | β–Ό -93% | 75 | -| LaunchWizard | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| LexModelBuildingService | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| LexModelsV2 | 47 | β–Ό -30% | 6 | β–Ό -91% | 66 | -| LexRuntimeService | 46 | β–Ό -33% | 5 | β–Ό -93% | 68 | -| LexRuntimeV2 | 46 | β–Ό -40% | 5 | β–Ό -94% | 77 | -| LicenseManager | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| LicenseManagerLinuxSubscriptions | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| LicenseManagerUserSubscriptions | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Lightsail | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Location | 46 | β–Ό -30% | 5 | β–Ό -92% | 67 | -| LookoutEquipment | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| LookoutMetrics | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| LookoutVision | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| m2 | 46 | β–² +187% | 5 | β–Ό -69% | 16 | -| MachineLearning | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| Macie2 | 46 | β–Ό -30% | 5 | β–Ό -92% | 67 | -| MailManager | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| ManagedBlockchain | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| ManagedBlockchainQuery | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MarketplaceAgreement | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| MarketplaceCatalog | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MarketplaceCommerceAnalytics | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| MarketplaceDeployment | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| MarketplaceEntitlementService | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| MarketplaceMetering | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| MarketplaceReporting | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| MediaConnect | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| MediaConvert | 46 | β–Ό -46% | 5 | β–Ό -94% | 84 | -| MediaLive | 47 | β–Ό -30% | 6 | β–Ό -91% | 67 | -| MediaPackage | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MediaPackageVod | 46 | β–Ό -33% | 5 | β–Ό -93% | 68 | -| MediaPackageV2 | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| MediaStore | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| MediaStoreData | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MediaTailor | 46 | β–Ό -31% | 5 | β–Ό -92% | 66 | -| MedicalImaging | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MemoryDB | 45 | β–Ό -34% | 4 | β–Ό -94% | 69 | -| mgn | 46 | β–² +194% | 5 | β–Ό -67% | 16 | -| MigrationHub | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| MigrationHubRefactorSpaces | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MigrationHubConfig | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| MigrationHubOrchestrator | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| MigrationHubStrategy | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| MPA | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| mq | 46 | β–² +167% | 5 | β–Ό -72% | 17 | -| MTurk | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| MWAA | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Neptune | 60 | β–Ό -15% | 19 | β–Ό -73% | 70 | -| NeptuneGraph | 46 | β–Ό -32% | 5 | β–Ό -93% | 68 | -| neptunedata | 46 | β–² +184% | 5 | β–Ό -69% | 16 | -| NetworkFirewall | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| NetworkFlowMonitor | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| NetworkManager | 47 | β–Ό -32% | 6 | β–Ό -92% | 68 | -| NetworkMonitor | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| Notifications | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| NotificationsContacts | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| OAM | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ObservabilityAdmin | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| odb | 45 | β–² +219% | 4 | β–Ό -70% | 14 | -| Omics | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| OpenSearch | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| OpenSearchServerless | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| OpsWorks | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| OpsWorksCM | 45 | β–Ό -34% | 4 | β–Ό -94% | 69 | -| Organizations | 45 | β–Ό -35% | 4 | β–Ό -94% | 69 | -| OSIS | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Outposts | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| Panorama | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| PartnerCentralSelling | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| PaymentCryptography | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| PaymentCryptographyData | 46 | β–Ό -33% | 5 | β–Ό -93% | 68 | -| PcaConnectorAd | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| PcaConnectorScep | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| PCS | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Personalize | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| PersonalizeEvents | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| PersonalizeRuntime | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| PI | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Pinpoint | 47 | β–Ό -31% | 6 | β–Ό -91% | 68 | -| PinpointEmail | 46 | β–Ό -31% | 5 | β–Ό -92% | 66 | -| PinpointSMSVoice | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| PinpointSMSVoiceV2 | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Pipes | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Polly | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Pricing | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| PrivateNetworks | 46 | β–Ό -35% | 5 | β–Ό -93% | 70 | -| Proton | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| QApps | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| QBusiness | 46 | β–Ό -39% | 6 | β–Ό -93% | 77 | -| QConnect | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| QLDB | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| QLDBSession | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| QuickSight | 48 | β–Ό -29% | 7 | β–Ό -89% | 68 | -| RAM | 46 | β–Ό -32% | 5 | β–Ό -93% | 68 | -| rbin | 46 | β–² +195% | 5 | β–Ό -70% | 15 | -| RDS | 71 | β–Ό -2% | 30 | β–Ό -58% | 73 | -| RDSData | 45 | β–Ό -33% | 5 | β–Ό -93% | 68 | -| Redshift | 66 | β–Ό -10% | 25 | β–Ό -66% | 73 | -| RedshiftData | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| RedshiftServerless | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| Rekognition | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| repostspace | 46 | β–² +194% | 5 | β–Ό -70% | 16 | -| resiliencehub | 46 | β–² +202% | 5 | β–Ό -65% | 15 | -| ResourceExplorer2 | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ResourceGroups | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ResourceGroupsTaggingAPI | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| RoboMaker | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| RolesAnywhere | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| Route53 | 45 | β–Ό -37% | 4 | β–Ό -94% | 71 | -| Route53Domains | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| Route53RecoveryCluster | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Route53RecoveryControlConfig | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Route53RecoveryReadiness | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| Route53Profiles | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Route53Resolver | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| RUM | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| S3 | 46 | β–Ό -49% | 5 | β–Ό -94% | 90 | -| S3Control | 45 | β–Ό -39% | 4 | β–Ό -95% | 73 | -| S3Outposts | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| S3Tables | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| S3Vectors | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SageMaker | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| SageMakerA2IRuntime | 46 | β–Ό -32% | 5 | β–Ό -93% | 66 | -| SagemakerEdge | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SageMakerFeatureStoreRuntime | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SageMakerGeospatial | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| SageMakerMetrics | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SageMakerRuntime | 46 | β–Ό -39% | 5 | β–Ό -94% | 74 | -| savingsplans | 46 | β–² +198% | 5 | β–Ό -70% | 15 | -| Scheduler | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| schemas | 46 | β–² +179% | 5 | β–Ό -70% | 16 | -| SecretsManager | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| SecurityIR | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SecurityHub | 47 | β–Ό -30% | 6 | β–Ό -92% | 67 | -| SecurityLake | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| ServerlessApplicationRepository | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| ServiceCatalog | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| ServiceCatalogAppRegistry | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| ServiceQuotas | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| ServiceDiscovery | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| SES | 58 | β–Ό -16% | 17 | β–Ό -75% | 69 | -| SESv2 | 47 | β–Ό -33% | 6 | β–Ό -92% | 70 | -| SFN | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| Shield | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| signer | 46 | β–² +191% | 5 | β–Ό -70% | 16 | -| SimSpaceWeaver | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SMS | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| SnowDeviceManagement | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| Snowball | 45 | β–Ό -32% | 4 | β–Ό -93% | 66 | -| SNS | 56 | β–Ό -19% | 15 | β–Ό -79% | 68 | -| SocialMessaging | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SQS | 45 | β–Ό -34% | 4 | β–Ό -94% | 69 | -| SSM | 45 | β–Ό -37% | 4 | β–Ό -94% | 71 | -| SSMContacts | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| SSMGuiConnect | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SSMIncidents | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| SSMQuickSetup | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SsmSap | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SSO | 45 | β–² +32% | 5 | β–Ό -87% | 34 | -| SSOAdmin | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| SSOOIDC | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| StorageGateway | 45 | β–Ό -31% | 4 | β–Ό -93% | 66 | -| STS | 54 | β–Ό -22% | 13 | β–Ό -81% | 69 | -| SupplyChain | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| Support | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| SupportApp | 46 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| SWF | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| synthetics | 46 | β–² +185% | 5 | β–Ό -70% | 16 | -| TaxSettings | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| Textract | 45 | β–Ό -33% | 4 | β–Ό -94% | 68 | -| TimestreamInfluxDB | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| TimestreamQuery | 45 | β–Ό -36% | 4 | β–Ό -94% | 71 | -| TimestreamWrite | 45 | β–Ό -36% | 4 | β–Ό -94% | 71 | -| tnb | 46 | β–² +203% | 5 | β–Ό -67% | 15 | -| Transcribe | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| TranscribeStreaming | 46 | β–Ό -42% | 5 | β–Ό -94% | 79 | -| Transfer | 45 | β–Ό -32% | 4 | β–Ό -94% | 66 | -| Translate | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| TrustedAdvisor | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| VerifiedPermissions | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| VoiceID | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| VPCLattice | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| WAF | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| WAFRegional | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| WAFV2 | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| WellArchitected | 46 | β–Ό -30% | 5 | β–Ό -92% | 66 | -| Wisdom | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | -| WorkDocs | 46 | β–Ό -32% | 5 | β–Ό -93% | 68 | -| WorkMail | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| WorkMailMessageFlow | 45 | β–Ό -31% | 5 | β–Ό -93% | 66 | -| WorkSpaces | 45 | β–Ό -33% | 4 | β–Ό -94% | 67 | -| WorkspacesInstances | 45 | β–Ό -32% | 4 | β–Ό -94% | 67 | -| WorkSpacesThinClient | 46 | β–Ό -32% | 5 | β–Ό -93% | 67 | -| WorkSpacesWeb | 46 | β–Ό -31% | 5 | β–Ό -92% | 67 | -| XRay | 46 | β–Ό -31% | 5 | β–Ό -93% | 67 | \ No newline at end of file +This project was created using `bun init` in bun v1.3.0. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. diff --git a/aws-models b/aws-models deleted file mode 160000 index f622f1d5..00000000 --- a/aws-models +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f622f1d5f018e4617cdc14766c3113b6a960703a diff --git a/awsquery-services.json b/awsquery-services.json deleted file mode 100644 index f701e507..00000000 --- a/awsquery-services.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "serviceId": "Auto Scaling", - "serviceName": "Auto Scaling", - "version": "2011-01-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/auto-scaling/service/2011-01-01/auto-scaling-2011-01-01.json", - "endpointPrefix": "autoscaling" - }, - { - "serviceId": "CloudFormation", - "serviceName": "CloudFormation", - "version": "2010-05-15", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/cloudformation/service/2010-05-15/cloudformation-2010-05-15.json", - "endpointPrefix": "cloudformation" - }, - { - "serviceId": "CloudSearch", - "serviceName": "CloudSearch", - "version": "2013-01-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/cloudsearch/service/2013-01-01/cloudsearch-2013-01-01.json", - "endpointPrefix": "cloudsearch" - }, - { - "serviceId": "CloudWatch", - "serviceName": "CloudWatch", - "version": "2010-08-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/cloudwatch/service/2010-08-01/cloudwatch-2010-08-01.json", - "endpointPrefix": "monitoring" - }, - { - "serviceId": "DocDB", - "serviceName": "DocDB", - "version": "2014-10-31", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/docdb/service/2014-10-31/docdb-2014-10-31.json", - "endpointPrefix": "rds" - }, - { - "serviceId": "Elastic Beanstalk", - "serviceName": "Elastic Beanstalk", - "version": "2010-12-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/elastic-beanstalk/service/2010-12-01/elastic-beanstalk-2010-12-01.json", - "endpointPrefix": "elasticbeanstalk" - }, - { - "serviceId": "Elastic Load Balancing", - "serviceName": "Elastic Load Balancing", - "version": "2012-06-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/elastic-load-balancing/service/2012-06-01/elastic-load-balancing-2012-06-01.json", - "endpointPrefix": "elasticloadbalancing" - }, - { - "serviceId": "Elastic Load Balancing v2", - "serviceName": "Elastic Load Balancing v2", - "version": "2015-12-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/elastic-load-balancing-v2/service/2015-12-01/elastic-load-balancing-v2-2015-12-01.json", - "endpointPrefix": "elasticloadbalancing" - }, - { - "serviceId": "ElastiCache", - "serviceName": "ElastiCache", - "version": "2015-02-02", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/elasticache/service/2015-02-02/elasticache-2015-02-02.json", - "endpointPrefix": "elasticache" - }, - { - "serviceId": "IAM", - "serviceName": "IAM", - "version": "2010-05-08", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/iam/service/2010-05-08/iam-2010-05-08.json", - "endpointPrefix": "iam" - }, - { - "serviceId": "Neptune", - "serviceName": "Neptune", - "version": "2014-10-31", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/neptune/service/2014-10-31/neptune-2014-10-31.json", - "endpointPrefix": "rds" - }, - { - "serviceId": "RDS", - "serviceName": "RDS", - "version": "2014-10-31", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/rds/service/2014-10-31/rds-2014-10-31.json", - "endpointPrefix": "rds" - }, - { - "serviceId": "Redshift", - "serviceName": "Redshift", - "version": "2012-12-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/redshift/service/2012-12-01/redshift-2012-12-01.json", - "endpointPrefix": "redshift" - }, - { - "serviceId": "SES", - "serviceName": "SES", - "version": "2010-12-01", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/ses/service/2010-12-01/ses-2010-12-01.json", - "endpointPrefix": "email" - }, - { - "serviceId": "SNS", - "serviceName": "SNS", - "version": "2010-03-31", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/sns/service/2010-03-31/sns-2010-03-31.json", - "endpointPrefix": "sns" - }, - { - "serviceId": "STS", - "serviceName": "STS", - "version": "2011-06-15", - "modelPath": "/Users/kirk/projects/my-itty/aws-models/models/sts/service/2011-06-15/sts-2011-06-15.json", - "endpointPrefix": "sts" - } -] \ No newline at end of file diff --git a/biome.json b/biome.json deleted file mode 100644 index 2d22bb3e..00000000 --- a/biome.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", - "vcs": { - "enabled": true, - "clientKind": "git", - "useIgnoreFile": true - }, - "files": { - "includes": [ - "./smoke/**/*.ts", - "./smoke/**/*.json", - "./src/**/*.ts", - "./test/**/*.ts", - "./scripts/**/*.ts", - "!node_modules" - ], - "maxSize": 10000000 - }, - "assist": { - "actions": { - "source": { - "organizeImports": "off" - } - } - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "correctness": { - "useYield": "off", - "useImportExtensions": { - "level": "error", - "options": { - "forceJsExtensions": false - } - }, - "noUnsafeFinally": "off", - "noChildrenProp": "off" - }, - "a11y": { - "useButtonType": "off", - "useHtmlLang": "off" - }, - "performance": { - "noAccumulatingSpread": "off" - }, - "complexity": { - "noBannedTypes": "off" - }, - "suspicious": { - "noConsole": "error", - "noExplicitAny": "off", - "noImplicitAnyLet": "off", - "noAssignInExpressions": "off", - "noShadowRestrictedNames": "off", - "noEmptyInterface": "off", - "noRedeclare": "off" - }, - "style": { - "useLiteralEnumMembers": "error", - "useNodejsImportProtocol": "error", - "useAsConstAssertion": "error", - "useEnumInitializers": "error", - "useSelfClosingElements": "error", - "useConst": "off", - "useSingleVarDeclarator": "error", - "noUnusedTemplateLiteral": "error", - "useNumberNamespace": "error", - "noInferrableTypes": "error", - "useExponentiationOperator": "error", - "useTemplate": "error", - "noCommonJs": "error", - "noParameterAssign": "off", - "noNonNullAssertion": "off", - "useDefaultParameterLast": "error", - "useImportType": "error", - "useExportType": "error", - "noUselessElse": "off", - "useShorthandFunctionType": "error" - } - } - }, - "formatter": { - "enabled": true, - "formatWithErrors": false, - "indentStyle": "space", - "indentWidth": 2, - "lineWidth": 80, - "lineEnding": "lf", - "includes": ["**", "!**/node_modules/**", "!**/*.d.ts", "!**/*.mdx"] - }, - "javascript": { - "formatter": { - "indentWidth": 2, - "indentStyle": "space" - } - }, - "json": { - "formatter": { - "indentWidth": 2, - "indentStyle": "space" - } - }, - "overrides": [ - { - "includes": ["scripts/**", "test/**"], - "linter": { - "rules": { - "suspicious": { - "noConsole": "off" - } - } - } - } - ] -} diff --git a/bun.lock b/bun.lock index 870d642a..9df81811 100644 --- a/bun.lock +++ b/bun.lock @@ -2,35 +2,23 @@ "lockfileVersion": 1, "workspaces": { "": { - "name": "itty-aws", + "name": "itty-aws-2", "dependencies": { + "@aws-sdk/credential-providers": "^3.933.0", + "@effect/platform": "^0.93.3", + "@effect/platform-bun": "^0.83.0", "aws4fetch": "^1.0.20", + "effect": "^3.19.4", + "fast-xml-parser": "^5.3.2", }, "devDependencies": { - "@aws-sdk/credential-providers": "^3", - "@biomejs/biome": "^2.1.1", - "@effect/language-service": "^0.36.0", - "@effect/platform": "^0.87.12", - "@effect/platform-node": "^0.89.5", - "@effect/vitest": "^0.23.12", - "@types/adm-zip": "^0.5.7", - "@types/bun": "^1.2.18", - "@types/node": "^20", - "adm-zip": "^0.5.16", - "bun-types": "^1.2.18", - "changelogithub": "^13.16.0", - "effect": "^3.16.12", - "esbuild": "^0.25.9", - "pathe": "^2.0.3", - "ts-patch": "^3.3.0", - "typescript": "^5.9.2", - "vitest": "3", + "@rsbuild/core": "^1.6.7", + "@types/bun": "latest", + "@types/node": "^24.10.1", + "dedent": "^1.7.0", }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3", - "@effect/platform": "^0.87.12", - "@effect/platform-node": "^0.89.5", - "effect": "^3", + "typescript": "^5", }, }, }, @@ -43,147 +31,91 @@ "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - "@aws-sdk/client-cognito-identity": ["@aws-sdk/client-cognito-identity@3.873.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.873.0", "@aws-sdk/credential-provider-node": "3.873.0", "@aws-sdk/middleware-host-header": "3.873.0", "@aws-sdk/middleware-logger": "3.873.0", "@aws-sdk/middleware-recursion-detection": "3.873.0", "@aws-sdk/middleware-user-agent": "3.873.0", "@aws-sdk/region-config-resolver": "3.873.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.873.0", "@aws-sdk/util-user-agent-browser": "3.873.0", "@aws-sdk/util-user-agent-node": "3.873.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/hash-node": "^4.0.5", "@smithy/invalid-dependency": "^4.0.5", "@smithy/middleware-content-length": "^4.0.5", "@smithy/middleware-endpoint": "^4.1.18", "@smithy/middleware-retry": "^4.1.19", "@smithy/middleware-serde": "^4.0.9", "@smithy/middleware-stack": "^4.0.5", "@smithy/node-config-provider": "^4.1.4", "@smithy/node-http-handler": "^4.1.1", "@smithy/protocol-http": "^5.1.3", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "@smithy/url-parser": "^4.0.5", "@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.26", "@smithy/util-defaults-mode-node": "^4.0.26", "@smithy/util-endpoints": "^3.0.7", "@smithy/util-middleware": "^4.0.5", "@smithy/util-retry": "^4.0.7", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-/nqCaiIT1VFGYM427i6SfvBiohC9qjD3JtGP3/hdg70V6RRN8VXNSQgpeFplBwXTOumbb4KxKZjTws+S+4yrig=="], + "@aws-sdk/client-cognito-identity": ["@aws-sdk/client-cognito-identity@3.933.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/credential-provider-node": "3.933.0", "@aws-sdk/middleware-host-header": "3.930.0", "@aws-sdk/middleware-logger": "3.930.0", "@aws-sdk/middleware-recursion-detection": "3.933.0", "@aws-sdk/middleware-user-agent": "3.932.0", "@aws-sdk/region-config-resolver": "3.930.0", "@aws-sdk/types": "3.930.0", "@aws-sdk/util-endpoints": "3.930.0", "@aws-sdk/util-user-agent-browser": "3.930.0", "@aws-sdk/util-user-agent-node": "3.932.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.2", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/hash-node": "^4.2.5", "@smithy/invalid-dependency": "^4.2.5", "@smithy/middleware-content-length": "^4.2.5", "@smithy/middleware-endpoint": "^4.3.9", "@smithy/middleware-retry": "^4.4.9", "@smithy/middleware-serde": "^4.2.5", "@smithy/middleware-stack": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/node-http-handler": "^4.4.5", "@smithy/protocol-http": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.8", "@smithy/util-defaults-mode-node": "^4.2.11", "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-DoZbb00//40hsqhY4/3xbIryJRiDe8auX9sQHOMWdf9rXqxGfj7ygqlnbFwERhU8pn2UFnhkUsxFLoDkxkL9kA=="], - "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.873.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.873.0", "@aws-sdk/middleware-host-header": "3.873.0", "@aws-sdk/middleware-logger": "3.873.0", "@aws-sdk/middleware-recursion-detection": "3.873.0", "@aws-sdk/middleware-user-agent": "3.873.0", "@aws-sdk/region-config-resolver": "3.873.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.873.0", "@aws-sdk/util-user-agent-browser": "3.873.0", "@aws-sdk/util-user-agent-node": "3.873.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/hash-node": "^4.0.5", "@smithy/invalid-dependency": "^4.0.5", "@smithy/middleware-content-length": "^4.0.5", "@smithy/middleware-endpoint": "^4.1.18", "@smithy/middleware-retry": "^4.1.19", "@smithy/middleware-serde": "^4.0.9", "@smithy/middleware-stack": "^4.0.5", "@smithy/node-config-provider": "^4.1.4", "@smithy/node-http-handler": "^4.1.1", "@smithy/protocol-http": "^5.1.3", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "@smithy/url-parser": "^4.0.5", "@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.26", "@smithy/util-defaults-mode-node": "^4.0.26", "@smithy/util-endpoints": "^3.0.7", "@smithy/util-middleware": "^4.0.5", "@smithy/util-retry": "^4.0.7", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-EmcrOgFODWe7IsLKFTeSXM9TlQ80/BO1MBISlr7w2ydnOaUYIiPGRRJnDpeIgMaNqT4Rr2cRN2RiMrbFO7gDdA=="], + "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.933.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/middleware-host-header": "3.930.0", "@aws-sdk/middleware-logger": "3.930.0", "@aws-sdk/middleware-recursion-detection": "3.933.0", "@aws-sdk/middleware-user-agent": "3.932.0", "@aws-sdk/region-config-resolver": "3.930.0", "@aws-sdk/types": "3.930.0", "@aws-sdk/util-endpoints": "3.930.0", "@aws-sdk/util-user-agent-browser": "3.930.0", "@aws-sdk/util-user-agent-node": "3.932.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.2", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/hash-node": "^4.2.5", "@smithy/invalid-dependency": "^4.2.5", "@smithy/middleware-content-length": "^4.2.5", "@smithy/middleware-endpoint": "^4.3.9", "@smithy/middleware-retry": "^4.4.9", "@smithy/middleware-serde": "^4.2.5", "@smithy/middleware-stack": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/node-http-handler": "^4.4.5", "@smithy/protocol-http": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.8", "@smithy/util-defaults-mode-node": "^4.2.11", "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zwGLSiK48z3PzKpQiDMKP85+fpIrPMF1qQOQW9OW7BGj5AuBZIisT2O4VzIgYJeh+t47MLU7VgBQL7muc+MJDg=="], - "@aws-sdk/core": ["@aws-sdk/core@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@aws-sdk/xml-builder": "3.873.0", "@smithy/core": "^3.8.0", "@smithy/node-config-provider": "^4.1.4", "@smithy/property-provider": "^4.0.5", "@smithy/protocol-http": "^5.1.3", "@smithy/signature-v4": "^5.1.3", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" } }, "sha512-WrROjp8X1VvmnZ4TBzwM7RF+EB3wRaY9kQJLXw+Aes0/3zRjUXvGIlseobGJMqMEGnM0YekD2F87UaVfot1xeQ=="], + "@aws-sdk/core": ["@aws-sdk/core@3.932.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@aws-sdk/xml-builder": "3.930.0", "@smithy/core": "^3.18.2", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/signature-v4": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-AS8gypYQCbNojwgjvZGkJocC2CoEICDx9ZJ15ILsv+MlcCVLtUJSRSx3VzJOUY2EEIaGLRrPNlIqyn/9/fySvA=="], - "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.873.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-/FABOYGD5yU8+L1qjvsvEhwkzzvA9zincme7019oOhEoaGu4hsul3eEFTGBcY5je36ckIXoGD4QQepWi9Ysy4g=="], + "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.933.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-7rSYkIDB2fMfe/BTVI/HHZMFuyjIhgA9H/lhjYCkJFBWCtrc4D73smdn6LZUT811VE1QnvO6gjGfRju7TIn7og=="], - "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-FWj1yUs45VjCADv80JlGshAttUHBL2xtTAbJcAxkkJZzLRKVkdyrepFWhv/95MvDyzfbT6PgJiWMdW65l/8ooA=="], + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.932.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-ozge/c7NdHUDyHqro6+P5oHt8wfKSUBN+olttiVfBe9Mw3wBMpPa3gQ0pZnG+gwBkKskBuip2bMR16tqYvUSEA=="], - "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/node-http-handler": "^4.1.1", "@smithy/property-provider": "^4.0.5", "@smithy/protocol-http": "^5.1.3", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "@smithy/util-stream": "^4.2.4", "tslib": "^2.6.2" } }, "sha512-0sIokBlXIsndjZFUfr3Xui8W6kPC4DAeBGAXxGi9qbFZ9PWJjn1vt2COLikKH3q2snchk+AsznREZG8NW6ezSg=="], + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.932.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/types": "3.930.0", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/node-http-handler": "^4.4.5", "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" } }, "sha512-b6N9Nnlg8JInQwzBkUq5spNaXssM3h3zLxGzpPrnw0nHSIWPJPTbZzA5Ca285fcDUFuKP+qf3qkuqlAjGOdWhg=="], - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/credential-provider-env": "3.873.0", "@aws-sdk/credential-provider-http": "3.873.0", "@aws-sdk/credential-provider-process": "3.873.0", "@aws-sdk/credential-provider-sso": "3.873.0", "@aws-sdk/credential-provider-web-identity": "3.873.0", "@aws-sdk/nested-clients": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-bQdGqh47Sk0+2S3C+N46aNQsZFzcHs7ndxYLARH/avYXf02Nl68p194eYFaAHJSQ1re5IbExU1+pbums7FJ9fA=="], + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.933.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/credential-provider-env": "3.932.0", "@aws-sdk/credential-provider-http": "3.932.0", "@aws-sdk/credential-provider-process": "3.932.0", "@aws-sdk/credential-provider-sso": "3.933.0", "@aws-sdk/credential-provider-web-identity": "3.933.0", "@aws-sdk/nested-clients": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-HygGyKuMG5AaGXsmM0d81miWDon55xwalRHB3UmDg3QBhtunbNIoIaWUbNTKuBZXcIN6emeeEZw/YgSMqLc0YA=="], - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.873.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.873.0", "@aws-sdk/credential-provider-http": "3.873.0", "@aws-sdk/credential-provider-ini": "3.873.0", "@aws-sdk/credential-provider-process": "3.873.0", "@aws-sdk/credential-provider-sso": "3.873.0", "@aws-sdk/credential-provider-web-identity": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-+v/xBEB02k2ExnSDL8+1gD6UizY4Q/HaIJkNSkitFynRiiTQpVOSkCkA0iWxzksMeN8k1IHTE5gzeWpkEjNwbA=="], + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.933.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.932.0", "@aws-sdk/credential-provider-http": "3.932.0", "@aws-sdk/credential-provider-ini": "3.933.0", "@aws-sdk/credential-provider-process": "3.932.0", "@aws-sdk/credential-provider-sso": "3.933.0", "@aws-sdk/credential-provider-web-identity": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-L2dE0Y7iMLammQewPKNeEh1z/fdJyYEU+/QsLBD9VEh+SXcN/FIyTi21Isw8wPZN6lMB9PDVtISzBnF8HuSFrw=="], - "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-ycFv9WN+UJF7bK/ElBq1ugWA4NMbYS//1K55bPQZb2XUpAM2TWFlEjG7DIyOhLNTdl6+CbHlCdhlKQuDGgmm0A=="], + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.932.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-BodZYKvT4p/Dkm28Ql/FhDdS1+p51bcZeMMu2TRtU8PoMDHnVDhHz27zASEKSZwmhvquxHrZHB0IGuVqjZUtSQ=="], - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.873.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.873.0", "@aws-sdk/core": "3.873.0", "@aws-sdk/token-providers": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-SudkAOZmjEEYgUrqlUUjvrtbWJeI54/0Xo87KRxm4kfBtMqSx0TxbplNUAk8Gkg4XQNY0o7jpG8tK7r2Wc2+uw=="], + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.933.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.933.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/token-providers": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-/R1DBR7xNcuZIhS2RirU+P2o8E8/fOk+iLAhbqeSTq+g09fP/F6W7ouFpS5eVE2NIfWG7YBFoVddOhvuqpn51g=="], - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/nested-clients": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-Gw2H21+VkA6AgwKkBtTtlGZ45qgyRZPSKWs0kUwXVlmGOiPz61t/lBX0vG6I06ZIz2wqeTJ5OA1pWZLqw1j0JQ=="], + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.933.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/nested-clients": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-c7Eccw2lhFx2/+qJn3g+uIDWRuWi2A6Sz3PVvckFUEzPsP0dPUo19hlvtarwP5GzrsXn0yEPRVhpewsIaSCGaQ=="], - "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.873.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.873.0", "@aws-sdk/core": "3.873.0", "@aws-sdk/credential-provider-cognito-identity": "3.873.0", "@aws-sdk/credential-provider-env": "3.873.0", "@aws-sdk/credential-provider-http": "3.873.0", "@aws-sdk/credential-provider-ini": "3.873.0", "@aws-sdk/credential-provider-node": "3.873.0", "@aws-sdk/credential-provider-process": "3.873.0", "@aws-sdk/credential-provider-sso": "3.873.0", "@aws-sdk/credential-provider-web-identity": "3.873.0", "@aws-sdk/nested-clients": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/node-config-provider": "^4.1.4", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-kr44YgYDcNsKqy9Ko2SuNn424TSFHjq22MnhR3jrqaHri2DembF/5FLi42WK83h/SdQp5fU8CxZ8XVE3QgrU2Q=="], + "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.933.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.933.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/credential-provider-cognito-identity": "3.933.0", "@aws-sdk/credential-provider-env": "3.932.0", "@aws-sdk/credential-provider-http": "3.932.0", "@aws-sdk/credential-provider-ini": "3.933.0", "@aws-sdk/credential-provider-node": "3.933.0", "@aws-sdk/credential-provider-process": "3.932.0", "@aws-sdk/credential-provider-sso": "3.933.0", "@aws-sdk/credential-provider-web-identity": "3.933.0", "@aws-sdk/nested-clients": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.2", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-sDOejl6e68zKbOZC/5f3MFF2iA3KooBqJsmJTwPp/rj7Yx/4cSoSlMZ8Iy/YVbZ+CYk+QtNJmayxdeKNMLIccA=="], - "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-KZ/W1uruWtMOs7D5j3KquOxzCnV79KQW9MjJFZM/M0l6KI8J6V3718MXxFHsTjUE4fpdV6SeCNLV1lwGygsjJA=="], + "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.930.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g=="], - "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-QhNZ8X7pW68kFez9QxUSN65Um0Feo18ZmHxszQZNUhKDsXew/EG9NPQE/HgYcekcon35zHxC4xs+FeNuPurP2g=="], + "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.930.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-vh4JBWzMCBW8wREvAwoSqB2geKsZwSHTa0nSt0OMOLp2PdTYIZDi0ZiVMmpfnjcx9XbS6aSluLv9sKx4RrG46A=="], - "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-OtgY8EXOzRdEWR//WfPkA/fXl0+WwE8hq0y9iw2caNyKPtca85dzrrZWnPqyBK/cpImosrpR1iKMYr41XshsCg=="], + "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.933.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@aws/lambda-invoke-store": "^0.2.0", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-qgrMlkVKzTCAdNw2A05DC2sPBo0KRQ7wk+lbYSRJnWVzcrceJhnmhoZVV5PFv7JtchK7sHVcfm9lcpiyd+XaCA=="], - "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.873.0", "@smithy/core": "^3.8.0", "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-gHqAMYpWkPhZLwqB3Yj83JKdL2Vsb64sryo8LN2UdpElpS+0fT4yjqSxKTfp7gkhN6TCIxF24HQgbPk5FMYJWw=="], + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.932.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/types": "3.930.0", "@aws-sdk/util-endpoints": "3.930.0", "@smithy/core": "^3.18.2", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-9BGTbJyA/4PTdwQWE9hAFIJGpsYkyEW20WON3i15aDqo5oRZwZmqaVageOD57YYqG8JDJjvcwKyDdR4cc38dvg=="], - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.873.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.873.0", "@aws-sdk/middleware-host-header": "3.873.0", "@aws-sdk/middleware-logger": "3.873.0", "@aws-sdk/middleware-recursion-detection": "3.873.0", "@aws-sdk/middleware-user-agent": "3.873.0", "@aws-sdk/region-config-resolver": "3.873.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.873.0", "@aws-sdk/util-user-agent-browser": "3.873.0", "@aws-sdk/util-user-agent-node": "3.873.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/hash-node": "^4.0.5", "@smithy/invalid-dependency": "^4.0.5", "@smithy/middleware-content-length": "^4.0.5", "@smithy/middleware-endpoint": "^4.1.18", "@smithy/middleware-retry": "^4.1.19", "@smithy/middleware-serde": "^4.0.9", "@smithy/middleware-stack": "^4.0.5", "@smithy/node-config-provider": "^4.1.4", "@smithy/node-http-handler": "^4.1.1", "@smithy/protocol-http": "^5.1.3", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "@smithy/url-parser": "^4.0.5", "@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.26", "@smithy/util-defaults-mode-node": "^4.0.26", "@smithy/util-endpoints": "^3.0.7", "@smithy/util-middleware": "^4.0.5", "@smithy/util-retry": "^4.0.7", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-yg8JkRHuH/xO65rtmLOWcd9XQhxX1kAonp2CliXT44eA/23OBds6XoheY44eZeHfCTgutDLTYitvy3k9fQY6ZA=="], + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.933.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/middleware-host-header": "3.930.0", "@aws-sdk/middleware-logger": "3.930.0", "@aws-sdk/middleware-recursion-detection": "3.933.0", "@aws-sdk/middleware-user-agent": "3.932.0", "@aws-sdk/region-config-resolver": "3.930.0", "@aws-sdk/types": "3.930.0", "@aws-sdk/util-endpoints": "3.930.0", "@aws-sdk/util-user-agent-browser": "3.930.0", "@aws-sdk/util-user-agent-node": "3.932.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.2", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/hash-node": "^4.2.5", "@smithy/invalid-dependency": "^4.2.5", "@smithy/middleware-content-length": "^4.2.5", "@smithy/middleware-endpoint": "^4.3.9", "@smithy/middleware-retry": "^4.4.9", "@smithy/middleware-serde": "^4.2.5", "@smithy/middleware-stack": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/node-http-handler": "^4.4.5", "@smithy/protocol-http": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.8", "@smithy/util-defaults-mode-node": "^4.2.11", "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-o1GX0+IPlFi/D8ei9y/jj3yucJWNfPnbB5appVBWevAyUdZA5KzQ2nK/hDxiu9olTZlFEFpf1m1Rn3FaGxHqsw=="], - "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.5", "tslib": "^2.6.2" } }, "sha512-q9sPoef+BBG6PJnc4x60vK/bfVwvRWsPgcoQyIra057S/QGjq5VkjvNk6H8xedf6vnKlXNBwq9BaANBXnldUJg=="], + "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.930.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@smithy/config-resolver": "^4.4.3", "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw=="], - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.873.0", "", { "dependencies": { "@aws-sdk/core": "3.873.0", "@aws-sdk/nested-clients": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-BWOCeFeV/Ba8fVhtwUw/0Hz4wMm9fjXnMb4Z2a5he/jFlz5mt1/rr6IQ4MyKgzOaz24YrvqsJW2a0VUKOaYDvg=="], + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.933.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/nested-clients": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-Qzq7zj9yXUgAAJEbbmqRhm0jmUndl8nHG0AbxFEfCfQRVZWL96Qzx0mf8lYwT9hIMrXncLwy31HOthmbXwFRwQ=="], - "@aws-sdk/types": ["@aws-sdk/types@3.862.0", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg=="], + "@aws-sdk/types": ["@aws-sdk/types@3.930.0", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A=="], - "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@smithy/types": "^4.3.2", "@smithy/url-parser": "^4.0.5", "@smithy/util-endpoints": "^3.0.7", "tslib": "^2.6.2" } }, "sha512-YByHrhjxYdjKRf/RQygRK1uh0As1FIi9+jXTcIEX/rBgN8mUByczr2u4QXBzw7ZdbdcOBMOkPnLRjNOWW1MkFg=="], + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.930.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" } }, "sha512-M2oEKBzzNAYr136RRc6uqw3aWlwCxqTP1Lawps9E1d2abRPvl1p1ztQmmXp1Ak4rv8eByIZ+yQyKQ3zPdRG5dw=="], - "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.804.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A=="], + "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.893.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg=="], - "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.873.0", "", { "dependencies": { "@aws-sdk/types": "3.862.0", "@smithy/types": "^4.3.2", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-AcRdbK6o19yehEcywI43blIBhOCSo6UgyWcuOJX5CFF8k39xm1ILCjQlRRjchLAxWrm0lU0Q7XV90RiMMFMZtA=="], + "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.930.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@smithy/types": "^4.9.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-q6lCRm6UAe+e1LguM5E4EqM9brQlDem4XDcQ87NzEvlTW6GzmNCO0w1jS0XgCFXQHjDxjdlNFX+5sRbHijwklg=="], - "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.873.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.873.0", "@aws-sdk/types": "3.862.0", "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-9MivTP+q9Sis71UxuBaIY3h5jxH0vN3/ZWGxO8ADL19S2OIfknrYSAfzE5fpoKROVBu0bS4VifHOFq4PY1zsxw=="], + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.932.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.932.0", "@aws-sdk/types": "3.930.0", "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-/kC6cscHrZL74TrZtgiIL5jJNbVsw9duGGPurmaVgoCbP7NnxyaSWEurbNV3VPNPhNE3bV3g4Ci+odq+AlsYQg=="], - "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.873.0", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-kLO7k7cGJ6KaHiExSJWojZurF7SnGMDHXRuQunFnEoD0n1yB6Lqy/S/zHiQ7oJnBhPr9q0TW9qFkrsZb1Uc54w=="], + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.930.0", "", { "dependencies": { "@smithy/types": "^4.9.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" } }, "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA=="], - "@biomejs/biome": ["@biomejs/biome@2.1.1", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.1.1", "@biomejs/cli-darwin-x64": "2.1.1", "@biomejs/cli-linux-arm64": "2.1.1", "@biomejs/cli-linux-arm64-musl": "2.1.1", "@biomejs/cli-linux-x64": "2.1.1", "@biomejs/cli-linux-x64-musl": "2.1.1", "@biomejs/cli-win32-arm64": "2.1.1", "@biomejs/cli-win32-x64": "2.1.1" }, "bin": { "biome": "bin/biome" } }, "sha512-HFGYkxG714KzG+8tvtXCJ1t1qXQMzgWzfvQaUjxN6UeKv+KvMEuliInnbZLJm6DXFXwqVi6446EGI0sGBLIYng=="], + "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.0", "", {}, "sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2Muinu5ok4tWxq4nu5l19el48cwCY/vzvI7Vjbkf3CYIQkjxZLyj0Ad37Jv2OtlXYaLvv+Sfu1hFeXt/JwRRXQ=="], + "@effect/cluster": ["@effect/cluster@0.52.11", "", { "peerDependencies": { "@effect/platform": "^0.93.3", "@effect/rpc": "^0.72.1", "@effect/sql": "^0.48.0", "@effect/workflow": "^0.12.5", "effect": "^3.19.4" } }, "sha512-iFYuiSrNZVvQIcfWxnwGoIF9rWNXHzN8vqLGnel6sdEycApCgN5o24yO/hoz73rOV6N6jnVz9X1LW3/wgJ/TQg=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.1.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cC8HM5lrgKQXLAK+6Iz2FrYW5A62pAAX6KAnRlEyLb+Q3+Kr6ur/sSuoIacqlp1yvmjHJqjYfZjPvHWnqxoEIA=="], + "@effect/experimental": ["@effect/experimental@0.57.3", "", { "dependencies": { "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.93.3", "effect": "^3.19.4", "ioredis": "^5", "lmdb": "^3" }, "optionalPeers": ["ioredis", "lmdb"] }, "sha512-/45T9dltr+zNCgPNFfSuRw4oCvwn0tz+vI4p/SfpUCuhHp0IElsXTpHInK6YOLFYyYXZNamQrlKiOBQZNoUT0Q=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-tw4BEbhAUkWPe4WBr6IX04DJo+2jz5qpPzpW/SWvqMjb9QuHY8+J0M23V8EPY/zWU4IG8Ui0XESapR1CB49Q7g=="], + "@effect/platform": ["@effect/platform@0.93.3", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.19.4" } }, "sha512-s88zctkeXba24Mjy7MEFMuam1p5sXmsG7uQjPIDE6EiC+2IFUQd8976TtangiU0e8qu0SALpjIH1P1QyC7/1og=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/7FBLnTswu4jgV9ttI3AMIdDGqVEPIZd8I5u2D4tfCoj8rl9dnjrEQbAIDlWhUXdyWlFSz8JypH3swU9h9P+2A=="], + "@effect/platform-bun": ["@effect/platform-bun@0.83.0", "", { "dependencies": { "@effect/platform-node-shared": "^0.53.0", "multipasta": "^0.2.7" }, "peerDependencies": { "@effect/cluster": "^0.52.0", "@effect/platform": "^0.93.0", "@effect/rpc": "^0.72.1", "@effect/sql": "^0.48.0", "effect": "^3.19.0" } }, "sha512-cjE4b0TRva/BXKDzYEB12h32AO0nidk6qN99j8IIOivfFlTUsuI2o36wKg8zxiMV6tdeylXIORxTD+Zvvz1XkQ=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-3WJ1GKjU7NzZb6RTbwLB59v9cTIlzjbiFLDB0z4376TkDqoNYilJaC37IomCr/aXwuU8QKkrYoHrgpSq5ffJ4Q=="], + "@effect/platform-node-shared": ["@effect/platform-node-shared@0.53.0", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "multipasta": "^0.2.7", "ws": "^8.18.2" }, "peerDependencies": { "@effect/cluster": "^0.52.0", "@effect/platform": "^0.93.0", "@effect/rpc": "^0.72.1", "@effect/sql": "^0.48.0", "effect": "^3.19.0" } }, "sha512-xqhYyUYotVUJi7Tqd/iM+tqEoNm6fVowcPm9naxKZCa6WPD6TnRfaogxjkB3yNBnPY63Ya/sIkfkeZXA3MwF3w=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-kUu+loNI3OCD2c12cUt7M5yaaSjDnGIksZwKnueubX6c/HWUyi/0mPbTBHR49Me3F0KKjWiKM+ZOjsmC+lUt9g=="], + "@effect/rpc": ["@effect/rpc@0.72.1", "", { "dependencies": { "msgpackr": "^1.11.4" }, "peerDependencies": { "@effect/platform": "^0.93.0", "effect": "^3.19.0" } }, "sha512-crpiAxDvFxM/fGhLuAgB1V8JOtfCm8/6ZdOP4MIdkz14I/ff3LdLJpf8hHJpYIbwYXypglAeAaHpfuZOt5f+SA=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.1.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-vEHK0v0oW+E6RUWLoxb2isI3rZo57OX9ZNyyGH701fZPj6Il0Rn1f5DMNyCmyflMwTnIQstEbs7n2BxYSqQx4Q=="], + "@effect/sql": ["@effect/sql@0.48.0", "", { "dependencies": { "uuid": "^11.0.3" }, "peerDependencies": { "@effect/experimental": "^0.57.0", "@effect/platform": "^0.93.0", "effect": "^3.19.0" } }, "sha512-tubdizHriDwzHUnER9UsZ/0TtF6O2WJckzeYDbVSRPeMkrpdpyEzEsoKctechTm65B3Bxy6JIixGPg2FszY72A=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-i2PKdn70kY++KEF/zkQFvQfX1e8SkA8hq4BgC+yE9dZqyLzB/XStY2MvwI3qswlRgnGpgncgqe0QYKVS1blksg=="], + "@effect/workflow": ["@effect/workflow@0.12.5", "", { "peerDependencies": { "@effect/experimental": "^0.57.1", "@effect/platform": "^0.93.2", "@effect/rpc": "^0.72.1", "effect": "^3.19.3" } }, "sha512-9vsXqprb30FfWU84lwOi13bJpVXgl0q58hb5tpWb2uTDFmLHEoF8a/P3Io2dD47ZA/4VGf47NCkj+15QLIeGeQ=="], - "@effect/cluster": ["@effect/cluster@0.41.17", "", { "peerDependencies": { "@effect/platform": "^0.87.12", "@effect/rpc": "^0.64.13", "@effect/sql": "^0.40.13", "@effect/workflow": "^0.4.13", "effect": "^3.16.12" } }, "sha512-VCsyCbTRrYxashuZFWo7IS9RptXB5a7DUXlKJFlxd9swXWMxlvSX4D/KGayJXuWhogyMrQAvmUjC53bxj3Gm/w=="], + "@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], - "@effect/experimental": ["@effect/experimental@0.51.13", "", { "dependencies": { "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.87.12", "effect": "^3.16.12", "ioredis": "^5", "lmdb": "^3" }, "optionalPeers": ["ioredis", "lmdb"] }, "sha512-5dqPCO6HT6zLQw2yZaVZgIY4gytr1YQA3ZxfKyXPymKBTyTog0vrQxAiV7KUhXHQLpxvEdmaSisr/S1WUYUBrA=="], + "@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], - "@effect/language-service": ["@effect/language-service@0.36.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-KoE5e+7vhcd29fBTDBvttWHv1z1KPg9Ji2DyhD0hETBaoM9IsFymboD6WqpDoGH1QZRr6CmTD3DfaZUs8K6Mrg=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@effect/platform": ["@effect/platform@0.87.12", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.5" }, "peerDependencies": { "effect": "^3.16.12" } }, "sha512-IRYynFjo18wmfTd0FVNAXSC631+gE1yBeBfcOHtPLyMlApjhB31YzaCs+T9kY1cBrE7nZ78lJl0MtHmu1W9Wkw=="], + "@module-federation/error-codes": ["@module-federation/error-codes@0.21.4", "", {}, "sha512-ClpL5MereWNXh+EgDjz7w4RrC1JlisQTvXDa1gLxpviHafzNDfdViVmuhi9xXVuj+EYo8KU70Y999KHhk9424Q=="], - "@effect/platform-node": ["@effect/platform-node@0.89.5", "", { "dependencies": { "@effect/platform-node-shared": "^0.42.17", "mime": "^3.0.0", "undici": "^7.10.0", "ws": "^8.18.2" }, "peerDependencies": { "@effect/cluster": "^0.41.17", "@effect/platform": "^0.87.12", "@effect/rpc": "^0.64.13", "@effect/sql": "^0.40.13", "effect": "^3.16.12" } }, "sha512-WQpggkO5TrwnN/Ry41H/ljdSFCFAp5pqtvhkqgyBepVzQ8XQFUYm78/Ty5t1UBexFzxC4qvFD0sjxlHbck2dmQ=="], + "@module-federation/runtime": ["@module-federation/runtime@0.21.4", "", { "dependencies": { "@module-federation/error-codes": "0.21.4", "@module-federation/runtime-core": "0.21.4", "@module-federation/sdk": "0.21.4" } }, "sha512-wgvGqryurVEvkicufJmTG0ZehynCeNLklv8kIk5BLIsWYSddZAE+xe4xov1kgH5fIJQAoQNkRauFFjVNlHoAkA=="], - "@effect/platform-node-shared": ["@effect/platform-node-shared@0.42.17", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "multipasta": "^0.2.5", "ws": "^8.18.2" }, "peerDependencies": { "@effect/cluster": "^0.41.17", "@effect/platform": "^0.87.12", "@effect/rpc": "^0.64.13", "@effect/sql": "^0.40.13", "effect": "^3.16.12" } }, "sha512-FNfR0Wsxru+1GnAyeTkOOOR8+ZsftQsTGcHq736eTv556jAhWVqKyhwDP0eRLZbQ2BjwxEFoAZl1AM8I3yUhNQ=="], + "@module-federation/runtime-core": ["@module-federation/runtime-core@0.21.4", "", { "dependencies": { "@module-federation/error-codes": "0.21.4", "@module-federation/sdk": "0.21.4" } }, "sha512-SGpmoOLGNxZofpTOk6Lxb2ewaoz5wMi93AFYuuJB04HTVcngEK+baNeUZ2D/xewrqNIJoMY6f5maUjVfIIBPUA=="], - "@effect/rpc": ["@effect/rpc@0.64.13", "", { "peerDependencies": { "@effect/platform": "^0.87.12", "effect": "^3.16.12" } }, "sha512-IkrtNFZJcXtZ+3x4iqAa9Lziu/OndyUOCoUfOSIWeARkVw3WGz2ohxxO0YARdRFWNIMWKJZchl1mrX1Jf/Ktsg=="], + "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.21.4", "", { "dependencies": { "@module-federation/runtime": "0.21.4", "@module-federation/webpack-bundler-runtime": "0.21.4" } }, "sha512-RzFKaL0DIjSmkn76KZRfzfB6dD07cvID84950jlNQgdyoQFUGkqD80L6rIpVCJTY/R7LzR3aQjHnoqmq4JPo3w=="], - "@effect/sql": ["@effect/sql@0.40.13", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.33.0", "uuid": "^11.0.3" }, "peerDependencies": { "@effect/experimental": "^0.51.13", "@effect/platform": "^0.87.12", "effect": "^3.16.12" } }, "sha512-rAE9ofFAHcyN74hIPnAp+Kiu51KovayuLkKnBkAn+WsgCyHgK7Tn4qYJe9Hbqi3E/cRepRCh89zw11IpGbf37g=="], + "@module-federation/sdk": ["@module-federation/sdk@0.21.4", "", {}, "sha512-tzvhOh/oAfX++6zCDDxuvioHY4Jurf8vcfoCbKFxusjmyKr32GPbwFDazUP+OPhYCc3dvaa9oWU6X/qpUBLfJw=="], - "@effect/vitest": ["@effect/vitest@0.23.12", "", { "peerDependencies": { "effect": "^3.16.12", "vitest": "^3.0.0" } }, "sha512-kUR6Npn9gXsO+PlxnZQ9kmd7RzjT1Bl0foyypvCKctvRtG/CmqNgDNNZU9s/GZXvVAtbChjULXe1APyE2smrAw=="], - - "@effect/workflow": ["@effect/workflow@0.4.13", "", { "peerDependencies": { "@effect/platform": "^0.87.12", "@effect/rpc": "^0.64.13", "effect": "^3.16.12" } }, "sha512-gXpwVPTN1dUQB9n+RG3wyGl0XtDZjelLF1VJQffG7+WphdhsV4jbQU3p+OVZDTY3PVH5TqaI60tfUxw34OTeuA=="], - - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.9", "", { "os": "aix", "cpu": "ppc64" }, "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.9", "", { "os": "android", "cpu": "arm" }, "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.9", "", { "os": "android", "cpu": "arm64" }, "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.9", "", { "os": "android", "cpu": "x64" }, "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.9", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.9", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.9", "", { "os": "linux", "cpu": "arm" }, "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.9", "", { "os": "linux", "cpu": "ia32" }, "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.9", "", { "os": "linux", "cpu": "ppc64" }, "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.9", "", { "os": "linux", "cpu": "s390x" }, "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.9", "", { "os": "linux", "cpu": "x64" }, "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg=="], - - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.9", "", { "os": "none", "cpu": "x64" }, "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g=="], - - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.9", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.9", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA=="], - - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.9", "", { "os": "sunos", "cpu": "x64" }, "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.9", "", { "os": "win32", "cpu": "ia32" }, "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.9", "", { "os": "win32", "cpu": "x64" }, "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.4", "", {}, "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw=="], + "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.21.4", "", { "dependencies": { "@module-federation/runtime": "0.21.4", "@module-federation/sdk": "0.21.4" } }, "sha512-dusmR3uPnQh9u9ChQo3M+GLOuGFthfvnh7WitF/a1eoeTfRmXqnMFsXtZCUK+f/uXf+64874Zj/bhAgbBcVHZA=="], "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], @@ -197,7 +129,7 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="], - "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.36.0", "", {}, "sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], @@ -227,608 +159,204 @@ "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.44.2", "", { "os": "android", "cpu": "arm" }, "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q=="], - - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.44.2", "", { "os": "android", "cpu": "arm64" }, "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA=="], + "@rsbuild/core": ["@rsbuild/core@1.6.7", "", { "dependencies": { "@rspack/core": "1.6.4", "@rspack/lite-tapable": "~1.1.0", "@swc/helpers": "^0.5.17", "core-js": "~3.46.0", "jiti": "^2.6.1" }, "bin": { "rsbuild": "bin/rsbuild.js" } }, "sha512-V0INbMrT/LwyhzKmvpupe2oSvPFWaivz7sdriFRp381BJvD0d2pYcq9iRW91bxgMRX78MgTzFYAu868hMAzoSw=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.44.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA=="], + "@rspack/binding": ["@rspack/binding@1.6.4", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.6.4", "@rspack/binding-darwin-x64": "1.6.4", "@rspack/binding-linux-arm64-gnu": "1.6.4", "@rspack/binding-linux-arm64-musl": "1.6.4", "@rspack/binding-linux-x64-gnu": "1.6.4", "@rspack/binding-linux-x64-musl": "1.6.4", "@rspack/binding-wasm32-wasi": "1.6.4", "@rspack/binding-win32-arm64-msvc": "1.6.4", "@rspack/binding-win32-ia32-msvc": "1.6.4", "@rspack/binding-win32-x64-msvc": "1.6.4" } }, "sha512-vUxc/zUdsCuyysOvP4CTdIYxsZPb2jIXST5vrLABiTPIaHpXZ0hVdgKif2XPJwJeuCVS6w25xvyPN0mBCU0MvQ=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.44.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw=="], + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.6.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qD2C5xwdY2qKEXTZiPJQx1L1kELapOc0AaZDqcAyzXs30d1qTKpx6PdyW3HN+gueKovyWZwMMYfz6RxcMCnaDQ=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.44.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg=="], + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.6.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-IHceyLDxeubqIrGz4gUqJavnygTij4vtDDE2Fkgobz7hkTJwGtD5mxBKbVNRqGvhrasVw0h9rEjR7tdbDSiUhQ=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.44.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA=="], + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.6.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Ldpoz2wWnBaL2+XKLIOyCZMkAkd4pk/L24EVgma3SpRtwgenLEr10bQupvwGAK5OLkjayslOTZmRiAv0FH5o/w=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.44.2", "", { "os": "linux", "cpu": "arm" }, "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ=="], + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.6.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-3fLMSDK5yMjKmx7iFbYG3P3A0xNdtmNu09v5P6hzq65tkJ3dflIt3p8DvtOTURtuSgQZV2A1LDd9hpIXdnigqA=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.44.2", "", { "os": "linux", "cpu": "arm" }, "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA=="], + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.6.4", "", { "os": "linux", "cpu": "x64" }, "sha512-5YzXUKLnaiqND05CDgkKE0WNRtC1ulkVncYs78xPikonzZmgVXa8eRaTPOZC6ZjpLR0eTsg+MSesLUsPUu27hA=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.44.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A=="], + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.6.4", "", { "os": "linux", "cpu": "x64" }, "sha512-KcSFla8a9bXG1mmV5oQ1R5h/dSXfd41/qHOsNuLqho2UCX8CVh4dezUA153dj7p1S4yOhTy6VZZi6C1szweE9A=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.44.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A=="], + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.6.4", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-mfFJbDJkRy5I1iW3m0JlWbc0X8pjVd+GRUz5nhbccwEhSQOc27ao3evf7XPU4aaDxud1B3UEqYiRcRmtm1BrjA=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.44.2", "", { "os": "linux", "cpu": "none" }, "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g=="], + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.6.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-QtIqxsfeTSS1lwfaPGrPFfJ9ir/3aWZv5t3iAgYj/CNUA8MTKWt4vQKcco7NRIGK4ZLMI+dgJBFtvd/lUDMQsw=="], - "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.44.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw=="], + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.6.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-HXEWGDllgh0jFwjGhkGcLqb0dzXbc/rA8vQr2JcSdC41p1DTzLgO215jWdKSIvzCzhyPh3VeQkXk76hjFB2cLQ=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.44.2", "", { "os": "linux", "cpu": "none" }, "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg=="], + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.6.4", "", { "os": "win32", "cpu": "x64" }, "sha512-MAO5rOnGYoeuT2LPn/P7JVJCi3d78XoXgOq3tkGh6qXhvhkjsBRtYluWCzACXQpXfFHEWYd7uT5yHoZgxiVuoA=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.44.2", "", { "os": "linux", "cpu": "none" }, "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg=="], + "@rspack/core": ["@rspack/core@1.6.4", "", { "dependencies": { "@module-federation/runtime-tools": "0.21.4", "@rspack/binding": "1.6.4", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-5F1+MQD8rfbFbUHnaiZe4jqOu9pnSb+PliqQvi0lj+uvpMpcS3sJDIs/mz6P1u87lfkfBXChIT4zSLAzeOgMWw=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.44.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw=="], + "@rspack/lite-tapable": ["@rspack/lite-tapable@1.1.0", "", {}, "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.44.2", "", { "os": "linux", "cpu": "x64" }, "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ=="], + "@smithy/abort-controller": ["@smithy/abort-controller@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.44.2", "", { "os": "linux", "cpu": "x64" }, "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg=="], + "@smithy/config-resolver": ["@smithy/config-resolver@4.4.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" } }, "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.44.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw=="], + "@smithy/core": ["@smithy/core@3.18.4", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.6", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" } }, "sha512-o5tMqPZILBvvROfC8vC+dSVnWJl9a0u9ax1i1+Bq8515eYjUJqqk5XjjEsDLoeL5dSqGSh6WGdVx1eJ1E/Nwhw=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.44.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q=="], + "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.5", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "tslib": "^2.6.2" } }, "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.44.2", "", { "os": "win32", "cpu": "x64" }, "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA=="], + "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.6", "", { "dependencies": { "@smithy/protocol-http": "^5.3.5", "@smithy/querystring-builder": "^4.2.5", "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg=="], - "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + "@smithy/hash-node": ["@smithy/hash-node@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA=="], - "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], + "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A=="], - "@smithy/abort-controller": ["@smithy/abort-controller@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g=="], + "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ=="], - "@smithy/config-resolver": ["@smithy/config-resolver@4.1.5", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.5", "tslib": "^2.6.2" } }, "sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw=="], + "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.5", "", { "dependencies": { "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A=="], - "@smithy/core": ["@smithy/core@3.8.0", "", { "dependencies": { "@smithy/middleware-serde": "^4.0.9", "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.5", "@smithy/util-stream": "^4.2.4", "@smithy/util-utf8": "^4.0.0", "@types/uuid": "^9.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-EYqsIYJmkR1VhVE9pccnk353xhs+lB6btdutJEtsp7R055haMJp2yE16eSxw8fv+G0WUY6vqxyYOP8kOqawxYQ=="], + "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.3.11", "", { "dependencies": { "@smithy/core": "^3.18.4", "@smithy/middleware-serde": "^4.2.6", "@smithy/node-config-provider": "^4.3.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" } }, "sha512-eJXq9VJzEer1W7EQh3HY2PDJdEcEUnv6sKuNt4eVjyeNWcQFS4KmnY+CKkYOIR6tSqarn6bjjCqg1UB+8UJiPQ=="], - "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.0.7", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.4", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", "@smithy/url-parser": "^4.0.5", "tslib": "^2.6.2" } }, "sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw=="], + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.11", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/protocol-http": "^5.3.5", "@smithy/service-error-classification": "^4.2.5", "@smithy/smithy-client": "^4.9.7", "@smithy/types": "^4.9.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" } }, "sha512-EL5OQHvFOKneJVRgzRW4lU7yidSwp/vRJOe542bHgExN3KNThr1rlg0iE4k4SnA+ohC+qlUxoK+smKeAYPzfAQ=="], - "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.1.1", "", { "dependencies": { "@smithy/protocol-http": "^5.1.3", "@smithy/querystring-builder": "^4.0.5", "@smithy/types": "^4.3.2", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ=="], + "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.6", "", { "dependencies": { "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ=="], - "@smithy/hash-node": ["@smithy/hash-node@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ=="], + "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ=="], - "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow=="], + "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.5", "", { "dependencies": { "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg=="], - "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw=="], + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.5", "", { "dependencies": { "@smithy/abort-controller": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/querystring-builder": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw=="], - "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.0.5", "", { "dependencies": { "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ=="], + "@smithy/property-provider": ["@smithy/property-provider@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg=="], - "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.1.18", "", { "dependencies": { "@smithy/core": "^3.8.0", "@smithy/middleware-serde": "^4.0.9", "@smithy/node-config-provider": "^4.1.4", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "@smithy/url-parser": "^4.0.5", "@smithy/util-middleware": "^4.0.5", "tslib": "^2.6.2" } }, "sha512-ZhvqcVRPZxnZlokcPaTwb+r+h4yOIOCJmx0v2d1bpVlmP465g3qpVSf7wxcq5zZdu4jb0H4yIMxuPwDJSQc3MQ=="], + "@smithy/protocol-http": ["@smithy/protocol-http@5.3.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ=="], - "@smithy/middleware-retry": ["@smithy/middleware-retry@4.1.19", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.4", "@smithy/protocol-http": "^5.1.3", "@smithy/service-error-classification": "^4.0.7", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "@smithy/util-middleware": "^4.0.5", "@smithy/util-retry": "^4.0.7", "@types/uuid": "^9.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-X58zx/NVECjeuUB6A8HBu4bhx72EoUz+T5jTMIyeNKx2lf+Gs9TmWPNNkH+5QF0COjpInP/xSpJGJ7xEnAklQQ=="], + "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg=="], - "@smithy/middleware-serde": ["@smithy/middleware-serde@4.0.9", "", { "dependencies": { "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg=="], + "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ=="], - "@smithy/middleware-stack": ["@smithy/middleware-stack@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ=="], + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0" } }, "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ=="], - "@smithy/node-config-provider": ["@smithy/node-config-provider@4.1.4", "", { "dependencies": { "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w=="], + "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.0", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA=="], - "@smithy/node-http-handler": ["@smithy/node-http-handler@4.1.1", "", { "dependencies": { "@smithy/abort-controller": "^4.0.5", "@smithy/protocol-http": "^5.1.3", "@smithy/querystring-builder": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw=="], + "@smithy/signature-v4": ["@smithy/signature-v4@5.3.5", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.0", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "@smithy/util-hex-encoding": "^4.2.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w=="], - "@smithy/property-provider": ["@smithy/property-provider@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ=="], + "@smithy/smithy-client": ["@smithy/smithy-client@4.9.7", "", { "dependencies": { "@smithy/core": "^3.18.4", "@smithy/middleware-endpoint": "^4.3.11", "@smithy/middleware-stack": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" } }, "sha512-pskaE4kg0P9xNQWihfqlTMyxyFR3CH6Sr6keHYghgyqqDXzjl2QJg5lAzuVe/LzZiOzcbcVtxKYi1/fZPt/3DA=="], - "@smithy/protocol-http": ["@smithy/protocol-http@5.1.3", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w=="], + "@smithy/types": ["@smithy/types@4.9.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA=="], - "@smithy/querystring-builder": ["@smithy/querystring-builder@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A=="], + "@smithy/url-parser": ["@smithy/url-parser@4.2.5", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ=="], - "@smithy/querystring-parser": ["@smithy/querystring-parser@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w=="], + "@smithy/util-base64": ["@smithy/util-base64@4.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ=="], - "@smithy/service-error-classification": ["@smithy/service-error-classification@4.0.7", "", { "dependencies": { "@smithy/types": "^4.3.2" } }, "sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg=="], + "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg=="], - "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ=="], + "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA=="], - "@smithy/signature-v4": ["@smithy/signature-v4@5.1.3", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-middleware": "^4.0.5", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw=="], + "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew=="], - "@smithy/smithy-client": ["@smithy/smithy-client@4.4.10", "", { "dependencies": { "@smithy/core": "^3.8.0", "@smithy/middleware-endpoint": "^4.1.18", "@smithy/middleware-stack": "^4.0.5", "@smithy/protocol-http": "^5.1.3", "@smithy/types": "^4.3.2", "@smithy/util-stream": "^4.2.4", "tslib": "^2.6.2" } }, "sha512-iW6HjXqN0oPtRS0NK/zzZ4zZeGESIFcxj2FkWed3mcK8jdSdHzvnCKXSjvewESKAgGKAbJRA+OsaqKhkdYRbQQ=="], + "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q=="], - "@smithy/types": ["@smithy/types@4.3.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw=="], + "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.10", "", { "dependencies": { "@smithy/property-provider": "^4.2.5", "@smithy/smithy-client": "^4.9.7", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-3iA3JVO1VLrP21FsZZpMCeF93aqP3uIOMvymAT3qHIJz2YlgDeRvNUspFwCNqd/j3qqILQJGtsVQnJZICh/9YA=="], - "@smithy/url-parser": ["@smithy/url-parser@4.0.5", "", { "dependencies": { "@smithy/querystring-parser": "^4.0.5", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw=="], + "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.13", "", { "dependencies": { "@smithy/config-resolver": "^4.4.3", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", "@smithy/smithy-client": "^4.9.7", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-PTc6IpnpSGASuzZAgyUtaVfOFpU0jBD2mcGwrgDuHf7PlFgt5TIPxCYBDbFQs06jxgeV3kd/d/sok1pzV0nJRg=="], - "@smithy/util-base64": ["@smithy/util-base64@4.0.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg=="], + "@smithy/util-endpoints": ["@smithy/util-endpoints@3.2.5", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A=="], - "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA=="], + "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw=="], - "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg=="], + "@smithy/util-middleware": ["@smithy/util-middleware@4.2.5", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA=="], - "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.0.0", "", { "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug=="], + "@smithy/util-retry": ["@smithy/util-retry@4.2.5", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg=="], - "@smithy/util-config-provider": ["@smithy/util-config-provider@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w=="], + "@smithy/util-stream": ["@smithy/util-stream@4.5.6", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.6", "@smithy/node-http-handler": "^4.4.5", "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ=="], - "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.0.26", "", { "dependencies": { "@smithy/property-provider": "^4.0.5", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-xgl75aHIS/3rrGp7iTxQAOELYeyiwBu+eEgAk4xfKwJJ0L8VUjhO2shsDpeil54BOFsqmk5xfdesiewbUY5tKQ=="], + "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA=="], - "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.0.26", "", { "dependencies": { "@smithy/config-resolver": "^4.1.5", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/node-config-provider": "^4.1.4", "@smithy/property-provider": "^4.0.5", "@smithy/smithy-client": "^4.4.10", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-z81yyIkGiLLYVDetKTUeCZQ8x20EEzvQjrqJtb/mXnevLq2+w3XCEWTJ2pMp401b6BkEkHVfXb/cROBpVauLMQ=="], + "@smithy/util-utf8": ["@smithy/util-utf8@4.2.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw=="], - "@smithy/util-endpoints": ["@smithy/util-endpoints@3.0.7", "", { "dependencies": { "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ=="], - - "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw=="], - - "@smithy/util-middleware": ["@smithy/util-middleware@4.0.5", "", { "dependencies": { "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ=="], - - "@smithy/util-retry": ["@smithy/util-retry@4.0.7", "", { "dependencies": { "@smithy/service-error-classification": "^4.0.7", "@smithy/types": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ=="], - - "@smithy/util-stream": ["@smithy/util-stream@4.2.4", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.1.1", "@smithy/node-http-handler": "^4.1.1", "@smithy/types": "^4.3.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ=="], - - "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg=="], - - "@smithy/util-utf8": ["@smithy/util-utf8@4.0.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow=="], + "@smithy/uuid": ["@smithy/uuid@1.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw=="], "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], - "@types/adm-zip": ["@types/adm-zip@0.5.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw=="], - - "@types/bun": ["@types/bun@1.2.18", "", { "dependencies": { "bun-types": "1.2.18" } }, "sha512-Xf6RaWVheyemaThV0kUfaAUvCNokFr+bH8Jxp+tTZfx7dAPA8z9ePnP9S9+Vspzuxxx9JRAXhnyccRj3GyCMdQ=="], - - "@types/chai": ["@types/chai@5.2.2", "", { "dependencies": { "@types/deep-eql": "*" } }, "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg=="], - - "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], - - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - - "@types/node": ["@types/node@20.19.7", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-1GM9z6BJOv86qkPvzh2i6VW5+VVrXxCLknfmTkWEqz+6DqosiY28XUWCTmBcJ0ACzKqx/iwdIREfo1fwExIlkA=="], - - "@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="], - - "@types/uuid": ["@types/uuid@9.0.8", "", {}, "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA=="], - - "@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - - "@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], - "@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - "@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], + "@types/bun": ["@types/bun@1.3.2", "", { "dependencies": { "bun-types": "1.3.2" } }, "sha512-t15P7k5UIgHKkxwnMNkJbWlh/617rkDGEdSsDbu+qNHTaz9SKf7aC8fiIlUdD5RPpH6GEkP0cK7WlvmrEBRtWg=="], - "@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], + "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], - "@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - - "@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - - "adm-zip": ["adm-zip@0.5.16", "", {}, "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "ansis": ["ansis@4.1.0", "", {}, "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w=="], - - "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + "@types/react": ["@types/react@19.2.6", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w=="], "aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="], - "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], - - "bowser": ["bowser@2.11.0", "", {}, "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="], + "bowser": ["bowser@2.12.1", "", {}, "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "bun-types": ["bun-types@1.2.18", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-04+Eha5NP7Z0A9YgDAzMk5PHR16ZuLVa83b26kH5+cp1qZW4F6FmAURngE7INf4tKOvCE69vYvDEwoNl1tGiWw=="], - - "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], - - "c12": ["c12@3.2.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^17.2.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ=="], - - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - - "chai": ["chai@5.2.1", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A=="], - - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "bun-types": ["bun-types@1.3.2", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-i/Gln4tbzKNuxP70OWhJRZz1MRfvqExowP7U6JKoI8cntFrtxg7RJK3jvz7wQW54UuvNC8tbKHHri5fy74FVqg=="], - "changelogen": ["changelogen@0.5.7", "", { "dependencies": { "c12": "^1.11.2", "colorette": "^2.0.20", "consola": "^3.2.3", "convert-gitmoji": "^0.1.5", "mri": "^1.2.0", "node-fetch-native": "^1.6.4", "ofetch": "^1.3.4", "open": "^10.1.0", "pathe": "^1.1.2", "pkg-types": "^1.2.0", "scule": "^1.3.0", "semver": "^7.6.3", "std-env": "^3.7.0", "yaml": "^2.5.1" }, "bin": { "changelogen": "dist/cli.mjs" } }, "sha512-cTZXBcJMl3pudE40WENOakXkcVtrbBpbkmSkM20NdRiUqa4+VYRdXdEsgQ0BNQ6JBE2YymTNWtPKVF7UCTN5+g=="], + "core-js": ["core-js@3.46.0", "", {}, "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA=="], - "changelogithub": ["changelogithub@13.16.0", "", { "dependencies": { "ansis": "^4.1.0", "c12": "^3.0.4", "cac": "^6.7.14", "changelogen": "0.5.7", "convert-gitmoji": "^0.1.5", "execa": "^9.6.0", "ofetch": "^1.4.1", "semver": "^7.7.2", "tinyglobby": "^0.2.14" }, "bin": { "changelogithub": "cli.mjs" } }, "sha512-O+OiuYG/JgUGENXt6M+eyjLBtGYwUPL5SqKU/9sngZS14fJ3LCIU7xPdWJoyzjAixGYwjuVLC1tZFbboxZ7zbQ=="], + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], - - "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - - "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], - - "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - - "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], - - "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - - "convert-gitmoji": ["convert-gitmoji@0.1.5", "", {}, "sha512-4wqOafJdk2tqZC++cjcbGcaJ13BZ3kwldf06PTiAQRAB76Z1KJwZNL1SaRZMi2w1FM9RYTgZ6QErS8NUl/GBmQ=="], - - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - - "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - - "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], - - "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - - "default-browser": ["default-browser@5.2.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg=="], - - "default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], - - "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], - - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - - "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + "dedent": ["dedent@1.7.0", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ=="], "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], - "dotenv": ["dotenv@17.2.1", "", {}, "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ=="], - - "effect": ["effect@3.16.12", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg=="], - - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - - "esbuild": ["esbuild@0.25.9", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.9", "@esbuild/android-arm": "0.25.9", "@esbuild/android-arm64": "0.25.9", "@esbuild/android-x64": "0.25.9", "@esbuild/darwin-arm64": "0.25.9", "@esbuild/darwin-x64": "0.25.9", "@esbuild/freebsd-arm64": "0.25.9", "@esbuild/freebsd-x64": "0.25.9", "@esbuild/linux-arm": "0.25.9", "@esbuild/linux-arm64": "0.25.9", "@esbuild/linux-ia32": "0.25.9", "@esbuild/linux-loong64": "0.25.9", "@esbuild/linux-mips64el": "0.25.9", "@esbuild/linux-ppc64": "0.25.9", "@esbuild/linux-riscv64": "0.25.9", "@esbuild/linux-s390x": "0.25.9", "@esbuild/linux-x64": "0.25.9", "@esbuild/netbsd-arm64": "0.25.9", "@esbuild/netbsd-x64": "0.25.9", "@esbuild/openbsd-arm64": "0.25.9", "@esbuild/openbsd-x64": "0.25.9", "@esbuild/openharmony-arm64": "0.25.9", "@esbuild/sunos-x64": "0.25.9", "@esbuild/win32-arm64": "0.25.9", "@esbuild/win32-ia32": "0.25.9", "@esbuild/win32-x64": "0.25.9" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g=="], - - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "execa": ["execa@9.6.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw=="], - - "expect-type": ["expect-type@1.2.2", "", {}, "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA=="], - - "exsolve": ["exsolve@1.0.7", "", {}, "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw=="], + "effect": ["effect@3.19.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-gApFffMwpDVgmw/FzCaYWt6zw4m0xAnQf5+cPS0+Sl85AxfeovJeEIsiEQVlk+ZvtBYcoPXxi65GIyruzanQ5g=="], "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], - "fast-xml-parser": ["fast-xml-parser@5.2.5", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="], - - "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], - - "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], + "fast-xml-parser": ["fast-xml-parser@5.3.2", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "find-my-way-ts": ["find-my-way-ts@0.1.6", "", {}, "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA=="], - "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - - "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], - - "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "global-prefix": ["global-prefix@4.0.0", "", { "dependencies": { "ini": "^4.1.3", "kind-of": "^6.0.3", "which": "^4.0.0" } }, "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA=="], - - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - - "ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], - - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], - - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - - "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - - "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], - - "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], - - "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], - - "isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], - - "jiti": ["jiti@2.5.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w=="], - - "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - - "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], - - "loupe": ["loupe@3.1.4", "", {}, "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg=="], - - "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="], - - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - - "minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], - - "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], - - "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - - "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], - - "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "msgpackr": ["msgpackr@1.11.4", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg=="], + "msgpackr": ["msgpackr@1.11.5", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA=="], "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="], - "multipasta": ["multipasta@0.2.5", "", {}, "sha512-c8eMDb1WwZcE02WVjHoOmUVk7fnKU/RmUcosHACglrWAuPQsEJv+E8430sXj6jNc1jHw0zrS16aCjQh4BcEb4A=="], - - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="], "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], - "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - - "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - - "nypm": ["nypm@0.6.1", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.2", "pathe": "^2.0.3", "pkg-types": "^2.2.0", "tinyexec": "^1.0.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w=="], - - "ofetch": ["ofetch@1.4.1", "", { "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", "ufo": "^1.5.4" } }, "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw=="], - - "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - - "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], - - "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - - "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - - "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - - "pkg-types": ["pkg-types@2.2.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ=="], - - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "pretty-ms": ["pretty-ms@9.2.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg=="], + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], - "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], - - "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - - "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], - - "rollup": ["rollup@4.44.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.44.2", "@rollup/rollup-android-arm64": "4.44.2", "@rollup/rollup-darwin-arm64": "4.44.2", "@rollup/rollup-darwin-x64": "4.44.2", "@rollup/rollup-freebsd-arm64": "4.44.2", "@rollup/rollup-freebsd-x64": "4.44.2", "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", "@rollup/rollup-linux-arm-musleabihf": "4.44.2", "@rollup/rollup-linux-arm64-gnu": "4.44.2", "@rollup/rollup-linux-arm64-musl": "4.44.2", "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", "@rollup/rollup-linux-riscv64-gnu": "4.44.2", "@rollup/rollup-linux-riscv64-musl": "4.44.2", "@rollup/rollup-linux-s390x-gnu": "4.44.2", "@rollup/rollup-linux-x64-gnu": "4.44.2", "@rollup/rollup-linux-x64-musl": "4.44.2", "@rollup/rollup-win32-arm64-msvc": "4.44.2", "@rollup/rollup-win32-ia32-msvc": "4.44.2", "@rollup/rollup-win32-x64-msvc": "4.44.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg=="], - - "run-applescript": ["run-applescript@7.0.0", "", {}, "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="], - - "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], - - "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - - "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - - "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - - "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], - - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - - "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], - "strnum": ["strnum@2.1.1", "", {}, "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw=="], - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - - "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], - - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - - "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], - - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - - "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - - "tinyspy": ["tinyspy@4.0.3", "", {}, "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A=="], - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "ts-patch": ["ts-patch@3.3.0", "", { "dependencies": { "chalk": "^4.1.2", "global-prefix": "^4.0.0", "minimist": "^1.2.8", "resolve": "^1.22.2", "semver": "^7.6.3", "strip-ansi": "^6.0.1" }, "bin": { "ts-patch": "bin/ts-patch.js", "tspc": "bin/tspc.js" } }, "sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], - - "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], - - "undici": ["undici@7.11.0", "", {}, "sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg=="], - - "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - - "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "vite": ["vite@5.4.19", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA=="], - - "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], - - "vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], - - "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], - - "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], - "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], - - "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "yaml": ["yaml@2.8.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="], - - "yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="], - - "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.840.0", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA=="], - "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.840.0", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA=="], - - "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.840.0", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA=="], - "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "@effect/experimental/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - - "@effect/sql/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "changelogen/c12": ["c12@1.11.2", "", { "dependencies": { "chokidar": "^3.6.0", "confbox": "^0.1.7", "defu": "^6.1.4", "dotenv": "^16.4.5", "giget": "^1.2.3", "jiti": "^1.21.6", "mlly": "^1.7.1", "ohash": "^1.1.3", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", "pkg-types": "^1.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.4" }, "optionalPeers": ["magicast"] }, "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew=="], - - "changelogen/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - - "changelogen/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - - "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - - "node-gyp-build-optional-packages/detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + "@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.2.5", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="], - "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - - "nypm/tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], - - "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "@aws-crypto/sha256-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], + "node-gyp-build-optional-packages/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "@aws-crypto/sha256-js/@aws-sdk/types/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - - "@aws-crypto/util/@aws-sdk/types/@smithy/types": ["@smithy/types@4.3.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA=="], - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "changelogen/c12/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - - "changelogen/c12/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "changelogen/c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - - "changelogen/c12/giget": ["giget@1.2.5", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.5.4", "pathe": "^2.0.3", "tar": "^6.2.1" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug=="], - - "changelogen/c12/jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - - "changelogen/c12/ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], - - "changelogen/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "changelogen/pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], - - "changelogen/c12/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - - "changelogen/c12/giget/nypm": ["nypm@0.5.4", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "tinyexec": "^0.3.2", "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA=="], - - "changelogen/c12/giget/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "changelogen/c12/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], } } diff --git a/package.json b/package.json index 46a6ebfc..1c31051a 100644 --- a/package.json +++ b/package.json @@ -1,84 +1,24 @@ { - "name": "itty-aws", - "version": "0.7.2", - "files": [ - "src", - "dist" - ], - "homepage": "https://alchemy.run", - "author": "Sam Goodwin ", - "description": "Lightweight AWS SDK for Effect", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/sam-goodwin/itty-aws.git" - }, + "name": "itty-aws-2", + "module": "index.ts", "type": "module", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", + "private": true, "sideEffects": false, - "exports": { - ".": { - "bun": "./src/index.ts", - "import": "./dist/index.js", - "types": "./dist/index.d.ts" - }, - "./*": { - "bun": "./src/services/*/index.ts", - "import": "./dist/services/*/index.js", - "types": "./dist/services/*/index.d.ts" - }, - "./credentials": { - "bun": "./src/credentials.ts", - "import": "./dist/credentials.js", - "types": "./dist/credentials.d.ts" - }, - "./credential.service": { - "bun": "./src/credential.service.ts", - "import": "./dist/credential.service.js", - "types": "./dist/credential.service.d.ts" - } - }, - "scripts": { - "build": "tsc -b", - "generate": "bun scripts/generate-clients.ts && bun biome check --write && tsc -b", - "generate:unsafe": "bun scripts/generate-clients.ts", - "generate-ec2-metadata": "bun scripts/generate-ec2-metadata.ts && bun biome check --write && tsc -b", - "generate-awsquery-metadata": "bun scripts/generate-awsquery-metadata.ts --all && bun biome check --write && tsc -b", - "generate-service-support-table": "bun scripts/generate-service-support-table.ts", - "gen": "bun generate", - "bundle:compare": "bun scripts/bundle-compare.ts", - "test:smoke": "bun vitest run test/smoke/*.test.ts", - "bump": "bun ./scripts/bump.ts", - "publish:npm": "bun publish" - }, - "dependencies": { - "aws4fetch": "^1.0.20" + "devDependencies": { + "@rsbuild/core": "^1.6.7", + "@types/bun": "latest", + "@types/node": "^24.10.1", + "dedent": "^1.7.0" }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3", - "@effect/platform": "^0.87.12", - "@effect/platform-node": "^0.89.5", - "effect": "^3" + "typescript": "^5" }, - "devDependencies": { - "@aws-sdk/credential-providers": "^3", - "@biomejs/biome": "^2.1.1", - "@effect/language-service": "^0.36.0", - "@effect/platform": "^0.87.12", - "@effect/platform-node": "^0.89.5", - "@effect/vitest": "^0.23.12", - "@types/bun": "^1.2.18", - "@types/node": "^20", - "adm-zip": "^0.5.16", - "@types/adm-zip": "^0.5.7", - "bun-types": "^1.2.18", - "changelogithub": "^13.16.0", - "effect": "^3.16.12", - "esbuild": "^0.25.9", - "pathe": "^2.0.3", - "ts-patch": "^3.3.0", - "typescript": "^5.9.2", - "vitest": "3" + "dependencies": { + "@aws-sdk/credential-providers": "^3.933.0", + "@effect/platform": "^0.93.3", + "@effect/platform-bun": "^0.83.0", + "aws4fetch": "^1.0.20", + "effect": "^3.19.4", + "fast-xml-parser": "^5.3.2" } } diff --git a/playground-itty.ts b/playground-itty.ts new file mode 100644 index 00000000..d70dbb24 --- /dev/null +++ b/playground-itty.ts @@ -0,0 +1,99 @@ +import { Schema, Effect } from "effect"; +import { Region } from "./src/region"; +import { + Operation, + Path, + Header, + StreamBody, + Body, + Error, +} from "./src/schema-helpers"; +import { + FormatXMLResponse, + makeOperation, + NoopRequest, + NoopResponse, +} from "./src/client"; + +const input = () => + Operation( + { + uri: "/{Bucket}/{Key+}?x-id=PutObject", + method: "PUT", + sdkId: "S3", + sigV4ServiceName: "s3", + name: "PutObject", + }, + Schema.Struct({ + ACL: Schema.optional( + Header( + "x-amz-acl", + Schema.Literal( + "private", + "public-read", + "public-read-write", + "authenticated-read", + ), + ), + ), + Body: StreamBody(), + Bucket: Path("Bucket", Schema.String), + Key: Path("Key", Schema.String), + }), + Schema.Struct({ + ETag: Header("etag", Schema.String), + }), + Error("NoSuchKey", Schema.Struct({})), + //todo(pear): make empty struct the default + // Schema.Union( + // Error( + // "NoSuchBucket", + // Schema.Struct({ + // Code: Body("Error.Code", Schema.Literal("NoSuchBucket")), + // Message: Body("Error.Message", Schema.String), + // BucketName: Body("Error.BucketName", Schema.String), + // }), + // ), + // Error( + // "Test", + // Schema.Struct({ + // Code: Body("Error.Code", Schema.Literal("Test")), + // Message: Body("Error.Message", Schema.String), + // BucketName: Body("Error.BucketName", Schema.String), + // }), + // ), + // ), + ); + +import { BunContext, BunRuntime } from "@effect/platform-bun"; +import { Logger, LogLevel } from "effect"; +import { NodeProviderChainCredentialsLive } from "./src/credentials"; +import { FetchHttpClient } from "@effect/platform"; + +const program = Effect.gen(function* () { + const PutObject = makeOperation( + input(), + NoopRequest, + NoopResponse, + FormatXMLResponse, + ); + //todo(pear): make the errors more readable (probably just export from somewhere, idk) + const result = PutObject({ + Bucket: "alchemy-7uzxjcr-test", + Key: "test-2.txt", + Body: "this is some text2", + }); + yield* Effect.logDebug(result); +}); + +BunRuntime.runMain( + program.pipe( + //todo(pear): make this not a function so we can replace with like S3.testClient or something + // Effect.provide(S3.clientLive), + Effect.provideService(Region, "us-east-1"), + Effect.provide(FetchHttpClient.layer), + Effect.provide(NodeProviderChainCredentialsLive), + Effect.provide(BunContext.layer), + Logger.withMinimumLogLevel(LogLevel.Debug), + ), +); diff --git a/playground.ts b/playground.ts new file mode 100644 index 00000000..0303e2f1 --- /dev/null +++ b/playground.ts @@ -0,0 +1,35 @@ +import { Effect } from "effect"; +import { Region } from "./src/region"; +import { CreateBucket, PutObject, GetObject } from "./src/clients.gen/s3"; + +import { BunContext, BunRuntime } from "@effect/platform-bun"; +import { Logger, LogLevel } from "effect"; +import { NodeProviderChainCredentialsLive } from "./src/credentials"; +import { FetchHttpClient } from "@effect/platform"; + +const program = Effect.gen(function* () { + const result = yield* CreateBucket({ + Bucket: "alchemy-7uzxjcl", + }); + // const result2 = yield* PutObject({ + // Bucket: "alchemy-7uzxjcl", + // }); + // const result3 = yield* GetObject({ + // Bucket: "alchemy-7uzxjcl", + // }); + yield* Effect.logDebug(result); + // yield* Effect.logDebug(result2); + // yield* Effect.logDebug(result3); +}); + +BunRuntime.runMain( + program.pipe( + //todo(pear): make this not a function so we can replace with like S3.testClient or something + // Effect.provide(S3.clientLive), + Effect.provideService(Region, "us-east-1"), + Effect.provide(FetchHttpClient.layer), + Effect.provide(NodeProviderChainCredentialsLive), + Effect.provide(BunContext.layer), + Logger.withMinimumLogLevel(LogLevel.Debug), + ), +); diff --git a/rsbuild.config.ts b/rsbuild.config.ts new file mode 100644 index 00000000..5c66555c --- /dev/null +++ b/rsbuild.config.ts @@ -0,0 +1,46 @@ +import { defineConfig } from "@rsbuild/core"; + +export default defineConfig({ + source: { + entry: { + index: process.argv[4], + }, + }, + output: { + module: true, + target: "node", + externals: [ + /^@effect\/(.*)/, + "effect", + /^effect\/(.*)/, + "@aws-sdk/credential-providers", + //todo(pear): these aren't really external + "fast-xml-parser", + "aws4fetch", + ], + minify: { + js: true, + jsOptions: { + minimizerOptions: { + minify: false, + mangle: false, + }, + }, + }, + distPath: { + root: "dist", + js: ".", + }, + filename: { + js: "bundle.js", + }, + }, + tools: { + htmlPlugin: false, + }, + performance: { + chunkSplit: { + strategy: "all-in-one", + }, + }, +}); diff --git a/scripts/bump.ts b/scripts/bump.ts deleted file mode 100644 index f4dcf235..00000000 --- a/scripts/bump.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { $ } from "bun"; -import { generate } from "changelogithub"; -import { readFile, writeFile } from "node:fs/promises"; -import { join } from "node:path"; - -const repo = "sam-goodwin/itty-aws"; - -export async function generateReleaseNotes(tag: string) { - console.log(`Generating release notes for version ${tag}`); - const changelog = await generate({ - to: tag, - emoji: true, - contributors: true, - repo, - }); - const fileContents = await readFile( - join(process.cwd(), "CHANGELOG.md"), - "utf-8", - ); - if (fileContents.includes(tag)) { - console.log(`Version ${tag} already exists in changelog, skipping`); - return; - } - await writeFile( - join(process.cwd(), "CHANGELOG.md"), - `## ${tag}\n\n${changelog.md}\n\n---\n\n${fileContents}`, - ); -} - -async function checkNpmVersion( - packageName: string, - version: string, -): Promise { - try { - const response = await fetch( - `https://registry.npmjs.org/${packageName}/${version}`, - ); - return response.ok; - } catch { - return false; - } -} - -async function checkGithubTag(version: string): Promise { - try { - const response = await fetch( - `https://api.github.com/repos/${repo}/git/refs/tags/v${version}`, - ); - return response.ok; - } catch { - return false; - } -} - -async function checkGithubRelease(version: string): Promise { - try { - const response = await fetch( - `https://api.github.com/repos/${repo}/releases/tags/v${version}`, - ); - return response.ok; - } catch { - return false; - } -} - -const versionInput = process.argv[2]; - -if (!versionInput) { - console.error( - "Please provide a version number or bump type (major, minor, patch)", - ); - process.exit(1); -} - -$.cwd(process.cwd()); - -const pkgJsonPath = join(process.cwd(), "package.json"); -const pkgJson = JSON.parse(await readFile(pkgJsonPath, "utf-8")); - -let newVersion = ""; - -// Check if it's a semantic version bump or a specific version -if (["major", "minor", "patch"].includes(versionInput)) { - // Parse current version - const currentVersion = pkgJson.version; - const versionMatch = currentVersion.match(/^(\d+)\.(\d+)\.(\d+)$/); - - if (!versionMatch) { - console.error(`Invalid current version format: ${currentVersion}`); - process.exit(1); - } - - const [, major, minor, patch] = versionMatch.map(Number); - - // Calculate new version based on bump type - switch (versionInput) { - case "major": - newVersion = `${major + 1}.0.0`; - break; - case "minor": - newVersion = `${major}.${minor + 1}.0`; - break; - case "patch": - newVersion = `${major}.${minor}.${patch + 1}`; - break; - default: - throw new Error(`Invalid bump type: ${versionInput}`); - } - - console.log( - `Bumping ${versionInput} version: ${currentVersion} β†’ ${newVersion}`, - ); -} else { - // Validate specific version format - if (!/^\d+\.\d+\.\d+$/.test(versionInput)) { - console.error( - "Version must be in format x.y.z or use 'major', 'minor', 'patch'", - ); - process.exit(1); - } - - newVersion = versionInput; - console.log(`Setting specific version: ${newVersion}`); -} - -// Check if version already exists -const npmExists = await checkNpmVersion(pkgJson.name, newVersion); -if (npmExists) { - console.error(`Version ${newVersion} already exists on npm`); - process.exit(1); -} - -const githubTagExists = await checkGithubTag(newVersion); -if (githubTagExists) { - console.error(`Tag v${newVersion} already exists on GitHub`); - process.exit(1); -} - -const githubReleaseExists = await checkGithubRelease(newVersion); -if (githubReleaseExists) { - console.error(`Release v${newVersion} already exists on GitHub`); - process.exit(1); -} - -pkgJson.version = newVersion; -await writeFile(pkgJsonPath, `${JSON.stringify(pkgJson, null, 2)}\n`); - -await $`bun install`; - -console.log(`Updated version to ${newVersion} in package.json`); - -// Generate build date for the release -console.log("Generating Workers compatibility date..."); - -await $`git add package.json package.json bun.lock`; -await $`git commit -m "chore(release): ${newVersion}"`; -await $`git tag v${newVersion}`; - -await generateReleaseNotes(`v${newVersion}`); - -await $`git add CHANGELOG.md`; -await $`git commit --amend --no-edit`; -await $`git tag -d v${newVersion}`; - -console.log(`Bumped version to ${newVersion} and generated release notes`); diff --git a/scripts/bundle-compare.ts b/scripts/bundle-compare.ts deleted file mode 100644 index 3916cf3e..00000000 --- a/scripts/bundle-compare.ts +++ /dev/null @@ -1,517 +0,0 @@ -import { build, type Metafile } from "esbuild"; -import { spawnSync } from "node:child_process"; -import fs from "node:fs"; -import { cpus } from "node:os"; -import path from "node:path"; -import { gzipSync } from "node:zlib"; - -type TargetSpec = { - service: string; - className: string; - commands: string[]; -}; - -type ServiceInfo = { - service: string; - className: string; - operations: string[]; -}; - -type Artifact = { - bytes: number; - gzipBytes: number; - outfile: string; - metafile: string; -}; - -type LibName = "itty-aws" | "itty-aws-no-effect" | "aws-sdk-v3"; - -type CompareReport = { - service: string; - className: string; - results: Record; -}; - -const ROOT = process.cwd(); -const OUTDIR = path.join(ROOT, "dist", "bundle-compare"); -const ENTRYDIR = path.join(OUTDIR, "entries"); -const VENDORDIR = path.join(OUTDIR, "aws-sdk-vendor"); -const VENDOR_NODE_MODULES = path.join(VENDORDIR, "node_modules"); - -// Static fake credentials (no provider chains) -const STATIC_CREDS = { - accessKeyId: "AKIAIOSFAKE0123456789", - secretAccessKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYFAKEKEY", - sessionToken: "IQoJb3JpZ2luX2VjEOr//////////wEaDmV1LXdlc3QtMiJIMEYCIQDGFAKE", -} as const; - -function ensureDirs() { - fs.mkdirSync(OUTDIR, { recursive: true }); - fs.mkdirSync(ENTRYDIR, { recursive: true }); -} - -function resolveAwsPackagePath(pkg: string): string | null { - const vendorPath = path.join(VENDOR_NODE_MODULES, ...pkg.split("/")); - if (fs.existsSync(vendorPath)) return vendorPath; - const rootPath = path.join(ROOT, "node_modules", ...pkg.split("/")); - if (fs.existsSync(rootPath)) return rootPath; - return null; -} - -function extractOperationsFromTypesFile( - typesPath: string, -): { className: string; operations: string[] } | null { - if (!fs.existsSync(typesPath)) { - return null; - } - - const content = fs.readFileSync(typesPath, "utf8"); - - // Find the main service class declaration - const classMatch = content.match( - /export declare class (\w+) extends AWSServiceClient \{([\s\S]*?)\n\}/, - ); - if (!classMatch) { - return null; - } - - const className = classMatch[1]; - const classBody = classMatch[2]; - - // Extract method names (operations) - const methodMatches = classBody.matchAll(/^\s+(\w+)\(/gm); - const operations = Array.from(methodMatches, (match) => match[1]); - - return { className, operations }; -} - -function getAllServices(): ServiceInfo[] { - const servicesDir = path.join(ROOT, "src", "services"); - const services: ServiceInfo[] = []; - - const serviceDirs = fs - .readdirSync(servicesDir, { withFileTypes: true }) - .filter((dirent) => dirent.isDirectory()) - .map((dirent) => dirent.name) - .sort(); - - for (const serviceDir of serviceDirs) { - const typesPath = path.join(servicesDir, serviceDir, "types.ts"); - const extracted = extractOperationsFromTypesFile(typesPath); - - if (extracted && extracted.operations.length > 0) { - services.push({ - service: serviceDir, - className: extracted.className, - operations: extracted.operations, - }); - } - } - - return services; -} - -// Build targets list dynamically for all services (up to 3 ops each) -function buildAllServiceTargets(): TargetSpec[] { - const all = getAllServices(); - return all.map(({ service, className, operations }) => ({ - service, - className, - commands: operations.slice(0, Math.min(3, operations.length)), - })); -} - -function genIttyEntry(targets: TargetSpec[], importBase: string): string { - const imports = new Set(); - const initLines: string[] = []; - for (const { service, className } of targets) { - // Import from local src to ensure identical build settings - imports.add( - `import { ${className} } from "${importBase}/${service}/index.ts";`, - ); - initLines.push( - `new ${className}({ region: "us-east-1", credentials: CREDS })`, - ); - } - return `// Auto-generated entry for itty-aws bundle comparison -const CREDS = ${JSON.stringify(STATIC_CREDS)}; -${Array.from(imports).join("\n")} -export const keep = [${initLines.join(", ")}]; -`; -} - -function genAwsSdkEntry(targets: TargetSpec[]): { - code: string; - hasImports: boolean; -} { - // Build import lines and usage lines per service - const importLines: string[] = []; - const initLines: string[] = []; - const usageLines: string[] = []; - - for (const { service, commands, className } of targets) { - const pkg = `@aws-sdk/client-${service}`; - const clientName = `${className}Client`; - const commandNames = commands.map((c) => { - // Convert camelCase to PascalCase for command names - return `${c.charAt(0).toUpperCase() + c.slice(1)}Command`; - }); - - try { - // Check if the AWS SDK package exists before including it (vendor or root) - const pkgPath = resolveAwsPackagePath(pkg); - if (pkgPath) { - importLines.push( - `import { ${clientName}, ${commandNames.join(", ")} } from "${pkg}";`, - ); - const clientVar = `${service.replace(/[-]/g, "")}Client`; - initLines.push( - `const ${clientVar} = new ${clientName}({ region: "us-east-1", credentials: CREDS, retryMode: "standard", maxAttempts: 3 });`, - ); - // Create trivial command instances so they are included in bundle - for (const cmd of commandNames) { - usageLines.push(`new ${cmd}({})`); - } - usageLines.push(clientVar); - } - } catch (err) { - console.warn(`Warning: Could not process AWS SDK package ${pkg}: ${err}`); - } - } - - const hasImports = importLines.length > 0; - if (!hasImports) { - return { - code: "// No AWS SDK packages found for these targets\nexport const keep = [];\n", - hasImports, - }; - } - - const code = `// Auto-generated entry for AWS SDK v3 bundle comparison -const CREDS = ${JSON.stringify(STATIC_CREDS)}; -${importLines.join("\n")} -${initLines.join("\n")} -export const keep = [${usageLines.join(", ")}]; -`; - return { code, hasImports }; -} - -function ensureVendorProject(pkgs: string[], install: boolean) { - fs.mkdirSync(VENDORDIR, { recursive: true }); - const manifestPath = path.join(VENDORDIR, "package.json"); - const manifest = { - name: "aws-sdk-vendor", - private: true, - type: "module", - dependencies: Object.fromEntries(pkgs.map((p) => [p, "^3"])), - } as const; - fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`); - if (install) { - console.log( - `Installing ${pkgs.length} AWS SDK client packages into vendor dir...`, - ); - try { - const res = spawnSync("bun", ["install"], { - cwd: VENDORDIR, - stdio: "inherit", - }); - if (res.status !== 0) { - console.warn( - `bun install failed in vendor dir (exit ${res.status}). You can run it manually in ${VENDORDIR}.`, - ); - } - } catch (_e) { - console.warn( - `Failed to spawn bun install for vendor dir. Run manually in ${VENDORDIR}.`, - ); - } - } -} - -async function buildOnce(opts: { - name: LibName; - entry: string; - outfile: string; - minify: boolean; - external?: string[]; - quiet?: boolean; -}): Promise<{ bytes: number; gzipBytes: number; metafilePath: string } | null> { - try { - const res = await build({ - entryPoints: [opts.entry], - outfile: opts.outfile, - bundle: true, - format: "esm", - target: "node18", - platform: "node", - mainFields: ["module", "main"], - treeShaking: true, - minify: opts.minify, - metafile: true, - external: opts.external, - nodePaths: [VENDOR_NODE_MODULES], - define: { - "process.env.NODE_ENV": '"production"', - }, - logLevel: "silent", - }); - const code = fs.readFileSync(opts.outfile); - const gzip = gzipSync(code); - const metafilePath = opts.outfile.replace(/\.js$/, ".meta.json"); - fs.writeFileSync( - metafilePath, - JSON.stringify(res.metafile as Metafile, null, 2), - ); - return { bytes: code.length, gzipBytes: gzip.length, metafilePath }; - } catch (err) { - if (!opts.quiet) { - console.error( - `Failed to build ${opts.name} (${opts.minify ? "min" : "raw"}):`, - ); - console.error(err); - } - return null; - } -} - -// No file I/O for targets; always use all services derived above - -function showHelp() { - console.log(` -Bundle Size Comparison Tool for itty-aws - -Usage: bun scripts/bundle-compare.ts [--help] - -Behavior: - - Always runs across all available AWS services - - Selects up to 3 operations per service for bundling - - Installs AWS SDK v3 clients into a local vendor dir (dist/bundle-compare/aws-sdk-vendor) and compares against them - -Files generated: - - dist/bundle-compare/report.md Markdown comparison report - -Examples: - bun scripts/bundle-compare.ts # Install vendor clients and run comparison for all services -`); -} - -async function run() { - const showHelpFlag = - process.argv.includes("--help") || process.argv.includes("-h"); - - if (showHelpFlag) { - showHelp(); - return; - } - - ensureDirs(); - const targets = buildAllServiceTargets(); - const requiredAwsPkgs = Array.from( - new Set(targets.map((t) => `@aws-sdk/client-${t.service}`)), - ); - // Ensure vendor project exists and install if needed - const needsInstall = !fs.existsSync( - path.join(VENDOR_NODE_MODULES, "@aws-sdk"), - ); - ensureVendorProject(requiredAwsPkgs, needsInstall); - - // Intentionally quiet: no summary of missing/available packages printed - - // Build per service and generate report - const importBase = path - .relative(ENTRYDIR, path.join(ROOT, "src", "services")) - .replace(/\\/g, "/"); - - const results: CompareReport[] = new Array(targets.length); - const awsFailed: string[] = []; - const ittyFailed: string[] = []; - const ittyNoEffectFailed: string[] = []; - - const concurrency = Math.max(2, Math.min(8, cpus().length)); - let next = 0; - - async function worker() { - while (true) { - const i = next++; - if (i >= targets.length) break; - const spec = targets[i]!; - - const serviceDir = path.join(OUTDIR, spec.service); - fs.mkdirSync(serviceDir, { recursive: true }); - - const ittyEntry = path.join( - ENTRYDIR, - `itty-aws.${spec.service}.entry.ts`, - ); - const awsEntry = path.join( - ENTRYDIR, - `aws-sdk-v3.${spec.service}.entry.ts`, - ); - const ittyEntryContent = genIttyEntry([spec], importBase); - const awsEntryData = genAwsSdkEntry([spec]); - fs.writeFileSync(ittyEntry, ittyEntryContent); - fs.writeFileSync(awsEntry, awsEntryData.code); - fs.writeFileSync( - path.join(serviceDir, "itty-aws.entry.ts"), - ittyEntryContent, - ); - fs.writeFileSync( - path.join(serviceDir, "aws-sdk-v3.entry.ts"), - awsEntryData.code, - ); - - const ittyMinOut = path.join(serviceDir, "itty-aws.min.js"); - const ittyMinNoEffectOut = path.join( - serviceDir, - "itty-aws.no-effect.min.js", - ); - const awsMinOut = path.join(serviceDir, "aws-sdk-v3.min.js"); - - const ittyMin = await buildOnce({ - name: "itty-aws", - entry: ittyEntry, - outfile: ittyMinOut, - minify: true, - quiet: true, - }); - const ittyMinNoEffect = await buildOnce({ - name: "itty-aws-no-effect", - entry: ittyEntry, - outfile: ittyMinNoEffectOut, - minify: true, - external: ["effect"], - quiet: true, - }); - - let awsMin: Awaited> | null = null; - if (awsEntryData.hasImports) { - awsMin = await buildOnce({ - name: "aws-sdk-v3", - entry: awsEntry, - outfile: awsMinOut, - minify: true, - quiet: true, - }); - } - - const ittyRes = ittyMin - ? { - bytes: ittyMin.bytes, - gzipBytes: ittyMin.gzipBytes, - outfile: ittyMinOut, - metafile: ittyMin.metafilePath, - } - : null; - if (!ittyRes) ittyFailed.push(spec.service); - - const ittyNoEffectRes = ittyMinNoEffect - ? { - bytes: ittyMinNoEffect.bytes, - gzipBytes: ittyMinNoEffect.gzipBytes, - outfile: ittyMinNoEffectOut, - metafile: ittyMinNoEffect.metafilePath, - } - : null; - if (!ittyNoEffectRes) ittyNoEffectFailed.push(spec.service); - - const awsRes = awsMin - ? { - bytes: awsMin.bytes, - gzipBytes: awsMin.gzipBytes, - outfile: awsMinOut, - metafile: awsMin.metafilePath, - } - : null; - if (!awsRes) awsFailed.push(spec.service); - - results[i] = { - service: spec.service, - className: spec.className, - results: { - "itty-aws": ittyRes, - "itty-aws-no-effect": ittyNoEffectRes, - "aws-sdk-v3": awsRes, - }, - }; - } - } - - await Promise.all(Array.from({ length: concurrency }, () => worker())); - - // Emit Markdown report - const lines: string[] = []; - const toKBint = (n: number) => Math.round(n / 1024); - const vs = (a: number, b: number) => { - if (!b || b === 0) return "N/A"; - const pct = Math.round(((a - b) / b) * 100); - const arrow = pct < 0 ? "β–Ό" : pct > 0 ? "β–²" : "β–Ά"; - const sign = pct > 0 ? "+" : ""; - const color = pct < 0 ? "green" : pct > 0 ? "red" : ""; - const text = `${arrow} ${sign}${pct}%`; - return color ? `${text}` : text; - }; - - // Single table using minified gzip sizes - lines.push( - "| Service | itty-aws
(KB) | vs
aws-sdk-v3 | itty-aws
(no Effect, KB) | vs
aws-sdk-v3 | aws-sdk-v3
(KB) |", - ); - lines.push( - "|---------|--------------:|--------:|--------------------------:|--------:|----------------:|", - ); - for (const r of results) { - const itty = r.results["itty-aws"]; - const ittyNoEff = r.results["itty-aws-no-effect"]; - const aws = r.results["aws-sdk-v3"]; - if (!aws || !itty || !ittyNoEff) continue; - lines.push( - `| ${r.className} | ${toKBint(itty.gzipBytes)} | ${vs(itty.gzipBytes, aws.gzipBytes)} | ${toKBint(ittyNoEff.gzipBytes)} | ${vs(ittyNoEff.gzipBytes, aws.gzipBytes)} | ${toKBint(aws.gzipBytes)} |`, - ); - } - - const reportPath = path.join(OUTDIR, "report.md"); - const header = - "# Bundle Size Comparison (per service)\n\n" + - "- Target: Node 18, ESM\n" + - "- Minification: on; tree-shaking; NODE_ENV=production\n" + - `- Services tested: ${results.filter((r) => r.results["itty-aws"] && r.results["aws-sdk-v3"]).length}\n` + - (ittyFailed.length ? `- itty-aws failures: ${ittyFailed.length}\n` : "") + - (ittyNoEffectFailed.length - ? `- itty-aws (no Effect) failures: ${ittyNoEffectFailed.length}\n` - : "") + - (awsFailed.length ? `- aws-sdk-v3 failures: ${awsFailed.length}\n` : "") + - "\n"; - const fullReport = header + lines.join("\n"); - fs.writeFileSync(reportPath, `${fullReport}\n`); - - // Update README.md with the bundle size report - const readmePath = path.join(ROOT, "README.md"); - const readmeContent = fs.readFileSync(readmePath, "utf8"); - - // Find the marker comment and replace everything from there to end of file - const markerComment = ""; - const markerIndex = readmeContent.indexOf(markerComment); - if (markerIndex === -1) { - console.warn( - `Warning: Could not find ${markerComment} marker in README.md`, - ); - return; - } - - const beforeMarker = readmeContent.substring(0, markerIndex); - const reportWithMarker = `${markerComment}\n${fullReport}`; - const updatedReadme = beforeMarker + reportWithMarker; - fs.writeFileSync(readmePath, updatedReadme); - - // Only print final outputs (path + failures) - console.log(`Wrote Markdown report to ${path.relative(ROOT, reportPath)}`); - console.log("Updated README.md with bundle size report"); - if (ittyFailed.length) - console.log(`itty-aws build failures: ${ittyFailed.join(", ")}`); - if (awsFailed.length) - console.log(`aws-sdk-v3 build failures: ${awsFailed.join(", ")}`); -} - -run().catch((err) => { - console.error(err); - process.exitCode = 1; -}); diff --git a/scripts/discover-awsquery-services.ts b/scripts/discover-awsquery-services.ts deleted file mode 100644 index add8d9ea..00000000 --- a/scripts/discover-awsquery-services.ts +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env bun - -/** - * Discover AWS services that use the awsQuery protocol - * - * This script scans the aws-models directory to find all services - * that use the aws.protocols#awsQuery trait. - * - * Usage: - * bun scripts/discover-awsquery-services.ts - */ - -import fs from "node:fs"; -import path from "node:path"; - -interface AwsQueryService { - serviceId: string; - serviceName: string; - version: string; - modelPath: string; - endpointPrefix?: string; -} - -function scanDirectory(dirPath: string): string[] { - try { - return fs - .readdirSync(dirPath, { withFileTypes: true }) - .filter((dirent) => dirent.isDirectory()) - .map((dirent) => path.join(dirPath, dirent.name)); - } catch { - return []; - } -} - -function findModelFiles(serviceDir: string): string[] { - const modelFiles: string[] = []; - - try { - const servicePath = path.join(serviceDir, "service"); - if (!fs.existsSync(servicePath)) return modelFiles; - - const versionDirs = scanDirectory(servicePath); - - for (const versionDir of versionDirs) { - const files = fs - .readdirSync(versionDir) - .filter((f) => f.endsWith(".json")); - - for (const file of files) { - const filePath = path.join(versionDir, file); - modelFiles.push(filePath); - } - } - } catch (error) { - console.warn(`Error scanning service directory ${serviceDir}:`, error); - } - - return modelFiles; -} - -function parseModelFile(filePath: string): any { - try { - const content = fs.readFileSync(filePath, "utf8"); - return JSON.parse(content); - } catch (error) { - console.warn(`Error parsing model file ${filePath}:`, error); - return null; - } -} - -function usesAwsQueryProtocol(model: any): boolean { - if (!model?.shapes) return false; - - // Look for service shape with aws.protocols#awsQuery trait - for (const [_shapeId, shape] of Object.entries(model.shapes)) { - if (shape.type === "service" && shape.traits?.["aws.protocols#awsQuery"]) { - return true; - } - } - return false; -} - -function extractServiceMetadata( - model: any, - modelPath: string, -): AwsQueryService | null { - if (!model?.shapes) return null; - - // Find the service shape - for (const [shapeId, shape] of Object.entries(model.shapes)) { - if (shape.type === "service" && shape.traits?.["aws.protocols#awsQuery"]) { - const serviceId = shape.traits?.["aws.api#service"]?.sdkId; - const serviceName = serviceId || shapeId.split("#").pop(); - const version = - shape.traits?.["aws.protocols#awsQuery"]?.version || - shape.traits?.["aws.api#service"]?.apiVersion || - extractVersionFromPath(modelPath); - const endpointPrefix = shape.traits?.["aws.api#service"]?.endpointPrefix; - - return { - serviceId: serviceId || serviceName, - serviceName, - version, - modelPath, - endpointPrefix, - }; - } - } - - return null; -} - -function extractVersionFromPath(modelPath: string): string { - // Extract version from path like: .../service/2010-05-08/sns-2010-05-08.json - const pathParts = modelPath.split(path.sep); - const versionMatch = pathParts.find((part) => - /^\d{4}-\d{2}-\d{2}$/.test(part), - ); - return versionMatch || "unknown"; -} - -function discoverAwsQueryServices(): AwsQueryService[] { - const services: AwsQueryService[] = []; - const modelsPath = path.join(process.cwd(), "aws-models", "models"); - - if (!fs.existsSync(modelsPath)) { - console.error(`AWS models directory not found: ${modelsPath}`); - console.error( - "Please ensure the aws-models git submodule is initialized and updated.", - ); - process.exit(1); - } - - console.log(`Scanning for awsQuery services in: ${modelsPath}`); - - const serviceDirs = scanDirectory(modelsPath); - - for (const serviceDir of serviceDirs) { - const serviceName = path.basename(serviceDir); - console.log(`Checking service: ${serviceName}`); - - const modelFiles = findModelFiles(serviceDir); - - for (const modelFile of modelFiles) { - const model = parseModelFile(modelFile); - if (model && usesAwsQueryProtocol(model)) { - const serviceMetadata = extractServiceMetadata(model, modelFile); - if (serviceMetadata) { - services.push(serviceMetadata); - console.log( - ` βœ… Found awsQuery service: ${serviceMetadata.serviceName} (${serviceMetadata.version})`, - ); - } - } - } - } - - return services; -} - -function main() { - console.log("πŸ” Discovering AWS services that use awsQuery protocol...\n"); - - const services = discoverAwsQueryServices(); - - console.log("\nπŸ“Š Discovery Summary:"); - console.log(`Found ${services.length} services using awsQuery protocol:\n`); - - // Sort services by name for consistent output - services.sort((a, b) => a.serviceName.localeCompare(b.serviceName)); - - for (const service of services) { - console.log(` β€’ ${service.serviceName} (${service.version})`); - console.log(` Service ID: ${service.serviceId}`); - console.log( - ` Model Path: ${path.relative(process.cwd(), service.modelPath)}`, - ); - if (service.endpointPrefix) { - console.log(` Endpoint Prefix: ${service.endpointPrefix}`); - } - console.log(); - } - - // Write results to JSON file for use by other scripts - const outputPath = path.join(process.cwd(), "awsquery-services.json"); - fs.writeFileSync(outputPath, JSON.stringify(services, null, 2)); - console.log(`πŸ“ Service list written to: ${outputPath}`); - - return services; -} - -// CLI handling -if (import.meta.main) { - main(); -} - -export { discoverAwsQueryServices, type AwsQueryService }; diff --git a/scripts/generate-awsquery-metadata.ts b/scripts/generate-awsquery-metadata.ts deleted file mode 100644 index 6d5e5d65..00000000 --- a/scripts/generate-awsquery-metadata.ts +++ /dev/null @@ -1,388 +0,0 @@ -#!/usr/bin/env bun - -/** - * Generate compact AWS Query metadata for runtime use - * - * This script generates metadata for AWS services using the awsQuery protocol, - * extending the EC2 metadata generation approach to handle multiple services. - * - * Usage: - * bun scripts/generate-awsquery-metadata.ts [service-id] # Generate metadata for specific service - * bun scripts/generate-awsquery-metadata.ts --all # Generate metadata for all services - * bun scripts/generate-awsquery-metadata.ts sns # Generate SNS metadata only - */ - -import fs from "node:fs"; -import path from "node:path"; -import { - discoverAwsQueryServices, - type AwsQueryService, -} from "./discover-awsquery-services.ts"; - -export type ShapeKind = - | "structure" - | "list" - | "map" - | "string" - | "integer" - | "boolean" - | "timestamp" - | "blob" - | "enum" - | "double" - | "long" - | "float" - | "union"; - -export interface MemberMeta { - target: string; // referenced shape id - locationName?: string; // xml/query field name override - queryName?: string; // for query parameter names when needed - flattened?: boolean; // smithy.api#xmlFlattened / aws.query#flattened - timestampFormat?: "iso8601" | "epoch-seconds" | "http-date"; -} - -export interface ShapeMeta { - type: ShapeKind; - xmlName?: string; // wrapper or element name override - members?: Record; // for structure - member?: MemberMeta; // for list - key?: MemberMeta; // for map - value?: MemberMeta; // for map - enum?: string[]; // optional - flattened?: boolean; // for lists/maps -} - -export interface OperationMeta { - name: string; // DescribeRegions - input?: string; // shape id - output?: string; // shape id - responseWrapper?: string; // xml wrapper (often `${name}Response`) -} - -export interface AwsQueryServiceMeta { - serviceId: string; - serviceName: string; - version: string; - endpointPrefix?: string; - operations: Record; - shapes: Record; -} - -type Raw = any; // Smithy model JSON - -function toShapeMeta(id: string, rawShapes: any): ShapeMeta { - const s = rawShapes[id]; - if (!s?.type) { - throw new Error(`Invalid shape ${id}: missing type`); - } - - const t = s.type as ShapeKind; - const meta: ShapeMeta = { type: t }; - - // Common traits: - if (s.traits?.["smithy.api#xmlName"]) { - meta.xmlName = s.traits["smithy.api#xmlName"]; - } - - if (t === "structure") { - meta.members = {}; - for (const [mName, m] of Object.entries(s.members ?? {})) { - const mm: MemberMeta = { target: m.target }; - const traits = m.traits ?? {}; - - if (traits["smithy.api#xmlName"]) - mm.locationName = traits["smithy.api#xmlName"]; - if (traits["aws.query#queryName"]) - mm.queryName = traits["aws.query#queryName"]; - if (traits["smithy.api#xmlFlattened"] || traits["aws.query#flattened"]) - mm.flattened = true; - if (traits["smithy.api#timestampFormat"]) - mm.timestampFormat = traits["smithy.api#timestampFormat"]; - - meta.members![mName] = mm; - } - } else if (t === "list") { - const mem = s.member; - const mm: MemberMeta = { target: mem.target }; - const traits = mem.traits ?? {}; - - if (traits["smithy.api#xmlName"]) - mm.locationName = traits["smithy.api#xmlName"]; - if (traits["aws.query#queryName"]) - mm.queryName = traits["aws.query#queryName"]; - if (traits["smithy.api#xmlFlattened"] || traits["aws.query#flattened"]) - mm.flattened = true; - - meta.member = mm; - - // Check if the list itself is flattened - if ( - s.traits?.["smithy.api#xmlFlattened"] || - s.traits?.["aws.query#flattened"] - ) { - meta.flattened = true; - } - } else if (t === "map") { - const k = s.key; - const v = s.value; - meta.key = { target: k.target }; - meta.value = { target: v.target }; - - // Check if the map itself is flattened - if ( - s.traits?.["smithy.api#xmlFlattened"] || - s.traits?.["aws.query#flattened"] - ) { - meta.flattened = true; - } - } else if (t === "string" && Array.isArray(s.enum)) { - meta.enum = s.enum.map((e: any) => e.value ?? e); - } - - return meta; -} - -function generateServiceMetadata( - service: AwsQueryService, -): AwsQueryServiceMeta { - const raw: Raw = JSON.parse(fs.readFileSync(service.modelPath, "utf8")); - const shapes = raw.shapes ?? raw; - - const operations: Record = {}; - const reachableShapes = new Set(); - - // First pass: collect operations and find reachable shapes - for (const [id, shape] of Object.entries(shapes)) { - if (shape.type === "operation") { - const name = id.split("#").pop()!; - const input = shape.input?.target; - const output = shape.output?.target; - const responseWrapper = - shape.traits?.["aws.query#resultWrapper"] ?? `${name}Response`; - - operations[name] = { name, input, output, responseWrapper }; - - // Add reachable shapes from input/output - if (input) reachableShapes.add(input); - if (output) reachableShapes.add(output); - } - } - - // Collect dependencies recursively - function collectDependencies(id: string, visited = new Set()) { - if (visited.has(id) || id.startsWith("smithy.api#")) return; - visited.add(id); - - const shape = shapes[id]; - if (!shape) return; - - reachableShapes.add(id); - - if (shape.type === "structure" && shape.members) { - for (const member of Object.values(shape.members)) { - collectDependencies(member.target, visited); - } - } else if (shape.type === "list" && shape.member) { - collectDependencies(shape.member.target, visited); - } else if (shape.type === "map") { - if (shape.key) collectDependencies(shape.key.target, visited); - if (shape.value) collectDependencies(shape.value.target, visited); - } - } - - // Collect all dependencies - for (const op of Object.values(operations)) { - if (op.input) collectDependencies(op.input); - if (op.output) collectDependencies(op.output); - } - - const outShapes: Record = {}; - for (const id of reachableShapes) { - const shape = shapes[id]; - if (!shape?.type) continue; - - try { - outShapes[id] = toShapeMeta(id, shapes); - } catch (error) { - console.warn(`Failed to process shape ${id}:`, error); - // Continue processing other shapes - } - } - - return { - serviceId: service.serviceId, - serviceName: service.serviceName, - version: service.version, - endpointPrefix: service.endpointPrefix, - operations, - shapes: outShapes, - }; -} - -function writeServiceMetadata( - serviceId: string, - metadata: AwsQueryServiceMeta, -) { - const metadataDir = path.join(process.cwd(), "src", "awsquery-metadata"); - - // Ensure output directory exists - if (!fs.existsSync(metadataDir)) { - fs.mkdirSync(metadataDir, { recursive: true }); - } - - const fileName = serviceId.toLowerCase().replace(/\s+/g, "-"); - const outputPath = path.join(metadataDir, `${fileName}.ts`); - - const ts = `// Auto-generated by generate-awsquery-metadata.ts. DO NOT EDIT BY HAND. - -import type { AwsQueryServiceMeta } from "./index.ts"; - -export const metadata: AwsQueryServiceMeta = ${JSON.stringify(metadata, null, 2)} as const; - -`; - - fs.writeFileSync(outputPath, ts, "utf8"); - return outputPath; -} - -function generateServiceInterfaces() { - const metadataDir = path.join(process.cwd(), "src", "awsquery-metadata"); - const indexPath = path.join(metadataDir, "index.ts"); - - const ts = `// Auto-generated by generate-awsquery-metadata.ts. DO NOT EDIT BY HAND. - -export interface AwsQueryServiceMeta { - serviceId: string; - serviceName: string; - version: string; - endpointPrefix?: string; - operations: Record; - shapes: Record; -} - -export interface OperationMeta { - name: string; - input?: string; - output?: string; - responseWrapper?: string; -} - -export interface ShapeMeta { - type: ShapeKind; - xmlName?: string; - members?: Record; - member?: MemberMeta; - key?: MemberMeta; - value?: MemberMeta; - enum?: string[]; - flattened?: boolean; -} - -export interface MemberMeta { - target: string; - locationName?: string; - queryName?: string; - flattened?: boolean; - timestampFormat?: "iso8601" | "epoch-seconds" | "http-date"; -} - -export type ShapeKind = "structure" | "list" | "map" | "string" | "integer" | "boolean" | "timestamp" | "blob" | "enum" | "double" | "long" | "float" | "union"; - -`; - - fs.writeFileSync(indexPath, ts, "utf8"); - return indexPath; -} - -function main() { - const args = process.argv.slice(2); - const command = args[0]; - - if (!command) { - console.error("Usage:"); - console.error( - " bun scripts/generate-awsquery-metadata.ts [service-id] # Generate specific service", - ); - console.error( - " bun scripts/generate-awsquery-metadata.ts --all # Generate all services", - ); - console.error(""); - console.error("Available services:"); - const services = discoverAwsQueryServices(); - for (const service of services) { - console.error(` ${service.serviceId}`); - } - process.exit(1); - } - - console.log("πŸ”§ Generating AWS Query metadata...\n"); - - const services = discoverAwsQueryServices(); - let targetServices: AwsQueryService[]; - - if (command === "--all") { - targetServices = services; - console.log(`Generating metadata for all ${services.length} services...\n`); - } else { - // Find specific service (case-insensitive) - const targetService = services.find( - (s) => s.serviceId.toLowerCase() === command.toLowerCase(), - ); - - if (!targetService) { - console.error(`Service "${command}" not found. Available services:`); - for (const service of services) { - console.error(` ${service.serviceId}`); - } - process.exit(1); - } - - targetServices = [targetService]; - console.log(`Generating metadata for ${targetService.serviceName}...\n`); - } - - const generatedFiles: string[] = []; - - for (const service of targetServices) { - try { - console.log(`Processing ${service.serviceName} (${service.version})...`); - - const metadata = generateServiceMetadata(service); - const outputPath = writeServiceMetadata(service.serviceId, metadata); - - generatedFiles.push(outputPath); - - console.log( - ` βœ… Generated: ${path.relative(process.cwd(), outputPath)}`, - ); - console.log( - ` - ${Object.keys(metadata.operations).length} operations`, - ); - console.log(` - ${Object.keys(metadata.shapes).length} shapes`); - console.log(); - } catch (error) { - console.error(` ❌ Failed to generate ${service.serviceName}:`, error); - } - } - - // Generate service interfaces - console.log("Generating service interfaces..."); - const interfacePath = generateServiceInterfaces(); - console.log(` βœ… Generated: ${path.relative(process.cwd(), interfacePath)}`); - - console.log( - `\nπŸŽ‰ Successfully generated metadata for ${generatedFiles.length} service(s)`, - ); -} - -// CLI handling -if (import.meta.main) { - main(); -} - -export { - generateServiceInterfaces, - generateServiceMetadata, - writeServiceMetadata, -}; diff --git a/scripts/generate-clients.ts b/scripts/generate-clients.ts index ef3df622..63f51a59 100644 --- a/scripts/generate-clients.ts +++ b/scripts/generate-clients.ts @@ -1,1983 +1,345 @@ -import { FileSystem } from "@effect/platform"; -import { NodeFileSystem } from "@effect/platform-node"; -import { Effect } from "effect"; -import { commonAwsErrorNames, isCommonAwsErrorName } from "../src/error.ts"; -import type { Manifest, Shape } from "./manifest.ts"; -import { loadAllLocalManifests } from "./manifest.ts"; -import { servicePatches } from "./service-patches.ts"; - -// Configuration flags -const INCLUDE_DOCUMENTATION = false; // Set to false to disable JSDoc comments - -// Fields that should support streaming in addition to regular blob types -const STREAMING_FIELDS = new Set([ - "Body", // S3 GetObject response - "body", // Bedrock and other services use lowercase - "StreamingBody", // Some AWS services use this name - "StreamingBlob", // Some AWS services use this name - "BlobStream", // Some services use this pattern - "ReadSetPartStreamingBlob", // Omics service - "ReadSetStreamingBlob", // Omics service - "ReferenceStreamingBlob", // Omics service - "ResponseStream", // Bedrock and other services - "InvokeArgs", // Lambda service - "inputStream", // Lex services - "audioStream", // Lex services - "payload", // Omics service -]); - -// Helper to extract service name from shape ID -const extractShapeName = (shapeId: string): string => { - const parts = shapeId.split("#"); - return parts[1] || ""; -}; - -// Helper to check if a type name conflicts with built-in TypeScript types -const getTypescriptSafeName = ( - shapeName: string, - servicePrefix: string, -): string => { - // List of names that conflict with global TypeScript types and reserved words - const conflictingNames = new Set([ - // Capitalized built-in types - "Date", - "String", - "Number", - "Boolean", - "Record", - "Array", - "Object", - "Promise", - "Function", - "Error", - "RegExp", - "Map", - "Set", - "Symbol", - "Uint8Array", - "DataView", - "ArrayBuffer", - "JSON", - "Math", - "Console", - // Lowercase primitive types and reserved words - "string", - "number", - "boolean", - "object", - "undefined", - "null", - "void", - "any", - "unknown", - "never", - "bigint", - "symbol", - // TypeScript keywords - "type", - "interface", - "enum", - "class", - "function", - "var", - "let", - "const", - "import", - "export", - "default", - "namespace", - "module", - "declare", - "abstract", - "async", - "await", - "break", - "case", - "catch", - "continue", - "debugger", - "delete", - "do", - "else", - "finally", - "for", - "if", - "in", - "instanceof", - "new", - "return", - "super", - "switch", - "this", - "throw", - "try", - "typeof", - "while", - "with", - "yield", - // Browser/Node globals that could conflict - "document", - "window", - "global", - "process", - "Buffer", - "console", - ]); - - if (conflictingNames.has(shapeName)) { - // Prefix with service name to avoid conflicts - return `${servicePrefix}${shapeName}`; - } - - return shapeName; -}; - -// Helper to convert to lowerCamelCase -const toLowerCamelCase = (name: string): string => { - return name.charAt(0).toLowerCase() + name.slice(1); -}; - -// Helper to check if a field is required -const isRequired = (traits: Record | undefined): boolean => { - return !!(traits && "smithy.api#required" in traits); -}; - -// Helper to sanitize error names from waitable traits (remove dots, etc.) -const sanitizeWaitableErrorName = (errorType: string): string => { - // Replace dots with empty string to create valid TypeScript identifiers - // e.g., "InvalidVpcID.NotFound" -> "InvalidVpcIDNotFound" - return errorType.replace(/\./g, ""); -}; - -// Helper to extract error types from waitable traits -const extractWaitableErrors = ( - traits: Record | undefined, -): Array<{ original: string; sanitized: string }> => { - if (!traits || !traits["smithy.waiters#waitable"]) return []; - - const waitable = traits["smithy.waiters#waitable"]; - const errors = new Set(); - - // Iterate through each waiter - for (const [_waiterName, waiterConfig] of Object.entries(waitable)) { - const config = waiterConfig as any; - if (config.acceptors && Array.isArray(config.acceptors)) { - for (const acceptor of config.acceptors) { - if (acceptor.matcher?.errorType) { - errors.add(acceptor.matcher.errorType); - } - } - } - } - - return Array.from(errors).map((errorType) => ({ - original: errorType, - sanitized: sanitizeWaitableErrorName(errorType), - })); -}; - -// Helper to get patched errors for an operation -const getPatchedErrors = ( - serviceName: string, - operationName: string, -): Array<{ original: string; sanitized: string }> => { - const patches = servicePatches[serviceName]; - if (!patches) return []; - - const operationPatch = patches[operationName]; - if (!operationPatch?.errors) return []; - - return operationPatch.errors.map((errorType) => ({ - original: errorType, - sanitized: sanitizeWaitableErrorName(errorType), - })); -}; - -// Type generation options -interface TypeGenOptions { - manifest: Manifest; - crossServiceImports?: Set; - typeNameMapping?: Map; - responseErrorTypeName?: string; - inputShapes?: Set; - outputShapes?: Set; -} - -// Helper to determine if a field should support streaming -const shouldSupportStreaming = ( - memberName: string, - shapeName: string, -): boolean => { - return STREAMING_FIELDS.has(memberName) || STREAMING_FIELDS.has(shapeName); -}; - -// Helper to map Smithy types to TypeScript -const mapSmithyTypeToTypeScript = ( - shape: Shape, - shapeName: string, - memberName?: string, - contextShapeName?: string, - options: TypeGenOptions = {} as TypeGenOptions, -): string => { - const { - responseErrorTypeName = "ResponseError", - inputShapes, - outputShapes, - } = options; - - switch (shape.type) { - case "string": - return "string"; - case "integer": - case "long": - case "float": - case "double": - return "number"; - case "boolean": - return "boolean"; - case "timestamp": - return "Date | string"; - case "blob": - // Check if this blob should support streaming - if (memberName && shouldSupportStreaming(memberName, shapeName)) { - if (contextShapeName && inputShapes && outputShapes) { - if (outputShapes.has(contextShapeName)) { - // Output types: only Stream with ResponseError - return `Stream.Stream`; - } else if (inputShapes.has(contextShapeName)) { - // Input types: union with Buffer support and flexible Stream error type - return "Uint8Array | string | Buffer | Stream.Stream"; - } - } - // Default fallback for unknown context - return "Uint8Array | string | Stream.Stream"; - } - return "Uint8Array | string"; - case "document": - return "unknown"; - default: - return `_opaque_${shapeName}`; - } -}; - -// Helper to generate type reference from shape target -const generateTypeReference = ( - serviceName: string, - target: string, - memberName?: string, - contextShapeName?: string, - options: TypeGenOptions = {} as TypeGenOptions, -): string => { - const { - manifest, - crossServiceImports, - typeNameMapping, - responseErrorTypeName = "ResponseError", - inputShapes, - outputShapes, - } = options; - - // Handle special Smithy built-in types - if (target === "smithy.api#Unit") { - return "{}"; - } - - // Handle common Smithy built-in primitive types - if (target === "smithy.api#String") { - return "string"; - } - if ( - target === "smithy.api#Boolean" || - target === "smithy.api#PrimitiveBoolean" - ) { - return "boolean"; - } - if ( - target === "smithy.api#Integer" || - target === "smithy.api#Long" || - target === "smithy.api#PrimitiveLong" || - target === "smithy.api#Float" || - target === "smithy.api#Double" - ) { - return "number"; - } - if (target === "smithy.api#Timestamp") { - return "Date | string"; - } - if (target === "smithy.api#Blob") { - // Check if this blob should support streaming - if (memberName && shouldSupportStreaming(memberName, "")) { - if (contextShapeName && inputShapes && outputShapes) { - if (outputShapes.has(contextShapeName)) { - // Output types: only Stream with ResponseError - return `Stream.Stream`; - } else if (inputShapes.has(contextShapeName)) { - // Input types: union with Buffer support and flexible Stream error type - return "Uint8Array | string | Buffer | Stream.Stream"; - } - } - // Default fallback for unknown context - return "Uint8Array | string | Stream.Stream"; - } - return "Uint8Array | string"; - } - if (target === "smithy.api#Document") { - return "unknown"; - } - - // Check if target exists in manifest shapes - const targetShape = manifest.shapes[target]; - if (!targetShape) { - // Check if it's a cross-service reference - if (target.startsWith("com.amazonaws.") && target.includes("#")) { - const [serviceNamespace, typeName] = target.split("#"); - const serviceName = serviceNamespace.replace("com.amazonaws.", ""); - - // Add to cross-service imports if provided - if (crossServiceImports) { - crossServiceImports.add(serviceName); - } - - return typeName; - } - - // If shape doesn't exist and it's not a recognized cross-service reference, this is an error - throw new Error(`Cannot resolve type reference: ${target}`); - } - - const shapeName = extractShapeName(target); - - // Check if we have a renamed version of this type - const finalTypeName = typeNameMapping?.get(shapeName) || shapeName; +import { FileSystem, Path } from "@effect/platform"; +import { BunContext, BunRuntime } from "@effect/platform-bun"; +import { + Effect, + LogLevel, + Logger, + Schema, + Data, + Context, + Match, + Ref, +} from "effect"; +import { + SmithyModel, + ServiceShape, + GenericShape, + ShapeTypeMap, +} from "./model-schema"; +import dedent from "dedent"; + +class ModelService extends Context.Tag("ModelService")< + ModelService, + SmithyModel +>() {} + +class TypeStore extends Context.Tag("TypeStore")< + TypeStore, + { + aliases: Ref.Ref>; + errors: Ref.Ref>; + } +>() {} + +//todo(pear): don't hardcode - cli flag + default +const TEST_OUTPUT_PATH = "./src/clients.gen/s3.ts"; +const TEST_MODAL_PATH = + "D:/code/OSS/aws/api-models-aws/models/s3/service/2006-03-01/s3-2006-03-01.json"; + +//todo(pear): add this to a categeroy +//todo(pear): add details about the root error to this +export class ShapeNotFound extends Data.TaggedError("ShapeNotFound")<{ + message: string; +}> {} +export class ProtocolNotFound extends Data.TaggedError( + "ProtocolNotFound", +)<{}> {} + +//* todo(pear): better error here - most of these need to be handled +export class UnableToTransformShapeToType extends Data.TaggedError( + "UnableToTransformShapeToType", +)<{ + message: string; +}> {} + +const findServiceShape = Effect.gen(function* () { + const model = yield* ModelService; + const serviceEntry = Object.entries(model.shapes).find( + ([_, shape]) => shape.type === "service", + ); - switch (targetShape.type) { - case "string": - case "integer": - case "long": - case "float": - case "double": - case "boolean": - case "timestamp": - case "blob": - case "document": - return mapSmithyTypeToTypeScript( - targetShape, - shapeName, - memberName, - contextShapeName, - options, + return serviceEntry + ? (serviceEntry as [string, ServiceShape]) + : yield* Effect.fail( + new ShapeNotFound({ message: "service shape not found" }), ); - case "list": - if (targetShape.member) { - const memberType = generateTypeReference( - serviceName, - targetShape.member.target, - memberName, - contextShapeName, - options, - ); - return `Array<${memberType}>`; - } - return "Array"; - case "map": - if (targetShape.key && targetShape.value) { - const keyType = generateTypeReference( - serviceName, - targetShape.key.target, - undefined, - contextShapeName, - options, - ); - const keyTypeShape = manifest.shapes[targetShape.key.target]; - const valueType = generateTypeReference( - serviceName, - targetShape.value.target, - undefined, - contextShapeName, - options, - ); - if (keyTypeShape?.type === "enum") { - return `{ [key in ${keyType}]?: string }`; - } - return `Record<${keyType}, ${valueType}>`; - } - return "Record"; - case "structure": - case "union": - case "enum": - return finalTypeName; - default: - return finalTypeName; - } -}; - -// Helper to get documentation from traits -const getDocumentation = ( - traits: Record | undefined, -): string | undefined => { - if (!INCLUDE_DOCUMENTATION || !traits) return undefined; - - const docTrait = traits["smithy.api#documentation"]; - if (!docTrait || typeof docTrait !== "string") return undefined; - - // Step 1: Normalize line endings - let doc = docTrait.replace(/\r\n?/g, "\n"); - - // Step 2: Handle special sections first (before stripping other tags) - // Convert ... to **Note:** sections - doc = doc.replace(/\s*([\s\S]*?)\s*<\/note>/gi, (_, content) => { - const cleanContent = content.trim(); - return `\n\n**Note:** ${cleanContent}\n\n`; - }); - - // Convert ... to **Important:** sections - doc = doc.replace( - /\s*([\s\S]*?)\s*<\/important>/gi, - (_, content) => { - const cleanContent = content.trim(); - return `\n\n**Important:** ${cleanContent}\n\n`; - }, - ); +}); - // Step 3: Handle definition lists - doc = doc.replace(/
\s*([\s\S]*?)\s*<\/dl>/gi, (_, content) => { - let result = "\n\n"; - // Process dt/dd pairs - const processed = content.replace( - /
\s*([\s\S]*?)\s*<\/dt>\s*
\s*([\s\S]*?)\s*<\/dd>/gi, - (_match: string, term: string, definition: string) => { - const cleanTerm = term.trim(); - const cleanDef = definition.trim(); - return `**${cleanTerm}**: ${cleanDef}\n\n`; - }, +//todo(pear): cache this +function findShape( + shapeId: string, + type: T, +): Effect.Effect<[string, ShapeTypeMap[T]], ShapeNotFound, ModelService>; +function findShape( + shapeId: string, + type?: string, +): Effect.Effect<[string, GenericShape], ShapeNotFound, ModelService>; +function findShape( + shapeId: string, + type?: string, +): Effect.Effect<[string, GenericShape], ShapeNotFound, ModelService> { + const effect = Effect.gen(function* () { + const model = yield* ModelService; + const entry = Object.entries(model.shapes).find( + ([id, shape]) => + (type == null ? true : shape.type === type) && id === shapeId, ); - result += processed; - return result; - }); - - // Step 4: Handle lists - convert to markdown-style - // First, clean up paragraph tags within list items (they interfere with formatting) - doc = doc.replace(/
  • \s*([\s\S]*?)\s*<\/li>/gi, (_, content) => { - // Remove paragraph tags within list items but preserve their content - const cleanContent = content - .replace(/]*>\s*/gi, "") - .replace(/<\/p>\s*/gi, " ") - .replace(/\s+/g, " ") - .trim(); - return `
  • ${cleanContent}
  • `; - }); - // Process nested lists by handling them from inside out - // Handle unordered lists - doc = doc.replace(/