Skip to content

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.