TypeScript feature comparison and verification¶
This project uses Powertools for AWS Lambda (TypeScript) v2.35.0, source commit 7bcc27b1574493f9452688673658f52b80c53847, as its behavioral baseline. The official source and tools/reference/package-lock.json identify the version being compared. Latest upstream documentation can describe newer behavior; it does not silently change this baseline.
Each guide maps the corresponding official feature documentation to Go APIs, shows a complete example and describes its output. Go function names, contexts, native values and error handling differ from JavaScript. The detailed mappings below distinguish implemented capabilities from remaining compatibility gates. CHECKLIST.md remains the authoritative project progress record.
How to read verification claims¶
| Evidence | What it establishes | What it does not establish |
|---|---|---|
| Source/API inspection | A Go implementation or documented alternative exists | Correctness for every argument or native value |
| TypeScript differential fixture | Recorded cases match the pinned package under the documented normalization | Exhaustive behavior or newer TypeScript versions |
| Native Go regression tests | Scope isolation, contexts, ownership, errors and concurrency covered by those tests | Race-detector equivalence; CGO remains disabled |
| Docker Lambda acceptance | The built amd64 executable produces expected logs, EMF, responses and OTLP against local fixtures | Live IAM, CloudWatch ingestion, X-Ray indexing or managed-service semantics |
| arm64 build | Source compiles for Linux arm64 with CGO disabled | Execution on arm64 |
| Historical AWS acceptance | The stated scenarios passed on their original deployment/artifacts | A fresh cloud run or service acceptance for later utilities |
No utility currently claims exhaustive cross-language parity. A checked progress item records its own acceptance criteria, not all possible TypeScript behavior.
Utility map¶
Use each guide's TypeScript feature coverage table for the individual features and its remaining-boundary section before migrating an application.
| TypeScript utility | Go guide and module | Implemented capability groups | Remaining compatibility or service gate |
|---|---|---|---|
| Logger | Logger, logger |
JSON, Lambda context, levels/ALC, attributes, children, correlation, sampling, buffering, formatters/replacers, timezone/key ordering | Complete diagnostics/configuration, native serialization, child/buffer edge cases |
| Tracer | Tracer, tracer |
Handler/operation spans, annotations/metadata, HTTP/SDK v2, capture controls, context IDs, OTel provider injection | OTel representation differs from native X-Ray; exhaustive lifecycle, freeze/timeout and service-map behavior |
| Metrics | Metrics, metrics |
EMF, units/resolution, dimension sets, multiple values, timestamps, cold start, selective clears, single metrics and multi-instance wrappers | Native metadata/types, full framework lifecycle and real CloudWatch extraction |
| Parameters | Parameters, parameters and service subpackages |
Five providers, caches/transforms, force fetch, missing values, SSM writes/batches, SDK injection | Duration/invalid-input diagnostics and live service semantics |
| Batch | Batch, batch |
SQS/FIFO/Kinesis/DynamoDB, partial failures, sequential/parallel processing, parser/custom processor composition | Exhaustive malformed input/order edges and live retry/checkpoint behavior |
| Idempotency | Idempotency, idempotency |
Operation/handler wrappers, payload projections, validation, lifecycle/leases, DynamoDB, local response cache and replay hooks | Complete canonical/native serialization, durable/platform, service and performance gates |
| Cache persistence | Redis/Valkey, idempotency/cache |
Reference record shape, acquisition/TTL, guarded orphan recovery and local bidirectional records | Deliberate validation/recovery differences; cluster/failover/server-expiry acceptance |
| JMESPath | JMESPath, jmespath |
Queries, thirteen envelopes, three decode functions, custom callbacks and Logger extraction | Decoder errors are explicit in Go; Unicode/numeric/native serialization edges |
| Parser | Parser, parser |
Manual/safe/wrapped parsing, schemas, composition, 90 mapped runtime schema definitions and fourteen envelopes | Complete inferred-type mapping, native/error metadata, primitive/encoding edges |
| Validation | Validation, validation |
Standalone/compiled/wrapped JSON Schema, extraction, formats, local references, compiler injection and Unicode regex | Complete AJV dialect/keyword/extension/error equivalence |
| HTTP | HTTP, eventhandler/http |
Event adapters, routes, middleware/store, errors, validation, binary responses and streaming | Fetch/URL/header/native/regex edges and live platform acceptance |
| HTTP observability | HTTP observability, optional eventhandler/http/metrics and eventhandler/http/tracer |
Request-scoped EMF, route spans and capture policy | Full TS middleware defaults/types and service delivery |
| AppSync Events | Events, eventhandler/appsyncevents |
Publish/subscribe, wildcard routes, aggregate processing, authorization, size diagnostics | Complete native event/output types and live AppSync acceptance |
| AppSync GraphQL | GraphQL, eventhandler/appsyncgraphql |
Field/type routes, split routers, batches, exception handling and scalar helpers | Arbitrary JS scope/native Date/error/serialization edges and live AppSync |
| Bedrock Agents | Bedrock, eventhandler/bedrock |
Function tools, parameters, response states, session attributes and diagnostics | OpenAPI action groups are not this API; native/error/encoding and live Bedrock gates |
| Kafka | Kafka, kafka |
Lazy primitives/JSON, keys/values/headers, metadata, parsing and Idempotency composition | Complete SOURCE/JSON/native/error behavior and actual Kafka event-source acceptance |
| Avro/Protobuf | Binary formats, optional kafka/avro and kafka/protobuf |
Codec adapters, schema metadata and scoped prefix handling | Exhaustive codec/schema/native values and registry/service acceptance |
| Data Masking | Masking, datamasking |
Erasure, selectors/rules, custom/dynamic masks, encryption-provider orchestration | Native structured-clone behavior, ordering/Unicode and provider scheduling edges |
| KMS masking provider | KMS provider, optional datamasking/kms |
Uncached AWS Encryption SDK provider and message interoperability | TypeScript data-key caching is not implemented; actual KMS policies/wrapping and native provider parity |
| Signer | Signer, signer |
Standalone SigV4, signed transport, credentials/region injection, replayable bodies | Fetch/native body/redirect differences and service authorization |
| Metadata | Metadata, commons/metadata |
Execution-environment metadata, cache/clear, timeout, local fallback and explicit clients | Snapshot/coalescing/redirect differences; real LMDS availability/authentication |
| Shared foundation | Commons, root and optional commons/* modules |
Environment/runtime helpers, invocation identity, Base64, merge/LRU, DynamoDB, SDK marker and shared regex | Complete JavaScript/native type, encoding and performance boundaries |
Reference evidence by feature¶
The development-only generators execute the actual pinned npm packages. Checked-in fixtures are consumed by the independently packaged Go modules; Node.js is not part of a deployed Lambda binary. Reference tooling describes generator inputs and normalization. Do not regenerate fixtures just to make an unexplained mismatch disappear.
| Feature | Go evidence entry points | Comparison detail |
|---|---|---|
| Logger | JSON comparison, sampling | Parsed JSON; timestamp normalization for initial records; deterministic sampling cases |
| Tracer | Regression tests, local acceptance | Go/OTel context, lifecycle and local export contracts; no TS native-document parity claim |
| Metrics | EMF, timestamps, wrappers | Store/diagnostic/cold/config/value/time/wrapper corpora; dimension-name normalization documented per corpus |
| Parameters | Cache/transforms, providers | Outputs plus SDK operation sequences; provider-specific boundaries retained |
| Batch | Reference scenarios | Failure responses, FIFO/groups, sequential/parallel and malformed envelopes |
| Idempotency/cache | Lifecycle/keys, cache | Canonical JSON, record lifecycle, writer differences and guarded recovery |
| Parser | Event corpora, unions | Data and recursive issue trees; JSON syntax suffix normalization is explicit |
| Validation | Reference suites | Ordered issues, keyword/format/reference/regex and condition-graph corpora |
| HTTP | Core, middleware, streaming | JSON bodies compared as values; text/binary, headers, cookies and status directly |
| AppSync/Bedrock | Events, GraphQL, Bedrock | Responses, diagnostics and calls; Bedrock body strings are not parsed/reordered |
| Kafka | Core, Avro, Protobuf | Lazy values, delivery modes and codec outputs with native representation boundaries |
| Masking | Core, regex, encryption interoperability | Erasure/provider outputs; local wrapping fixtures are not actual KMS security acceptance |
| JMESPath/Signer/Commons | Utility tests linked from JMESPath, Signer and Commons | Queries/signatures/shared primitives; deliberate Go errors/types remain explicit |
Scope corrections¶
OpenAPI generation is labelled Coming soon in the pinned HTTP documentation, and is absent from that version's runtime export audit. It is not an implemented v2.35.0 feature missing from Go. Request/response schema validation is a separate implemented feature.
Parser/Idempotency composition with Batch already exists in the maintained examples and local fixture. Metrics numeric/Date timestamps and configurable wrapper error precedence already have differential tests. Those capabilities must not remain listed as wholly unimplemented. Their exhaustive edge cases remain open.
TypeScript decorators, Middy hooks, class inheritance and Promise behavior map to explicit Go functions/interfaces/contexts. The usage patterns explain those changes. The maintained tracing backend is OpenTelemetry; the frozen tracer/xray adapter does not define new acceptance requirements.
Reproduce the accepted scope¶
From the checkout, run uv run python integration/local/run.py for packaged-module tests/vet/dependency checks, standalone consumers, both Linux architecture builds and amd64 Docker acceptance. Run uv run python integration/local/batch_report.py once against the resulting artifacts for additional saved Batch checks. The maintained runner supplies CGO_ENABLED=0; local runner details describe flags, resources and cleanup.
Do not use root go test ./... as coverage for nested modules. For module-only acceptance, use uv run python tools/modules.py check. Reuse a passing scope instead of repeating it; record skipped/reused phases explicitly. Keep newly observed mismatches and unsupported features open in project progress.
The acceptance history and sanitized reports identify the artifacts and scope of recorded runs. Browser presentation and live AWS behavior remain separate checks. Cloud testing requires an explicit request and explicit local test configuration.
Latest documentation audit¶
The 2026-10-01 combined acceptance record covers eighteen guides, nineteen compiled programs, eighteen local/direct executions, all 31 modules and 28 public consumers, both Linux builds and 868/868 RIE, 95/95 streaming and 14/14 saved Batch checks. Passed phases were reused after dependency download failures. Direct example execution complements the maintained Runtime API fixture; it does not establish live Lambda service acceptance. Browser presentation and exhaustive parity remain open.