🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@clayroach/unplugin

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@clayroach/unplugin - npm Package Compare versions

Comparing version
0.1.0-source-trace.3
to
0.1.0-source-trace.4
+141
dist/cjs/transformers/annotateEffects.js
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.annotateEffectsTransformer = annotateEffectsTransformer;
exports.createAnnotateEffectsVisitor = createAnnotateEffectsVisitor;
const PURE_ANNOTATION = "#__PURE__";
/**
* Checks if a node already has a PURE annotation.
*/
function isPureAnnotated(node) {
const leadingComments = node.leadingComments;
if (!leadingComments) {
return false;
}
return leadingComments.some(comment => /[@#]__PURE__/.test(comment.value));
}
/**
* Adds a PURE annotation comment to a node.
*/
function annotateAsPure(path) {
if (isPureAnnotated(path.node)) {
return;
}
path.addComment("leading", PURE_ANNOTATION);
}
/**
* Checks if the parent is a CallExpression or NewExpression.
*/
function hasCallableParent(path) {
const parentPath = path.parentPath;
if (!parentPath) return false;
return parentPath.isCallExpression() || parentPath.isNewExpression();
}
/**
* Checks if this node is used as a callee (e.g., `foo()` where foo is the callee).
*/
function isUsedAsCallee(path) {
if (!hasCallableParent(path)) {
return false;
}
const parentPath = path.parentPath;
return parentPath.get("callee") === path;
}
/**
* Checks if this node is inside a callee chain (e.g., `foo()()` or `foo.bar()`).
*/
function isInCallee(path) {
let current = path;
do {
current = current.parentPath;
if (!current) return false;
if (isUsedAsCallee(current)) {
return true;
}
} while (!current.isStatement() && !current.isFunction());
return false;
}
/**
* Checks if this expression is executed during module initialization
* (not inside a function that isn't immediately invoked).
*/
function isExecutedDuringInitialization(path) {
let functionParent = path.getFunctionParent();
while (functionParent) {
if (!isUsedAsCallee(functionParent)) {
return false;
}
functionParent = functionParent.getFunctionParent();
}
return true;
}
/**
* Checks if this expression is in an assignment context
* (variable declaration, assignment expression, or class).
*/
function isInAssignmentContext(path) {
const statement = path.getStatementParent();
if (!statement) return false;
let currentPath = path;
do {
currentPath = currentPath.parentPath;
if (!currentPath) return false;
if (currentPath.isVariableDeclaration() || currentPath.isAssignmentExpression() || currentPath.isClass()) {
return true;
}
} while (currentPath !== statement);
return false;
}
/**
* Visitor function for CallExpression and NewExpression nodes.
*/
function callableExpressionVisitor(path, _state) {
// Skip if this is used as a callee (e.g., foo()())
if (isUsedAsCallee(path)) {
return;
}
// Skip if this is inside a callee chain
if (isInCallee(path)) {
return;
}
// Skip if not executed during initialization
if (!isExecutedDuringInitialization(path)) {
return;
}
// Must be in assignment context or export default
const statement = path.getStatementParent();
if (!isInAssignmentContext(path) && !statement?.isExportDefaultDeclaration()) {
return;
}
annotateAsPure(path);
}
/**
* Creates a Babel visitor that adds PURE annotations to call expressions.
*/
function createAnnotateEffectsVisitor(filename, _options) {
return {
Program: {
enter(_path, state) {
state.filename = filename;
}
},
CallExpression(path, state) {
callableExpressionVisitor(path, state);
},
NewExpression(path, state) {
callableExpressionVisitor(path, state);
}
};
}
/**
* Creates the annotate effects transformer plugin.
*/
function annotateEffectsTransformer(options) {
return {
name: "effect-annotate-pure-calls",
visitor: createAnnotateEffectsVisitor("", options)
};
}
//# sourceMappingURL=annotateEffects.js.map
{"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":[]}
/**
* Pure call annotation transformer.
*
* This transformer adds `#__PURE__` comments to call expressions for better tree-shaking.
* It replicates the behavior of `babel-plugin-annotate-pure-calls` but integrated into
* the Effect unplugin.
*
* The `#__PURE__` annotation tells bundlers (Webpack, Rollup, esbuild) that a function call
* has no side effects and can be safely removed if the result is unused.
*
* @since 0.1.0
*/
import type { Visitor } from "@babel/traverse";
/**
* Options for the annotate effects transformer.
*/
export interface AnnotateEffectsOptions {
/**
* Filter function to determine if a file should be transformed.
*/
readonly filter?: (filename: string) => boolean;
}
/**
* State passed through the transformer.
*/
interface TransformState {
filename: string;
}
/**
* Creates a Babel visitor that adds PURE annotations to call expressions.
*/
export declare function createAnnotateEffectsVisitor(filename: string, _options?: AnnotateEffectsOptions): Visitor<TransformState>;
/**
* Creates the annotate effects transformer plugin.
*/
export declare function annotateEffectsTransformer(options?: AnnotateEffectsOptions): {
visitor: Visitor<TransformState>;
name: string;
};
export {};
//# sourceMappingURL=annotateEffects.d.ts.map
{"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"}
const PURE_ANNOTATION = "#__PURE__";
/**
* Checks if a node already has a PURE annotation.
*/
function isPureAnnotated(node) {
const leadingComments = node.leadingComments;
if (!leadingComments) {
return false;
}
return leadingComments.some((comment) => /[@#]__PURE__/.test(comment.value));
}
/**
* Adds a PURE annotation comment to a node.
*/
function annotateAsPure(path) {
if (isPureAnnotated(path.node)) {
return;
}
path.addComment("leading", PURE_ANNOTATION);
}
/**
* Checks if the parent is a CallExpression or NewExpression.
*/
function hasCallableParent(path) {
const parentPath = path.parentPath;
if (!parentPath)
return false;
return parentPath.isCallExpression() || parentPath.isNewExpression();
}
/**
* Checks if this node is used as a callee (e.g., `foo()` where foo is the callee).
*/
function isUsedAsCallee(path) {
if (!hasCallableParent(path)) {
return false;
}
const parentPath = path.parentPath;
return parentPath.get("callee") === path;
}
/**
* Checks if this node is inside a callee chain (e.g., `foo()()` or `foo.bar()`).
*/
function isInCallee(path) {
let current = path;
do {
current = current.parentPath;
if (!current)
return false;
if (isUsedAsCallee(current)) {
return true;
}
} while (!current.isStatement() && !current.isFunction());
return false;
}
/**
* Checks if this expression is executed during module initialization
* (not inside a function that isn't immediately invoked).
*/
function isExecutedDuringInitialization(path) {
let functionParent = path.getFunctionParent();
while (functionParent) {
if (!isUsedAsCallee(functionParent)) {
return false;
}
functionParent = functionParent.getFunctionParent();
}
return true;
}
/**
* Checks if this expression is in an assignment context
* (variable declaration, assignment expression, or class).
*/
function isInAssignmentContext(path) {
const statement = path.getStatementParent();
if (!statement)
return false;
let currentPath = path;
do {
currentPath = currentPath.parentPath;
if (!currentPath)
return false;
if (currentPath.isVariableDeclaration() ||
currentPath.isAssignmentExpression() ||
currentPath.isClass()) {
return true;
}
} while (currentPath !== statement);
return false;
}
/**
* Visitor function for CallExpression and NewExpression nodes.
*/
function callableExpressionVisitor(path, _state) {
// Skip if this is used as a callee (e.g., foo()())
if (isUsedAsCallee(path)) {
return;
}
// Skip if this is inside a callee chain
if (isInCallee(path)) {
return;
}
// Skip if not executed during initialization
if (!isExecutedDuringInitialization(path)) {
return;
}
// Must be in assignment context or export default
const statement = path.getStatementParent();
if (!isInAssignmentContext(path) && !statement?.isExportDefaultDeclaration()) {
return;
}
annotateAsPure(path);
}
/**
* Creates a Babel visitor that adds PURE annotations to call expressions.
*/
export function createAnnotateEffectsVisitor(filename, _options) {
return {
Program: {
enter(_path, state) {
state.filename = filename;
}
},
CallExpression(path, state) {
callableExpressionVisitor(path, state);
},
NewExpression(path, state) {
callableExpressionVisitor(path, state);
}
};
}
/**
* Creates the annotate effects transformer plugin.
*/
export function annotateEffectsTransformer(options) {
return {
name: "effect-annotate-pure-calls",
visitor: createAnnotateEffectsVisitor("", options)
};
}
//# sourceMappingURL=annotateEffects.js.map
{"version":3,"file":"annotateEffects.js","sourceRoot":"","sources":["../../../src/transformers/annotateEffects.ts"],"names":[],"mappings":"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"}
/**
* Pure call annotation transformer.
*
* This transformer adds `#__PURE__` comments to call expressions for better tree-shaking.
* It replicates the behavior of `babel-plugin-annotate-pure-calls` but integrated into
* the Effect unplugin.
*
* The `#__PURE__` annotation tells bundlers (Webpack, Rollup, esbuild) that a function call
* has no side effects and can be safely removed if the result is unused.
*
* @since 0.1.0
*/
import type { NodePath, Visitor } from "@babel/traverse"
import * as t from "@babel/types"
/**
* Options for the annotate effects transformer.
*/
export interface AnnotateEffectsOptions {
/**
* Filter function to determine if a file should be transformed.
*/
readonly filter?: (filename: string) => boolean
}
/**
* State passed through the transformer.
*/
interface TransformState {
filename: string
}
const PURE_ANNOTATION = "#__PURE__"
/**
* Checks if a node already has a PURE annotation.
*/
function isPureAnnotated(node: t.Node): boolean {
const leadingComments = node.leadingComments
if (!leadingComments) {
return false
}
return leadingComments.some((comment) => /[@#]__PURE__/.test(comment.value))
}
/**
* Adds a PURE annotation comment to a node.
*/
function annotateAsPure(path: NodePath<t.CallExpression | t.NewExpression>): void {
if (isPureAnnotated(path.node)) {
return
}
path.addComment("leading", PURE_ANNOTATION)
}
/**
* Checks if the parent is a CallExpression or NewExpression.
*/
function hasCallableParent(path: NodePath): boolean {
const parentPath = path.parentPath
if (!parentPath) return false
return parentPath.isCallExpression() || parentPath.isNewExpression()
}
/**
* Checks if this node is used as a callee (e.g., `foo()` where foo is the callee).
*/
function isUsedAsCallee(path: NodePath): boolean {
if (!hasCallableParent(path)) {
return false
}
const parentPath = path.parentPath as NodePath<t.CallExpression | t.NewExpression>
return parentPath.get("callee") === path
}
/**
* Checks if this node is inside a callee chain (e.g., `foo()()` or `foo.bar()`).
*/
function isInCallee(path: NodePath): boolean {
let current: NodePath | null = path
do {
current = current.parentPath
if (!current) return false
if (isUsedAsCallee(current)) {
return true
}
} while (!current.isStatement() && !current.isFunction())
return false
}
/**
* Checks if this expression is executed during module initialization
* (not inside a function that isn't immediately invoked).
*/
function isExecutedDuringInitialization(path: NodePath): boolean {
let functionParent = path.getFunctionParent()
while (functionParent) {
if (!isUsedAsCallee(functionParent)) {
return false
}
functionParent = functionParent.getFunctionParent()
}
return true
}
/**
* Checks if this expression is in an assignment context
* (variable declaration, assignment expression, or class).
*/
function isInAssignmentContext(path: NodePath): boolean {
const statement = path.getStatementParent()
if (!statement) return false
let currentPath: NodePath | null = path
do {
currentPath = currentPath.parentPath
if (!currentPath) return false
if (
currentPath.isVariableDeclaration() ||
currentPath.isAssignmentExpression() ||
currentPath.isClass()
) {
return true
}
} while (currentPath !== statement)
return false
}
/**
* Visitor function for CallExpression and NewExpression nodes.
*/
function callableExpressionVisitor(
path: NodePath<t.CallExpression | t.NewExpression>,
_state: TransformState
): void {
// Skip if this is used as a callee (e.g., foo()())
if (isUsedAsCallee(path)) {
return
}
// Skip if this is inside a callee chain
if (isInCallee(path)) {
return
}
// Skip if not executed during initialization
if (!isExecutedDuringInitialization(path)) {
return
}
// Must be in assignment context or export default
const statement = path.getStatementParent()
if (!isInAssignmentContext(path) && !statement?.isExportDefaultDeclaration()) {
return
}
annotateAsPure(path)
}
/**
* Creates a Babel visitor that adds PURE annotations to call expressions.
*/
export function createAnnotateEffectsVisitor(
filename: string,
_options?: AnnotateEffectsOptions
): Visitor<TransformState> {
return {
Program: {
enter(_path, state) {
state.filename = filename
}
},
CallExpression(path: NodePath<t.CallExpression>, state) {
callableExpressionVisitor(path, state)
},
NewExpression(path: NodePath<t.NewExpression>, state) {
callableExpressionVisitor(path, state)
}
}
}
/**
* Creates the annotate effects transformer plugin.
*/
export function annotateEffectsTransformer(options?: AnnotateEffectsOptions): {
visitor: Visitor<TransformState>
name: string
} {
return {
name: "effect-annotate-pure-calls",
visitor: createAnnotateEffectsVisitor("", options)
}
}
+10
-2

@@ -11,2 +11,3 @@ "use strict";

var _unplugin = require("unplugin");
var _annotateEffects = require("./transformers/annotateEffects.js");
var _sourceTrace = require("./transformers/sourceTrace.js");

@@ -53,3 +54,3 @@ var _withSpanTrace = require("./transformers/withSpanTrace.js");

const {
annotateEffects: _annotateEffects = false,
annotateEffects = false,
exclude = DEFAULT_EXCLUDE,

@@ -79,4 +80,11 @@ include = DEFAULT_INCLUDE,

}
// Run annotateEffects separately (it has a simpler state)
if (annotateEffects) {
const annotateState = {
filename: id
};
traverse(ast, (0, _annotateEffects.createAnnotateEffectsVisitor)(id), undefined, annotateState);
}
// Combine visitors
if (visitors.length === 0) {
if (visitors.length === 0 && !annotateEffects) {
return null;

@@ -83,0 +91,0 @@ }

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","names":["_generator","_interopRequireDefault","require","_parser","_traverse2","_unplugin","_sourceTrace","_withSpanTrace","e","__esModule","default","traverse","_traverse","generate","_generate","DEFAULT_INCLUDE","DEFAULT_EXCLUDE","shouldTransform","id","include","exclude","pattern","includes","test","unpluginFactory","options","annotateEffects","_annotateEffects","sourceTrace","spanTrace","name","transformInclude","transform","code","ast","parse","sourceType","plugins","visitors","push","createSourceTraceVisitor","createWithSpanTraceVisitor","length","states","map","filename","hoisting","hoistedTraces","Map","counter","statements","i","undefined","output","sourceMaps","sourceFileName","unplugin","exports","createUnplugin","_default"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
{"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,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAoCtF;;;;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;AAgHD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,EAAE,OAAO,CAAmC,CAAA;AAEnH;;;;GAIG;AACH,eAAe,QAAQ,CAAA"}
{"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"}

@@ -5,2 +5,3 @@ import _generate from "@babel/generator";

import { createUnplugin } from "unplugin";
import { createAnnotateEffectsVisitor } from "./transformers/annotateEffects.js";
import { createSourceTraceVisitor } from "./transformers/sourceTrace.js";

@@ -53,3 +54,3 @@ import { createWithSpanTraceVisitor } from "./transformers/withSpanTrace.js";

const unpluginFactory = (options = {}) => {
const { annotateEffects: _annotateEffects = false, exclude = DEFAULT_EXCLUDE, include = DEFAULT_INCLUDE, sourceTrace = true, spanTrace = true } = options;
const { annotateEffects = false, exclude = DEFAULT_EXCLUDE, include = DEFAULT_INCLUDE, sourceTrace = true, spanTrace = true } = options;
return {

@@ -74,4 +75,9 @@ name: "@effect/unplugin",

}
// Run annotateEffects separately (it has a simpler state)
if (annotateEffects) {
const annotateState = { filename: id };
traverse(ast, createAnnotateEffectsVisitor(id), undefined, annotateState);
}
// Combine visitors
if (visitors.length === 0) {
if (visitors.length === 0 && !annotateEffects) {
return null;

@@ -78,0 +84,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
{
"name": "@clayroach/unplugin",
"version": "0.1.0-source-trace.3",
"version": "0.1.0-source-trace.4",
"description": "Universal bundler plugin for Effect transformations",

@@ -5,0 +5,0 @@ "license": "MIT",

@@ -31,2 +31,3 @@ /**

import { createUnplugin, type UnpluginFactory, type UnpluginInstance } from "unplugin"
import { createAnnotateEffectsVisitor } from "./transformers/annotateEffects.js"
import { createSourceTraceVisitor } from "./transformers/sourceTrace.js"

@@ -155,3 +156,3 @@ import { createWithSpanTraceVisitor } from "./transformers/withSpanTrace.js"

const {
annotateEffects: _annotateEffects = false,
annotateEffects = false,
exclude = DEFAULT_EXCLUDE,

@@ -188,4 +189,10 @@ include = DEFAULT_INCLUDE,

// Run annotateEffects separately (it has a simpler state)
if (annotateEffects) {
const annotateState = { filename: id }
traverse(ast, createAnnotateEffectsVisitor(id), undefined, annotateState)
}
// Combine visitors
if (visitors.length === 0) {
if (visitors.length === 0 && !annotateEffects) {
return null

@@ -192,0 +199,0 @@ }