@aws-blocks/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +174 -0
- package/dist/api.d.ts +147 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +10 -0
- package/dist/api.test.d.ts +2 -0
- package/dist/api.test.d.ts.map +1 -0
- package/dist/api.test.js +19 -0
- package/dist/bb-utils.d.ts +11 -0
- package/dist/bb-utils.d.ts.map +1 -0
- package/dist/bb-utils.js +12 -0
- package/dist/builtin-routes.d.ts +6 -0
- package/dist/builtin-routes.d.ts.map +1 -0
- package/dist/builtin-routes.js +57 -0
- package/dist/cdk/__fixtures__/factory-backend.d.ts +3 -0
- package/dist/cdk/__fixtures__/factory-backend.d.ts.map +1 -0
- package/dist/cdk/__fixtures__/factory-backend.js +6 -0
- package/dist/cdk/__fixtures__/fullid-construct-backend.d.ts +2 -0
- package/dist/cdk/__fixtures__/fullid-construct-backend.d.ts.map +1 -0
- package/dist/cdk/__fixtures__/fullid-construct-backend.js +37 -0
- package/dist/cdk/__fixtures__/handler.d.ts +5 -0
- package/dist/cdk/__fixtures__/handler.d.ts.map +1 -0
- package/dist/cdk/__fixtures__/handler.js +3 -0
- package/dist/cdk/__fixtures__/side-effect-backend.d.ts +2 -0
- package/dist/cdk/__fixtures__/side-effect-backend.d.ts.map +1 -0
- package/dist/cdk/__fixtures__/side-effect-backend.js +5 -0
- package/dist/cdk/blocks-backend.d.ts +68 -0
- package/dist/cdk/blocks-backend.d.ts.map +1 -0
- package/dist/cdk/blocks-backend.js +214 -0
- package/dist/cdk/blocks-backend.test.d.ts +2 -0
- package/dist/cdk/blocks-backend.test.d.ts.map +1 -0
- package/dist/cdk/blocks-backend.test.js +151 -0
- package/dist/cdk/blocks-stack.test.d.ts +2 -0
- package/dist/cdk/blocks-stack.test.d.ts.map +1 -0
- package/dist/cdk/blocks-stack.test.js +78 -0
- package/dist/cdk/config-registry.d.ts +26 -0
- package/dist/cdk/config-registry.d.ts.map +1 -0
- package/dist/cdk/config-registry.js +80 -0
- package/dist/cdk/index.d.ts +35 -0
- package/dist/cdk/index.d.ts.map +1 -0
- package/dist/cdk/index.js +90 -0
- package/dist/cdk/mixins.d.ts +28 -0
- package/dist/cdk/mixins.d.ts.map +1 -0
- package/dist/cdk/mixins.js +37 -0
- package/dist/cdk/mixins.test.d.ts +2 -0
- package/dist/cdk/mixins.test.d.ts.map +1 -0
- package/dist/cdk/mixins.test.js +108 -0
- package/dist/cdk/node-version.d.ts +14 -0
- package/dist/cdk/node-version.d.ts.map +1 -0
- package/dist/cdk/node-version.js +15 -0
- package/dist/cdk/stack-metadata.d.ts +12 -0
- package/dist/cdk/stack-metadata.d.ts.map +1 -0
- package/dist/cdk/stack-metadata.js +22 -0
- package/dist/cdk/stack-metadata.test.d.ts +2 -0
- package/dist/cdk/stack-metadata.test.d.ts.map +1 -0
- package/dist/cdk/stack-metadata.test.js +56 -0
- package/dist/cdk/synth-guard.d.ts +14 -0
- package/dist/cdk/synth-guard.d.ts.map +1 -0
- package/dist/cdk/synth-guard.js +20 -0
- package/dist/cdk/synth-guard.test.d.ts +2 -0
- package/dist/cdk/synth-guard.test.d.ts.map +1 -0
- package/dist/cdk/synth-guard.test.js +15 -0
- package/dist/client/index.d.ts +97 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +238 -0
- package/dist/client/index.test.d.ts +2 -0
- package/dist/client/index.test.d.ts.map +1 -0
- package/dist/client/index.test.js +113 -0
- package/dist/common/config.d.ts +45 -0
- package/dist/common/config.d.ts.map +1 -0
- package/dist/common/config.js +154 -0
- package/dist/common/config.test.d.ts +2 -0
- package/dist/common/config.test.d.ts.map +1 -0
- package/dist/common/config.test.js +173 -0
- package/dist/common/constants.d.ts +11 -0
- package/dist/common/constants.d.ts.map +1 -0
- package/dist/common/constants.js +12 -0
- package/dist/common/crypto.d.ts +6 -0
- package/dist/common/crypto.d.ts.map +1 -0
- package/dist/common/crypto.js +14 -0
- package/dist/common/index.d.ts +220 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +180 -0
- package/dist/common/index.test.d.ts +2 -0
- package/dist/common/index.test.d.ts.map +1 -0
- package/dist/common/index.test.js +195 -0
- package/dist/common/mock-data.d.ts +40 -0
- package/dist/common/mock-data.d.ts.map +1 -0
- package/dist/common/mock-data.js +39 -0
- package/dist/common/official-bb-names.generated.d.ts +7 -0
- package/dist/common/official-bb-names.generated.d.ts.map +1 -0
- package/dist/common/official-bb-names.generated.js +28 -0
- package/dist/common/sdk-registry.d.ts +136 -0
- package/dist/common/sdk-registry.d.ts.map +1 -0
- package/dist/common/sdk-registry.js +125 -0
- package/dist/constants.d.ts +27 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +28 -0
- package/dist/cors.d.ts +39 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +85 -0
- package/dist/cors.test.d.ts +2 -0
- package/dist/cors.test.d.ts.map +1 -0
- package/dist/cors.test.js +241 -0
- package/dist/db-naming.d.ts +21 -0
- package/dist/db-naming.d.ts.map +1 -0
- package/dist/db-naming.js +38 -0
- package/dist/db-naming.test.d.ts +2 -0
- package/dist/db-naming.test.d.ts.map +1 -0
- package/dist/db-naming.test.js +29 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +69 -0
- package/dist/hosting.d.ts +258 -0
- package/dist/hosting.d.ts.map +1 -0
- package/dist/hosting.js +340 -0
- package/dist/hosting.test.d.ts +2 -0
- package/dist/hosting.test.d.ts.map +1 -0
- package/dist/hosting.test.js +1077 -0
- package/dist/index.cdk.d.ts +13 -0
- package/dist/index.cdk.d.ts.map +1 -0
- package/dist/index.cdk.js +13 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/lambda-handler.d.ts +131 -0
- package/dist/lambda-handler.d.ts.map +1 -0
- package/dist/lambda-handler.js +610 -0
- package/dist/lambda-handler.test.d.ts +2 -0
- package/dist/lambda-handler.test.d.ts.map +1 -0
- package/dist/lambda-handler.test.js +835 -0
- package/dist/pipeline/index.d.ts +4 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +3 -0
- package/dist/pipeline/pipeline-construct.d.ts +130 -0
- package/dist/pipeline/pipeline-construct.d.ts.map +1 -0
- package/dist/pipeline/pipeline-construct.js +484 -0
- package/dist/pipeline/pipeline.test.d.ts +2 -0
- package/dist/pipeline/pipeline.test.d.ts.map +1 -0
- package/dist/pipeline/pipeline.test.js +1231 -0
- package/dist/pipeline/types.d.ts +351 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +3 -0
- package/dist/raw-route.cdk.d.ts +47 -0
- package/dist/raw-route.cdk.d.ts.map +1 -0
- package/dist/raw-route.cdk.js +51 -0
- package/dist/raw-route.d.ts +119 -0
- package/dist/raw-route.d.ts.map +1 -0
- package/dist/raw-route.js +239 -0
- package/dist/raw-route.mock.d.ts +47 -0
- package/dist/raw-route.mock.d.ts.map +1 -0
- package/dist/raw-route.mock.js +51 -0
- package/dist/raw-route.test.d.ts +2 -0
- package/dist/raw-route.test.d.ts.map +1 -0
- package/dist/raw-route.test.js +597 -0
- package/dist/redact.d.ts +51 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +134 -0
- package/dist/redact.test.d.ts +2 -0
- package/dist/redact.test.d.ts.map +1 -0
- package/dist/redact.test.js +199 -0
- package/dist/rpc.d.ts +54 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +127 -0
- package/dist/rpc.test.d.ts +2 -0
- package/dist/rpc.test.d.ts.map +1 -0
- package/dist/rpc.test.js +60 -0
- package/dist/scripts/cdk-telemetry-env.d.ts +13 -0
- package/dist/scripts/cdk-telemetry-env.d.ts.map +1 -0
- package/dist/scripts/cdk-telemetry-env.js +21 -0
- package/dist/scripts/cdk-telemetry-env.test.d.ts +2 -0
- package/dist/scripts/cdk-telemetry-env.test.d.ts.map +1 -0
- package/dist/scripts/cdk-telemetry-env.test.js +56 -0
- package/dist/scripts/cleanup.d.ts +3 -0
- package/dist/scripts/cleanup.d.ts.map +1 -0
- package/dist/scripts/cleanup.js +35 -0
- package/dist/scripts/console.d.ts +6 -0
- package/dist/scripts/console.d.ts.map +1 -0
- package/dist/scripts/console.js +25 -0
- package/dist/scripts/deploy.d.ts +6 -0
- package/dist/scripts/deploy.d.ts.map +1 -0
- package/dist/scripts/deploy.js +82 -0
- package/dist/scripts/destroy.d.ts +6 -0
- package/dist/scripts/destroy.d.ts.map +1 -0
- package/dist/scripts/destroy.js +30 -0
- package/dist/scripts/dev-server-cors.test.d.ts +2 -0
- package/dist/scripts/dev-server-cors.test.d.ts.map +1 -0
- package/dist/scripts/dev-server-cors.test.js +23 -0
- package/dist/scripts/dev-server-telemetry.test.d.ts +2 -0
- package/dist/scripts/dev-server-telemetry.test.d.ts.map +1 -0
- package/dist/scripts/dev-server-telemetry.test.js +113 -0
- package/dist/scripts/dev-server.d.ts +21 -0
- package/dist/scripts/dev-server.d.ts.map +1 -0
- package/dist/scripts/dev-server.js +456 -0
- package/dist/scripts/ensure-secrets.d.ts +31 -0
- package/dist/scripts/ensure-secrets.d.ts.map +1 -0
- package/dist/scripts/ensure-secrets.js +100 -0
- package/dist/scripts/ensure-secrets.test.d.ts +2 -0
- package/dist/scripts/ensure-secrets.test.d.ts.map +1 -0
- package/dist/scripts/ensure-secrets.test.js +44 -0
- package/dist/scripts/external-migrations-step.d.ts +62 -0
- package/dist/scripts/external-migrations-step.d.ts.map +1 -0
- package/dist/scripts/external-migrations-step.js +243 -0
- package/dist/scripts/external-migrations-step.test.d.ts +2 -0
- package/dist/scripts/external-migrations-step.test.d.ts.map +1 -0
- package/dist/scripts/external-migrations-step.test.js +47 -0
- package/dist/scripts/extract-ts-types.d.ts +65 -0
- package/dist/scripts/extract-ts-types.d.ts.map +1 -0
- package/dist/scripts/extract-ts-types.js +664 -0
- package/dist/scripts/extract-ts-types.test.d.ts +2 -0
- package/dist/scripts/extract-ts-types.test.d.ts.map +1 -0
- package/dist/scripts/extract-ts-types.test.js +497 -0
- package/dist/scripts/generate-client-worker.d.ts +2 -0
- package/dist/scripts/generate-client-worker.d.ts.map +1 -0
- package/dist/scripts/generate-client-worker.js +13 -0
- package/dist/scripts/generate-client.d.ts +14 -0
- package/dist/scripts/generate-client.d.ts.map +1 -0
- package/dist/scripts/generate-client.js +73 -0
- package/dist/scripts/generate-client.test.d.ts +2 -0
- package/dist/scripts/generate-client.test.d.ts.map +1 -0
- package/dist/scripts/generate-client.test.js +48 -0
- package/dist/scripts/generate-spec-cli.d.ts +3 -0
- package/dist/scripts/generate-spec-cli.d.ts.map +1 -0
- package/dist/scripts/generate-spec-cli.js +77 -0
- package/dist/scripts/generate-spec-cli.test.d.ts +14 -0
- package/dist/scripts/generate-spec-cli.test.d.ts.map +1 -0
- package/dist/scripts/generate-spec-cli.test.js +90 -0
- package/dist/scripts/generate-spec.d.ts +61 -0
- package/dist/scripts/generate-spec.d.ts.map +1 -0
- package/dist/scripts/generate-spec.js +746 -0
- package/dist/scripts/generate-spec.test.d.ts +12 -0
- package/dist/scripts/generate-spec.test.d.ts.map +1 -0
- package/dist/scripts/generate-spec.test.js +88 -0
- package/dist/scripts/index.d.ts +12 -0
- package/dist/scripts/index.d.ts.map +1 -0
- package/dist/scripts/index.js +13 -0
- package/dist/scripts/sandbox.d.ts +11 -0
- package/dist/scripts/sandbox.d.ts.map +1 -0
- package/dist/scripts/sandbox.js +200 -0
- package/dist/scripts/telemetry-cli.d.ts +3 -0
- package/dist/scripts/telemetry-cli.d.ts.map +1 -0
- package/dist/scripts/telemetry-cli.js +8 -0
- package/dist/scripts/telemetry.d.ts +17 -0
- package/dist/scripts/telemetry.d.ts.map +1 -0
- package/dist/scripts/telemetry.js +150 -0
- package/dist/scripts/telemetry.test.d.ts +2 -0
- package/dist/scripts/telemetry.test.d.ts.map +1 -0
- package/dist/scripts/telemetry.test.js +203 -0
- package/dist/scripts/validate-spec.d.ts +22 -0
- package/dist/scripts/validate-spec.d.ts.map +1 -0
- package/dist/scripts/validate-spec.js +159 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/withAuth.d.ts +142 -0
- package/dist/server/withAuth.d.ts.map +1 -0
- package/dist/server/withAuth.js +261 -0
- package/dist/server/withAuth.test.d.ts +2 -0
- package/dist/server/withAuth.test.d.ts.map +1 -0
- package/dist/server/withAuth.test.js +278 -0
- package/dist/telemetry/client.d.ts +59 -0
- package/dist/telemetry/client.d.ts.map +1 -0
- package/dist/telemetry/client.js +215 -0
- package/dist/telemetry/config-writer.d.ts +16 -0
- package/dist/telemetry/config-writer.d.ts.map +1 -0
- package/dist/telemetry/config-writer.js +36 -0
- package/dist/telemetry/consent-commands.test.d.ts +2 -0
- package/dist/telemetry/consent-commands.test.d.ts.map +1 -0
- package/dist/telemetry/consent-commands.test.js +161 -0
- package/dist/telemetry/consent.d.ts +60 -0
- package/dist/telemetry/consent.d.ts.map +1 -0
- package/dist/telemetry/consent.js +122 -0
- package/dist/telemetry/environment.d.ts +33 -0
- package/dist/telemetry/environment.d.ts.map +1 -0
- package/dist/telemetry/environment.js +87 -0
- package/dist/telemetry/identifiers.d.ts +20 -0
- package/dist/telemetry/identifiers.d.ts.map +1 -0
- package/dist/telemetry/identifiers.js +86 -0
- package/dist/telemetry/index.d.ts +6 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +4 -0
- package/dist/telemetry/telemetry.test.d.ts +2 -0
- package/dist/telemetry/telemetry.test.d.ts.map +1 -0
- package/dist/telemetry/telemetry.test.js +1131 -0
- package/dist/telemetry/trackCommand.d.ts +32 -0
- package/dist/telemetry/trackCommand.d.ts.map +1 -0
- package/dist/telemetry/trackCommand.js +102 -0
- package/dist/telemetry/types.d.ts +92 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +1 -0
- package/dist/types.d.ts +24 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/package.json +83 -0
- package/src/api.test.ts +25 -0
- package/src/api.ts +163 -0
- package/src/bb-utils.ts +13 -0
- package/src/builtin-routes.ts +62 -0
- package/src/cdk/__fixtures__/factory-backend.ts +8 -0
- package/src/cdk/__fixtures__/fullid-construct-backend.ts +42 -0
- package/src/cdk/__fixtures__/handler.ts +4 -0
- package/src/cdk/__fixtures__/side-effect-backend.ts +7 -0
- package/src/cdk/blocks-backend.test.ts +207 -0
- package/src/cdk/blocks-backend.ts +249 -0
- package/src/cdk/blocks-stack.test.ts +106 -0
- package/src/cdk/config-registry.ts +106 -0
- package/src/cdk/index.ts +115 -0
- package/src/cdk/mixins.test.ts +129 -0
- package/src/cdk/mixins.ts +41 -0
- package/src/cdk/node-version.ts +17 -0
- package/src/cdk/stack-metadata.test.ts +71 -0
- package/src/cdk/stack-metadata.ts +29 -0
- package/src/cdk/synth-guard.test.ts +21 -0
- package/src/cdk/synth-guard.ts +23 -0
- package/src/client/index.test.ts +118 -0
- package/src/client/index.ts +320 -0
- package/src/common/config.test.ts +236 -0
- package/src/common/config.ts +169 -0
- package/src/common/constants.ts +15 -0
- package/src/common/crypto.ts +15 -0
- package/src/common/index.test.ts +242 -0
- package/src/common/index.ts +335 -0
- package/src/common/mock-data.ts +52 -0
- package/src/common/official-bb-names.generated.ts +29 -0
- package/src/common/sdk-registry.ts +150 -0
- package/src/constants.ts +31 -0
- package/src/cors.test.ts +279 -0
- package/src/cors.ts +91 -0
- package/src/db-naming.test.ts +48 -0
- package/src/db-naming.ts +41 -0
- package/src/errors.ts +72 -0
- package/src/hosting.test.ts +1431 -0
- package/src/hosting.ts +626 -0
- package/src/index.cdk.ts +45 -0
- package/src/index.ts +22 -0
- package/src/lambda-handler.test.ts +1005 -0
- package/src/lambda-handler.ts +706 -0
- package/src/pipeline/index.ts +12 -0
- package/src/pipeline/pipeline-construct.ts +662 -0
- package/src/pipeline/pipeline.test.ts +1565 -0
- package/src/pipeline/types.ts +384 -0
- package/src/raw-route.cdk.ts +56 -0
- package/src/raw-route.mock.ts +56 -0
- package/src/raw-route.test.ts +819 -0
- package/src/raw-route.ts +316 -0
- package/src/redact.test.ts +222 -0
- package/src/redact.ts +143 -0
- package/src/rpc.test.ts +73 -0
- package/src/rpc.ts +174 -0
- package/src/scripts/cdk-telemetry-env.test.ts +75 -0
- package/src/scripts/cdk-telemetry-env.ts +23 -0
- package/src/scripts/cleanup.ts +39 -0
- package/src/scripts/console.ts +34 -0
- package/src/scripts/deploy.ts +106 -0
- package/src/scripts/destroy.ts +42 -0
- package/src/scripts/dev-server-cors.test.ts +28 -0
- package/src/scripts/dev-server-telemetry.test.ts +127 -0
- package/src/scripts/dev-server.ts +515 -0
- package/src/scripts/ensure-secrets.test.ts +50 -0
- package/src/scripts/ensure-secrets.ts +113 -0
- package/src/scripts/external-migrations-step.test.ts +64 -0
- package/src/scripts/external-migrations-step.ts +269 -0
- package/src/scripts/extract-ts-types.test.ts +516 -0
- package/src/scripts/extract-ts-types.ts +773 -0
- package/src/scripts/generate-client-worker.ts +15 -0
- package/src/scripts/generate-client.test.ts +69 -0
- package/src/scripts/generate-client.ts +86 -0
- package/src/scripts/generate-spec-cli.test.ts +106 -0
- package/src/scripts/generate-spec-cli.ts +92 -0
- package/src/scripts/generate-spec.test.ts +99 -0
- package/src/scripts/generate-spec.ts +833 -0
- package/src/scripts/index.ts +21 -0
- package/src/scripts/sandbox.ts +230 -0
- package/src/scripts/telemetry-cli.ts +10 -0
- package/src/scripts/telemetry.test.ts +239 -0
- package/src/scripts/telemetry.ts +173 -0
- package/src/scripts/validate-spec.ts +199 -0
- package/src/server/index.ts +5 -0
- package/src/server/withAuth.test.ts +348 -0
- package/src/server/withAuth.ts +323 -0
- package/src/telemetry/client.ts +226 -0
- package/src/telemetry/config-writer.ts +52 -0
- package/src/telemetry/consent-commands.test.ts +196 -0
- package/src/telemetry/consent.ts +154 -0
- package/src/telemetry/environment.ts +100 -0
- package/src/telemetry/identifiers.ts +94 -0
- package/src/telemetry/index.ts +11 -0
- package/src/telemetry/telemetry.test.ts +1343 -0
- package/src/telemetry/trackCommand.ts +110 -0
- package/src/telemetry/types.ts +92 -0
- package/src/types.ts +33 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
/**
|
|
5
|
+
* CLI wrapper for `writeSpec()`. Generates `aws-blocks/blocks.spec.json` from a
|
|
6
|
+
* backend entry point. Exposed as the `blocks-generate-spec` bin entry on
|
|
7
|
+
* `@aws-blocks/core`, so any Blocks app can invoke it via
|
|
8
|
+
* `npx blocks-generate-spec`.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* node dist/scripts/generate-spec-cli.js [backendPath] [outputPath]
|
|
12
|
+
*
|
|
13
|
+
* Defaults:
|
|
14
|
+
* backendPath = ./aws-blocks/index.ts
|
|
15
|
+
* outputPath = ./aws-blocks/blocks.spec.json
|
|
16
|
+
*
|
|
17
|
+
* For a TypeScript backend entry, this CLI lazily loads `tsx` and uses
|
|
18
|
+
* its programmatic `tsImport` so no extra build step is needed. JS entries
|
|
19
|
+
* use plain `import()` and don't pull tsx in.
|
|
20
|
+
*
|
|
21
|
+
* The spec emitter loads the TypeScript compiler (~1.5s of cold-start), which
|
|
22
|
+
* is why this lives in its own CLI rather than being wired into `npm run dev`.
|
|
23
|
+
* See docs/native-clients/codegen-design.md § Build pipeline.
|
|
24
|
+
*/
|
|
25
|
+
import { resolve, dirname, join } from 'node:path';
|
|
26
|
+
import { writeSpec } from './generate-spec.js';
|
|
27
|
+
/** Pick a loader based on the file extension. `.ts` / `.tsx` use tsx; everything else uses Node's native `import()`. */
|
|
28
|
+
async function selectLoader(foundationPath) {
|
|
29
|
+
if (!/\.(ts|tsx|mts|cts)$/i.test(foundationPath)) {
|
|
30
|
+
// JS entry point — let the default `import()` handle it.
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
let tsImport;
|
|
34
|
+
try {
|
|
35
|
+
// `tsx/esm/api` is a peer-style helper. We require the consuming app to
|
|
36
|
+
// have it installed (via the template's devDependencies) rather than
|
|
37
|
+
// bundling it into @aws-blocks/core, so the runtime Lambda path stays
|
|
38
|
+
// JS-only. If it's missing, fall through to the helpful error below.
|
|
39
|
+
const mod = await import('tsx/esm/api');
|
|
40
|
+
tsImport = mod.tsImport;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new Error([
|
|
44
|
+
`Cannot load TypeScript entry "${foundationPath}" — \`tsx\` is not installed.`,
|
|
45
|
+
`Install it as a devDependency:`,
|
|
46
|
+
` npm install -D tsx`,
|
|
47
|
+
`Or pass a pre-built JavaScript entry instead.`,
|
|
48
|
+
].join('\n'));
|
|
49
|
+
}
|
|
50
|
+
if (!tsImport) {
|
|
51
|
+
throw new Error(`The installed version of tsx does not export \`tsImport\` from \`tsx/esm/api\`. Upgrade to tsx ≥ 4.7.`);
|
|
52
|
+
}
|
|
53
|
+
// `tsImport` needs a `parentURL` so it can resolve relative imports inside
|
|
54
|
+
// the TS file. `import.meta.url` of *this* CLI works because the entry
|
|
55
|
+
// path we pass is absolute — the parentURL only seeds the registry.
|
|
56
|
+
const parentURL = import.meta.url;
|
|
57
|
+
return (fileUrl) => tsImport(fileUrl, parentURL);
|
|
58
|
+
}
|
|
59
|
+
async function main() {
|
|
60
|
+
const [, , backendArg, outputArg] = process.argv;
|
|
61
|
+
const backendPath = resolve(backendArg ?? './aws-blocks/index.ts');
|
|
62
|
+
const outputPath = resolve(outputArg ?? join(dirname(backendPath), 'blocks.spec.json'));
|
|
63
|
+
console.log('📝 Generating OpenRPC spec...');
|
|
64
|
+
console.log(' backend:', backendPath);
|
|
65
|
+
console.log(' output: ', outputPath);
|
|
66
|
+
try {
|
|
67
|
+
const loader = await selectLoader(backendPath);
|
|
68
|
+
await writeSpec(backendPath, outputPath, loader);
|
|
69
|
+
console.log('✅ OpenRPC spec written to', outputPath);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
73
|
+
console.error('❌ Spec generation failed:', message);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
main();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for the `blocks-generate-spec` bin.
|
|
3
|
+
*
|
|
4
|
+
* Verifies:
|
|
5
|
+
* 1. The CLI accepts a `.ts` entry point (regression for the
|
|
6
|
+
* "Unknown file extension .ts" failure that broke fresh scaffolds).
|
|
7
|
+
* 2. The CLI still accepts a `.js` entry point and does not require tsx.
|
|
8
|
+
*
|
|
9
|
+
* Spawns the bin as a child process, the same way an end user (or `npx`) would.
|
|
10
|
+
* The "tsx missing" branch is covered by manual review — it's hard to
|
|
11
|
+
* simulate inside this monorepo where `tsx` is hoisted at the workspace root.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=generate-spec-cli.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-spec-cli.test.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-spec-cli.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test for the `blocks-generate-spec` bin.
|
|
3
|
+
*
|
|
4
|
+
* Verifies:
|
|
5
|
+
* 1. The CLI accepts a `.ts` entry point (regression for the
|
|
6
|
+
* "Unknown file extension .ts" failure that broke fresh scaffolds).
|
|
7
|
+
* 2. The CLI still accepts a `.js` entry point and does not require tsx.
|
|
8
|
+
*
|
|
9
|
+
* Spawns the bin as a child process, the same way an end user (or `npx`) would.
|
|
10
|
+
* The "tsx missing" branch is covered by manual review — it's hard to
|
|
11
|
+
* simulate inside this monorepo where `tsx` is hoisted at the workspace root.
|
|
12
|
+
*/
|
|
13
|
+
import { describe, it } from 'node:test';
|
|
14
|
+
import assert from 'node:assert';
|
|
15
|
+
import { writeFileSync, mkdirSync, rmSync, readFileSync, existsSync, copyFileSync } from 'node:fs';
|
|
16
|
+
import { join, dirname } from 'node:path';
|
|
17
|
+
import { tmpdir } from 'node:os';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import { spawnSync } from 'node:child_process';
|
|
20
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
const cliPath = join(__dirname, 'generate-spec-cli.js');
|
|
22
|
+
function makeBackend(dir, ext) {
|
|
23
|
+
// Copy the marker module next to the foundation so a relative import
|
|
24
|
+
// resolves through both ESM and CJS loaders.
|
|
25
|
+
const distDir = join(__dirname, '..');
|
|
26
|
+
copyFileSync(join(distDir, 'api.js'), join(dir, 'api.js'));
|
|
27
|
+
const indexPath = join(dir, `index.${ext}`);
|
|
28
|
+
writeFileSync(indexPath, `
|
|
29
|
+
import { ApiNamespace } from './api.js';
|
|
30
|
+
|
|
31
|
+
export const api = new ApiNamespace(null, 'api', (context) => ({
|
|
32
|
+
async ping() { return { ok: true }; },
|
|
33
|
+
async echo(s) { return s; },
|
|
34
|
+
}));
|
|
35
|
+
`);
|
|
36
|
+
// tsconfig that allows JS so the spec emitter's TypeScript pass succeeds
|
|
37
|
+
// regardless of which extension the entry point uses.
|
|
38
|
+
writeFileSync(join(dir, 'tsconfig.json'), JSON.stringify({
|
|
39
|
+
compilerOptions: {
|
|
40
|
+
target: 'ESNext',
|
|
41
|
+
module: 'ESNext',
|
|
42
|
+
moduleResolution: 'bundler',
|
|
43
|
+
allowJs: true,
|
|
44
|
+
esModuleInterop: true,
|
|
45
|
+
skipLibCheck: true,
|
|
46
|
+
},
|
|
47
|
+
}));
|
|
48
|
+
return indexPath;
|
|
49
|
+
}
|
|
50
|
+
function runCli(args, env = process.env) {
|
|
51
|
+
return spawnSync(process.execPath, [cliPath, ...args], {
|
|
52
|
+
encoding: 'utf-8',
|
|
53
|
+
env,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
describe('blocks-generate-spec CLI', () => {
|
|
57
|
+
it('accepts a TypeScript entry point and emits a valid spec', async () => {
|
|
58
|
+
const dir = join(tmpdir(), `blocks-spec-cli-test-${Date.now()}-ts`);
|
|
59
|
+
mkdirSync(dir, { recursive: true });
|
|
60
|
+
const indexPath = makeBackend(dir, 'ts');
|
|
61
|
+
const outputPath = join(dir, 'blocks.spec.json');
|
|
62
|
+
try {
|
|
63
|
+
const result = runCli([indexPath, outputPath]);
|
|
64
|
+
assert.strictEqual(result.status, 0, `CLI exited ${result.status}.\nstdout:\n${result.stdout}\nstderr:\n${result.stderr}`);
|
|
65
|
+
assert.ok(existsSync(outputPath), 'spec file should exist');
|
|
66
|
+
const spec = JSON.parse(readFileSync(outputPath, 'utf-8'));
|
|
67
|
+
const methodNames = spec.methods.map((m) => m.name).sort();
|
|
68
|
+
assert.deepStrictEqual(methodNames, ['api.echo', 'api.ping']);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
rmSync(dir, { recursive: true, force: true });
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
it('accepts a JavaScript entry point (no tsx needed)', async () => {
|
|
75
|
+
const dir = join(tmpdir(), `blocks-spec-cli-test-${Date.now()}-js`);
|
|
76
|
+
mkdirSync(dir, { recursive: true });
|
|
77
|
+
const indexPath = makeBackend(dir, 'js');
|
|
78
|
+
const outputPath = join(dir, 'blocks.spec.json');
|
|
79
|
+
try {
|
|
80
|
+
const result = runCli([indexPath, outputPath]);
|
|
81
|
+
assert.strictEqual(result.status, 0, `CLI exited ${result.status}.\nstdout:\n${result.stdout}\nstderr:\n${result.stderr}`);
|
|
82
|
+
const spec = JSON.parse(readFileSync(outputPath, 'utf-8'));
|
|
83
|
+
const methodNames = spec.methods.map((m) => m.name).sort();
|
|
84
|
+
assert.deepStrictEqual(methodNames, ['api.echo', 'api.ping']);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
rmSync(dir, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
interface OpenRpcDocument {
|
|
2
|
+
openrpc: string;
|
|
3
|
+
info: {
|
|
4
|
+
title: string;
|
|
5
|
+
version: string;
|
|
6
|
+
};
|
|
7
|
+
servers?: {
|
|
8
|
+
name: string;
|
|
9
|
+
url: string;
|
|
10
|
+
}[];
|
|
11
|
+
methods: OpenRpcMethod[];
|
|
12
|
+
components?: {
|
|
13
|
+
schemas?: Record<string, JsonSchema>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
interface OpenRpcMethod {
|
|
17
|
+
name: string;
|
|
18
|
+
params: OpenRpcParam[];
|
|
19
|
+
result: OpenRpcResult;
|
|
20
|
+
}
|
|
21
|
+
interface OpenRpcParam {
|
|
22
|
+
name: string;
|
|
23
|
+
required: boolean;
|
|
24
|
+
schema: JsonSchema;
|
|
25
|
+
}
|
|
26
|
+
interface OpenRpcResult {
|
|
27
|
+
name: string;
|
|
28
|
+
schema: JsonSchema;
|
|
29
|
+
}
|
|
30
|
+
interface JsonSchema {
|
|
31
|
+
type?: string;
|
|
32
|
+
$ref?: string;
|
|
33
|
+
[key: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Discover all `ApiNamespace` exports from the backend module and build
|
|
37
|
+
* an OpenRPC document describing every method.
|
|
38
|
+
*
|
|
39
|
+
* For methods that reference Zod schemas (detected via `.parse()` calls in
|
|
40
|
+
* the function body), emits precise JSON Schema types. For plain TS methods,
|
|
41
|
+
* falls back to `{ "type": "unknown" }`.
|
|
42
|
+
*
|
|
43
|
+
* Named schemas (via `.meta({ id: 'Post' })`) are placed in
|
|
44
|
+
* `components.schemas` with `$ref` pointers. Unnamed schemas are inlined
|
|
45
|
+
* or given synthetic names like `KvGetInput`.
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* Loader for the foundation module. Defaults to plain dynamic `import()` so JS
|
|
49
|
+
* entry points work with no extra deps. The CLI overrides this with a tsx-based
|
|
50
|
+
* loader when the entry point ends in `.ts` / `.tsx`, so customers can point the
|
|
51
|
+
* spec emitter at their TypeScript source without an extra build step.
|
|
52
|
+
*/
|
|
53
|
+
export type FoundationLoader = (fileUrl: string) => Promise<Record<string, unknown>>;
|
|
54
|
+
export declare function generateSpec(foundationPath: string, loader?: FoundationLoader): Promise<OpenRpcDocument>;
|
|
55
|
+
/**
|
|
56
|
+
* Generate the OpenRPC spec, validate it, and write it to disk as `blocks.spec.json`.
|
|
57
|
+
* Logs validation warnings but does not fail — the spec is still written.
|
|
58
|
+
*/
|
|
59
|
+
export declare function writeSpec(foundationPath: string, outputPath: string, loader?: FoundationLoader): Promise<void>;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=generate-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-spec.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-spec.ts"],"names":[],"mappings":"AA2BA,UAAU,eAAe;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;KAAE,CAAC;CACtD;AAED,UAAU,aAAa;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,UAAU,aAAa;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,UAAU,UAAU;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAsKD;;;;;;;;;;;GAWG;AACH;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAIrF,wBAAsB,YAAY,CACjC,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,gBAAgC,GACtC,OAAO,CAAC,eAAe,CAAC,CAsQ1B;AAyQD;;;GAGG;AACH,wBAAsB,SAAS,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|