autotel 3.5.0 → 3.7.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/dist/attribute-redacting-processor-DtTS9xxh.d.cts +175 -0
- package/dist/attribute-redacting-processor-DtTS9xxh.d.cts.map +1 -0
- package/dist/attribute-redacting-processor-DtTS9xxh.d.ts +175 -0
- package/dist/attribute-redacting-processor-DtTS9xxh.d.ts.map +1 -0
- package/dist/attribute-redacting-processor.cjs +374 -33
- package/dist/attribute-redacting-processor.cjs.map +1 -1
- package/dist/attribute-redacting-processor.d.cts +2 -207
- package/dist/attribute-redacting-processor.d.ts +2 -207
- package/dist/attribute-redacting-processor.js +368 -2
- package/dist/attribute-redacting-processor.js.map +1 -1
- package/dist/attributes-D3etyRVc.cjs +713 -0
- package/dist/attributes-D3etyRVc.cjs.map +1 -0
- package/dist/attributes-ksn4HVbd.js +600 -0
- package/dist/attributes-ksn4HVbd.js.map +1 -0
- package/dist/attributes.cjs +21 -85
- package/dist/attributes.d.cts +2 -20
- package/dist/attributes.d.ts +2 -20
- package/dist/attributes.js +3 -5
- package/dist/auto.cjs +50 -28
- package/dist/auto.cjs.map +1 -1
- package/dist/auto.d.cts +1 -2
- package/dist/auto.d.ts +1 -2
- package/dist/auto.js +49 -23
- package/dist/auto.js.map +1 -1
- package/dist/business-baggage.cjs +357 -13
- package/dist/business-baggage.cjs.map +1 -1
- package/dist/business-baggage.d.cts +106 -139
- package/dist/business-baggage.d.cts.map +1 -0
- package/dist/business-baggage.d.ts +106 -139
- package/dist/business-baggage.d.ts.map +1 -0
- package/dist/business-baggage.js +357 -2
- package/dist/business-baggage.js.map +1 -1
- package/dist/canonical-log-line-processor--RlFDHhm.cjs +377 -0
- package/dist/canonical-log-line-processor--RlFDHhm.cjs.map +1 -0
- package/dist/canonical-log-line-processor-BcRuAdRk.d.ts +147 -0
- package/dist/canonical-log-line-processor-BcRuAdRk.d.ts.map +1 -0
- package/dist/canonical-log-line-processor-DbBQT5vY.js +366 -0
- package/dist/canonical-log-line-processor-DbBQT5vY.js.map +1 -0
- package/dist/canonical-log-line-processor-xvjMgtpF.d.cts +147 -0
- package/dist/canonical-log-line-processor-xvjMgtpF.d.cts.map +1 -0
- package/dist/config.cjs +118 -22
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +33 -45
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.ts +33 -45
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +116 -3
- package/dist/config.js.map +1 -1
- package/dist/correlated-events-Bzh5y-UB.js +28 -0
- package/dist/correlated-events-Bzh5y-UB.js.map +1 -0
- package/dist/correlated-events-kSwLo3mi.cjs +34 -0
- package/dist/correlated-events-kSwLo3mi.cjs.map +1 -0
- package/dist/correlation-id.cjs +11 -53
- package/dist/correlation-id.d.cts +6 -5
- package/dist/correlation-id.d.cts.map +1 -0
- package/dist/correlation-id.d.ts +6 -5
- package/dist/correlation-id.d.ts.map +1 -0
- package/dist/correlation-id.js +3 -16
- package/dist/db.cjs +244 -209
- package/dist/db.cjs.map +1 -1
- package/dist/db.d.cts +28 -26
- package/dist/db.d.cts.map +1 -0
- package/dist/db.d.ts +28 -26
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +243 -207
- package/dist/db.js.map +1 -1
- package/dist/decorators.cjs +39 -65
- package/dist/decorators.cjs.map +1 -1
- package/dist/decorators.d.cts +10 -37
- package/dist/decorators.d.cts.map +1 -0
- package/dist/decorators.d.ts +10 -37
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +38 -63
- package/dist/decorators.js.map +1 -1
- package/dist/define-event-CreknLm3.d.ts +25 -0
- package/dist/define-event-CreknLm3.d.ts.map +1 -0
- package/dist/define-event-HZRizPwz.d.cts +25 -0
- package/dist/define-event-HZRizPwz.d.cts.map +1 -0
- package/dist/drain-pipeline.cjs +111 -9
- package/dist/drain-pipeline.cjs.map +1 -1
- package/dist/drain-pipeline.d.cts +27 -32
- package/dist/drain-pipeline.d.cts.map +1 -0
- package/dist/drain-pipeline.d.ts +27 -32
- package/dist/drain-pipeline.d.ts.map +1 -0
- package/dist/drain-pipeline.js +111 -2
- package/dist/drain-pipeline.js.map +1 -1
- package/dist/enrichers.cjs +59 -66
- package/dist/enrichers.cjs.map +1 -1
- package/dist/enrichers.d.cts +15 -13
- package/dist/enrichers.d.cts.map +1 -0
- package/dist/enrichers.d.ts +15 -13
- package/dist/enrichers.d.ts.map +1 -0
- package/dist/enrichers.js +58 -65
- package/dist/enrichers.js.map +1 -1
- package/dist/event-Dlqr4ZNL.cjs +778 -0
- package/dist/event-Dlqr4ZNL.cjs.map +1 -0
- package/dist/event-_58ryBjh.js +761 -0
- package/dist/event-_58ryBjh.js.map +1 -0
- package/dist/event-subscriber-D1XLkPzi.d.cts +223 -0
- package/dist/event-subscriber-D1XLkPzi.d.cts.map +1 -0
- package/dist/event-subscriber-D1XLkPzi.d.ts +223 -0
- package/dist/event-subscriber-D1XLkPzi.d.ts.map +1 -0
- package/dist/event-subscriber.cjs +0 -6
- package/dist/event-subscriber.d.cts +2 -221
- package/dist/event-subscriber.d.ts +2 -221
- package/dist/event-subscriber.js +1 -3
- package/dist/event-testing-BqRnI0z4.d.cts +106 -0
- package/dist/event-testing-BqRnI0z4.d.cts.map +1 -0
- package/dist/event-testing-CfFs3to2.d.ts +106 -0
- package/dist/event-testing-CfFs3to2.d.ts.map +1 -0
- package/dist/event-testing.cjs +93 -17
- package/dist/event-testing.cjs.map +1 -1
- package/dist/event-testing.d.cts +2 -110
- package/dist/event-testing.d.ts +2 -110
- package/dist/event-testing.js +91 -2
- package/dist/event-testing.js.map +1 -1
- package/dist/event.cjs +5 -36
- package/dist/event.d.cts +295 -340
- package/dist/event.d.cts.map +1 -0
- package/dist/event.d.ts +295 -340
- package/dist/event.d.ts.map +1 -0
- package/dist/event.js +3 -20
- package/dist/exporters.cjs +12 -16
- package/dist/exporters.d.cts +86 -111
- package/dist/exporters.d.cts.map +1 -0
- package/dist/exporters.d.ts +86 -111
- package/dist/exporters.d.ts.map +1 -0
- package/dist/exporters.js +4 -4
- package/dist/filtering-span-processor-B8R8B7Uk.d.cts +59 -0
- package/dist/filtering-span-processor-B8R8B7Uk.d.cts.map +1 -0
- package/dist/filtering-span-processor-B8R8B7Uk.d.ts +59 -0
- package/dist/filtering-span-processor-B8R8B7Uk.d.ts.map +1 -0
- package/dist/filtering-span-processor.cjs +49 -9
- package/dist/filtering-span-processor.cjs.map +1 -1
- package/dist/filtering-span-processor.d.cts +2 -80
- package/dist/filtering-span-processor.d.ts +2 -80
- package/dist/filtering-span-processor.js +49 -2
- package/dist/filtering-span-processor.js.map +1 -1
- package/dist/functional-BGkT8J-h.js +1265 -0
- package/dist/functional-BGkT8J-h.js.map +1 -0
- package/dist/functional-C4CzoVrX.cjs +1312 -0
- package/dist/functional-C4CzoVrX.cjs.map +1 -0
- package/dist/functional.cjs +11 -56
- package/dist/functional.d.cts +96 -97
- package/dist/functional.d.cts.map +1 -0
- package/dist/functional.d.ts +96 -97
- package/dist/functional.d.ts.map +1 -0
- package/dist/functional.js +3 -19
- package/dist/http.cjs +276 -175
- package/dist/http.cjs.map +1 -1
- package/dist/http.d.cts +17 -37
- package/dist/http.d.cts.map +1 -0
- package/dist/http.d.ts +17 -37
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +275 -173
- package/dist/http.js.map +1 -1
- package/dist/index-CX0aG1Uh.d.ts +708 -0
- package/dist/index-CX0aG1Uh.d.ts.map +1 -0
- package/dist/index-DIWZFKUS.d.cts +708 -0
- package/dist/index-DIWZFKUS.d.cts.map +1 -0
- package/dist/index.cjs +1050 -1184
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +401 -570
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +401 -570
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +913 -725
- package/dist/index.js.map +1 -1
- package/dist/init-CNp-ee80.d.cts +1157 -0
- package/dist/init-CNp-ee80.d.cts.map +1 -0
- package/dist/init-Ch6t7MNI.js +1015 -0
- package/dist/init-Ch6t7MNI.js.map +1 -0
- package/dist/init-DJQOdVlN.d.ts +1157 -0
- package/dist/init-DJQOdVlN.d.ts.map +1 -0
- package/dist/init-DvapOXCc.cjs +1092 -0
- package/dist/init-DvapOXCc.cjs.map +1 -0
- package/dist/instrumentation.cjs +159 -185
- package/dist/instrumentation.cjs.map +1 -1
- package/dist/instrumentation.d.cts +42 -40
- package/dist/instrumentation.d.cts.map +1 -0
- package/dist/instrumentation.d.ts +42 -40
- package/dist/instrumentation.d.ts.map +1 -0
- package/dist/instrumentation.js +158 -183
- package/dist/instrumentation.js.map +1 -1
- package/dist/logger-BauSUhUv.d.cts +313 -0
- package/dist/logger-BauSUhUv.d.cts.map +1 -0
- package/dist/logger-BauSUhUv.d.ts +313 -0
- package/dist/logger-BauSUhUv.d.ts.map +1 -0
- package/dist/logger.cjs +225 -25
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +2 -348
- package/dist/logger.d.ts +2 -348
- package/dist/logger.js +204 -4
- package/dist/logger.js.map +1 -1
- package/dist/messaging-adapters.cjs +292 -187
- package/dist/messaging-adapters.cjs.map +1 -1
- package/dist/messaging-adapters.d.cts +28 -66
- package/dist/messaging-adapters.d.cts.map +1 -0
- package/dist/messaging-adapters.d.ts +28 -66
- package/dist/messaging-adapters.d.ts.map +1 -0
- package/dist/messaging-adapters.js +291 -185
- package/dist/messaging-adapters.js.map +1 -1
- package/dist/messaging-testing.cjs +306 -372
- package/dist/messaging-testing.cjs.map +1 -1
- package/dist/messaging-testing.d.cts +194 -223
- package/dist/messaging-testing.d.cts.map +1 -0
- package/dist/messaging-testing.d.ts +194 -223
- package/dist/messaging-testing.d.ts.map +1 -0
- package/dist/messaging-testing.js +305 -371
- package/dist/messaging-testing.js.map +1 -1
- package/dist/messaging.cjs +757 -35
- package/dist/messaging.cjs.map +1 -1
- package/dist/messaging.d.cts +603 -644
- package/dist/messaging.d.cts.map +1 -0
- package/dist/messaging.d.ts +603 -644
- package/dist/messaging.d.ts.map +1 -0
- package/dist/messaging.js +756 -20
- package/dist/messaging.js.map +1 -1
- package/dist/metric-helpers.cjs +27 -27
- package/dist/metric-helpers.cjs.map +1 -1
- package/dist/metric-helpers.d.cts +4 -2
- package/dist/metric-helpers.d.cts.map +1 -0
- package/dist/metric-helpers.d.ts +4 -2
- package/dist/metric-helpers.d.ts.map +1 -0
- package/dist/metric-helpers.js +24 -4
- package/dist/metric-helpers.js.map +1 -1
- package/dist/metric-testing-DXdK3-Q3.d.ts +106 -0
- package/dist/metric-testing-DXdK3-Q3.d.ts.map +1 -0
- package/dist/metric-testing-MxvzChDp.d.cts +106 -0
- package/dist/metric-testing-MxvzChDp.d.cts.map +1 -0
- package/dist/metric-testing.cjs +93 -17
- package/dist/metric-testing.cjs.map +1 -1
- package/dist/metric-testing.d.cts +2 -110
- package/dist/metric-testing.d.ts +2 -110
- package/dist/metric-testing.js +91 -2
- package/dist/metric-testing.js.map +1 -1
- package/dist/metric.cjs +306 -22
- package/dist/metric.cjs.map +1 -1
- package/dist/metric.d.cts +170 -198
- package/dist/metric.d.cts.map +1 -0
- package/dist/metric.d.ts +170 -198
- package/dist/metric.d.ts.map +1 -0
- package/dist/metric.js +277 -7
- package/dist/metric.js.map +1 -1
- package/dist/node-require-DF5QBX6z.cjs +99 -0
- package/dist/node-require-DF5QBX6z.cjs.map +1 -0
- package/dist/node-require-Db1oDpLj.js +88 -0
- package/dist/node-require-Db1oDpLj.js.map +1 -0
- package/dist/operation-context-C-2hmmtP.js +59 -0
- package/dist/operation-context-C-2hmmtP.js.map +1 -0
- package/dist/operation-context-n4_obUwq.cjs +70 -0
- package/dist/operation-context-n4_obUwq.cjs.map +1 -0
- package/dist/parse-error.cjs +55 -9
- package/dist/parse-error.cjs.map +1 -1
- package/dist/parse-error.d.cts +12 -10
- package/dist/parse-error.d.cts.map +1 -0
- package/dist/parse-error.d.ts +12 -10
- package/dist/parse-error.d.ts.map +1 -0
- package/dist/parse-error.js +55 -2
- package/dist/parse-error.js.map +1 -1
- package/dist/pretty-console-exporter-CMzlrRNg.cjs +232 -0
- package/dist/pretty-console-exporter-CMzlrRNg.cjs.map +1 -0
- package/dist/pretty-console-exporter-DqKl_q9z.js +227 -0
- package/dist/pretty-console-exporter-DqKl_q9z.js.map +1 -0
- package/dist/processors.cjs +13 -17
- package/dist/processors.d.cts +3 -171
- package/dist/processors.d.ts +3 -171
- package/dist/processors.js +4 -4
- package/dist/register.cjs +35 -6
- package/dist/register.cjs.map +1 -1
- package/dist/register.d.cts +1 -2
- package/dist/register.d.ts +1 -2
- package/dist/register.js +36 -3
- package/dist/register.js.map +1 -1
- package/dist/registry-DfXA3R1L.js +184 -0
- package/dist/registry-DfXA3R1L.js.map +1 -0
- package/dist/registry-JZg2J3RZ.cjs +334 -0
- package/dist/registry-JZg2J3RZ.cjs.map +1 -0
- package/dist/sampling-CR0Va1VB.d.ts +351 -0
- package/dist/sampling-CR0Va1VB.d.ts.map +1 -0
- package/dist/sampling-DfYhDJij.d.cts +351 -0
- package/dist/sampling-DfYhDJij.d.cts.map +1 -0
- package/dist/sampling.cjs +452 -60
- package/dist/sampling.cjs.map +1 -1
- package/dist/sampling.d.cts +2 -379
- package/dist/sampling.d.ts +2 -379
- package/dist/sampling.js +441 -5
- package/dist/sampling.js.map +1 -1
- package/dist/security-schema.cjs +65 -46
- package/dist/security-schema.cjs.map +1 -1
- package/dist/security-schema.d.cts +23 -26
- package/dist/security-schema.d.cts.map +1 -0
- package/dist/security-schema.d.ts +23 -26
- package/dist/security-schema.d.ts.map +1 -0
- package/dist/security-schema.js +64 -45
- package/dist/security-schema.js.map +1 -1
- package/dist/semantic-conventions-FhSxv-bK.d.cts +32 -0
- package/dist/semantic-conventions-FhSxv-bK.d.cts.map +1 -0
- package/dist/semantic-conventions-FhSxv-bK.d.ts +32 -0
- package/dist/semantic-conventions-FhSxv-bK.d.ts.map +1 -0
- package/dist/semantic-conventions.cjs +15 -26
- package/dist/semantic-conventions.cjs.map +1 -1
- package/dist/semantic-conventions.d.cts +2 -29
- package/dist/semantic-conventions.d.ts +2 -29
- package/dist/semantic-conventions.js +12 -3
- package/dist/semantic-conventions.js.map +1 -1
- package/dist/semantic-helpers.cjs +440 -38
- package/dist/semantic-helpers.cjs.map +1 -1
- package/dist/semantic-helpers.d.cts +38 -45
- package/dist/semantic-helpers.d.cts.map +1 -0
- package/dist/semantic-helpers.d.ts +38 -45
- package/dist/semantic-helpers.d.ts.map +1 -0
- package/dist/semantic-helpers.js +438 -19
- package/dist/semantic-helpers.js.map +1 -1
- package/dist/span-name-normalizer-8ZOGJuwv.d.cts +70 -0
- package/dist/span-name-normalizer-8ZOGJuwv.d.cts.map +1 -0
- package/dist/span-name-normalizer-8ZOGJuwv.d.ts +70 -0
- package/dist/span-name-normalizer-8ZOGJuwv.d.ts.map +1 -0
- package/dist/span-name-normalizer.cjs +95 -17
- package/dist/span-name-normalizer.cjs.map +1 -1
- package/dist/span-name-normalizer.d.cts +2 -94
- package/dist/span-name-normalizer.d.ts +2 -94
- package/dist/span-name-normalizer.js +93 -2
- package/dist/span-name-normalizer.js.map +1 -1
- package/dist/stable-hash-BNTMrmdB.cjs +28 -0
- package/dist/stable-hash-BNTMrmdB.cjs.map +1 -0
- package/dist/stable-hash-Cg5cT34Q.js +23 -0
- package/dist/stable-hash-Cg5cT34Q.js.map +1 -0
- package/dist/structured-error-9--cxBay.js +143 -0
- package/dist/structured-error-9--cxBay.js.map +1 -0
- package/dist/structured-error-CHg7DoIQ.cjs +178 -0
- package/dist/structured-error-CHg7DoIQ.cjs.map +1 -0
- package/dist/tail-sampling-processor.cjs +26 -13
- package/dist/tail-sampling-processor.cjs.map +1 -1
- package/dist/tail-sampling-processor.d.cts +11 -23
- package/dist/tail-sampling-processor.d.cts.map +1 -0
- package/dist/tail-sampling-processor.d.ts +11 -23
- package/dist/tail-sampling-processor.d.ts.map +1 -0
- package/dist/tail-sampling-processor.js +27 -6
- package/dist/tail-sampling-processor.js.map +1 -1
- package/dist/test-span-collector.cjs +70 -72
- package/dist/test-span-collector.cjs.map +1 -1
- package/dist/test-span-collector.d.cts +25 -43
- package/dist/test-span-collector.d.cts.map +1 -0
- package/dist/test-span-collector.d.ts +25 -43
- package/dist/test-span-collector.d.ts.map +1 -0
- package/dist/test-span-collector.js +69 -70
- package/dist/test-span-collector.js.map +1 -1
- package/dist/testing.cjs +389 -278
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +39 -62
- package/dist/testing.d.cts.map +1 -0
- package/dist/testing.d.ts +39 -62
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +386 -265
- package/dist/testing.js.map +1 -1
- package/dist/trace-context-Cijqoi6e.d.cts +212 -0
- package/dist/trace-context-Cijqoi6e.d.cts.map +1 -0
- package/dist/trace-context-Cijqoi6e.d.ts +212 -0
- package/dist/trace-context-Cijqoi6e.d.ts.map +1 -0
- package/dist/trace-helpers.cjs +634 -54
- package/dist/trace-helpers.cjs.map +1 -1
- package/dist/trace-helpers.d.cts +17 -49
- package/dist/trace-helpers.d.cts.map +1 -0
- package/dist/trace-helpers.d.ts +17 -49
- package/dist/trace-helpers.d.ts.map +1 -0
- package/dist/trace-helpers.js +624 -3
- package/dist/trace-helpers.js.map +1 -1
- package/dist/tracer-provider.cjs +227 -16
- package/dist/tracer-provider.cjs.map +1 -1
- package/dist/tracer-provider.d.cts +5 -4
- package/dist/tracer-provider.d.cts.map +1 -0
- package/dist/tracer-provider.d.ts +5 -4
- package/dist/tracer-provider.d.ts.map +1 -0
- package/dist/tracer-provider.js +227 -2
- package/dist/tracer-provider.js.map +1 -1
- package/dist/track-3HY4NGV-.cjs +1212 -0
- package/dist/track-3HY4NGV-.cjs.map +1 -0
- package/dist/track-nsKVy-pj.js +1111 -0
- package/dist/track-nsKVy-pj.js.map +1 -0
- package/dist/validate.cjs +201 -0
- package/dist/validate.cjs.map +1 -0
- package/dist/validate.d.cts +105 -0
- package/dist/validate.d.cts.map +1 -0
- package/dist/validate.d.ts +105 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +197 -0
- package/dist/validate.js.map +1 -0
- package/dist/validation-attributes.cjs +45 -0
- package/dist/validation-attributes.cjs.map +1 -0
- package/dist/validation-attributes.d.cts +33 -0
- package/dist/validation-attributes.d.cts.map +1 -0
- package/dist/validation-attributes.d.ts +33 -0
- package/dist/validation-attributes.d.ts.map +1 -0
- package/dist/validation-attributes.js +41 -0
- package/dist/validation-attributes.js.map +1 -0
- package/dist/webhook.cjs +286 -255
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +157 -192
- package/dist/webhook.d.cts.map +1 -0
- package/dist/webhook.d.ts +157 -192
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +285 -253
- package/dist/webhook.js.map +1 -1
- package/dist/workflow-distributed.cjs +498 -411
- package/dist/workflow-distributed.cjs.map +1 -1
- package/dist/workflow-distributed.d.cts +163 -173
- package/dist/workflow-distributed.d.cts.map +1 -0
- package/dist/workflow-distributed.d.ts +163 -173
- package/dist/workflow-distributed.d.ts.map +1 -0
- package/dist/workflow-distributed.js +497 -409
- package/dist/workflow-distributed.js.map +1 -1
- package/dist/workflow.cjs +405 -39
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +78 -131
- package/dist/workflow.d.cts.map +1 -0
- package/dist/workflow.d.ts +78 -131
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +403 -20
- package/dist/workflow.js.map +1 -1
- package/dist/yaml-config-B3dQ82GR.cjs +272 -0
- package/dist/yaml-config-B3dQ82GR.cjs.map +1 -0
- package/dist/yaml-config.cjs +5 -24
- package/dist/yaml-config.d.cts +30 -64
- package/dist/yaml-config.d.cts.map +1 -0
- package/dist/yaml-config.d.ts +30 -64
- package/dist/yaml-config.d.ts.map +1 -0
- package/dist/yaml-config.js +226 -7
- package/dist/yaml-config.js.map +1 -1
- package/package.json +14 -4
- package/src/define-event.ts +2 -21
- package/src/index.ts +3 -0
- package/src/request-logger.test.ts +53 -1
- package/src/request-logger.ts +58 -0
- package/src/stable-hash.ts +27 -0
- package/src/validate.test.ts +287 -0
- package/src/validate.ts +307 -0
- package/src/validation-attributes.ts +43 -0
- package/dist/attributes.cjs.map +0 -1
- package/dist/attributes.js.map +0 -1
- package/dist/chunk-2ZKEORFN.cjs +0 -14
- package/dist/chunk-2ZKEORFN.cjs.map +0 -1
- package/dist/chunk-3QXBFGKP.js +0 -344
- package/dist/chunk-3QXBFGKP.js.map +0 -1
- package/dist/chunk-454CH4OV.js +0 -744
- package/dist/chunk-454CH4OV.js.map +0 -1
- package/dist/chunk-4A53YIAX.js +0 -180
- package/dist/chunk-4A53YIAX.js.map +0 -1
- package/dist/chunk-4IFSYQVX.js +0 -337
- package/dist/chunk-4IFSYQVX.js.map +0 -1
- package/dist/chunk-4P6ZOARG.cjs +0 -33
- package/dist/chunk-4P6ZOARG.cjs.map +0 -1
- package/dist/chunk-55ER2KD5.js +0 -228
- package/dist/chunk-55ER2KD5.js.map +0 -1
- package/dist/chunk-5ZN622AO.js +0 -73
- package/dist/chunk-5ZN622AO.js.map +0 -1
- package/dist/chunk-6S5RUKU3.cjs +0 -347
- package/dist/chunk-6S5RUKU3.cjs.map +0 -1
- package/dist/chunk-6UQRVUN3.js +0 -222
- package/dist/chunk-6UQRVUN3.js.map +0 -1
- package/dist/chunk-7552UTQW.js +0 -11
- package/dist/chunk-7552UTQW.js.map +0 -1
- package/dist/chunk-7EQ4G4SI.cjs +0 -146
- package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
- package/dist/chunk-7SAWIN74.js +0 -285
- package/dist/chunk-7SAWIN74.js.map +0 -1
- package/dist/chunk-A4E5AQFK.js +0 -30
- package/dist/chunk-A4E5AQFK.js.map +0 -1
- package/dist/chunk-AC5GNZKB.cjs +0 -344
- package/dist/chunk-AC5GNZKB.cjs.map +0 -1
- package/dist/chunk-ALPYR2GC.js +0 -1061
- package/dist/chunk-ALPYR2GC.js.map +0 -1
- package/dist/chunk-BZHG5IZ4.js +0 -73
- package/dist/chunk-BZHG5IZ4.js.map +0 -1
- package/dist/chunk-CEAQK2QY.cjs +0 -32
- package/dist/chunk-CEAQK2QY.cjs.map +0 -1
- package/dist/chunk-CMHVQR6P.js +0 -170
- package/dist/chunk-CMHVQR6P.js.map +0 -1
- package/dist/chunk-CU6IDACR.cjs +0 -224
- package/dist/chunk-CU6IDACR.cjs.map +0 -1
- package/dist/chunk-DPSA4QLA.js +0 -344
- package/dist/chunk-DPSA4QLA.js.map +0 -1
- package/dist/chunk-DQEHQNQE.js +0 -795
- package/dist/chunk-DQEHQNQE.js.map +0 -1
- package/dist/chunk-ESLWRGAG.cjs +0 -92
- package/dist/chunk-ESLWRGAG.cjs.map +0 -1
- package/dist/chunk-ESMHTKLJ.cjs +0 -206
- package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
- package/dist/chunk-FGNDN2FD.cjs +0 -1242
- package/dist/chunk-FGNDN2FD.cjs.map +0 -1
- package/dist/chunk-FU6R566Y.cjs +0 -236
- package/dist/chunk-FU6R566Y.cjs.map +0 -1
- package/dist/chunk-GBFTC7Q7.cjs +0 -837
- package/dist/chunk-GBFTC7Q7.cjs.map +0 -1
- package/dist/chunk-GYR5K654.js +0 -91
- package/dist/chunk-GYR5K654.js.map +0 -1
- package/dist/chunk-HA2WBOGQ.js +0 -57
- package/dist/chunk-HA2WBOGQ.js.map +0 -1
- package/dist/chunk-HT5JQKN2.js +0 -118
- package/dist/chunk-HT5JQKN2.js.map +0 -1
- package/dist/chunk-INJD3G4K.cjs +0 -340
- package/dist/chunk-INJD3G4K.cjs.map +0 -1
- package/dist/chunk-IOYFAFHJ.cjs +0 -95
- package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
- package/dist/chunk-J5QENANM.js +0 -87
- package/dist/chunk-J5QENANM.js.map +0 -1
- package/dist/chunk-J7VGRIAJ.js +0 -64
- package/dist/chunk-J7VGRIAJ.js.map +0 -1
- package/dist/chunk-KFOHQK7X.js +0 -144
- package/dist/chunk-KFOHQK7X.js.map +0 -1
- package/dist/chunk-KIL5CUN6.js +0 -31
- package/dist/chunk-KIL5CUN6.js.map +0 -1
- package/dist/chunk-LITNXTTT.js +0 -3
- package/dist/chunk-LITNXTTT.js.map +0 -1
- package/dist/chunk-M3LFHHTN.cjs +0 -764
- package/dist/chunk-M3LFHHTN.cjs.map +0 -1
- package/dist/chunk-NEIB3TLD.cjs +0 -360
- package/dist/chunk-NEIB3TLD.cjs.map +0 -1
- package/dist/chunk-NVAI5CCN.cjs +0 -39
- package/dist/chunk-NVAI5CCN.cjs.map +0 -1
- package/dist/chunk-NVGPMGI4.js +0 -95
- package/dist/chunk-NVGPMGI4.js.map +0 -1
- package/dist/chunk-NZ72VDNY.cjs +0 -4
- package/dist/chunk-NZ72VDNY.cjs.map +0 -1
- package/dist/chunk-O4JZUCUE.js +0 -1174
- package/dist/chunk-O4JZUCUE.js.map +0 -1
- package/dist/chunk-O7JOKRN2.js +0 -833
- package/dist/chunk-O7JOKRN2.js.map +0 -1
- package/dist/chunk-OPPXYVEZ.cjs +0 -131
- package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
- package/dist/chunk-Q4EULJQY.js +0 -35
- package/dist/chunk-Q4EULJQY.js.map +0 -1
- package/dist/chunk-QWW3E3JM.cjs +0 -178
- package/dist/chunk-QWW3E3JM.cjs.map +0 -1
- package/dist/chunk-R7QYGZUP.cjs +0 -1075
- package/dist/chunk-R7QYGZUP.cjs.map +0 -1
- package/dist/chunk-RUPKBKUF.js +0 -352
- package/dist/chunk-RUPKBKUF.js.map +0 -1
- package/dist/chunk-SEO6NAQT.js +0 -14
- package/dist/chunk-SEO6NAQT.js.map +0 -1
- package/dist/chunk-T4B5LB6E.cjs +0 -66
- package/dist/chunk-T4B5LB6E.cjs.map +0 -1
- package/dist/chunk-TC5ZPWM4.cjs +0 -289
- package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
- package/dist/chunk-TQ5UWA7S.js +0 -26
- package/dist/chunk-TQ5UWA7S.js.map +0 -1
- package/dist/chunk-URHPSJW2.js +0 -339
- package/dist/chunk-URHPSJW2.js.map +0 -1
- package/dist/chunk-UY3UYPBZ.cjs +0 -77
- package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
- package/dist/chunk-VG2ABKJX.cjs +0 -100
- package/dist/chunk-VG2ABKJX.cjs.map +0 -1
- package/dist/chunk-VH77IPJN.cjs +0 -358
- package/dist/chunk-VH77IPJN.cjs.map +0 -1
- package/dist/chunk-VQTCQKHQ.cjs +0 -17
- package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
- package/dist/chunk-WGWSHJ2N.js +0 -38
- package/dist/chunk-WGWSHJ2N.js.map +0 -1
- package/dist/chunk-WJH6IYU2.cjs +0 -32
- package/dist/chunk-WJH6IYU2.cjs.map +0 -1
- package/dist/chunk-YREV3LGG.cjs +0 -61
- package/dist/chunk-YREV3LGG.cjs.map +0 -1
- package/dist/chunk-YTXEZ4SD.cjs +0 -77
- package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
- package/dist/chunk-YWCESU4Y.js +0 -1233
- package/dist/chunk-YWCESU4Y.js.map +0 -1
- package/dist/chunk-Z6HRSM2Y.cjs +0 -799
- package/dist/chunk-Z6HRSM2Y.cjs.map +0 -1
- package/dist/chunk-Z7PW3KHL.cjs +0 -1198
- package/dist/chunk-Z7PW3KHL.cjs.map +0 -1
- package/dist/chunk-ZNMBW67B.cjs +0 -40
- package/dist/chunk-ZNMBW67B.cjs.map +0 -1
- package/dist/correlation-id.cjs.map +0 -1
- package/dist/correlation-id.js.map +0 -1
- package/dist/event-subscriber.cjs.map +0 -1
- package/dist/event-subscriber.js.map +0 -1
- package/dist/event.cjs.map +0 -1
- package/dist/event.js.map +0 -1
- package/dist/exporters.cjs.map +0 -1
- package/dist/exporters.js.map +0 -1
- package/dist/functional.cjs.map +0 -1
- package/dist/functional.js.map +0 -1
- package/dist/init-DIowiiCh.d.ts +0 -1167
- package/dist/init-j-A1zI16.d.cts +0 -1167
- package/dist/processors.cjs.map +0 -1
- package/dist/processors.js.map +0 -1
- package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
- package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
- package/dist/utils-BahBCFtJ.d.cts +0 -712
- package/dist/utils-CLKwaUlG.d.ts +0 -712
- package/dist/yaml-config.cjs.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
2
|
+
import { Context } from "@opentelemetry/api";
|
|
3
|
+
|
|
4
|
+
//#region src/span-name-normalizer.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Function to normalize a span name
|
|
7
|
+
* @param name - The original span name
|
|
8
|
+
* @returns The normalized span name
|
|
9
|
+
*/
|
|
10
|
+
type SpanNameNormalizerFn = (name: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* Built-in normalizer preset names
|
|
13
|
+
*/
|
|
14
|
+
type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';
|
|
15
|
+
/**
|
|
16
|
+
* Normalizer config - either a function or a preset name
|
|
17
|
+
*/
|
|
18
|
+
type SpanNameNormalizerConfig = SpanNameNormalizerFn | SpanNameNormalizerPreset;
|
|
19
|
+
interface SpanNameNormalizingProcessorOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Normalizer function or preset name
|
|
22
|
+
*/
|
|
23
|
+
normalizer: SpanNameNormalizerConfig;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Built-in normalizer patterns
|
|
27
|
+
*/
|
|
28
|
+
declare const NORMALIZER_PATTERNS: {
|
|
29
|
+
readonly numericId: RegExp;
|
|
30
|
+
readonly uuid: RegExp;
|
|
31
|
+
readonly shortUuid: RegExp;
|
|
32
|
+
readonly objectId: RegExp;
|
|
33
|
+
readonly hash: RegExp;
|
|
34
|
+
readonly isoDate: RegExp;
|
|
35
|
+
readonly timestamp: RegExp;
|
|
36
|
+
readonly email: RegExp;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Built-in normalizer presets
|
|
40
|
+
*/
|
|
41
|
+
declare const NORMALIZER_PRESETS: Record<SpanNameNormalizerPreset, SpanNameNormalizerFn>;
|
|
42
|
+
/**
|
|
43
|
+
* Span processor that normalizes span names to reduce cardinality.
|
|
44
|
+
*
|
|
45
|
+
* Normalization happens in onStart() when we have access to the mutable Span.
|
|
46
|
+
* This allows us to call span.updateName() before the span is finalized.
|
|
47
|
+
*
|
|
48
|
+
* Common use cases:
|
|
49
|
+
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
|
|
50
|
+
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
|
|
51
|
+
* - Dates: /logs/2024-01-15 → /logs/:date
|
|
52
|
+
*/
|
|
53
|
+
declare class SpanNameNormalizingProcessor implements SpanProcessor {
|
|
54
|
+
private readonly wrappedProcessor;
|
|
55
|
+
private readonly normalizer;
|
|
56
|
+
constructor(wrappedProcessor: SpanProcessor, options: SpanNameNormalizingProcessorOptions);
|
|
57
|
+
/**
|
|
58
|
+
* Normalize span name on start (when Span is mutable)
|
|
59
|
+
*/
|
|
60
|
+
onStart(span: Span, parentContext: Context): void;
|
|
61
|
+
/**
|
|
62
|
+
* Pass through onEnd unchanged
|
|
63
|
+
*/
|
|
64
|
+
onEnd(span: ReadableSpan): void;
|
|
65
|
+
forceFlush(): Promise<void>;
|
|
66
|
+
shutdown(): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { SpanNameNormalizerPreset as a, SpanNameNormalizerFn as i, NORMALIZER_PRESETS as n, SpanNameNormalizingProcessor as o, SpanNameNormalizerConfig as r, SpanNameNormalizingProcessorOptions as s, NORMALIZER_PATTERNS as t };
|
|
70
|
+
//# sourceMappingURL=span-name-normalizer-8ZOGJuwv.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-name-normalizer-8ZOGJuwv.d.cts","names":[],"sources":["../src/span-name-normalizer.ts"],"mappings":";;;;;;;;;KAsCY,oBAAA,IAAwB,IAAY;;;;KAKpC,wBAAA;;;;KAKA,wBAAA,GACR,oBAAA,GACA,wBAAwB;AAAA,UAEX,mCAAA;;;;EAIf,UAAA,EAAY,wBAAwB;AAAA;;;;cAMhC,mBAAA;EAAA;;;;;;;;;;;;cA6BA,kBAAA,EAAoB,MAAA,CACxB,wBAAA,EACA,oBAAA;;;AAAoB;AAsEtB;;;;;;;;cAAa,4BAAA,YAAwC,aAAA;EAAA,iBAClC,gBAAA;EAAA,iBACA,UAAA;cAGf,gBAAA,EAAkB,aAAA,EAClB,OAAA,EAAS,mCAAA;EANqD;;;EAehE,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,aAAA,EAAe,OAAA;;;;EAkBnC,KAAA,CAAM,IAAA,EAAM,YAAA;EAIZ,UAAA,IAAc,OAAA;EAId,QAAA,IAAY,OAAA;AAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
2
|
+
import { Context } from "@opentelemetry/api";
|
|
3
|
+
|
|
4
|
+
//#region src/span-name-normalizer.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Function to normalize a span name
|
|
7
|
+
* @param name - The original span name
|
|
8
|
+
* @returns The normalized span name
|
|
9
|
+
*/
|
|
10
|
+
type SpanNameNormalizerFn = (name: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* Built-in normalizer preset names
|
|
13
|
+
*/
|
|
14
|
+
type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';
|
|
15
|
+
/**
|
|
16
|
+
* Normalizer config - either a function or a preset name
|
|
17
|
+
*/
|
|
18
|
+
type SpanNameNormalizerConfig = SpanNameNormalizerFn | SpanNameNormalizerPreset;
|
|
19
|
+
interface SpanNameNormalizingProcessorOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Normalizer function or preset name
|
|
22
|
+
*/
|
|
23
|
+
normalizer: SpanNameNormalizerConfig;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Built-in normalizer patterns
|
|
27
|
+
*/
|
|
28
|
+
declare const NORMALIZER_PATTERNS: {
|
|
29
|
+
readonly numericId: RegExp;
|
|
30
|
+
readonly uuid: RegExp;
|
|
31
|
+
readonly shortUuid: RegExp;
|
|
32
|
+
readonly objectId: RegExp;
|
|
33
|
+
readonly hash: RegExp;
|
|
34
|
+
readonly isoDate: RegExp;
|
|
35
|
+
readonly timestamp: RegExp;
|
|
36
|
+
readonly email: RegExp;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Built-in normalizer presets
|
|
40
|
+
*/
|
|
41
|
+
declare const NORMALIZER_PRESETS: Record<SpanNameNormalizerPreset, SpanNameNormalizerFn>;
|
|
42
|
+
/**
|
|
43
|
+
* Span processor that normalizes span names to reduce cardinality.
|
|
44
|
+
*
|
|
45
|
+
* Normalization happens in onStart() when we have access to the mutable Span.
|
|
46
|
+
* This allows us to call span.updateName() before the span is finalized.
|
|
47
|
+
*
|
|
48
|
+
* Common use cases:
|
|
49
|
+
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
|
|
50
|
+
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
|
|
51
|
+
* - Dates: /logs/2024-01-15 → /logs/:date
|
|
52
|
+
*/
|
|
53
|
+
declare class SpanNameNormalizingProcessor implements SpanProcessor {
|
|
54
|
+
private readonly wrappedProcessor;
|
|
55
|
+
private readonly normalizer;
|
|
56
|
+
constructor(wrappedProcessor: SpanProcessor, options: SpanNameNormalizingProcessorOptions);
|
|
57
|
+
/**
|
|
58
|
+
* Normalize span name on start (when Span is mutable)
|
|
59
|
+
*/
|
|
60
|
+
onStart(span: Span, parentContext: Context): void;
|
|
61
|
+
/**
|
|
62
|
+
* Pass through onEnd unchanged
|
|
63
|
+
*/
|
|
64
|
+
onEnd(span: ReadableSpan): void;
|
|
65
|
+
forceFlush(): Promise<void>;
|
|
66
|
+
shutdown(): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { SpanNameNormalizerPreset as a, SpanNameNormalizerFn as i, NORMALIZER_PRESETS as n, SpanNameNormalizingProcessor as o, SpanNameNormalizerConfig as r, SpanNameNormalizingProcessorOptions as s, NORMALIZER_PATTERNS as t };
|
|
70
|
+
//# sourceMappingURL=span-name-normalizer-8ZOGJuwv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-name-normalizer-8ZOGJuwv.d.ts","names":[],"sources":["../src/span-name-normalizer.ts"],"mappings":";;;;;;;;;KAsCY,oBAAA,IAAwB,IAAY;;;;KAKpC,wBAAA;;;;KAKA,wBAAA,GACR,oBAAA,GACA,wBAAwB;AAAA,UAEX,mCAAA;;;;EAIf,UAAA,EAAY,wBAAwB;AAAA;;;;cAMhC,mBAAA;EAAA;;;;;;;;;;;;cA6BA,kBAAA,EAAoB,MAAA,CACxB,wBAAA,EACA,oBAAA;;;AAAoB;AAsEtB;;;;;;;;cAAa,4BAAA,YAAwC,aAAA;EAAA,iBAClC,gBAAA;EAAA,iBACA,UAAA;cAGf,gBAAA,EAAkB,aAAA,EAClB,OAAA,EAAS,mCAAA;EANqD;;;EAehE,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,aAAA,EAAe,OAAA;;;;EAkBnC,KAAA,CAAM,IAAA,EAAM,YAAA;EAIZ,UAAA,IAAc,OAAA;EAId,QAAA,IAAY,OAAA;AAAA"}
|
|
@@ -1,20 +1,98 @@
|
|
|
1
|
-
'
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
//#region src/span-name-normalizer.ts
|
|
4
|
+
/**
|
|
5
|
+
* Built-in normalizer patterns
|
|
6
|
+
*/
|
|
7
|
+
const NORMALIZER_PATTERNS = {
|
|
8
|
+
numericId: /\/\d+(?=\/|$)/g,
|
|
9
|
+
uuid: /\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\/|$)/gi,
|
|
10
|
+
shortUuid: /\/[0-9a-f]{32}(?=\/|$)/gi,
|
|
11
|
+
objectId: /\/[0-9a-f]{24}(?=\/|$)/gi,
|
|
12
|
+
hash: /\/[0-9a-f]{6,}(?=\.[a-z]+$)/gi,
|
|
13
|
+
isoDate: /\/\d{4}-\d{2}-\d{2}(?=\/|$)/g,
|
|
14
|
+
timestamp: /\/1[0-9]{9}(?=\/|$)/g,
|
|
15
|
+
email: /\/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?=\/|$)/g
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Built-in normalizer presets
|
|
19
|
+
*/
|
|
20
|
+
const NORMALIZER_PRESETS = {
|
|
21
|
+
/**
|
|
22
|
+
* REST API preset - normalizes common REST path patterns
|
|
23
|
+
* Handles: numeric IDs, UUIDs, ObjectIds, dates, timestamps, emails
|
|
24
|
+
*/
|
|
25
|
+
"rest-api": (name) => {
|
|
26
|
+
return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.shortUuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.objectId, "/:objectId").replaceAll(NORMALIZER_PATTERNS.isoDate, "/:date").replaceAll(NORMALIZER_PATTERNS.timestamp, "/:timestamp").replaceAll(NORMALIZER_PATTERNS.email, "/:email").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id");
|
|
27
|
+
},
|
|
28
|
+
/**
|
|
29
|
+
* GraphQL preset - normalizes GraphQL operation names and paths
|
|
30
|
+
* Keeps query/mutation names but normalizes embedded IDs
|
|
31
|
+
*/
|
|
32
|
+
graphql: (name) => {
|
|
33
|
+
return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id");
|
|
34
|
+
},
|
|
35
|
+
/**
|
|
36
|
+
* Minimal preset - only normalizes numeric IDs and UUIDs
|
|
37
|
+
*/
|
|
38
|
+
minimal: (name) => {
|
|
39
|
+
return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id");
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Resolve normalizer config to a function
|
|
44
|
+
*/
|
|
45
|
+
function resolveNormalizer(config) {
|
|
46
|
+
if (typeof config === "function") return config;
|
|
47
|
+
const preset = NORMALIZER_PRESETS[config];
|
|
48
|
+
if (!preset) throw new Error(`Unknown span name normalizer preset: "${config}". Available presets: ${Object.keys(NORMALIZER_PRESETS).join(", ")}`);
|
|
49
|
+
return preset;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Span processor that normalizes span names to reduce cardinality.
|
|
53
|
+
*
|
|
54
|
+
* Normalization happens in onStart() when we have access to the mutable Span.
|
|
55
|
+
* This allows us to call span.updateName() before the span is finalized.
|
|
56
|
+
*
|
|
57
|
+
* Common use cases:
|
|
58
|
+
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
|
|
59
|
+
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
|
|
60
|
+
* - Dates: /logs/2024-01-15 → /logs/:date
|
|
61
|
+
*/
|
|
62
|
+
var SpanNameNormalizingProcessor = class {
|
|
63
|
+
wrappedProcessor;
|
|
64
|
+
normalizer;
|
|
65
|
+
constructor(wrappedProcessor, options) {
|
|
66
|
+
this.wrappedProcessor = wrappedProcessor;
|
|
67
|
+
this.normalizer = resolveNormalizer(options.normalizer);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Normalize span name on start (when Span is mutable)
|
|
71
|
+
*/
|
|
72
|
+
onStart(span, parentContext) {
|
|
73
|
+
try {
|
|
74
|
+
const originalName = span.name;
|
|
75
|
+
const normalizedName = this.normalizer(originalName);
|
|
76
|
+
if (normalizedName !== originalName) span.updateName(normalizedName);
|
|
77
|
+
} catch {}
|
|
78
|
+
this.wrappedProcessor.onStart(span, parentContext);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Pass through onEnd unchanged
|
|
82
|
+
*/
|
|
83
|
+
onEnd(span) {
|
|
84
|
+
this.wrappedProcessor.onEnd(span);
|
|
85
|
+
}
|
|
86
|
+
forceFlush() {
|
|
87
|
+
return this.wrappedProcessor.forceFlush();
|
|
88
|
+
}
|
|
89
|
+
shutdown() {
|
|
90
|
+
return this.wrappedProcessor.shutdown();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
4
93
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
get: function () { return chunkIOYFAFHJ_cjs.NORMALIZER_PATTERNS; }
|
|
10
|
-
});
|
|
11
|
-
Object.defineProperty(exports, "NORMALIZER_PRESETS", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
get: function () { return chunkIOYFAFHJ_cjs.NORMALIZER_PRESETS; }
|
|
14
|
-
});
|
|
15
|
-
Object.defineProperty(exports, "SpanNameNormalizingProcessor", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: function () { return chunkIOYFAFHJ_cjs.SpanNameNormalizingProcessor; }
|
|
18
|
-
});
|
|
19
|
-
//# sourceMappingURL=span-name-normalizer.cjs.map
|
|
94
|
+
//#endregion
|
|
95
|
+
exports.NORMALIZER_PATTERNS = NORMALIZER_PATTERNS;
|
|
96
|
+
exports.NORMALIZER_PRESETS = NORMALIZER_PRESETS;
|
|
97
|
+
exports.SpanNameNormalizingProcessor = SpanNameNormalizingProcessor;
|
|
20
98
|
//# sourceMappingURL=span-name-normalizer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"span-name-normalizer.cjs","names":[],"sources":["../src/span-name-normalizer.ts"],"sourcesContent":["/**\n * Span Name Normalizer\n *\n * Normalizes span names to reduce cardinality from dynamic path segments.\n * This is critical for observability backends that charge by unique span names\n * or have cardinality limits.\n *\n * @example Basic usage with custom function\n * ```typescript\n * init({\n * service: 'my-app',\n * spanNameNormalizer: (name) => {\n * return name.replace(/\\/[0-9]+/g, '/:id');\n * }\n * })\n * ```\n *\n * @example Using built-in preset\n * ```typescript\n * init({\n * service: 'my-app',\n * spanNameNormalizer: 'rest-api'\n * })\n * ```\n */\n\nimport type {\n SpanProcessor,\n ReadableSpan,\n} from '@opentelemetry/sdk-trace-base';\nimport type { Context } from '@opentelemetry/api';\nimport type { Span } from '@opentelemetry/sdk-trace-base';\n\n/**\n * Function to normalize a span name\n * @param name - The original span name\n * @returns The normalized span name\n */\nexport type SpanNameNormalizerFn = (name: string) => string;\n\n/**\n * Built-in normalizer preset names\n */\nexport type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';\n\n/**\n * Normalizer config - either a function or a preset name\n */\nexport type SpanNameNormalizerConfig =\n | SpanNameNormalizerFn\n | SpanNameNormalizerPreset;\n\nexport interface SpanNameNormalizingProcessorOptions {\n /**\n * Normalizer function or preset name\n */\n normalizer: SpanNameNormalizerConfig;\n}\n\n/**\n * Built-in normalizer patterns\n */\nconst NORMALIZER_PATTERNS = {\n // Numeric IDs: /users/123 → /users/:id\n numericId: /\\/\\d+(?=\\/|$)/g,\n\n // UUIDs: /users/550e8400-e29b-41d4-a716-446655440000 → /users/:uuid\n uuid: /\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\\/|$)/gi,\n\n // Short UUIDs (without dashes): /users/550e8400e29b41d4a716446655440000 → /users/:uuid\n shortUuid: /\\/[0-9a-f]{32}(?=\\/|$)/gi,\n\n // MongoDB ObjectIds: /docs/507f1f77bcf86cd799439011 → /docs/:objectId\n objectId: /\\/[0-9a-f]{24}(?=\\/|$)/gi,\n\n // Hashes (6+ hex chars): /assets/abc123def.js → /assets/:hash.js\n hash: /\\/[0-9a-f]{6,}(?=\\.[a-z]+$)/gi,\n\n // ISO dates: /logs/2024-01-15 → /logs/:date\n isoDate: /\\/\\d{4}-\\d{2}-\\d{2}(?=\\/|$)/g,\n\n // Timestamps: /events/1705334400 → /events/:timestamp\n timestamp: /\\/1[0-9]{9}(?=\\/|$)/g,\n\n // Email-like segments: /users/john@example.com → /users/:email\n email: /\\/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(?=\\/|$)/g,\n} as const;\n\n/**\n * Built-in normalizer presets\n */\nconst NORMALIZER_PRESETS: Record<\n SpanNameNormalizerPreset,\n SpanNameNormalizerFn\n> = {\n /**\n * REST API preset - normalizes common REST path patterns\n * Handles: numeric IDs, UUIDs, ObjectIds, dates, timestamps, emails\n */\n 'rest-api': (name: string): string => {\n return name\n .replaceAll(NORMALIZER_PATTERNS.uuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.shortUuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.objectId, '/:objectId')\n .replaceAll(NORMALIZER_PATTERNS.isoDate, '/:date')\n .replaceAll(NORMALIZER_PATTERNS.timestamp, '/:timestamp')\n .replaceAll(NORMALIZER_PATTERNS.email, '/:email')\n .replaceAll(NORMALIZER_PATTERNS.numericId, '/:id');\n },\n\n /**\n * GraphQL preset - normalizes GraphQL operation names and paths\n * Keeps query/mutation names but normalizes embedded IDs\n */\n graphql: (name: string): string => {\n // For GraphQL, normalize both path-style and embedded IDs\n return name\n .replaceAll(NORMALIZER_PATTERNS.uuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.numericId, '/:id');\n },\n\n /**\n * Minimal preset - only normalizes numeric IDs and UUIDs\n */\n minimal: (name: string): string => {\n return name\n .replaceAll(NORMALIZER_PATTERNS.uuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.numericId, '/:id');\n },\n};\n\n/**\n * Resolve normalizer config to a function\n */\nfunction resolveNormalizer(\n config: SpanNameNormalizerConfig,\n): SpanNameNormalizerFn {\n if (typeof config === 'function') {\n return config;\n }\n\n const preset = NORMALIZER_PRESETS[config];\n if (!preset) {\n throw new Error(\n `Unknown span name normalizer preset: \"${config}\". ` +\n `Available presets: ${Object.keys(NORMALIZER_PRESETS).join(', ')}`,\n );\n }\n\n return preset;\n}\n\n/**\n * Span processor that normalizes span names to reduce cardinality.\n *\n * Normalization happens in onStart() when we have access to the mutable Span.\n * This allows us to call span.updateName() before the span is finalized.\n *\n * Common use cases:\n * - REST APIs: /users/123/posts/456 → /users/:id/posts/:id\n * - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid\n * - Dates: /logs/2024-01-15 → /logs/:date\n */\nexport class SpanNameNormalizingProcessor implements SpanProcessor {\n private readonly wrappedProcessor: SpanProcessor;\n private readonly normalizer: SpanNameNormalizerFn;\n\n constructor(\n wrappedProcessor: SpanProcessor,\n options: SpanNameNormalizingProcessorOptions,\n ) {\n this.wrappedProcessor = wrappedProcessor;\n this.normalizer = resolveNormalizer(options.normalizer);\n }\n\n /**\n * Normalize span name on start (when Span is mutable)\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n const originalName = span.name;\n const normalizedName = this.normalizer(originalName);\n\n if (normalizedName !== originalName) {\n span.updateName(normalizedName);\n }\n } catch {\n // If normalizer throws, keep original name (fail-open)\n }\n\n this.wrappedProcessor.onStart(span, parentContext);\n }\n\n /**\n * Pass through onEnd unchanged\n */\n onEnd(span: ReadableSpan): void {\n this.wrappedProcessor.onEnd(span);\n }\n\n forceFlush(): Promise<void> {\n return this.wrappedProcessor.forceFlush();\n }\n\n shutdown(): Promise<void> {\n return this.wrappedProcessor.shutdown();\n }\n}\n\n/**\n * Export built-in patterns for advanced users who want to compose their own normalizers\n */\nexport { NORMALIZER_PATTERNS, NORMALIZER_PRESETS };\n"],"mappings":";;;;;;AA8DA,MAAM,sBAAsB;CAE1B,WAAW;CAGX,MAAM;CAGN,WAAW;CAGX,UAAU;CAGV,MAAM;CAGN,SAAS;CAGT,WAAW;CAGX,OAAO;AACT;;;;AAKA,MAAM,qBAGF;;;;;CAKF,aAAa,SAAyB;EACpC,OAAO,KACJ,WAAW,oBAAoB,MAAM,QAAQ,CAAC,CAC9C,WAAW,oBAAoB,WAAW,QAAQ,CAAC,CACnD,WAAW,oBAAoB,UAAU,YAAY,CAAC,CACtD,WAAW,oBAAoB,SAAS,QAAQ,CAAC,CACjD,WAAW,oBAAoB,WAAW,aAAa,CAAC,CACxD,WAAW,oBAAoB,OAAO,SAAS,CAAC,CAChD,WAAW,oBAAoB,WAAW,MAAM;CACrD;;;;;CAMA,UAAU,SAAyB;EAEjC,OAAO,KACJ,WAAW,oBAAoB,MAAM,QAAQ,CAAC,CAC9C,WAAW,oBAAoB,WAAW,MAAM;CACrD;;;;CAKA,UAAU,SAAyB;EACjC,OAAO,KACJ,WAAW,oBAAoB,MAAM,QAAQ,CAAC,CAC9C,WAAW,oBAAoB,WAAW,MAAM;CACrD;AACF;;;;AAKA,SAAS,kBACP,QACsB;CACtB,IAAI,OAAO,WAAW,YACpB,OAAO;CAGT,MAAM,SAAS,mBAAmB;CAClC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,yCAAyC,OAAO,wBACxB,OAAO,KAAK,kBAAkB,CAAC,CAAC,KAAK,IAAI,GACnE;CAGF,OAAO;AACT;;;;;;;;;;;;AAaA,IAAa,+BAAb,MAAmE;CACjE,AAAiB;CACjB,AAAiB;CAEjB,YACE,kBACA,SACA;EACA,KAAK,mBAAmB;EACxB,KAAK,aAAa,kBAAkB,QAAQ,UAAU;CACxD;;;;CAKA,QAAQ,MAAY,eAA8B;EAChD,IAAI;GACF,MAAM,eAAe,KAAK;GAC1B,MAAM,iBAAiB,KAAK,WAAW,YAAY;GAEnD,IAAI,mBAAmB,cACrB,KAAK,WAAW,cAAc;EAElC,QAAQ,CAER;EAEA,KAAK,iBAAiB,QAAQ,MAAM,aAAa;CACnD;;;;CAKA,MAAM,MAA0B;EAC9B,KAAK,iBAAiB,MAAM,IAAI;CAClC;CAEA,aAA4B;EAC1B,OAAO,KAAK,iBAAiB,WAAW;CAC1C;CAEA,WAA0B;EACxB,OAAO,KAAK,iBAAiB,SAAS;CACxC;AACF"}
|
|
@@ -1,94 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Span Name Normalizer
|
|
6
|
-
*
|
|
7
|
-
* Normalizes span names to reduce cardinality from dynamic path segments.
|
|
8
|
-
* This is critical for observability backends that charge by unique span names
|
|
9
|
-
* or have cardinality limits.
|
|
10
|
-
*
|
|
11
|
-
* @example Basic usage with custom function
|
|
12
|
-
* ```typescript
|
|
13
|
-
* init({
|
|
14
|
-
* service: 'my-app',
|
|
15
|
-
* spanNameNormalizer: (name) => {
|
|
16
|
-
* return name.replace(/\/[0-9]+/g, '/:id');
|
|
17
|
-
* }
|
|
18
|
-
* })
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @example Using built-in preset
|
|
22
|
-
* ```typescript
|
|
23
|
-
* init({
|
|
24
|
-
* service: 'my-app',
|
|
25
|
-
* spanNameNormalizer: 'rest-api'
|
|
26
|
-
* })
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Function to normalize a span name
|
|
32
|
-
* @param name - The original span name
|
|
33
|
-
* @returns The normalized span name
|
|
34
|
-
*/
|
|
35
|
-
type SpanNameNormalizerFn = (name: string) => string;
|
|
36
|
-
/**
|
|
37
|
-
* Built-in normalizer preset names
|
|
38
|
-
*/
|
|
39
|
-
type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';
|
|
40
|
-
/**
|
|
41
|
-
* Normalizer config - either a function or a preset name
|
|
42
|
-
*/
|
|
43
|
-
type SpanNameNormalizerConfig = SpanNameNormalizerFn | SpanNameNormalizerPreset;
|
|
44
|
-
interface SpanNameNormalizingProcessorOptions {
|
|
45
|
-
/**
|
|
46
|
-
* Normalizer function or preset name
|
|
47
|
-
*/
|
|
48
|
-
normalizer: SpanNameNormalizerConfig;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Built-in normalizer patterns
|
|
52
|
-
*/
|
|
53
|
-
declare const NORMALIZER_PATTERNS: {
|
|
54
|
-
readonly numericId: RegExp;
|
|
55
|
-
readonly uuid: RegExp;
|
|
56
|
-
readonly shortUuid: RegExp;
|
|
57
|
-
readonly objectId: RegExp;
|
|
58
|
-
readonly hash: RegExp;
|
|
59
|
-
readonly isoDate: RegExp;
|
|
60
|
-
readonly timestamp: RegExp;
|
|
61
|
-
readonly email: RegExp;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Built-in normalizer presets
|
|
65
|
-
*/
|
|
66
|
-
declare const NORMALIZER_PRESETS: Record<SpanNameNormalizerPreset, SpanNameNormalizerFn>;
|
|
67
|
-
/**
|
|
68
|
-
* Span processor that normalizes span names to reduce cardinality.
|
|
69
|
-
*
|
|
70
|
-
* Normalization happens in onStart() when we have access to the mutable Span.
|
|
71
|
-
* This allows us to call span.updateName() before the span is finalized.
|
|
72
|
-
*
|
|
73
|
-
* Common use cases:
|
|
74
|
-
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
|
|
75
|
-
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
|
|
76
|
-
* - Dates: /logs/2024-01-15 → /logs/:date
|
|
77
|
-
*/
|
|
78
|
-
declare class SpanNameNormalizingProcessor implements SpanProcessor {
|
|
79
|
-
private readonly wrappedProcessor;
|
|
80
|
-
private readonly normalizer;
|
|
81
|
-
constructor(wrappedProcessor: SpanProcessor, options: SpanNameNormalizingProcessorOptions);
|
|
82
|
-
/**
|
|
83
|
-
* Normalize span name on start (when Span is mutable)
|
|
84
|
-
*/
|
|
85
|
-
onStart(span: Span, parentContext: Context): void;
|
|
86
|
-
/**
|
|
87
|
-
* Pass through onEnd unchanged
|
|
88
|
-
*/
|
|
89
|
-
onEnd(span: ReadableSpan): void;
|
|
90
|
-
forceFlush(): Promise<void>;
|
|
91
|
-
shutdown(): Promise<void>;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export { NORMALIZER_PATTERNS, NORMALIZER_PRESETS, type SpanNameNormalizerConfig, type SpanNameNormalizerFn, type SpanNameNormalizerPreset, SpanNameNormalizingProcessor, type SpanNameNormalizingProcessorOptions };
|
|
1
|
+
import { a as SpanNameNormalizerPreset, i as SpanNameNormalizerFn, n as NORMALIZER_PRESETS, o as SpanNameNormalizingProcessor, r as SpanNameNormalizerConfig, s as SpanNameNormalizingProcessorOptions, t as NORMALIZER_PATTERNS } from "./span-name-normalizer-8ZOGJuwv.cjs";
|
|
2
|
+
export { NORMALIZER_PATTERNS, NORMALIZER_PRESETS, SpanNameNormalizerConfig, SpanNameNormalizerFn, SpanNameNormalizerPreset, SpanNameNormalizingProcessor, SpanNameNormalizingProcessorOptions };
|
|
@@ -1,94 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Span Name Normalizer
|
|
6
|
-
*
|
|
7
|
-
* Normalizes span names to reduce cardinality from dynamic path segments.
|
|
8
|
-
* This is critical for observability backends that charge by unique span names
|
|
9
|
-
* or have cardinality limits.
|
|
10
|
-
*
|
|
11
|
-
* @example Basic usage with custom function
|
|
12
|
-
* ```typescript
|
|
13
|
-
* init({
|
|
14
|
-
* service: 'my-app',
|
|
15
|
-
* spanNameNormalizer: (name) => {
|
|
16
|
-
* return name.replace(/\/[0-9]+/g, '/:id');
|
|
17
|
-
* }
|
|
18
|
-
* })
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @example Using built-in preset
|
|
22
|
-
* ```typescript
|
|
23
|
-
* init({
|
|
24
|
-
* service: 'my-app',
|
|
25
|
-
* spanNameNormalizer: 'rest-api'
|
|
26
|
-
* })
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Function to normalize a span name
|
|
32
|
-
* @param name - The original span name
|
|
33
|
-
* @returns The normalized span name
|
|
34
|
-
*/
|
|
35
|
-
type SpanNameNormalizerFn = (name: string) => string;
|
|
36
|
-
/**
|
|
37
|
-
* Built-in normalizer preset names
|
|
38
|
-
*/
|
|
39
|
-
type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';
|
|
40
|
-
/**
|
|
41
|
-
* Normalizer config - either a function or a preset name
|
|
42
|
-
*/
|
|
43
|
-
type SpanNameNormalizerConfig = SpanNameNormalizerFn | SpanNameNormalizerPreset;
|
|
44
|
-
interface SpanNameNormalizingProcessorOptions {
|
|
45
|
-
/**
|
|
46
|
-
* Normalizer function or preset name
|
|
47
|
-
*/
|
|
48
|
-
normalizer: SpanNameNormalizerConfig;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Built-in normalizer patterns
|
|
52
|
-
*/
|
|
53
|
-
declare const NORMALIZER_PATTERNS: {
|
|
54
|
-
readonly numericId: RegExp;
|
|
55
|
-
readonly uuid: RegExp;
|
|
56
|
-
readonly shortUuid: RegExp;
|
|
57
|
-
readonly objectId: RegExp;
|
|
58
|
-
readonly hash: RegExp;
|
|
59
|
-
readonly isoDate: RegExp;
|
|
60
|
-
readonly timestamp: RegExp;
|
|
61
|
-
readonly email: RegExp;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Built-in normalizer presets
|
|
65
|
-
*/
|
|
66
|
-
declare const NORMALIZER_PRESETS: Record<SpanNameNormalizerPreset, SpanNameNormalizerFn>;
|
|
67
|
-
/**
|
|
68
|
-
* Span processor that normalizes span names to reduce cardinality.
|
|
69
|
-
*
|
|
70
|
-
* Normalization happens in onStart() when we have access to the mutable Span.
|
|
71
|
-
* This allows us to call span.updateName() before the span is finalized.
|
|
72
|
-
*
|
|
73
|
-
* Common use cases:
|
|
74
|
-
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
|
|
75
|
-
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
|
|
76
|
-
* - Dates: /logs/2024-01-15 → /logs/:date
|
|
77
|
-
*/
|
|
78
|
-
declare class SpanNameNormalizingProcessor implements SpanProcessor {
|
|
79
|
-
private readonly wrappedProcessor;
|
|
80
|
-
private readonly normalizer;
|
|
81
|
-
constructor(wrappedProcessor: SpanProcessor, options: SpanNameNormalizingProcessorOptions);
|
|
82
|
-
/**
|
|
83
|
-
* Normalize span name on start (when Span is mutable)
|
|
84
|
-
*/
|
|
85
|
-
onStart(span: Span, parentContext: Context): void;
|
|
86
|
-
/**
|
|
87
|
-
* Pass through onEnd unchanged
|
|
88
|
-
*/
|
|
89
|
-
onEnd(span: ReadableSpan): void;
|
|
90
|
-
forceFlush(): Promise<void>;
|
|
91
|
-
shutdown(): Promise<void>;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export { NORMALIZER_PATTERNS, NORMALIZER_PRESETS, type SpanNameNormalizerConfig, type SpanNameNormalizerFn, type SpanNameNormalizerPreset, SpanNameNormalizingProcessor, type SpanNameNormalizingProcessorOptions };
|
|
1
|
+
import { a as SpanNameNormalizerPreset, i as SpanNameNormalizerFn, n as NORMALIZER_PRESETS, o as SpanNameNormalizingProcessor, r as SpanNameNormalizerConfig, s as SpanNameNormalizingProcessorOptions, t as NORMALIZER_PATTERNS } from "./span-name-normalizer-8ZOGJuwv.js";
|
|
2
|
+
export { NORMALIZER_PATTERNS, NORMALIZER_PRESETS, SpanNameNormalizerConfig, SpanNameNormalizerFn, SpanNameNormalizerPreset, SpanNameNormalizingProcessor, SpanNameNormalizingProcessorOptions };
|
|
@@ -1,3 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
//#region src/span-name-normalizer.ts
|
|
2
|
+
/**
|
|
3
|
+
* Built-in normalizer patterns
|
|
4
|
+
*/
|
|
5
|
+
const NORMALIZER_PATTERNS = {
|
|
6
|
+
numericId: /\/\d+(?=\/|$)/g,
|
|
7
|
+
uuid: /\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\/|$)/gi,
|
|
8
|
+
shortUuid: /\/[0-9a-f]{32}(?=\/|$)/gi,
|
|
9
|
+
objectId: /\/[0-9a-f]{24}(?=\/|$)/gi,
|
|
10
|
+
hash: /\/[0-9a-f]{6,}(?=\.[a-z]+$)/gi,
|
|
11
|
+
isoDate: /\/\d{4}-\d{2}-\d{2}(?=\/|$)/g,
|
|
12
|
+
timestamp: /\/1[0-9]{9}(?=\/|$)/g,
|
|
13
|
+
email: /\/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?=\/|$)/g
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Built-in normalizer presets
|
|
17
|
+
*/
|
|
18
|
+
const NORMALIZER_PRESETS = {
|
|
19
|
+
/**
|
|
20
|
+
* REST API preset - normalizes common REST path patterns
|
|
21
|
+
* Handles: numeric IDs, UUIDs, ObjectIds, dates, timestamps, emails
|
|
22
|
+
*/
|
|
23
|
+
"rest-api": (name) => {
|
|
24
|
+
return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.shortUuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.objectId, "/:objectId").replaceAll(NORMALIZER_PATTERNS.isoDate, "/:date").replaceAll(NORMALIZER_PATTERNS.timestamp, "/:timestamp").replaceAll(NORMALIZER_PATTERNS.email, "/:email").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id");
|
|
25
|
+
},
|
|
26
|
+
/**
|
|
27
|
+
* GraphQL preset - normalizes GraphQL operation names and paths
|
|
28
|
+
* Keeps query/mutation names but normalizes embedded IDs
|
|
29
|
+
*/
|
|
30
|
+
graphql: (name) => {
|
|
31
|
+
return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id");
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* Minimal preset - only normalizes numeric IDs and UUIDs
|
|
35
|
+
*/
|
|
36
|
+
minimal: (name) => {
|
|
37
|
+
return name.replaceAll(NORMALIZER_PATTERNS.uuid, "/:uuid").replaceAll(NORMALIZER_PATTERNS.numericId, "/:id");
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Resolve normalizer config to a function
|
|
42
|
+
*/
|
|
43
|
+
function resolveNormalizer(config) {
|
|
44
|
+
if (typeof config === "function") return config;
|
|
45
|
+
const preset = NORMALIZER_PRESETS[config];
|
|
46
|
+
if (!preset) throw new Error(`Unknown span name normalizer preset: "${config}". Available presets: ${Object.keys(NORMALIZER_PRESETS).join(", ")}`);
|
|
47
|
+
return preset;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Span processor that normalizes span names to reduce cardinality.
|
|
51
|
+
*
|
|
52
|
+
* Normalization happens in onStart() when we have access to the mutable Span.
|
|
53
|
+
* This allows us to call span.updateName() before the span is finalized.
|
|
54
|
+
*
|
|
55
|
+
* Common use cases:
|
|
56
|
+
* - REST APIs: /users/123/posts/456 → /users/:id/posts/:id
|
|
57
|
+
* - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid
|
|
58
|
+
* - Dates: /logs/2024-01-15 → /logs/:date
|
|
59
|
+
*/
|
|
60
|
+
var SpanNameNormalizingProcessor = class {
|
|
61
|
+
wrappedProcessor;
|
|
62
|
+
normalizer;
|
|
63
|
+
constructor(wrappedProcessor, options) {
|
|
64
|
+
this.wrappedProcessor = wrappedProcessor;
|
|
65
|
+
this.normalizer = resolveNormalizer(options.normalizer);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Normalize span name on start (when Span is mutable)
|
|
69
|
+
*/
|
|
70
|
+
onStart(span, parentContext) {
|
|
71
|
+
try {
|
|
72
|
+
const originalName = span.name;
|
|
73
|
+
const normalizedName = this.normalizer(originalName);
|
|
74
|
+
if (normalizedName !== originalName) span.updateName(normalizedName);
|
|
75
|
+
} catch {}
|
|
76
|
+
this.wrappedProcessor.onStart(span, parentContext);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Pass through onEnd unchanged
|
|
80
|
+
*/
|
|
81
|
+
onEnd(span) {
|
|
82
|
+
this.wrappedProcessor.onEnd(span);
|
|
83
|
+
}
|
|
84
|
+
forceFlush() {
|
|
85
|
+
return this.wrappedProcessor.forceFlush();
|
|
86
|
+
}
|
|
87
|
+
shutdown() {
|
|
88
|
+
return this.wrappedProcessor.shutdown();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
export { NORMALIZER_PATTERNS, NORMALIZER_PRESETS, SpanNameNormalizingProcessor };
|
|
3
94
|
//# sourceMappingURL=span-name-normalizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"span-name-normalizer.js","names":[],"sources":["../src/span-name-normalizer.ts"],"sourcesContent":["/**\n * Span Name Normalizer\n *\n * Normalizes span names to reduce cardinality from dynamic path segments.\n * This is critical for observability backends that charge by unique span names\n * or have cardinality limits.\n *\n * @example Basic usage with custom function\n * ```typescript\n * init({\n * service: 'my-app',\n * spanNameNormalizer: (name) => {\n * return name.replace(/\\/[0-9]+/g, '/:id');\n * }\n * })\n * ```\n *\n * @example Using built-in preset\n * ```typescript\n * init({\n * service: 'my-app',\n * spanNameNormalizer: 'rest-api'\n * })\n * ```\n */\n\nimport type {\n SpanProcessor,\n ReadableSpan,\n} from '@opentelemetry/sdk-trace-base';\nimport type { Context } from '@opentelemetry/api';\nimport type { Span } from '@opentelemetry/sdk-trace-base';\n\n/**\n * Function to normalize a span name\n * @param name - The original span name\n * @returns The normalized span name\n */\nexport type SpanNameNormalizerFn = (name: string) => string;\n\n/**\n * Built-in normalizer preset names\n */\nexport type SpanNameNormalizerPreset = 'rest-api' | 'graphql' | 'minimal';\n\n/**\n * Normalizer config - either a function or a preset name\n */\nexport type SpanNameNormalizerConfig =\n | SpanNameNormalizerFn\n | SpanNameNormalizerPreset;\n\nexport interface SpanNameNormalizingProcessorOptions {\n /**\n * Normalizer function or preset name\n */\n normalizer: SpanNameNormalizerConfig;\n}\n\n/**\n * Built-in normalizer patterns\n */\nconst NORMALIZER_PATTERNS = {\n // Numeric IDs: /users/123 → /users/:id\n numericId: /\\/\\d+(?=\\/|$)/g,\n\n // UUIDs: /users/550e8400-e29b-41d4-a716-446655440000 → /users/:uuid\n uuid: /\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(?=\\/|$)/gi,\n\n // Short UUIDs (without dashes): /users/550e8400e29b41d4a716446655440000 → /users/:uuid\n shortUuid: /\\/[0-9a-f]{32}(?=\\/|$)/gi,\n\n // MongoDB ObjectIds: /docs/507f1f77bcf86cd799439011 → /docs/:objectId\n objectId: /\\/[0-9a-f]{24}(?=\\/|$)/gi,\n\n // Hashes (6+ hex chars): /assets/abc123def.js → /assets/:hash.js\n hash: /\\/[0-9a-f]{6,}(?=\\.[a-z]+$)/gi,\n\n // ISO dates: /logs/2024-01-15 → /logs/:date\n isoDate: /\\/\\d{4}-\\d{2}-\\d{2}(?=\\/|$)/g,\n\n // Timestamps: /events/1705334400 → /events/:timestamp\n timestamp: /\\/1[0-9]{9}(?=\\/|$)/g,\n\n // Email-like segments: /users/john@example.com → /users/:email\n email: /\\/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(?=\\/|$)/g,\n} as const;\n\n/**\n * Built-in normalizer presets\n */\nconst NORMALIZER_PRESETS: Record<\n SpanNameNormalizerPreset,\n SpanNameNormalizerFn\n> = {\n /**\n * REST API preset - normalizes common REST path patterns\n * Handles: numeric IDs, UUIDs, ObjectIds, dates, timestamps, emails\n */\n 'rest-api': (name: string): string => {\n return name\n .replaceAll(NORMALIZER_PATTERNS.uuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.shortUuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.objectId, '/:objectId')\n .replaceAll(NORMALIZER_PATTERNS.isoDate, '/:date')\n .replaceAll(NORMALIZER_PATTERNS.timestamp, '/:timestamp')\n .replaceAll(NORMALIZER_PATTERNS.email, '/:email')\n .replaceAll(NORMALIZER_PATTERNS.numericId, '/:id');\n },\n\n /**\n * GraphQL preset - normalizes GraphQL operation names and paths\n * Keeps query/mutation names but normalizes embedded IDs\n */\n graphql: (name: string): string => {\n // For GraphQL, normalize both path-style and embedded IDs\n return name\n .replaceAll(NORMALIZER_PATTERNS.uuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.numericId, '/:id');\n },\n\n /**\n * Minimal preset - only normalizes numeric IDs and UUIDs\n */\n minimal: (name: string): string => {\n return name\n .replaceAll(NORMALIZER_PATTERNS.uuid, '/:uuid')\n .replaceAll(NORMALIZER_PATTERNS.numericId, '/:id');\n },\n};\n\n/**\n * Resolve normalizer config to a function\n */\nfunction resolveNormalizer(\n config: SpanNameNormalizerConfig,\n): SpanNameNormalizerFn {\n if (typeof config === 'function') {\n return config;\n }\n\n const preset = NORMALIZER_PRESETS[config];\n if (!preset) {\n throw new Error(\n `Unknown span name normalizer preset: \"${config}\". ` +\n `Available presets: ${Object.keys(NORMALIZER_PRESETS).join(', ')}`,\n );\n }\n\n return preset;\n}\n\n/**\n * Span processor that normalizes span names to reduce cardinality.\n *\n * Normalization happens in onStart() when we have access to the mutable Span.\n * This allows us to call span.updateName() before the span is finalized.\n *\n * Common use cases:\n * - REST APIs: /users/123/posts/456 → /users/:id/posts/:id\n * - UUIDs: /items/550e8400-e29b-41d4-a716-446655440000 → /items/:uuid\n * - Dates: /logs/2024-01-15 → /logs/:date\n */\nexport class SpanNameNormalizingProcessor implements SpanProcessor {\n private readonly wrappedProcessor: SpanProcessor;\n private readonly normalizer: SpanNameNormalizerFn;\n\n constructor(\n wrappedProcessor: SpanProcessor,\n options: SpanNameNormalizingProcessorOptions,\n ) {\n this.wrappedProcessor = wrappedProcessor;\n this.normalizer = resolveNormalizer(options.normalizer);\n }\n\n /**\n * Normalize span name on start (when Span is mutable)\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n const originalName = span.name;\n const normalizedName = this.normalizer(originalName);\n\n if (normalizedName !== originalName) {\n span.updateName(normalizedName);\n }\n } catch {\n // If normalizer throws, keep original name (fail-open)\n }\n\n this.wrappedProcessor.onStart(span, parentContext);\n }\n\n /**\n * Pass through onEnd unchanged\n */\n onEnd(span: ReadableSpan): void {\n this.wrappedProcessor.onEnd(span);\n }\n\n forceFlush(): Promise<void> {\n return this.wrappedProcessor.forceFlush();\n }\n\n shutdown(): Promise<void> {\n return this.wrappedProcessor.shutdown();\n }\n}\n\n/**\n * Export built-in patterns for advanced users who want to compose their own normalizers\n */\nexport { NORMALIZER_PATTERNS, NORMALIZER_PRESETS };\n"],"mappings":";;;;AA8DA,MAAM,sBAAsB;CAE1B,WAAW;CAGX,MAAM;CAGN,WAAW;CAGX,UAAU;CAGV,MAAM;CAGN,SAAS;CAGT,WAAW;CAGX,OAAO;AACT;;;;AAKA,MAAM,qBAGF;;;;;CAKF,aAAa,SAAyB;EACpC,OAAO,KACJ,WAAW,oBAAoB,MAAM,QAAQ,CAAC,CAC9C,WAAW,oBAAoB,WAAW,QAAQ,CAAC,CACnD,WAAW,oBAAoB,UAAU,YAAY,CAAC,CACtD,WAAW,oBAAoB,SAAS,QAAQ,CAAC,CACjD,WAAW,oBAAoB,WAAW,aAAa,CAAC,CACxD,WAAW,oBAAoB,OAAO,SAAS,CAAC,CAChD,WAAW,oBAAoB,WAAW,MAAM;CACrD;;;;;CAMA,UAAU,SAAyB;EAEjC,OAAO,KACJ,WAAW,oBAAoB,MAAM,QAAQ,CAAC,CAC9C,WAAW,oBAAoB,WAAW,MAAM;CACrD;;;;CAKA,UAAU,SAAyB;EACjC,OAAO,KACJ,WAAW,oBAAoB,MAAM,QAAQ,CAAC,CAC9C,WAAW,oBAAoB,WAAW,MAAM;CACrD;AACF;;;;AAKA,SAAS,kBACP,QACsB;CACtB,IAAI,OAAO,WAAW,YACpB,OAAO;CAGT,MAAM,SAAS,mBAAmB;CAClC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,yCAAyC,OAAO,wBACxB,OAAO,KAAK,kBAAkB,CAAC,CAAC,KAAK,IAAI,GACnE;CAGF,OAAO;AACT;;;;;;;;;;;;AAaA,IAAa,+BAAb,MAAmE;CACjE,AAAiB;CACjB,AAAiB;CAEjB,YACE,kBACA,SACA;EACA,KAAK,mBAAmB;EACxB,KAAK,aAAa,kBAAkB,QAAQ,UAAU;CACxD;;;;CAKA,QAAQ,MAAY,eAA8B;EAChD,IAAI;GACF,MAAM,eAAe,KAAK;GAC1B,MAAM,iBAAiB,KAAK,WAAW,YAAY;GAEnD,IAAI,mBAAmB,cACrB,KAAK,WAAW,cAAc;EAElC,QAAQ,CAER;EAEA,KAAK,iBAAiB,QAAQ,MAAM,aAAa;CACnD;;;;CAKA,MAAM,MAA0B;EAC9B,KAAK,iBAAiB,MAAM,IAAI;CAClC;CAEA,aAA4B;EAC1B,OAAO,KAAK,iBAAiB,WAAW;CAC1C;CAEA,WAA0B;EACxB,OAAO,KAAK,iBAAiB,SAAS;CACxC;AACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
let node_crypto = require("node:crypto");
|
|
2
|
+
|
|
3
|
+
//#region src/stable-hash.ts
|
|
4
|
+
/**
|
|
5
|
+
* Deterministic JSON stringify with sorted object keys, so two structurally
|
|
6
|
+
* equal values always produce the same string regardless of key insertion
|
|
7
|
+
* order. Shared by `defineEvent` and the validation layer for stable schema
|
|
8
|
+
* hashes.
|
|
9
|
+
*/
|
|
10
|
+
function stableStringify(value) {
|
|
11
|
+
if (value === null || value === void 0 || typeof value !== "object") return JSON.stringify(value);
|
|
12
|
+
if (Array.isArray(value)) return "[" + value.map((v) => stableStringify(v)).join(",") + "]";
|
|
13
|
+
const obj = value;
|
|
14
|
+
return "{" + Object.keys(obj).toSorted().map((k) => JSON.stringify(k) + ":" + stableStringify(obj[k])).join(",") + "}";
|
|
15
|
+
}
|
|
16
|
+
/** Stable sha256 of any JSON-serializable value. */
|
|
17
|
+
function hashJson(value) {
|
|
18
|
+
return (0, node_crypto.createHash)("sha256").update(stableStringify(value)).digest("hex");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
Object.defineProperty(exports, 'hashJson', {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () {
|
|
25
|
+
return hashJson;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=stable-hash-BNTMrmdB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stable-hash-BNTMrmdB.cjs","names":[],"sources":["../src/stable-hash.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\n/**\n * Deterministic JSON stringify with sorted object keys, so two structurally\n * equal values always produce the same string regardless of key insertion\n * order. Shared by `defineEvent` and the validation layer for stable schema\n * hashes.\n */\nexport function stableStringify(value: unknown): string {\n if (value === null || value === undefined || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map((v) => stableStringify(v)).join(',') + ']';\n }\n const obj = value as Record<string, unknown>;\n const body = Object.keys(obj)\n .toSorted()\n .map((k) => JSON.stringify(k) + ':' + stableStringify(obj[k]))\n .join(',');\n return '{' + body + '}';\n}\n\n/** Stable sha256 of any JSON-serializable value. */\nexport function hashJson(value: unknown): string {\n return createHash('sha256').update(stableStringify(value)).digest('hex');\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,gBAAgB,OAAwB;CACtD,IAAI,UAAU,QAAQ,UAAU,UAAa,OAAO,UAAU,UAC5D,OAAO,KAAK,UAAU,KAAK;CAE7B,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,MAAM,KAAK,MAAM,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;CAEhE,MAAM,MAAM;CAKZ,OAAO,MAJM,OAAO,KAAK,GAAG,CAAC,CAC1B,SAAS,CAAC,CACV,KAAK,MAAM,KAAK,UAAU,CAAC,IAAI,MAAM,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAC7D,KAAK,GACQ,IAAI;AACtB;;AAGA,SAAgB,SAAS,OAAwB;CAC/C,mCAAkB,QAAQ,CAAC,CAAC,OAAO,gBAAgB,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK;AACzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
//#region src/stable-hash.ts
|
|
4
|
+
/**
|
|
5
|
+
* Deterministic JSON stringify with sorted object keys, so two structurally
|
|
6
|
+
* equal values always produce the same string regardless of key insertion
|
|
7
|
+
* order. Shared by `defineEvent` and the validation layer for stable schema
|
|
8
|
+
* hashes.
|
|
9
|
+
*/
|
|
10
|
+
function stableStringify(value) {
|
|
11
|
+
if (value === null || value === void 0 || typeof value !== "object") return JSON.stringify(value);
|
|
12
|
+
if (Array.isArray(value)) return "[" + value.map((v) => stableStringify(v)).join(",") + "]";
|
|
13
|
+
const obj = value;
|
|
14
|
+
return "{" + Object.keys(obj).toSorted().map((k) => JSON.stringify(k) + ":" + stableStringify(obj[k])).join(",") + "}";
|
|
15
|
+
}
|
|
16
|
+
/** Stable sha256 of any JSON-serializable value. */
|
|
17
|
+
function hashJson(value) {
|
|
18
|
+
return createHash("sha256").update(stableStringify(value)).digest("hex");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { hashJson as t };
|
|
23
|
+
//# sourceMappingURL=stable-hash-Cg5cT34Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stable-hash-Cg5cT34Q.js","names":[],"sources":["../src/stable-hash.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\n/**\n * Deterministic JSON stringify with sorted object keys, so two structurally\n * equal values always produce the same string regardless of key insertion\n * order. Shared by `defineEvent` and the validation layer for stable schema\n * hashes.\n */\nexport function stableStringify(value: unknown): string {\n if (value === null || value === undefined || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map((v) => stableStringify(v)).join(',') + ']';\n }\n const obj = value as Record<string, unknown>;\n const body = Object.keys(obj)\n .toSorted()\n .map((k) => JSON.stringify(k) + ':' + stableStringify(obj[k]))\n .join(',');\n return '{' + body + '}';\n}\n\n/** Stable sha256 of any JSON-serializable value. */\nexport function hashJson(value: unknown): string {\n return createHash('sha256').update(stableStringify(value)).digest('hex');\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,gBAAgB,OAAwB;CACtD,IAAI,UAAU,QAAQ,UAAU,UAAa,OAAO,UAAU,UAC5D,OAAO,KAAK,UAAU,KAAK;CAE7B,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,MAAM,KAAK,MAAM,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;CAEhE,MAAM,MAAM;CAKZ,OAAO,MAJM,OAAO,KAAK,GAAG,CAAC,CAC1B,SAAS,CAAC,CACV,KAAK,MAAM,KAAK,UAAU,CAAC,IAAI,MAAM,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAC7D,KAAK,GACQ,IAAI;AACtB;;AAGA,SAAgB,SAAS,OAAwB;CAC/C,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,gBAAgB,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK;AACzE"}
|