From 22003a4fa2925ebf3416194750060d611fc3f0f2 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Thu, 16 Jul 2026 23:45:51 +0100 Subject: [PATCH 1/2] feat: Allow custom transforms to call default transforms --- index.d.ts | 2 +- lib/transformer.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.d.ts b/index.d.ts index a4bb623..5243a56 100644 --- a/index.d.ts +++ b/index.d.ts @@ -45,7 +45,7 @@ export type KnownState = InstrumentationConfig & { /** The resolved operator name: a built-in (e.g. `'traceSync'`) or a custom transform name */ operator: string; /** The merged transform map (built-ins plus `addTransform` overrides) used for dispatch */ - transforms: Record; + transforms: Record & { defaults: Record }; /** Counter of function nodes matched so far, used for `index`-based selection */ functionIndex?: number; }; diff --git a/lib/transformer.js b/lib/transformer.js index 72e66e8..c2de683 100644 --- a/lib/transformer.js +++ b/lib/transformer.js @@ -78,7 +78,7 @@ class Transformer { let aliases = {} let injectionCount = 0 - const mergedTransforms = { ...transforms, ...this.#customTransforms } + const mergedTransforms = { ...transforms, ...this.#customTransforms, defaults: { ...transforms } } for (const config of this.#configs) { const { astQuery, functionQuery = {} } = config From fc877f30d10d52fc599303ab054e212910212081 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Thu, 16 Jul 2026 23:56:50 +0100 Subject: [PATCH 2/2] test: Add test for calling default transforms via state.transforms.defaults Co-Authored-By: Claude Fable 5 --- tests/custom_transform_defaults_cjs/mod.js | 5 ++++ tests/custom_transform_defaults_cjs/test.js | 5 ++++ tests/tests.test.mjs | 33 +++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 tests/custom_transform_defaults_cjs/mod.js create mode 100644 tests/custom_transform_defaults_cjs/test.js diff --git a/tests/custom_transform_defaults_cjs/mod.js b/tests/custom_transform_defaults_cjs/mod.js new file mode 100644 index 0000000..4a6b8a9 --- /dev/null +++ b/tests/custom_transform_defaults_cjs/mod.js @@ -0,0 +1,5 @@ +function fetch (url) { + return 42 +} + +module.exports = { fetch } diff --git a/tests/custom_transform_defaults_cjs/test.js b/tests/custom_transform_defaults_cjs/test.js new file mode 100644 index 0000000..85a5070 --- /dev/null +++ b/tests/custom_transform_defaults_cjs/test.js @@ -0,0 +1,5 @@ +const { fetch } = require('./instrumented.js') +const assert = require('node:assert') + +assert.strictEqual(global.__defaultTransformCalled, true) +assert.strictEqual(fetch('https://example.com'), 42) diff --git a/tests/tests.test.mjs b/tests/tests.test.mjs index 4e2b848..cc0e9c3 100644 --- a/tests/tests.test.mjs +++ b/tests/tests.test.mjs @@ -597,6 +597,39 @@ describe('custom_transform_override_cjs', () => { }) }) +describe('custom_transform_defaults_cjs', () => { + test('custom transforms can call built-in transforms via state.transforms.defaults', () => { + runTest('custom_transform_defaults_cjs', [ + { + channelName: 'fetch_defaults', + module: { name: TEST_MODULE_NAME, versionRange: '>=0.0.1', filePath: TEST_MODULE_PATH }, + functionQuery: { functionName: 'fetch', kind: 'Sync' }, + }, + ], { + customTransforms: { + tracingChannelImport (state, node) { + state.transforms.defaults.tracingChannelImport(state, node) + node.body.unshift({ + type: 'ExpressionStatement', + expression: { + type: 'AssignmentExpression', + operator: '=', + left: { + type: 'MemberExpression', + object: { type: 'Identifier', name: 'global' }, + property: { type: 'Identifier', name: '__defaultTransformCalled' }, + computed: false, + optional: false, + }, + right: { type: 'Literal', value: true, raw: 'true' }, + }, + }) + }, + }, + }) + }) +}) + describe('buffer_input', () => { test('accepts a Buffer and produces the same output as a string', () => { const code = [