pinets 0.1.31 → 0.1.33
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/pinets.dev.browser.js +88 -0
- package/dist/pinets.dev.cjs +88 -0
- package/dist/pinets.dev.cjs.map +1 -1
- package/dist/pinets.dev.es.js +88 -0
- package/dist/pinets.dev.es.js.map +1 -1
- package/dist/pinets.min.browser.js +12 -12
- package/dist/pinets.min.cjs +12 -12
- package/dist/pinets.min.es.js +2 -2
- package/dist/types/namespaces/TechnicalAnalysis.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinets.dev.es.js","sources":["../src/transpiler/ScopeManager.class.ts","../src/transpiler/index.ts","../src/PineTS.class.ts","../src/namespaces/Core.ts","../src/namespaces/Input.ts","../src/namespaces/PineMath.ts","../src/namespaces/PineRequest.ts","../src/namespaces/TechnicalAnalysis.ts","../src/namespaces/PineArray.ts","../src/Context.class.ts","../src/marketData/Binance/BinanceProvider.class.ts","../src/marketData/Provider.class.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\n\r\nexport class ScopeManager {\r\n private scopes: Map<string, string>[] = [];\r\n private scopeTypes: string[] = [];\r\n private scopeCounts: Map<string, number> = new Map();\r\n private contextBoundVars: Set<string> = new Set();\r\n private arrayPatternElements: Set<string> = new Set();\r\n private rootParams: Set<string> = new Set();\r\n private varKinds: Map<string, string> = new Map();\r\n private loopVars: Set<string> = new Set();\r\n private loopVarNames: Map<string, string> = new Map(); // Map original names to transformed names\r\n private paramIdCounter: number = 0;\r\n private cacheIdCounter: number = 0;\r\n private tempVarCounter: number = 0;\r\n\r\n public get nextParamIdArg(): any {\r\n return {\r\n type: 'Identifier',\r\n name: `'p${this.paramIdCounter++}'`,\r\n };\r\n }\r\n\r\n public get nextCacheIdArg(): any {\r\n return {\r\n type: 'Identifier',\r\n name: `'cache_${this.cacheIdCounter++}'`,\r\n };\r\n }\r\n constructor() {\r\n // Initialize global scope\r\n this.pushScope('glb');\r\n }\r\n\r\n pushScope(type: string): void {\r\n // Add a new scope of the given type\r\n this.scopes.push(new Map());\r\n this.scopeTypes.push(type);\r\n this.scopeCounts.set(type, (this.scopeCounts.get(type) || 0) + 1);\r\n }\r\n\r\n popScope(): void {\r\n // Remove the current scope\r\n this.scopes.pop();\r\n this.scopeTypes.pop();\r\n }\r\n\r\n getCurrentScopeType(): string {\r\n return this.scopeTypes[this.scopeTypes.length - 1];\r\n }\r\n\r\n getCurrentScopeCount(): number {\r\n return this.scopeCounts.get(this.getCurrentScopeType()) || 1;\r\n }\r\n\r\n addContextBoundVar(name: string, isRootParam: boolean = false): void {\r\n // Register a variable as context-bound, with optional root parameter flag\r\n this.contextBoundVars.add(name);\r\n if (isRootParam) {\r\n this.rootParams.add(name);\r\n }\r\n }\r\n addArrayPatternElement(name: string): void {\r\n this.arrayPatternElements.add(name);\r\n }\r\n\r\n isContextBound(name: string): boolean {\r\n // Check if a variable is context-bound\r\n return this.contextBoundVars.has(name);\r\n }\r\n isArrayPatternElement(name: string): boolean {\r\n return this.arrayPatternElements.has(name);\r\n }\r\n\r\n isRootParam(name: string): boolean {\r\n // Check if a variable is a root function parameter\r\n return this.rootParams.has(name);\r\n }\r\n\r\n addLoopVariable(originalName: string, transformedName: string): void {\r\n this.loopVars.add(originalName);\r\n this.loopVarNames.set(originalName, transformedName);\r\n }\r\n\r\n getLoopVariableName(name: string): string | undefined {\r\n return this.loopVarNames.get(name);\r\n }\r\n\r\n isLoopVariable(name: string): boolean {\r\n return this.loopVars.has(name);\r\n }\r\n\r\n addVariable(name: string, kind: string): string {\r\n // Regular variable handling\r\n if (this.isContextBound(name)) {\r\n return name;\r\n }\r\n const currentScope = this.scopes[this.scopes.length - 1];\r\n const scopeType = this.scopeTypes[this.scopeTypes.length - 1];\r\n const scopeCount = this.scopeCounts.get(scopeType) || 1;\r\n\r\n const newName = `${scopeType}${scopeCount}_${name}`;\r\n currentScope.set(name, newName);\r\n this.varKinds.set(newName, kind);\r\n return newName;\r\n }\r\n\r\n getVariable(name: string): [string, string] {\r\n // If it's a loop variable, return it as is\r\n if (this.loopVars.has(name)) {\r\n const transformedName = this.loopVarNames.get(name);\r\n if (transformedName) {\r\n return [transformedName, 'let'];\r\n }\r\n }\r\n\r\n // Regular variable handling\r\n if (this.isContextBound(name)) {\r\n return [name, 'let'];\r\n }\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const scope = this.scopes[i];\r\n if (scope.has(name)) {\r\n const scopedName = scope.get(name)!;\r\n const kind = this.varKinds.get(scopedName) || 'let';\r\n return [scopedName, kind];\r\n }\r\n }\r\n return [name, 'let'];\r\n }\r\n\r\n public generateTempVar(): string {\r\n return `temp_${++this.tempVarCounter}`;\r\n }\r\n}\r\n\r\nexport default ScopeManager;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\n\r\n//!!!Warning!!! this code is not clean, it was initially written as a PoC then used as transpiler for PineTS\r\n//Future version will require major refactoring or full rewrite of the transpiler\r\n/**\r\n * PineTS Transpiler\r\n *\r\n * What is PineTS ?\r\n * -----------------\r\n * PineTS is an open-source intermediate language designed to bridge the gap between Pine Script and JavaScript.\r\n * It provides a way to simulate Pine Script-like behavior in a JavaScript environment by representing Pine Script code\r\n * in a JavaScript-compatible format.\r\n *\r\n * Important Notes:\r\n * -----------------\r\n * 1. **Independence from Pine Script**: PineTS is not officially affiliated with, endorsed by, or associated with TradingView or Pine Script.\r\n * It is an independent open-source initiative created to enable developers to replicate Pine Script indicators in JavaScript environments.\r\n * 2. **Purpose**: PineTS uses JavaScript syntax and semantics but should not be confused with standard JavaScript code.\r\n * It acts as a representation of Pine Script logic that requires transpilation to be executed in JavaScript.\r\n * 3. **Open Source**: This project is developed and maintained as an open-source initiative. It is intended to serve as a tool for\r\n * developers to bridge Pine Script concepts into JavaScript applications.\r\n *\r\n * What Does PineTS Transpiler Do?\r\n * --------------------------------\r\n * PineTS cannot be executed directly in a JavaScript environment. It requires transpilation into standard JavaScript to handle\r\n * Pine Script's unique time-series data processing. The PineTS Transpiler facilitates this process by transforming PineTS code\r\n * into executable JavaScript at runtime, making it possible to execute Pine Script-inspired logic in JavaScript applications.\r\n *\r\n * Key Features of the Transpiler:\r\n * --------------------------------\r\n * 1. **Context Management**: Transforms code to use a context object (`$`) for variable storage, ensuring all variables are\r\n * accessed through this context to prevent scope conflicts.\r\n * 2. **Variable Scoping**: Renames variables based on their scope and declaration type (`const`, `let`, `var`) to avoid naming issues.\r\n * 3. **Function Handling**: Converts arrow functions while maintaining parameters and logic. Parameters are registered in the context\r\n * to prevent accidental renaming.\r\n * 4. **Loop and Conditional Handling**: Adjusts loops and conditionals to ensure proper scoping and handling of variables.\r\n *\r\n * Usage:\r\n * -------\r\n * - The `transpile` function takes a JavaScript function or code string, applies transformations, and returns the transformed\r\n * code or function.\r\n * - The transformed code uses a context object (`$`) to manage variable storage and access.\r\n *\r\n * Disclaimer:\r\n * -----------\r\n * PineTS is independently developed and is not endorsed by or affiliated with TradingView, the creators of Pine Script. All\r\n * trademarks and registered trademarks mentioned belong to their respective owners.\r\n */\r\n\r\nimport * as acorn from 'acorn';\r\nimport * as walk from 'acorn-walk';\r\nimport * as astring from 'astring';\r\nimport ScopeManager from './ScopeManager.class';\r\nconst CONTEXT_NAME = '$';\r\nconst UNDEFINED_ARG = {\r\n type: 'Identifier',\r\n name: 'undefined',\r\n};\r\n\r\nfunction transformArrayIndex(node: any, scopeManager: ScopeManager): void {\r\n //const isIfStatement = scopeManager.getCurrentScopeType() == 'if';\r\n //const isForStatement = scopeManager.getCurrentScopeType() == 'for';\r\n if (node.computed && node.property.type === 'Identifier') {\r\n // Skip transformation if it's a loop variable\r\n if (scopeManager.isLoopVariable(node.property.name)) {\r\n return;\r\n }\r\n\r\n // Only transform if it's not a context-bound variable\r\n if (!scopeManager.isContextBound(node.property.name)) {\r\n const [scopedName, kind] = scopeManager.getVariable(node.property.name);\r\n node.property = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Add [0] to the index\r\n node.property = {\r\n type: 'MemberExpression',\r\n object: node.property,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n }\r\n\r\n if (node.computed && node.object.type === 'Identifier') {\r\n if (scopeManager.isLoopVariable(node.object.name)) {\r\n return;\r\n }\r\n\r\n if (!scopeManager.isContextBound(node.object.name)) {\r\n const [scopedName, kind] = scopeManager.getVariable(node.object.name);\r\n\r\n //transform the object to scoped variable\r\n\r\n node.object = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n }\r\n\r\n if (node.property.type === 'MemberExpression') {\r\n const memberNode = node.property;\r\n if (!memberNode._indexTransformed) {\r\n transformArrayIndex(memberNode, scopeManager);\r\n memberNode._indexTransformed = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction transformMemberExpression(memberNode: any, originalParamName: string, scopeManager: ScopeManager): void {\r\n // Skip transformation for Math object properties\r\n if (memberNode.object && memberNode.object.type === 'Identifier' && memberNode.object.name === 'Math') {\r\n return;\r\n }\r\n\r\n //if statment variables always need to be transformed\r\n const isIfStatement = scopeManager.getCurrentScopeType() == 'if';\r\n const isElseStatement = scopeManager.getCurrentScopeType() == 'els';\r\n const isForStatement = scopeManager.getCurrentScopeType() == 'for';\r\n // If the object is a context-bound variable (like a function parameter), skip transformation\r\n if (\r\n !isIfStatement &&\r\n !isElseStatement &&\r\n !isForStatement &&\r\n memberNode.object &&\r\n memberNode.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(memberNode.object.name) &&\r\n !scopeManager.isRootParam(memberNode.object.name)\r\n ) {\r\n return;\r\n }\r\n\r\n // Transform array indices\r\n if (!memberNode._indexTransformed) {\r\n transformArrayIndex(memberNode, scopeManager);\r\n memberNode._indexTransformed = true;\r\n }\r\n}\r\n\r\nfunction transformVariableDeclaration(varNode: any, scopeManager: ScopeManager): void {\r\n varNode.declarations.forEach((decl: any) => {\r\n //special case for na\r\n if (decl.init.name == 'na') {\r\n decl.init.name = 'NaN';\r\n }\r\n\r\n // Check if this is a context property assignment\r\n\r\n // prettier-ignore\r\n const isContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object && \r\n (decl.init.object.name === 'context' || \r\n decl.init.object.name === CONTEXT_NAME || \r\n decl.init.object.name === 'context2')\r\n\r\n // prettier-ignore\r\n const isSubContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object?.object &&\r\n (decl.init.object.object.name === 'context' ||\r\n decl.init.object.object.name === CONTEXT_NAME ||\r\n decl.init.object.object.name === 'context2');\r\n\r\n // Check if this is an arrow function declaration\r\n const isArrowFunction = decl.init && decl.init.type === 'ArrowFunctionExpression';\r\n\r\n if (isContextProperty) {\r\n // For context properties, register as context-bound and update the object name\r\n if (decl.id.name) {\r\n scopeManager.addContextBoundVar(decl.id.name);\r\n }\r\n if (decl.id.properties) {\r\n decl.id.properties.forEach((property: any) => {\r\n if (property.key.name) {\r\n scopeManager.addContextBoundVar(property.key.name);\r\n }\r\n });\r\n }\r\n decl.init.object.name = CONTEXT_NAME;\r\n return;\r\n }\r\n\r\n if (isSubContextProperty) {\r\n // For context properties, register as context-bound and update the object name\r\n if (decl.id.name) {\r\n scopeManager.addContextBoundVar(decl.id.name);\r\n }\r\n if (decl.id.properties) {\r\n decl.id.properties.forEach((property: any) => {\r\n if (property.key.name) {\r\n scopeManager.addContextBoundVar(property.key.name);\r\n }\r\n });\r\n }\r\n decl.init.object.object.name = CONTEXT_NAME;\r\n return;\r\n }\r\n\r\n if (isArrowFunction) {\r\n // Register arrow function parameters as context-bound\r\n decl.init.params.forEach((param: any) => {\r\n if (param.type === 'Identifier') {\r\n scopeManager.addContextBoundVar(param.name);\r\n }\r\n });\r\n }\r\n\r\n // Transform non-context variables to use the context object\r\n const newName = scopeManager.addVariable(decl.id.name, varNode.kind);\r\n const kind = varNode.kind; // 'const', 'let', or 'var'\r\n\r\n // Transform identifiers in the init expression\r\n if (decl.init && !isArrowFunction) {\r\n // Check if initialization is a namespace function call\r\n if (\r\n decl.init.type === 'CallExpression' &&\r\n decl.init.callee.type === 'MemberExpression' &&\r\n decl.init.callee.object &&\r\n decl.init.callee.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(decl.init.callee.object.name)\r\n ) {\r\n // Transform the function call arguments\r\n transformCallExpression(decl.init, scopeManager);\r\n } else {\r\n // Add parent references for proper function call detection\r\n walk.recursive(\r\n decl.init,\r\n { parent: decl.init },\r\n {\r\n Identifier(node: any, state: any) {\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n if (node.type === 'Identifier' && (isBinaryOperation || isConditional)) {\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: node.name,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n });\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n // Set parent for the function name\r\n if (node.callee.type === 'Identifier') {\r\n node.callee.parent = node;\r\n }\r\n // Set parent for arguments\r\n node.arguments.forEach((arg: any) => {\r\n if (arg.type === 'Identifier') {\r\n arg.parent = node;\r\n }\r\n });\r\n transformCallExpression(node, scopeManager);\r\n // Continue walking the arguments\r\n node.arguments.forEach((arg) => c(arg, { parent: node }));\r\n },\r\n BinaryExpression(node: any, state: any, c: any) {\r\n // Set parent references for operands\r\n if (node.left.type === 'Identifier') {\r\n node.left.parent = node;\r\n }\r\n if (node.right.type === 'Identifier') {\r\n node.right.parent = node;\r\n }\r\n // Transform both operands\r\n c(node.left, { parent: node });\r\n c(node.right, { parent: node });\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n // Set parent reference\r\n if (node.object.type === 'Identifier') {\r\n node.object.parent = node;\r\n }\r\n if (node.property.type === 'Identifier') {\r\n node.property.parent = node;\r\n }\r\n // Transform array indices first\r\n transformArrayIndex(node, scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node });\r\n }\r\n },\r\n }\r\n );\r\n }\r\n }\r\n\r\n // Create the target variable reference\r\n const targetVarRef = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: newName,\r\n },\r\n computed: false,\r\n };\r\n\r\n const isArrayPatternVar = scopeManager.isArrayPatternElement(decl.id.name);\r\n // Check if initialization is from array access\r\n const isArrayInit =\r\n !isArrayPatternVar &&\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.computed &&\r\n decl.init.property &&\r\n (decl.init.property.type === 'Literal' || decl.init.property.type === 'MemberExpression');\r\n\r\n if (decl.init?.property?.type === 'MemberExpression') {\r\n if (!decl.init.property._indexTransformed) {\r\n transformArrayIndex(decl.init.property, scopeManager);\r\n decl.init.property._indexTransformed = true;\r\n }\r\n }\r\n // Create an assignment expression for the transformed variable\r\n const assignmentExpr = {\r\n type: 'ExpressionStatement',\r\n expression: {\r\n type: 'AssignmentExpression',\r\n operator: '=',\r\n left: targetVarRef,\r\n right: decl.init\r\n ? isArrowFunction || isArrayPatternVar\r\n ? decl.init // Keep arrow functions and array pattern variables as-is\r\n : {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'init',\r\n },\r\n computed: false,\r\n },\r\n arguments: isArrayInit ? [targetVarRef, decl.init.object, decl.init.property] : [targetVarRef, decl.init],\r\n }\r\n : {\r\n type: 'Identifier',\r\n name: 'undefined',\r\n },\r\n },\r\n };\r\n\r\n if (isArrayPatternVar) {\r\n assignmentExpr.expression.right.object.property.name += `?.[0][${decl.init.property.value}]`;\r\n const obj = assignmentExpr.expression.right.object;\r\n\r\n assignmentExpr.expression.right = {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'init',\r\n },\r\n computed: false,\r\n },\r\n arguments: [targetVarRef, obj /*, decl.init.property.value*/],\r\n };\r\n }\r\n\r\n if (isArrowFunction) {\r\n // Transform the body of arrow functions\r\n scopeManager.pushScope('fn');\r\n walk.recursive(decl.init.body, scopeManager, {\r\n BlockStatement(node: any, state: ScopeManager, c: any) {\r\n //state.pushScope('block');\r\n node.body.forEach((stmt: any) => c(stmt, state));\r\n //state.popScope();\r\n },\r\n IfStatement(node: any, state: ScopeManager, c: any) {\r\n state.pushScope('if');\r\n c(node.consequent, state);\r\n if (node.alternate) {\r\n state.pushScope('els');\r\n c(node.alternate, state);\r\n state.popScope();\r\n }\r\n state.popScope();\r\n },\r\n VariableDeclaration(node: any, state: ScopeManager) {\r\n transformVariableDeclaration(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n },\r\n AssignmentExpression(node: any, state: ScopeManager) {\r\n transformAssignmentExpression(node, state);\r\n },\r\n });\r\n scopeManager.popScope();\r\n }\r\n\r\n // Replace the original node with the transformed assignment\r\n Object.assign(varNode, assignmentExpr);\r\n });\r\n}\r\n\r\nfunction transformIdentifier(node: any, scopeManager: ScopeManager): void {\r\n // Transform identifiers to use the context object\r\n if (node.name !== CONTEXT_NAME) {\r\n // Skip transformation for global and native objects\r\n if (\r\n node.name === 'Math' ||\r\n node.name === 'NaN' ||\r\n node.name === 'undefined' ||\r\n node.name === 'Infinity' ||\r\n node.name === 'null' ||\r\n (node.name.startsWith(\"'\") && node.name.endsWith(\"'\")) ||\r\n (node.name.startsWith('\"') && node.name.endsWith('\"')) ||\r\n (node.name.startsWith('`') && node.name.endsWith('`'))\r\n ) {\r\n return;\r\n }\r\n\r\n // Skip transformation for loop variables\r\n if (scopeManager.isLoopVariable(node.name)) {\r\n return;\r\n }\r\n\r\n // If it's a nested function parameter (but not a root parameter), skip transformation\r\n if (scopeManager.isContextBound(node.name) && !scopeManager.isRootParam(node.name)) {\r\n return;\r\n }\r\n\r\n // Check if this identifier is part of a namespace member access (e.g., ta.ema)\r\n const isNamespaceMember =\r\n node.parent && node.parent.type === 'MemberExpression' && node.parent.object === node && scopeManager.isContextBound(node.name);\r\n\r\n // Check if this identifier is part of a param() call\r\n const isParamCall =\r\n node.parent &&\r\n node.parent.type === 'CallExpression' &&\r\n node.parent.callee &&\r\n node.parent.callee.type === 'MemberExpression' &&\r\n node.parent.callee.property.name === 'param';\r\n\r\n const isInit = node.parent && node.parent.type === 'AssignmentExpression' && node.parent.left === node;\r\n // Check if this identifier is an argument to a namespace function\r\n const isNamespaceFunctionArg =\r\n node.parent &&\r\n node.parent.type === 'CallExpression' &&\r\n node.parent.callee &&\r\n node.parent.callee.type === 'MemberExpression' &&\r\n scopeManager.isContextBound(node.parent.callee.object.name);\r\n\r\n // Check if this identifier is part of an array access\r\n const isArrayAccess = node.parent && node.parent.type === 'MemberExpression' && node.parent.computed;\r\n\r\n // Check if this identifier is part of an array access that's an argument to a namespace function\r\n const isArrayIndexInNamespaceCall =\r\n node.parent &&\r\n node.parent.type === 'MemberExpression' &&\r\n node.parent.computed &&\r\n node.parent.property === node &&\r\n node.parent.parent &&\r\n node.parent.parent.type === 'CallExpression' &&\r\n node.parent.parent.callee &&\r\n node.parent.parent.callee.type === 'MemberExpression' &&\r\n scopeManager.isContextBound(node.parent.parent.callee.object.name);\r\n\r\n // Check if this identifier is a function being called\r\n const isFunctionCall = node.parent && node.parent.type === 'CallExpression' && node.parent.callee === node;\r\n\r\n if (isNamespaceMember || isParamCall || isNamespaceFunctionArg || isArrayIndexInNamespaceCall || isFunctionCall) {\r\n // For function calls, we should just use the original name without scoping\r\n if (isFunctionCall) {\r\n return;\r\n }\r\n // Don't add [0] for namespace function arguments or array indices\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n });\r\n return;\r\n }\r\n\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n const memberExpr = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Check if parent node is already a member expression with computed property (array access)\r\n const hasArrayAccess = node.parent && node.parent.type === 'MemberExpression' && node.parent.computed && node.parent.object === node;\r\n\r\n if (!hasArrayAccess && !isArrayAccess) {\r\n // Add [0] array access if not already present and not part of array access\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: memberExpr,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n });\r\n } else {\r\n // Just replace with the member expression without adding array access\r\n Object.assign(node, memberExpr);\r\n }\r\n }\r\n}\r\n\r\nfunction transformAssignmentExpression(node: any, scopeManager: ScopeManager): void {\r\n // Transform assignment expressions to use the context object\r\n if (node.left.type === 'Identifier') {\r\n const [varName, kind] = scopeManager.getVariable(node.left.name);\r\n const memberExpr = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: varName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Add [0] array access for assignment target\r\n node.left = {\r\n type: 'MemberExpression',\r\n object: memberExpr,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n\r\n // Transform identifiers in the right side of the assignment\r\n walk.recursive(\r\n node.right,\r\n { parent: node.right, inNamespaceCall: false },\r\n {\r\n Identifier(node: any, state: any, c: any) {\r\n //special case for na\r\n if (node.name == 'na') {\r\n node.name = 'NaN';\r\n }\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n const isContextBound = scopeManager.isContextBound(node.name) && !scopeManager.isRootParam(node.name);\r\n const hasArrayAccess = node.parent && node.parent.type === 'MemberExpression' && node.parent.computed && node.parent.object === node;\r\n const isParamCall = node.parent && node.parent._isParamCall;\r\n const isMemberExpression = node.parent && node.parent.type === 'MemberExpression';\r\n const isReserved = node.name === 'NaN';\r\n\r\n if (isContextBound || isConditional || isBinaryOperation) {\r\n if (node.type === 'MemberExpression') {\r\n transformArrayIndex(node, scopeManager);\r\n } else if (node.type === 'Identifier' && !isMemberExpression && !hasArrayAccess && !isParamCall && !isReserved) {\r\n addArrayAccess(node, scopeManager);\r\n }\r\n }\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n // Transform array indices first\r\n transformArrayIndex(node, scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node, inNamespaceCall: state.inNamespaceCall });\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n const isNamespaceCall =\r\n node.callee &&\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object &&\r\n node.callee.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(node.callee.object.name);\r\n\r\n // First transform the call expression itself\r\n transformCallExpression(node, scopeManager);\r\n\r\n // Then transform its arguments with the correct context\r\n node.arguments.forEach((arg: any) => c(arg, { parent: node, inNamespaceCall: isNamespaceCall || state.inNamespaceCall }));\r\n\r\n // Add [0] to the function call result if it's a namespace call and hasn't been wrapped yet\r\n // and it's not a param() call\r\n // if (!node._arrayWrapped && isNamespaceCall && node.callee.property.name !== 'param') {\r\n // const wrappedNode = {\r\n // type: 'MemberExpression',\r\n // object: { ...node },\r\n // property: {\r\n // type: 'Literal',\r\n // value: 0,\r\n // },\r\n // computed: true,\r\n // };\r\n // Object.assign(node, wrappedNode);\r\n // node._arrayWrapped = true;\r\n // }\r\n },\r\n }\r\n );\r\n}\r\n\r\nfunction createWrapperFunction(arrowFunction: any): any {\r\n // Create a wrapper function with the context parameter\r\n return {\r\n type: 'FunctionDeclaration',\r\n id: null,\r\n params: [\r\n {\r\n type: 'Identifier',\r\n name: 'context',\r\n },\r\n ],\r\n body: {\r\n type: 'BlockStatement',\r\n body: [\r\n {\r\n type: 'ReturnStatement',\r\n argument: arrowFunction,\r\n },\r\n ],\r\n },\r\n };\r\n}\r\n\r\nfunction transformArrowFunctionParams(node: any, scopeManager: ScopeManager, isRootFunction: boolean = false): void {\r\n // Register arrow function parameters as context-bound\r\n node.params.forEach((param: any) => {\r\n if (param.type === 'Identifier') {\r\n scopeManager.addContextBoundVar(param.name, isRootFunction);\r\n }\r\n });\r\n}\r\n\r\nfunction transformWhileStatement(node: any, scopeManager: ScopeManager, c: any): void {\r\n // Transform the test condition of the while loop\r\n walk.simple(node.test, {\r\n Identifier(idNode: any) {\r\n transformIdentifier(idNode, scopeManager);\r\n },\r\n });\r\n\r\n // Process the body of the while loop\r\n scopeManager.pushScope('whl');\r\n c(node.body, scopeManager);\r\n scopeManager.popScope();\r\n}\r\n\r\nfunction transformReturnStatement(node: any, scopeManager: ScopeManager): void {\r\n const curScope = scopeManager.getCurrentScopeType();\r\n // Transform the return argument if it exists\r\n if (node.argument) {\r\n if (node.argument.type === 'ArrayExpression') {\r\n // Transform each element in the array\r\n node.argument.elements = node.argument.elements.map((element: any) => {\r\n if (element.type === 'Identifier') {\r\n // Skip transformation if it's a context-bound variable\r\n if (scopeManager.isContextBound(element.name) && !scopeManager.isRootParam(element.name)) {\r\n // Only add [0] if it's not already an array access\r\n return {\r\n type: 'MemberExpression',\r\n object: element,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n\r\n // Transform non-context-bound variables\r\n const [scopedName, kind] = scopeManager.getVariable(element.name);\r\n return {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n } else if (element.type === 'MemberExpression') {\r\n // If it's already a member expression (array access), leave it as is\r\n if (\r\n element.computed &&\r\n element.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(element.object.name) &&\r\n !scopeManager.isRootParam(element.object.name)\r\n ) {\r\n return element;\r\n }\r\n // Otherwise, transform it normally\r\n transformMemberExpression(element, '', scopeManager);\r\n return element;\r\n }\r\n return element;\r\n });\r\n\r\n node.argument = {\r\n type: 'ArrayExpression',\r\n elements: [node.argument],\r\n };\r\n } else if (node.argument.type === 'BinaryExpression') {\r\n // Transform both operands of the binary expression\r\n walk.recursive(node.argument, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n if (node.type === 'Identifier') {\r\n addArrayAccess(node, state);\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n });\r\n } else if (node.argument.type === 'ObjectExpression') {\r\n // Handle object expressions (existing code)\r\n node.argument.properties = node.argument.properties.map((prop: any) => {\r\n // Check for shorthand properties\r\n if (prop.shorthand) {\r\n // Get the variable name and kind\r\n const [scopedName, kind] = scopeManager.getVariable(prop.value.name);\r\n\r\n // Convert shorthand to full property definition\r\n return {\r\n type: 'Property',\r\n key: {\r\n type: 'Identifier',\r\n name: prop.key.name,\r\n },\r\n value: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n },\r\n kind: 'init',\r\n method: false,\r\n shorthand: false,\r\n computed: false,\r\n };\r\n }\r\n return prop;\r\n });\r\n } else if (node.argument.type === 'Identifier') {\r\n // Handle identifier return values\r\n const [scopedName, kind] = scopeManager.getVariable(node.argument.name);\r\n node.argument = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Add [0] array access\r\n node.argument = {\r\n type: 'MemberExpression',\r\n object: node.argument,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n\r\n if (curScope === 'fn') {\r\n //for nested functions : wrap the return argument in a CallExpression with math._precision(<statement>)\r\n node.argument = {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: { type: 'Identifier', name: CONTEXT_NAME },\r\n property: { type: 'Identifier', name: 'precision' },\r\n },\r\n arguments: [node.argument],\r\n };\r\n }\r\n }\r\n}\r\n\r\nfunction transformIdentifierForParam(node: any, scopeManager: ScopeManager): any {\r\n if (node.type === 'Identifier') {\r\n if (node.name === 'na') {\r\n node.name = 'NaN';\r\n return node;\r\n }\r\n\r\n // Skip transformation for loop variables\r\n if (scopeManager.isLoopVariable(node.name)) {\r\n return node;\r\n }\r\n // If it's a root parameter, transform it with $.let prefix\r\n if (scopeManager.isRootParam(node.name)) {\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n return {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n }\r\n // If it's a nested function parameter or other context-bound variable, return as is\r\n if (scopeManager.isContextBound(node.name)) {\r\n return node;\r\n }\r\n // Otherwise transform with $.let prefix\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n\r\n return {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n }\r\n return node;\r\n}\r\n\r\nfunction getParamFromUnaryExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform the argument\r\n const transformedArgument = transformOperand(node.argument, scopeManager, namespace);\r\n\r\n // Create the unary expression\r\n const unaryExpr = {\r\n type: 'UnaryExpression',\r\n operator: node.operator,\r\n prefix: node.prefix,\r\n argument: transformedArgument,\r\n start: node.start,\r\n end: node.end,\r\n };\r\n\r\n return unaryExpr;\r\n // Wrap the unary expression with namespace.param()\r\n // return {\r\n // type: 'CallExpression',\r\n // callee: {\r\n // type: 'MemberExpression',\r\n // object: {\r\n // type: 'Identifier',\r\n // name: namespace,\r\n // },\r\n // property: {\r\n // type: 'Identifier',\r\n // name: 'param',\r\n // },\r\n // computed: false,\r\n // },\r\n // arguments: [unaryExpr, transformedArgument.property, scopeManager.nextParamIdArg],\r\n // _transformed: true,\r\n // _isParamCall: true,\r\n // };\r\n}\r\n\r\nfunction transformOperand(node: any, scopeManager: ScopeManager, namespace: string = ''): any {\r\n switch (node.type) {\r\n case 'BinaryExpression': {\r\n return getParamFromBinaryExpression(node, scopeManager, namespace);\r\n }\r\n case 'MemberExpression': {\r\n // Handle array access\r\n const transformedObject = node.object.type === 'Identifier' ? transformIdentifierForParam(node.object, scopeManager) : node.object;\r\n // Don't add [0] if this is already an array access\r\n return {\r\n type: 'MemberExpression',\r\n object: transformedObject,\r\n property: node.property,\r\n computed: node.computed,\r\n };\r\n }\r\n case 'Identifier': {\r\n // Skip transformation for loop variables\r\n if (scopeManager.isLoopVariable(node.name)) {\r\n return node;\r\n }\r\n // Check if this identifier is part of a member expression (array access)\r\n const isMemberExprProperty = node.parent && node.parent.type === 'MemberExpression' && node.parent.property === node;\r\n if (isMemberExprProperty) {\r\n return node;\r\n }\r\n const transformedObject = transformIdentifierForParam(node, scopeManager);\r\n\r\n return {\r\n type: 'MemberExpression',\r\n object: transformedObject,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n case 'UnaryExpression': {\r\n return getParamFromUnaryExpression(node, scopeManager, namespace);\r\n }\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction getParamFromBinaryExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform both operands\r\n const transformedLeft = transformOperand(node.left, scopeManager, namespace);\r\n const transformedRight = transformOperand(node.right, scopeManager, namespace);\r\n\r\n // if (transformedLeft?.property?.type === 'Identifier') {\r\n // transformMemberExpression(transformedLeft, '', scopeManager);\r\n // //transformIdentifier(transformedLeft.property, scopeManager);\r\n // }\r\n // Create the binary expression\r\n const binaryExpr = {\r\n type: 'BinaryExpression',\r\n operator: node.operator,\r\n left: transformedLeft,\r\n right: transformedRight,\r\n start: node.start,\r\n end: node.end,\r\n };\r\n\r\n // Walk through the binary expression to transform any function calls\r\n walk.recursive(binaryExpr, scopeManager, {\r\n CallExpression(node: any, scopeManager: ScopeManager) {\r\n if (!node._transformed) {\r\n transformCallExpression(node, scopeManager);\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n });\r\n\r\n return binaryExpr;\r\n // Wrap the binary expression with namespace.param()\r\n // return {\r\n // type: 'CallExpression',\r\n // callee: {\r\n // type: 'MemberExpression',\r\n // object: {\r\n // type: 'Identifier',\r\n // name: namespace,\r\n // },\r\n // property: {\r\n // type: 'Identifier',\r\n // name: 'param',\r\n // },\r\n // computed: false,\r\n // },\r\n // arguments: [binaryExpr, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n // _transformed: true,\r\n // _isParamCall: true,\r\n // };\r\n}\r\n\r\nfunction getParamFromLogicalExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform both operands\r\n const transformedLeft = transformOperand(node.left, scopeManager, namespace);\r\n const transformedRight = transformOperand(node.right, scopeManager, namespace);\r\n\r\n const logicalExpr = {\r\n type: 'LogicalExpression',\r\n operator: node.operator,\r\n left: transformedLeft,\r\n right: transformedRight,\r\n start: node.start,\r\n end: node.end,\r\n };\r\n\r\n // Walk through the logical expression to transform any function calls\r\n walk.recursive(logicalExpr, scopeManager, {\r\n CallExpression(node: any, scopeManager: ScopeManager) {\r\n if (!node._transformed) {\r\n transformCallExpression(node, scopeManager);\r\n }\r\n },\r\n });\r\n\r\n return logicalExpr;\r\n\r\n // return {\r\n // type: 'CallExpression',\r\n // callee: {\r\n // type: 'MemberExpression',\r\n // object: { type: 'Identifier', name: namespace },\r\n // property: { type: 'Identifier', name: 'param' },\r\n // },\r\n // arguments: [logicalExpr, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n // _transformed: true,\r\n // _isParamCall: true,\r\n // };\r\n}\r\n\r\nfunction getParamFromConditionalExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform identifiers in the right side of the assignment\r\n walk.recursive(\r\n node,\r\n { parent: node, inNamespaceCall: false },\r\n {\r\n Identifier(node: any, state: any, c: any) {\r\n if (node.name == 'NaN') return;\r\n if (node.name == 'na') {\r\n node.name = 'NaN';\r\n return;\r\n }\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n\r\n if (isConditional || isBinaryOperation) {\r\n if (node.type === 'MemberExpression') {\r\n transformArrayIndex(node, scopeManager);\r\n } else if (node.type === 'Identifier') {\r\n addArrayAccess(node, scopeManager);\r\n }\r\n }\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n // Transform array indices first\r\n transformArrayIndex(node, scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node, inNamespaceCall: state.inNamespaceCall });\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n const isNamespaceCall =\r\n node.callee &&\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object &&\r\n node.callee.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(node.callee.object.name);\r\n\r\n // First transform the call expression itself\r\n transformCallExpression(node, scopeManager);\r\n\r\n // Then transform its arguments with the correct context\r\n node.arguments.forEach((arg: any) => c(arg, { parent: node, inNamespaceCall: isNamespaceCall || state.inNamespaceCall }));\r\n },\r\n }\r\n );\r\n\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: { type: 'Identifier', name: namespace },\r\n property: { type: 'Identifier', name: 'param' },\r\n },\r\n arguments: [node, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n}\r\n\r\nfunction transformFunctionArgument(arg: any, namespace: string, scopeManager: ScopeManager): any {\r\n // Handle binary expressions (arithmetic operations)\r\n\r\n switch (arg?.type) {\r\n case 'BinaryExpression':\r\n arg = getParamFromBinaryExpression(arg, scopeManager, namespace);\r\n break;\r\n case 'LogicalExpression':\r\n arg = getParamFromLogicalExpression(arg, scopeManager, namespace);\r\n break;\r\n case 'ConditionalExpression':\r\n return getParamFromConditionalExpression(arg, scopeManager, namespace);\r\n case 'UnaryExpression':\r\n arg = getParamFromUnaryExpression(arg, scopeManager, namespace);\r\n break;\r\n // case 'Identifier':\r\n // return transformOperand(arg, scopeManager, namespace);\r\n }\r\n\r\n // Check if the argument is an array access\r\n const isArrayAccess = arg.type === 'MemberExpression' && arg.computed && arg.property;\r\n\r\n if (isArrayAccess) {\r\n // Transform array access\r\n const transformedObject =\r\n arg.object.type === 'Identifier' && scopeManager.isContextBound(arg.object.name) && !scopeManager.isRootParam(arg.object.name)\r\n ? arg.object\r\n : transformIdentifierForParam(arg.object, scopeManager);\r\n\r\n // Transform the index if it's an identifier\r\n const transformedProperty =\r\n arg.property.type === 'Identifier' && !scopeManager.isContextBound(arg.property.name) && !scopeManager.isLoopVariable(arg.property.name)\r\n ? transformIdentifierForParam(arg.property, scopeManager)\r\n : arg.property;\r\n\r\n // const memberExpr = {\r\n // type: 'MemberExpression',\r\n // object: transformedObject,\r\n // property: transformedProperty,\r\n // computed: true,\r\n // };\r\n\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: namespace,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'param',\r\n },\r\n computed: false,\r\n },\r\n arguments: [transformedObject, transformedProperty, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n }\r\n\r\n if (arg.type === 'ObjectExpression') {\r\n arg.properties = arg.properties.map((prop: any) => {\r\n // Get the variable name and kind\r\n if (prop.value.name) {\r\n const [scopedName, kind] = scopeManager.getVariable(prop.value.name);\r\n\r\n // Convert shorthand to full property definition\r\n return {\r\n type: 'Property',\r\n key: {\r\n type: 'Identifier',\r\n name: prop.key.name,\r\n },\r\n value: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n },\r\n kind: 'init',\r\n method: false,\r\n shorthand: false,\r\n computed: false,\r\n };\r\n }\r\n return prop;\r\n });\r\n }\r\n // For non-array-access arguments\r\n if (arg.type === 'Identifier') {\r\n if (arg.name === 'na') {\r\n arg.name = 'NaN';\r\n return arg;\r\n }\r\n // If it's a context-bound variable (like a nested function parameter), use it directly\r\n if (scopeManager.isContextBound(arg.name) && !scopeManager.isRootParam(arg.name)) {\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: namespace,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'param',\r\n },\r\n computed: false,\r\n },\r\n arguments: [arg, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n }\r\n }\r\n\r\n // For all other cases, transform normally\r\n\r\n if (arg?.type === 'CallExpression') {\r\n transformCallExpression(arg, scopeManager, namespace);\r\n }\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: namespace,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'param',\r\n },\r\n computed: false,\r\n },\r\n arguments: [arg.type === 'Identifier' ? transformIdentifierForParam(arg, scopeManager) : arg, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n}\r\n\r\nfunction transformCallExpression(node: any, scopeManager: ScopeManager, namespace?: string): void {\r\n // Skip if this node has already been transformed\r\n if (node._transformed) {\r\n return;\r\n }\r\n\r\n // Check if this is a namespace method call (e.g., ta.ema, math.abs)\r\n const isNamespaceCall =\r\n node.callee &&\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object &&\r\n node.callee.object.type === 'Identifier' &&\r\n (scopeManager.isContextBound(node.callee.object.name) || node.callee.object.name === 'math' || node.callee.object.name === 'ta');\r\n\r\n if (isNamespaceCall) {\r\n const namespace = node.callee.object.name;\r\n // Transform arguments using the namespace's param\r\n node.arguments = node.arguments.map((arg: any) => {\r\n // If argument is already a param call, don't wrap it again\r\n if (arg._isParamCall) {\r\n return arg;\r\n }\r\n return transformFunctionArgument(arg, namespace, scopeManager);\r\n });\r\n\r\n // //TODO : support cache\r\n // if (namespace === 'ta') {\r\n // node.arguments.push(scopeManager.nextCacheIdArg);\r\n // }\r\n node._transformed = true;\r\n }\r\n // Check if this is a regular function call (not a namespace method)\r\n else if (node.callee && node.callee.type === 'Identifier') {\r\n // Transform arguments using $.param\r\n node.arguments = node.arguments.map((arg: any) => {\r\n // If argument is already a param call, don't wrap it again\r\n if (arg._isParamCall) {\r\n return arg;\r\n }\r\n return transformFunctionArgument(arg, CONTEXT_NAME, scopeManager);\r\n });\r\n node._transformed = true;\r\n }\r\n\r\n // Transform any nested call expressions in the arguments\r\n node.arguments.forEach((arg: any) => {\r\n walk.recursive(arg, scopeManager, {\r\n Identifier(node: any, state: any, c: any) {\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n\r\n if (isConditional || isBinaryOperation) {\r\n if (node.type === 'MemberExpression') {\r\n transformArrayIndex(node, scopeManager);\r\n } else if (node.type === 'Identifier') {\r\n addArrayAccess(node, scopeManager);\r\n }\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n if (!node._transformed) {\r\n // First transform the call expression itself\r\n transformCallExpression(node, state);\r\n }\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node, inNamespaceCall: state.inNamespaceCall });\r\n }\r\n },\r\n });\r\n });\r\n}\r\n\r\nfunction transformFunctionDeclaration(node: any, scopeManager: ScopeManager): void {\r\n // Register function parameters as context-bound (but not as root params)\r\n node.params.forEach((param: any) => {\r\n if (param.type === 'Identifier') {\r\n scopeManager.addContextBoundVar(param.name, false);\r\n }\r\n });\r\n\r\n // Transform the function body\r\n if (node.body && node.body.type === 'BlockStatement') {\r\n scopeManager.pushScope('fn');\r\n walk.recursive(node.body, scopeManager, {\r\n BlockStatement(node: any, state: ScopeManager, c: any) {\r\n //state.pushScope('block');\r\n node.body.forEach((stmt: any) => c(stmt, state));\r\n //state.popScope();\r\n },\r\n ReturnStatement(node: any, state: ScopeManager) {\r\n transformReturnStatement(node, state);\r\n },\r\n VariableDeclaration(node: any, state: ScopeManager) {\r\n transformVariableDeclaration(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n },\r\n CallExpression(node: any, state: ScopeManager) {\r\n // Transform the call expression itself\r\n transformCallExpression(node, state);\r\n\r\n // Also transform any nested call expressions in the arguments\r\n node.arguments.forEach((arg: any) => {\r\n if (arg.type === 'BinaryExpression') {\r\n walk.recursive(arg, state, {\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', state);\r\n },\r\n });\r\n }\r\n });\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n AssignmentExpression(node: any, state: ScopeManager) {\r\n transformAssignmentExpression(node, state);\r\n },\r\n ForStatement(node: any, state: ScopeManager, c: any) {\r\n transformForStatement(node, state, c);\r\n },\r\n IfStatement(node: any, state: ScopeManager, c: any) {\r\n transformIfStatement(node, state, c);\r\n },\r\n BinaryExpression(node: any, state: ScopeManager, c: any) {\r\n // Transform both sides of binary expressions\r\n walk.recursive(node, state, {\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', state);\r\n },\r\n });\r\n },\r\n });\r\n scopeManager.popScope();\r\n }\r\n}\r\nfunction addArrayAccess(node: any, scopeManager: ScopeManager): void {\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: node.name,\r\n start: node.start,\r\n end: node.end,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n _indexTransformed: true,\r\n });\r\n}\r\nfunction transformForStatement(node: any, scopeManager: ScopeManager, c: any): void {\r\n // Handle initialization\r\n if (node.init && node.init.type === 'VariableDeclaration') {\r\n // Keep the original loop variable name\r\n const decl = node.init.declarations[0];\r\n const originalName = decl.id.name;\r\n scopeManager.addLoopVariable(originalName, originalName);\r\n\r\n // Keep the original variable declaration\r\n node.init = {\r\n type: 'VariableDeclaration',\r\n kind: node.init.kind,\r\n declarations: [\r\n {\r\n type: 'VariableDeclarator',\r\n id: {\r\n type: 'Identifier',\r\n name: originalName,\r\n },\r\n init: decl.init,\r\n },\r\n ],\r\n };\r\n\r\n // Transform any identifiers in the init expression\r\n if (decl.init) {\r\n walk.recursive(decl.init, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n if (!scopeManager.isLoopVariable(node.name)) {\r\n scopeManager.pushScope('for');\r\n transformIdentifier(node, state);\r\n scopeManager.popScope();\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n scopeManager.pushScope('for');\r\n transformMemberExpression(node, '', scopeManager);\r\n scopeManager.popScope();\r\n },\r\n });\r\n }\r\n }\r\n\r\n // Transform test condition\r\n if (node.test) {\r\n walk.recursive(node.test, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n if (!scopeManager.isLoopVariable(node.name) && !node.computed) {\r\n scopeManager.pushScope('for');\r\n transformIdentifier(node, state);\r\n if (node.type === 'Identifier') {\r\n node.computed = true;\r\n addArrayAccess(node, state);\r\n }\r\n scopeManager.popScope();\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n scopeManager.pushScope('for');\r\n transformMemberExpression(node, '', scopeManager);\r\n scopeManager.popScope();\r\n },\r\n });\r\n }\r\n\r\n // Transform update expression\r\n if (node.update) {\r\n walk.recursive(node.update, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n if (!scopeManager.isLoopVariable(node.name)) {\r\n scopeManager.pushScope('for');\r\n transformIdentifier(node, state);\r\n scopeManager.popScope();\r\n }\r\n },\r\n });\r\n }\r\n\r\n // Transform the loop body\r\n scopeManager.pushScope('for');\r\n c(node.body, scopeManager);\r\n scopeManager.popScope();\r\n}\r\n\r\nfunction transformExpression(node: any, scopeManager: ScopeManager): void {\r\n walk.recursive(node, scopeManager, {\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n\r\n //context bound variable was not transformed, but we still need to ensure array annotation\r\n const isIfStatement = scopeManager.getCurrentScopeType() === 'if';\r\n const isContextBound = scopeManager.isContextBound(node.name) && !scopeManager.isRootParam(node.name);\r\n if (isContextBound && isIfStatement) {\r\n addArrayAccess(node, state);\r\n }\r\n },\r\n });\r\n}\r\n\r\nfunction transformIfStatement(node: any, scopeManager: ScopeManager, c: any): void {\r\n // Transform the test condition\r\n if (node.test) {\r\n scopeManager.pushScope('if');\r\n transformExpression(node.test, scopeManager);\r\n scopeManager.popScope();\r\n }\r\n\r\n // Transform the if branch (consequent)\r\n scopeManager.pushScope('if');\r\n c(node.consequent, scopeManager);\r\n scopeManager.popScope();\r\n\r\n // Transform the else branch (alternate) if it exists\r\n if (node.alternate) {\r\n scopeManager.pushScope('els');\r\n c(node.alternate, scopeManager);\r\n scopeManager.popScope();\r\n }\r\n}\r\n\r\nfunction transformNestedArrowFunctions(ast: any): void {\r\n walk.recursive(ast, null, {\r\n VariableDeclaration(node: any, state: any, c: any) {\r\n // Only process if we have declarations\r\n if (node.declarations && node.declarations.length > 0) {\r\n const declarations = node.declarations;\r\n\r\n // Check each declaration\r\n declarations.forEach((decl: any) => {\r\n // Check if it's an arrow function\r\n if (decl.init && decl.init.type === 'ArrowFunctionExpression') {\r\n const isRootFunction = decl.init.start === 0;\r\n\r\n if (!isRootFunction) {\r\n // Create a function declaration\r\n const functionDeclaration = {\r\n type: 'FunctionDeclaration',\r\n id: decl.id, // Use the variable name as function name\r\n params: decl.init.params,\r\n body:\r\n decl.init.body.type === 'BlockStatement'\r\n ? decl.init.body\r\n : {\r\n type: 'BlockStatement',\r\n body: [\r\n {\r\n type: 'ReturnStatement',\r\n argument: decl.init.body,\r\n },\r\n ],\r\n },\r\n async: decl.init.async,\r\n generator: false,\r\n };\r\n\r\n // Replace the entire VariableDeclaration with the FunctionDeclaration\r\n Object.assign(node, functionDeclaration);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Continue traversing\r\n if (node.body && node.body.body) {\r\n node.body.body.forEach((stmt: any) => c(stmt, state));\r\n }\r\n },\r\n });\r\n}\r\n\r\n// Add new function for pre-processing context-bound variables\r\nfunction preProcessContextBoundVars(ast: any, scopeManager: ScopeManager): void {\r\n walk.simple(ast, {\r\n VariableDeclaration(node: any) {\r\n node.declarations.forEach((decl: any) => {\r\n // Check for context property assignments\r\n const isContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object &&\r\n (decl.init.object.name === 'context' || decl.init.object.name === CONTEXT_NAME || decl.init.object.name === 'context2');\r\n\r\n const isSubContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object?.object &&\r\n (decl.init.object.object.name === 'context' ||\r\n decl.init.object.object.name === CONTEXT_NAME ||\r\n decl.init.object.object.name === 'context2');\r\n\r\n if (isContextProperty || isSubContextProperty) {\r\n if (decl.id.name) {\r\n scopeManager.addContextBoundVar(decl.id.name);\r\n }\r\n if (decl.id.properties) {\r\n decl.id.properties.forEach((property: any) => {\r\n if (property.key.name) {\r\n scopeManager.addContextBoundVar(property.key.name);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n },\r\n });\r\n}\r\n\r\nexport function transpile(fn: string | Function): Function {\r\n let code = typeof fn === 'function' ? fn.toString() : fn;\r\n\r\n // Parse the code into an AST\r\n const ast = acorn.parse(code.trim(), {\r\n ecmaVersion: 'latest',\r\n sourceType: 'module',\r\n });\r\n\r\n // Pre-process: Transform all nested arrow functions\r\n transformNestedArrowFunctions(ast);\r\n\r\n const scopeManager = new ScopeManager();\r\n let originalParamName: string;\r\n\r\n // Pre-process: Identify context-bound variables\r\n preProcessContextBoundVars(ast, scopeManager);\r\n\r\n // First pass: register all function declarations and their parameters\r\n walk.simple(ast, {\r\n FunctionDeclaration(node: any) {\r\n transformFunctionDeclaration(node, scopeManager);\r\n },\r\n ArrowFunctionExpression(node: any) {\r\n const isRootFunction = node.start === 0;\r\n if (isRootFunction && node.params && node.params.length > 0) {\r\n originalParamName = node.params[0].name;\r\n node.params[0].name = CONTEXT_NAME;\r\n }\r\n transformArrowFunctionParams(node, scopeManager, isRootFunction);\r\n },\r\n VariableDeclaration(node: any) {\r\n node.declarations.forEach((decl: any) => {\r\n if (decl.id.type === 'ArrayPattern') {\r\n // Generate a unique temporary variable name\r\n const tempVarName = scopeManager.generateTempVar();\r\n\r\n // Create a new variable declaration for the temporary variable\r\n const tempVarDecl = {\r\n type: 'VariableDeclaration',\r\n kind: node.kind,\r\n declarations: [\r\n {\r\n type: 'VariableDeclarator',\r\n id: {\r\n type: 'Identifier',\r\n name: tempVarName,\r\n },\r\n init: decl.init,\r\n },\r\n ],\r\n };\r\n\r\n decl.id.elements?.forEach((element: any) => {\r\n if (element.type === 'Identifier') {\r\n scopeManager.addArrayPatternElement(element.name);\r\n }\r\n });\r\n // Create individual variable declarations for each destructured element\r\n const individualDecls = decl.id.elements.map((element: any, index: number) => ({\r\n type: 'VariableDeclaration',\r\n kind: node.kind,\r\n declarations: [\r\n {\r\n type: 'VariableDeclarator',\r\n id: element,\r\n init: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: tempVarName,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: index,\r\n },\r\n computed: true,\r\n },\r\n },\r\n ],\r\n }));\r\n\r\n // Replace the original declaration with the new declarations\r\n Object.assign(node, {\r\n type: 'BlockStatement',\r\n body: [tempVarDecl, ...individualDecls],\r\n });\r\n }\r\n });\r\n },\r\n ForStatement(node: any) {\r\n // Skip registering loop variables in the first pass\r\n },\r\n });\r\n\r\n // Second pass: transform the code\r\n walk.recursive(ast, scopeManager, {\r\n BlockStatement(node: any, state: ScopeManager, c: any) {\r\n //state.pushScope('block');\r\n node.body.forEach((stmt: any) => c(stmt, state));\r\n //state.popScope();\r\n },\r\n ReturnStatement(node: any, state: ScopeManager) {\r\n transformReturnStatement(node, state);\r\n },\r\n VariableDeclaration(node: any, state: ScopeManager) {\r\n transformVariableDeclaration(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n },\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, originalParamName, scopeManager);\r\n },\r\n AssignmentExpression(node: any, state: ScopeManager) {\r\n transformAssignmentExpression(node, state);\r\n },\r\n FunctionDeclaration(node: any, state: ScopeManager) {\r\n // Skip transformation since we already handled it in the first pass\r\n return;\r\n },\r\n ForStatement(node: any, state: ScopeManager, c: any) {\r\n transformForStatement(node, state, c);\r\n },\r\n IfStatement(node: any, state: ScopeManager, c: any) {\r\n transformIfStatement(node, state, c);\r\n },\r\n });\r\n\r\n const transformedCode = astring.generate(ast);\r\n\r\n const _wraperFunction = new Function('', `return ${transformedCode}`);\r\n return _wraperFunction(this);\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\nimport { transpile } from '@pinets/transpiler/index';\r\nimport { Context } from '@pinets/index';\r\n\r\nimport { IProvider } from '@pinets/marketData/IProvider';\r\n\r\n/**\r\n * This class is a wrapper for the Pine Script language, it allows to run Pine Script code in a JavaScript environment\r\n */\r\nexport class PineTS {\r\n public data: any = [];\r\n\r\n //#region [Pine Script built-in variables]\r\n public open: any = [];\r\n public high: any = [];\r\n public low: any = [];\r\n public close: any = [];\r\n public volume: any = [];\r\n public hl2: any = [];\r\n public hlc3: any = [];\r\n public ohlc4: any = [];\r\n public openTime: any = [];\r\n public closeTime: any = [];\r\n //#endregion\r\n\r\n //#region run context\r\n private _periods: number = undefined;\r\n public get periods() {\r\n return this._periods;\r\n }\r\n //#endregion\r\n\r\n //public fn: Function;\r\n\r\n private _readyPromise: Promise<any> = null;\r\n\r\n private _ready = false;\r\n\r\n constructor(\r\n private source: IProvider | any[],\r\n private tickerId?: string,\r\n private timeframe?: string,\r\n private limit?: number,\r\n private sDate?: number,\r\n private eDate?: number\r\n ) {\r\n this._readyPromise = new Promise((resolve) => {\r\n this.loadMarketData(source, tickerId, timeframe, limit, sDate, eDate).then((data) => {\r\n const marketData = data.reverse();\r\n\r\n this._periods = marketData.length;\r\n this.data = marketData;\r\n\r\n const _open = marketData.map((d) => d.open);\r\n const _close = marketData.map((d) => d.close);\r\n const _high = marketData.map((d) => d.high);\r\n const _low = marketData.map((d) => d.low);\r\n const _volume = marketData.map((d) => d.volume);\r\n const _hlc3 = marketData.map((d) => (d.high + d.low + d.close) / 3);\r\n const _hl2 = marketData.map((d) => (d.high + d.low) / 2);\r\n const _ohlc4 = marketData.map((d) => (d.high + d.low + d.open + d.close) / 4);\r\n const _openTime = marketData.map((d) => d.openTime);\r\n const _closeTime = marketData.map((d) => d.closeTime);\r\n\r\n this.open = _open;\r\n this.close = _close;\r\n this.high = _high;\r\n this.low = _low;\r\n this.volume = _volume;\r\n this.hl2 = _hl2;\r\n this.hlc3 = _hlc3;\r\n this.ohlc4 = _ohlc4;\r\n this.openTime = _openTime;\r\n this.closeTime = _closeTime;\r\n\r\n this._ready = true;\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n private async loadMarketData(source: IProvider | any[], tickerId: string, timeframe: string, limit?: number, sDate?: number, eDate?: number) {\r\n if (Array.isArray(source)) {\r\n return source;\r\n } else {\r\n return (source as IProvider).getMarketData(tickerId, timeframe, limit, sDate, eDate);\r\n }\r\n }\r\n\r\n public async ready() {\r\n if (this._ready) return true;\r\n if (!this._readyPromise) throw new Error('PineTS is not ready');\r\n return this._readyPromise;\r\n }\r\n\r\n public async run(pineTSCode: Function | String, n?: number, useTACache?: boolean): Promise<Context> {\r\n await this.ready();\r\n if (!n) n = this._periods;\r\n\r\n const context = new Context({\r\n marketData: this.data,\r\n source: this.source,\r\n tickerId: this.tickerId,\r\n timeframe: this.timeframe,\r\n limit: this.limit,\r\n sDate: this.sDate,\r\n eDate: this.eDate,\r\n });\r\n\r\n context.pineTSCode = pineTSCode;\r\n context.useTACache = useTACache;\r\n const transformer = transpile.bind(this);\r\n let transpiledFn = transformer(pineTSCode);\r\n\r\n //console.log('>>> transformedFn: ', transformedFn.toString());\r\n\r\n const contextVarNames = ['const', 'var', 'let', 'params'];\r\n for (let i = this._periods - n, idx = n - 1; i < this._periods; i++, idx--) {\r\n context.idx = i;\r\n\r\n context.data.close = this.close.slice(idx);\r\n context.data.open = this.open.slice(idx);\r\n context.data.high = this.high.slice(idx);\r\n context.data.low = this.low.slice(idx);\r\n context.data.volume = this.volume.slice(idx);\r\n context.data.hl2 = this.hl2.slice(idx);\r\n context.data.hlc3 = this.hlc3.slice(idx);\r\n context.data.ohlc4 = this.ohlc4.slice(idx);\r\n context.data.openTime = this.openTime.slice(idx);\r\n context.data.closeTime = this.closeTime.slice(idx);\r\n\r\n const result = await transpiledFn(context);\r\n\r\n //collect results\r\n if (typeof result === 'object') {\r\n if (typeof context.result !== 'object') {\r\n context.result = {};\r\n }\r\n for (let key in result) {\r\n if (context.result[key] === undefined) {\r\n context.result[key] = [];\r\n }\r\n\r\n const val = Array.isArray(result[key]) ? result[key][0] : result[key];\r\n context.result[key].push(val);\r\n }\r\n } else {\r\n if (!Array.isArray(context.result)) {\r\n context.result = [];\r\n }\r\n\r\n context.result.push(result);\r\n }\r\n\r\n //shift context\r\n for (let ctxVarName of contextVarNames) {\r\n for (let key in context[ctxVarName]) {\r\n if (Array.isArray(context[ctxVarName][key])) {\r\n const val = context[ctxVarName][key][0];\r\n\r\n context[ctxVarName][key].unshift(val);\r\n } else {\r\n //console.error('>>> invalid entry format, should be an array: ', ctxVarName, key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return context;\r\n }\r\n}\r\n\r\nexport default PineTS;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nexport class Core {\r\n public color = {\r\n param: (source, index = 0) => {\r\n if (Array.isArray(source)) {\r\n return source[index];\r\n }\r\n return source;\r\n },\r\n rgb: (r: number, g: number, b: number, a?: number) => (a ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`),\r\n new: (color: string, a?: number) => {\r\n // Handle hexadecimal colors\r\n if (color && color.startsWith('#')) {\r\n // Remove # and convert to RGB\r\n const hex = color.slice(1);\r\n const r = parseInt(hex.slice(0, 2), 16);\r\n const g = parseInt(hex.slice(2, 4), 16);\r\n const b = parseInt(hex.slice(4, 6), 16);\r\n\r\n return a ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\r\n }\r\n // Handle existing RGB format\r\n return a ? `rgba(${color}, ${a})` : color;\r\n },\r\n white: 'white',\r\n lime: 'lime',\r\n green: 'green',\r\n red: 'red',\r\n maroon: 'maroon',\r\n\r\n black: 'black',\r\n\r\n gray: 'gray',\r\n blue: 'blue',\r\n };\r\n constructor(private context: any) {}\r\n private extractPlotOptions(options: PlotCharOptions) {\r\n const _options: any = {};\r\n for (let key in options) {\r\n if (Array.isArray(options[key])) {\r\n _options[key] = options[key][0];\r\n } else {\r\n _options[key] = options[key];\r\n }\r\n }\r\n return _options;\r\n }\r\n indicator(title: string, shorttitle?: string, options?: IndicatorOptions) {\r\n //Just for compatibility, we don't need to do anything here\r\n }\r\n\r\n //in the current implementation, plot functions are only used to collect data for the plots array and map it to the market data\r\n plotchar(series: number[], title: string, options: PlotCharOptions) {\r\n if (!this.context.plots[title]) {\r\n this.context.plots[title] = { data: [], options: this.extractPlotOptions(options), title };\r\n }\r\n\r\n this.context.plots[title].data.push({\r\n time: this.context.marketData[this.context.marketData.length - this.context.idx - 1].openTime,\r\n value: series[0],\r\n options: { ...this.extractPlotOptions(options), style: 'char' },\r\n });\r\n }\r\n\r\n plot(series: any, title: string, options: PlotOptions) {\r\n if (!this.context.plots[title]) {\r\n this.context.plots[title] = { data: [], options: this.extractPlotOptions(options), title };\r\n }\r\n\r\n this.context.plots[title].data.push({\r\n time: this.context.marketData[this.context.marketData.length - this.context.idx - 1].openTime,\r\n value: series[0],\r\n options: this.extractPlotOptions(options),\r\n });\r\n }\r\n\r\n na(series: any) {\r\n return Array.isArray(series) ? isNaN(series[0]) : isNaN(series);\r\n }\r\n nz(series: any, replacement: number = 0) {\r\n const val = Array.isArray(series) ? series[0] : series;\r\n const rep = Array.isArray(series) ? replacement[0] : replacement;\r\n return isNaN(val) ? rep : val;\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\ntype InputOptions =\r\n | {\r\n title?: string;\r\n group?: string;\r\n }\r\n | any;\r\n\r\n//in the current implementation we just declare the input interfaces for compatibility\r\n// in future versions this might be used for visualization\r\nexport class Input {\r\n constructor(private context: any) {}\r\n\r\n param(source, index = 0) {\r\n if (Array.isArray(source)) {\r\n return [source[index]];\r\n }\r\n return [source];\r\n }\r\n\r\n any(value: any, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n int(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n float(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n bool(value: boolean, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n string(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n timeframe(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n time(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n price(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n session(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n source(value: any, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n symbol(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n text_area(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n enum(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n color(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n}\r\n\r\nexport default Input;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\nexport class PineMath {\r\n private _cache = {};\r\n constructor(private context: any) {}\r\n\r\n param(source, index, name?: string) {\r\n if (!this.context.params[name]) this.context.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.context.params[name] = source.slice(index);\r\n this.context.params[name].length = source.length; //ensure length is correct\r\n return this.context.params[name];\r\n }\r\n this.context.params[name] = source.slice(0);\r\n return this.context.params[name];\r\n } else {\r\n this.context.params[name][0] = source;\r\n return this.context.params[name];\r\n }\r\n //return [source];\r\n }\r\n\r\n abs(source: number[]) {\r\n return Math.abs(source[0]);\r\n }\r\n pow(source: number[], power: number[]) {\r\n return Math.pow(source[0], power[0]);\r\n }\r\n sqrt(source: number[]) {\r\n return Math.sqrt(source[0]);\r\n }\r\n log(source: number[]) {\r\n return Math.log(source[0]);\r\n }\r\n ln(source: number[]) {\r\n return Math.log(source[0]);\r\n }\r\n exp(source: number[]) {\r\n return Math.exp(source[0]);\r\n }\r\n floor(source: number[]) {\r\n return Math.floor(source[0]);\r\n }\r\n ceil(source: number[]) {\r\n return Math.ceil(source[0]);\r\n }\r\n round(source: number[]) {\r\n return Math.round(source[0]);\r\n }\r\n random() {\r\n return Math.random();\r\n }\r\n max(...source: number[]) {\r\n const arg = source.map((e) => (Array.isArray(e) ? e[0] : e));\r\n return Math.max(...arg);\r\n }\r\n min(...source: number[]) {\r\n const arg = source.map((e) => (Array.isArray(e) ? e[0] : e));\r\n return Math.min(...arg);\r\n }\r\n\r\n //sum of last n values\r\n sum(source: number[], length: number) {\r\n const len = Array.isArray(length) ? length[0] : length;\r\n if (Array.isArray(source)) {\r\n return source.slice(0, len).reduce((a, b) => a + b, 0);\r\n }\r\n return source;\r\n }\r\n\r\n sin(source: number[]) {\r\n return Math.sin(source[0]);\r\n }\r\n cos(source: number[]) {\r\n return Math.cos(source[0]);\r\n }\r\n tan(source: number[]) {\r\n return Math.tan(source[0]);\r\n }\r\n\r\n acos(source: number[]) {\r\n return Math.acos(source[0]);\r\n }\r\n asin(source: number[]) {\r\n return Math.asin(source[0]);\r\n }\r\n atan(source: number[]) {\r\n return Math.atan(source[0]);\r\n }\r\n\r\n avg(...sources: number[][]) {\r\n const args = sources.map((e) => (Array.isArray(e) ? e[0] : e));\r\n\r\n return (\r\n args.reduce((a, b) => {\r\n const aVal = Array.isArray(a) ? a[0] : a;\r\n const bVal = Array.isArray(b) ? b[0] : b;\r\n return aVal + bVal;\r\n }, 0) / args.length\r\n );\r\n }\r\n}\r\n\r\nexport default PineMath;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nimport { PineTS, Provider } from '@pinets/index';\r\n//Pine Script Timeframes\r\nconst TIMEFRAMES = ['1', '3', '5', '15', '30', '45', '60', '120', '180', '240', 'D', 'W', 'M'];\r\n\r\nexport class PineRequest {\r\n private _cache = {};\r\n constructor(private context: any) {}\r\n\r\n param(source, index, name?: string) {\r\n if (!this.context.params[name]) this.context.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.context.params[name] = source.slice(index);\r\n } else {\r\n this.context.params[name] = source.slice(0);\r\n }\r\n return [source[index], name];\r\n } else {\r\n this.context.params[name][0] = source;\r\n return [source, name];\r\n }\r\n }\r\n\r\n async security(\r\n symbol: any,\r\n timeframe: any,\r\n expression: any,\r\n gaps = false,\r\n lookahead = false,\r\n ignore_invalid_symbol = false,\r\n currency = null,\r\n calc_bars_count = null\r\n ) {\r\n const _symbol = symbol[0];\r\n const _timeframe = timeframe[0];\r\n const _expression = expression[0];\r\n const _expression_name = expression[1];\r\n\r\n const ctxTimeframeIdx = TIMEFRAMES.indexOf(this.context.timeframe);\r\n const reqTimeframeIdx = TIMEFRAMES.indexOf(_timeframe);\r\n\r\n if (ctxTimeframeIdx == -1 || reqTimeframeIdx == -1) {\r\n throw new Error('Invalid timeframe');\r\n }\r\n if (ctxTimeframeIdx > reqTimeframeIdx) {\r\n throw new Error('Only higher timeframes are supported for now');\r\n }\r\n\r\n if (ctxTimeframeIdx === reqTimeframeIdx) {\r\n return _expression;\r\n }\r\n\r\n const myOpenTime = this.context.data.openTime[0];\r\n const myCloseTime = this.context.data.closeTime[0];\r\n\r\n if (this.context.cache[_expression_name]) {\r\n const secContext = this.context.cache[_expression_name];\r\n const secContextIdx = this._findSecContextIdx(myOpenTime, myCloseTime, secContext.data.openTime, secContext.data.closeTime, lookahead);\r\n return secContextIdx == -1 ? NaN : secContext.params[_expression_name][secContextIdx];\r\n }\r\n\r\n const pineTS = new PineTS(this.context.source, _symbol, _timeframe, this.context.limit || 1000, this.context.sDate, this.context.eDate);\r\n\r\n const secContext = await pineTS.run(this.context.pineTSCode);\r\n\r\n this.context.cache[_expression_name] = secContext;\r\n\r\n const secContextIdx = this._findSecContextIdx(myOpenTime, myCloseTime, secContext.data.openTime, secContext.data.closeTime, lookahead);\r\n return secContextIdx == -1 ? NaN : secContext.params[_expression_name][secContextIdx];\r\n }\r\n\r\n private _findSecContextIdx(myOpenTime: number, myCloseTime: number, openTime: number[], closeTime: number[], lookahead = false) {\r\n for (let i = 0; i < openTime.length; i++) {\r\n if (openTime[i] <= myOpenTime && myCloseTime <= closeTime[i]) {\r\n return i + (lookahead ? 1 : 2); //lookahead_on +1 lookahead_off +2\r\n }\r\n }\r\n return -1;\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\nexport class TechnicalAnalysis {\r\n constructor(private context: any) {}\r\n\r\n public get tr() {\r\n const val = this.context.math.max(\r\n this.context.data.high[0] - this.context.data.low[0],\r\n this.context.math.abs(this.context.data.high[0] - this.context.data.close[1]),\r\n this.context.math.abs(this.context.data.low[0] - this.context.data.close[1])\r\n );\r\n return val;\r\n }\r\n\r\n param(source, index, name?: string) {\r\n if (!this.context.params[name]) this.context.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.context.params[name] = source.slice(index);\r\n this.context.params[name].length = source.length; //ensure length is correct\r\n return this.context.params[name];\r\n }\r\n this.context.params[name] = source.slice(0);\r\n return this.context.params[name];\r\n } else {\r\n this.context.params[name][0] = source;\r\n return this.context.params[name];\r\n }\r\n //return [source];\r\n }\r\n\r\n ema(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = ema(source.slice(0).reverse(), period);\r\n\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n sma(source, _period, _cacheId?) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const reversedSource = source.slice(0).reverse();\r\n\r\n if (this.context.useTACache && _cacheId) {\r\n // Initialize cache if it doesn't exist\r\n if (!this.context.cache[_cacheId]) {\r\n this.context.cache[_cacheId] = {};\r\n }\r\n\r\n const cacheObj = this.context.cache[_cacheId];\r\n\r\n // Check if we can use cache\r\n if (cacheObj) {\r\n const result = sma_cache(reversedSource, period, cacheObj);\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n }\r\n\r\n // Calculate from scratch if no cache or cache conditions not met\r\n const result = sma(reversedSource, period);\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n vwma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const volume = this.context.data.volume;\r\n\r\n const result = vwma(source.slice(0).reverse(), volume.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n wma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = wma(source.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n hma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = hma(source.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n rma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = rma(source.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n change(source, _length = 1) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = change(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n rsi(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = rsi(source.slice(0).reverse(), period);\r\n //result.reverse();\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n atr(_period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const high = this.context.data.high.slice().reverse();\r\n const low = this.context.data.low.slice().reverse();\r\n const close = this.context.data.close.slice().reverse();\r\n const result = atr(high, low, close, period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n mom(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = mom(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n roc(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = roc(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n dev(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = dev(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n variance(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = variance(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n highest(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = highest(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n lowest(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = lowest(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n median(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = median(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n stdev(source, _length, _bias = true) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const bias = Array.isArray(_bias) ? _bias[0] : _bias;\r\n const result = stdev(source.slice(0).reverse(), length, bias);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n linreg(source, _length, _offset) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const offset = Array.isArray(_offset) ? _offset[0] : _offset;\r\n const result = linreg(source.slice(0).reverse(), length, offset);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n supertrend(_factor, _atrPeriod) {\r\n const factor = Array.isArray(_factor) ? _factor[0] : _factor;\r\n const atrPeriod = Array.isArray(_atrPeriod) ? _atrPeriod[0] : _atrPeriod;\r\n\r\n const high = this.context.data.high.slice().reverse();\r\n const low = this.context.data.low.slice().reverse();\r\n const close = this.context.data.close.slice().reverse();\r\n const [supertrend, direction] = calculateSupertrend(high, low, close, factor, atrPeriod);\r\n\r\n const idx = this.context.idx;\r\n return [[this.context.precision(supertrend[idx]), direction[idx]]];\r\n }\r\n}\r\n\r\n//Here we did not use indicatorts implementation because it uses a different smoothing method which gives slightly different results that pine script\r\nfunction atr(high: number[], low: number[], close: number[], period: number): number[] {\r\n // Calculate True Range first\r\n const tr = new Array(high.length);\r\n tr[0] = high[0] - low[0]; // First TR is just the first day's high-low range\r\n\r\n // Calculate subsequent TR values\r\n for (let i = 1; i < high.length; i++) {\r\n const hl = high[i] - low[i];\r\n const hc = Math.abs(high[i] - close[i - 1]);\r\n const lc = Math.abs(low[i] - close[i - 1]);\r\n tr[i] = Math.max(hl, hc, lc);\r\n }\r\n\r\n // Calculate ATR using RMA (Rolling Moving Average)\r\n const atr = new Array(high.length).fill(NaN);\r\n let sum = 0;\r\n\r\n // First ATR is SMA of first 'period' TR values\r\n for (let i = 0; i < period; i++) {\r\n sum += tr[i];\r\n }\r\n atr[period - 1] = sum / period;\r\n\r\n // Calculate subsequent ATR values using the RMA formula:\r\n // RMA = (previous RMA * (period-1) + current TR) / period\r\n for (let i = period; i < tr.length; i++) {\r\n atr[i] = (atr[i - 1] * (period - 1) + tr[i]) / period;\r\n }\r\n\r\n return atr;\r\n}\r\n\r\nfunction ema(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const alpha = 2 / (period + 1);\r\n\r\n // Initialize EMA with SMA for first value\r\n let sum = 0;\r\n for (let i = 0; i < period; i++) {\r\n sum += source[i] || 0; //handle NaN values\r\n }\r\n result[period - 1] = sum / period;\r\n\r\n // Calculate EMA for remaining values\r\n for (let i = period; i < source.length; i++) {\r\n result[i] = source[i] * alpha + result[i - 1] * (1 - alpha);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction rsi(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const gains = new Array(source.length).fill(0);\r\n const losses = new Array(source.length).fill(0);\r\n\r\n // Calculate initial gains and losses\r\n for (let i = 1; i < source.length; i++) {\r\n const diff = source[i] - source[i - 1];\r\n gains[i] = diff > 0 ? diff : 0;\r\n losses[i] = diff < 0 ? -diff : 0;\r\n }\r\n\r\n // Calculate first RSI using simple averages\r\n let avgGain = 0;\r\n let avgLoss = 0;\r\n for (let i = 1; i <= period; i++) {\r\n avgGain += gains[i];\r\n avgLoss += losses[i];\r\n }\r\n avgGain /= period;\r\n avgLoss /= period;\r\n\r\n // Calculate first RSI\r\n result[period] = avgLoss === 0 ? 100 : 100 - 100 / (1 + avgGain / avgLoss);\r\n\r\n // Calculate subsequent RSIs using the smoothed averages\r\n for (let i = period + 1; i < source.length; i++) {\r\n avgGain = (avgGain * (period - 1) + gains[i]) / period;\r\n avgLoss = (avgLoss * (period - 1) + losses[i]) / period;\r\n result[i] = avgLoss === 0 ? 100 : 100 - 100 / (1 + avgGain / avgLoss);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction rma(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const alpha = 1 / period;\r\n\r\n // Initialize RMA with SMA for first value\r\n let sum = 0;\r\n for (let i = 0; i < period; i++) {\r\n sum += source[i] || 0; // Handle NaN values\r\n }\r\n result[period - 1] = sum / period;\r\n\r\n // Calculate RMA for remaining values\r\n for (let i = period; i < source.length; i++) {\r\n const currentValue = source[i] || 0; // Handle NaN values\r\n result[i] = currentValue * alpha + result[i - 1] * (1 - alpha);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction sma_cache(\r\n source: number[],\r\n period: number,\r\n cacheObj: {\r\n previousSum?: number;\r\n lastProcessedIndex?: number;\r\n previousResult?: number[];\r\n }\r\n) {\r\n const result = cacheObj.previousResult || new Array(source.length).fill(NaN);\r\n const lastProcessedIndex = cacheObj.lastProcessedIndex || -1;\r\n let previousSum = cacheObj.previousSum || 0;\r\n\r\n if (lastProcessedIndex === -1 || source.length !== lastProcessedIndex + 1) {\r\n // Initialize cache or handle reset/different length source\r\n previousSum = 0;\r\n for (let i = 0; i < period; i++) {\r\n previousSum += source[i] || 0;\r\n }\r\n result[period - 1] = previousSum / period;\r\n\r\n // Fill initial values with NaN for cache initialization as well\r\n for (let i = 0; i < period - 1; i++) {\r\n result[i] = NaN;\r\n }\r\n\r\n for (let i = period; i < source.length; i++) {\r\n previousSum = previousSum - (source[i - period] || 0) + (source[i] || 0);\r\n result[i] = previousSum / period;\r\n }\r\n } else if (source.length === lastProcessedIndex + 2) {\r\n // Optimized calculation for new element\r\n const newIndex = source.length - 1;\r\n previousSum = previousSum - (source[newIndex - period] || 0) + (source[newIndex] || 0);\r\n result[newIndex] = previousSum / period;\r\n } else {\r\n // Fallback to full calculation if cache is inconsistent or source length changed unexpectedly\r\n return sma(source, period);\r\n }\r\n\r\n cacheObj.previousSum = previousSum;\r\n cacheObj.lastProcessedIndex = source.length - 1;\r\n cacheObj.previousResult = result;\r\n\r\n return result;\r\n}\r\n\r\nfunction sma(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n // First (period-1) elements will remain NaN\r\n for (let i = period - 1; i < source.length; i++) {\r\n let sum = 0;\r\n for (let j = 0; j < period; j++) {\r\n sum += source[i - j] || 0;\r\n }\r\n result[i] = sum / period;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction vwma(source: number[], volume: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = period - 1; i < source.length; i++) {\r\n let sumVol = 0;\r\n let sumVolPrice = 0;\r\n\r\n for (let j = 0; j < period; j++) {\r\n sumVol += volume[i - j];\r\n sumVolPrice += source[i - j] * volume[i - j];\r\n }\r\n\r\n result[i] = sumVolPrice / sumVol;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction hma(source, period) {\r\n const halfPeriod = Math.floor(period / 2);\r\n const wma1 = wma(source, halfPeriod);\r\n const wma2 = wma(source, period);\r\n const rawHma = wma1.map((value, index) => 2 * value - wma2[index]);\r\n const sqrtPeriod = Math.floor(Math.sqrt(period));\r\n const result = wma(rawHma, sqrtPeriod);\r\n return result;\r\n}\r\n\r\nfunction wma(source, period) {\r\n const result = new Array(source.length);\r\n\r\n for (let i = period - 1; i < source.length; i++) {\r\n let numerator = 0;\r\n let denominator = 0;\r\n\r\n for (let j = 0; j < period; j++) {\r\n numerator += source[i - j] * (period - j);\r\n denominator += period - j;\r\n }\r\n\r\n result[i] = numerator / denominator;\r\n }\r\n\r\n // Fill initial values with NaN or null\r\n for (let i = 0; i < period - 1; i++) {\r\n result[i] = NaN;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction change(source: number[], length: number = 1): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length; i < source.length; i++) {\r\n result[i] = source[i] - source[i - length];\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// DEMA = 2 * EMA(source, length) - EMA(EMA(source, length), length)\r\nfunction dema(source: number[], length: number): number[] {\r\n const ema1 = ema(source, length);\r\n const ema2 = ema(ema1, length);\r\n return source.map((_, i) => 2 * ema1[i] - ema2[i]);\r\n}\r\n\r\n// TEMA = 3 * EMA1 - 3 * EMA2 + EMA3\r\nfunction tema(source: number[], length: number): number[] {\r\n const ema1 = ema(source, length);\r\n const ema2 = ema(ema1, length);\r\n const ema3 = ema(ema2, length);\r\n return source.map((_, i) => 3 * ema1[i] - 3 * ema2[i] + ema3[i]);\r\n}\r\n\r\n// Momentum = current price - price 'length' periods ago\r\nfunction mom(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n for (let i = length; i < source.length; i++) {\r\n result[i] = source[i] - source[i - length];\r\n }\r\n return result;\r\n}\r\n\r\nfunction roc(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n for (let i = length; i < source.length; i++) {\r\n result[i] = ((source[i] - source[i - length]) / source[i - length]) * 100;\r\n }\r\n return result;\r\n}\r\n\r\nfunction dev(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n // Calculate SMA first\r\n const smaValues = sma(source, length);\r\n\r\n // Calculate deviation\r\n for (let i = length - 1; i < source.length; i++) {\r\n let sumDeviation = 0;\r\n\r\n // Sum up absolute deviations from SMA\r\n for (let j = 0; j < length; j++) {\r\n sumDeviation += Math.abs(source[i - j] - smaValues[i]);\r\n }\r\n\r\n // Calculate average deviation\r\n result[i] = sumDeviation / length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction variance(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let sum = 0;\r\n let sumSquares = 0;\r\n\r\n for (let j = 0; j < length; j++) {\r\n sum += source[i - j];\r\n sumSquares += source[i - j] * source[i - j];\r\n }\r\n\r\n const mean = sum / length;\r\n result[i] = sumSquares / length - mean * mean;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Highest value for a given length\r\nfunction highest(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let max = -Infinity;\r\n for (let j = 0; j < length; j++) {\r\n const value = source[i - j];\r\n if (isNaN(value)) {\r\n max = max === -Infinity ? NaN : max;\r\n } else {\r\n max = Math.max(max, value);\r\n }\r\n }\r\n result[i] = max;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Lowest value for a given length\r\nfunction lowest(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let min = Infinity;\r\n for (let j = 0; j < length; j++) {\r\n const value = source[i - j];\r\n if (isNaN(value) || value === undefined) {\r\n min = min === Infinity ? NaN : min;\r\n } else {\r\n min = Math.min(min, value);\r\n }\r\n }\r\n result[i] = min;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Median over a given length\r\nfunction median(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n const window = source.slice(i - length + 1, i + 1);\r\n const sorted = window.slice().sort((a, b) => a - b);\r\n const mid = Math.floor(length / 2);\r\n\r\n result[i] = length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction stdev(source: number[], length: number, biased: boolean = true): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const smaValues = sma(source, length);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let sum = 0;\r\n for (let j = 0; j < length; j++) {\r\n sum += Math.pow(source[i - j] - smaValues[i], 2);\r\n }\r\n // If biased is true, divide by n. If false (unbiased), divide by (n-1)\r\n const divisor = biased ? length : length - 1;\r\n result[i] = Math.sqrt(sum / divisor);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction linreg(source, length, offset) {\r\n const size = source.length;\r\n const output = new Array(size).fill(NaN);\r\n\r\n // We can only compute a regression starting at index = (length - 1)\r\n // because we need 'length' bars of history to look back.\r\n for (let i = length - 1; i < size; i++) {\r\n let sumX = 0;\r\n let sumY = 0;\r\n let sumXY = 0;\r\n let sumXX = 0;\r\n const n = length;\r\n\r\n // The oldest bar in the window => x=0 => source[i - length + 1]\r\n // The newest bar in the window => x=length - 1 => source[i]\r\n //\r\n // j goes from 0..(length-1), so:\r\n // x = j\r\n // y = source[i - length + 1 + j]\r\n for (let j = 0; j < length; j++) {\r\n const x = j;\r\n const y = source[i - length + 1 + j];\r\n sumX += x;\r\n sumY += y;\r\n sumXY += x * y;\r\n sumXX += x * x;\r\n }\r\n\r\n // slope = (n*sum(xy) - sum(x)*sum(y)) / (n*sum(x^2) - (sum(x))^2)\r\n const denominator = n * sumXX - sumX * sumX;\r\n if (denominator === 0) {\r\n // Edge case: all x the same? Should never happen when length>1,\r\n // but just in case we handle divide-by-zero\r\n output[i] = NaN;\r\n continue;\r\n }\r\n const slope = (n * sumXY - sumX * sumY) / denominator;\r\n\r\n // intercept = (sum(y) - slope * sum(x)) / n\r\n const intercept = (sumY - slope * sumX) / n;\r\n\r\n // Pine formula => intercept + slope*(length - 1 - offset)\r\n const linRegValue = intercept + slope * (length - 1 - offset);\r\n\r\n output[i] = linRegValue;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction calculateSupertrend(high: number[], low: number[], close: number[], factor: number, atrPeriod: number): [number[], number[]] {\r\n const length = high.length;\r\n const supertrend = new Array(length).fill(NaN);\r\n const direction = new Array(length).fill(0);\r\n\r\n // Calculate ATR\r\n const atrValues = atr(high, low, close, atrPeriod);\r\n\r\n // Calculate basic upper and lower bands\r\n const upperBand = new Array(length).fill(NaN);\r\n const lowerBand = new Array(length).fill(NaN);\r\n\r\n // Calculate initial bands\r\n for (let i = 0; i < length; i++) {\r\n const hl2 = (high[i] + low[i]) / 2;\r\n const atrValue = atrValues[i];\r\n\r\n if (!isNaN(atrValue)) {\r\n upperBand[i] = hl2 + factor * atrValue;\r\n lowerBand[i] = hl2 - factor * atrValue;\r\n }\r\n }\r\n\r\n // Initialize first valid values\r\n let prevUpperBand = upperBand[atrPeriod];\r\n let prevLowerBand = lowerBand[atrPeriod];\r\n let prevSupertrend = close[atrPeriod] <= prevUpperBand ? prevUpperBand : prevLowerBand;\r\n let prevDirection = close[atrPeriod] <= prevUpperBand ? -1 : 1;\r\n\r\n supertrend[atrPeriod] = prevSupertrend;\r\n direction[atrPeriod] = prevDirection;\r\n\r\n // Calculate Supertrend\r\n for (let i = atrPeriod + 1; i < length; i++) {\r\n // Calculate upper band\r\n let currentUpperBand = upperBand[i];\r\n if (currentUpperBand < prevUpperBand || close[i - 1] > prevUpperBand) {\r\n upperBand[i] = currentUpperBand;\r\n } else {\r\n upperBand[i] = prevUpperBand;\r\n }\r\n\r\n // Calculate lower band\r\n let currentLowerBand = lowerBand[i];\r\n if (currentLowerBand > prevLowerBand || close[i - 1] < prevLowerBand) {\r\n lowerBand[i] = currentLowerBand;\r\n } else {\r\n lowerBand[i] = prevLowerBand;\r\n }\r\n\r\n // Set trend direction and value\r\n if (prevSupertrend === prevUpperBand) {\r\n if (close[i] > upperBand[i]) {\r\n direction[i] = 1;\r\n supertrend[i] = lowerBand[i];\r\n } else {\r\n direction[i] = -1;\r\n supertrend[i] = upperBand[i];\r\n }\r\n } else {\r\n if (close[i] < lowerBand[i]) {\r\n direction[i] = -1;\r\n supertrend[i] = upperBand[i];\r\n } else {\r\n direction[i] = 1;\r\n supertrend[i] = lowerBand[i];\r\n }\r\n }\r\n\r\n // Update previous values\r\n prevUpperBand = upperBand[i];\r\n prevLowerBand = lowerBand[i];\r\n prevSupertrend = supertrend[i];\r\n }\r\n\r\n return [supertrend, direction];\r\n}\r\n\r\nexport default TechnicalAnalysis;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nclass PineArrayObject {\r\n constructor(public array: any) {}\r\n}\r\n\r\n/**\r\n * This class implements an array port of PineScript's array functions.\r\n */\r\nexport class PineArray {\r\n private _cache = {};\r\n constructor(private context: any) {}\r\n\r\n param(source, index = 0) {\r\n if (Array.isArray(source)) {\r\n return source[index];\r\n }\r\n return source;\r\n }\r\n\r\n /**\r\n * This function simulates PineScript's array.get() function\r\n * @param id - the array object to get the value from\r\n * @param index - the index of the value to get\r\n * @returns the value at the given index\r\n */\r\n public get(id: PineArrayObject, index: number) {\r\n return id.array[index];\r\n }\r\n\r\n public set(id: PineArrayObject, index: number, value: any) {\r\n id.array[index] = value;\r\n }\r\n\r\n public push(id: PineArrayObject, value: any) {\r\n id.array.push(value);\r\n }\r\n\r\n // Basic statistics\r\n public sum(id: PineArrayObject): number {\r\n return id.array.reduce((a: number, b: any) => a + (isNaN(b) ? 0 : b), 0);\r\n }\r\n\r\n public avg(id: PineArrayObject): number {\r\n return this.sum(id) / id.array.length;\r\n }\r\n\r\n public min(id: PineArrayObject, nth: number = 0): number {\r\n const sorted = [...id.array].sort((a, b) => a - b);\r\n return sorted[nth] ?? this.context.NA;\r\n }\r\n\r\n public max(id: PineArrayObject, nth: number = 0): number {\r\n const sorted = [...id.array].sort((a, b) => b - a);\r\n return sorted[nth] ?? this.context.NA;\r\n }\r\n\r\n public size(id: PineArrayObject): number {\r\n return id.array.length;\r\n }\r\n\r\n // Array creation\r\n\r\n public new_bool(size: number, initial_value: boolean = false): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n public new_float(size: number, initial_value: number = NaN): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n public new_int(size: number, initial_value: number = 0): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(Math.round(initial_value)));\r\n }\r\n\r\n public new_string(size: number, initial_value: string = ''): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n public new<T>(size: number, initial_value: T): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n // Array operations\r\n public slice(id: PineArrayObject, start: number, end?: number): PineArrayObject {\r\n const adjustedEnd = end !== undefined ? end + 1 : undefined;\r\n return new PineArrayObject(id.array.slice(start, adjustedEnd));\r\n }\r\n\r\n public reverse(id: PineArrayObject): void {\r\n id.array.reverse();\r\n }\r\n\r\n public includes(id: PineArrayObject, value: any): boolean {\r\n return id.array.includes(value);\r\n }\r\n\r\n public indexof(id: PineArrayObject, value: any): number {\r\n return id.array.indexOf(value);\r\n }\r\n\r\n public lastindexof(id: PineArrayObject, value: any): number {\r\n return id.array.lastIndexOf(value);\r\n }\r\n\r\n // More complex functions\r\n public stdev(id: PineArrayObject, biased: boolean = true): number {\r\n const mean = this.avg(id);\r\n const deviations = id.array.map((x: number) => Math.pow(x - mean, 2));\r\n const divisor = biased ? id.array.length : id.array.length - 1;\r\n return Math.sqrt(this.sum(new PineArrayObject(deviations)) / divisor);\r\n }\r\n\r\n public variance(id: PineArrayObject, biased: boolean = true): number {\r\n const mean = this.avg(id);\r\n const deviations = id.array.map((x: number) => Math.pow(x - mean, 2));\r\n const divisor = biased ? id.array.length : id.array.length - 1;\r\n return this.sum(new PineArrayObject(deviations)) / divisor;\r\n }\r\n\r\n public covariance(arr1: PineArrayObject, arr2: PineArrayObject, biased: boolean = true): number {\r\n if (arr1.array.length !== arr2.array.length || arr1.array.length < 2) return NaN;\r\n const divisor = biased ? arr1.array.length : arr1.array.length - 1;\r\n\r\n const mean1 = this.avg(arr1);\r\n const mean2 = this.avg(arr2);\r\n let sum = 0;\r\n\r\n for (let i = 0; i < arr1.array.length; i++) {\r\n sum += (arr1.array[i] - mean1) * (arr2.array[i] - mean2);\r\n }\r\n\r\n return sum / divisor;\r\n }\r\n\r\n // Additional utility methods\r\n public first(id: PineArrayObject): any {\r\n return id.array.length > 0 ? id.array[0] : this.context.NA;\r\n }\r\n\r\n public last(id: PineArrayObject): any {\r\n return id.array.length > 0 ? id.array[id.array.length - 1] : this.context.NA;\r\n }\r\n\r\n public clear(id: PineArrayObject): void {\r\n id.array.length = 0;\r\n }\r\n\r\n public join(id: PineArrayObject, separator: string = ','): string {\r\n return id.array.join(separator);\r\n }\r\n\r\n /** Array Manipulation Functions */\r\n public abs(id: PineArrayObject): PineArrayObject {\r\n return new PineArrayObject(id.array.map((val) => Math.abs(val)));\r\n }\r\n\r\n public concat(id: PineArrayObject, other: PineArrayObject): PineArrayObject {\r\n id.array.push(...other.array);\r\n return id;\r\n }\r\n\r\n public copy(id: PineArrayObject): PineArrayObject {\r\n return new PineArrayObject([...id.array]);\r\n }\r\n\r\n public every(id: PineArrayObject, callback: (val: any) => boolean): boolean {\r\n return id.array.every(callback);\r\n }\r\n\r\n public fill(id: PineArrayObject, value: any, start: number = 0, end?: number): void {\r\n const length = id.array.length;\r\n const adjustedEnd = end !== undefined ? Math.min(end, length) : length;\r\n\r\n for (let i = start; i < adjustedEnd; i++) {\r\n id.array[i] = value;\r\n }\r\n }\r\n\r\n public from(source: any[]): PineArrayObject {\r\n return new PineArrayObject([...source]);\r\n }\r\n\r\n public insert(id: PineArrayObject, index: number, value: any): void {\r\n id.array.splice(index, 0, value);\r\n }\r\n\r\n public pop(id: PineArrayObject): any {\r\n return id.array.pop();\r\n }\r\n\r\n public range(id: PineArrayObject): number {\r\n return this.max(id) - this.min(id);\r\n }\r\n\r\n public remove(id: PineArrayObject, index: number): any {\r\n if (index >= 0 && index < id.array.length) {\r\n return id.array.splice(index, 1)[0];\r\n }\r\n return this.context.NA;\r\n }\r\n\r\n public shift(id: PineArrayObject): any {\r\n return id.array.shift();\r\n }\r\n\r\n public sort(id: PineArrayObject, order: 'asc' | 'desc' = 'asc'): void {\r\n id.array.sort((a, b) => (order === 'asc' ? a - b : b - a));\r\n }\r\n\r\n public sort_indices(id: PineArrayObject, comparator?: (a: any, b: any) => number): PineArrayObject {\r\n const indices = id.array.map((_, index) => index);\r\n indices.sort((a, b) => {\r\n const valA = id.array[a];\r\n const valB = id.array[b];\r\n return comparator ? comparator(valA, valB) : valA - valB;\r\n });\r\n return new PineArrayObject(indices);\r\n }\r\n\r\n public standardize(id: PineArrayObject): PineArrayObject {\r\n const mean = this.avg(id);\r\n const stdev = this.stdev(id);\r\n\r\n if (stdev === 0) {\r\n return new PineArrayObject(id.array.map(() => 0));\r\n }\r\n\r\n return new PineArrayObject(id.array.map((x) => (x - mean) / stdev));\r\n }\r\n\r\n public unshift(id: PineArrayObject, value: any): void {\r\n id.array.unshift(value);\r\n }\r\n\r\n public some(id: PineArrayObject, callback: (val: any) => boolean): boolean {\r\n return id.array.some(callback);\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\n\r\nimport { Core } from '@pinets/namespaces/Core';\r\nimport { Input } from '@pinets/namespaces/Input';\r\nimport PineMath from '@pinets/namespaces/PineMath';\r\nimport { PineRequest } from '@pinets/namespaces/PineRequest';\r\nimport TechnicalAnalysis from '@pinets/namespaces/TechnicalAnalysis';\r\nimport { PineArray } from './namespaces/PineArray';\r\nimport { IProvider } from './marketData/IProvider';\r\n\r\nexport class Context {\r\n public data: any = {\r\n open: [],\r\n high: [],\r\n low: [],\r\n close: [],\r\n volume: [],\r\n hl2: [],\r\n hlc3: [],\r\n ohlc4: [],\r\n };\r\n public cache: any = {};\r\n public useTACache = false;\r\n\r\n public NA: any = NaN;\r\n\r\n public math: PineMath;\r\n public ta: TechnicalAnalysis;\r\n public input: Input;\r\n public request: PineRequest;\r\n public array: PineArray;\r\n public core: any;\r\n public lang: any;\r\n\r\n public idx: number = 0;\r\n\r\n public params: any = {};\r\n public const: any = {};\r\n public var: any = {};\r\n public let: any = {};\r\n\r\n public result: any = undefined;\r\n public plots: any = {};\r\n\r\n public marketData: any;\r\n public source: IProvider | any[];\r\n public tickerId: string;\r\n public timeframe: string = '';\r\n public limit: number;\r\n public sDate: number;\r\n public eDate: number;\r\n\r\n public pineTSCode: Function | String;\r\n\r\n constructor({\r\n marketData,\r\n source,\r\n tickerId,\r\n timeframe,\r\n limit,\r\n sDate,\r\n eDate,\r\n }: {\r\n marketData: any;\r\n source: IProvider | any[];\r\n tickerId?: string;\r\n timeframe?: string;\r\n limit?: number;\r\n sDate?: number;\r\n eDate?: number;\r\n }) {\r\n this.marketData = marketData;\r\n this.source = source;\r\n this.tickerId = tickerId;\r\n this.timeframe = timeframe;\r\n this.limit = limit;\r\n this.sDate = sDate;\r\n this.eDate = eDate;\r\n\r\n this.math = new PineMath(this);\r\n\r\n this.ta = new TechnicalAnalysis(this);\r\n this.input = new Input(this);\r\n this.request = new PineRequest(this);\r\n\r\n this.array = new PineArray(this);\r\n const core = new Core(this);\r\n this.core = {\r\n plotchar: core.plotchar.bind(core),\r\n na: core.na.bind(core),\r\n color: core.color,\r\n plot: core.plot.bind(core),\r\n nz: core.nz.bind(core),\r\n };\r\n }\r\n\r\n //#region [Runtime functions] ===========================\r\n\r\n /**\r\n * this function is used to initialize the target variable with the source array\r\n * this array will represent a time series and its values will be shifted at runtime in order to mimic Pine script behavior\r\n * @param trg - the target variable name : used internally to maintain the series in the execution context\r\n * @param src - the source data, can be an array or a single value\r\n * @param idx - the index of the source array, used to get a sub-series of the source data\r\n * @returns the target array\r\n */\r\n init(trg, src: any, idx: number = 0) {\r\n if (!trg) {\r\n if (Array.isArray(src)) {\r\n trg = [this.precision(src[src.length - this.idx - 1 + idx])];\r\n } else {\r\n trg = [this.precision(src)];\r\n }\r\n } else {\r\n if (!Array.isArray(src) || Array.isArray(src[0])) {\r\n //here we check that this is not a 2D array, in which case we consider it an array of values\r\n //this is important for handling TA functions that return tupples or series of tuples\r\n trg[0] = Array.isArray(src?.[0]) ? src[0] : this.precision(src);\r\n } else {\r\n trg[0] = this.precision(src[src.length - this.idx - 1 + idx]);\r\n }\r\n }\r\n\r\n return trg;\r\n }\r\n\r\n /**\r\n * this function is used to set the floating point precision of a number\r\n * by default it is set to 10 decimals which is the same as pine script\r\n * @param n - the number to be precision\r\n * @param decimals - the number of decimals to precision to\r\n\r\n * @returns the precision number\r\n */\r\n precision(n: number, decimals: number = 10) {\r\n if (typeof n !== 'number' || isNaN(n)) return n;\r\n return Number(n.toFixed(decimals));\r\n }\r\n\r\n /**\r\n * This function is used to apply special transformation to internal PineTS parameters and handle them as time-series\r\n * @param source - the source data, can be an array or a single value\r\n * @param index - the index of the source array, used to get a sub-series of the source data\r\n * @param name - the name of the parameter, used as a unique identifier in the current execution context, this allows us to properly handle the param as a series\r\n * @returns the current value of the param\r\n */\r\n param(source, index, name?: string) {\r\n if (typeof source === 'string') return source;\r\n if (!Array.isArray(source) && typeof source === 'object') return source;\r\n\r\n if (!this.params[name]) this.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.params[name] = source.slice(index);\r\n this.params[name].length = source.length; //ensure length is correct\r\n return this.params[name];\r\n }\r\n this.params[name] = source.slice(0);\r\n return this.params[name];\r\n } else {\r\n this.params[name][0] = source;\r\n return this.params[name];\r\n }\r\n }\r\n //#endregion\r\n}\r\nexport default Context;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nconst BINANCE_API_URL = 'https://api.binance.com/api/v3'; //'https://testnet.binance.vision/api/v3';\r\nconst timeframe_to_binance = {\r\n '1': '1m', // 1 minute\r\n '3': '3m', // 3 minutes\r\n '5': '5m', // 5 minutes\r\n '15': '15m', // 15 minutes\r\n '30': '30m', // 30 minutes\r\n '45': null, // 45 minutes (not directly supported by Binance, needs custom handling)\r\n '60': '1h', // 1 hour\r\n '120': '2h', // 2 hours\r\n '180': null, // 3 hours (not directly supported by Binance, needs custom handling)\r\n '240': '4h', // 4 hours\r\n '4H': '4h', // 4 hours\r\n '1D': '1d', // 1 day\r\n D: '1d', // 1 day\r\n '1W': '1w', // 1 week\r\n W: '1w', // 1 week\r\n '1M': '1M', // 1 month\r\n M: '1M', // 1 month\r\n};\r\n\r\nimport { IProvider } from '@pinets/marketData/IProvider';\r\n\r\ninterface CacheEntry<T> {\r\n data: T;\r\n timestamp: number;\r\n}\r\n\r\nclass CacheManager<T> {\r\n private cache: Map<string, CacheEntry<T>>;\r\n private readonly cacheDuration: number;\r\n\r\n constructor(cacheDuration: number = 5 * 60 * 1000) {\r\n // Default 5 minutes\r\n this.cache = new Map();\r\n this.cacheDuration = cacheDuration;\r\n }\r\n\r\n private generateKey(params: Record<string, any>): string {\r\n return Object.entries(params)\r\n .filter(([_, value]) => value !== undefined)\r\n .map(([key, value]) => `${key}:${value}`)\r\n .join('|');\r\n }\r\n\r\n get(params: Record<string, any>): T | null {\r\n const key = this.generateKey(params);\r\n const cached = this.cache.get(key);\r\n\r\n if (!cached) return null;\r\n\r\n if (Date.now() - cached.timestamp > this.cacheDuration) {\r\n this.cache.delete(key);\r\n return null;\r\n }\r\n\r\n return cached.data;\r\n }\r\n\r\n set(params: Record<string, any>, data: T): void {\r\n const key = this.generateKey(params);\r\n this.cache.set(key, {\r\n data,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear();\r\n }\r\n\r\n // Optional: method to remove expired entries\r\n cleanup(): void {\r\n const now = Date.now();\r\n for (const [key, entry] of this.cache.entries()) {\r\n if (now - entry.timestamp > this.cacheDuration) {\r\n this.cache.delete(key);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class BinanceProvider implements IProvider {\r\n private cacheManager: CacheManager<any[]>;\r\n\r\n constructor() {\r\n this.cacheManager = new CacheManager(5 * 60 * 1000); // 5 minutes cache duration\r\n }\r\n\r\n async getMarketDataInterval(tickerId: string, timeframe: string, sDate: number, eDate: number): Promise<any> {\r\n try {\r\n const interval = timeframe_to_binance[timeframe.toUpperCase()];\r\n if (!interval) {\r\n console.error(`Unsupported timeframe: ${timeframe}`);\r\n return [];\r\n }\r\n\r\n const timeframeDurations = {\r\n '1m': 60 * 1000,\r\n '3m': 3 * 60 * 1000,\r\n '5m': 5 * 60 * 1000,\r\n '15m': 15 * 60 * 1000,\r\n '30m': 30 * 60 * 1000,\r\n '1h': 60 * 60 * 1000,\r\n '2h': 2 * 60 * 60 * 1000,\r\n '4h': 4 * 60 * 60 * 1000,\r\n '1d': 24 * 60 * 60 * 1000,\r\n '1w': 7 * 24 * 60 * 60 * 1000,\r\n '1M': 30 * 24 * 60 * 60 * 1000,\r\n };\r\n\r\n let allData = [];\r\n let currentStart = sDate;\r\n const endTime = eDate;\r\n const intervalDuration = timeframeDurations[interval];\r\n\r\n if (!intervalDuration) {\r\n console.error(`Duration not defined for interval: ${interval}`);\r\n return [];\r\n }\r\n\r\n while (currentStart < endTime) {\r\n const chunkEnd = Math.min(currentStart + 1000 * intervalDuration, endTime);\r\n\r\n const data = await this.getMarketData(\r\n tickerId,\r\n timeframe,\r\n 1000, // Max allowed by Binance\r\n currentStart,\r\n chunkEnd\r\n );\r\n\r\n if (data.length === 0) break;\r\n\r\n allData = allData.concat(data);\r\n\r\n // CORRECTED LINE: Remove *1000 since closeTime is already in milliseconds\r\n currentStart = data[data.length - 1].closeTime + 1;\r\n\r\n // Keep this safety check to exit when we get less than full page\r\n if (data.length < 1000) break;\r\n }\r\n\r\n return allData;\r\n } catch (error) {\r\n console.error('Error in getMarketDataInterval:', error);\r\n return [];\r\n }\r\n }\r\n //TODO : allow querying more than 1000 klines\r\n //TODO : immplement cache\r\n async getMarketData(tickerId: string, timeframe: string, limit?: number, sDate?: number, eDate?: number): Promise<any> {\r\n try {\r\n // Check cache first\r\n const cacheParams = { tickerId, timeframe, limit, sDate, eDate };\r\n const cachedData = this.cacheManager.get(cacheParams);\r\n if (cachedData) {\r\n console.log('cache hit', tickerId, timeframe, limit, sDate, eDate);\r\n return cachedData;\r\n }\r\n\r\n const interval = timeframe_to_binance[timeframe.toUpperCase()];\r\n if (!interval) {\r\n console.error(`Unsupported timeframe: ${timeframe}`);\r\n return [];\r\n }\r\n let url = `${BINANCE_API_URL}/klines?symbol=${tickerId}&interval=${interval}`;\r\n if (!limit && sDate && eDate) {\r\n return this.getMarketDataInterval(tickerId, timeframe, sDate, eDate);\r\n }\r\n\r\n //example https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1m&limit=1000\r\n if (limit) {\r\n url += `&limit=${limit}`;\r\n }\r\n\r\n if (sDate) {\r\n url += `&startTime=${sDate}`;\r\n }\r\n if (eDate) {\r\n url += `&endTime=${eDate}`;\r\n }\r\n\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const result = await response.json();\r\n const data = result.map((item) => {\r\n return {\r\n openTime: parseInt(item[0]),\r\n open: parseFloat(item[1]),\r\n high: parseFloat(item[2]),\r\n low: parseFloat(item[3]),\r\n close: parseFloat(item[4]),\r\n volume: parseFloat(item[5]),\r\n closeTime: parseInt(item[6]),\r\n quoteAssetVolume: parseFloat(item[7]),\r\n numberOfTrades: parseInt(item[8]),\r\n takerBuyBaseAssetVolume: parseFloat(item[9]),\r\n takerBuyQuoteAssetVolume: parseFloat(item[10]),\r\n ignore: item[11],\r\n };\r\n });\r\n\r\n // Cache the results\r\n this.cacheManager.set(cacheParams, data);\r\n\r\n return data;\r\n } catch (error) {\r\n console.error('Error in binance.klines:', error);\r\n return [];\r\n }\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nimport { BinanceProvider } from './Binance/BinanceProvider.class';\r\n\r\nexport const Provider = {\r\n Binance: new BinanceProvider(),\r\n //TODO : add other providers (polygon, etc.)\r\n};\r\n"],"names":["__publicField","scopedName","kind","node","scopeManager","namespace","state","secContext","secContextIdx","result","idx","atr"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pinets.dev.es.js","sources":["../src/transpiler/ScopeManager.class.ts","../src/transpiler/index.ts","../src/PineTS.class.ts","../src/namespaces/Core.ts","../src/namespaces/Input.ts","../src/namespaces/PineMath.ts","../src/namespaces/PineRequest.ts","../src/namespaces/TechnicalAnalysis.ts","../src/namespaces/PineArray.ts","../src/Context.class.ts","../src/marketData/Binance/BinanceProvider.class.ts","../src/marketData/Provider.class.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\n\r\nexport class ScopeManager {\r\n private scopes: Map<string, string>[] = [];\r\n private scopeTypes: string[] = [];\r\n private scopeCounts: Map<string, number> = new Map();\r\n private contextBoundVars: Set<string> = new Set();\r\n private arrayPatternElements: Set<string> = new Set();\r\n private rootParams: Set<string> = new Set();\r\n private varKinds: Map<string, string> = new Map();\r\n private loopVars: Set<string> = new Set();\r\n private loopVarNames: Map<string, string> = new Map(); // Map original names to transformed names\r\n private paramIdCounter: number = 0;\r\n private cacheIdCounter: number = 0;\r\n private tempVarCounter: number = 0;\r\n\r\n public get nextParamIdArg(): any {\r\n return {\r\n type: 'Identifier',\r\n name: `'p${this.paramIdCounter++}'`,\r\n };\r\n }\r\n\r\n public get nextCacheIdArg(): any {\r\n return {\r\n type: 'Identifier',\r\n name: `'cache_${this.cacheIdCounter++}'`,\r\n };\r\n }\r\n constructor() {\r\n // Initialize global scope\r\n this.pushScope('glb');\r\n }\r\n\r\n pushScope(type: string): void {\r\n // Add a new scope of the given type\r\n this.scopes.push(new Map());\r\n this.scopeTypes.push(type);\r\n this.scopeCounts.set(type, (this.scopeCounts.get(type) || 0) + 1);\r\n }\r\n\r\n popScope(): void {\r\n // Remove the current scope\r\n this.scopes.pop();\r\n this.scopeTypes.pop();\r\n }\r\n\r\n getCurrentScopeType(): string {\r\n return this.scopeTypes[this.scopeTypes.length - 1];\r\n }\r\n\r\n getCurrentScopeCount(): number {\r\n return this.scopeCounts.get(this.getCurrentScopeType()) || 1;\r\n }\r\n\r\n addContextBoundVar(name: string, isRootParam: boolean = false): void {\r\n // Register a variable as context-bound, with optional root parameter flag\r\n this.contextBoundVars.add(name);\r\n if (isRootParam) {\r\n this.rootParams.add(name);\r\n }\r\n }\r\n addArrayPatternElement(name: string): void {\r\n this.arrayPatternElements.add(name);\r\n }\r\n\r\n isContextBound(name: string): boolean {\r\n // Check if a variable is context-bound\r\n return this.contextBoundVars.has(name);\r\n }\r\n isArrayPatternElement(name: string): boolean {\r\n return this.arrayPatternElements.has(name);\r\n }\r\n\r\n isRootParam(name: string): boolean {\r\n // Check if a variable is a root function parameter\r\n return this.rootParams.has(name);\r\n }\r\n\r\n addLoopVariable(originalName: string, transformedName: string): void {\r\n this.loopVars.add(originalName);\r\n this.loopVarNames.set(originalName, transformedName);\r\n }\r\n\r\n getLoopVariableName(name: string): string | undefined {\r\n return this.loopVarNames.get(name);\r\n }\r\n\r\n isLoopVariable(name: string): boolean {\r\n return this.loopVars.has(name);\r\n }\r\n\r\n addVariable(name: string, kind: string): string {\r\n // Regular variable handling\r\n if (this.isContextBound(name)) {\r\n return name;\r\n }\r\n const currentScope = this.scopes[this.scopes.length - 1];\r\n const scopeType = this.scopeTypes[this.scopeTypes.length - 1];\r\n const scopeCount = this.scopeCounts.get(scopeType) || 1;\r\n\r\n const newName = `${scopeType}${scopeCount}_${name}`;\r\n currentScope.set(name, newName);\r\n this.varKinds.set(newName, kind);\r\n return newName;\r\n }\r\n\r\n getVariable(name: string): [string, string] {\r\n // If it's a loop variable, return it as is\r\n if (this.loopVars.has(name)) {\r\n const transformedName = this.loopVarNames.get(name);\r\n if (transformedName) {\r\n return [transformedName, 'let'];\r\n }\r\n }\r\n\r\n // Regular variable handling\r\n if (this.isContextBound(name)) {\r\n return [name, 'let'];\r\n }\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const scope = this.scopes[i];\r\n if (scope.has(name)) {\r\n const scopedName = scope.get(name)!;\r\n const kind = this.varKinds.get(scopedName) || 'let';\r\n return [scopedName, kind];\r\n }\r\n }\r\n return [name, 'let'];\r\n }\r\n\r\n public generateTempVar(): string {\r\n return `temp_${++this.tempVarCounter}`;\r\n }\r\n}\r\n\r\nexport default ScopeManager;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\n\r\n//!!!Warning!!! this code is not clean, it was initially written as a PoC then used as transpiler for PineTS\r\n//Future version will require major refactoring or full rewrite of the transpiler\r\n/**\r\n * PineTS Transpiler\r\n *\r\n * What is PineTS ?\r\n * -----------------\r\n * PineTS is an open-source intermediate language designed to bridge the gap between Pine Script and JavaScript.\r\n * It provides a way to simulate Pine Script-like behavior in a JavaScript environment by representing Pine Script code\r\n * in a JavaScript-compatible format.\r\n *\r\n * Important Notes:\r\n * -----------------\r\n * 1. **Independence from Pine Script**: PineTS is not officially affiliated with, endorsed by, or associated with TradingView or Pine Script.\r\n * It is an independent open-source initiative created to enable developers to replicate Pine Script indicators in JavaScript environments.\r\n * 2. **Purpose**: PineTS uses JavaScript syntax and semantics but should not be confused with standard JavaScript code.\r\n * It acts as a representation of Pine Script logic that requires transpilation to be executed in JavaScript.\r\n * 3. **Open Source**: This project is developed and maintained as an open-source initiative. It is intended to serve as a tool for\r\n * developers to bridge Pine Script concepts into JavaScript applications.\r\n *\r\n * What Does PineTS Transpiler Do?\r\n * --------------------------------\r\n * PineTS cannot be executed directly in a JavaScript environment. It requires transpilation into standard JavaScript to handle\r\n * Pine Script's unique time-series data processing. The PineTS Transpiler facilitates this process by transforming PineTS code\r\n * into executable JavaScript at runtime, making it possible to execute Pine Script-inspired logic in JavaScript applications.\r\n *\r\n * Key Features of the Transpiler:\r\n * --------------------------------\r\n * 1. **Context Management**: Transforms code to use a context object (`$`) for variable storage, ensuring all variables are\r\n * accessed through this context to prevent scope conflicts.\r\n * 2. **Variable Scoping**: Renames variables based on their scope and declaration type (`const`, `let`, `var`) to avoid naming issues.\r\n * 3. **Function Handling**: Converts arrow functions while maintaining parameters and logic. Parameters are registered in the context\r\n * to prevent accidental renaming.\r\n * 4. **Loop and Conditional Handling**: Adjusts loops and conditionals to ensure proper scoping and handling of variables.\r\n *\r\n * Usage:\r\n * -------\r\n * - The `transpile` function takes a JavaScript function or code string, applies transformations, and returns the transformed\r\n * code or function.\r\n * - The transformed code uses a context object (`$`) to manage variable storage and access.\r\n *\r\n * Disclaimer:\r\n * -----------\r\n * PineTS is independently developed and is not endorsed by or affiliated with TradingView, the creators of Pine Script. All\r\n * trademarks and registered trademarks mentioned belong to their respective owners.\r\n */\r\n\r\nimport * as acorn from 'acorn';\r\nimport * as walk from 'acorn-walk';\r\nimport * as astring from 'astring';\r\nimport ScopeManager from './ScopeManager.class';\r\nconst CONTEXT_NAME = '$';\r\nconst UNDEFINED_ARG = {\r\n type: 'Identifier',\r\n name: 'undefined',\r\n};\r\n\r\nfunction transformArrayIndex(node: any, scopeManager: ScopeManager): void {\r\n //const isIfStatement = scopeManager.getCurrentScopeType() == 'if';\r\n //const isForStatement = scopeManager.getCurrentScopeType() == 'for';\r\n if (node.computed && node.property.type === 'Identifier') {\r\n // Skip transformation if it's a loop variable\r\n if (scopeManager.isLoopVariable(node.property.name)) {\r\n return;\r\n }\r\n\r\n // Only transform if it's not a context-bound variable\r\n if (!scopeManager.isContextBound(node.property.name)) {\r\n const [scopedName, kind] = scopeManager.getVariable(node.property.name);\r\n node.property = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Add [0] to the index\r\n node.property = {\r\n type: 'MemberExpression',\r\n object: node.property,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n }\r\n\r\n if (node.computed && node.object.type === 'Identifier') {\r\n if (scopeManager.isLoopVariable(node.object.name)) {\r\n return;\r\n }\r\n\r\n if (!scopeManager.isContextBound(node.object.name)) {\r\n const [scopedName, kind] = scopeManager.getVariable(node.object.name);\r\n\r\n //transform the object to scoped variable\r\n\r\n node.object = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n }\r\n\r\n if (node.property.type === 'MemberExpression') {\r\n const memberNode = node.property;\r\n if (!memberNode._indexTransformed) {\r\n transformArrayIndex(memberNode, scopeManager);\r\n memberNode._indexTransformed = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction transformMemberExpression(memberNode: any, originalParamName: string, scopeManager: ScopeManager): void {\r\n // Skip transformation for Math object properties\r\n if (memberNode.object && memberNode.object.type === 'Identifier' && memberNode.object.name === 'Math') {\r\n return;\r\n }\r\n\r\n //if statment variables always need to be transformed\r\n const isIfStatement = scopeManager.getCurrentScopeType() == 'if';\r\n const isElseStatement = scopeManager.getCurrentScopeType() == 'els';\r\n const isForStatement = scopeManager.getCurrentScopeType() == 'for';\r\n // If the object is a context-bound variable (like a function parameter), skip transformation\r\n if (\r\n !isIfStatement &&\r\n !isElseStatement &&\r\n !isForStatement &&\r\n memberNode.object &&\r\n memberNode.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(memberNode.object.name) &&\r\n !scopeManager.isRootParam(memberNode.object.name)\r\n ) {\r\n return;\r\n }\r\n\r\n // Transform array indices\r\n if (!memberNode._indexTransformed) {\r\n transformArrayIndex(memberNode, scopeManager);\r\n memberNode._indexTransformed = true;\r\n }\r\n}\r\n\r\nfunction transformVariableDeclaration(varNode: any, scopeManager: ScopeManager): void {\r\n varNode.declarations.forEach((decl: any) => {\r\n //special case for na\r\n if (decl.init.name == 'na') {\r\n decl.init.name = 'NaN';\r\n }\r\n\r\n // Check if this is a context property assignment\r\n\r\n // prettier-ignore\r\n const isContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object && \r\n (decl.init.object.name === 'context' || \r\n decl.init.object.name === CONTEXT_NAME || \r\n decl.init.object.name === 'context2')\r\n\r\n // prettier-ignore\r\n const isSubContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object?.object &&\r\n (decl.init.object.object.name === 'context' ||\r\n decl.init.object.object.name === CONTEXT_NAME ||\r\n decl.init.object.object.name === 'context2');\r\n\r\n // Check if this is an arrow function declaration\r\n const isArrowFunction = decl.init && decl.init.type === 'ArrowFunctionExpression';\r\n\r\n if (isContextProperty) {\r\n // For context properties, register as context-bound and update the object name\r\n if (decl.id.name) {\r\n scopeManager.addContextBoundVar(decl.id.name);\r\n }\r\n if (decl.id.properties) {\r\n decl.id.properties.forEach((property: any) => {\r\n if (property.key.name) {\r\n scopeManager.addContextBoundVar(property.key.name);\r\n }\r\n });\r\n }\r\n decl.init.object.name = CONTEXT_NAME;\r\n return;\r\n }\r\n\r\n if (isSubContextProperty) {\r\n // For context properties, register as context-bound and update the object name\r\n if (decl.id.name) {\r\n scopeManager.addContextBoundVar(decl.id.name);\r\n }\r\n if (decl.id.properties) {\r\n decl.id.properties.forEach((property: any) => {\r\n if (property.key.name) {\r\n scopeManager.addContextBoundVar(property.key.name);\r\n }\r\n });\r\n }\r\n decl.init.object.object.name = CONTEXT_NAME;\r\n return;\r\n }\r\n\r\n if (isArrowFunction) {\r\n // Register arrow function parameters as context-bound\r\n decl.init.params.forEach((param: any) => {\r\n if (param.type === 'Identifier') {\r\n scopeManager.addContextBoundVar(param.name);\r\n }\r\n });\r\n }\r\n\r\n // Transform non-context variables to use the context object\r\n const newName = scopeManager.addVariable(decl.id.name, varNode.kind);\r\n const kind = varNode.kind; // 'const', 'let', or 'var'\r\n\r\n // Transform identifiers in the init expression\r\n if (decl.init && !isArrowFunction) {\r\n // Check if initialization is a namespace function call\r\n if (\r\n decl.init.type === 'CallExpression' &&\r\n decl.init.callee.type === 'MemberExpression' &&\r\n decl.init.callee.object &&\r\n decl.init.callee.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(decl.init.callee.object.name)\r\n ) {\r\n // Transform the function call arguments\r\n transformCallExpression(decl.init, scopeManager);\r\n } else {\r\n // Add parent references for proper function call detection\r\n walk.recursive(\r\n decl.init,\r\n { parent: decl.init },\r\n {\r\n Identifier(node: any, state: any) {\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n if (node.type === 'Identifier' && (isBinaryOperation || isConditional)) {\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: node.name,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n });\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n // Set parent for the function name\r\n if (node.callee.type === 'Identifier') {\r\n node.callee.parent = node;\r\n }\r\n // Set parent for arguments\r\n node.arguments.forEach((arg: any) => {\r\n if (arg.type === 'Identifier') {\r\n arg.parent = node;\r\n }\r\n });\r\n transformCallExpression(node, scopeManager);\r\n // Continue walking the arguments\r\n node.arguments.forEach((arg) => c(arg, { parent: node }));\r\n },\r\n BinaryExpression(node: any, state: any, c: any) {\r\n // Set parent references for operands\r\n if (node.left.type === 'Identifier') {\r\n node.left.parent = node;\r\n }\r\n if (node.right.type === 'Identifier') {\r\n node.right.parent = node;\r\n }\r\n // Transform both operands\r\n c(node.left, { parent: node });\r\n c(node.right, { parent: node });\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n // Set parent reference\r\n if (node.object.type === 'Identifier') {\r\n node.object.parent = node;\r\n }\r\n if (node.property.type === 'Identifier') {\r\n node.property.parent = node;\r\n }\r\n // Transform array indices first\r\n transformArrayIndex(node, scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node });\r\n }\r\n },\r\n }\r\n );\r\n }\r\n }\r\n\r\n // Create the target variable reference\r\n const targetVarRef = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: newName,\r\n },\r\n computed: false,\r\n };\r\n\r\n const isArrayPatternVar = scopeManager.isArrayPatternElement(decl.id.name);\r\n // Check if initialization is from array access\r\n const isArrayInit =\r\n !isArrayPatternVar &&\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.computed &&\r\n decl.init.property &&\r\n (decl.init.property.type === 'Literal' || decl.init.property.type === 'MemberExpression');\r\n\r\n if (decl.init?.property?.type === 'MemberExpression') {\r\n if (!decl.init.property._indexTransformed) {\r\n transformArrayIndex(decl.init.property, scopeManager);\r\n decl.init.property._indexTransformed = true;\r\n }\r\n }\r\n // Create an assignment expression for the transformed variable\r\n const assignmentExpr = {\r\n type: 'ExpressionStatement',\r\n expression: {\r\n type: 'AssignmentExpression',\r\n operator: '=',\r\n left: targetVarRef,\r\n right: decl.init\r\n ? isArrowFunction || isArrayPatternVar\r\n ? decl.init // Keep arrow functions and array pattern variables as-is\r\n : {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'init',\r\n },\r\n computed: false,\r\n },\r\n arguments: isArrayInit ? [targetVarRef, decl.init.object, decl.init.property] : [targetVarRef, decl.init],\r\n }\r\n : {\r\n type: 'Identifier',\r\n name: 'undefined',\r\n },\r\n },\r\n };\r\n\r\n if (isArrayPatternVar) {\r\n assignmentExpr.expression.right.object.property.name += `?.[0][${decl.init.property.value}]`;\r\n const obj = assignmentExpr.expression.right.object;\r\n\r\n assignmentExpr.expression.right = {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'init',\r\n },\r\n computed: false,\r\n },\r\n arguments: [targetVarRef, obj /*, decl.init.property.value*/],\r\n };\r\n }\r\n\r\n if (isArrowFunction) {\r\n // Transform the body of arrow functions\r\n scopeManager.pushScope('fn');\r\n walk.recursive(decl.init.body, scopeManager, {\r\n BlockStatement(node: any, state: ScopeManager, c: any) {\r\n //state.pushScope('block');\r\n node.body.forEach((stmt: any) => c(stmt, state));\r\n //state.popScope();\r\n },\r\n IfStatement(node: any, state: ScopeManager, c: any) {\r\n state.pushScope('if');\r\n c(node.consequent, state);\r\n if (node.alternate) {\r\n state.pushScope('els');\r\n c(node.alternate, state);\r\n state.popScope();\r\n }\r\n state.popScope();\r\n },\r\n VariableDeclaration(node: any, state: ScopeManager) {\r\n transformVariableDeclaration(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n },\r\n AssignmentExpression(node: any, state: ScopeManager) {\r\n transformAssignmentExpression(node, state);\r\n },\r\n });\r\n scopeManager.popScope();\r\n }\r\n\r\n // Replace the original node with the transformed assignment\r\n Object.assign(varNode, assignmentExpr);\r\n });\r\n}\r\n\r\nfunction transformIdentifier(node: any, scopeManager: ScopeManager): void {\r\n // Transform identifiers to use the context object\r\n if (node.name !== CONTEXT_NAME) {\r\n // Skip transformation for global and native objects\r\n if (\r\n node.name === 'Math' ||\r\n node.name === 'NaN' ||\r\n node.name === 'undefined' ||\r\n node.name === 'Infinity' ||\r\n node.name === 'null' ||\r\n (node.name.startsWith(\"'\") && node.name.endsWith(\"'\")) ||\r\n (node.name.startsWith('\"') && node.name.endsWith('\"')) ||\r\n (node.name.startsWith('`') && node.name.endsWith('`'))\r\n ) {\r\n return;\r\n }\r\n\r\n // Skip transformation for loop variables\r\n if (scopeManager.isLoopVariable(node.name)) {\r\n return;\r\n }\r\n\r\n // If it's a nested function parameter (but not a root parameter), skip transformation\r\n if (scopeManager.isContextBound(node.name) && !scopeManager.isRootParam(node.name)) {\r\n return;\r\n }\r\n\r\n // Check if this identifier is part of a namespace member access (e.g., ta.ema)\r\n const isNamespaceMember =\r\n node.parent && node.parent.type === 'MemberExpression' && node.parent.object === node && scopeManager.isContextBound(node.name);\r\n\r\n // Check if this identifier is part of a param() call\r\n const isParamCall =\r\n node.parent &&\r\n node.parent.type === 'CallExpression' &&\r\n node.parent.callee &&\r\n node.parent.callee.type === 'MemberExpression' &&\r\n node.parent.callee.property.name === 'param';\r\n\r\n const isInit = node.parent && node.parent.type === 'AssignmentExpression' && node.parent.left === node;\r\n // Check if this identifier is an argument to a namespace function\r\n const isNamespaceFunctionArg =\r\n node.parent &&\r\n node.parent.type === 'CallExpression' &&\r\n node.parent.callee &&\r\n node.parent.callee.type === 'MemberExpression' &&\r\n scopeManager.isContextBound(node.parent.callee.object.name);\r\n\r\n // Check if this identifier is part of an array access\r\n const isArrayAccess = node.parent && node.parent.type === 'MemberExpression' && node.parent.computed;\r\n\r\n // Check if this identifier is part of an array access that's an argument to a namespace function\r\n const isArrayIndexInNamespaceCall =\r\n node.parent &&\r\n node.parent.type === 'MemberExpression' &&\r\n node.parent.computed &&\r\n node.parent.property === node &&\r\n node.parent.parent &&\r\n node.parent.parent.type === 'CallExpression' &&\r\n node.parent.parent.callee &&\r\n node.parent.parent.callee.type === 'MemberExpression' &&\r\n scopeManager.isContextBound(node.parent.parent.callee.object.name);\r\n\r\n // Check if this identifier is a function being called\r\n const isFunctionCall = node.parent && node.parent.type === 'CallExpression' && node.parent.callee === node;\r\n\r\n if (isNamespaceMember || isParamCall || isNamespaceFunctionArg || isArrayIndexInNamespaceCall || isFunctionCall) {\r\n // For function calls, we should just use the original name without scoping\r\n if (isFunctionCall) {\r\n return;\r\n }\r\n // Don't add [0] for namespace function arguments or array indices\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n });\r\n return;\r\n }\r\n\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n const memberExpr = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Check if parent node is already a member expression with computed property (array access)\r\n const hasArrayAccess = node.parent && node.parent.type === 'MemberExpression' && node.parent.computed && node.parent.object === node;\r\n\r\n if (!hasArrayAccess && !isArrayAccess) {\r\n // Add [0] array access if not already present and not part of array access\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: memberExpr,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n });\r\n } else {\r\n // Just replace with the member expression without adding array access\r\n Object.assign(node, memberExpr);\r\n }\r\n }\r\n}\r\n\r\nfunction transformAssignmentExpression(node: any, scopeManager: ScopeManager): void {\r\n // Transform assignment expressions to use the context object\r\n if (node.left.type === 'Identifier') {\r\n const [varName, kind] = scopeManager.getVariable(node.left.name);\r\n const memberExpr = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: varName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Add [0] array access for assignment target\r\n node.left = {\r\n type: 'MemberExpression',\r\n object: memberExpr,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n\r\n // Transform identifiers in the right side of the assignment\r\n walk.recursive(\r\n node.right,\r\n { parent: node.right, inNamespaceCall: false },\r\n {\r\n Identifier(node: any, state: any, c: any) {\r\n //special case for na\r\n if (node.name == 'na') {\r\n node.name = 'NaN';\r\n }\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n const isContextBound = scopeManager.isContextBound(node.name) && !scopeManager.isRootParam(node.name);\r\n const hasArrayAccess = node.parent && node.parent.type === 'MemberExpression' && node.parent.computed && node.parent.object === node;\r\n const isParamCall = node.parent && node.parent._isParamCall;\r\n const isMemberExpression = node.parent && node.parent.type === 'MemberExpression';\r\n const isReserved = node.name === 'NaN';\r\n\r\n if (isContextBound || isConditional || isBinaryOperation) {\r\n if (node.type === 'MemberExpression') {\r\n transformArrayIndex(node, scopeManager);\r\n } else if (node.type === 'Identifier' && !isMemberExpression && !hasArrayAccess && !isParamCall && !isReserved) {\r\n addArrayAccess(node, scopeManager);\r\n }\r\n }\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n // Transform array indices first\r\n transformArrayIndex(node, scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node, inNamespaceCall: state.inNamespaceCall });\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n const isNamespaceCall =\r\n node.callee &&\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object &&\r\n node.callee.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(node.callee.object.name);\r\n\r\n // First transform the call expression itself\r\n transformCallExpression(node, scopeManager);\r\n\r\n // Then transform its arguments with the correct context\r\n node.arguments.forEach((arg: any) => c(arg, { parent: node, inNamespaceCall: isNamespaceCall || state.inNamespaceCall }));\r\n\r\n // Add [0] to the function call result if it's a namespace call and hasn't been wrapped yet\r\n // and it's not a param() call\r\n // if (!node._arrayWrapped && isNamespaceCall && node.callee.property.name !== 'param') {\r\n // const wrappedNode = {\r\n // type: 'MemberExpression',\r\n // object: { ...node },\r\n // property: {\r\n // type: 'Literal',\r\n // value: 0,\r\n // },\r\n // computed: true,\r\n // };\r\n // Object.assign(node, wrappedNode);\r\n // node._arrayWrapped = true;\r\n // }\r\n },\r\n }\r\n );\r\n}\r\n\r\nfunction createWrapperFunction(arrowFunction: any): any {\r\n // Create a wrapper function with the context parameter\r\n return {\r\n type: 'FunctionDeclaration',\r\n id: null,\r\n params: [\r\n {\r\n type: 'Identifier',\r\n name: 'context',\r\n },\r\n ],\r\n body: {\r\n type: 'BlockStatement',\r\n body: [\r\n {\r\n type: 'ReturnStatement',\r\n argument: arrowFunction,\r\n },\r\n ],\r\n },\r\n };\r\n}\r\n\r\nfunction transformArrowFunctionParams(node: any, scopeManager: ScopeManager, isRootFunction: boolean = false): void {\r\n // Register arrow function parameters as context-bound\r\n node.params.forEach((param: any) => {\r\n if (param.type === 'Identifier') {\r\n scopeManager.addContextBoundVar(param.name, isRootFunction);\r\n }\r\n });\r\n}\r\n\r\nfunction transformWhileStatement(node: any, scopeManager: ScopeManager, c: any): void {\r\n // Transform the test condition of the while loop\r\n walk.simple(node.test, {\r\n Identifier(idNode: any) {\r\n transformIdentifier(idNode, scopeManager);\r\n },\r\n });\r\n\r\n // Process the body of the while loop\r\n scopeManager.pushScope('whl');\r\n c(node.body, scopeManager);\r\n scopeManager.popScope();\r\n}\r\n\r\nfunction transformReturnStatement(node: any, scopeManager: ScopeManager): void {\r\n const curScope = scopeManager.getCurrentScopeType();\r\n // Transform the return argument if it exists\r\n if (node.argument) {\r\n if (node.argument.type === 'ArrayExpression') {\r\n // Transform each element in the array\r\n node.argument.elements = node.argument.elements.map((element: any) => {\r\n if (element.type === 'Identifier') {\r\n // Skip transformation if it's a context-bound variable\r\n if (scopeManager.isContextBound(element.name) && !scopeManager.isRootParam(element.name)) {\r\n // Only add [0] if it's not already an array access\r\n return {\r\n type: 'MemberExpression',\r\n object: element,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n\r\n // Transform non-context-bound variables\r\n const [scopedName, kind] = scopeManager.getVariable(element.name);\r\n return {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n } else if (element.type === 'MemberExpression') {\r\n // If it's already a member expression (array access), leave it as is\r\n if (\r\n element.computed &&\r\n element.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(element.object.name) &&\r\n !scopeManager.isRootParam(element.object.name)\r\n ) {\r\n return element;\r\n }\r\n // Otherwise, transform it normally\r\n transformMemberExpression(element, '', scopeManager);\r\n return element;\r\n }\r\n return element;\r\n });\r\n\r\n node.argument = {\r\n type: 'ArrayExpression',\r\n elements: [node.argument],\r\n };\r\n } else if (node.argument.type === 'BinaryExpression') {\r\n // Transform both operands of the binary expression\r\n walk.recursive(node.argument, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n if (node.type === 'Identifier') {\r\n addArrayAccess(node, state);\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n });\r\n } else if (node.argument.type === 'ObjectExpression') {\r\n // Handle object expressions (existing code)\r\n node.argument.properties = node.argument.properties.map((prop: any) => {\r\n // Check for shorthand properties\r\n if (prop.shorthand) {\r\n // Get the variable name and kind\r\n const [scopedName, kind] = scopeManager.getVariable(prop.value.name);\r\n\r\n // Convert shorthand to full property definition\r\n return {\r\n type: 'Property',\r\n key: {\r\n type: 'Identifier',\r\n name: prop.key.name,\r\n },\r\n value: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n },\r\n kind: 'init',\r\n method: false,\r\n shorthand: false,\r\n computed: false,\r\n };\r\n }\r\n return prop;\r\n });\r\n } else if (node.argument.type === 'Identifier') {\r\n // Handle identifier return values\r\n const [scopedName, kind] = scopeManager.getVariable(node.argument.name);\r\n node.argument = {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n\r\n // Add [0] array access\r\n node.argument = {\r\n type: 'MemberExpression',\r\n object: node.argument,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n\r\n if (curScope === 'fn') {\r\n //for nested functions : wrap the return argument in a CallExpression with math._precision(<statement>)\r\n node.argument = {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: { type: 'Identifier', name: CONTEXT_NAME },\r\n property: { type: 'Identifier', name: 'precision' },\r\n },\r\n arguments: [node.argument],\r\n };\r\n }\r\n }\r\n}\r\n\r\nfunction transformIdentifierForParam(node: any, scopeManager: ScopeManager): any {\r\n if (node.type === 'Identifier') {\r\n if (node.name === 'na') {\r\n node.name = 'NaN';\r\n return node;\r\n }\r\n\r\n // Skip transformation for loop variables\r\n if (scopeManager.isLoopVariable(node.name)) {\r\n return node;\r\n }\r\n // If it's a root parameter, transform it with $.let prefix\r\n if (scopeManager.isRootParam(node.name)) {\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n return {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n }\r\n // If it's a nested function parameter or other context-bound variable, return as is\r\n if (scopeManager.isContextBound(node.name)) {\r\n return node;\r\n }\r\n // Otherwise transform with $.let prefix\r\n const [scopedName, kind] = scopeManager.getVariable(node.name);\r\n\r\n return {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n };\r\n }\r\n return node;\r\n}\r\n\r\nfunction getParamFromUnaryExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform the argument\r\n const transformedArgument = transformOperand(node.argument, scopeManager, namespace);\r\n\r\n // Create the unary expression\r\n const unaryExpr = {\r\n type: 'UnaryExpression',\r\n operator: node.operator,\r\n prefix: node.prefix,\r\n argument: transformedArgument,\r\n start: node.start,\r\n end: node.end,\r\n };\r\n\r\n return unaryExpr;\r\n // Wrap the unary expression with namespace.param()\r\n // return {\r\n // type: 'CallExpression',\r\n // callee: {\r\n // type: 'MemberExpression',\r\n // object: {\r\n // type: 'Identifier',\r\n // name: namespace,\r\n // },\r\n // property: {\r\n // type: 'Identifier',\r\n // name: 'param',\r\n // },\r\n // computed: false,\r\n // },\r\n // arguments: [unaryExpr, transformedArgument.property, scopeManager.nextParamIdArg],\r\n // _transformed: true,\r\n // _isParamCall: true,\r\n // };\r\n}\r\n\r\nfunction transformOperand(node: any, scopeManager: ScopeManager, namespace: string = ''): any {\r\n switch (node.type) {\r\n case 'BinaryExpression': {\r\n return getParamFromBinaryExpression(node, scopeManager, namespace);\r\n }\r\n case 'MemberExpression': {\r\n // Handle array access\r\n const transformedObject = node.object.type === 'Identifier' ? transformIdentifierForParam(node.object, scopeManager) : node.object;\r\n // Don't add [0] if this is already an array access\r\n return {\r\n type: 'MemberExpression',\r\n object: transformedObject,\r\n property: node.property,\r\n computed: node.computed,\r\n };\r\n }\r\n case 'Identifier': {\r\n // Skip transformation for loop variables\r\n if (scopeManager.isLoopVariable(node.name)) {\r\n return node;\r\n }\r\n // Check if this identifier is part of a member expression (array access)\r\n const isMemberExprProperty = node.parent && node.parent.type === 'MemberExpression' && node.parent.property === node;\r\n if (isMemberExprProperty) {\r\n return node;\r\n }\r\n const transformedObject = transformIdentifierForParam(node, scopeManager);\r\n\r\n return {\r\n type: 'MemberExpression',\r\n object: transformedObject,\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n };\r\n }\r\n case 'UnaryExpression': {\r\n return getParamFromUnaryExpression(node, scopeManager, namespace);\r\n }\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction getParamFromBinaryExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform both operands\r\n const transformedLeft = transformOperand(node.left, scopeManager, namespace);\r\n const transformedRight = transformOperand(node.right, scopeManager, namespace);\r\n\r\n // if (transformedLeft?.property?.type === 'Identifier') {\r\n // transformMemberExpression(transformedLeft, '', scopeManager);\r\n // //transformIdentifier(transformedLeft.property, scopeManager);\r\n // }\r\n // Create the binary expression\r\n const binaryExpr = {\r\n type: 'BinaryExpression',\r\n operator: node.operator,\r\n left: transformedLeft,\r\n right: transformedRight,\r\n start: node.start,\r\n end: node.end,\r\n };\r\n\r\n // Walk through the binary expression to transform any function calls\r\n walk.recursive(binaryExpr, scopeManager, {\r\n CallExpression(node: any, scopeManager: ScopeManager) {\r\n if (!node._transformed) {\r\n transformCallExpression(node, scopeManager);\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n });\r\n\r\n return binaryExpr;\r\n // Wrap the binary expression with namespace.param()\r\n // return {\r\n // type: 'CallExpression',\r\n // callee: {\r\n // type: 'MemberExpression',\r\n // object: {\r\n // type: 'Identifier',\r\n // name: namespace,\r\n // },\r\n // property: {\r\n // type: 'Identifier',\r\n // name: 'param',\r\n // },\r\n // computed: false,\r\n // },\r\n // arguments: [binaryExpr, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n // _transformed: true,\r\n // _isParamCall: true,\r\n // };\r\n}\r\n\r\nfunction getParamFromLogicalExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform both operands\r\n const transformedLeft = transformOperand(node.left, scopeManager, namespace);\r\n const transformedRight = transformOperand(node.right, scopeManager, namespace);\r\n\r\n const logicalExpr = {\r\n type: 'LogicalExpression',\r\n operator: node.operator,\r\n left: transformedLeft,\r\n right: transformedRight,\r\n start: node.start,\r\n end: node.end,\r\n };\r\n\r\n // Walk through the logical expression to transform any function calls\r\n walk.recursive(logicalExpr, scopeManager, {\r\n CallExpression(node: any, scopeManager: ScopeManager) {\r\n if (!node._transformed) {\r\n transformCallExpression(node, scopeManager);\r\n }\r\n },\r\n });\r\n\r\n return logicalExpr;\r\n\r\n // return {\r\n // type: 'CallExpression',\r\n // callee: {\r\n // type: 'MemberExpression',\r\n // object: { type: 'Identifier', name: namespace },\r\n // property: { type: 'Identifier', name: 'param' },\r\n // },\r\n // arguments: [logicalExpr, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n // _transformed: true,\r\n // _isParamCall: true,\r\n // };\r\n}\r\n\r\nfunction getParamFromConditionalExpression(node: any, scopeManager: ScopeManager, namespace: string): any {\r\n // Transform identifiers in the right side of the assignment\r\n walk.recursive(\r\n node,\r\n { parent: node, inNamespaceCall: false },\r\n {\r\n Identifier(node: any, state: any, c: any) {\r\n if (node.name == 'NaN') return;\r\n if (node.name == 'na') {\r\n node.name = 'NaN';\r\n return;\r\n }\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n\r\n if (isConditional || isBinaryOperation) {\r\n if (node.type === 'MemberExpression') {\r\n transformArrayIndex(node, scopeManager);\r\n } else if (node.type === 'Identifier') {\r\n addArrayAccess(node, scopeManager);\r\n }\r\n }\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n // Transform array indices first\r\n transformArrayIndex(node, scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node, inNamespaceCall: state.inNamespaceCall });\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n const isNamespaceCall =\r\n node.callee &&\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object &&\r\n node.callee.object.type === 'Identifier' &&\r\n scopeManager.isContextBound(node.callee.object.name);\r\n\r\n // First transform the call expression itself\r\n transformCallExpression(node, scopeManager);\r\n\r\n // Then transform its arguments with the correct context\r\n node.arguments.forEach((arg: any) => c(arg, { parent: node, inNamespaceCall: isNamespaceCall || state.inNamespaceCall }));\r\n },\r\n }\r\n );\r\n\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: { type: 'Identifier', name: namespace },\r\n property: { type: 'Identifier', name: 'param' },\r\n },\r\n arguments: [node, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n}\r\n\r\nfunction transformFunctionArgument(arg: any, namespace: string, scopeManager: ScopeManager): any {\r\n // Handle binary expressions (arithmetic operations)\r\n\r\n switch (arg?.type) {\r\n case 'BinaryExpression':\r\n arg = getParamFromBinaryExpression(arg, scopeManager, namespace);\r\n break;\r\n case 'LogicalExpression':\r\n arg = getParamFromLogicalExpression(arg, scopeManager, namespace);\r\n break;\r\n case 'ConditionalExpression':\r\n return getParamFromConditionalExpression(arg, scopeManager, namespace);\r\n case 'UnaryExpression':\r\n arg = getParamFromUnaryExpression(arg, scopeManager, namespace);\r\n break;\r\n // case 'Identifier':\r\n // return transformOperand(arg, scopeManager, namespace);\r\n }\r\n\r\n // Check if the argument is an array access\r\n const isArrayAccess = arg.type === 'MemberExpression' && arg.computed && arg.property;\r\n\r\n if (isArrayAccess) {\r\n // Transform array access\r\n const transformedObject =\r\n arg.object.type === 'Identifier' && scopeManager.isContextBound(arg.object.name) && !scopeManager.isRootParam(arg.object.name)\r\n ? arg.object\r\n : transformIdentifierForParam(arg.object, scopeManager);\r\n\r\n // Transform the index if it's an identifier\r\n const transformedProperty =\r\n arg.property.type === 'Identifier' && !scopeManager.isContextBound(arg.property.name) && !scopeManager.isLoopVariable(arg.property.name)\r\n ? transformIdentifierForParam(arg.property, scopeManager)\r\n : arg.property;\r\n\r\n // const memberExpr = {\r\n // type: 'MemberExpression',\r\n // object: transformedObject,\r\n // property: transformedProperty,\r\n // computed: true,\r\n // };\r\n\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: namespace,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'param',\r\n },\r\n computed: false,\r\n },\r\n arguments: [transformedObject, transformedProperty, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n }\r\n\r\n if (arg.type === 'ObjectExpression') {\r\n arg.properties = arg.properties.map((prop: any) => {\r\n // Get the variable name and kind\r\n if (prop.value.name) {\r\n const [scopedName, kind] = scopeManager.getVariable(prop.value.name);\r\n\r\n // Convert shorthand to full property definition\r\n return {\r\n type: 'Property',\r\n key: {\r\n type: 'Identifier',\r\n name: prop.key.name,\r\n },\r\n value: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: CONTEXT_NAME,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: kind,\r\n },\r\n computed: false,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: scopedName,\r\n },\r\n computed: false,\r\n },\r\n kind: 'init',\r\n method: false,\r\n shorthand: false,\r\n computed: false,\r\n };\r\n }\r\n return prop;\r\n });\r\n }\r\n // For non-array-access arguments\r\n if (arg.type === 'Identifier') {\r\n if (arg.name === 'na') {\r\n arg.name = 'NaN';\r\n return arg;\r\n }\r\n // If it's a context-bound variable (like a nested function parameter), use it directly\r\n if (scopeManager.isContextBound(arg.name) && !scopeManager.isRootParam(arg.name)) {\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: namespace,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'param',\r\n },\r\n computed: false,\r\n },\r\n arguments: [arg, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n }\r\n }\r\n\r\n // For all other cases, transform normally\r\n\r\n if (arg?.type === 'CallExpression') {\r\n transformCallExpression(arg, scopeManager, namespace);\r\n }\r\n return {\r\n type: 'CallExpression',\r\n callee: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: namespace,\r\n },\r\n property: {\r\n type: 'Identifier',\r\n name: 'param',\r\n },\r\n computed: false,\r\n },\r\n arguments: [arg.type === 'Identifier' ? transformIdentifierForParam(arg, scopeManager) : arg, UNDEFINED_ARG, scopeManager.nextParamIdArg],\r\n _transformed: true,\r\n _isParamCall: true,\r\n };\r\n}\r\n\r\nfunction transformCallExpression(node: any, scopeManager: ScopeManager, namespace?: string): void {\r\n // Skip if this node has already been transformed\r\n if (node._transformed) {\r\n return;\r\n }\r\n\r\n // Check if this is a namespace method call (e.g., ta.ema, math.abs)\r\n const isNamespaceCall =\r\n node.callee &&\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object &&\r\n node.callee.object.type === 'Identifier' &&\r\n (scopeManager.isContextBound(node.callee.object.name) || node.callee.object.name === 'math' || node.callee.object.name === 'ta');\r\n\r\n if (isNamespaceCall) {\r\n const namespace = node.callee.object.name;\r\n // Transform arguments using the namespace's param\r\n node.arguments = node.arguments.map((arg: any) => {\r\n // If argument is already a param call, don't wrap it again\r\n if (arg._isParamCall) {\r\n return arg;\r\n }\r\n return transformFunctionArgument(arg, namespace, scopeManager);\r\n });\r\n\r\n // //TODO : support cache\r\n // if (namespace === 'ta') {\r\n // node.arguments.push(scopeManager.nextCacheIdArg);\r\n // }\r\n node._transformed = true;\r\n }\r\n // Check if this is a regular function call (not a namespace method)\r\n else if (node.callee && node.callee.type === 'Identifier') {\r\n // Transform arguments using $.param\r\n node.arguments = node.arguments.map((arg: any) => {\r\n // If argument is already a param call, don't wrap it again\r\n if (arg._isParamCall) {\r\n return arg;\r\n }\r\n return transformFunctionArgument(arg, CONTEXT_NAME, scopeManager);\r\n });\r\n node._transformed = true;\r\n }\r\n\r\n // Transform any nested call expressions in the arguments\r\n node.arguments.forEach((arg: any) => {\r\n walk.recursive(arg, scopeManager, {\r\n Identifier(node: any, state: any, c: any) {\r\n node.parent = state.parent;\r\n transformIdentifier(node, scopeManager);\r\n const isBinaryOperation = node.parent && node.parent.type === 'BinaryExpression';\r\n const isConditional = node.parent && node.parent.type === 'ConditionalExpression';\r\n\r\n if (isConditional || isBinaryOperation) {\r\n if (node.type === 'MemberExpression') {\r\n transformArrayIndex(node, scopeManager);\r\n } else if (node.type === 'Identifier') {\r\n addArrayAccess(node, scopeManager);\r\n }\r\n }\r\n },\r\n CallExpression(node: any, state: any, c: any) {\r\n if (!node._transformed) {\r\n // First transform the call expression itself\r\n transformCallExpression(node, state);\r\n }\r\n },\r\n MemberExpression(node: any, state: any, c: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n // Then continue with object transformation\r\n if (node.object) {\r\n c(node.object, { parent: node, inNamespaceCall: state.inNamespaceCall });\r\n }\r\n },\r\n });\r\n });\r\n}\r\n\r\nfunction transformFunctionDeclaration(node: any, scopeManager: ScopeManager): void {\r\n // Register function parameters as context-bound (but not as root params)\r\n node.params.forEach((param: any) => {\r\n if (param.type === 'Identifier') {\r\n scopeManager.addContextBoundVar(param.name, false);\r\n }\r\n });\r\n\r\n // Transform the function body\r\n if (node.body && node.body.type === 'BlockStatement') {\r\n scopeManager.pushScope('fn');\r\n walk.recursive(node.body, scopeManager, {\r\n BlockStatement(node: any, state: ScopeManager, c: any) {\r\n //state.pushScope('block');\r\n node.body.forEach((stmt: any) => c(stmt, state));\r\n //state.popScope();\r\n },\r\n ReturnStatement(node: any, state: ScopeManager) {\r\n transformReturnStatement(node, state);\r\n },\r\n VariableDeclaration(node: any, state: ScopeManager) {\r\n transformVariableDeclaration(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n },\r\n CallExpression(node: any, state: ScopeManager) {\r\n // Transform the call expression itself\r\n transformCallExpression(node, state);\r\n\r\n // Also transform any nested call expressions in the arguments\r\n node.arguments.forEach((arg: any) => {\r\n if (arg.type === 'BinaryExpression') {\r\n walk.recursive(arg, state, {\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', state);\r\n },\r\n });\r\n }\r\n });\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n AssignmentExpression(node: any, state: ScopeManager) {\r\n transformAssignmentExpression(node, state);\r\n },\r\n ForStatement(node: any, state: ScopeManager, c: any) {\r\n transformForStatement(node, state, c);\r\n },\r\n IfStatement(node: any, state: ScopeManager, c: any) {\r\n transformIfStatement(node, state, c);\r\n },\r\n BinaryExpression(node: any, state: ScopeManager, c: any) {\r\n // Transform both sides of binary expressions\r\n walk.recursive(node, state, {\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', state);\r\n },\r\n });\r\n },\r\n });\r\n scopeManager.popScope();\r\n }\r\n}\r\nfunction addArrayAccess(node: any, scopeManager: ScopeManager): void {\r\n Object.assign(node, {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: node.name,\r\n start: node.start,\r\n end: node.end,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: 0,\r\n },\r\n computed: true,\r\n _indexTransformed: true,\r\n });\r\n}\r\nfunction transformForStatement(node: any, scopeManager: ScopeManager, c: any): void {\r\n // Handle initialization\r\n if (node.init && node.init.type === 'VariableDeclaration') {\r\n // Keep the original loop variable name\r\n const decl = node.init.declarations[0];\r\n const originalName = decl.id.name;\r\n scopeManager.addLoopVariable(originalName, originalName);\r\n\r\n // Keep the original variable declaration\r\n node.init = {\r\n type: 'VariableDeclaration',\r\n kind: node.init.kind,\r\n declarations: [\r\n {\r\n type: 'VariableDeclarator',\r\n id: {\r\n type: 'Identifier',\r\n name: originalName,\r\n },\r\n init: decl.init,\r\n },\r\n ],\r\n };\r\n\r\n // Transform any identifiers in the init expression\r\n if (decl.init) {\r\n walk.recursive(decl.init, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n if (!scopeManager.isLoopVariable(node.name)) {\r\n scopeManager.pushScope('for');\r\n transformIdentifier(node, state);\r\n scopeManager.popScope();\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n scopeManager.pushScope('for');\r\n transformMemberExpression(node, '', scopeManager);\r\n scopeManager.popScope();\r\n },\r\n });\r\n }\r\n }\r\n\r\n // Transform test condition\r\n if (node.test) {\r\n walk.recursive(node.test, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n if (!scopeManager.isLoopVariable(node.name) && !node.computed) {\r\n scopeManager.pushScope('for');\r\n transformIdentifier(node, state);\r\n if (node.type === 'Identifier') {\r\n node.computed = true;\r\n addArrayAccess(node, state);\r\n }\r\n scopeManager.popScope();\r\n }\r\n },\r\n MemberExpression(node: any) {\r\n scopeManager.pushScope('for');\r\n transformMemberExpression(node, '', scopeManager);\r\n scopeManager.popScope();\r\n },\r\n });\r\n }\r\n\r\n // Transform update expression\r\n if (node.update) {\r\n walk.recursive(node.update, scopeManager, {\r\n Identifier(node: any, state: ScopeManager) {\r\n if (!scopeManager.isLoopVariable(node.name)) {\r\n scopeManager.pushScope('for');\r\n transformIdentifier(node, state);\r\n scopeManager.popScope();\r\n }\r\n },\r\n });\r\n }\r\n\r\n // Transform the loop body\r\n scopeManager.pushScope('for');\r\n c(node.body, scopeManager);\r\n scopeManager.popScope();\r\n}\r\n\r\nfunction transformExpression(node: any, scopeManager: ScopeManager): void {\r\n walk.recursive(node, scopeManager, {\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, '', scopeManager);\r\n },\r\n\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n\r\n //context bound variable was not transformed, but we still need to ensure array annotation\r\n const isIfStatement = scopeManager.getCurrentScopeType() === 'if';\r\n const isContextBound = scopeManager.isContextBound(node.name) && !scopeManager.isRootParam(node.name);\r\n if (isContextBound && isIfStatement) {\r\n addArrayAccess(node, state);\r\n }\r\n },\r\n });\r\n}\r\n\r\nfunction transformIfStatement(node: any, scopeManager: ScopeManager, c: any): void {\r\n // Transform the test condition\r\n if (node.test) {\r\n scopeManager.pushScope('if');\r\n transformExpression(node.test, scopeManager);\r\n scopeManager.popScope();\r\n }\r\n\r\n // Transform the if branch (consequent)\r\n scopeManager.pushScope('if');\r\n c(node.consequent, scopeManager);\r\n scopeManager.popScope();\r\n\r\n // Transform the else branch (alternate) if it exists\r\n if (node.alternate) {\r\n scopeManager.pushScope('els');\r\n c(node.alternate, scopeManager);\r\n scopeManager.popScope();\r\n }\r\n}\r\n\r\nfunction transformNestedArrowFunctions(ast: any): void {\r\n walk.recursive(ast, null, {\r\n VariableDeclaration(node: any, state: any, c: any) {\r\n // Only process if we have declarations\r\n if (node.declarations && node.declarations.length > 0) {\r\n const declarations = node.declarations;\r\n\r\n // Check each declaration\r\n declarations.forEach((decl: any) => {\r\n // Check if it's an arrow function\r\n if (decl.init && decl.init.type === 'ArrowFunctionExpression') {\r\n const isRootFunction = decl.init.start === 0;\r\n\r\n if (!isRootFunction) {\r\n // Create a function declaration\r\n const functionDeclaration = {\r\n type: 'FunctionDeclaration',\r\n id: decl.id, // Use the variable name as function name\r\n params: decl.init.params,\r\n body:\r\n decl.init.body.type === 'BlockStatement'\r\n ? decl.init.body\r\n : {\r\n type: 'BlockStatement',\r\n body: [\r\n {\r\n type: 'ReturnStatement',\r\n argument: decl.init.body,\r\n },\r\n ],\r\n },\r\n async: decl.init.async,\r\n generator: false,\r\n };\r\n\r\n // Replace the entire VariableDeclaration with the FunctionDeclaration\r\n Object.assign(node, functionDeclaration);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Continue traversing\r\n if (node.body && node.body.body) {\r\n node.body.body.forEach((stmt: any) => c(stmt, state));\r\n }\r\n },\r\n });\r\n}\r\n\r\n// Add new function for pre-processing context-bound variables\r\nfunction preProcessContextBoundVars(ast: any, scopeManager: ScopeManager): void {\r\n walk.simple(ast, {\r\n VariableDeclaration(node: any) {\r\n node.declarations.forEach((decl: any) => {\r\n // Check for context property assignments\r\n const isContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object &&\r\n (decl.init.object.name === 'context' || decl.init.object.name === CONTEXT_NAME || decl.init.object.name === 'context2');\r\n\r\n const isSubContextProperty =\r\n decl.init &&\r\n decl.init.type === 'MemberExpression' &&\r\n decl.init.object?.object &&\r\n (decl.init.object.object.name === 'context' ||\r\n decl.init.object.object.name === CONTEXT_NAME ||\r\n decl.init.object.object.name === 'context2');\r\n\r\n if (isContextProperty || isSubContextProperty) {\r\n if (decl.id.name) {\r\n scopeManager.addContextBoundVar(decl.id.name);\r\n }\r\n if (decl.id.properties) {\r\n decl.id.properties.forEach((property: any) => {\r\n if (property.key.name) {\r\n scopeManager.addContextBoundVar(property.key.name);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n },\r\n });\r\n}\r\n\r\nexport function transpile(fn: string | Function): Function {\r\n let code = typeof fn === 'function' ? fn.toString() : fn;\r\n\r\n // Parse the code into an AST\r\n const ast = acorn.parse(code.trim(), {\r\n ecmaVersion: 'latest',\r\n sourceType: 'module',\r\n });\r\n\r\n // Pre-process: Transform all nested arrow functions\r\n transformNestedArrowFunctions(ast);\r\n\r\n const scopeManager = new ScopeManager();\r\n let originalParamName: string;\r\n\r\n // Pre-process: Identify context-bound variables\r\n preProcessContextBoundVars(ast, scopeManager);\r\n\r\n // First pass: register all function declarations and their parameters\r\n walk.simple(ast, {\r\n FunctionDeclaration(node: any) {\r\n transformFunctionDeclaration(node, scopeManager);\r\n },\r\n ArrowFunctionExpression(node: any) {\r\n const isRootFunction = node.start === 0;\r\n if (isRootFunction && node.params && node.params.length > 0) {\r\n originalParamName = node.params[0].name;\r\n node.params[0].name = CONTEXT_NAME;\r\n }\r\n transformArrowFunctionParams(node, scopeManager, isRootFunction);\r\n },\r\n VariableDeclaration(node: any) {\r\n node.declarations.forEach((decl: any) => {\r\n if (decl.id.type === 'ArrayPattern') {\r\n // Generate a unique temporary variable name\r\n const tempVarName = scopeManager.generateTempVar();\r\n\r\n // Create a new variable declaration for the temporary variable\r\n const tempVarDecl = {\r\n type: 'VariableDeclaration',\r\n kind: node.kind,\r\n declarations: [\r\n {\r\n type: 'VariableDeclarator',\r\n id: {\r\n type: 'Identifier',\r\n name: tempVarName,\r\n },\r\n init: decl.init,\r\n },\r\n ],\r\n };\r\n\r\n decl.id.elements?.forEach((element: any) => {\r\n if (element.type === 'Identifier') {\r\n scopeManager.addArrayPatternElement(element.name);\r\n }\r\n });\r\n // Create individual variable declarations for each destructured element\r\n const individualDecls = decl.id.elements.map((element: any, index: number) => ({\r\n type: 'VariableDeclaration',\r\n kind: node.kind,\r\n declarations: [\r\n {\r\n type: 'VariableDeclarator',\r\n id: element,\r\n init: {\r\n type: 'MemberExpression',\r\n object: {\r\n type: 'Identifier',\r\n name: tempVarName,\r\n },\r\n property: {\r\n type: 'Literal',\r\n value: index,\r\n },\r\n computed: true,\r\n },\r\n },\r\n ],\r\n }));\r\n\r\n // Replace the original declaration with the new declarations\r\n Object.assign(node, {\r\n type: 'BlockStatement',\r\n body: [tempVarDecl, ...individualDecls],\r\n });\r\n }\r\n });\r\n },\r\n ForStatement(node: any) {\r\n // Skip registering loop variables in the first pass\r\n },\r\n });\r\n\r\n // Second pass: transform the code\r\n walk.recursive(ast, scopeManager, {\r\n BlockStatement(node: any, state: ScopeManager, c: any) {\r\n //state.pushScope('block');\r\n node.body.forEach((stmt: any) => c(stmt, state));\r\n //state.popScope();\r\n },\r\n ReturnStatement(node: any, state: ScopeManager) {\r\n transformReturnStatement(node, state);\r\n },\r\n VariableDeclaration(node: any, state: ScopeManager) {\r\n transformVariableDeclaration(node, state);\r\n },\r\n Identifier(node: any, state: ScopeManager) {\r\n transformIdentifier(node, state);\r\n },\r\n CallExpression(node: any, state: ScopeManager) {\r\n transformCallExpression(node, state);\r\n },\r\n MemberExpression(node: any) {\r\n transformMemberExpression(node, originalParamName, scopeManager);\r\n },\r\n AssignmentExpression(node: any, state: ScopeManager) {\r\n transformAssignmentExpression(node, state);\r\n },\r\n FunctionDeclaration(node: any, state: ScopeManager) {\r\n // Skip transformation since we already handled it in the first pass\r\n return;\r\n },\r\n ForStatement(node: any, state: ScopeManager, c: any) {\r\n transformForStatement(node, state, c);\r\n },\r\n IfStatement(node: any, state: ScopeManager, c: any) {\r\n transformIfStatement(node, state, c);\r\n },\r\n });\r\n\r\n const transformedCode = astring.generate(ast);\r\n\r\n const _wraperFunction = new Function('', `return ${transformedCode}`);\r\n return _wraperFunction(this);\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\nimport { transpile } from '@pinets/transpiler/index';\r\nimport { Context } from '@pinets/index';\r\n\r\nimport { IProvider } from '@pinets/marketData/IProvider';\r\n\r\n/**\r\n * This class is a wrapper for the Pine Script language, it allows to run Pine Script code in a JavaScript environment\r\n */\r\nexport class PineTS {\r\n public data: any = [];\r\n\r\n //#region [Pine Script built-in variables]\r\n public open: any = [];\r\n public high: any = [];\r\n public low: any = [];\r\n public close: any = [];\r\n public volume: any = [];\r\n public hl2: any = [];\r\n public hlc3: any = [];\r\n public ohlc4: any = [];\r\n public openTime: any = [];\r\n public closeTime: any = [];\r\n //#endregion\r\n\r\n //#region run context\r\n private _periods: number = undefined;\r\n public get periods() {\r\n return this._periods;\r\n }\r\n //#endregion\r\n\r\n //public fn: Function;\r\n\r\n private _readyPromise: Promise<any> = null;\r\n\r\n private _ready = false;\r\n\r\n constructor(\r\n private source: IProvider | any[],\r\n private tickerId?: string,\r\n private timeframe?: string,\r\n private limit?: number,\r\n private sDate?: number,\r\n private eDate?: number\r\n ) {\r\n this._readyPromise = new Promise((resolve) => {\r\n this.loadMarketData(source, tickerId, timeframe, limit, sDate, eDate).then((data) => {\r\n const marketData = data.reverse();\r\n\r\n this._periods = marketData.length;\r\n this.data = marketData;\r\n\r\n const _open = marketData.map((d) => d.open);\r\n const _close = marketData.map((d) => d.close);\r\n const _high = marketData.map((d) => d.high);\r\n const _low = marketData.map((d) => d.low);\r\n const _volume = marketData.map((d) => d.volume);\r\n const _hlc3 = marketData.map((d) => (d.high + d.low + d.close) / 3);\r\n const _hl2 = marketData.map((d) => (d.high + d.low) / 2);\r\n const _ohlc4 = marketData.map((d) => (d.high + d.low + d.open + d.close) / 4);\r\n const _openTime = marketData.map((d) => d.openTime);\r\n const _closeTime = marketData.map((d) => d.closeTime);\r\n\r\n this.open = _open;\r\n this.close = _close;\r\n this.high = _high;\r\n this.low = _low;\r\n this.volume = _volume;\r\n this.hl2 = _hl2;\r\n this.hlc3 = _hlc3;\r\n this.ohlc4 = _ohlc4;\r\n this.openTime = _openTime;\r\n this.closeTime = _closeTime;\r\n\r\n this._ready = true;\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n private async loadMarketData(source: IProvider | any[], tickerId: string, timeframe: string, limit?: number, sDate?: number, eDate?: number) {\r\n if (Array.isArray(source)) {\r\n return source;\r\n } else {\r\n return (source as IProvider).getMarketData(tickerId, timeframe, limit, sDate, eDate);\r\n }\r\n }\r\n\r\n public async ready() {\r\n if (this._ready) return true;\r\n if (!this._readyPromise) throw new Error('PineTS is not ready');\r\n return this._readyPromise;\r\n }\r\n\r\n public async run(pineTSCode: Function | String, n?: number, useTACache?: boolean): Promise<Context> {\r\n await this.ready();\r\n if (!n) n = this._periods;\r\n\r\n const context = new Context({\r\n marketData: this.data,\r\n source: this.source,\r\n tickerId: this.tickerId,\r\n timeframe: this.timeframe,\r\n limit: this.limit,\r\n sDate: this.sDate,\r\n eDate: this.eDate,\r\n });\r\n\r\n context.pineTSCode = pineTSCode;\r\n context.useTACache = useTACache;\r\n const transformer = transpile.bind(this);\r\n let transpiledFn = transformer(pineTSCode);\r\n\r\n //console.log('>>> transformedFn: ', transformedFn.toString());\r\n\r\n const contextVarNames = ['const', 'var', 'let', 'params'];\r\n for (let i = this._periods - n, idx = n - 1; i < this._periods; i++, idx--) {\r\n context.idx = i;\r\n\r\n context.data.close = this.close.slice(idx);\r\n context.data.open = this.open.slice(idx);\r\n context.data.high = this.high.slice(idx);\r\n context.data.low = this.low.slice(idx);\r\n context.data.volume = this.volume.slice(idx);\r\n context.data.hl2 = this.hl2.slice(idx);\r\n context.data.hlc3 = this.hlc3.slice(idx);\r\n context.data.ohlc4 = this.ohlc4.slice(idx);\r\n context.data.openTime = this.openTime.slice(idx);\r\n context.data.closeTime = this.closeTime.slice(idx);\r\n\r\n const result = await transpiledFn(context);\r\n\r\n //collect results\r\n if (typeof result === 'object') {\r\n if (typeof context.result !== 'object') {\r\n context.result = {};\r\n }\r\n for (let key in result) {\r\n if (context.result[key] === undefined) {\r\n context.result[key] = [];\r\n }\r\n\r\n const val = Array.isArray(result[key]) ? result[key][0] : result[key];\r\n context.result[key].push(val);\r\n }\r\n } else {\r\n if (!Array.isArray(context.result)) {\r\n context.result = [];\r\n }\r\n\r\n context.result.push(result);\r\n }\r\n\r\n //shift context\r\n for (let ctxVarName of contextVarNames) {\r\n for (let key in context[ctxVarName]) {\r\n if (Array.isArray(context[ctxVarName][key])) {\r\n const val = context[ctxVarName][key][0];\r\n\r\n context[ctxVarName][key].unshift(val);\r\n } else {\r\n //console.error('>>> invalid entry format, should be an array: ', ctxVarName, key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return context;\r\n }\r\n}\r\n\r\nexport default PineTS;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nexport class Core {\r\n public color = {\r\n param: (source, index = 0) => {\r\n if (Array.isArray(source)) {\r\n return source[index];\r\n }\r\n return source;\r\n },\r\n rgb: (r: number, g: number, b: number, a?: number) => (a ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`),\r\n new: (color: string, a?: number) => {\r\n // Handle hexadecimal colors\r\n if (color && color.startsWith('#')) {\r\n // Remove # and convert to RGB\r\n const hex = color.slice(1);\r\n const r = parseInt(hex.slice(0, 2), 16);\r\n const g = parseInt(hex.slice(2, 4), 16);\r\n const b = parseInt(hex.slice(4, 6), 16);\r\n\r\n return a ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\r\n }\r\n // Handle existing RGB format\r\n return a ? `rgba(${color}, ${a})` : color;\r\n },\r\n white: 'white',\r\n lime: 'lime',\r\n green: 'green',\r\n red: 'red',\r\n maroon: 'maroon',\r\n\r\n black: 'black',\r\n\r\n gray: 'gray',\r\n blue: 'blue',\r\n };\r\n constructor(private context: any) {}\r\n private extractPlotOptions(options: PlotCharOptions) {\r\n const _options: any = {};\r\n for (let key in options) {\r\n if (Array.isArray(options[key])) {\r\n _options[key] = options[key][0];\r\n } else {\r\n _options[key] = options[key];\r\n }\r\n }\r\n return _options;\r\n }\r\n indicator(title: string, shorttitle?: string, options?: IndicatorOptions) {\r\n //Just for compatibility, we don't need to do anything here\r\n }\r\n\r\n //in the current implementation, plot functions are only used to collect data for the plots array and map it to the market data\r\n plotchar(series: number[], title: string, options: PlotCharOptions) {\r\n if (!this.context.plots[title]) {\r\n this.context.plots[title] = { data: [], options: this.extractPlotOptions(options), title };\r\n }\r\n\r\n this.context.plots[title].data.push({\r\n time: this.context.marketData[this.context.marketData.length - this.context.idx - 1].openTime,\r\n value: series[0],\r\n options: { ...this.extractPlotOptions(options), style: 'char' },\r\n });\r\n }\r\n\r\n plot(series: any, title: string, options: PlotOptions) {\r\n if (!this.context.plots[title]) {\r\n this.context.plots[title] = { data: [], options: this.extractPlotOptions(options), title };\r\n }\r\n\r\n this.context.plots[title].data.push({\r\n time: this.context.marketData[this.context.marketData.length - this.context.idx - 1].openTime,\r\n value: series[0],\r\n options: this.extractPlotOptions(options),\r\n });\r\n }\r\n\r\n na(series: any) {\r\n return Array.isArray(series) ? isNaN(series[0]) : isNaN(series);\r\n }\r\n nz(series: any, replacement: number = 0) {\r\n const val = Array.isArray(series) ? series[0] : series;\r\n const rep = Array.isArray(series) ? replacement[0] : replacement;\r\n return isNaN(val) ? rep : val;\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\ntype InputOptions =\r\n | {\r\n title?: string;\r\n group?: string;\r\n }\r\n | any;\r\n\r\n//in the current implementation we just declare the input interfaces for compatibility\r\n// in future versions this might be used for visualization\r\nexport class Input {\r\n constructor(private context: any) {}\r\n\r\n param(source, index = 0) {\r\n if (Array.isArray(source)) {\r\n return [source[index]];\r\n }\r\n return [source];\r\n }\r\n\r\n any(value: any, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n int(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n float(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n bool(value: boolean, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n\r\n string(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n timeframe(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n time(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n price(value: number, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n session(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n source(value: any, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n symbol(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n text_area(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n enum(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n color(value: string, { title, group }: InputOptions = {}) {\r\n return Array.isArray(value) ? value[0] : value;\r\n }\r\n}\r\n\r\nexport default Input;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\nexport class PineMath {\r\n private _cache = {};\r\n constructor(private context: any) {}\r\n\r\n param(source, index, name?: string) {\r\n if (!this.context.params[name]) this.context.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.context.params[name] = source.slice(index);\r\n this.context.params[name].length = source.length; //ensure length is correct\r\n return this.context.params[name];\r\n }\r\n this.context.params[name] = source.slice(0);\r\n return this.context.params[name];\r\n } else {\r\n this.context.params[name][0] = source;\r\n return this.context.params[name];\r\n }\r\n //return [source];\r\n }\r\n\r\n abs(source: number[]) {\r\n return Math.abs(source[0]);\r\n }\r\n pow(source: number[], power: number[]) {\r\n return Math.pow(source[0], power[0]);\r\n }\r\n sqrt(source: number[]) {\r\n return Math.sqrt(source[0]);\r\n }\r\n log(source: number[]) {\r\n return Math.log(source[0]);\r\n }\r\n ln(source: number[]) {\r\n return Math.log(source[0]);\r\n }\r\n exp(source: number[]) {\r\n return Math.exp(source[0]);\r\n }\r\n floor(source: number[]) {\r\n return Math.floor(source[0]);\r\n }\r\n ceil(source: number[]) {\r\n return Math.ceil(source[0]);\r\n }\r\n round(source: number[]) {\r\n return Math.round(source[0]);\r\n }\r\n random() {\r\n return Math.random();\r\n }\r\n max(...source: number[]) {\r\n const arg = source.map((e) => (Array.isArray(e) ? e[0] : e));\r\n return Math.max(...arg);\r\n }\r\n min(...source: number[]) {\r\n const arg = source.map((e) => (Array.isArray(e) ? e[0] : e));\r\n return Math.min(...arg);\r\n }\r\n\r\n //sum of last n values\r\n sum(source: number[], length: number) {\r\n const len = Array.isArray(length) ? length[0] : length;\r\n if (Array.isArray(source)) {\r\n return source.slice(0, len).reduce((a, b) => a + b, 0);\r\n }\r\n return source;\r\n }\r\n\r\n sin(source: number[]) {\r\n return Math.sin(source[0]);\r\n }\r\n cos(source: number[]) {\r\n return Math.cos(source[0]);\r\n }\r\n tan(source: number[]) {\r\n return Math.tan(source[0]);\r\n }\r\n\r\n acos(source: number[]) {\r\n return Math.acos(source[0]);\r\n }\r\n asin(source: number[]) {\r\n return Math.asin(source[0]);\r\n }\r\n atan(source: number[]) {\r\n return Math.atan(source[0]);\r\n }\r\n\r\n avg(...sources: number[][]) {\r\n const args = sources.map((e) => (Array.isArray(e) ? e[0] : e));\r\n\r\n return (\r\n args.reduce((a, b) => {\r\n const aVal = Array.isArray(a) ? a[0] : a;\r\n const bVal = Array.isArray(b) ? b[0] : b;\r\n return aVal + bVal;\r\n }, 0) / args.length\r\n );\r\n }\r\n}\r\n\r\nexport default PineMath;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nimport { PineTS, Provider } from '@pinets/index';\r\n//Pine Script Timeframes\r\nconst TIMEFRAMES = ['1', '3', '5', '15', '30', '45', '60', '120', '180', '240', 'D', 'W', 'M'];\r\n\r\nexport class PineRequest {\r\n private _cache = {};\r\n constructor(private context: any) {}\r\n\r\n param(source, index, name?: string) {\r\n if (!this.context.params[name]) this.context.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.context.params[name] = source.slice(index);\r\n } else {\r\n this.context.params[name] = source.slice(0);\r\n }\r\n return [source[index], name];\r\n } else {\r\n this.context.params[name][0] = source;\r\n return [source, name];\r\n }\r\n }\r\n\r\n async security(\r\n symbol: any,\r\n timeframe: any,\r\n expression: any,\r\n gaps = false,\r\n lookahead = false,\r\n ignore_invalid_symbol = false,\r\n currency = null,\r\n calc_bars_count = null\r\n ) {\r\n const _symbol = symbol[0];\r\n const _timeframe = timeframe[0];\r\n const _expression = expression[0];\r\n const _expression_name = expression[1];\r\n\r\n const ctxTimeframeIdx = TIMEFRAMES.indexOf(this.context.timeframe);\r\n const reqTimeframeIdx = TIMEFRAMES.indexOf(_timeframe);\r\n\r\n if (ctxTimeframeIdx == -1 || reqTimeframeIdx == -1) {\r\n throw new Error('Invalid timeframe');\r\n }\r\n if (ctxTimeframeIdx > reqTimeframeIdx) {\r\n throw new Error('Only higher timeframes are supported for now');\r\n }\r\n\r\n if (ctxTimeframeIdx === reqTimeframeIdx) {\r\n return _expression;\r\n }\r\n\r\n const myOpenTime = this.context.data.openTime[0];\r\n const myCloseTime = this.context.data.closeTime[0];\r\n\r\n if (this.context.cache[_expression_name]) {\r\n const secContext = this.context.cache[_expression_name];\r\n const secContextIdx = this._findSecContextIdx(myOpenTime, myCloseTime, secContext.data.openTime, secContext.data.closeTime, lookahead);\r\n return secContextIdx == -1 ? NaN : secContext.params[_expression_name][secContextIdx];\r\n }\r\n\r\n const pineTS = new PineTS(this.context.source, _symbol, _timeframe, this.context.limit || 1000, this.context.sDate, this.context.eDate);\r\n\r\n const secContext = await pineTS.run(this.context.pineTSCode);\r\n\r\n this.context.cache[_expression_name] = secContext;\r\n\r\n const secContextIdx = this._findSecContextIdx(myOpenTime, myCloseTime, secContext.data.openTime, secContext.data.closeTime, lookahead);\r\n return secContextIdx == -1 ? NaN : secContext.params[_expression_name][secContextIdx];\r\n }\r\n\r\n private _findSecContextIdx(myOpenTime: number, myCloseTime: number, openTime: number[], closeTime: number[], lookahead = false) {\r\n for (let i = 0; i < openTime.length; i++) {\r\n if (openTime[i] <= myOpenTime && myCloseTime <= closeTime[i]) {\r\n return i + (lookahead ? 1 : 2); //lookahead_on +1 lookahead_off +2\r\n }\r\n }\r\n return -1;\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\nexport class TechnicalAnalysis {\r\n constructor(private context: any) {}\r\n\r\n public get tr() {\r\n const val = this.context.math.max(\r\n this.context.data.high[0] - this.context.data.low[0],\r\n this.context.math.abs(this.context.data.high[0] - this.context.data.close[1]),\r\n this.context.math.abs(this.context.data.low[0] - this.context.data.close[1])\r\n );\r\n return val;\r\n }\r\n\r\n param(source, index, name?: string) {\r\n if (!this.context.params[name]) this.context.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.context.params[name] = source.slice(index);\r\n this.context.params[name].length = source.length; //ensure length is correct\r\n return this.context.params[name];\r\n }\r\n this.context.params[name] = source.slice(0);\r\n return this.context.params[name];\r\n } else {\r\n this.context.params[name][0] = source;\r\n return this.context.params[name];\r\n }\r\n //return [source];\r\n }\r\n\r\n ema(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = ema(source.slice(0).reverse(), period);\r\n\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n sma(source, _period, _cacheId?) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const reversedSource = source.slice(0).reverse();\r\n\r\n if (this.context.useTACache && _cacheId) {\r\n // Initialize cache if it doesn't exist\r\n if (!this.context.cache[_cacheId]) {\r\n this.context.cache[_cacheId] = {};\r\n }\r\n\r\n const cacheObj = this.context.cache[_cacheId];\r\n\r\n // Check if we can use cache\r\n if (cacheObj) {\r\n const result = sma_cache(reversedSource, period, cacheObj);\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n }\r\n\r\n // Calculate from scratch if no cache or cache conditions not met\r\n const result = sma(reversedSource, period);\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n vwma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const volume = this.context.data.volume;\r\n\r\n const result = vwma(source.slice(0).reverse(), volume.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n wma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = wma(source.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n hma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = hma(source.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n rma(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = rma(source.slice(0).reverse(), period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n change(source, _length = 1) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = change(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n rsi(source, _period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const result = rsi(source.slice(0).reverse(), period);\r\n //result.reverse();\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n atr(_period) {\r\n const period = Array.isArray(_period) ? _period[0] : _period;\r\n const high = this.context.data.high.slice().reverse();\r\n const low = this.context.data.low.slice().reverse();\r\n const close = this.context.data.close.slice().reverse();\r\n const result = atr(high, low, close, period);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n mom(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = mom(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n roc(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = roc(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n dev(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = dev(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n variance(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = variance(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n highest(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = highest(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n lowest(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = lowest(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n median(source, _length) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const result = median(source.slice(0).reverse(), length);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n stdev(source, _length, _bias = true) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const bias = Array.isArray(_bias) ? _bias[0] : _bias;\r\n const result = stdev(source.slice(0).reverse(), length, bias);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n linreg(source, _length, _offset) {\r\n const length = Array.isArray(_length) ? _length[0] : _length;\r\n const offset = Array.isArray(_offset) ? _offset[0] : _offset;\r\n const result = linreg(source.slice(0).reverse(), length, offset);\r\n //return result.reverse();\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n supertrend(_factor, _atrPeriod) {\r\n const factor = Array.isArray(_factor) ? _factor[0] : _factor;\r\n const atrPeriod = Array.isArray(_atrPeriod) ? _atrPeriod[0] : _atrPeriod;\r\n\r\n const high = this.context.data.high.slice().reverse();\r\n const low = this.context.data.low.slice().reverse();\r\n const close = this.context.data.close.slice().reverse();\r\n const [supertrend, direction] = calculateSupertrend(high, low, close, factor, atrPeriod);\r\n\r\n const idx = this.context.idx;\r\n return [[this.context.precision(supertrend[idx]), direction[idx]]];\r\n }\r\n\r\n crossover(source1, source2) {\r\n // Get current values\r\n const current1 = Array.isArray(source1) ? source1[0] : source1;\r\n const current2 = Array.isArray(source2) ? source2[0] : source2;\r\n\r\n // Get previous values\r\n const prev1 = Array.isArray(source1) ? source1[1] : this.context.data.series[source1][1];\r\n const prev2 = Array.isArray(source2) ? source2[1] : this.context.data.series[source2][1];\r\n\r\n // Check if source1 crossed above source2\r\n return prev1 < prev2 && current1 > current2;\r\n }\r\n\r\n crossunder(source1, source2) {\r\n // Get current values\r\n const current1 = Array.isArray(source1) ? source1[0] : source1;\r\n const current2 = Array.isArray(source2) ? source2[0] : source2;\r\n\r\n // Get previous values\r\n const prev1 = Array.isArray(source1) ? source1[1] : this.context.data.series[source1][1];\r\n const prev2 = Array.isArray(source2) ? source2[1] : this.context.data.series[source2][1];\r\n\r\n // Check if source1 crossed below source2\r\n return prev1 > prev2 && current1 < current2;\r\n }\r\n\r\n pivothigh(source, _leftbars, _rightbars) {\r\n //handle the case where source is not provided\r\n if (_rightbars == undefined) {\r\n _rightbars = _leftbars;\r\n _leftbars = source;\r\n\r\n //by default source is\r\n source = this.context.data.high;\r\n }\r\n const leftbars = Array.isArray(_leftbars) ? _leftbars[0] : _leftbars;\r\n const rightbars = Array.isArray(_rightbars) ? _rightbars[0] : _rightbars;\r\n\r\n const result = pivothigh(source.slice(0).reverse(), leftbars, rightbars);\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n\r\n pivotlow(source, _leftbars, _rightbars) {\r\n //handle the case where source is not provided\r\n if (_rightbars == undefined) {\r\n _rightbars = _leftbars;\r\n _leftbars = source;\r\n\r\n //by default source is\r\n source = this.context.data.low;\r\n }\r\n\r\n const leftbars = Array.isArray(_leftbars) ? _leftbars[0] : _leftbars;\r\n const rightbars = Array.isArray(_rightbars) ? _rightbars[0] : _rightbars;\r\n\r\n const result = pivotlow(source.slice(0).reverse(), leftbars, rightbars);\r\n const idx = this.context.idx;\r\n return this.context.precision(result[idx]);\r\n }\r\n}\r\n\r\n//Here we did not use indicatorts implementation because it uses a different smoothing method which gives slightly different results that pine script\r\nfunction atr(high: number[], low: number[], close: number[], period: number): number[] {\r\n // Calculate True Range first\r\n const tr = new Array(high.length);\r\n tr[0] = high[0] - low[0]; // First TR is just the first day's high-low range\r\n\r\n // Calculate subsequent TR values\r\n for (let i = 1; i < high.length; i++) {\r\n const hl = high[i] - low[i];\r\n const hc = Math.abs(high[i] - close[i - 1]);\r\n const lc = Math.abs(low[i] - close[i - 1]);\r\n tr[i] = Math.max(hl, hc, lc);\r\n }\r\n\r\n // Calculate ATR using RMA (Rolling Moving Average)\r\n const atr = new Array(high.length).fill(NaN);\r\n let sum = 0;\r\n\r\n // First ATR is SMA of first 'period' TR values\r\n for (let i = 0; i < period; i++) {\r\n sum += tr[i];\r\n }\r\n atr[period - 1] = sum / period;\r\n\r\n // Calculate subsequent ATR values using the RMA formula:\r\n // RMA = (previous RMA * (period-1) + current TR) / period\r\n for (let i = period; i < tr.length; i++) {\r\n atr[i] = (atr[i - 1] * (period - 1) + tr[i]) / period;\r\n }\r\n\r\n return atr;\r\n}\r\n\r\nfunction ema(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const alpha = 2 / (period + 1);\r\n\r\n // Initialize EMA with SMA for first value\r\n let sum = 0;\r\n for (let i = 0; i < period; i++) {\r\n sum += source[i] || 0; //handle NaN values\r\n }\r\n result[period - 1] = sum / period;\r\n\r\n // Calculate EMA for remaining values\r\n for (let i = period; i < source.length; i++) {\r\n result[i] = source[i] * alpha + result[i - 1] * (1 - alpha);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction rsi(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const gains = new Array(source.length).fill(0);\r\n const losses = new Array(source.length).fill(0);\r\n\r\n // Calculate initial gains and losses\r\n for (let i = 1; i < source.length; i++) {\r\n const diff = source[i] - source[i - 1];\r\n gains[i] = diff > 0 ? diff : 0;\r\n losses[i] = diff < 0 ? -diff : 0;\r\n }\r\n\r\n // Calculate first RSI using simple averages\r\n let avgGain = 0;\r\n let avgLoss = 0;\r\n for (let i = 1; i <= period; i++) {\r\n avgGain += gains[i];\r\n avgLoss += losses[i];\r\n }\r\n avgGain /= period;\r\n avgLoss /= period;\r\n\r\n // Calculate first RSI\r\n result[period] = avgLoss === 0 ? 100 : 100 - 100 / (1 + avgGain / avgLoss);\r\n\r\n // Calculate subsequent RSIs using the smoothed averages\r\n for (let i = period + 1; i < source.length; i++) {\r\n avgGain = (avgGain * (period - 1) + gains[i]) / period;\r\n avgLoss = (avgLoss * (period - 1) + losses[i]) / period;\r\n result[i] = avgLoss === 0 ? 100 : 100 - 100 / (1 + avgGain / avgLoss);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction rma(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const alpha = 1 / period;\r\n\r\n // Initialize RMA with SMA for first value\r\n let sum = 0;\r\n for (let i = 0; i < period; i++) {\r\n sum += source[i] || 0; // Handle NaN values\r\n }\r\n result[period - 1] = sum / period;\r\n\r\n // Calculate RMA for remaining values\r\n for (let i = period; i < source.length; i++) {\r\n const currentValue = source[i] || 0; // Handle NaN values\r\n result[i] = currentValue * alpha + result[i - 1] * (1 - alpha);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction sma_cache(\r\n source: number[],\r\n period: number,\r\n cacheObj: {\r\n previousSum?: number;\r\n lastProcessedIndex?: number;\r\n previousResult?: number[];\r\n }\r\n) {\r\n const result = cacheObj.previousResult || new Array(source.length).fill(NaN);\r\n const lastProcessedIndex = cacheObj.lastProcessedIndex || -1;\r\n let previousSum = cacheObj.previousSum || 0;\r\n\r\n if (lastProcessedIndex === -1 || source.length !== lastProcessedIndex + 1) {\r\n // Initialize cache or handle reset/different length source\r\n previousSum = 0;\r\n for (let i = 0; i < period; i++) {\r\n previousSum += source[i] || 0;\r\n }\r\n result[period - 1] = previousSum / period;\r\n\r\n // Fill initial values with NaN for cache initialization as well\r\n for (let i = 0; i < period - 1; i++) {\r\n result[i] = NaN;\r\n }\r\n\r\n for (let i = period; i < source.length; i++) {\r\n previousSum = previousSum - (source[i - period] || 0) + (source[i] || 0);\r\n result[i] = previousSum / period;\r\n }\r\n } else if (source.length === lastProcessedIndex + 2) {\r\n // Optimized calculation for new element\r\n const newIndex = source.length - 1;\r\n previousSum = previousSum - (source[newIndex - period] || 0) + (source[newIndex] || 0);\r\n result[newIndex] = previousSum / period;\r\n } else {\r\n // Fallback to full calculation if cache is inconsistent or source length changed unexpectedly\r\n return sma(source, period);\r\n }\r\n\r\n cacheObj.previousSum = previousSum;\r\n cacheObj.lastProcessedIndex = source.length - 1;\r\n cacheObj.previousResult = result;\r\n\r\n return result;\r\n}\r\n\r\nfunction sma(source: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n // First (period-1) elements will remain NaN\r\n for (let i = period - 1; i < source.length; i++) {\r\n let sum = 0;\r\n for (let j = 0; j < period; j++) {\r\n sum += source[i - j] || 0;\r\n }\r\n result[i] = sum / period;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction vwma(source: number[], volume: number[], period: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = period - 1; i < source.length; i++) {\r\n let sumVol = 0;\r\n let sumVolPrice = 0;\r\n\r\n for (let j = 0; j < period; j++) {\r\n sumVol += volume[i - j];\r\n sumVolPrice += source[i - j] * volume[i - j];\r\n }\r\n\r\n result[i] = sumVolPrice / sumVol;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction hma(source, period) {\r\n const halfPeriod = Math.floor(period / 2);\r\n const wma1 = wma(source, halfPeriod);\r\n const wma2 = wma(source, period);\r\n const rawHma = wma1.map((value, index) => 2 * value - wma2[index]);\r\n const sqrtPeriod = Math.floor(Math.sqrt(period));\r\n const result = wma(rawHma, sqrtPeriod);\r\n return result;\r\n}\r\n\r\nfunction wma(source, period) {\r\n const result = new Array(source.length);\r\n\r\n for (let i = period - 1; i < source.length; i++) {\r\n let numerator = 0;\r\n let denominator = 0;\r\n\r\n for (let j = 0; j < period; j++) {\r\n numerator += source[i - j] * (period - j);\r\n denominator += period - j;\r\n }\r\n\r\n result[i] = numerator / denominator;\r\n }\r\n\r\n // Fill initial values with NaN or null\r\n for (let i = 0; i < period - 1; i++) {\r\n result[i] = NaN;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction change(source: number[], length: number = 1): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length; i < source.length; i++) {\r\n result[i] = source[i] - source[i - length];\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// DEMA = 2 * EMA(source, length) - EMA(EMA(source, length), length)\r\nfunction dema(source: number[], length: number): number[] {\r\n const ema1 = ema(source, length);\r\n const ema2 = ema(ema1, length);\r\n return source.map((_, i) => 2 * ema1[i] - ema2[i]);\r\n}\r\n\r\n// TEMA = 3 * EMA1 - 3 * EMA2 + EMA3\r\nfunction tema(source: number[], length: number): number[] {\r\n const ema1 = ema(source, length);\r\n const ema2 = ema(ema1, length);\r\n const ema3 = ema(ema2, length);\r\n return source.map((_, i) => 3 * ema1[i] - 3 * ema2[i] + ema3[i]);\r\n}\r\n\r\n// Momentum = current price - price 'length' periods ago\r\nfunction mom(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n for (let i = length; i < source.length; i++) {\r\n result[i] = source[i] - source[i - length];\r\n }\r\n return result;\r\n}\r\n\r\nfunction roc(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n for (let i = length; i < source.length; i++) {\r\n result[i] = ((source[i] - source[i - length]) / source[i - length]) * 100;\r\n }\r\n return result;\r\n}\r\n\r\nfunction dev(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n // Calculate SMA first\r\n const smaValues = sma(source, length);\r\n\r\n // Calculate deviation\r\n for (let i = length - 1; i < source.length; i++) {\r\n let sumDeviation = 0;\r\n\r\n // Sum up absolute deviations from SMA\r\n for (let j = 0; j < length; j++) {\r\n sumDeviation += Math.abs(source[i - j] - smaValues[i]);\r\n }\r\n\r\n // Calculate average deviation\r\n result[i] = sumDeviation / length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction variance(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let sum = 0;\r\n let sumSquares = 0;\r\n\r\n for (let j = 0; j < length; j++) {\r\n sum += source[i - j];\r\n sumSquares += source[i - j] * source[i - j];\r\n }\r\n\r\n const mean = sum / length;\r\n result[i] = sumSquares / length - mean * mean;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Highest value for a given length\r\nfunction highest(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let max = -Infinity;\r\n for (let j = 0; j < length; j++) {\r\n const value = source[i - j];\r\n if (isNaN(value)) {\r\n max = max === -Infinity ? NaN : max;\r\n } else {\r\n max = Math.max(max, value);\r\n }\r\n }\r\n result[i] = max;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Lowest value for a given length\r\nfunction lowest(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let min = Infinity;\r\n for (let j = 0; j < length; j++) {\r\n const value = source[i - j];\r\n if (isNaN(value) || value === undefined) {\r\n min = min === Infinity ? NaN : min;\r\n } else {\r\n min = Math.min(min, value);\r\n }\r\n }\r\n result[i] = min;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Median over a given length\r\nfunction median(source: number[], length: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n const window = source.slice(i - length + 1, i + 1);\r\n const sorted = window.slice().sort((a, b) => a - b);\r\n const mid = Math.floor(length / 2);\r\n\r\n result[i] = length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction stdev(source: number[], length: number, biased: boolean = true): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n const smaValues = sma(source, length);\r\n\r\n for (let i = length - 1; i < source.length; i++) {\r\n let sum = 0;\r\n for (let j = 0; j < length; j++) {\r\n sum += Math.pow(source[i - j] - smaValues[i], 2);\r\n }\r\n // If biased is true, divide by n. If false (unbiased), divide by (n-1)\r\n const divisor = biased ? length : length - 1;\r\n result[i] = Math.sqrt(sum / divisor);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction linreg(source, length, offset) {\r\n const size = source.length;\r\n const output = new Array(size).fill(NaN);\r\n\r\n // We can only compute a regression starting at index = (length - 1)\r\n // because we need 'length' bars of history to look back.\r\n for (let i = length - 1; i < size; i++) {\r\n let sumX = 0;\r\n let sumY = 0;\r\n let sumXY = 0;\r\n let sumXX = 0;\r\n const n = length;\r\n\r\n // The oldest bar in the window => x=0 => source[i - length + 1]\r\n // The newest bar in the window => x=length - 1 => source[i]\r\n //\r\n // j goes from 0..(length-1), so:\r\n // x = j\r\n // y = source[i - length + 1 + j]\r\n for (let j = 0; j < length; j++) {\r\n const x = j;\r\n const y = source[i - length + 1 + j];\r\n sumX += x;\r\n sumY += y;\r\n sumXY += x * y;\r\n sumXX += x * x;\r\n }\r\n\r\n // slope = (n*sum(xy) - sum(x)*sum(y)) / (n*sum(x^2) - (sum(x))^2)\r\n const denominator = n * sumXX - sumX * sumX;\r\n if (denominator === 0) {\r\n // Edge case: all x the same? Should never happen when length>1,\r\n // but just in case we handle divide-by-zero\r\n output[i] = NaN;\r\n continue;\r\n }\r\n const slope = (n * sumXY - sumX * sumY) / denominator;\r\n\r\n // intercept = (sum(y) - slope * sum(x)) / n\r\n const intercept = (sumY - slope * sumX) / n;\r\n\r\n // Pine formula => intercept + slope*(length - 1 - offset)\r\n const linRegValue = intercept + slope * (length - 1 - offset);\r\n\r\n output[i] = linRegValue;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction calculateSupertrend(high: number[], low: number[], close: number[], factor: number, atrPeriod: number): [number[], number[]] {\r\n const length = high.length;\r\n const supertrend = new Array(length).fill(NaN);\r\n const direction = new Array(length).fill(0);\r\n\r\n // Calculate ATR\r\n const atrValues = atr(high, low, close, atrPeriod);\r\n\r\n // Calculate basic upper and lower bands\r\n const upperBand = new Array(length).fill(NaN);\r\n const lowerBand = new Array(length).fill(NaN);\r\n\r\n // Calculate initial bands\r\n for (let i = 0; i < length; i++) {\r\n const hl2 = (high[i] + low[i]) / 2;\r\n const atrValue = atrValues[i];\r\n\r\n if (!isNaN(atrValue)) {\r\n upperBand[i] = hl2 + factor * atrValue;\r\n lowerBand[i] = hl2 - factor * atrValue;\r\n }\r\n }\r\n\r\n // Initialize first valid values\r\n let prevUpperBand = upperBand[atrPeriod];\r\n let prevLowerBand = lowerBand[atrPeriod];\r\n let prevSupertrend = close[atrPeriod] <= prevUpperBand ? prevUpperBand : prevLowerBand;\r\n let prevDirection = close[atrPeriod] <= prevUpperBand ? -1 : 1;\r\n\r\n supertrend[atrPeriod] = prevSupertrend;\r\n direction[atrPeriod] = prevDirection;\r\n\r\n // Calculate Supertrend\r\n for (let i = atrPeriod + 1; i < length; i++) {\r\n // Calculate upper band\r\n let currentUpperBand = upperBand[i];\r\n if (currentUpperBand < prevUpperBand || close[i - 1] > prevUpperBand) {\r\n upperBand[i] = currentUpperBand;\r\n } else {\r\n upperBand[i] = prevUpperBand;\r\n }\r\n\r\n // Calculate lower band\r\n let currentLowerBand = lowerBand[i];\r\n if (currentLowerBand > prevLowerBand || close[i - 1] < prevLowerBand) {\r\n lowerBand[i] = currentLowerBand;\r\n } else {\r\n lowerBand[i] = prevLowerBand;\r\n }\r\n\r\n // Set trend direction and value\r\n if (prevSupertrend === prevUpperBand) {\r\n if (close[i] > upperBand[i]) {\r\n direction[i] = 1;\r\n supertrend[i] = lowerBand[i];\r\n } else {\r\n direction[i] = -1;\r\n supertrend[i] = upperBand[i];\r\n }\r\n } else {\r\n if (close[i] < lowerBand[i]) {\r\n direction[i] = -1;\r\n supertrend[i] = upperBand[i];\r\n } else {\r\n direction[i] = 1;\r\n supertrend[i] = lowerBand[i];\r\n }\r\n }\r\n\r\n // Update previous values\r\n prevUpperBand = upperBand[i];\r\n prevLowerBand = lowerBand[i];\r\n prevSupertrend = supertrend[i];\r\n }\r\n\r\n return [supertrend, direction];\r\n}\r\n\r\n// Pivot high identifies a local high point\r\nfunction pivothigh(source: number[], leftbars: number, rightbars: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n // We need at least leftbars + rightbars + 1 (for the center point) values\r\n for (let i = leftbars + rightbars; i < source.length; i++) {\r\n const pivot = source[i - rightbars];\r\n let isPivot = true;\r\n\r\n // Check if the pivot is higher than all bars to the left within leftbars range\r\n for (let j = 1; j <= leftbars; j++) {\r\n if (source[i - rightbars - j] >= pivot) {\r\n isPivot = false;\r\n break;\r\n }\r\n }\r\n\r\n // Check if the pivot is higher than all bars to the right within rightbars range\r\n if (isPivot) {\r\n for (let j = 1; j <= rightbars; j++) {\r\n if (source[i - rightbars + j] >= pivot) {\r\n isPivot = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If this is a pivot point, set its value, otherwise keep NaN\r\n if (isPivot) {\r\n result[i] = pivot;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Pivot low identifies a local low point\r\nfunction pivotlow(source: number[], leftbars: number, rightbars: number): number[] {\r\n const result = new Array(source.length).fill(NaN);\r\n\r\n // We need at least leftbars + rightbars + 1 (for the center point) values\r\n for (let i = leftbars + rightbars; i < source.length; i++) {\r\n const pivot = source[i - rightbars];\r\n let isPivot = true;\r\n\r\n // Check if the pivot is lower than all bars to the left within leftbars range\r\n for (let j = 1; j <= leftbars; j++) {\r\n if (source[i - rightbars - j] <= pivot) {\r\n isPivot = false;\r\n break;\r\n }\r\n }\r\n\r\n // Check if the pivot is lower than all bars to the right within rightbars range\r\n if (isPivot) {\r\n for (let j = 1; j <= rightbars; j++) {\r\n if (source[i - rightbars + j] <= pivot) {\r\n isPivot = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If this is a pivot point, set its value, otherwise keep NaN\r\n if (isPivot) {\r\n result[i] = pivot;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport default TechnicalAnalysis;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nclass PineArrayObject {\r\n constructor(public array: any) {}\r\n}\r\n\r\n/**\r\n * This class implements an array port of PineScript's array functions.\r\n */\r\nexport class PineArray {\r\n private _cache = {};\r\n constructor(private context: any) {}\r\n\r\n param(source, index = 0) {\r\n if (Array.isArray(source)) {\r\n return source[index];\r\n }\r\n return source;\r\n }\r\n\r\n /**\r\n * This function simulates PineScript's array.get() function\r\n * @param id - the array object to get the value from\r\n * @param index - the index of the value to get\r\n * @returns the value at the given index\r\n */\r\n public get(id: PineArrayObject, index: number) {\r\n return id.array[index];\r\n }\r\n\r\n public set(id: PineArrayObject, index: number, value: any) {\r\n id.array[index] = value;\r\n }\r\n\r\n public push(id: PineArrayObject, value: any) {\r\n id.array.push(value);\r\n }\r\n\r\n // Basic statistics\r\n public sum(id: PineArrayObject): number {\r\n return id.array.reduce((a: number, b: any) => a + (isNaN(b) ? 0 : b), 0);\r\n }\r\n\r\n public avg(id: PineArrayObject): number {\r\n return this.sum(id) / id.array.length;\r\n }\r\n\r\n public min(id: PineArrayObject, nth: number = 0): number {\r\n const sorted = [...id.array].sort((a, b) => a - b);\r\n return sorted[nth] ?? this.context.NA;\r\n }\r\n\r\n public max(id: PineArrayObject, nth: number = 0): number {\r\n const sorted = [...id.array].sort((a, b) => b - a);\r\n return sorted[nth] ?? this.context.NA;\r\n }\r\n\r\n public size(id: PineArrayObject): number {\r\n return id.array.length;\r\n }\r\n\r\n // Array creation\r\n\r\n public new_bool(size: number, initial_value: boolean = false): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n public new_float(size: number, initial_value: number = NaN): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n public new_int(size: number, initial_value: number = 0): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(Math.round(initial_value)));\r\n }\r\n\r\n public new_string(size: number, initial_value: string = ''): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n public new<T>(size: number, initial_value: T): PineArrayObject {\r\n return new PineArrayObject(Array(size).fill(initial_value));\r\n }\r\n\r\n // Array operations\r\n public slice(id: PineArrayObject, start: number, end?: number): PineArrayObject {\r\n const adjustedEnd = end !== undefined ? end + 1 : undefined;\r\n return new PineArrayObject(id.array.slice(start, adjustedEnd));\r\n }\r\n\r\n public reverse(id: PineArrayObject): void {\r\n id.array.reverse();\r\n }\r\n\r\n public includes(id: PineArrayObject, value: any): boolean {\r\n return id.array.includes(value);\r\n }\r\n\r\n public indexof(id: PineArrayObject, value: any): number {\r\n return id.array.indexOf(value);\r\n }\r\n\r\n public lastindexof(id: PineArrayObject, value: any): number {\r\n return id.array.lastIndexOf(value);\r\n }\r\n\r\n // More complex functions\r\n public stdev(id: PineArrayObject, biased: boolean = true): number {\r\n const mean = this.avg(id);\r\n const deviations = id.array.map((x: number) => Math.pow(x - mean, 2));\r\n const divisor = biased ? id.array.length : id.array.length - 1;\r\n return Math.sqrt(this.sum(new PineArrayObject(deviations)) / divisor);\r\n }\r\n\r\n public variance(id: PineArrayObject, biased: boolean = true): number {\r\n const mean = this.avg(id);\r\n const deviations = id.array.map((x: number) => Math.pow(x - mean, 2));\r\n const divisor = biased ? id.array.length : id.array.length - 1;\r\n return this.sum(new PineArrayObject(deviations)) / divisor;\r\n }\r\n\r\n public covariance(arr1: PineArrayObject, arr2: PineArrayObject, biased: boolean = true): number {\r\n if (arr1.array.length !== arr2.array.length || arr1.array.length < 2) return NaN;\r\n const divisor = biased ? arr1.array.length : arr1.array.length - 1;\r\n\r\n const mean1 = this.avg(arr1);\r\n const mean2 = this.avg(arr2);\r\n let sum = 0;\r\n\r\n for (let i = 0; i < arr1.array.length; i++) {\r\n sum += (arr1.array[i] - mean1) * (arr2.array[i] - mean2);\r\n }\r\n\r\n return sum / divisor;\r\n }\r\n\r\n // Additional utility methods\r\n public first(id: PineArrayObject): any {\r\n return id.array.length > 0 ? id.array[0] : this.context.NA;\r\n }\r\n\r\n public last(id: PineArrayObject): any {\r\n return id.array.length > 0 ? id.array[id.array.length - 1] : this.context.NA;\r\n }\r\n\r\n public clear(id: PineArrayObject): void {\r\n id.array.length = 0;\r\n }\r\n\r\n public join(id: PineArrayObject, separator: string = ','): string {\r\n return id.array.join(separator);\r\n }\r\n\r\n /** Array Manipulation Functions */\r\n public abs(id: PineArrayObject): PineArrayObject {\r\n return new PineArrayObject(id.array.map((val) => Math.abs(val)));\r\n }\r\n\r\n public concat(id: PineArrayObject, other: PineArrayObject): PineArrayObject {\r\n id.array.push(...other.array);\r\n return id;\r\n }\r\n\r\n public copy(id: PineArrayObject): PineArrayObject {\r\n return new PineArrayObject([...id.array]);\r\n }\r\n\r\n public every(id: PineArrayObject, callback: (val: any) => boolean): boolean {\r\n return id.array.every(callback);\r\n }\r\n\r\n public fill(id: PineArrayObject, value: any, start: number = 0, end?: number): void {\r\n const length = id.array.length;\r\n const adjustedEnd = end !== undefined ? Math.min(end, length) : length;\r\n\r\n for (let i = start; i < adjustedEnd; i++) {\r\n id.array[i] = value;\r\n }\r\n }\r\n\r\n public from(source: any[]): PineArrayObject {\r\n return new PineArrayObject([...source]);\r\n }\r\n\r\n public insert(id: PineArrayObject, index: number, value: any): void {\r\n id.array.splice(index, 0, value);\r\n }\r\n\r\n public pop(id: PineArrayObject): any {\r\n return id.array.pop();\r\n }\r\n\r\n public range(id: PineArrayObject): number {\r\n return this.max(id) - this.min(id);\r\n }\r\n\r\n public remove(id: PineArrayObject, index: number): any {\r\n if (index >= 0 && index < id.array.length) {\r\n return id.array.splice(index, 1)[0];\r\n }\r\n return this.context.NA;\r\n }\r\n\r\n public shift(id: PineArrayObject): any {\r\n return id.array.shift();\r\n }\r\n\r\n public sort(id: PineArrayObject, order: 'asc' | 'desc' = 'asc'): void {\r\n id.array.sort((a, b) => (order === 'asc' ? a - b : b - a));\r\n }\r\n\r\n public sort_indices(id: PineArrayObject, comparator?: (a: any, b: any) => number): PineArrayObject {\r\n const indices = id.array.map((_, index) => index);\r\n indices.sort((a, b) => {\r\n const valA = id.array[a];\r\n const valB = id.array[b];\r\n return comparator ? comparator(valA, valB) : valA - valB;\r\n });\r\n return new PineArrayObject(indices);\r\n }\r\n\r\n public standardize(id: PineArrayObject): PineArrayObject {\r\n const mean = this.avg(id);\r\n const stdev = this.stdev(id);\r\n\r\n if (stdev === 0) {\r\n return new PineArrayObject(id.array.map(() => 0));\r\n }\r\n\r\n return new PineArrayObject(id.array.map((x) => (x - mean) / stdev));\r\n }\r\n\r\n public unshift(id: PineArrayObject, value: any): void {\r\n id.array.unshift(value);\r\n }\r\n\r\n public some(id: PineArrayObject, callback: (val: any) => boolean): boolean {\r\n return id.array.some(callback);\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n// Copyright (C) 2025 Ala-eddine KADDOURI\r\n\r\nimport { Core } from '@pinets/namespaces/Core';\r\nimport { Input } from '@pinets/namespaces/Input';\r\nimport PineMath from '@pinets/namespaces/PineMath';\r\nimport { PineRequest } from '@pinets/namespaces/PineRequest';\r\nimport TechnicalAnalysis from '@pinets/namespaces/TechnicalAnalysis';\r\nimport { PineArray } from './namespaces/PineArray';\r\nimport { IProvider } from './marketData/IProvider';\r\n\r\nexport class Context {\r\n public data: any = {\r\n open: [],\r\n high: [],\r\n low: [],\r\n close: [],\r\n volume: [],\r\n hl2: [],\r\n hlc3: [],\r\n ohlc4: [],\r\n };\r\n public cache: any = {};\r\n public useTACache = false;\r\n\r\n public NA: any = NaN;\r\n\r\n public math: PineMath;\r\n public ta: TechnicalAnalysis;\r\n public input: Input;\r\n public request: PineRequest;\r\n public array: PineArray;\r\n public core: any;\r\n public lang: any;\r\n\r\n public idx: number = 0;\r\n\r\n public params: any = {};\r\n public const: any = {};\r\n public var: any = {};\r\n public let: any = {};\r\n\r\n public result: any = undefined;\r\n public plots: any = {};\r\n\r\n public marketData: any;\r\n public source: IProvider | any[];\r\n public tickerId: string;\r\n public timeframe: string = '';\r\n public limit: number;\r\n public sDate: number;\r\n public eDate: number;\r\n\r\n public pineTSCode: Function | String;\r\n\r\n constructor({\r\n marketData,\r\n source,\r\n tickerId,\r\n timeframe,\r\n limit,\r\n sDate,\r\n eDate,\r\n }: {\r\n marketData: any;\r\n source: IProvider | any[];\r\n tickerId?: string;\r\n timeframe?: string;\r\n limit?: number;\r\n sDate?: number;\r\n eDate?: number;\r\n }) {\r\n this.marketData = marketData;\r\n this.source = source;\r\n this.tickerId = tickerId;\r\n this.timeframe = timeframe;\r\n this.limit = limit;\r\n this.sDate = sDate;\r\n this.eDate = eDate;\r\n\r\n this.math = new PineMath(this);\r\n\r\n this.ta = new TechnicalAnalysis(this);\r\n this.input = new Input(this);\r\n this.request = new PineRequest(this);\r\n\r\n this.array = new PineArray(this);\r\n const core = new Core(this);\r\n this.core = {\r\n plotchar: core.plotchar.bind(core),\r\n na: core.na.bind(core),\r\n color: core.color,\r\n plot: core.plot.bind(core),\r\n nz: core.nz.bind(core),\r\n };\r\n }\r\n\r\n //#region [Runtime functions] ===========================\r\n\r\n /**\r\n * this function is used to initialize the target variable with the source array\r\n * this array will represent a time series and its values will be shifted at runtime in order to mimic Pine script behavior\r\n * @param trg - the target variable name : used internally to maintain the series in the execution context\r\n * @param src - the source data, can be an array or a single value\r\n * @param idx - the index of the source array, used to get a sub-series of the source data\r\n * @returns the target array\r\n */\r\n init(trg, src: any, idx: number = 0) {\r\n if (!trg) {\r\n if (Array.isArray(src)) {\r\n trg = [this.precision(src[src.length - this.idx - 1 + idx])];\r\n } else {\r\n trg = [this.precision(src)];\r\n }\r\n } else {\r\n if (!Array.isArray(src) || Array.isArray(src[0])) {\r\n //here we check that this is not a 2D array, in which case we consider it an array of values\r\n //this is important for handling TA functions that return tupples or series of tuples\r\n trg[0] = Array.isArray(src?.[0]) ? src[0] : this.precision(src);\r\n } else {\r\n trg[0] = this.precision(src[src.length - this.idx - 1 + idx]);\r\n }\r\n }\r\n\r\n return trg;\r\n }\r\n\r\n /**\r\n * this function is used to set the floating point precision of a number\r\n * by default it is set to 10 decimals which is the same as pine script\r\n * @param n - the number to be precision\r\n * @param decimals - the number of decimals to precision to\r\n\r\n * @returns the precision number\r\n */\r\n precision(n: number, decimals: number = 10) {\r\n if (typeof n !== 'number' || isNaN(n)) return n;\r\n return Number(n.toFixed(decimals));\r\n }\r\n\r\n /**\r\n * This function is used to apply special transformation to internal PineTS parameters and handle them as time-series\r\n * @param source - the source data, can be an array or a single value\r\n * @param index - the index of the source array, used to get a sub-series of the source data\r\n * @param name - the name of the parameter, used as a unique identifier in the current execution context, this allows us to properly handle the param as a series\r\n * @returns the current value of the param\r\n */\r\n param(source, index, name?: string) {\r\n if (typeof source === 'string') return source;\r\n if (!Array.isArray(source) && typeof source === 'object') return source;\r\n\r\n if (!this.params[name]) this.params[name] = [];\r\n if (Array.isArray(source)) {\r\n if (index) {\r\n this.params[name] = source.slice(index);\r\n this.params[name].length = source.length; //ensure length is correct\r\n return this.params[name];\r\n }\r\n this.params[name] = source.slice(0);\r\n return this.params[name];\r\n } else {\r\n this.params[name][0] = source;\r\n return this.params[name];\r\n }\r\n }\r\n //#endregion\r\n}\r\nexport default Context;\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nconst BINANCE_API_URL = 'https://api.binance.com/api/v3'; //'https://testnet.binance.vision/api/v3';\r\nconst timeframe_to_binance = {\r\n '1': '1m', // 1 minute\r\n '3': '3m', // 3 minutes\r\n '5': '5m', // 5 minutes\r\n '15': '15m', // 15 minutes\r\n '30': '30m', // 30 minutes\r\n '45': null, // 45 minutes (not directly supported by Binance, needs custom handling)\r\n '60': '1h', // 1 hour\r\n '120': '2h', // 2 hours\r\n '180': null, // 3 hours (not directly supported by Binance, needs custom handling)\r\n '240': '4h', // 4 hours\r\n '4H': '4h', // 4 hours\r\n '1D': '1d', // 1 day\r\n D: '1d', // 1 day\r\n '1W': '1w', // 1 week\r\n W: '1w', // 1 week\r\n '1M': '1M', // 1 month\r\n M: '1M', // 1 month\r\n};\r\n\r\nimport { IProvider } from '@pinets/marketData/IProvider';\r\n\r\ninterface CacheEntry<T> {\r\n data: T;\r\n timestamp: number;\r\n}\r\n\r\nclass CacheManager<T> {\r\n private cache: Map<string, CacheEntry<T>>;\r\n private readonly cacheDuration: number;\r\n\r\n constructor(cacheDuration: number = 5 * 60 * 1000) {\r\n // Default 5 minutes\r\n this.cache = new Map();\r\n this.cacheDuration = cacheDuration;\r\n }\r\n\r\n private generateKey(params: Record<string, any>): string {\r\n return Object.entries(params)\r\n .filter(([_, value]) => value !== undefined)\r\n .map(([key, value]) => `${key}:${value}`)\r\n .join('|');\r\n }\r\n\r\n get(params: Record<string, any>): T | null {\r\n const key = this.generateKey(params);\r\n const cached = this.cache.get(key);\r\n\r\n if (!cached) return null;\r\n\r\n if (Date.now() - cached.timestamp > this.cacheDuration) {\r\n this.cache.delete(key);\r\n return null;\r\n }\r\n\r\n return cached.data;\r\n }\r\n\r\n set(params: Record<string, any>, data: T): void {\r\n const key = this.generateKey(params);\r\n this.cache.set(key, {\r\n data,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear();\r\n }\r\n\r\n // Optional: method to remove expired entries\r\n cleanup(): void {\r\n const now = Date.now();\r\n for (const [key, entry] of this.cache.entries()) {\r\n if (now - entry.timestamp > this.cacheDuration) {\r\n this.cache.delete(key);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class BinanceProvider implements IProvider {\r\n private cacheManager: CacheManager<any[]>;\r\n\r\n constructor() {\r\n this.cacheManager = new CacheManager(5 * 60 * 1000); // 5 minutes cache duration\r\n }\r\n\r\n async getMarketDataInterval(tickerId: string, timeframe: string, sDate: number, eDate: number): Promise<any> {\r\n try {\r\n const interval = timeframe_to_binance[timeframe.toUpperCase()];\r\n if (!interval) {\r\n console.error(`Unsupported timeframe: ${timeframe}`);\r\n return [];\r\n }\r\n\r\n const timeframeDurations = {\r\n '1m': 60 * 1000,\r\n '3m': 3 * 60 * 1000,\r\n '5m': 5 * 60 * 1000,\r\n '15m': 15 * 60 * 1000,\r\n '30m': 30 * 60 * 1000,\r\n '1h': 60 * 60 * 1000,\r\n '2h': 2 * 60 * 60 * 1000,\r\n '4h': 4 * 60 * 60 * 1000,\r\n '1d': 24 * 60 * 60 * 1000,\r\n '1w': 7 * 24 * 60 * 60 * 1000,\r\n '1M': 30 * 24 * 60 * 60 * 1000,\r\n };\r\n\r\n let allData = [];\r\n let currentStart = sDate;\r\n const endTime = eDate;\r\n const intervalDuration = timeframeDurations[interval];\r\n\r\n if (!intervalDuration) {\r\n console.error(`Duration not defined for interval: ${interval}`);\r\n return [];\r\n }\r\n\r\n while (currentStart < endTime) {\r\n const chunkEnd = Math.min(currentStart + 1000 * intervalDuration, endTime);\r\n\r\n const data = await this.getMarketData(\r\n tickerId,\r\n timeframe,\r\n 1000, // Max allowed by Binance\r\n currentStart,\r\n chunkEnd\r\n );\r\n\r\n if (data.length === 0) break;\r\n\r\n allData = allData.concat(data);\r\n\r\n // CORRECTED LINE: Remove *1000 since closeTime is already in milliseconds\r\n currentStart = data[data.length - 1].closeTime + 1;\r\n\r\n // Keep this safety check to exit when we get less than full page\r\n if (data.length < 1000) break;\r\n }\r\n\r\n return allData;\r\n } catch (error) {\r\n console.error('Error in getMarketDataInterval:', error);\r\n return [];\r\n }\r\n }\r\n //TODO : allow querying more than 1000 klines\r\n //TODO : immplement cache\r\n async getMarketData(tickerId: string, timeframe: string, limit?: number, sDate?: number, eDate?: number): Promise<any> {\r\n try {\r\n // Check cache first\r\n const cacheParams = { tickerId, timeframe, limit, sDate, eDate };\r\n const cachedData = this.cacheManager.get(cacheParams);\r\n if (cachedData) {\r\n console.log('cache hit', tickerId, timeframe, limit, sDate, eDate);\r\n return cachedData;\r\n }\r\n\r\n const interval = timeframe_to_binance[timeframe.toUpperCase()];\r\n if (!interval) {\r\n console.error(`Unsupported timeframe: ${timeframe}`);\r\n return [];\r\n }\r\n let url = `${BINANCE_API_URL}/klines?symbol=${tickerId}&interval=${interval}`;\r\n if (!limit && sDate && eDate) {\r\n return this.getMarketDataInterval(tickerId, timeframe, sDate, eDate);\r\n }\r\n\r\n //example https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1m&limit=1000\r\n if (limit) {\r\n url += `&limit=${limit}`;\r\n }\r\n\r\n if (sDate) {\r\n url += `&startTime=${sDate}`;\r\n }\r\n if (eDate) {\r\n url += `&endTime=${eDate}`;\r\n }\r\n\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const result = await response.json();\r\n const data = result.map((item) => {\r\n return {\r\n openTime: parseInt(item[0]),\r\n open: parseFloat(item[1]),\r\n high: parseFloat(item[2]),\r\n low: parseFloat(item[3]),\r\n close: parseFloat(item[4]),\r\n volume: parseFloat(item[5]),\r\n closeTime: parseInt(item[6]),\r\n quoteAssetVolume: parseFloat(item[7]),\r\n numberOfTrades: parseInt(item[8]),\r\n takerBuyBaseAssetVolume: parseFloat(item[9]),\r\n takerBuyQuoteAssetVolume: parseFloat(item[10]),\r\n ignore: item[11],\r\n };\r\n });\r\n\r\n // Cache the results\r\n this.cacheManager.set(cacheParams, data);\r\n\r\n return data;\r\n } catch (error) {\r\n console.error('Error in binance.klines:', error);\r\n return [];\r\n }\r\n }\r\n}\r\n","// SPDX-License-Identifier: AGPL-3.0-only\r\n\r\nimport { BinanceProvider } from './Binance/BinanceProvider.class';\r\n\r\nexport const Provider = {\r\n Binance: new BinanceProvider(),\r\n //TODO : add other providers (polygon, etc.)\r\n};\r\n"],"names":["__publicField","scopedName","kind","node","scopeManager","namespace","state","secContext","secContextIdx","result","idx","atr"],"mappings":"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"}
|