@clayroach/unplugin 0.1.0-source-trace.4 → 0.1.0-source-trace.5

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/cjs/index.js CHANGED
@@ -93,7 +93,8 @@ const unpluginFactory = (options = {}) => {
93
93
  hoistedTraces: new Map(),
94
94
  counter: 0,
95
95
  statements: []
96
- }
96
+ },
97
+ generatorAdapters: new Map()
97
98
  }));
98
99
  // Run each visitor
99
100
  for (let i = 0; i < visitors.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_generator","_interopRequireDefault","require","_parser","_traverse2","_unplugin","_annotateEffects","_sourceTrace","_withSpanTrace","e","__esModule","default","traverse","_traverse","generate","_generate","DEFAULT_INCLUDE","DEFAULT_EXCLUDE","shouldTransform","id","include","exclude","pattern","includes","test","unpluginFactory","options","annotateEffects","sourceTrace","spanTrace","name","transformInclude","transform","code","ast","parse","sourceType","plugins","visitors","push","createSourceTraceVisitor","createWithSpanTraceVisitor","annotateState","filename","createAnnotateEffectsVisitor","undefined","length","states","map","hoisting","hoistedTraces","Map","counter","statements","i","output","sourceMaps","sourceFileName","unplugin","exports","createUnplugin","_default"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_generator","_interopRequireDefault","require","_parser","_traverse2","_unplugin","_annotateEffects","_sourceTrace","_withSpanTrace","e","__esModule","default","traverse","_traverse","generate","_generate","DEFAULT_INCLUDE","DEFAULT_EXCLUDE","shouldTransform","id","include","exclude","pattern","includes","test","unpluginFactory","options","annotateEffects","sourceTrace","spanTrace","name","transformInclude","transform","code","ast","parse","sourceType","plugins","visitors","push","createSourceTraceVisitor","createWithSpanTraceVisitor","annotateState","filename","createAnnotateEffectsVisitor","undefined","length","states","map","hoisting","hoistedTraces","Map","counter","statements","generatorAdapters","i","output","sourceMaps","sourceFileName","unplugin","exports","createUnplugin","_default"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,21 @@ var t = _interopRequireWildcard(require("@babel/types"));
9
9
  var _effectDetection = require("../utils/effectDetection.js");
10
10
  var _hoisting = require("../utils/hoisting.js");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ /**
13
+ * Default adapter name to use when adding one to modern pattern generators.
14
+ */
15
+ const INJECTED_ADAPTER_NAME = "$";
16
+ /**
17
+ * Gets the adapter parameter name from a generator function, or null if none.
18
+ */
19
+ function getAdapterParamName(gen) {
20
+ if (gen.params.length === 0) return null;
21
+ const firstParam = gen.params[0];
22
+ if (t.isIdentifier(firstParam)) {
23
+ return firstParam.name;
24
+ }
25
+ return null;
26
+ }
12
27
  /**
13
28
  * Creates a Babel visitor that injects source trace metadata into Effect.gen yields.
14
29
  */
@@ -18,6 +33,7 @@ function createSourceTraceVisitor(filename, _options) {
18
33
  enter(_path, state) {
19
34
  state.filename = filename;
20
35
  state.hoisting = (0, _hoisting.createHoistingState)();
36
+ state.generatorAdapters = new Map();
21
37
  },
22
38
  exit(path, state) {
23
39
  // Prepend all hoisted statements to the program body
@@ -26,22 +42,56 @@ function createSourceTraceVisitor(filename, _options) {
26
42
  }
27
43
  }
28
44
  },
45
+ // Process Effect.gen calls to detect and optionally add adapter parameters
46
+ CallExpression(path, state) {
47
+ const node = path.node;
48
+ if (!(0, _effectDetection.isEffectGenCall)(node)) return;
49
+ const generator = (0, _effectDetection.getEffectGenGenerator)(node);
50
+ if (!generator) return;
51
+ // Check if generator already has an adapter parameter
52
+ const existingAdapter = getAdapterParamName(generator);
53
+ if (existingAdapter) {
54
+ // Generator uses legacy adapter pattern - store the name
55
+ state.generatorAdapters.set(generator, existingAdapter);
56
+ } else {
57
+ // Modern pattern - add adapter parameter
58
+ generator.params.unshift(t.identifier(INJECTED_ADAPTER_NAME));
59
+ state.generatorAdapters.set(generator, INJECTED_ADAPTER_NAME);
60
+ }
61
+ },
29
62
  YieldExpression(path, state) {
30
63
  const node = path.node;
31
- // Only transform yield* _(effect) patterns
32
- if (!(0, _effectDetection.isYieldAdapterCall)(node)) {
64
+ // Must be yield* (delegating)
65
+ if (!node.delegate || !node.argument) return;
66
+ // Find the enclosing generator function
67
+ let generatorPath = path.getFunctionParent();
68
+ if (!generatorPath) return;
69
+ const generatorNode = generatorPath.node;
70
+ if (!("generator" in generatorNode) || !generatorNode.generator) return;
71
+ // Get the adapter name for this generator
72
+ const adapterName = state.generatorAdapters.get(generatorNode);
73
+ if (!adapterName) {
74
+ // Not inside an Effect.gen - skip
33
75
  return;
34
76
  }
35
77
  // Get source location
36
78
  const loc = node.loc;
37
79
  if (!loc) return;
38
- // Extract label from parent (e.g., `const user = yield* _(...)`)
80
+ // Extract label from parent (e.g., `const user = yield* ...`)
39
81
  const label = (0, _hoisting.extractLabelFromParent)(path);
40
82
  // Get or create hoisted trace identifier
41
83
  const traceId = (0, _hoisting.getOrCreateTraceIdentifier)(state.hoisting, state.filename, loc.start.line, loc.start.column, label);
42
- // Inject trace as second argument: _(effect) -> _(effect, trace)
43
- const callExpr = node.argument;
44
- callExpr.arguments.push(t.cloneNode(traceId));
84
+ // Check if this is already an adapter call
85
+ if (t.isCallExpression(node.argument) && (0, _effectDetection.isYieldAdapterCallWithName)(node, adapterName)) {
86
+ // Legacy pattern: _(effect) -> _(effect, trace)
87
+ const callExpr = node.argument;
88
+ callExpr.arguments.push(t.cloneNode(traceId));
89
+ } else if ((0, _effectDetection.isModernYield)(node)) {
90
+ // Modern pattern: effect -> $(effect, trace)
91
+ const originalArg = node.argument;
92
+ const wrappedCall = t.callExpression(t.identifier(adapterName), [originalArg, t.cloneNode(traceId)]);
93
+ node.argument = wrappedCall;
94
+ }
45
95
  }
46
96
  };
47
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sourceTrace.js","names":["t","_interopRequireWildcard","require","_effectDetection","_hoisting","e","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","createSourceTraceVisitor","filename","_options","Program","enter","_path","state","hoisting","createHoistingState","exit","path","statements","length","unshiftContainer","YieldExpression","node","isYieldAdapterCall","loc","label","extractLabelFromParent","traceId","getOrCreateTraceIdentifier","start","line","column","callExpr","argument","arguments","push","cloneNode","sourceTraceTransformer","options","name","visitor"],"sources":["../../../src/transformers/sourceTrace.ts"],"sourcesContent":[null],"mappings":";;;;;;;AAUA,IAAAA,CAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAK6B,SAAAD,wBAAAI,CAAA,EAAAL,CAAA,6BAAAM,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAI,CAAA,EAAAL,CAAA,SAAAA,CAAA,IAAAK,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,MAAAK,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAT,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAO,CAAA,MAAAF,CAAA,GAAAV,CAAA,GAAAQ,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAV,CAAA,UAAAK,CAAA,CAAAM,GAAA,CAAAX,CAAA,GAAAK,CAAA,CAAAO,GAAA,CAAAZ,CAAA,EAAAO,CAAA,gBAAAZ,CAAA,IAAAK,CAAA,gBAAAL,CAAA,OAAAkB,cAAA,CAAAC,IAAA,CAAAd,CAAA,EAAAL,CAAA,OAAAW,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAjB,CAAA,EAAAL,CAAA,OAAAW,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAZ,CAAA,EAAAW,CAAA,IAAAC,CAAA,CAAAZ,CAAA,IAAAK,CAAA,CAAAL,CAAA,WAAAY,CAAA,KAAAP,CAAA,EAAAL,CAAA;AAqB7B;;;AAGM,SAAUuB,wBAAwBA,CACtCC,QAAgB,EAChBC,QAA6B;EAE7B,OAAO;IACLC,OAAO,EAAE;MACPC,KAAKA,CAACC,KAAK,EAAEC,KAAK;QAChBA,KAAK,CAACL,QAAQ,GAAGA,QAAQ;QACzBK,KAAK,CAACC,QAAQ,GAAG,IAAAC,6BAAmB,GAAE;MACxC,CAAC;MACDC,IAAIA,CAACC,IAAI,EAAEJ,KAAK;QACd;QACA,IAAIA,KAAK,CAACC,QAAQ,CAACI,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;UACxCF,IAAI,CAACG,gBAAgB,CAAC,MAAM,EAAEP,KAAK,CAACC,QAAQ,CAACI,UAAU,CAAC;QAC1D;MACF;KACD;IAEDG,eAAeA,CAACJ,IAAiC,EAAEJ,KAAK;MACtD,MAAMS,IAAI,GAAGL,IAAI,CAACK,IAAI;MAEtB;MACA,IAAI,CAAC,IAAAC,mCAAkB,EAACD,IAAI,CAAC,EAAE;QAC7B;MACF;MAEA;MACA,MAAME,GAAG,GAAGF,IAAI,CAACE,GAAG;MACpB,IAAI,CAACA,GAAG,EAAE;MAEV;MACA,MAAMC,KAAK,GAAG,IAAAC,gCAAsB,EAACT,IAAI,CAAC;MAE1C;MACA,MAAMU,OAAO,GAAG,IAAAC,oCAA0B,EACxCf,KAAK,CAACC,QAAQ,EACdD,KAAK,CAACL,QAAQ,EACdgB,GAAG,CAACK,KAAK,CAACC,IAAI,EACdN,GAAG,CAACK,KAAK,CAACE,MAAM,EAChBN,KAAK,CACN;MAED;MACA,MAAMO,QAAQ,GAAGV,IAAI,CAACW,QAA4B;MAClDD,QAAQ,CAACE,SAAS,CAACC,IAAI,CAACnD,CAAC,CAACoD,SAAS,CAACT,OAAO,CAAC,CAAC;IAC/C;GACD;AACH;AAEA;;;AAGM,SAAUU,sBAAsBA,CAACC,OAA4B;EAIjE,OAAO;IACLC,IAAI,EAAE,qBAAqB;IAC3BC,OAAO,EAAEjC,wBAAwB,CAAC,EAAE,EAAE+B,OAAO;GAC9C;AACH","ignoreList":[]}
1
+ {"version":3,"file":"sourceTrace.js","names":["t","_interopRequireWildcard","require","_effectDetection","_hoisting","e","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","INJECTED_ADAPTER_NAME","getAdapterParamName","gen","params","length","firstParam","isIdentifier","name","createSourceTraceVisitor","filename","_options","Program","enter","_path","state","hoisting","createHoistingState","generatorAdapters","Map","exit","path","statements","unshiftContainer","CallExpression","node","isEffectGenCall","generator","getEffectGenGenerator","existingAdapter","unshift","identifier","YieldExpression","delegate","argument","generatorPath","getFunctionParent","generatorNode","adapterName","loc","label","extractLabelFromParent","traceId","getOrCreateTraceIdentifier","start","line","column","isCallExpression","isYieldAdapterCallWithName","callExpr","arguments","push","cloneNode","isModernYield","originalArg","wrappedCall","callExpression","sourceTraceTransformer","options","visitor"],"sources":["../../../src/transformers/sourceTrace.ts"],"sourcesContent":[null],"mappings":";;;;;;;AAcA,IAAAA,CAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAMA,IAAAE,SAAA,GAAAF,OAAA;AAK6B,SAAAD,wBAAAI,CAAA,EAAAL,CAAA,6BAAAM,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAI,CAAA,EAAAL,CAAA,SAAAA,CAAA,IAAAK,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,MAAAK,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAT,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAO,CAAA,MAAAF,CAAA,GAAAV,CAAA,GAAAQ,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAV,CAAA,UAAAK,CAAA,CAAAM,GAAA,CAAAX,CAAA,GAAAK,CAAA,CAAAO,GAAA,CAAAZ,CAAA,EAAAO,CAAA,gBAAAZ,CAAA,IAAAK,CAAA,gBAAAL,CAAA,OAAAkB,cAAA,CAAAC,IAAA,CAAAd,CAAA,EAAAL,CAAA,OAAAW,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAjB,CAAA,EAAAL,CAAA,OAAAW,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAZ,CAAA,EAAAW,CAAA,IAAAC,CAAA,CAAAZ,CAAA,IAAAK,CAAA,CAAAL,CAAA,WAAAY,CAAA,KAAAP,CAAA,EAAAL,CAAA;AA0B7B;;;AAGA,MAAMuB,qBAAqB,GAAG,GAAG;AAEjC;;;AAGA,SAASC,mBAAmBA,CAC1BC,GAAqD;EAErD,IAAIA,GAAG,CAACC,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EACxC,MAAMC,UAAU,GAAGH,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC;EAChC,IAAI1B,CAAC,CAAC6B,YAAY,CAACD,UAAU,CAAC,EAAE;IAC9B,OAAOA,UAAU,CAACE,IAAI;EACxB;EACA,OAAO,IAAI;AACb;AAEA;;;AAGM,SAAUC,wBAAwBA,CACtCC,QAAgB,EAChBC,QAA6B;EAE7B,OAAO;IACLC,OAAO,EAAE;MACPC,KAAKA,CAACC,KAAK,EAAEC,KAAK;QAChBA,KAAK,CAACL,QAAQ,GAAGA,QAAQ;QACzBK,KAAK,CAACC,QAAQ,GAAG,IAAAC,6BAAmB,GAAE;QACtCF,KAAK,CAACG,iBAAiB,GAAG,IAAIC,GAAG,EAAE;MACrC,CAAC;MACDC,IAAIA,CAACC,IAAI,EAAEN,KAAK;QACd;QACA,IAAIA,KAAK,CAACC,QAAQ,CAACM,UAAU,CAACjB,MAAM,GAAG,CAAC,EAAE;UACxCgB,IAAI,CAACE,gBAAgB,CAAC,MAAM,EAAER,KAAK,CAACC,QAAQ,CAACM,UAAU,CAAC;QAC1D;MACF;KACD;IAED;IACAE,cAAcA,CAACH,IAAgC,EAAEN,KAAK;MACpD,MAAMU,IAAI,GAAGJ,IAAI,CAACI,IAAI;MAEtB,IAAI,CAAC,IAAAC,gCAAe,EAACD,IAAI,CAAC,EAAE;MAE5B,MAAME,SAAS,GAAG,IAAAC,sCAAqB,EAACH,IAAI,CAAC;MAC7C,IAAI,CAACE,SAAS,EAAE;MAEhB;MACA,MAAME,eAAe,GAAG3B,mBAAmB,CAACyB,SAAS,CAAC;MAEtD,IAAIE,eAAe,EAAE;QACnB;QACAd,KAAK,CAACG,iBAAiB,CAACvB,GAAG,CAACgC,SAAS,EAAEE,eAAe,CAAC;MACzD,CAAC,MAAM;QACL;QACAF,SAAS,CAACvB,MAAM,CAAC0B,OAAO,CAACpD,CAAC,CAACqD,UAAU,CAAC9B,qBAAqB,CAAC,CAAC;QAC7Dc,KAAK,CAACG,iBAAiB,CAACvB,GAAG,CAACgC,SAAS,EAAE1B,qBAAqB,CAAC;MAC/D;IACF,CAAC;IAED+B,eAAeA,CAACX,IAAiC,EAAEN,KAAK;MACtD,MAAMU,IAAI,GAAGJ,IAAI,CAACI,IAAI;MAEtB;MACA,IAAI,CAACA,IAAI,CAACQ,QAAQ,IAAI,CAACR,IAAI,CAACS,QAAQ,EAAE;MAEtC;MACA,IAAIC,aAAa,GAAGd,IAAI,CAACe,iBAAiB,EAAE;MAC5C,IAAI,CAACD,aAAa,EAAE;MAEpB,MAAME,aAAa,GAAGF,aAAa,CAACV,IAAwD;MAC5F,IAAI,EAAE,WAAW,IAAIY,aAAa,CAAC,IAAI,CAACA,aAAa,CAACV,SAAS,EAAE;MAEjE;MACA,MAAMW,WAAW,GAAGvB,KAAK,CAACG,iBAAiB,CAACxB,GAAG,CAAC2C,aAAa,CAAC;MAC9D,IAAI,CAACC,WAAW,EAAE;QAChB;QACA;MACF;MAEA;MACA,MAAMC,GAAG,GAAGd,IAAI,CAACc,GAAG;MACpB,IAAI,CAACA,GAAG,EAAE;MAEV;MACA,MAAMC,KAAK,GAAG,IAAAC,gCAAsB,EAACpB,IAAI,CAAC;MAE1C;MACA,MAAMqB,OAAO,GAAG,IAAAC,oCAA0B,EACxC5B,KAAK,CAACC,QAAQ,EACdD,KAAK,CAACL,QAAQ,EACd6B,GAAG,CAACK,KAAK,CAACC,IAAI,EACdN,GAAG,CAACK,KAAK,CAACE,MAAM,EAChBN,KAAK,CACN;MAED;MACA,IACE9D,CAAC,CAACqE,gBAAgB,CAACtB,IAAI,CAACS,QAAQ,CAAC,IACjC,IAAAc,2CAA0B,EAACvB,IAAI,EAAEa,WAAW,CAAC,EAC7C;QACA;QACA,MAAMW,QAAQ,GAAGxB,IAAI,CAACS,QAAQ;QAC9Be,QAAQ,CAACC,SAAS,CAACC,IAAI,CAACzE,CAAC,CAAC0E,SAAS,CAACV,OAAO,CAAC,CAAC;MAC/C,CAAC,MAAM,IAAI,IAAAW,8BAAa,EAAC5B,IAAI,CAAC,EAAE;QAC9B;QACA,MAAM6B,WAAW,GAAG7B,IAAI,CAACS,QAAQ;QACjC,MAAMqB,WAAW,GAAG7E,CAAC,CAAC8E,cAAc,CAClC9E,CAAC,CAACqD,UAAU,CAACO,WAAW,CAAC,EACzB,CAACgB,WAAW,EAAE5E,CAAC,CAAC0E,SAAS,CAACV,OAAO,CAAC,CAAC,CACpC;QACDjB,IAAI,CAACS,QAAQ,GAAGqB,WAAW;MAC7B;IACF;GACD;AACH;AAEA;;;AAGM,SAAUE,sBAAsBA,CAACC,OAA4B;EAIjE,OAAO;IACLlD,IAAI,EAAE,qBAAqB;IAC3BmD,OAAO,EAAElD,wBAAwB,CAAC,EAAE,EAAEiD,OAAO;GAC9C;AACH","ignoreList":[]}
@@ -41,6 +41,44 @@ function isDataFirstCall(node) {
41
41
  // Default to data-last pattern
42
42
  return false;
43
43
  }
44
+ /**
45
+ * Extracts the basename from a filepath.
46
+ */
47
+ function basename(filepath) {
48
+ const parts = filepath.split(/[/\\]/);
49
+ return parts[parts.length - 1] || filepath;
50
+ }
51
+ /**
52
+ * Modifies a span name to include source location.
53
+ * "fetchUser" -> "fetchUser (index.ts:9)"
54
+ */
55
+ function createSpanNameWithLocation(originalName, filepath, line) {
56
+ const filename = basename(filepath);
57
+ return `${originalName} (${filename}:${line})`;
58
+ }
59
+ /**
60
+ * Creates the source location suffix string.
61
+ */
62
+ function createLocationSuffix(filepath, line) {
63
+ const filename = basename(filepath);
64
+ return ` (${filename}:${line})`;
65
+ }
66
+ /**
67
+ * Modifies a template literal span name to include source location.
68
+ * Appends the location to the last quasi of the template.
69
+ */
70
+ function modifyTemplateLiteralWithLocation(templateLiteral, filepath, line) {
71
+ const suffix = createLocationSuffix(filepath, line);
72
+ const quasis = [...templateLiteral.quasis];
73
+ const lastQuasi = quasis[quasis.length - 1];
74
+ // Create new quasi with appended location
75
+ const newLastQuasi = t.templateElement({
76
+ raw: lastQuasi.value.raw + suffix,
77
+ cooked: (lastQuasi.value.cooked || lastQuasi.value.raw) + suffix
78
+ }, lastQuasi.tail);
79
+ quasis[quasis.length - 1] = newLastQuasi;
80
+ return t.templateLiteral(quasis, [...templateLiteral.expressions]);
81
+ }
44
82
  /**
45
83
  * Creates the attributes object with source location.
46
84
  */
@@ -106,7 +144,14 @@ function createWithSpanTraceVisitor(filename, _options) {
106
144
  const isDataFirst = isDataFirstCall(node);
107
145
  if (isDataFirst) {
108
146
  // Data-first: withSpan(effect, "name", options?)
109
- // Options is at index 2
147
+ // Name is at index 1, options at index 2
148
+ const nameArg = node.arguments[1];
149
+ if (t.isStringLiteral(nameArg)) {
150
+ const newName = createSpanNameWithLocation(nameArg.value, state.filename, line);
151
+ node.arguments[1] = t.stringLiteral(newName);
152
+ } else if (t.isTemplateLiteral(nameArg)) {
153
+ node.arguments[1] = modifyTemplateLiteralWithLocation(nameArg, state.filename, line);
154
+ }
110
155
  const optionsArg = node.arguments[2];
111
156
  const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs);
112
157
  if (node.arguments.length >= 3) {
@@ -118,7 +163,14 @@ function createWithSpanTraceVisitor(filename, _options) {
118
163
  }
119
164
  } else {
120
165
  // Data-last: withSpan("name", options?)
121
- // Options is at index 1
166
+ // Name is at index 0, options at index 1
167
+ const nameArg = node.arguments[0];
168
+ if (t.isStringLiteral(nameArg)) {
169
+ const newName = createSpanNameWithLocation(nameArg.value, state.filename, line);
170
+ node.arguments[0] = t.stringLiteral(newName);
171
+ } else if (t.isTemplateLiteral(nameArg)) {
172
+ node.arguments[0] = modifyTemplateLiteralWithLocation(nameArg, state.filename, line);
173
+ }
122
174
  const optionsArg = node.arguments[1];
123
175
  const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs);
124
176
  if (node.arguments.length >= 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"withSpanTrace.js","names":["t","_interopRequireWildcard","require","_hoisting","e","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","isWithSpanCall","node","callee","type","property","name","isDataFirstCall","arguments","length","isStringLiteral","createSourceAttributes","filepath","line","column","objectExpression","objectProperty","stringLiteral","numericLiteral","mergeOrCreateOptions","existingOptions","sourceAttrs","isSpreadElement","isArgumentPlaceholder","identifier","isObjectExpression","existingAttrsIndex","properties","findIndex","prop","isObjectProperty","isIdentifier","key","value","existingAttrsProp","mergedAttrs","spreadElement","newProperties","createWithSpanTraceVisitor","filename","_options","Program","enter","_path","state","hoisting","createHoistingState","exit","path","statements","unshiftContainer","CallExpression","loc","start","isDataFirst","optionsArg","newOptions","push","withSpanTraceTransformer","options","visitor"],"sources":["../../../src/transformers/withSpanTrace.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"withSpanTrace.js","names":["t","_interopRequireWildcard","require","_hoisting","e","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","isWithSpanCall","node","callee","type","property","name","isDataFirstCall","arguments","length","isStringLiteral","basename","filepath","parts","split","createSpanNameWithLocation","originalName","line","filename","createLocationSuffix","modifyTemplateLiteralWithLocation","templateLiteral","suffix","quasis","lastQuasi","newLastQuasi","templateElement","raw","value","cooked","tail","expressions","createSourceAttributes","column","objectExpression","objectProperty","stringLiteral","numericLiteral","mergeOrCreateOptions","existingOptions","sourceAttrs","isSpreadElement","isArgumentPlaceholder","identifier","isObjectExpression","existingAttrsIndex","properties","findIndex","prop","isObjectProperty","isIdentifier","key","existingAttrsProp","mergedAttrs","spreadElement","newProperties","createWithSpanTraceVisitor","_options","Program","enter","_path","state","hoisting","createHoistingState","exit","path","statements","unshiftContainer","CallExpression","loc","start","isDataFirst","nameArg","newName","isTemplateLiteral","optionsArg","newOptions","push","withSpanTraceTransformer","options","visitor"],"sources":["../../../src/transformers/withSpanTrace.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -3,10 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getEffectGenGenerator = getEffectGenGenerator;
6
7
  exports.isAdapterCall = isAdapterCall;
7
8
  exports.isEffectGenCall = isEffectGenCall;
8
9
  exports.isInsideEffectGen = isInsideEffectGen;
10
+ exports.isModernYield = isModernYield;
9
11
  exports.isYieldAdapterCall = isYieldAdapterCall;
12
+ exports.isYieldAdapterCallWithName = isYieldAdapterCallWithName;
13
+ var t = _interopRequireWildcard(require("@babel/types"));
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
+ /**
16
+ * Utilities for detecting Effect patterns in AST nodes.
17
+ *
18
+ * @since 0.1.0
19
+ */
20
+
10
21
  /**
11
22
  * Checks if a CallExpression is `Effect.gen(...)`.
12
23
  */
@@ -55,4 +66,47 @@ function isYieldAdapterCall(node) {
55
66
  if (node.argument.type !== "CallExpression") return false;
56
67
  return isAdapterCall(node.argument);
57
68
  }
69
+ /**
70
+ * Checks if a YieldExpression is a `yield* _(effect)` pattern with a specific adapter name.
71
+ */
72
+ function isYieldAdapterCallWithName(node, adapterName) {
73
+ if (!node.delegate) return false; // Must be yield*, not yield
74
+ if (!node.argument) return false;
75
+ if (node.argument.type !== "CallExpression") return false;
76
+ const callee = node.argument.callee;
77
+ return callee.type === "Identifier" && callee.name === adapterName;
78
+ }
79
+ /**
80
+ * Checks if a YieldExpression is a modern `yield* effect` pattern (without adapter).
81
+ * This is the pattern used when Effect.gen is called without the adapter parameter.
82
+ */
83
+ function isModernYield(node) {
84
+ if (!node.delegate) return false; // Must be yield*, not yield
85
+ if (!node.argument) return false;
86
+ // Modern yields are NOT adapter calls - they yield the effect directly
87
+ if (node.argument.type === "CallExpression" && isAdapterCall(node.argument)) {
88
+ return false;
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * Gets the generator function from an Effect.gen call.
94
+ * Returns the FunctionExpression/ArrowFunctionExpression if found.
95
+ */
96
+ function getEffectGenGenerator(node) {
97
+ // Effect.gen can be called with 1 or 2 arguments:
98
+ // Effect.gen(function*() { ... }) - 1 arg
99
+ // Effect.gen(context, function*() { ... }) - 2 args
100
+ const args = node.arguments;
101
+ for (let i = args.length - 1; i >= 0; i--) {
102
+ const arg = args[i];
103
+ if (t.isFunctionExpression(arg) && arg.generator) {
104
+ return arg;
105
+ }
106
+ if (t.isArrowFunctionExpression(arg) && arg.generator) {
107
+ return arg;
108
+ }
109
+ }
110
+ return null;
111
+ }
58
112
  //# sourceMappingURL=effectDetection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effectDetection.js","names":["isEffectGenCall","node","type","callee","object","name","property","isInsideEffectGen","path","current","parentPath","parent","isAdapterCall","isYieldAdapterCall","delegate","argument"],"sources":["../../../src/utils/effectDetection.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;AAOA;;;AAGM,SAAUA,eAAeA,CAACC,IAAY;EAC1C,IAAIA,IAAI,CAACC,IAAI,KAAK,gBAAgB,EAAE,OAAO,KAAK;EAEhD,MAAMC,MAAM,GAAGF,IAAI,CAACE,MAAM;EAE1B;EACA,IACEA,MAAM,CAACD,IAAI,KAAK,kBAAkB,IAClCC,MAAM,CAACC,MAAM,CAACF,IAAI,KAAK,YAAY,IACnCC,MAAM,CAACC,MAAM,CAACC,IAAI,KAAK,QAAQ,IAC/BF,MAAM,CAACG,QAAQ,CAACJ,IAAI,KAAK,YAAY,IACrCC,MAAM,CAACG,QAAQ,CAACD,IAAI,KAAK,KAAK,EAC9B;IACA,OAAO,IAAI;EACb;EAEA;EACA,IACEF,MAAM,CAACD,IAAI,KAAK,kBAAkB,IAClCC,MAAM,CAACG,QAAQ,CAACJ,IAAI,KAAK,YAAY,IACrCC,MAAM,CAACG,QAAQ,CAACD,IAAI,KAAK,KAAK,EAC9B;IACA,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd;AAWA;;;;;AAKM,SAAUE,iBAAiBA,CAACC,IAAc;EAC9C,IAAIC,OAAO,GAAGD,IAAI,CAACE,UAAU;EAC7B,OAAOD,OAAO,EAAE;IACd,MAAMR,IAAI,GAAGQ,OAAO,CAACE,MAA4B;IACjD,IAAIV,IAAI,IAAID,eAAe,CAACC,IAAI,CAAC,EAAE;MACjC,OAAO,IAAI;IACb;IACAQ,OAAO,GAAGA,OAAO,CAACC,UAAU;EAC9B;EACA,OAAO,KAAK;AACd;AAEA;;;;AAIM,SAAUE,aAAaA,CAACX,IAAsB;EAClD,OAAOA,IAAI,CAACE,MAAM,CAACD,IAAI,KAAK,YAAY,IAAID,IAAI,CAACE,MAAM,CAACE,IAAI,KAAK,GAAG;AACtE;AAEA;;;AAGM,SAAUQ,kBAAkBA,CAACZ,IAAuB;EACxD,IAAI,CAACA,IAAI,CAACa,QAAQ,EAAE,OAAO,KAAK,EAAC;EACjC,IAAI,CAACb,IAAI,CAACc,QAAQ,EAAE,OAAO,KAAK;EAChC,IAAId,IAAI,CAACc,QAAQ,CAACb,IAAI,KAAK,gBAAgB,EAAE,OAAO,KAAK;EACzD,OAAOU,aAAa,CAACX,IAAI,CAACc,QAAQ,CAAC;AACrC","ignoreList":[]}
1
+ {"version":3,"file":"effectDetection.js","names":["t","_interopRequireWildcard","require","e","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","isEffectGenCall","node","type","callee","object","name","property","isInsideEffectGen","path","current","parentPath","parent","isAdapterCall","isYieldAdapterCall","delegate","argument","isYieldAdapterCallWithName","adapterName","isModernYield","getEffectGenGenerator","args","arguments","length","arg","isFunctionExpression","generator","isArrowFunctionExpression"],"sources":["../../../src/utils/effectDetection.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAqCtF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAElC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAExC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACzC;AAsHD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,EAAE,OAAO,CAAmC,CAAA;AAEnH;;;;GAIG;AACH,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AA0CtF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAElC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAExC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACzC;AAuHD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,EAAE,OAAO,CAAmC,CAAA;AAEnH;;;;GAIG;AACH,eAAe,QAAQ,CAAA"}
@@ -2,8 +2,12 @@
2
2
  * Source location trace transformer.
3
3
  *
4
4
  * This transformer injects source location metadata into Effect.gen yield expressions.
5
- * It transforms `yield* _(effect)` into `yield* _(effect, trace)` where trace is a
6
- * hoisted SourceLocation object.
5
+ * It supports both patterns:
6
+ * - Legacy adapter: `yield* _(effect)` → `yield* _(effect, trace)`
7
+ * - Modern pattern: `yield* effect` → `yield* $_adapter(effect, trace)`
8
+ *
9
+ * For the modern pattern, the transformer adds an adapter parameter to the generator
10
+ * function if not present, since Effect.gen always passes the adapter at runtime.
7
11
  *
8
12
  * @since 0.1.0
9
13
  */
@@ -25,6 +29,11 @@ export interface SourceTraceOptions {
25
29
  interface TransformState {
26
30
  filename: string;
27
31
  hoisting: HoistingState;
32
+ /**
33
+ * Map from generator function to its adapter parameter name.
34
+ * Used to track which generators have been processed and their adapter names.
35
+ */
36
+ generatorAdapters: Map<unknown, string>;
28
37
  }
29
38
  /**
30
39
  * Creates a Babel visitor that injects source trace metadata into Effect.gen yields.
@@ -1 +1 @@
1
- {"version":3,"file":"sourceTrace.d.ts","sourceRoot":"","sources":["../../../src/transformers/sourceTrace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGxD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;CAChD;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA4CzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG;IACpE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACb,CAKA"}
1
+ {"version":3,"file":"sourceTrace.d.ts","sourceRoot":"","sources":["../../../src/transformers/sourceTrace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAQxD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;CAChD;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAA;IACvB;;;OAGG;IACH,iBAAiB,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CACxC;AAqBD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA6FzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG;IACpE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACb,CAKA"}
@@ -1 +1 @@
1
- {"version":3,"file":"withSpanTrace.d.ts","sourceRoot":"","sources":["../../../src/transformers/withSpanTrace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAExD,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;CAChD;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAA;CACxB;AA0HD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,cAAc,CAAC,CA+DzB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG;IACxE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACb,CAKA"}
1
+ {"version":3,"file":"withSpanTrace.d.ts","sourceRoot":"","sources":["../../../src/transformers/withSpanTrace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAExD,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;CAChD;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAA;CACxB;AAkLD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,cAAc,CAAC,CA+EzB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG;IACxE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACb,CAKA"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @since 0.1.0
5
5
  */
6
- import type * as t from "@babel/types";
6
+ import * as t from "@babel/types";
7
7
  /**
8
8
  * Checks if a CallExpression is `Effect.gen(...)`.
9
9
  */
@@ -31,5 +31,19 @@ export declare function isAdapterCall(node: t.CallExpression): boolean;
31
31
  * Checks if a YieldExpression is a `yield* _(effect)` pattern.
32
32
  */
33
33
  export declare function isYieldAdapterCall(node: t.YieldExpression): boolean;
34
+ /**
35
+ * Checks if a YieldExpression is a `yield* _(effect)` pattern with a specific adapter name.
36
+ */
37
+ export declare function isYieldAdapterCallWithName(node: t.YieldExpression, adapterName: string): boolean;
38
+ /**
39
+ * Checks if a YieldExpression is a modern `yield* effect` pattern (without adapter).
40
+ * This is the pattern used when Effect.gen is called without the adapter parameter.
41
+ */
42
+ export declare function isModernYield(node: t.YieldExpression): boolean;
43
+ /**
44
+ * Gets the generator function from an Effect.gen call.
45
+ * Returns the FunctionExpression/ArrowFunctionExpression if found.
46
+ */
47
+ export declare function getEffectGenGenerator(node: t.CallExpression): t.FunctionExpression | t.ArrowFunctionExpression | null;
34
48
  export {};
35
49
  //# sourceMappingURL=effectDetection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"effectDetection.d.ts","sourceRoot":"","sources":["../../../src/utils/effectDetection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAEtC;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CA0BtE;AAED;;;GAGG;AACH,UAAU,QAAQ;IAChB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAUzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,cAAc,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,GAAG,OAAO,CAKnE"}
1
+ {"version":3,"file":"effectDetection.d.ts","sourceRoot":"","sources":["../../../src/utils/effectDetection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,cAAc,CA0BtE;AAED;;;GAGG;AACH,UAAU,QAAQ;IAChB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAUzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,cAAc,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,GAAG,OAAO,CAKnE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAMhG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,GAAG,OAAO,CAQ9D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,uBAAuB,GAAG,IAAI,CAiBrH"}
package/dist/esm/index.js CHANGED
@@ -86,7 +86,8 @@ const unpluginFactory = (options = {}) => {
86
86
  hoistedTraces: new Map(),
87
87
  counter: 0,
88
88
  statements: []
89
- }
89
+ },
90
+ generatorAdapters: new Map()
90
91
  }));
91
92
  // Run each visitor
92
93
  for (let i = 0; i < visitors.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,22 @@
1
1
  import * as t from "@babel/types";
2
- import { isYieldAdapterCall } from "../utils/effectDetection.js";
2
+ import { getEffectGenGenerator, isEffectGenCall, isModernYield, isYieldAdapterCallWithName } from "../utils/effectDetection.js";
3
3
  import { createHoistingState, extractLabelFromParent, getOrCreateTraceIdentifier } from "../utils/hoisting.js";
4
+ /**
5
+ * Default adapter name to use when adding one to modern pattern generators.
6
+ */
7
+ const INJECTED_ADAPTER_NAME = "$";
8
+ /**
9
+ * Gets the adapter parameter name from a generator function, or null if none.
10
+ */
11
+ function getAdapterParamName(gen) {
12
+ if (gen.params.length === 0)
13
+ return null;
14
+ const firstParam = gen.params[0];
15
+ if (t.isIdentifier(firstParam)) {
16
+ return firstParam.name;
17
+ }
18
+ return null;
19
+ }
4
20
  /**
5
21
  * Creates a Babel visitor that injects source trace metadata into Effect.gen yields.
6
22
  */
@@ -10,6 +26,7 @@ export function createSourceTraceVisitor(filename, _options) {
10
26
  enter(_path, state) {
11
27
  state.filename = filename;
12
28
  state.hoisting = createHoistingState();
29
+ state.generatorAdapters = new Map();
13
30
  },
14
31
  exit(path, state) {
15
32
  // Prepend all hoisted statements to the program body
@@ -18,23 +35,65 @@ export function createSourceTraceVisitor(filename, _options) {
18
35
  }
19
36
  }
20
37
  },
38
+ // Process Effect.gen calls to detect and optionally add adapter parameters
39
+ CallExpression(path, state) {
40
+ const node = path.node;
41
+ if (!isEffectGenCall(node))
42
+ return;
43
+ const generator = getEffectGenGenerator(node);
44
+ if (!generator)
45
+ return;
46
+ // Check if generator already has an adapter parameter
47
+ const existingAdapter = getAdapterParamName(generator);
48
+ if (existingAdapter) {
49
+ // Generator uses legacy adapter pattern - store the name
50
+ state.generatorAdapters.set(generator, existingAdapter);
51
+ }
52
+ else {
53
+ // Modern pattern - add adapter parameter
54
+ generator.params.unshift(t.identifier(INJECTED_ADAPTER_NAME));
55
+ state.generatorAdapters.set(generator, INJECTED_ADAPTER_NAME);
56
+ }
57
+ },
21
58
  YieldExpression(path, state) {
22
59
  const node = path.node;
23
- // Only transform yield* _(effect) patterns
24
- if (!isYieldAdapterCall(node)) {
60
+ // Must be yield* (delegating)
61
+ if (!node.delegate || !node.argument)
62
+ return;
63
+ // Find the enclosing generator function
64
+ let generatorPath = path.getFunctionParent();
65
+ if (!generatorPath)
66
+ return;
67
+ const generatorNode = generatorPath.node;
68
+ if (!("generator" in generatorNode) || !generatorNode.generator)
69
+ return;
70
+ // Get the adapter name for this generator
71
+ const adapterName = state.generatorAdapters.get(generatorNode);
72
+ if (!adapterName) {
73
+ // Not inside an Effect.gen - skip
25
74
  return;
26
75
  }
27
76
  // Get source location
28
77
  const loc = node.loc;
29
78
  if (!loc)
30
79
  return;
31
- // Extract label from parent (e.g., `const user = yield* _(...)`)
80
+ // Extract label from parent (e.g., `const user = yield* ...`)
32
81
  const label = extractLabelFromParent(path);
33
82
  // Get or create hoisted trace identifier
34
83
  const traceId = getOrCreateTraceIdentifier(state.hoisting, state.filename, loc.start.line, loc.start.column, label);
35
- // Inject trace as second argument: _(effect) -> _(effect, trace)
36
- const callExpr = node.argument;
37
- callExpr.arguments.push(t.cloneNode(traceId));
84
+ // Check if this is already an adapter call
85
+ if (t.isCallExpression(node.argument) &&
86
+ isYieldAdapterCallWithName(node, adapterName)) {
87
+ // Legacy pattern: _(effect) -> _(effect, trace)
88
+ const callExpr = node.argument;
89
+ callExpr.arguments.push(t.cloneNode(traceId));
90
+ }
91
+ else if (isModernYield(node)) {
92
+ // Modern pattern: effect -> $(effect, trace)
93
+ const originalArg = node.argument;
94
+ const wrappedCall = t.callExpression(t.identifier(adapterName), [originalArg, t.cloneNode(traceId)]);
95
+ node.argument = wrappedCall;
96
+ }
38
97
  }
39
98
  };
40
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sourceTrace.js","sourceRoot":"","sources":["../../../src/transformers/sourceTrace.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAE3B,MAAM,sBAAsB,CAAA;AAqB7B;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,QAA6B;IAE7B,OAAO;QACL,OAAO,EAAE;YACP,KAAK,CAAC,KAAK,EAAE,KAAK;gBAChB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;gBACzB,KAAK,CAAC,QAAQ,GAAG,mBAAmB,EAAE,CAAA;YACxC,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,KAAK;gBACd,qDAAqD;gBACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;SACF;QAED,eAAe,CAAC,IAAiC,EAAE,KAAK;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YAEtB,2CAA2C;YAC3C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAM;YACR,CAAC;YAED,sBAAsB;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YACpB,IAAI,CAAC,GAAG;gBAAE,OAAM;YAEhB,iEAAiE;YACjE,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAE1C,yCAAyC;YACzC,MAAM,OAAO,GAAG,0BAA0B,CACxC,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,GAAG,CAAC,KAAK,CAAC,IAAI,EACd,GAAG,CAAC,KAAK,CAAC,MAAM,EAChB,KAAK,CACN,CAAA;YAED,iEAAiE;YACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA4B,CAAA;YAClD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAA4B;IAIjE,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,wBAAwB,CAAC,EAAE,EAAE,OAAO,CAAC;KAC/C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"sourceTrace.js","sourceRoot":"","sources":["../../../src/transformers/sourceTrace.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,44 @@ function isDataFirstCall(node) {
35
35
  // Default to data-last pattern
36
36
  return false;
37
37
  }
38
+ /**
39
+ * Extracts the basename from a filepath.
40
+ */
41
+ function basename(filepath) {
42
+ const parts = filepath.split(/[/\\]/);
43
+ return parts[parts.length - 1] || filepath;
44
+ }
45
+ /**
46
+ * Modifies a span name to include source location.
47
+ * "fetchUser" -> "fetchUser (index.ts:9)"
48
+ */
49
+ function createSpanNameWithLocation(originalName, filepath, line) {
50
+ const filename = basename(filepath);
51
+ return `${originalName} (${filename}:${line})`;
52
+ }
53
+ /**
54
+ * Creates the source location suffix string.
55
+ */
56
+ function createLocationSuffix(filepath, line) {
57
+ const filename = basename(filepath);
58
+ return ` (${filename}:${line})`;
59
+ }
60
+ /**
61
+ * Modifies a template literal span name to include source location.
62
+ * Appends the location to the last quasi of the template.
63
+ */
64
+ function modifyTemplateLiteralWithLocation(templateLiteral, filepath, line) {
65
+ const suffix = createLocationSuffix(filepath, line);
66
+ const quasis = [...templateLiteral.quasis];
67
+ const lastQuasi = quasis[quasis.length - 1];
68
+ // Create new quasi with appended location
69
+ const newLastQuasi = t.templateElement({
70
+ raw: lastQuasi.value.raw + suffix,
71
+ cooked: (lastQuasi.value.cooked || lastQuasi.value.raw) + suffix
72
+ }, lastQuasi.tail);
73
+ quasis[quasis.length - 1] = newLastQuasi;
74
+ return t.templateLiteral(quasis, [...templateLiteral.expressions]);
75
+ }
38
76
  /**
39
77
  * Creates the attributes object with source location.
40
78
  */
@@ -119,7 +157,15 @@ export function createWithSpanTraceVisitor(filename, _options) {
119
157
  const isDataFirst = isDataFirstCall(node);
120
158
  if (isDataFirst) {
121
159
  // Data-first: withSpan(effect, "name", options?)
122
- // Options is at index 2
160
+ // Name is at index 1, options at index 2
161
+ const nameArg = node.arguments[1];
162
+ if (t.isStringLiteral(nameArg)) {
163
+ const newName = createSpanNameWithLocation(nameArg.value, state.filename, line);
164
+ node.arguments[1] = t.stringLiteral(newName);
165
+ }
166
+ else if (t.isTemplateLiteral(nameArg)) {
167
+ node.arguments[1] = modifyTemplateLiteralWithLocation(nameArg, state.filename, line);
168
+ }
123
169
  const optionsArg = node.arguments[2];
124
170
  const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs);
125
171
  if (node.arguments.length >= 3) {
@@ -133,7 +179,15 @@ export function createWithSpanTraceVisitor(filename, _options) {
133
179
  }
134
180
  else {
135
181
  // Data-last: withSpan("name", options?)
136
- // Options is at index 1
182
+ // Name is at index 0, options at index 1
183
+ const nameArg = node.arguments[0];
184
+ if (t.isStringLiteral(nameArg)) {
185
+ const newName = createSpanNameWithLocation(nameArg.value, state.filename, line);
186
+ node.arguments[0] = t.stringLiteral(newName);
187
+ }
188
+ else if (t.isTemplateLiteral(nameArg)) {
189
+ node.arguments[0] = modifyTemplateLiteralWithLocation(nameArg, state.filename, line);
190
+ }
137
191
  const optionsArg = node.arguments[1];
138
192
  const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs);
139
193
  if (node.arguments.length >= 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"withSpanTrace.js","sourceRoot":"","sources":["../../../src/transformers/withSpanTrace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"withSpanTrace.js","sourceRoot":"","sources":["../../../src/transformers/withSpanTrace.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,EACL,mBAAmB,EAEpB,MAAM,sBAAsB,CAAA;AAoB7B;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAsB;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,gDAAgD;IAChD,IACE,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;QACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EACnC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAsB;IAC7C,wDAAwD;IACxD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,qEAAqE;IACrE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,+BAA+B;IAC/B,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,QAAgB;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAA;AAC5C,CAAC;AAED;;;GAGG;AACH,SAAS,0BAA0B,CACjC,YAAoB,EACpB,QAAgB,EAChB,IAAY;IAEZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACnC,OAAO,GAAG,YAAY,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAA;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAAgB,EAAE,IAAY;IAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACnC,OAAO,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,SAAS,iCAAiC,CACxC,eAAkC,EAClC,QAAgB,EAChB,IAAY;IAEZ,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACnD,MAAM,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE3C,0CAA0C;IAC1C,MAAM,YAAY,GAAG,CAAC,CAAC,eAAe,CACpC;QACE,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM;QACjC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;KACjE,EACD,SAAS,CAAC,IAAI,CACf,CAAA;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,YAAY,CAAA;IAExC,OAAO,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC,CAAA;AACpE,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,IAAY,EACZ,MAAc;IAEd,OAAO,CAAC,CAAC,gBAAgB,CAAC;QACxB,CAAC,CAAC,cAAc,CACd,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,EAChC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAC1B;QACD,CAAC,CAAC,cAAc,CACd,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,EAC9B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CACvB;QACD,CAAC,CAAC,cAAc,CACd,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,EAC9B,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CACzB;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,eAAmF,EACnF,WAA+B;IAE/B,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC;QACvG,yDAAyD;QACzD,OAAO,CAAC,CAAC,gBAAgB,CAAC;YACxB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;SAC1D,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,mDAAmD;QACnD,MAAM,kBAAkB,GAAG,eAAe,CAAC,UAAU,CAAC,SAAS,CAC7D,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;gBAC3D,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CACtE,CAAA;QAED,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,MAAM,iBAAiB,GAAG,eAAe,CAAC,UAAU,CAAC,kBAAkB,CAAqB,CAAA;YAC5F,MAAM,WAAW,GAAG,CAAC,CAAC,gBAAgB,CAAC;gBACrC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAqB,CAAC;gBACxD,GAAG,WAAW,CAAC,UAAU;aAC1B,CAAC,CAAA;YAEF,wDAAwD;YACxD,MAAM,aAAa,GAAG,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;YACrD,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,cAAc,CAClD,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAC1B,WAAW,CACZ,CAAA;YACD,OAAO,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,OAAO,CAAC,CAAC,gBAAgB,CAAC;gBACxB,GAAG,eAAe,CAAC,UAAU;gBAC7B,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;aAC1D,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,OAAO,CAAC,CAAC,gBAAgB,CAAC;QACxB,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC;QAChC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;KAC1D,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAAgB,EAChB,QAA+B;IAE/B,OAAO;QACL,OAAO,EAAE;YACP,KAAK,CAAC,KAAK,EAAE,KAAK;gBAChB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;gBACzB,KAAK,CAAC,QAAQ,GAAG,mBAAmB,EAAE,CAAA;YACxC,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,KAAK;gBACd,qDAAqD;gBACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;SACF;QAED,cAAc,CAAC,IAAgC,EAAE,KAAK;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YAEtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAM;YACR,CAAC;YAED,sBAAsB;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YACpB,IAAI,CAAC,GAAG;gBAAE,OAAM;YAEhB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAA;YAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAA;YAE/B,2BAA2B;YAC3B,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;YAExE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEzC,IAAI,WAAW,EAAE,CAAC;gBAChB,iDAAiD;gBACjD,yCAAyC;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACjC,IAAI,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;oBAC/E,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;gBAC9C,CAAC;qBAAM,IAAI,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,iCAAiC,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBACtF,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;gBAEhE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC/B,2BAA2B;oBAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;gBAChC,CAAC;qBAAM,CAAC;oBACN,gCAAgC;oBAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wCAAwC;gBACxC,yCAAyC;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACjC,IAAI,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;oBAC/E,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;gBAC9C,CAAC;qBAAM,IAAI,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,iCAAiC,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBACtF,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;gBAEhE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC/B,2BAA2B;oBAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;gBAChC,CAAC;qBAAM,CAAC;oBACN,iCAAiC;oBACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAA8B;IAIrE,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,0BAA0B,CAAC,EAAE,EAAE,OAAO,CAAC;KACjD,CAAA;AACH,CAAC"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Utilities for detecting Effect patterns in AST nodes.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as t from "@babel/types";
1
7
  /**
2
8
  * Checks if a CallExpression is `Effect.gen(...)`.
3
9
  */
@@ -56,4 +62,52 @@ export function isYieldAdapterCall(node) {
56
62
  return false;
57
63
  return isAdapterCall(node.argument);
58
64
  }
65
+ /**
66
+ * Checks if a YieldExpression is a `yield* _(effect)` pattern with a specific adapter name.
67
+ */
68
+ export function isYieldAdapterCallWithName(node, adapterName) {
69
+ if (!node.delegate)
70
+ return false; // Must be yield*, not yield
71
+ if (!node.argument)
72
+ return false;
73
+ if (node.argument.type !== "CallExpression")
74
+ return false;
75
+ const callee = node.argument.callee;
76
+ return callee.type === "Identifier" && callee.name === adapterName;
77
+ }
78
+ /**
79
+ * Checks if a YieldExpression is a modern `yield* effect` pattern (without adapter).
80
+ * This is the pattern used when Effect.gen is called without the adapter parameter.
81
+ */
82
+ export function isModernYield(node) {
83
+ if (!node.delegate)
84
+ return false; // Must be yield*, not yield
85
+ if (!node.argument)
86
+ return false;
87
+ // Modern yields are NOT adapter calls - they yield the effect directly
88
+ if (node.argument.type === "CallExpression" && isAdapterCall(node.argument)) {
89
+ return false;
90
+ }
91
+ return true;
92
+ }
93
+ /**
94
+ * Gets the generator function from an Effect.gen call.
95
+ * Returns the FunctionExpression/ArrowFunctionExpression if found.
96
+ */
97
+ export function getEffectGenGenerator(node) {
98
+ // Effect.gen can be called with 1 or 2 arguments:
99
+ // Effect.gen(function*() { ... }) - 1 arg
100
+ // Effect.gen(context, function*() { ... }) - 2 args
101
+ const args = node.arguments;
102
+ for (let i = args.length - 1; i >= 0; i--) {
103
+ const arg = args[i];
104
+ if (t.isFunctionExpression(arg) && arg.generator) {
105
+ return arg;
106
+ }
107
+ if (t.isArrowFunctionExpression(arg) && arg.generator) {
108
+ return arg;
109
+ }
110
+ }
111
+ return null;
112
+ }
59
113
  //# sourceMappingURL=effectDetection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effectDetection.js","sourceRoot":"","sources":["../../../src/utils/effectDetection.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAA;IAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,wBAAwB;IACxB,IACE,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;QACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EAC9B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,kDAAkD;IAClD,IACE,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;QACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EAC9B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAA;IAC7B,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,MAA4B,CAAA;QACjD,IAAI,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAA;IAC9B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAsB;IAClD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAA;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA,CAAC,4BAA4B;IAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAA;IACzD,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"effectDetection.js","sourceRoot":"","sources":["../../../src/utils/effectDetection.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clayroach/unplugin",
3
- "version": "0.1.0-source-trace.4",
3
+ "version": "0.1.0-source-trace.5",
4
4
  "description": "Universal bundler plugin for Effect transformations",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -18,10 +18,7 @@
18
18
  "@babel/generator": "^7.26.0"
19
19
  },
20
20
  "peerDependencies": {
21
- "@clayroach/effect": "^3.19.14-source-trace.3"
22
- },
23
- "publishConfig": {
24
- "provenance": true
21
+ "effect": "^3.19.14"
25
22
  },
26
23
  "main": "./dist/cjs/index.js",
27
24
  "module": "./dist/esm/index.js",
package/src/index.ts CHANGED
@@ -62,6 +62,11 @@ const generate: GenerateFn = typeof _generate === "function"
62
62
  interface TransformState {
63
63
  filename: string
64
64
  hoisting: HoistingState
65
+ /**
66
+ * Map from generator function to its adapter parameter name.
67
+ * Used by source trace transformer to track Effect.gen generators.
68
+ */
69
+ generatorAdapters: Map<unknown, string>
65
70
  }
66
71
 
67
72
  /**
@@ -202,7 +207,8 @@ const unpluginFactory: UnpluginFactory<EffectPluginOptions | undefined> = (optio
202
207
  hoistedTraces: new Map(),
203
208
  counter: 0,
204
209
  statements: []
205
- }
210
+ },
211
+ generatorAdapters: new Map()
206
212
  }))
207
213
 
208
214
  // Run each visitor
@@ -2,14 +2,23 @@
2
2
  * Source location trace transformer.
3
3
  *
4
4
  * This transformer injects source location metadata into Effect.gen yield expressions.
5
- * It transforms `yield* _(effect)` into `yield* _(effect, trace)` where trace is a
6
- * hoisted SourceLocation object.
5
+ * It supports both patterns:
6
+ * - Legacy adapter: `yield* _(effect)` → `yield* _(effect, trace)`
7
+ * - Modern pattern: `yield* effect` → `yield* $_adapter(effect, trace)`
8
+ *
9
+ * For the modern pattern, the transformer adds an adapter parameter to the generator
10
+ * function if not present, since Effect.gen always passes the adapter at runtime.
7
11
  *
8
12
  * @since 0.1.0
9
13
  */
10
14
  import type { NodePath, Visitor } from "@babel/traverse"
11
15
  import * as t from "@babel/types"
12
- import { isYieldAdapterCall } from "../utils/effectDetection.js"
16
+ import {
17
+ getEffectGenGenerator,
18
+ isEffectGenCall,
19
+ isModernYield,
20
+ isYieldAdapterCallWithName
21
+ } from "../utils/effectDetection.js"
13
22
  import {
14
23
  createHoistingState,
15
24
  extractLabelFromParent,
@@ -34,6 +43,30 @@ export interface SourceTraceOptions {
34
43
  interface TransformState {
35
44
  filename: string
36
45
  hoisting: HoistingState
46
+ /**
47
+ * Map from generator function to its adapter parameter name.
48
+ * Used to track which generators have been processed and their adapter names.
49
+ */
50
+ generatorAdapters: Map<unknown, string>
51
+ }
52
+
53
+ /**
54
+ * Default adapter name to use when adding one to modern pattern generators.
55
+ */
56
+ const INJECTED_ADAPTER_NAME = "$"
57
+
58
+ /**
59
+ * Gets the adapter parameter name from a generator function, or null if none.
60
+ */
61
+ function getAdapterParamName(
62
+ gen: t.FunctionExpression | t.ArrowFunctionExpression
63
+ ): string | null {
64
+ if (gen.params.length === 0) return null
65
+ const firstParam = gen.params[0]
66
+ if (t.isIdentifier(firstParam)) {
67
+ return firstParam.name
68
+ }
69
+ return null
37
70
  }
38
71
 
39
72
  /**
@@ -48,6 +81,7 @@ export function createSourceTraceVisitor(
48
81
  enter(_path, state) {
49
82
  state.filename = filename
50
83
  state.hoisting = createHoistingState()
84
+ state.generatorAdapters = new Map()
51
85
  },
52
86
  exit(path, state) {
53
87
  // Prepend all hoisted statements to the program body
@@ -57,11 +91,45 @@ export function createSourceTraceVisitor(
57
91
  }
58
92
  },
59
93
 
94
+ // Process Effect.gen calls to detect and optionally add adapter parameters
95
+ CallExpression(path: NodePath<t.CallExpression>, state) {
96
+ const node = path.node
97
+
98
+ if (!isEffectGenCall(node)) return
99
+
100
+ const generator = getEffectGenGenerator(node)
101
+ if (!generator) return
102
+
103
+ // Check if generator already has an adapter parameter
104
+ const existingAdapter = getAdapterParamName(generator)
105
+
106
+ if (existingAdapter) {
107
+ // Generator uses legacy adapter pattern - store the name
108
+ state.generatorAdapters.set(generator, existingAdapter)
109
+ } else {
110
+ // Modern pattern - add adapter parameter
111
+ generator.params.unshift(t.identifier(INJECTED_ADAPTER_NAME))
112
+ state.generatorAdapters.set(generator, INJECTED_ADAPTER_NAME)
113
+ }
114
+ },
115
+
60
116
  YieldExpression(path: NodePath<t.YieldExpression>, state) {
61
117
  const node = path.node
62
118
 
63
- // Only transform yield* _(effect) patterns
64
- if (!isYieldAdapterCall(node)) {
119
+ // Must be yield* (delegating)
120
+ if (!node.delegate || !node.argument) return
121
+
122
+ // Find the enclosing generator function
123
+ let generatorPath = path.getFunctionParent()
124
+ if (!generatorPath) return
125
+
126
+ const generatorNode = generatorPath.node as t.FunctionExpression | t.ArrowFunctionExpression
127
+ if (!("generator" in generatorNode) || !generatorNode.generator) return
128
+
129
+ // Get the adapter name for this generator
130
+ const adapterName = state.generatorAdapters.get(generatorNode)
131
+ if (!adapterName) {
132
+ // Not inside an Effect.gen - skip
65
133
  return
66
134
  }
67
135
 
@@ -69,7 +137,7 @@ export function createSourceTraceVisitor(
69
137
  const loc = node.loc
70
138
  if (!loc) return
71
139
 
72
- // Extract label from parent (e.g., `const user = yield* _(...)`)
140
+ // Extract label from parent (e.g., `const user = yield* ...`)
73
141
  const label = extractLabelFromParent(path)
74
142
 
75
143
  // Get or create hoisted trace identifier
@@ -81,9 +149,23 @@ export function createSourceTraceVisitor(
81
149
  label
82
150
  )
83
151
 
84
- // Inject trace as second argument: _(effect) -> _(effect, trace)
85
- const callExpr = node.argument as t.CallExpression
86
- callExpr.arguments.push(t.cloneNode(traceId))
152
+ // Check if this is already an adapter call
153
+ if (
154
+ t.isCallExpression(node.argument) &&
155
+ isYieldAdapterCallWithName(node, adapterName)
156
+ ) {
157
+ // Legacy pattern: _(effect) -> _(effect, trace)
158
+ const callExpr = node.argument
159
+ callExpr.arguments.push(t.cloneNode(traceId))
160
+ } else if (isModernYield(node)) {
161
+ // Modern pattern: effect -> $(effect, trace)
162
+ const originalArg = node.argument
163
+ const wrappedCall = t.callExpression(
164
+ t.identifier(adapterName),
165
+ [originalArg, t.cloneNode(traceId)]
166
+ )
167
+ node.argument = wrappedCall
168
+ }
87
169
  }
88
170
  }
89
171
  }
@@ -73,6 +73,62 @@ function isDataFirstCall(node: t.CallExpression): boolean {
73
73
  return false
74
74
  }
75
75
 
76
+ /**
77
+ * Extracts the basename from a filepath.
78
+ */
79
+ function basename(filepath: string): string {
80
+ const parts = filepath.split(/[/\\]/)
81
+ return parts[parts.length - 1] || filepath
82
+ }
83
+
84
+ /**
85
+ * Modifies a span name to include source location.
86
+ * "fetchUser" -> "fetchUser (index.ts:9)"
87
+ */
88
+ function createSpanNameWithLocation(
89
+ originalName: string,
90
+ filepath: string,
91
+ line: number
92
+ ): string {
93
+ const filename = basename(filepath)
94
+ return `${originalName} (${filename}:${line})`
95
+ }
96
+
97
+ /**
98
+ * Creates the source location suffix string.
99
+ */
100
+ function createLocationSuffix(filepath: string, line: number): string {
101
+ const filename = basename(filepath)
102
+ return ` (${filename}:${line})`
103
+ }
104
+
105
+ /**
106
+ * Modifies a template literal span name to include source location.
107
+ * Appends the location to the last quasi of the template.
108
+ */
109
+ function modifyTemplateLiteralWithLocation(
110
+ templateLiteral: t.TemplateLiteral,
111
+ filepath: string,
112
+ line: number
113
+ ): t.TemplateLiteral {
114
+ const suffix = createLocationSuffix(filepath, line)
115
+ const quasis = [...templateLiteral.quasis]
116
+ const lastQuasi = quasis[quasis.length - 1]
117
+
118
+ // Create new quasi with appended location
119
+ const newLastQuasi = t.templateElement(
120
+ {
121
+ raw: lastQuasi.value.raw + suffix,
122
+ cooked: (lastQuasi.value.cooked || lastQuasi.value.raw) + suffix
123
+ },
124
+ lastQuasi.tail
125
+ )
126
+
127
+ quasis[quasis.length - 1] = newLastQuasi
128
+
129
+ return t.templateLiteral(quasis, [...templateLiteral.expressions])
130
+ }
131
+
76
132
  /**
77
133
  * Creates the attributes object with source location.
78
134
  */
@@ -193,7 +249,15 @@ export function createWithSpanTraceVisitor(
193
249
 
194
250
  if (isDataFirst) {
195
251
  // Data-first: withSpan(effect, "name", options?)
196
- // Options is at index 2
252
+ // Name is at index 1, options at index 2
253
+ const nameArg = node.arguments[1]
254
+ if (t.isStringLiteral(nameArg)) {
255
+ const newName = createSpanNameWithLocation(nameArg.value, state.filename, line)
256
+ node.arguments[1] = t.stringLiteral(newName)
257
+ } else if (t.isTemplateLiteral(nameArg)) {
258
+ node.arguments[1] = modifyTemplateLiteralWithLocation(nameArg, state.filename, line)
259
+ }
260
+
197
261
  const optionsArg = node.arguments[2]
198
262
  const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs)
199
263
 
@@ -206,7 +270,15 @@ export function createWithSpanTraceVisitor(
206
270
  }
207
271
  } else {
208
272
  // Data-last: withSpan("name", options?)
209
- // Options is at index 1
273
+ // Name is at index 0, options at index 1
274
+ const nameArg = node.arguments[0]
275
+ if (t.isStringLiteral(nameArg)) {
276
+ const newName = createSpanNameWithLocation(nameArg.value, state.filename, line)
277
+ node.arguments[0] = t.stringLiteral(newName)
278
+ } else if (t.isTemplateLiteral(nameArg)) {
279
+ node.arguments[0] = modifyTemplateLiteralWithLocation(nameArg, state.filename, line)
280
+ }
281
+
210
282
  const optionsArg = node.arguments[1]
211
283
  const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs)
212
284
 
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @since 0.1.0
5
5
  */
6
- import type * as t from "@babel/types"
6
+ import * as t from "@babel/types"
7
7
 
8
8
  /**
9
9
  * Checks if a CallExpression is `Effect.gen(...)`.
@@ -79,3 +79,51 @@ export function isYieldAdapterCall(node: t.YieldExpression): boolean {
79
79
  if (node.argument.type !== "CallExpression") return false
80
80
  return isAdapterCall(node.argument)
81
81
  }
82
+
83
+ /**
84
+ * Checks if a YieldExpression is a `yield* _(effect)` pattern with a specific adapter name.
85
+ */
86
+ export function isYieldAdapterCallWithName(node: t.YieldExpression, adapterName: string): boolean {
87
+ if (!node.delegate) return false // Must be yield*, not yield
88
+ if (!node.argument) return false
89
+ if (node.argument.type !== "CallExpression") return false
90
+ const callee = node.argument.callee
91
+ return callee.type === "Identifier" && callee.name === adapterName
92
+ }
93
+
94
+ /**
95
+ * Checks if a YieldExpression is a modern `yield* effect` pattern (without adapter).
96
+ * This is the pattern used when Effect.gen is called without the adapter parameter.
97
+ */
98
+ export function isModernYield(node: t.YieldExpression): boolean {
99
+ if (!node.delegate) return false // Must be yield*, not yield
100
+ if (!node.argument) return false
101
+ // Modern yields are NOT adapter calls - they yield the effect directly
102
+ if (node.argument.type === "CallExpression" && isAdapterCall(node.argument)) {
103
+ return false
104
+ }
105
+ return true
106
+ }
107
+
108
+ /**
109
+ * Gets the generator function from an Effect.gen call.
110
+ * Returns the FunctionExpression/ArrowFunctionExpression if found.
111
+ */
112
+ export function getEffectGenGenerator(node: t.CallExpression): t.FunctionExpression | t.ArrowFunctionExpression | null {
113
+ // Effect.gen can be called with 1 or 2 arguments:
114
+ // Effect.gen(function*() { ... }) - 1 arg
115
+ // Effect.gen(context, function*() { ... }) - 2 args
116
+ const args = node.arguments
117
+
118
+ for (let i = args.length - 1; i >= 0; i--) {
119
+ const arg = args[i]
120
+ if (t.isFunctionExpression(arg) && arg.generator) {
121
+ return arg
122
+ }
123
+ if (t.isArrowFunctionExpression(arg) && arg.generator) {
124
+ return arg
125
+ }
126
+ }
127
+
128
+ return null
129
+ }