@clayroach/effect-unplugin 4.0.0-source-tracing.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotateEffects.d.ts +17 -0
- package/dist/annotateEffects.d.ts.map +1 -0
- package/dist/annotateEffects.js +123 -0
- package/dist/annotateEffects.js.map +1 -0
- package/dist/esbuild.d.ts +3 -0
- package/dist/esbuild.d.ts.map +1 -0
- package/dist/esbuild.js +18 -0
- package/dist/esbuild.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +105 -0
- package/dist/index.js.map +1 -0
- package/dist/rollup.d.ts +3 -0
- package/dist/rollup.d.ts.map +1 -0
- package/dist/rollup.js +18 -0
- package/dist/rollup.js.map +1 -0
- package/dist/sourceTrace.d.ts +18 -0
- package/dist/sourceTrace.d.ts.map +1 -0
- package/dist/sourceTrace.js +309 -0
- package/dist/sourceTrace.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/vite.d.ts +3 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +19 -0
- package/dist/vite.js.map +1 -0
- package/dist/webpack.d.ts +3 -0
- package/dist/webpack.d.ts.map +1 -0
- package/dist/webpack.js +18 -0
- package/dist/webpack.js.map +1 -0
- package/package.json +86 -0
- package/src/annotateEffects.ts +201 -0
- package/src/esbuild.ts +18 -0
- package/src/index.ts +119 -0
- package/src/rollup.ts +18 -0
- package/src/sourceTrace.ts +447 -0
- package/src/types.ts +87 -0
- package/src/vite.ts +19 -0
- package/src/webpack.ts +18 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 0.0.1
|
|
3
|
+
* @category models
|
|
4
|
+
*/
|
|
5
|
+
export interface AnnotateResult {
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly map?: unknown;
|
|
8
|
+
readonly transformed: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Transforms source code to add pure annotations to Effect calls.
|
|
12
|
+
*
|
|
13
|
+
* @since 0.0.1
|
|
14
|
+
* @category transform
|
|
15
|
+
*/
|
|
16
|
+
export declare function annotateEffects(code: string, id: string): AnnotateResult;
|
|
17
|
+
//# sourceMappingURL=annotateEffects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotateEffects.d.ts","sourceRoot":"","sources":["../src/annotateEffects.ts"],"names":[],"mappings":"AAkEA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AA0ED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CA8CxE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect tree-shaking annotations transformer.
|
|
3
|
+
*
|
|
4
|
+
* Adds `\/* @__PURE__ *\/` comments to Effect calls for bundler tree-shaking.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.0.1
|
|
7
|
+
*/
|
|
8
|
+
import { parse } from "@babel/parser";
|
|
9
|
+
import * as _traverse from "@babel/traverse";
|
|
10
|
+
import * as _generate from "@babel/generator";
|
|
11
|
+
import * as t from "@babel/types";
|
|
12
|
+
// Handle CommonJS default exports - runtime interop
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
const traverse = _traverse.default ?? _traverse;
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
const generate = _generate.default ?? _generate;
|
|
17
|
+
/**
|
|
18
|
+
* Effect module names that should have pure annotations.
|
|
19
|
+
*/
|
|
20
|
+
const EFFECT_MODULES = /*#__PURE__*/new Set(["Effect", "Option", "Either", "Data", "Schema", "Array", "Chunk", "HashMap", "HashSet", "List", "Queue", "Stream", "Layer", "Scope", "Ref", "SynchronizedRef", "SubscriptionRef", "Duration", "Schedule", "Cause", "Exit", "Match", "Boolean", "Number", "String", "Struct", "Tuple", "Function", "Predicate", "Order", "Equivalence", "Context", "Brand", "Types"]);
|
|
21
|
+
/**
|
|
22
|
+
* Checks if a call expression already has a pure annotation.
|
|
23
|
+
*/
|
|
24
|
+
function hasPureAnnotation(node) {
|
|
25
|
+
const comments = node.leadingComments;
|
|
26
|
+
if (!comments) return false;
|
|
27
|
+
return comments.some(comment => comment.type === "CommentBlock" && (comment.value.includes("@__PURE__") || comment.value.includes("#__PURE__")));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Checks if a call is to an Effect module method.
|
|
31
|
+
*/
|
|
32
|
+
function isEffectModuleCall(node) {
|
|
33
|
+
const callee = node.callee;
|
|
34
|
+
// Effect.succeed(...) or Option.some(...)
|
|
35
|
+
if (t.isMemberExpression(callee) && t.isIdentifier(callee.object) && EFFECT_MODULES.has(callee.object.name)) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Checks if a CallExpression is in a context where pure annotation is useful.
|
|
42
|
+
* Only annotate calls in variable declarations or export declarations.
|
|
43
|
+
*/
|
|
44
|
+
function isInAnnotatableContext(path) {
|
|
45
|
+
let parent = path.parentPath;
|
|
46
|
+
while (parent !== null) {
|
|
47
|
+
const node = parent.node;
|
|
48
|
+
// Variable declaration: const x = Effect.succeed(...)
|
|
49
|
+
if (t.isVariableDeclarator(node)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Export: export const x = Effect.succeed(...)
|
|
53
|
+
if (t.isExportDefaultDeclaration(node) || t.isExportNamedDeclaration(node)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
// Return statement: return Effect.succeed(...)
|
|
57
|
+
if (t.isReturnStatement(node)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
// Arrow function body: () => Effect.succeed(...)
|
|
61
|
+
if (t.isArrowFunctionExpression(node)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// Stop at block statements
|
|
65
|
+
if (t.isBlockStatement(node) || t.isProgram(node)) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
parent = parent.parentPath;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Transforms source code to add pure annotations to Effect calls.
|
|
74
|
+
*
|
|
75
|
+
* @since 0.0.1
|
|
76
|
+
* @category transform
|
|
77
|
+
*/
|
|
78
|
+
export function annotateEffects(code, id) {
|
|
79
|
+
let ast;
|
|
80
|
+
try {
|
|
81
|
+
ast = parse(code, {
|
|
82
|
+
sourceType: "module",
|
|
83
|
+
plugins: ["typescript", "jsx"],
|
|
84
|
+
sourceFilename: id
|
|
85
|
+
});
|
|
86
|
+
} catch {
|
|
87
|
+
return {
|
|
88
|
+
code,
|
|
89
|
+
transformed: false
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
let hasTransformed = false;
|
|
93
|
+
traverse(ast, {
|
|
94
|
+
CallExpression(path) {
|
|
95
|
+
// Skip if already has pure annotation
|
|
96
|
+
if (hasPureAnnotation(path.node)) return;
|
|
97
|
+
// Only annotate Effect module calls
|
|
98
|
+
if (!isEffectModuleCall(path.node)) return;
|
|
99
|
+
// Only annotate in useful contexts
|
|
100
|
+
if (!isInAnnotatableContext(path)) return;
|
|
101
|
+
// Add @__PURE__ annotation
|
|
102
|
+
t.addComment(path.node, "leading", "#__PURE__", false);
|
|
103
|
+
hasTransformed = true;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
if (!hasTransformed) {
|
|
107
|
+
return {
|
|
108
|
+
code,
|
|
109
|
+
transformed: false
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const result = generate(ast, {
|
|
113
|
+
sourceMaps: true,
|
|
114
|
+
sourceFileName: id,
|
|
115
|
+
comments: true
|
|
116
|
+
}, code);
|
|
117
|
+
return {
|
|
118
|
+
code: result.code,
|
|
119
|
+
map: result.map,
|
|
120
|
+
transformed: true
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=annotateEffects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotateEffects.js","names":["parse","_traverse","_generate","t","traverse","default","generate","EFFECT_MODULES","Set","hasPureAnnotation","node","comments","leadingComments","some","comment","type","value","includes","isEffectModuleCall","callee","isMemberExpression","isIdentifier","object","has","name","isInAnnotatableContext","path","parent","parentPath","isVariableDeclarator","isExportDefaultDeclaration","isExportNamedDeclaration","isReturnStatement","isArrowFunctionExpression","isBlockStatement","isProgram","annotateEffects","code","id","ast","sourceType","plugins","sourceFilename","transformed","hasTransformed","CallExpression","addComment","result","sourceMaps","sourceFileName","map"],"sources":["../src/annotateEffects.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esbuild.d.ts","sourceRoot":"","sources":["../src/esbuild.ts"],"names":[],"mappings":";AAiBA,wBAA+B"}
|
package/dist/esbuild.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* esbuild plugin for Effect source location tracing.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import esbuild from "esbuild"
|
|
7
|
+
* import effectSourceTrace from "@effect/unplugin/esbuild"
|
|
8
|
+
*
|
|
9
|
+
* esbuild.build({
|
|
10
|
+
* plugins: [effectSourceTrace()]
|
|
11
|
+
* })
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @since 0.0.1
|
|
15
|
+
*/
|
|
16
|
+
import unplugin from "./index.js";
|
|
17
|
+
export default unplugin.esbuild;
|
|
18
|
+
//# sourceMappingURL=esbuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esbuild.js","names":["unplugin","esbuild"],"sources":["../src/esbuild.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;AAeA,OAAOA,QAAQ,MAAM,YAAY;AAEjC,eAAeA,QAAQ,CAACC,OAAO","ignoreList":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SourceTraceOptions } from "./types.ts";
|
|
2
|
+
export { type AnnotateResult, annotateEffects } from "./annotateEffects.ts";
|
|
3
|
+
export { type TransformResult } from "./sourceTrace.ts";
|
|
4
|
+
export type { FilterPattern, InstrumentableEffect, SourceTraceOptions, SpanInstrumentationOptions } from "./types.ts";
|
|
5
|
+
/**
|
|
6
|
+
* Creates the Effect source trace unplugin.
|
|
7
|
+
*
|
|
8
|
+
* @since 0.0.1
|
|
9
|
+
* @category unplugin
|
|
10
|
+
*/
|
|
11
|
+
export declare const unplugin: import("unplugin").UnpluginInstance<SourceTraceOptions | undefined, boolean>;
|
|
12
|
+
export default unplugin;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEnE,OAAO,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAiCrH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,8EAwCnB,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build-time AST transformer for Effect source location tracing and auto-instrumentation.
|
|
3
|
+
*
|
|
4
|
+
* This plugin provides two features:
|
|
5
|
+
* 1. **Source Tracing**: Transforms `yield*` expressions inside `Effect.gen()` to
|
|
6
|
+
* inject source location information via `CurrentStackFrame`.
|
|
7
|
+
* 2. **Span Instrumentation**: Wraps Effect combinators with `withSpan()` for
|
|
8
|
+
* automatic distributed tracing.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // vite.config.ts
|
|
13
|
+
* import { defineConfig } from "vite"
|
|
14
|
+
* import effectSourceTrace from "@effect/unplugin/vite"
|
|
15
|
+
*
|
|
16
|
+
* export default defineConfig({
|
|
17
|
+
* plugins: [effectSourceTrace({
|
|
18
|
+
* // Enable source tracing (default: true)
|
|
19
|
+
* sourceTrace: true,
|
|
20
|
+
* // Enable span instrumentation
|
|
21
|
+
* spans: {
|
|
22
|
+
* enabled: true,
|
|
23
|
+
* include: ["gen", "fork", "all", "forEach"]
|
|
24
|
+
* }
|
|
25
|
+
* })]
|
|
26
|
+
* })
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @since 0.0.1
|
|
30
|
+
*/
|
|
31
|
+
import { createUnplugin } from "unplugin";
|
|
32
|
+
import { annotateEffects } from "./annotateEffects.js";
|
|
33
|
+
import { transform } from "./sourceTrace.js";
|
|
34
|
+
export { annotateEffects } from "./annotateEffects.js";
|
|
35
|
+
export {} from "./sourceTrace.js";
|
|
36
|
+
const defaultInclude = [/\.[jt]sx?$/];
|
|
37
|
+
const defaultExclude = [/node_modules/];
|
|
38
|
+
function toArray(value) {
|
|
39
|
+
if (value === undefined) return [];
|
|
40
|
+
if (Array.isArray(value)) return value;
|
|
41
|
+
return [value];
|
|
42
|
+
}
|
|
43
|
+
function createFilter(include, exclude) {
|
|
44
|
+
const includePatterns = toArray(include ?? defaultInclude);
|
|
45
|
+
const excludePatterns = toArray(exclude ?? defaultExclude);
|
|
46
|
+
return id => {
|
|
47
|
+
for (const pattern of excludePatterns) {
|
|
48
|
+
if (typeof pattern === "string" ? id.includes(pattern) : pattern.test(id)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (const pattern of includePatterns) {
|
|
53
|
+
if (typeof pattern === "string" ? id.includes(pattern) : pattern.test(id)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates the Effect source trace unplugin.
|
|
62
|
+
*
|
|
63
|
+
* @since 0.0.1
|
|
64
|
+
* @category unplugin
|
|
65
|
+
*/
|
|
66
|
+
export const unplugin = /*#__PURE__*/createUnplugin((options = {}) => {
|
|
67
|
+
const filter = createFilter(options.include, options.exclude);
|
|
68
|
+
return {
|
|
69
|
+
name: "effect-source-trace",
|
|
70
|
+
enforce: "pre",
|
|
71
|
+
transformInclude(id) {
|
|
72
|
+
return filter(id);
|
|
73
|
+
},
|
|
74
|
+
transform(code, id) {
|
|
75
|
+
let currentCode = code;
|
|
76
|
+
let hasTransformed = false;
|
|
77
|
+
let finalMap;
|
|
78
|
+
// Run source trace and span instrumentation
|
|
79
|
+
const traceResult = transform(currentCode, id, options);
|
|
80
|
+
if (traceResult.transformed) {
|
|
81
|
+
currentCode = traceResult.code;
|
|
82
|
+
finalMap = traceResult.map;
|
|
83
|
+
hasTransformed = true;
|
|
84
|
+
}
|
|
85
|
+
// Run annotateEffects if enabled
|
|
86
|
+
if (options.annotateEffects) {
|
|
87
|
+
const annotateResult = annotateEffects(currentCode, id);
|
|
88
|
+
if (annotateResult.transformed) {
|
|
89
|
+
currentCode = annotateResult.code;
|
|
90
|
+
finalMap = annotateResult.map;
|
|
91
|
+
hasTransformed = true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (!hasTransformed) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
code: currentCode,
|
|
99
|
+
map: finalMap
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
export default unplugin;
|
|
105
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["createUnplugin","annotateEffects","transform","defaultInclude","defaultExclude","toArray","value","undefined","Array","isArray","createFilter","include","exclude","includePatterns","excludePatterns","id","pattern","includes","test","unplugin","options","filter","name","enforce","transformInclude","code","currentCode","hasTransformed","finalMap","traceResult","transformed","map","annotateResult"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAASA,cAAc,QAAyD,UAAU;AAC1F,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,SAAS,QAAQ,kBAAkB;AAG5C,SAA8BD,eAAe,QAAQ,sBAAsB;AAC3E,eAAqC,kBAAkB;AAGvD,MAAME,cAAc,GAAmC,CAAC,YAAY,CAAC;AACrE,MAAMC,cAAc,GAAmC,CAAC,cAAc,CAAC;AAEvE,SAASC,OAAOA,CAACC,KAAgC;EAC/C,IAAIA,KAAK,KAAKC,SAAS,EAAE,OAAO,EAAE;EAClC,IAAIC,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC,EAAE,OAAOA,KAAK;EACtC,OAAO,CAACA,KAAwB,CAAC;AACnC;AAEA,SAASI,YAAYA,CACnBC,OAAkC,EAClCC,OAAkC;EAElC,MAAMC,eAAe,GAAGR,OAAO,CAACM,OAAO,IAAIR,cAAc,CAAC;EAC1D,MAAMW,eAAe,GAAGT,OAAO,CAACO,OAAO,IAAIR,cAAc,CAAC;EAE1D,OAAQW,EAAU,IAAa;IAC7B,KAAK,MAAMC,OAAO,IAAIF,eAAe,EAAE;MACrC,IAAI,OAAOE,OAAO,KAAK,QAAQ,GAAGD,EAAE,CAACE,QAAQ,CAACD,OAAO,CAAC,GAAGA,OAAO,CAACE,IAAI,CAACH,EAAE,CAAC,EAAE;QACzE,OAAO,KAAK;MACd;IACF;IACA,KAAK,MAAMC,OAAO,IAAIH,eAAe,EAAE;MACrC,IAAI,OAAOG,OAAO,KAAK,QAAQ,GAAGD,EAAE,CAACE,QAAQ,CAACD,OAAO,CAAC,GAAGA,OAAO,CAACE,IAAI,CAACH,EAAE,CAAC,EAAE;QACzE,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd,CAAC;AACH;AAEA;;;;;;AAMA,OAAO,MAAMI,QAAQ,gBAAGnB,cAAc,CAAiC,CAACoB,OAAO,GAAG,EAAE,KAAI;EACtF,MAAMC,MAAM,GAAGX,YAAY,CAACU,OAAO,CAACT,OAAO,EAAES,OAAO,CAACR,OAAO,CAAC;EAE7D,OAAO;IACLU,IAAI,EAAE,qBAAqB;IAC3BC,OAAO,EAAE,KAAK;IAEdC,gBAAgBA,CAACT,EAAE;MACjB,OAAOM,MAAM,CAACN,EAAE,CAAC;IACnB,CAAC;IAEDb,SAASA,CAACuB,IAAI,EAAEV,EAAE;MAChB,IAAIW,WAAW,GAAGD,IAAI;MACtB,IAAIE,cAAc,GAAG,KAAK;MAC1B,IAAIC,QAAiB;MAErB;MACA,MAAMC,WAAW,GAAG3B,SAAS,CAACwB,WAAW,EAAEX,EAAE,EAAEK,OAAO,CAAC;MACvD,IAAIS,WAAW,CAACC,WAAW,EAAE;QAC3BJ,WAAW,GAAGG,WAAW,CAACJ,IAAI;QAC9BG,QAAQ,GAAGC,WAAW,CAACE,GAAG;QAC1BJ,cAAc,GAAG,IAAI;MACvB;MAEA;MACA,IAAIP,OAAO,CAACnB,eAAe,EAAE;QAC3B,MAAM+B,cAAc,GAAG/B,eAAe,CAACyB,WAAW,EAAEX,EAAE,CAAC;QACvD,IAAIiB,cAAc,CAACF,WAAW,EAAE;UAC9BJ,WAAW,GAAGM,cAAc,CAACP,IAAI;UACjCG,QAAQ,GAAGI,cAAc,CAACD,GAAG;UAC7BJ,cAAc,GAAG,IAAI;QACvB;MACF;MAEA,IAAI,CAACA,cAAc,EAAE;QACnB,OAAO,IAAI;MACb;MACA,OAAO;QAAEF,IAAI,EAAEC,WAAW;QAAEK,GAAG,EAAEH;MAAQ,CAA6B;IACxE;GACD;AACH,CAAC,CAAC;AAEF,eAAeT,QAAQ","ignoreList":[]}
|
package/dist/rollup.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../src/rollup.ts"],"names":[],"mappings":";AAiBA,wBAA8B"}
|
package/dist/rollup.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rollup plugin for Effect source location tracing.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* // rollup.config.js
|
|
7
|
+
* import effectSourceTrace from "@effect/unplugin/rollup"
|
|
8
|
+
*
|
|
9
|
+
* export default {
|
|
10
|
+
* plugins: [effectSourceTrace()]
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @since 0.0.1
|
|
15
|
+
*/
|
|
16
|
+
import unplugin from "./index.js";
|
|
17
|
+
export default unplugin.rollup;
|
|
18
|
+
//# sourceMappingURL=rollup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup.js","names":["unplugin","rollup"],"sources":["../src/rollup.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;AAeA,OAAOA,QAAQ,MAAM,YAAY;AAEjC,eAAeA,QAAQ,CAACC,MAAM","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SourceTraceOptions } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* @since 0.0.1
|
|
4
|
+
* @category models
|
|
5
|
+
*/
|
|
6
|
+
export interface TransformResult {
|
|
7
|
+
readonly code: string;
|
|
8
|
+
readonly map?: unknown;
|
|
9
|
+
readonly transformed: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Transforms source code to inject source location tracing and span instrumentation.
|
|
13
|
+
*
|
|
14
|
+
* @since 0.0.1
|
|
15
|
+
* @category transform
|
|
16
|
+
*/
|
|
17
|
+
export declare function transform(code: string, id: string, options?: SourceTraceOptions): TransformResult;
|
|
18
|
+
//# sourceMappingURL=sourceTrace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceTrace.d.ts","sourceRoot":"","sources":["../src/sourceTrace.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAwB,kBAAkB,EAA8B,MAAM,YAAY,CAAA;AAmCtG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AAuND;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,kBAAuB,GAC/B,eAAe,CAyKjB"}
|