@clayroach/unplugin 0.1.0-source-trace.2 → 0.1.0-source-trace.4
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 +16 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/transformers/annotateEffects.js +141 -0
- package/dist/cjs/transformers/annotateEffects.js.map +1 -0
- package/dist/cjs/transformers/withSpanTrace.js +144 -0
- package/dist/cjs/transformers/withSpanTrace.js.map +1 -0
- package/dist/dts/index.d.ts +7 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/transformers/annotateEffects.d.ts +41 -0
- package/dist/dts/transformers/annotateEffects.d.ts.map +1 -0
- package/dist/dts/transformers/withSpanTrace.d.ts +39 -0
- package/dist/dts/transformers/withSpanTrace.d.ts.map +1 -0
- package/dist/esm/index.js +12 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/transformers/annotateEffects.js +140 -0
- package/dist/esm/transformers/annotateEffects.js.map +1 -0
- package/dist/esm/transformers/withSpanTrace.js +160 -0
- package/dist/esm/transformers/withSpanTrace.js.map +1 -0
- package/package.json +2 -2
- package/src/index.ts +24 -3
- package/src/transformers/annotateEffects.ts +197 -0
- package/src/transformers/withSpanTrace.ts +236 -0
package/dist/cjs/index.js
CHANGED
|
@@ -8,7 +8,9 @@ var _generator = _interopRequireDefault(require("@babel/generator"));
|
|
|
8
8
|
var _parser = require("@babel/parser");
|
|
9
9
|
var _traverse2 = _interopRequireDefault(require("@babel/traverse"));
|
|
10
10
|
var _unplugin = require("unplugin");
|
|
11
|
+
var _annotateEffects = require("./transformers/annotateEffects.js");
|
|
11
12
|
var _sourceTrace = require("./transformers/sourceTrace.js");
|
|
13
|
+
var _withSpanTrace = require("./transformers/withSpanTrace.js");
|
|
12
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
15
|
// Handle both ESM and CJS module exports for Babel packages
|
|
14
16
|
const traverse = typeof _traverse2.default === "function" ? _traverse2.default : _traverse2.default.default;
|
|
@@ -48,10 +50,11 @@ function shouldTransform(id, include, exclude) {
|
|
|
48
50
|
*/
|
|
49
51
|
const unpluginFactory = (options = {}) => {
|
|
50
52
|
const {
|
|
51
|
-
annotateEffects
|
|
53
|
+
annotateEffects = false,
|
|
52
54
|
exclude = DEFAULT_EXCLUDE,
|
|
53
55
|
include = DEFAULT_INCLUDE,
|
|
54
|
-
sourceTrace = true
|
|
56
|
+
sourceTrace = true,
|
|
57
|
+
spanTrace = true
|
|
55
58
|
} = options;
|
|
56
59
|
return {
|
|
57
60
|
name: "@effect/unplugin",
|
|
@@ -69,8 +72,18 @@ const unpluginFactory = (options = {}) => {
|
|
|
69
72
|
if (sourceTrace) {
|
|
70
73
|
visitors.push((0, _sourceTrace.createSourceTraceVisitor)(id));
|
|
71
74
|
}
|
|
75
|
+
if (spanTrace) {
|
|
76
|
+
visitors.push((0, _withSpanTrace.createWithSpanTraceVisitor)(id));
|
|
77
|
+
}
|
|
78
|
+
// Run annotateEffects separately (it has a simpler state)
|
|
79
|
+
if (annotateEffects) {
|
|
80
|
+
const annotateState = {
|
|
81
|
+
filename: id
|
|
82
|
+
};
|
|
83
|
+
traverse(ast, (0, _annotateEffects.createAnnotateEffectsVisitor)(id), undefined, annotateState);
|
|
84
|
+
}
|
|
72
85
|
// Combine visitors
|
|
73
|
-
if (visitors.length === 0) {
|
|
86
|
+
if (visitors.length === 0 && !annotateEffects) {
|
|
74
87
|
return null;
|
|
75
88
|
}
|
|
76
89
|
// Initialize state for each visitor
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_generator","_interopRequireDefault","require","_parser","_traverse2","_unplugin","_sourceTrace","e","__esModule","default","traverse","_traverse","generate","_generate","DEFAULT_INCLUDE","DEFAULT_EXCLUDE","shouldTransform","id","include","exclude","pattern","includes","test","unpluginFactory","options","annotateEffects","
|
|
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":";;;;;;AAwBA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AAA4E,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAiB5E;AACA,MAAMG,QAAQ,GAAe,OAAOC,kBAAS,KAAK,UAAU,GACxDA,kBAAuB,GACtBA,kBAAgD,CAACF,OAAO;AAE7D,MAAMG,QAAQ,GAAe,OAAOC,kBAAS,KAAK,UAAU,GACxDA,kBAAuB,GACtBA,kBAAgD,CAACJ,OAAO;AAsD7D;;;AAGA,MAAMK,eAAe,GAAG,CAAC,YAAY,CAAC;AAEtC;;;AAGA,MAAMC,eAAe,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC;AAEpD;;;AAGA,SAASC,eAAeA,CACtBC,EAAU,EACVC,OAAuC,EACvCC,OAAuC;EAEvC;EACA,KAAK,MAAMC,OAAO,IAAID,OAAO,EAAE;IAC7B,IAAI,OAAOC,OAAO,KAAK,QAAQ,EAAE;MAC/B,IAAIH,EAAE,CAACI,QAAQ,CAACD,OAAO,CAAC,EAAE,OAAO,KAAK;IACxC,CAAC,MAAM,IAAIA,OAAO,CAACE,IAAI,CAACL,EAAE,CAAC,EAAE;MAC3B,OAAO,KAAK;IACd;EACF;EAEA;EACA,KAAK,MAAMG,OAAO,IAAIF,OAAO,EAAE;IAC7B,IAAI,OAAOE,OAAO,KAAK,QAAQ,EAAE;MAC/B,IAAIH,EAAE,CAACI,QAAQ,CAACD,OAAO,CAAC,EAAE,OAAO,IAAI;IACvC,CAAC,MAAM,IAAIA,OAAO,CAACE,IAAI,CAACL,EAAE,CAAC,EAAE;MAC3B,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd;AAEA;;;AAGA,MAAMM,eAAe,GAAqDA,CAACC,OAAO,GAAG,EAAE,KAAI;EACzF,MAAM;IACJC,eAAe,GAAG,KAAK;IACvBN,OAAO,GAAGJ,eAAe;IACzBG,OAAO,GAAGJ,eAAe;IACzBY,WAAW,GAAG,IAAI;IAClBC,SAAS,GAAG;EAAI,CACjB,GAAGH,OAAO;EAEX,OAAO;IACLI,IAAI,EAAE,kBAAkB;IAExBC,gBAAgBA,CAACZ,EAAE;MACjB,OAAOD,eAAe,CAACC,EAAE,EAAEC,OAAiC,EAAEC,OAAiC,CAAC;IAClG,CAAC;IAEDW,SAASA,CAACC,IAAI,EAAEd,EAAE;MAChB;MACA,MAAMe,GAAG,GAAG,IAAAC,aAAK,EAACF,IAAI,EAAE;QACtBG,UAAU,EAAE,QAAQ;QACpBC,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK;OAC9B,CAAC;MAEF;MACA,MAAMC,QAAQ,GAAmC,EAAE;MAEnD,IAAIV,WAAW,EAAE;QACfU,QAAQ,CAACC,IAAI,CAAC,IAAAC,qCAAwB,EAACrB,EAAE,CAAC,CAAC;MAC7C;MAEA,IAAIU,SAAS,EAAE;QACbS,QAAQ,CAACC,IAAI,CAAC,IAAAE,yCAA0B,EAACtB,EAAE,CAAC,CAAC;MAC/C;MAEA;MACA,IAAIQ,eAAe,EAAE;QACnB,MAAMe,aAAa,GAAG;UAAEC,QAAQ,EAAExB;QAAE,CAAE;QACtCP,QAAQ,CAACsB,GAAG,EAAE,IAAAU,6CAA4B,EAACzB,EAAE,CAAC,EAAE0B,SAAS,EAAEH,aAAa,CAAC;MAC3E;MAEA;MACA,IAAIJ,QAAQ,CAACQ,MAAM,KAAK,CAAC,IAAI,CAACnB,eAAe,EAAE;QAC7C,OAAO,IAAI;MACb;MAEA;MACA,MAAMoB,MAAM,GAAGT,QAAQ,CAACU,GAAG,CAAC,OAAO;QACjCL,QAAQ,EAAExB,EAAE;QACZ8B,QAAQ,EAAE;UACRC,aAAa,EAAE,IAAIC,GAAG,EAAE;UACxBC,OAAO,EAAE,CAAC;UACVC,UAAU,EAAE;;OAEf,CAAC,CAAC;MAEH;MACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGhB,QAAQ,CAACQ,MAAM,EAAEQ,CAAC,EAAE,EAAE;QACxC1C,QAAQ,CAACsB,GAAG,EAAEI,QAAQ,CAACgB,CAAC,CAAC,EAAET,SAAS,EAAEE,MAAM,CAACO,CAAC,CAAC,CAAC;MAClD;MAEA;MACA,MAAMC,MAAM,GAAGzC,QAAQ,CAACoB,GAAG,EAAE;QAC3BsB,UAAU,EAAE,IAAI;QAChBC,cAAc,EAAEtC;OACjB,EAAEc,IAAI,CAAC;MAER,OAAO;QACLA,IAAI,EAAEsB,MAAM,CAACtB,IAAI;QACjBe,GAAG,EAAEO,MAAM,CAACP;OACb;IACH;GACD;AACH,CAAC;AAED;;;;;AAKO,MAAMU,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAA+D,IAAAE,wBAAc,EAACnC,eAAe,CAAC;AAEnH;;;;;AAAA,IAAAoC,QAAA,GAAAF,OAAA,CAAAhD,OAAA,GAKe+C,QAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.annotateEffectsTransformer = annotateEffectsTransformer;
|
|
7
|
+
exports.createAnnotateEffectsVisitor = createAnnotateEffectsVisitor;
|
|
8
|
+
const PURE_ANNOTATION = "#__PURE__";
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a node already has a PURE annotation.
|
|
11
|
+
*/
|
|
12
|
+
function isPureAnnotated(node) {
|
|
13
|
+
const leadingComments = node.leadingComments;
|
|
14
|
+
if (!leadingComments) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return leadingComments.some(comment => /[@#]__PURE__/.test(comment.value));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Adds a PURE annotation comment to a node.
|
|
21
|
+
*/
|
|
22
|
+
function annotateAsPure(path) {
|
|
23
|
+
if (isPureAnnotated(path.node)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
path.addComment("leading", PURE_ANNOTATION);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Checks if the parent is a CallExpression or NewExpression.
|
|
30
|
+
*/
|
|
31
|
+
function hasCallableParent(path) {
|
|
32
|
+
const parentPath = path.parentPath;
|
|
33
|
+
if (!parentPath) return false;
|
|
34
|
+
return parentPath.isCallExpression() || parentPath.isNewExpression();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks if this node is used as a callee (e.g., `foo()` where foo is the callee).
|
|
38
|
+
*/
|
|
39
|
+
function isUsedAsCallee(path) {
|
|
40
|
+
if (!hasCallableParent(path)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const parentPath = path.parentPath;
|
|
44
|
+
return parentPath.get("callee") === path;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Checks if this node is inside a callee chain (e.g., `foo()()` or `foo.bar()`).
|
|
48
|
+
*/
|
|
49
|
+
function isInCallee(path) {
|
|
50
|
+
let current = path;
|
|
51
|
+
do {
|
|
52
|
+
current = current.parentPath;
|
|
53
|
+
if (!current) return false;
|
|
54
|
+
if (isUsedAsCallee(current)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
} while (!current.isStatement() && !current.isFunction());
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Checks if this expression is executed during module initialization
|
|
62
|
+
* (not inside a function that isn't immediately invoked).
|
|
63
|
+
*/
|
|
64
|
+
function isExecutedDuringInitialization(path) {
|
|
65
|
+
let functionParent = path.getFunctionParent();
|
|
66
|
+
while (functionParent) {
|
|
67
|
+
if (!isUsedAsCallee(functionParent)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
functionParent = functionParent.getFunctionParent();
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Checks if this expression is in an assignment context
|
|
76
|
+
* (variable declaration, assignment expression, or class).
|
|
77
|
+
*/
|
|
78
|
+
function isInAssignmentContext(path) {
|
|
79
|
+
const statement = path.getStatementParent();
|
|
80
|
+
if (!statement) return false;
|
|
81
|
+
let currentPath = path;
|
|
82
|
+
do {
|
|
83
|
+
currentPath = currentPath.parentPath;
|
|
84
|
+
if (!currentPath) return false;
|
|
85
|
+
if (currentPath.isVariableDeclaration() || currentPath.isAssignmentExpression() || currentPath.isClass()) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
} while (currentPath !== statement);
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Visitor function for CallExpression and NewExpression nodes.
|
|
93
|
+
*/
|
|
94
|
+
function callableExpressionVisitor(path, _state) {
|
|
95
|
+
// Skip if this is used as a callee (e.g., foo()())
|
|
96
|
+
if (isUsedAsCallee(path)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Skip if this is inside a callee chain
|
|
100
|
+
if (isInCallee(path)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Skip if not executed during initialization
|
|
104
|
+
if (!isExecutedDuringInitialization(path)) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Must be in assignment context or export default
|
|
108
|
+
const statement = path.getStatementParent();
|
|
109
|
+
if (!isInAssignmentContext(path) && !statement?.isExportDefaultDeclaration()) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
annotateAsPure(path);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Creates a Babel visitor that adds PURE annotations to call expressions.
|
|
116
|
+
*/
|
|
117
|
+
function createAnnotateEffectsVisitor(filename, _options) {
|
|
118
|
+
return {
|
|
119
|
+
Program: {
|
|
120
|
+
enter(_path, state) {
|
|
121
|
+
state.filename = filename;
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
CallExpression(path, state) {
|
|
125
|
+
callableExpressionVisitor(path, state);
|
|
126
|
+
},
|
|
127
|
+
NewExpression(path, state) {
|
|
128
|
+
callableExpressionVisitor(path, state);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Creates the annotate effects transformer plugin.
|
|
134
|
+
*/
|
|
135
|
+
function annotateEffectsTransformer(options) {
|
|
136
|
+
return {
|
|
137
|
+
name: "effect-annotate-pure-calls",
|
|
138
|
+
visitor: createAnnotateEffectsVisitor("", options)
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=annotateEffects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotateEffects.js","names":["PURE_ANNOTATION","isPureAnnotated","node","leadingComments","some","comment","test","value","annotateAsPure","path","addComment","hasCallableParent","parentPath","isCallExpression","isNewExpression","isUsedAsCallee","get","isInCallee","current","isStatement","isFunction","isExecutedDuringInitialization","functionParent","getFunctionParent","isInAssignmentContext","statement","getStatementParent","currentPath","isVariableDeclaration","isAssignmentExpression","isClass","callableExpressionVisitor","_state","isExportDefaultDeclaration","createAnnotateEffectsVisitor","filename","_options","Program","enter","_path","state","CallExpression","NewExpression","annotateEffectsTransformer","options","name","visitor"],"sources":["../../../src/transformers/annotateEffects.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createWithSpanTraceVisitor = createWithSpanTraceVisitor;
|
|
7
|
+
exports.withSpanTraceTransformer = withSpanTraceTransformer;
|
|
8
|
+
var t = _interopRequireWildcard(require("@babel/types"));
|
|
9
|
+
var _hoisting = require("../utils/hoisting.js");
|
|
10
|
+
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); }
|
|
11
|
+
/**
|
|
12
|
+
* Checks if a CallExpression is a withSpan call.
|
|
13
|
+
* Matches: Effect.withSpan(...), _.withSpan(...), or standalone withSpan(...)
|
|
14
|
+
*/
|
|
15
|
+
function isWithSpanCall(node) {
|
|
16
|
+
const callee = node.callee;
|
|
17
|
+
// Match Effect.withSpan(...) or _.withSpan(...)
|
|
18
|
+
if (callee.type === "MemberExpression" && callee.property.type === "Identifier" && callee.property.name === "withSpan") {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
// Match standalone withSpan(...)
|
|
22
|
+
if (callee.type === "Identifier" && callee.name === "withSpan") {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Determines if this is a data-first call (effect as first arg) or data-last (name as first arg).
|
|
29
|
+
* Data-first: withSpan(effect, "name", options?)
|
|
30
|
+
* Data-last: withSpan("name", options?)
|
|
31
|
+
*/
|
|
32
|
+
function isDataFirstCall(node) {
|
|
33
|
+
// If first argument is a string literal, it's data-last
|
|
34
|
+
if (node.arguments.length > 0 && t.isStringLiteral(node.arguments[0])) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
// If second argument exists and is a string literal, it's data-first
|
|
38
|
+
if (node.arguments.length > 1 && t.isStringLiteral(node.arguments[1])) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
// Default to data-last pattern
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates the attributes object with source location.
|
|
46
|
+
*/
|
|
47
|
+
function createSourceAttributes(filepath, line, column) {
|
|
48
|
+
return t.objectExpression([t.objectProperty(t.stringLiteral("code.filepath"), t.stringLiteral(filepath)), t.objectProperty(t.stringLiteral("code.lineno"), t.numericLiteral(line)), t.objectProperty(t.stringLiteral("code.column"), t.numericLiteral(column))]);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Merges source attributes into an existing options object or creates a new one.
|
|
52
|
+
*/
|
|
53
|
+
function mergeOrCreateOptions(existingOptions, sourceAttrs) {
|
|
54
|
+
if (!existingOptions || t.isSpreadElement(existingOptions) || t.isArgumentPlaceholder(existingOptions)) {
|
|
55
|
+
// No existing options, create new object with attributes
|
|
56
|
+
return t.objectExpression([t.objectProperty(t.identifier("attributes"), sourceAttrs)]);
|
|
57
|
+
}
|
|
58
|
+
if (t.isObjectExpression(existingOptions)) {
|
|
59
|
+
// Check if there's an existing attributes property
|
|
60
|
+
const existingAttrsIndex = existingOptions.properties.findIndex(prop => t.isObjectProperty(prop) && (t.isIdentifier(prop.key) && prop.key.name === "attributes" || t.isStringLiteral(prop.key) && prop.key.value === "attributes"));
|
|
61
|
+
if (existingAttrsIndex >= 0) {
|
|
62
|
+
// Merge with existing attributes using spread
|
|
63
|
+
const existingAttrsProp = existingOptions.properties[existingAttrsIndex];
|
|
64
|
+
const mergedAttrs = t.objectExpression([t.spreadElement(existingAttrsProp.value), ...sourceAttrs.properties]);
|
|
65
|
+
// Clone the options and replace the attributes property
|
|
66
|
+
const newProperties = [...existingOptions.properties];
|
|
67
|
+
newProperties[existingAttrsIndex] = t.objectProperty(t.identifier("attributes"), mergedAttrs);
|
|
68
|
+
return t.objectExpression(newProperties);
|
|
69
|
+
} else {
|
|
70
|
+
// Add new attributes property to existing object
|
|
71
|
+
return t.objectExpression([...existingOptions.properties, t.objectProperty(t.identifier("attributes"), sourceAttrs)]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// If it's a variable reference, spread it and add attributes
|
|
75
|
+
return t.objectExpression([t.spreadElement(existingOptions), t.objectProperty(t.identifier("attributes"), sourceAttrs)]);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Creates a Babel visitor that injects source location attributes into Effect.withSpan calls.
|
|
79
|
+
*/
|
|
80
|
+
function createWithSpanTraceVisitor(filename, _options) {
|
|
81
|
+
return {
|
|
82
|
+
Program: {
|
|
83
|
+
enter(_path, state) {
|
|
84
|
+
state.filename = filename;
|
|
85
|
+
state.hoisting = (0, _hoisting.createHoistingState)();
|
|
86
|
+
},
|
|
87
|
+
exit(path, state) {
|
|
88
|
+
// Prepend all hoisted statements to the program body
|
|
89
|
+
if (state.hoisting.statements.length > 0) {
|
|
90
|
+
path.unshiftContainer("body", state.hoisting.statements);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
CallExpression(path, state) {
|
|
95
|
+
const node = path.node;
|
|
96
|
+
if (!isWithSpanCall(node)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Get source location
|
|
100
|
+
const loc = node.loc;
|
|
101
|
+
if (!loc) return;
|
|
102
|
+
const line = loc.start.line;
|
|
103
|
+
const column = loc.start.column;
|
|
104
|
+
// Create source attributes
|
|
105
|
+
const sourceAttrs = createSourceAttributes(state.filename, line, column);
|
|
106
|
+
const isDataFirst = isDataFirstCall(node);
|
|
107
|
+
if (isDataFirst) {
|
|
108
|
+
// Data-first: withSpan(effect, "name", options?)
|
|
109
|
+
// Options is at index 2
|
|
110
|
+
const optionsArg = node.arguments[2];
|
|
111
|
+
const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs);
|
|
112
|
+
if (node.arguments.length >= 3) {
|
|
113
|
+
// Replace existing options
|
|
114
|
+
node.arguments[2] = newOptions;
|
|
115
|
+
} else {
|
|
116
|
+
// Add options as third argument
|
|
117
|
+
node.arguments.push(newOptions);
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
// Data-last: withSpan("name", options?)
|
|
121
|
+
// Options is at index 1
|
|
122
|
+
const optionsArg = node.arguments[1];
|
|
123
|
+
const newOptions = mergeOrCreateOptions(optionsArg, sourceAttrs);
|
|
124
|
+
if (node.arguments.length >= 2) {
|
|
125
|
+
// Replace existing options
|
|
126
|
+
node.arguments[1] = newOptions;
|
|
127
|
+
} else {
|
|
128
|
+
// Add options as second argument
|
|
129
|
+
node.arguments.push(newOptions);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Creates the withSpan trace transformer plugin.
|
|
137
|
+
*/
|
|
138
|
+
function withSpanTraceTransformer(options) {
|
|
139
|
+
return {
|
|
140
|
+
name: "effect-withspan-trace",
|
|
141
|
+
visitor: createWithSpanTraceVisitor("", options)
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=withSpanTrace.js.map
|
|
@@ -0,0 +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":[]}
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -12,6 +12,13 @@ export interface EffectPluginOptions {
|
|
|
12
12
|
* @default true
|
|
13
13
|
*/
|
|
14
14
|
readonly sourceTrace?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Enable source location attributes injection into Effect.withSpan() calls.
|
|
17
|
+
* When enabled, spans will include code.filepath, code.lineno, and code.column attributes.
|
|
18
|
+
*
|
|
19
|
+
* @default true
|
|
20
|
+
*/
|
|
21
|
+
readonly spanTrace?: boolean;
|
|
15
22
|
/**
|
|
16
23
|
* Enable @__PURE__ annotations for tree-shaking.
|
|
17
24
|
*
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure call annotation transformer.
|
|
3
|
+
*
|
|
4
|
+
* This transformer adds `#__PURE__` comments to call expressions for better tree-shaking.
|
|
5
|
+
* It replicates the behavior of `babel-plugin-annotate-pure-calls` but integrated into
|
|
6
|
+
* the Effect unplugin.
|
|
7
|
+
*
|
|
8
|
+
* The `#__PURE__` annotation tells bundlers (Webpack, Rollup, esbuild) that a function call
|
|
9
|
+
* has no side effects and can be safely removed if the result is unused.
|
|
10
|
+
*
|
|
11
|
+
* @since 0.1.0
|
|
12
|
+
*/
|
|
13
|
+
import type { Visitor } from "@babel/traverse";
|
|
14
|
+
/**
|
|
15
|
+
* Options for the annotate effects transformer.
|
|
16
|
+
*/
|
|
17
|
+
export interface AnnotateEffectsOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Filter function to determine if a file should be transformed.
|
|
20
|
+
*/
|
|
21
|
+
readonly filter?: (filename: string) => boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* State passed through the transformer.
|
|
25
|
+
*/
|
|
26
|
+
interface TransformState {
|
|
27
|
+
filename: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a Babel visitor that adds PURE annotations to call expressions.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createAnnotateEffectsVisitor(filename: string, _options?: AnnotateEffectsOptions): Visitor<TransformState>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates the annotate effects transformer plugin.
|
|
35
|
+
*/
|
|
36
|
+
export declare function annotateEffectsTransformer(options?: AnnotateEffectsOptions): {
|
|
37
|
+
visitor: Visitor<TransformState>;
|
|
38
|
+
name: string;
|
|
39
|
+
};
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=annotateEffects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotateEffects.d.ts","sourceRoot":"","sources":["../../../src/transformers/annotateEffects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGxD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;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;CACjB;AAmID;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,sBAAsB,GAChC,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG;IAC5E,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACb,CAKA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WithSpan source location trace transformer.
|
|
3
|
+
*
|
|
4
|
+
* This transformer injects source location metadata as attributes into Effect.withSpan() calls.
|
|
5
|
+
* It transforms `Effect.withSpan("name")` into `Effect.withSpan("name", { attributes: { "code.filepath": ..., "code.lineno": ... }})`.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.1.0
|
|
8
|
+
*/
|
|
9
|
+
import type { Visitor } from "@babel/traverse";
|
|
10
|
+
import { type HoistingState } from "../utils/hoisting.js";
|
|
11
|
+
/**
|
|
12
|
+
* Options for the withSpan trace transformer.
|
|
13
|
+
*/
|
|
14
|
+
export interface WithSpanTraceOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Filter function to determine if a file should be transformed.
|
|
17
|
+
*/
|
|
18
|
+
readonly filter?: (filename: string) => boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* State passed through the transformer.
|
|
22
|
+
*/
|
|
23
|
+
interface TransformState {
|
|
24
|
+
filename: string;
|
|
25
|
+
hoisting: HoistingState;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a Babel visitor that injects source location attributes into Effect.withSpan calls.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createWithSpanTraceVisitor(filename: string, _options?: WithSpanTraceOptions): Visitor<TransformState>;
|
|
31
|
+
/**
|
|
32
|
+
* Creates the withSpan trace transformer plugin.
|
|
33
|
+
*/
|
|
34
|
+
export declare function withSpanTraceTransformer(options?: WithSpanTraceOptions): {
|
|
35
|
+
visitor: Visitor<TransformState>;
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=withSpanTrace.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -2,7 +2,9 @@ import _generate from "@babel/generator";
|
|
|
2
2
|
import { parse } from "@babel/parser";
|
|
3
3
|
import _traverse from "@babel/traverse";
|
|
4
4
|
import { createUnplugin } from "unplugin";
|
|
5
|
+
import { createAnnotateEffectsVisitor } from "./transformers/annotateEffects.js";
|
|
5
6
|
import { createSourceTraceVisitor } from "./transformers/sourceTrace.js";
|
|
7
|
+
import { createWithSpanTraceVisitor } from "./transformers/withSpanTrace.js";
|
|
6
8
|
// Handle both ESM and CJS module exports for Babel packages
|
|
7
9
|
const traverse = typeof _traverse === "function"
|
|
8
10
|
? _traverse
|
|
@@ -48,7 +50,7 @@ function shouldTransform(id, include, exclude) {
|
|
|
48
50
|
* Creates the unplugin factory.
|
|
49
51
|
*/
|
|
50
52
|
const unpluginFactory = (options = {}) => {
|
|
51
|
-
const { annotateEffects
|
|
53
|
+
const { annotateEffects = false, exclude = DEFAULT_EXCLUDE, include = DEFAULT_INCLUDE, sourceTrace = true, spanTrace = true } = options;
|
|
52
54
|
return {
|
|
53
55
|
name: "@effect/unplugin",
|
|
54
56
|
transformInclude(id) {
|
|
@@ -65,8 +67,16 @@ const unpluginFactory = (options = {}) => {
|
|
|
65
67
|
if (sourceTrace) {
|
|
66
68
|
visitors.push(createSourceTraceVisitor(id));
|
|
67
69
|
}
|
|
70
|
+
if (spanTrace) {
|
|
71
|
+
visitors.push(createWithSpanTraceVisitor(id));
|
|
72
|
+
}
|
|
73
|
+
// Run annotateEffects separately (it has a simpler state)
|
|
74
|
+
if (annotateEffects) {
|
|
75
|
+
const annotateState = { filename: id };
|
|
76
|
+
traverse(ast, createAnnotateEffectsVisitor(id), undefined, annotateState);
|
|
77
|
+
}
|
|
68
78
|
// Combine visitors
|
|
69
|
-
if (visitors.length === 0) {
|
|
79
|
+
if (visitors.length === 0 && !annotateEffects) {
|
|
70
80
|
return null;
|
|
71
81
|
}
|
|
72
82
|
// Initialize state for each visitor
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,SAAS,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,OAAO,SAAS,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAE,cAAc,EAA+C,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|