@alphacharts/script 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-p2HPP8yl.js","names":["NAMESPACES","lex","MEMBER_CONSTS","t","ENUMS","SIGS","FLOAT_S","BUILTIN_SERIES","LineMap","text","i","lo","hi","mid","offset","Reporter","max","message","span","severity","to","a","b","ScriptError","kind","formatDiagnostic","d","TYPE_NAMES","ASSIGN_OPS","MAX_DEPTH","Bail","Parser","rep","k","x","tok","what","body","depth","n","op","value","end","names","nm","init","e","type","name","start","cond","then","els","by","c","t2","args","close","out","v","items","parse","src","DEFAULT_LIMITS","MAX_HISTORY","UNITS","TIMEFRAME","parseTimeframe","m","tf","feedKey","symbol","timeframe","feedsOf","deps","key","f","alignFor","intervalMs","ERR","combineDom","doms","NEEDS_RANK","QRANK","qmax","q","isNum","simple","show","Scope","parent","s","collectAssigned","slug","Checker","limits","msg","prog","bg","p","sym","top","handleOf","ity","ty","want","fix","mutable","vt","why","ct","saved","lit","step","trips","b2","from","sig","full","TA_TR","pos","named","where","needSimple","sv","o","ns","cv","near","mode","bound","st","ret","arg","r","title","short","scale","dflt","base","tr","withTransparency","u","style","width","shift","down","ce","color","colorWhen","other","field","ls","idx","bb","plot","shape","loc","xt","last","within","dv","label","spec","SOURCE_NAMES","mn","mx","opts","h","hex","transp","check","NaN_","truthy","hash","generate","inputDefs","colorInputs","plan","inputDefault","columns","plots","colOfPlot","sp","when","offsetOf","col","Builder","source","g","fn","inner","fld","memo","exec","fk","cols","level","absolute","run","stmts","S","ctx","vars","slot","maxIt","make","int","min","hit","lim","len","sample","def","mult","given","srcCol","inp","prm","resolveParams","gv","bad","ta","tb","eq","y","cur","prev","ca","cb","pa","pb","over","under","a0","a1","compile","BLOCKED_GLOBALS","lockdown","blocked","missing","scope","refuse","proto","yieldNow","CHUNK","errorInfo","withBridge","target","mirror","serveScripts","engines","cancelled","inflight","gone","data","values","post","err","StudyEngine","feeds","feedBytes","feedRows","feedCols","rows","bytes","mib","cap","buffers","describeJoin"],"sources":["../src/diag.ts","../src/parser.ts","../src/limits.ts","../src/feeds.ts","../src/check.ts","../src/codegen.ts","../src/compile.ts","../src/sandbox.ts"],"sourcesContent":["// Diagnostics: every problem in a script is a Diagnostic with a source range,\n// reported as line:column (1-based) and as character offsets for editors.\n\nexport interface Diagnostic {\n severity: \"error\" | \"warning\";\n message: string;\n /** 1-based. */\n line: number;\n column: number;\n endLine: number;\n endColumn: number;\n /** Character offsets into the source, `to` exclusive. */\n from: number;\n to: number;\n}\n\nexport interface Span {\n from: number;\n to: number;\n}\n\n/** Converts offsets to line:column for one source text. */\nexport class LineMap {\n private readonly starts: number[] = [0];\n constructor(readonly text: string) {\n for (let i = 0; i < text.length; i++) if (text.charCodeAt(i) === 10) this.starts.push(i + 1);\n }\n at(offset: number): { line: number; column: number } {\n let lo = 0, hi = this.starts.length - 1;\n while (lo < hi) {\n const mid = (lo + hi + 1) >>> 1;\n if (this.starts[mid]! <= offset) lo = mid;\n else hi = mid - 1;\n }\n return { line: lo + 1, column: offset - this.starts[lo]! + 1 };\n }\n}\n\n/** Collects diagnostics; stops accepting errors after `max` (the last one says so). */\nexport class Reporter {\n readonly list: Diagnostic[] = [];\n private readonly map: LineMap;\n private errors = 0;\n constructor(text: string, private readonly max = 50) {\n this.map = new LineMap(text);\n }\n get errorCount(): number {\n return this.errors;\n }\n error(message: string, span: Span): void {\n this.add(\"error\", message, span);\n }\n warn(message: string, span: Span): void {\n this.add(\"warning\", message, span);\n }\n private add(severity: \"error\" | \"warning\", message: string, span: Span): void {\n if (this.errors > this.max) return;\n if (severity === \"error\") {\n this.errors++;\n if (this.errors > this.max) message = `too many errors; stopped after ${this.max}`;\n }\n const to = Math.max(span.to, span.from);\n const a = this.map.at(span.from), b = this.map.at(to);\n this.list.push({ severity, message, line: a.line, column: a.column, endLine: b.line, endColumn: b.column, from: span.from, to });\n }\n}\n\n/** Thrown for failures found while building or running a script, with the range of the offending code. */\nexport class ScriptError extends Error {\n constructor(message: string, readonly span: Span | null = null, readonly kind: \"build\" | \"runtime\" | \"budget\" = \"build\") {\n super(message);\n this.name = \"ScriptError\";\n }\n}\n\nexport function formatDiagnostic(d: Diagnostic): string {\n return `${d.line}:${d.column}: ${d.severity}: ${d.message}`;\n}\n","// Recursive-descent parser with error recovery: a bad statement is reported and\n// skipped to the end of its line (and its indented block), so one run reports\n// every independent mistake.\n//\n// Grammar (the same text is in the README):\n//\n// program = { statement } ;\n// statement = declaration | tuple | assignment | if | for | call NEWLINE ;\n// declaration = [ \"var\" ] [ type ] IDENT \"=\" expr NEWLINE ;\n// tuple = \"[\" IDENT { \",\" IDENT } \"]\" \"=\" expr NEWLINE ;\n// assignment = IDENT ( \":=\" | \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"%=\" ) expr NEWLINE ;\n// if = \"if\" expr block [ \"else\" ( if | block ) ] ;\n// for = \"for\" IDENT \"=\" expr \"to\" expr [ \"by\" expr ] block ;\n// block = NEWLINE INDENT statement { statement } DEDENT ;\n// expr = ternary ;\n// ternary = or [ \"?\" expr \":\" expr ] ;\n// or = and { \"or\" and } ; and = not { \"and\" not } ; not = \"not\" not | cmp ;\n// cmp = add [ ( \"==\" | \"!=\" | \"<\" | \"<=\" | \">\" | \">=\" ) add ] ;\n// add = mul { ( \"+\" | \"-\" ) mul } ; mul = unary { ( \"*\" | \"/\" | \"%\" ) unary } ;\n// unary = ( \"-\" | \"+\" ) unary | postfix ;\n// postfix = primary { \"(\" [ args ] \")\" | \"[\" expr \"]\" | \".\" IDENT } ;\n// args = arg { \",\" arg } ; arg = [ IDENT \"=\" ] expr ;\n// primary = NUMBER | STRING | COLOR | \"true\" | \"false\" | IDENT | \"(\" expr \")\" | \"[\" [ expr { \",\" expr } ] \"]\" ;\n\nimport type { Reporter, Span } from \"./diag.js\";\nimport type { Arg, Expr, Program, Stmt, TypeName } from \"./ast.js\";\nimport { lex, type Token } from \"./lexer.js\";\n\nconst TYPE_NAMES: ReadonlySet<string> = new Set([\"int\", \"float\", \"bool\", \"string\", \"color\"]);\nconst ASSIGN_OPS: ReadonlySet<string> = new Set([\":=\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\"]);\n/** Nesting deeper than this is refused (a recursion guard, not a language limit anyone meets). */\nconst MAX_DEPTH = 100;\n\nclass Bail extends Error {}\n\nclass Parser {\n private p = 0;\n private depth = 0;\n constructor(private readonly t: Token[], private readonly rep: Reporter) {}\n\n private get tok(): Token { return this.t[this.p]!; }\n private kind(): string { return this.t[this.p]!.kind; }\n private peek(k = 1): Token { return this.t[Math.min(this.p + k, this.t.length - 1)]!; }\n private next(): Token { const x = this.tok; if (x.kind !== \"eof\") this.p++; return x; }\n private isOp(text: string, tok = this.tok): boolean { return tok.kind === \"op\" && tok.text === text; }\n private isKw(text: string, tok = this.tok): boolean { return tok.kind === \"kw\" && tok.text === text; }\n private fail(message: string, span: Span = this.tok): never {\n this.rep.error(message, span.from === span.to && this.tok.kind === \"newline\" ? { from: span.from, to: span.from } : span);\n throw new Bail();\n }\n private expectOp(text: string, what = `\"${text}\"`): Token {\n if (!this.isOp(text)) this.fail(`expected ${what}, found ${this.describe()}`);\n return this.next();\n }\n private describe(t = this.tok): string {\n switch (t.kind) {\n case \"eof\": return \"end of input\";\n case \"newline\": return \"end of line\";\n case \"indent\": return \"an unexpected indent\";\n case \"dedent\": return \"end of block\";\n case \"str\": return \"a string\";\n case \"num\": return `\"${t.text}\"`;\n default: return `\"${t.text}\"`;\n }\n }\n\n program(): Program {\n const body: Stmt[] = [];\n while (this.tok.kind !== \"eof\") {\n if (this.tok.kind === \"newline\") { this.next(); continue; }\n if (this.kind() === \"indent\") {\n this.rep.error(\"unexpected indent\", this.tok);\n this.skipBlock();\n continue;\n }\n if (this.kind() === \"dedent\") { this.next(); continue; }\n this.statementRecovering(body);\n }\n return { body };\n }\n\n private statementRecovering(into: Stmt[]): void {\n try {\n into.push(this.statement());\n } catch (e) {\n if (!(e instanceof Bail)) throw e;\n this.sync();\n }\n }\n\n /** Skip to the end of the current line, then over an indented block that follows it. */\n private sync(): void {\n while (this.tok.kind !== \"newline\" && this.tok.kind !== \"eof\" && this.tok.kind !== \"dedent\") this.next();\n if (this.tok.kind === \"newline\") this.next();\n if (this.kind() === \"indent\") this.skipBlock();\n }\n\n private skipBlock(): void {\n let depth = 0;\n do {\n if (this.kind() === \"indent\") depth++;\n else if (this.kind() === \"dedent\") depth--;\n this.next();\n } while (depth > 0 && this.tok.kind !== \"eof\");\n }\n\n private endStatement(): void {\n if (this.tok.kind === \"newline\") { this.next(); return; }\n if (this.tok.kind === \"eof\" || this.tok.kind === \"dedent\") return;\n this.fail(`unexpected ${this.describe()}; expected end of line`);\n }\n\n private block(): Stmt[] {\n if (this.tok.kind !== \"newline\") this.fail(`expected end of line before the indented block, found ${this.describe()}`);\n this.next();\n if (this.kind() !== \"indent\") this.fail(\"expected an indented block\");\n this.next();\n const body: Stmt[] = [];\n while (this.kind() !== \"dedent\" && this.kind() !== \"eof\") {\n if (this.tok.kind === \"newline\") { this.next(); continue; }\n if (this.kind() === \"indent\") {\n this.rep.error(\"unexpected indent\", this.tok);\n this.skipBlock();\n continue;\n }\n this.statementRecovering(body);\n }\n if (this.kind() === \"dedent\") this.next();\n if (body.length === 0) this.rep.error(\"a block needs at least one statement\", this.t[Math.max(0, this.p - 1)]!);\n return body;\n }\n\n private statement(): Stmt {\n const t = this.tok;\n // a reserved word was already reported by the lexer\n if (t.kind === \"ident\" && t.text === \"_reserved\") throw new Bail();\n if (this.isKw(\"if\")) return this.ifStmt();\n if (this.isKw(\"for\")) return this.forStmt();\n if (this.isKw(\"var\")) {\n this.next();\n return this.declaration(t.from, true);\n }\n if (t.kind === \"ident\") {\n const n = this.peek();\n if (TYPE_NAMES.has(t.text) && n.kind === \"ident\" && this.isOp(\"=\", this.peek(2))) return this.declaration(t.from, false);\n if (this.isOp(\"=\", n)) return this.declaration(t.from, false);\n if (n.kind === \"op\" && ASSIGN_OPS.has(n.text)) {\n this.next();\n const op = this.next().text as \":=\";\n const value = this.expr();\n const end = this.tok.from;\n this.endStatement();\n return { k: \"assign\", name: t.text, nameSpan: t, op, value, from: t.from, to: Math.max(value.to, end) };\n }\n }\n if (this.isOp(\"[\")) {\n // a tuple declaration starts with \"[\" IDENT {\",\" IDENT} \"]\" \"=\"\n const names: { name: string; span: Span }[] = [];\n this.next();\n for (;;) {\n if (this.tok.kind !== \"ident\") this.fail(`expected a name, found ${this.describe()}`);\n const nm = this.next();\n names.push({ name: nm.text, span: nm });\n if (this.isOp(\",\")) { this.next(); continue; }\n break;\n }\n this.expectOp(\"]\");\n this.expectOp(\"=\", '\"=\" (a tuple of names must be assigned)');\n const init = this.expr();\n this.endStatement();\n return { k: \"tuple\", names, init, from: t.from, to: init.to };\n }\n const e = this.expr();\n if (e.k !== \"call\") this.fail(\"this expression has no effect; a statement is a declaration, an assignment, if, for or a call\", e);\n this.endStatement();\n return { k: \"expr\", expr: e, from: e.from, to: e.to };\n }\n\n private declaration(from: number, isVar: boolean): Stmt {\n let type: TypeName | null = null;\n if (this.tok.kind === \"ident\" && TYPE_NAMES.has(this.tok.text) && this.peek().kind === \"ident\") type = this.next().text as TypeName;\n if (this.tok.kind !== \"ident\") this.fail(`expected a variable name, found ${this.describe()}`);\n const name = this.next();\n this.expectOp(\"=\");\n const init = this.expr();\n this.endStatement();\n return { k: \"decl\", isVar, type, name: name.text, nameSpan: name, init, from, to: init.to };\n }\n\n private ifStmt(): Stmt {\n const start = this.next();\n const cond = this.expr();\n const then = this.block();\n let els: Stmt[] | null = null;\n if (this.isKw(\"else\")) {\n this.next();\n if (this.isKw(\"if\")) els = [this.ifStmt()];\n else els = this.block();\n }\n return { k: \"if\", cond, then, else: els, from: start.from, to: this.t[this.p - 1]!.to };\n }\n\n private forStmt(): Stmt {\n const start = this.next();\n if (this.tok.kind !== \"ident\") this.fail(`expected a loop variable name, found ${this.describe()}`);\n const name = this.next();\n this.expectOp(\"=\");\n const lo = this.expr();\n if (!this.isKw(\"to\")) this.fail(`expected \"to\", found ${this.describe()}`);\n this.next();\n const hi = this.expr();\n let by: Expr | null = null;\n if (this.isKw(\"by\")) { this.next(); by = this.expr(); }\n const body = this.block();\n return { k: \"for\", name: name.text, nameSpan: name, lo, hi, by, body, from: start.from, to: this.t[this.p - 1]!.to };\n }\n\n // ---- expressions ------------------------------------------------------------\n\n expr(): Expr {\n if (++this.depth > MAX_DEPTH) this.fail(\"expression is nested too deeply\");\n try {\n return this.ternary();\n } finally {\n this.depth--;\n }\n }\n\n private ternary(): Expr {\n const c = this.or();\n if (!this.isOp(\"?\")) return c;\n this.next();\n const a = this.expr();\n this.expectOp(\":\", '\":\" of the ternary');\n const b = this.expr();\n return { k: \"tern\", c, a, b, from: c.from, to: b.to };\n }\n\n private or(): Expr {\n let a = this.and();\n while (this.isKw(\"or\")) { this.next(); const b = this.and(); a = { k: \"bin\", op: \"or\", a, b, from: a.from, to: b.to }; }\n return a;\n }\n\n private and(): Expr {\n let a = this.not();\n while (this.isKw(\"and\")) { this.next(); const b = this.not(); a = { k: \"bin\", op: \"and\", a, b, from: a.from, to: b.to }; }\n return a;\n }\n\n private not(): Expr {\n if (this.isKw(\"not\")) {\n const t = this.next();\n if (++this.depth > MAX_DEPTH) this.fail(\"expression is nested too deeply\");\n try {\n const x = this.not();\n return { k: \"un\", op: \"not\", x, from: t.from, to: x.to };\n } finally { this.depth--; }\n }\n return this.cmp();\n }\n\n private cmp(): Expr {\n const a = this.add();\n const t = this.tok;\n if (t.kind === \"op\" && (t.text === \"==\" || t.text === \"!=\" || t.text === \"<\" || t.text === \"<=\" || t.text === \">\" || t.text === \">=\")) {\n this.next();\n const b = this.add();\n const e: Expr = { k: \"bin\", op: t.text, a, b, from: a.from, to: b.to };\n const t2 = this.tok;\n if (t2.kind === \"op\" && [\"==\", \"!=\", \"<\", \"<=\", \">\", \">=\"].includes(t2.text)) this.fail(\"comparisons do not chain; combine them with 'and'\", t2);\n return e;\n }\n return a;\n }\n\n private add(): Expr {\n let a = this.mul();\n while (this.isOp(\"+\") || this.isOp(\"-\")) { const op = this.next().text; const b = this.mul(); a = { k: \"bin\", op, a, b, from: a.from, to: b.to }; }\n return a;\n }\n\n private mul(): Expr {\n let a = this.unary();\n while (this.isOp(\"*\") || this.isOp(\"/\") || this.isOp(\"%\")) { const op = this.next().text; const b = this.unary(); a = { k: \"bin\", op, a, b, from: a.from, to: b.to }; }\n return a;\n }\n\n private unary(): Expr {\n if (this.isOp(\"-\") || this.isOp(\"+\")) {\n const t = this.next();\n if (++this.depth > MAX_DEPTH) this.fail(\"expression is nested too deeply\");\n try {\n const x = this.unary();\n return { k: \"un\", op: t.text as \"-\" | \"+\", x, from: t.from, to: x.to };\n } finally { this.depth--; }\n }\n return this.postfix();\n }\n\n private postfix(): Expr {\n let e = this.primary();\n for (;;) {\n if (this.isOp(\"(\")) {\n this.next();\n const args = this.args();\n const close = this.expectOp(\")\", '\")\" to close the call');\n e = { k: \"call\", callee: e, args, from: e.from, to: close.to };\n } else if (this.isOp(\"[\")) {\n this.next();\n const i = this.expr();\n const close = this.expectOp(\"]\", '\"]\" to close the index');\n e = { k: \"idx\", x: e, i, from: e.from, to: close.to };\n } else if (this.isOp(\".\")) {\n this.next();\n if (this.tok.kind !== \"ident\") this.fail(`expected a name after \".\", found ${this.describe()}`);\n const nm = this.next();\n e = { k: \"mem\", obj: e, name: nm.text, nameSpan: nm, from: e.from, to: nm.to };\n } else return e;\n }\n }\n\n private args(): Arg[] {\n const out: Arg[] = [];\n if (this.isOp(\")\")) return out;\n for (;;) {\n if (this.tok.kind === \"ident\" && this.isOp(\"=\", this.peek())) {\n const nm = this.next();\n this.next();\n out.push({ name: nm.text, nameSpan: nm, value: this.expr() });\n } else {\n const v = this.expr();\n out.push({ name: null, value: v });\n }\n if (this.isOp(\",\")) { this.next(); continue; }\n return out;\n }\n }\n\n private primary(): Expr {\n const t = this.tok;\n switch (t.kind) {\n case \"num\": this.next(); return { k: \"num\", value: t.value!, float: /[.eE]/.test(t.text), from: t.from, to: t.to };\n case \"str\": this.next(); return { k: \"str\", value: t.text, from: t.from, to: t.to };\n case \"color\": this.next(); return { k: \"color\", value: t.text, from: t.from, to: t.to };\n case \"ident\": this.next(); return { k: \"id\", name: t.text, from: t.from, to: t.to };\n case \"kw\":\n if (t.text === \"true\" || t.text === \"false\") { this.next(); return { k: \"bool\", value: t.text === \"true\", from: t.from, to: t.to }; }\n break;\n case \"op\":\n if (t.text === \"(\") {\n this.next();\n const e = this.expr();\n const close = this.expectOp(\")\", '\")\"');\n return { ...e, from: t.from, to: close.to } as Expr;\n }\n if (t.text === \"[\") {\n this.next();\n const items: Expr[] = [];\n if (!this.isOp(\"]\")) {\n for (;;) {\n items.push(this.expr());\n if (this.isOp(\",\")) { this.next(); continue; }\n break;\n }\n }\n const close = this.expectOp(\"]\", '\"]\"');\n return { k: \"arr\", items, from: t.from, to: close.to };\n }\n break;\n default: break;\n }\n this.fail(`expected an expression, found ${this.describe()}`);\n }\n}\n\nexport function parse(src: string, rep: Reporter): Program {\n const tokens = lex(src, rep);\n return new Parser(tokens, rep).program();\n}\n","// Resource limits. Every one is enforced with a diagnostic naming the limit; none degrades silently.\n\nexport interface Limits {\n /** Largest period / length a ta.* call or history offset may use. Matches the indicators' own maximum. */\n maxPeriod: number;\n /** Iterations of one `for` statement execution. */\n maxLoopIterations: number;\n /** Loop iterations in the evaluation of one bar (the count restarts every bar, so it does not depend on the history length). */\n maxSteps: number;\n /** Columns of the compiled graph (every named series, ta.* result and intermediate). */\n maxColumns: number;\n /** Bytes a script may hold: columns x bars x 8, counted three times (the worker keeps a copy, and a column grows by half when a bar is appended). */\n maxBytes: number;\n /** Bars a script runs over. */\n maxBars: number;\n /** Nodes of the syntax tree / source length: refuses pathological inputs before they are parsed. */\n maxSourceChars: number;\n /** Distinct outside series (symbol and timeframe pairs) a script may read. Each is held twice (worker and page), in six columns of its own length. */\n maxFeeds: number;\n /** Wall-clock budget of one batch in the worker before it is terminated, milliseconds. */\n batchMs: number;\n /** Wall-clock budget of one tick, milliseconds. */\n tickMs: number;\n}\n\nexport const DEFAULT_LIMITS: Readonly<Limits> = Object.freeze({\n maxPeriod: 5000,\n maxLoopIterations: 10_000,\n maxSteps: 2_000_000,\n maxColumns: 512,\n maxBytes: 512 * 1024 * 1024,\n maxBars: 10_000_000,\n maxFeeds: 8,\n maxSourceChars: 200_000,\n batchMs: 8000,\n tickMs: 1000,\n});\n\n/** Largest history offset `x[n]`. */\nexport const MAX_HISTORY = 1_000_000;\n","// What a script's `outside(...)` calls mean to its host: the outside series it reads, named by an opaque symbol and a\n// timeframe, and how each is joined onto the chart's bars (see @alphacharts/indicators engine/feed.ts for the join).\n//\n// The package never resolves a symbol or fetches a bar: `symbol` is a string the host understands (or none: this\n// chart's own instrument), `timeframe` is a length written `<n><unit>` (or none: this chart's own). The host reads\n// `compile().plan.dependencies`, loads each distinct (symbol, timeframe) as bars, and hands them over with\n// `handle.setSeries(key, bars)`.\n\nimport type { FeedAlign, FeedField } from \"@alphacharts/indicators\";\n\nexport { describeJoin } from \"@alphacharts/indicators\";\nexport type { FeedField, JoinReason, JoinReport } from \"@alphacharts/indicators\";\n\n/** One `outside(symbol, field, timeframe)` call: `symbol` / `timeframe` are null when the script left them out (this chart's). */\nexport interface Dependency {\n symbol: string | null;\n field: FeedField;\n timeframe: string | null;\n}\n\n/** One outside series the host must load: a distinct (symbol, timeframe), carrying every field the script reads from it. */\nexport interface FeedRef {\n /** Pass to `handle.setSeries` / `handle.pushSeries`. */\n key: string;\n symbol: string | null;\n timeframe: string | null;\n fields: FeedField[];\n}\n\nconst UNITS: Readonly<Record<string, number>> = { m: 60_000, h: 3_600_000, d: 86_400_000, w: 7 * 86_400_000 };\nconst TIMEFRAME = /^([1-9][0-9]{0,2})([mhdw])$/;\n\n/** Length in ms of a timeframe like \"5m\", \"1h\", \"1d\", \"1w\", or null when it is not written that way. */\nexport function parseTimeframe(tf: string): number | null {\n const m = TIMEFRAME.exec(tf);\n return m ? Number(m[1]) * UNITS[m[2]!]! : null;\n}\n\n/** The key of an outside series: symbol and timeframe, either empty for \"this chart's\". Symbols are opaque, so the separator is an unprintable one. */\nexport function feedKey(symbol: string | null, timeframe: string | null): string {\n return `${symbol ?? \"\"}\\u0001${timeframe ?? \"\"}`;\n}\n\n/** The distinct outside series a script reads, in order of first use, each with its fields. */\nexport function feedsOf(deps: readonly Dependency[]): FeedRef[] {\n const out = new Map<string, FeedRef>();\n for (const d of deps) {\n const key = feedKey(d.symbol, d.timeframe);\n let f = out.get(key);\n if (!f) out.set(key, (f = { key, symbol: d.symbol, timeframe: d.timeframe, fields: [] }));\n if (!f.fields.includes(d.field)) f.fields.push(d.field);\n }\n return [...out.values()];\n}\n\n/**\n * How an outside series on `timeframe` (null: the chart's own) joins a chart whose bars last `intervalMs`:\n * the same length joins on exact time (\"same\"); a longer one joins on the bar that has finished (\"closed\", its\n * length is the nominal bar length); a shorter one is refused, since it would have to be aggregated and a\n * silent choice of how would be a number nobody asked for.\n */\nexport function alignFor(timeframe: string | null, intervalMs: number): { align: FeedAlign; spanMs: number } {\n if (!(Number.isFinite(intervalMs) && intervalMs > 0)) throw new RangeError(`the chart's bar length must be a positive number of milliseconds, got ${String(intervalMs)}`);\n if (timeframe === null) return { align: \"same\", spanMs: intervalMs };\n const span = parseTimeframe(timeframe);\n if (span === null) throw new RangeError(`timeframe \"${timeframe}\" is not written like 5m, 1h, 1d or 1w`);\n if (span < intervalMs) throw new RangeError(`timeframe \"${timeframe}\" is shorter than the chart's bars; an outside series must be on the chart's timeframe or a longer one`);\n return span === intervalMs ? { align: \"same\", spanMs: span } : { align: \"closed\", spanMs: span };\n}\n","// Type checker: resolves names, types every expression (int/float/bool/string/color\n// with the qualifiers const < input < series), checks calls against the signature\n// table, and extracts the script's plan: its inputs, its plots and the program.\n//\n// Nothing is coerced silently: a number is never a condition, a bool is never a\n// number, an int never silently narrows from a float, `na` needs a declared type.\n//\n// \"State\": a top-level variable declared with `var` or assigned with := (and what\n// depends on it), block locals and loop counters change while one bar is being\n// evaluated. Everything else is \"pure\": it is a function of the bars and the\n// inputs, so it is computed as whole columns by the same kernels the built-in\n// studies use. ta.* calls only take pure arguments.\n\nimport type { Arg, Assign, Call, Expr, For, If, Program, Stmt, Sym, Ty, VarDecl } from \"./ast.js\";\nimport type { Reporter, Span } from \"./diag.js\";\nimport { BOOL_S, BUILTIN_SERIES, ENUMS, FLOAT_S, INT_S, MEMBER_CONSTS, NAMESPACES, SIGS, t, TA_TR, type Param, type Sig } from \"./builtins.js\";\nimport { DEFAULT_LIMITS, MAX_HISTORY } from \"./limits.js\";\nimport { feedKey, feedsOf, parseTimeframe, type Dependency } from \"./feeds.js\";\nimport { SOURCE_NAMES } from \"@alphacharts/indicators\";\n\nexport type ColorRef = { value: string } | { input: string };\n\nexport interface InputSpec {\n key: string;\n kind: \"int\" | \"float\" | \"bool\" | \"string\" | \"source\" | \"color\";\n label: string;\n default: number | boolean | string;\n min?: number;\n max?: number;\n step?: number;\n options?: string[];\n span: Span;\n}\n\nexport interface PlotSpec {\n kind: \"line\" | \"histogram\" | \"area\" | \"hline\" | \"fill\" | \"markers\" | \"barcolor\" | \"bgcolor\";\n key: string;\n title: string;\n color: ColorRef;\n /** A line coloured per bar: `color` where `cond` is false or absent, this colour where it is true. */\n colorWhen?: { cond: Expr; color: string };\n colorDown?: string;\n width?: number;\n lineStyle?: string;\n offset?: number;\n /** A bar shift written as an expression known when the study is built (`-right`): an int input or a literal combination of them. Wins over `offset`. */\n offsetExpr?: Expr;\n /** Series plotted (line/histogram/area/markers), the price of an hline, or the condition of a barcolor / bgcolor. */\n expr?: Expr;\n /** fill: indexes into the plots. */\n a?: number;\n b?: number;\n /** hline: a fill draws between it and another plot, so its level is also a column (constant on every bar). */\n column?: boolean;\n shape?: string;\n position?: string;\n /** plotshape: only the most recent `last` marked bars keep their mark. */\n last?: number;\n /** plotshape: only marks on the final `within` bars are kept. */\n within?: number;\n span: Span;\n}\n\nexport interface Plan {\n title: string;\n overlay: boolean;\n /** Which price axis the script's series use. */\n scale: \"left\" | \"right\";\n /** Every `outside(...)` call, once per distinct (symbol, field, timeframe), in order of first use. */\n dependencies: Dependency[];\n inputs: InputSpec[];\n plots: PlotSpec[];\n body: Stmt[];\n needs: \"value\" | \"ohlc\" | \"ohlcv\";\n /** Frame size of the per-bar program. */\n slots: number;\n /** Top-level variables kept in columns by the per-bar program, in declaration order. */\n stateVars: Sym[];\n}\n\nconst ERR: Ty = { b: \"na\", q: \"const\" };\n/** Domains: a value lives on the chart's bars (\"@\"), on an outside series' own bars (its key), or on none (a constant, \"~\"). */\nexport const CHART_DOM = \"@\";\nexport const CONST_DOM = \"~\";\n/**\n * The domain of an operation on operands of these domains: constants take the other's; operands of one outside series\n * stay on its bars (so a window of 14 is 14 of its bars); anything else is on the chart's bars, each outside operand\n * meeting them through the join first.\n */\nexport function combineDom(...doms: string[]): string {\n let out = CONST_DOM;\n for (const d of doms) {\n if (d === CONST_DOM) continue;\n if (out === CONST_DOM) out = d;\n else if (out !== d) return CHART_DOM;\n }\n return out;\n}\nconst NEEDS_RANK = { value: 0, ohlc: 1, ohlcv: 2 } as const;\nconst QRANK = { const: 0, input: 1, series: 2 } as const;\nconst qmax = (...q: Ty[\"q\"][]): Ty[\"q\"] => q.reduce((a, b) => (QRANK[b] > QRANK[a] ? b : a), \"const\" as Ty[\"q\"]);\nconst isNum = (x: Ty) => x.b === \"int\" || x.b === \"float\" || x.b === \"na\";\nconst simple = (x: Ty) => x.q !== \"series\";\nconst show = (x: Ty): string => (x === ERR ? \"na\" : x.b === \"tuple\" ? `a tuple of ${x.elems!.length} values (destructure it: [a, b] = ...)` : `${simple(x) && x.b !== \"na\" ? \"\" : x.b === \"na\" ? \"\" : \"series \"}${x.b}`);\n\nclass Scope {\n readonly names = new Map<string, Sym>();\n constructor(readonly parent: Scope | null) {}\n find(name: string): Sym | undefined {\n for (let s: Scope | null = this; s; s = s.parent) {\n const v = s.names.get(name);\n if (v) return v;\n }\n return undefined;\n }\n}\n\nfunction collectAssigned(body: Stmt[], out: Set<string>): void {\n for (const s of body) {\n if (s.k === \"assign\") out.add(s.name);\n else if (s.k === \"if\") { collectAssigned(s.then, out); if (s.else) collectAssigned(s.else, out); }\n else if (s.k === \"for\") collectAssigned(s.body, out);\n }\n}\n\nconst slug = (s: string) => s.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n\nclass Checker {\n readonly plan: Plan = { title: \"Script\", overlay: false, scale: \"right\", dependencies: [], inputs: [], plots: [], body: [], needs: \"value\", slots: 0, stateVars: [] };\n private scope = new Scope(null);\n private assigned = new Set<string>();\n private depth = 0;\n private sawIndicator = false;\n private readonly keys = new Set<string>();\n private loops = 0;\n\n constructor(private readonly rep: Reporter, private readonly limits = DEFAULT_LIMITS) {}\n\n private err(msg: string, span: Span): void { this.rep.error(msg, span); }\n\n private need(n: \"value\" | \"ohlc\" | \"ohlcv\"): void {\n if (NEEDS_RANK[n] > NEEDS_RANK[this.plan.needs]) this.plan.needs = n;\n }\n\n run(prog: Program): Plan {\n collectAssigned(prog.body, this.assigned);\n for (const s of prog.body) this.stmt(s, true);\n this.plan.body = prog.body;\n const bg = this.plan.plots.find((p) => p.kind === \"bgcolor\");\n if (bg && !this.plan.overlay && !this.plan.plots.some((p) => p.kind === \"line\" || p.kind === \"histogram\" || p.kind === \"area\")) {\n this.err(\"bgcolor shades the pane the script draws in, and with overlay=false the script has a pane only if it plots a line, histogram or area: add a plot(...), or use indicator(..., overlay=true) to shade the price chart\", bg.span);\n }\n return this.plan;\n }\n\n // ---- statements -----------------------------------------------------------------\n\n private declare(name: string, sym: Sym, span: Span): void {\n if (this.scope.find(name)) { this.err(`\"${name}\" is already declared`, span); return; }\n if (Object.prototype.hasOwnProperty.call(BUILTIN_SERIES, name) || NAMESPACES.has(name) || name === \"na\" || name === \"nz\" || SIGS.has(name)) {\n this.err(`\"${name}\" is a built-in name and cannot be redeclared`, span);\n return;\n }\n sym.decl = span;\n this.scope.names.set(name, sym);\n }\n\n private slot(): number { return this.plan.slots++; }\n\n private stmt(s: Stmt, top: boolean): void {\n switch (s.k) {\n case \"decl\": return this.decl(s, top);\n case \"tuple\": return this.tupleDecl(s, top);\n case \"assign\": return this.assign(s);\n case \"if\": return this.ifStmt(s);\n case \"for\": return this.forStmt(s);\n case \"expr\": {\n const c = s.expr as Call;\n this.call(c, top ? \"stmt\" : \"expr-block\");\n return;\n }\n }\n }\n\n private decl(s: VarDecl, top: boolean): void {\n if (s.isVar && !top) this.err(\"'var' is only allowed at the top level of the script\", s);\n // input.* is the whole right-hand side\n if (s.init.k === \"call\" && this.calleeName(s.init) !== null && this.calleeName(s.init)!.startsWith(\"input.\")) {\n if (!top || s.isVar) { this.err(\"input.* may only declare a top-level variable\", s.init); this.skipInputArgs(s.init); return; }\n this.inputDecl(s);\n return;\n }\n const handleOf = s.init.k === \"call\" ? this.calleeName(s.init) : null;\n if (handleOf === \"plot\" || handleOf === \"hline\") {\n if (!top) { this.err(`${handleOf}() is only allowed at the top level of the script`, s.init); return; }\n if (s.isVar || s.type) this.err(\"a plot handle cannot be declared var or typed\", s);\n this.call(s.init as Call, \"decl\");\n const sym: Sym = { name: s.name, kind: \"plot\", ty: t(\"plot\"), key: String(this.plan.plots.length - 1) };\n this.declare(s.name, sym, s.nameSpan);\n s.sym = sym;\n return;\n }\n const ity = this.expr(s.init);\n let ty = ity;\n if (ity.b === \"void\") { this.err(\"this expression has no value\", s.init); ty = ERR; }\n if (ity.b === \"plot\") { this.err(\"a plot handle can only come from plot() or hline()\", s.init); ty = ERR; }\n if (ity.b === \"tuple\") { this.err(`this call returns ${ity.elems!.length} values; destructure them: [a, b, ...] = ...`, s.init); ty = ERR; }\n if (s.type) {\n const want = t(s.type as Ty[\"b\"], \"const\");\n if (ty !== ERR && !this.assignable(want, ty)) {\n if (want.b === \"int\" && ty.b === \"float\") {\n const fix = ` (declare it float: float ${s.name} = 0.0, or var float ${s.name} = 0.0; there is no int() conversion)`\n this.err(`cannot assign ${show(ty)} to ${s.type} \"${s.name}\"${fix}`, s.init)\n } else this.err(`cannot assign ${show(ty)} to ${s.type} \"${s.name}\"`, s.init)\n }\n ty = { b: want.b, q: ty === ERR ? \"series\" : ty.q };\n } else if (ty.b === \"na\" && ty !== ERR) {\n this.err(`cannot infer the type of \"${s.name}\" from na; declare it, e.g. float ${s.name} = na`, s.init);\n ty = ERR;\n }\n const mutable = this.assigned.has(s.name);\n if (top) {\n const state = s.isVar || mutable || !!s.init.st;\n if (state) {\n const sym: Sym = { name: s.name, kind: \"state\", ty: { b: ty.b, q: \"series\" }, isVar: s.isVar, slot: this.slot() };\n this.declare(s.name, sym, s.nameSpan);\n s.sym = sym;\n this.plan.stateVars.push(sym);\n } else {\n const sym: Sym = { name: s.name, kind: simple(ty) ? \"simple\" : \"pure\", ty };\n if (sym.kind === \"pure\") sym.dom = s.init.dom ?? CHART_DOM;\n this.declare(s.name, sym, s.nameSpan);\n s.sym = sym;\n }\n } else {\n const sym: Sym = { name: s.name, kind: \"local\", ty: { b: ty.b, q: \"series\" }, slot: this.slot() };\n this.declare(s.name, sym, s.nameSpan);\n s.sym = sym;\n }\n }\n\n private tupleDecl(s: import(\"./ast.js\").TupleDecl, top: boolean): void {\n if (!top) { this.err(\"destructuring is only allowed at the top level of the script\", s); return; }\n const ty = this.expr(s.init);\n s.syms = [];\n if (ty === ERR) { for (const n of s.names) this.declare(n.name, { name: n.name, kind: \"pure\", ty: FLOAT_S }, n.span); return; }\n if (ty.b !== \"tuple\") { this.err(\"only calls that return several values can be destructured\", s.init); for (const n of s.names) this.declare(n.name, { name: n.name, kind: \"pure\", ty: FLOAT_S }, n.span); return; }\n if (ty.elems!.length !== s.names.length) this.err(`this call returns ${ty.elems!.length} values, ${s.names.length} names given`, s);\n s.names.forEach((n, i) => {\n if (this.assigned.has(n.name)) this.err(`\"${n.name}\" is destructured from a call and cannot be assigned with :=`, n.span);\n const sym: Sym = { name: n.name, kind: \"pure\", ty: ty.elems![i] ?? FLOAT_S, dom: s.init.dom ?? CHART_DOM };\n this.declare(n.name, sym, n.span);\n s.syms!.push(sym);\n });\n }\n\n private assign(s: Assign): void {\n const sym = this.scope.find(s.name);\n const vt = this.expr(s.value);\n if (!sym) { this.err(`\"${s.name}\" is not declared; declare it first with ${s.name} = ...`, s.nameSpan); return; }\n s.sym = sym;\n if (sym.kind !== \"state\" && sym.kind !== \"local\") {\n const why = sym.kind === \"loop\" ? \"a loop counter\" : sym.kind === \"input\" ? \"an input\" : sym.kind === \"builtin\" ? \"a built-in series\" : \"not assignable here\";\n this.err(`cannot assign to \"${s.name}\": it is ${why}`, s.nameSpan);\n return;\n }\n if (vt === ERR) return;\n let want = vt;\n if (s.op !== \":=\") {\n if (!isNum(sym.ty) || !isNum(vt)) { this.err(`\"${s.op}\" needs numbers, got ${show(sym.ty)} and ${show(vt)}`, s); return; }\n want = { b: sym.ty.b === \"int\" && vt.b === \"int\" && s.op !== \"/=\" ? \"int\" : \"float\", q: \"series\" };\n }\n if (!this.assignable(sym.ty, want)) {\n if (sym.ty.b === \"int\" && want.b === \"float\") {\n const fix = ` (declare it float: float ${s.name} = 0.0, or var float ${s.name} = 0.0; there is no int() conversion)`\n this.err(`cannot assign ${show(want)} to ${sym.ty.b} \"${s.name}\"${fix}`, s.value)\n } else this.err(`cannot assign ${show(want)} to ${sym.ty.b} \"${s.name}\"`, s.value)\n }\n }\n\n private ifStmt(s: If): void {\n const ct = this.expr(s.cond);\n if (ct !== ERR && ct.b !== \"bool\") this.err(`the condition of if must be bool, got ${show(ct)}`, s.cond);\n this.block(s.then);\n if (s.else) this.block(s.else);\n }\n\n private block(body: Stmt[]): void {\n const saved = this.scope;\n this.scope = new Scope(saved);\n this.depth++;\n for (const b of body) this.stmt(b, false);\n this.depth--;\n this.scope = saved;\n }\n\n private forStmt(s: For): void {\n const a = this.expr(s.lo), b = this.expr(s.hi), c = s.by ? this.expr(s.by) : null;\n for (const [x, e] of [[a, s.lo], [b, s.hi], [c, s.by]] as const) {\n if (x && x !== ERR && x.b !== \"int\") this.err(`a loop bound must be an int, got ${show(x)}`, e!);\n }\n const lit = (e: Expr | null): number | undefined => (e === null ? 1 : e.k === \"num\" ? e.value : e.k === \"un\" && e.op === \"-\" && e.x.k === \"num\" ? -e.x.value : undefined);\n const lo = lit(s.lo), hi = lit(s.hi), by = lit(s.by);\n if (by === 0) this.err(\"the loop step cannot be 0\", s.by!);\n if (lo !== undefined && hi !== undefined && by !== undefined && by !== 0) {\n const step = s.by ? Math.abs(by) : 1;\n const trips = Math.floor(Math.abs(hi - lo) / step) + 1;\n if (trips > this.limits.maxLoopIterations) this.err(`this loop runs ${trips} times; the limit is ${this.limits.maxLoopIterations} iterations per loop`, s);\n }\n this.loops++;\n const saved = this.scope;\n this.scope = new Scope(saved);\n const sym: Sym = { name: s.name, kind: \"loop\", ty: { b: \"int\", q: \"series\" }, slot: this.slot() };\n this.declare(s.name, sym, s.nameSpan);\n s.sym = sym;\n this.depth++;\n for (const b2 of s.body) this.stmt(b2, false);\n this.depth--;\n this.scope = saved;\n }\n\n // ---- expressions ----------------------------------------------------------------\n\n private assignable(to: Ty, from: Ty): boolean {\n if (from === ERR || to === ERR) return true;\n if (from.b === \"na\") return true;\n if (to.b === from.b) return true;\n return to.b === \"float\" && from.b === \"int\";\n }\n\n expr(e: Expr): Ty {\n const ty = this.expr_(e);\n e.ty = ty;\n e.dom = this.domOf(e);\n return ty;\n }\n\n /** Whose bars an expression lives on (children have been typed). */\n private domOf(e: Expr): string {\n if (e.ty === ERR || e.st) return CHART_DOM;\n switch (e.k) {\n case \"num\": case \"str\": case \"bool\": case \"color\": case \"arr\": return CONST_DOM;\n case \"mem\": return e.obj.k === \"id\" && e.obj.name === \"ta\" && e.name === \"tr\" ? CHART_DOM : CONST_DOM;\n case \"id\": {\n const s = e.sym;\n if (!s) return CONST_DOM;\n if (s.kind === \"simple\") return CONST_DOM;\n if (s.kind === \"input\") return s.ty.b === \"float\" && s.ty.q === \"series\" ? CHART_DOM : CONST_DOM;\n if (s.kind === \"pure\") return s.dom ?? CHART_DOM;\n return CHART_DOM;\n }\n case \"un\": return e.x.dom ?? CHART_DOM;\n case \"bin\": return combineDom(e.a.dom ?? CHART_DOM, e.b.dom ?? CHART_DOM);\n case \"tern\": return combineDom(e.c.dom ?? CHART_DOM, e.a.dom ?? CHART_DOM, e.b.dom ?? CHART_DOM);\n case \"idx\": return combineDom(e.x.dom ?? CHART_DOM, e.i.dom ?? CHART_DOM);\n case \"call\": {\n // a series on the chart's own timeframe is read on the chart's bars; one with a timeframe of its own, on its own\n if (e.fn === \"outside\") return e.own && e.feed ? e.feed : CHART_DOM;\n const sig = e.fn ? SIGS.get(e.fn) : undefined;\n if (!sig || !e.bound) return CHART_DOM;\n const doms: string[] = [];\n sig.params.forEach((p, k) => {\n const a = e.bound![k];\n if (a && p.kind === \"series\") doms.push(a.dom ?? CHART_DOM);\n });\n const d = combineDom(...doms);\n // a study or kernel that was given no series of its own reads the chart's\n return d === CONST_DOM && (sig.op === \"kernel\" || sig.op === \"study\" || sig.name === \"ta.bb\") ? CHART_DOM : d;\n }\n }\n }\n\n private expr_(e: Expr): Ty {\n switch (e.k) {\n case \"num\": return t(e.float || !Number.isInteger(e.value) ? \"float\" : \"int\");\n case \"str\": return t(\"string\");\n case \"bool\": return t(\"bool\");\n case \"color\": return t(\"color\");\n case \"arr\": this.err(\"array values are only allowed as options=[...] of input.string\", e); return ERR;\n case \"id\": return this.ident(e);\n case \"mem\": return this.member(e);\n case \"un\": return this.unary(e);\n case \"bin\": return this.binary(e);\n case \"tern\": return this.ternary(e);\n case \"idx\": return this.index(e);\n case \"call\": return this.call(e, \"expr\");\n }\n }\n\n private ident(e: Extract<Expr, { k: \"id\" }>): Ty {\n const sym = this.scope.find(e.name);\n if (sym) {\n e.sym = sym;\n if (sym.kind === \"state\" || sym.kind === \"local\" || sym.kind === \"loop\") e.st = true;\n return sym.ty;\n }\n const b = BUILTIN_SERIES[e.name];\n if (b) {\n this.need(b.needs);\n e.sym = { name: e.name, kind: \"builtin\", ty: b.ty, key: e.name };\n return b.ty;\n }\n if (e.name === \"na\") return t(\"na\");\n if (NAMESPACES.has(e.name)) { this.err(`\"${e.name}\" is a namespace; use ${e.name}.<name>`, e); return ERR; }\n if (SIGS.has(e.name)) { this.err(`\"${e.name}\" is a function; call it: ${e.name}(...)`, e); return ERR; }\n this.err(`unknown name \"${e.name}\"`, e);\n return ERR;\n }\n\n private member(e: Extract<Expr, { k: \"mem\" }>): Ty {\n if (e.obj.k !== \"id\" || !NAMESPACES.has(e.obj.name) || this.scope.find(e.obj.name)) {\n this.err(\"only namespace names can be followed by '.'\", e);\n return ERR;\n }\n const full = `${e.obj.name}.${e.name}`;\n const c = MEMBER_CONSTS[full];\n if (c) { e.cv = c.value; return c.ty; }\n if (full === \"ta.tr\") { this.need(\"ohlc\"); return TA_TR; }\n if (SIGS.has(full)) { this.err(`\"${full}\" is a function; call it: ${full}(...)`, e); return ERR; }\n this.err(`unknown name \"${full}\"`, e.nameSpan);\n return ERR;\n }\n\n private unary(e: Extract<Expr, { k: \"un\" }>): Ty {\n const x = this.expr(e.x);\n e.st = e.x.st ?? false;\n if (x === ERR) return ERR;\n if (e.op === \"not\") {\n if (x.b !== \"bool\") { this.err(`\"not\" needs a bool, got ${show(x)}`, e); return ERR; }\n return x;\n }\n if (!isNum(x)) { this.err(`unary \"${e.op}\" needs a number, got ${show(x)}`, e); return ERR; }\n return x.b === \"na\" ? { b: \"float\", q: x.q } : x;\n }\n\n private binary(e: Extract<Expr, { k: \"bin\" }>): Ty {\n const a = this.expr(e.a), b = this.expr(e.b);\n e.st = !!(e.a.st || e.b.st);\n if (a === ERR || b === ERR) return ERR;\n const q = qmax(a.q, b.q);\n switch (e.op) {\n case \"and\": case \"or\":\n if (a.b !== \"bool\" || b.b !== \"bool\") { this.err(`\"${e.op}\" needs bool operands, got ${show(a)} and ${show(b)}`, e); return ERR; }\n return { b: \"bool\", q };\n case \"==\": case \"!=\": {\n const ok = (isNum(a) && isNum(b)) || (a.b === b.b && (a.b === \"bool\" || a.b === \"string\" || a.b === \"color\"));\n if (!ok) { this.err(`cannot compare ${show(a)} with ${show(b)}`, e); return ERR; }\n if ((a.b === \"string\" || a.b === \"color\") && q === \"series\") { this.err(\"strings and colors can only be compared as constants or inputs\", e); return ERR; }\n return { b: \"bool\", q };\n }\n case \"<\": case \"<=\": case \">\": case \">=\":\n if (!isNum(a) || !isNum(b)) { this.err(`\"${e.op}\" needs numbers, got ${show(a)} and ${show(b)}`, e); return ERR; }\n return { b: \"bool\", q };\n default: {\n if (!isNum(a) || !isNum(b)) { this.err(`\"${e.op}\" needs numbers, got ${show(a)} and ${show(b)}${a.b === \"bool\" || b.b === \"bool\" ? \" (a bool is not a number: use a ternary)\" : \"\"}`, e); return ERR; }\n const isInt = a.b === \"int\" && b.b === \"int\" && e.op !== \"/\";\n return { b: isInt ? \"int\" : \"float\", q };\n }\n }\n }\n\n private ternary(e: Extract<Expr, { k: \"tern\" }>): Ty {\n const c = this.expr(e.c), a = this.expr(e.a), b = this.expr(e.b);\n e.st = !!(e.c.st || e.a.st || e.b.st);\n if (c !== ERR && c.b !== \"bool\") this.err(`the condition of ?: must be bool, got ${show(c)}`, e.c);\n if (a === ERR || b === ERR) return ERR;\n const q = qmax(c === ERR ? \"const\" : c.q, a.q, b.q);\n if (a.b === \"na\") return { b: b.b, q };\n if (b.b === \"na\") return { b: a.b, q };\n if (isNum(a) && isNum(b)) return { b: a.b === \"int\" && b.b === \"int\" ? \"int\" : \"float\", q };\n if (a.b === \"string\" && b.b === \"string\" && q === \"series\") {\n this.err(\"a string cannot depend on a series: the condition of ?: must be a constant or an input (a string is a label, not a value that changes per bar)\", e);\n return ERR;\n }\n if (a.b === b.b) return { b: a.b, q };\n this.err(`the branches of ?: have different types: ${show(a)} and ${show(b)}`, e);\n return ERR;\n }\n\n /** Whether `x[n]` / ta.change(x) can read x's earlier values. */\n private historyOk(x: Expr): boolean {\n return !x.st || (x.k === \"id\" && x.sym?.kind === \"state\");\n }\n\n private index(e: Extract<Expr, { k: \"idx\" }>): Ty {\n const x = this.expr(e.x), i = this.expr(e.i);\n e.st = !!(e.x.st || e.i.st);\n if (x === ERR || i === ERR) return ERR;\n if (x.q !== \"series\" || !(isNum(x) || x.b === \"bool\")) { this.err(`only a series can be indexed with [ ], this is ${show(x)}`, e.x); return ERR; }\n if (i.b !== \"int\") { this.err(`the history offset must be an int, got ${show(i)}`, e.i); return ERR; }\n if (!this.historyOk(e.x)) {\n this.err(\"history [ ] needs a plain series or a top-level variable; a block variable, loop counter or an expression of those has no earlier values. Assign the value to a top-level variable first\", e.x);\n return ERR;\n }\n const c = e.i.k === \"num\" ? e.i.value : e.i.k === \"un\" && e.i.op === \"-\" && e.i.x.k === \"num\" ? -e.i.x.value : undefined;\n if (c !== undefined && (c < 0 || c > MAX_HISTORY)) this.err(`the history offset must be between 0 and ${MAX_HISTORY}, got ${c}`, e.i);\n return { b: x.b, q: \"series\" };\n }\n\n // ---- calls ------------------------------------------------------------------------\n\n private calleeName(c: Call): string | null {\n if (c.callee.k === \"id\") return c.callee.name;\n if (c.callee.k === \"mem\" && c.callee.obj.k === \"id\") return `${c.callee.obj.name}.${c.callee.name}`;\n return null;\n }\n\n private skipInputArgs(c: Call): void {\n for (const a of c.args) this.expr(a.value);\n }\n\n private bind(sig: Sig, c: Call): (Expr | null)[] {\n const out: (Expr | null)[] = sig.params.map(() => null);\n let pos = 0;\n let named = false;\n for (const a of c.args) {\n if (a.name === null) {\n if (named) { this.err(\"positional arguments must come before named ones\", a.value); continue; }\n if (pos >= sig.params.length) { this.err(`${sig.name} takes at most ${sig.params.length} argument${sig.params.length === 1 ? \"\" : \"s\"}, got ${c.args.length}`, a.value); return out; }\n out[pos++] = a.value;\n } else {\n named = true;\n const k = sig.params.findIndex((p) => p.name === a.name);\n if (k < 0) { this.err(`${sig.name} has no parameter \"${a.name}\" (parameters: ${sig.params.map((p) => p.name).join(\", \") || \"none\"})`, a.nameSpan ?? a.value); continue; }\n if (out[k]) { this.err(`parameter \"${a.name}\" is given twice`, a.nameSpan ?? a.value); continue; }\n out[k] = a.value;\n }\n }\n sig.params.forEach((p, k) => {\n if (!p.opt && !out[k] && !(p.kind === \"series\" && false)) this.err(`${sig.name} needs the argument \"${p.name}\"`, c);\n });\n return out;\n }\n\n /** The value of a literal-like expression known at compile time. */\n constVal(e: Expr): number | string | boolean | undefined {\n switch (e.k) {\n case \"num\": return e.value;\n case \"str\": return e.value;\n case \"bool\": return e.value;\n case \"color\": return e.value;\n case \"mem\": return e.cv;\n case \"un\": if (e.op === \"-\" && e.x.k === \"num\") return -e.x.value; return undefined;\n default: return undefined;\n }\n }\n\n private checkParam(sig: Sig, p: Param, e: Expr): void {\n const ty = e.ty ?? this.expr(e);\n if (ty === ERR) return;\n const where = `argument \"${p.name}\" of ${sig.name}`;\n const needSimple = () => {\n if (!simple(ty)) this.err(`${where} must be a literal or an input, not a series value`, e);\n };\n switch (p.kind) {\n case \"series\":\n if (!isNum(ty)) this.err(`${where} must be a number series, got ${show(ty)}`, e);\n break;\n case \"any\":\n if (ty.b === \"void\" || ty.b === \"plot\" || ty.b === \"tuple\") this.err(`${where} must be a value`, e);\n break;\n case \"num\":\n if (!isNum(ty) || ty.b === \"na\") { this.err(`${where} must be a number, got ${show(ty)}`, e); break; }\n needSimple();\n break;\n case \"int\":\n if (ty.b !== \"int\") { this.err(`${where} must be an int, got ${show(ty)}`, e); break; }\n needSimple();\n break;\n case \"bool\": case \"string\": case \"color\":\n if (ty.b !== p.kind) { this.err(`${where} must be a ${p.kind}, got ${show(ty)}`, e); break; }\n // plot()'s color may depend on the bar (cond ? colorA : colorB): plot() checks its branches\n if (sig.name === \"plot\" && p.name === \"color\" && e.k === \"tern\") break;\n needSimple();\n if (p.oneOf) {\n const sv = this.constVal(e);\n if (typeof sv === \"string\" && !p.oneOf.includes(sv)) this.err(`${where} must be one of ${p.oneOf.map((o) => JSON.stringify(o)).join(\", \")}, got ${JSON.stringify(sv)}`, e);\n }\n break;\n case \"enum\": {\n const v = this.constVal(e);\n if (typeof v !== \"string\" || !p.oneOf!.includes(v) || e.k !== \"mem\") {\n const ns = p.oneOf === ENUMS.plotStyle ? \"plot.style_*\" : p.oneOf === ENUMS.lineStyle ? \"hline.style_*\" : p.oneOf === ENUMS.shape ? \"shape.*\" : \"location.*\";\n this.err(`${where} must be one of ${ns}`, e);\n }\n break;\n }\n case \"strlist\": break;\n case \"plot\":\n if (!(e.k === \"id\" && e.sym?.kind === \"plot\")) this.err(`${where} must be a plot handle: p = plot(...)`, e);\n break;\n }\n const cv = this.constVal(e);\n if (typeof cv === \"number\" && (p.kind === \"int\" || p.kind === \"num\")) {\n if ((p.min !== undefined && cv < p.min) || (p.max !== undefined && cv > p.max)) {\n this.err(`${where} must be between ${p.min ?? \"-inf\"} and ${p.max ?? \"inf\"}, got ${cv}`, e);\n }\n }\n }\n\n private call(c: Call, mode: \"stmt\" | \"decl\" | \"expr\" | \"expr-block\"): Ty {\n const name = this.calleeName(c);\n if (name === null) { this.err(\"only named functions can be called\", c.callee); for (const a of c.args) this.expr(a.value); return ERR; }\n const sig = SIGS.get(name);\n if (!sig) {\n for (const a of c.args) this.expr(a.value);\n const near = [...SIGS.keys()].filter((k) => k.endsWith(`.${name.split(\".\").pop()}`) || k === name.split(\".\").pop());\n if (name === \"security\" || name === \"request.security\") near.unshift(\"outside\");\n this.err(`unknown function \"${name}\"${near.length ? `; did you mean ${near.slice(0, 3).join(\", \")}?` : \"\"}`, c.callee);\n return ERR;\n }\n c.fn = name;\n const declLike = name === \"plot\" || name === \"hline\" || name === \"fill\" || name === \"plotshape\" || name === \"indicator\" || name === \"barcolor\" || name === \"bgcolor\";\n if (declLike) {\n if (this.depth > 0 || mode === \"expr\" || mode === \"expr-block\") this.err(`${name}() is only allowed as a statement at the top level of the script`, c);\n else if (mode === \"decl\" && name !== \"plot\" && name !== \"hline\") this.err(`${name}() does not return a handle`, c);\n }\n if (name.startsWith(\"input.\") && mode !== \"decl\") {\n this.err(\"input.* may only be the whole right-hand side of a top-level declaration: name = input.int(...)\", c);\n for (const a of c.args) this.expr(a.value);\n return ERR;\n }\n const bound = this.bind(sig, c);\n c.bound = bound;\n // type the arguments (arrays for options are checked by the input handler)\n sig.params.forEach((p, k) => {\n const a = bound[k];\n if (!a) return;\n if (p.kind === \"strlist\") return;\n this.expr(a);\n });\n sig.params.forEach((p, k) => {\n const a = bound[k];\n if (a && p.kind !== \"strlist\") this.checkParam(sig, p, a);\n });\n let st = false;\n for (const a of bound) if (a?.st) st = true;\n c.st = st;\n if (sig.needs) this.need(sig.needs);\n const ret = sig.ret;\n switch (sig.op) {\n case \"kernel\": case \"study\": {\n // pure arguments only: the kernels run over whole columns\n sig.params.forEach((p, k) => {\n const a = bound[k];\n if (a && a.st && p.kind === \"series\") {\n this.err(`argument \"${p.name}\" of ${sig.name} depends on a variable that is declared var, assigned with :=, or is a block variable / loop counter. ${sig.name} runs over whole columns, so its inputs must be known before the bar is evaluated`, a);\n }\n });\n c.st = false;\n if (sig.op === \"study\") this.studySources(sig, bound);\n return ret;\n }\n case \"scalar\": return { b: \"float\", q: qmax(...bound.filter((x): x is Expr => !!x).map((x) => x.ty!.q)) };\n case \"special\": return this.special(sig, c, bound, mode, ret);\n }\n }\n\n /** A generic study with a second source (e.g. correl) names it in a select: no extra needs. */\n private studySources(_sig: Sig, _bound: (Expr | null)[]): void { /* needs come from the study */ }\n\n private special(sig: Sig, c: Call, bound: (Expr | null)[], mode: string, ret: Ty): Ty {\n const arg = (n: string) => bound[sig.params.findIndex((p) => p.name === n)] ?? null;\n switch (sig.name) {\n case \"nz\": {\n const r = arg(\"replacement\");\n const x = arg(\"x\")!;\n return { b: \"float\", q: qmax(x.ty!.q, r?.ty?.q ?? \"const\") };\n }\n case \"na\": return { b: \"bool\", q: arg(\"x\")!.ty!.q };\n case \"math.sum\": return ret;\n case \"ta.change\": {\n const x = arg(\"source\")!;\n if (!this.historyOk(x)) this.err(\"ta.change needs a plain series or a top-level variable, not an expression of changing variables\", x);\n c.st = !!x.st;\n return { b: \"float\", q: \"series\" };\n }\n case \"ta.crossover\": case \"ta.crossunder\": case \"ta.cross\": {\n for (const a of [arg(\"a\")!, arg(\"b\")!]) if (!this.historyOk(a)) this.err(`${sig.name} needs plain series or top-level variables, not expressions of changing variables; assign the value to a variable first`, a);\n c.st = !!(arg(\"a\")!.st || arg(\"b\")!.st);\n return { b: \"bool\", q: \"series\" };\n }\n case \"ta.bb\": {\n for (const a of bound) if (a?.st && a.ty!.q === \"series\") { this.err(\"ta.bb needs inputs known before the bar is evaluated (no var / := / block variables)\", a); break; }\n c.st = false;\n return ret;\n }\n case \"color.new\": return t(\"color\", qmax(...bound.map((x) => x!.ty!.q)));\n case \"indicator\": return this.indicator(c, bound);\n case \"plot\": return this.plot(c, bound);\n case \"hline\": return this.hline(c, bound);\n case \"fill\": return this.fill(c, bound);\n case \"plotshape\": return this.plotshape(c, bound);\n case \"barcolor\": case \"bgcolor\": return this.shade(sig.name, c, bound);\n case \"outside\": return this.outside(c, bound, ret);\n default:\n if (sig.name.startsWith(\"input.\")) return t(\"void\");\n void mode;\n return ret;\n }\n }\n\n // ---- declarations: indicator, inputs, plots ------------------------------------------\n\n private str(e: Expr | null | undefined): string | undefined {\n if (!e) return undefined;\n const v = this.constVal(e);\n if (typeof v === \"string\") return v;\n if (e.ty && e.ty !== ERR && e.ty.b === \"string\") this.err(\"this must be a string literal\", e);\n return undefined;\n }\n\n private int(e: Expr | null | undefined): number | undefined {\n if (!e) return undefined;\n const v = this.constVal(e);\n if (typeof v === \"number\") return v;\n if (e.ty && e.ty !== ERR && isNum(e.ty)) this.err(\"this must be a number literal\", e);\n return undefined;\n }\n\n /** `offset=`: a literal, or an int expression of literals and inputs, worked out when the study is built (the series is shifted by it, so `-right` puts a pivot's mark on the pivot bar). */\n private offsetArg(e: Expr | null | undefined): { offset?: number; offsetExpr?: Expr } {\n if (!e) return {};\n const v = this.constVal(e);\n if (typeof v === \"number\") return { offset: v };\n if (e.ty && e.ty !== ERR && e.ty.b === \"int\" && simple(e.ty)) return { offsetExpr: e };\n return {};\n }\n\n private indicator(c: Call, bound: (Expr | null)[]): Ty {\n if (this.sawIndicator) this.err(\"indicator() may be called only once\", c);\n this.sawIndicator = true;\n const title = this.str(bound[0]);\n if (title !== undefined) this.plan.title = title;\n const short = this.str(bound[1]);\n if (short !== undefined) this.plan.title = short;\n if (bound[2]) {\n const v = this.constVal(bound[2]);\n if (typeof v === \"boolean\") this.plan.overlay = v;\n else if (bound[2].ty && bound[2].ty !== ERR) this.err(\"overlay must be true or false\", bound[2]);\n }\n const scale = this.str(bound[3]);\n if (scale === \"left\" || scale === \"right\") this.plan.scale = scale;\n return t(\"void\");\n }\n\n private colorRef(e: Expr | null | undefined, dflt: string): ColorRef {\n if (!e) return { value: dflt };\n if (e.ty === ERR) return { value: dflt };\n const v = this.constVal(e);\n if (typeof v === \"string\" && e.ty?.b === \"color\") return { value: v };\n if (e.k === \"id\" && e.sym?.kind === \"input\" && e.sym.ty.b === \"color\") return { input: e.sym.key! };\n if (e.k === \"call\" && e.fn === \"color.new\") {\n const base = this.colorRef(e.bound![0], dflt);\n const tr = e.bound![1] ? this.constVal(e.bound![1]!) : undefined;\n if (\"value\" in base && typeof tr === \"number\") return { value: withTransparency(base.value, tr) };\n }\n this.err(\"a color here must be a constant (color.red, #rrggbb, color.new(...)) or an input.color variable\", e);\n return { value: dflt };\n }\n\n private nextKey(title: string, n: number): string {\n let k = slug(title) || `plot${n}`;\n if (/^[0-9]/.test(k)) k = `p-${k}`;\n let u = k, i = 2;\n while (this.keys.has(u)) u = `${k}-${i++}`;\n this.keys.add(u);\n return u;\n }\n\n private plot(c: Call, b: (Expr | null)[]): Ty {\n const n = this.plan.plots.length;\n if (n >= 64) this.err(\"a script may draw at most 64 plots\", c);\n const title = this.str(b[1]) ?? `Plot ${n + 1}`;\n const style = (b[4] ? (this.constVal(b[4]) as string | undefined) : undefined) ?? \"line\";\n const width = this.int(b[3]);\n const shift = this.offsetArg(b[5]);\n const down = b[6] ? this.colorRef(b[6], \"#f23645\") : undefined;\n if (down && \"input\" in down) this.err(\"color_down must be a constant color\", b[6]!);\n const dflt = [\"#2962ff\", \"#ff6d00\", \"#089981\", \"#f23645\", \"#9c27b0\", \"#fbc02d\"][n % 6]!;\n // a color that depends on the bar: `cond ? colorA : colorB` with a bool series for the condition\n const ce = b[2];\n let color: ColorRef;\n let colorWhen: PlotSpec[\"colorWhen\"];\n if (ce && ce.k === \"tern\" && ce.c.ty && ce.c.ty !== ERR && ce.c.ty.q === \"series\" && ce.ty && ce.ty.b === \"color\") {\n const a = this.colorRef(ce.a, dflt), other = this.colorRef(ce.b, dflt);\n if (style !== \"line\") this.err(\"a color that depends on the bar is for line plots; histogram and area take a constant color (a histogram can use color_down for negative values)\", ce);\n else if (!(\"value\" in a) || !(\"value\" in other)) this.err(\"both colors of a color that depends on the bar must be constants (color.red, #rrggbb, color.new(...)), not an input.color\", ce);\n color = \"value\" in other ? other : { value: dflt };\n if (\"value\" in a && \"value\" in other && style === \"line\") colorWhen = { cond: ce.c, color: a.value };\n } else color = this.colorRef(ce, dflt);\n this.plan.plots.push({\n kind: style as \"line\", key: this.nextKey(title, n + 1), title, color, expr: b[0]!,\n ...(width !== undefined && { width }), ...shift,\n ...(down && \"value\" in down && { colorDown: down.value }), ...(colorWhen && { colorWhen }), span: c,\n });\n return t(\"plot\");\n }\n\n /** barcolor(cond, color) and bgcolor(cond, color): a colour for the bars (or the pane) where a bool is true. */\n private shade(name: \"barcolor\" | \"bgcolor\", c: Call, b: (Expr | null)[]): Ty {\n const n = this.plan.plots.length;\n if (n >= 64) this.err(\"a script may draw at most 64 plots\", c);\n const x = b[0]!;\n if (x.ty && x.ty !== ERR && x.ty.b !== \"bool\") this.err(`${name} needs a bool condition, got ${show(x.ty)}`, x);\n const title = `${name === \"barcolor\" ? \"Bar color\" : \"Background\"} ${n + 1}`;\n this.plan.plots.push({ kind: name, key: this.nextKey(title, n + 1), title, color: this.colorRef(b[1], name === \"barcolor\" ? \"#fdd835\" : \"#2962ff33\"), expr: x, span: c });\n return t(\"void\");\n }\n\n /** outside(symbol, field, timeframe): a number series of another instrument and/or timeframe. Everything is read here, without running anything. */\n private outside(c: Call, b: (Expr | null)[], ret: Ty): Ty {\n const text = (e: Expr | null | undefined, what: \"symbol\" | \"timeframe\"): string | null | undefined => {\n if (!e) return null;\n if (e.k === \"id\" && e.name === \"na\" && !e.sym) return null;\n if (e.k === \"str\") return e.value;\n if (e.ty && e.ty !== ERR) this.err(`the ${what} of outside() must be a string literal${what === \"timeframe\" ? ' like \"1d\"' : \"\"}, or na for this chart's, not a computed value`, e);\n return undefined;\n };\n const symbol = text(b[0], \"symbol\"), timeframe = text(b[2], \"timeframe\");\n if (symbol === undefined || timeframe === undefined) return ret;\n if (symbol !== null && (symbol.length < 1 || symbol.length > 128 || /[\\u0000-\\u001f]/.test(symbol))) {\n this.err(\"the symbol of outside() must be 1 to 128 printable characters\", b[0]!);\n return ret;\n }\n if (timeframe !== null && parseTimeframe(timeframe) === null) {\n this.err(`the timeframe \"${timeframe}\" is not written like 5m, 15m, 1h, 4h, 1d or 1w`, b[2]!);\n return ret;\n }\n if (symbol === null && timeframe === null) {\n this.err(\"outside() needs a symbol or a timeframe; this chart's own series are close, open, high, low and volume\", c);\n return ret;\n }\n const field = (b[1] ? (this.constVal(b[1]) as string | undefined) : undefined) ?? \"close\";\n c.feed = feedKey(symbol, timeframe);\n c.own = timeframe !== null;\n if (!this.plan.dependencies.some((d) => d.symbol === symbol && d.timeframe === timeframe && d.field === field)) {\n this.plan.dependencies.push({ symbol, field: field as Dependency[\"field\"], timeframe });\n const feeds = feedsOf(this.plan.dependencies).length;\n if (feeds > this.limits.maxFeeds) this.err(`a script may read at most ${this.limits.maxFeeds} outside series (distinct symbol and timeframe pairs)`, c);\n }\n return ret;\n }\n\n private hline(c: Call, b: (Expr | null)[]): Ty {\n const n = this.plan.plots.length;\n const title = this.str(b[1]) ?? `Level ${n + 1}`;\n const ls = b[3] ? (this.constVal(b[3]) as string | undefined) : undefined;\n this.plan.plots.push({ kind: \"hline\", key: this.nextKey(title, n + 1), title, color: this.colorRef(b[2], \"#787b86\"), expr: b[0]!, ...(ls && { lineStyle: ls }), span: c });\n return t(\"plot\");\n }\n\n private fill(c: Call, b: (Expr | null)[]): Ty {\n const n = this.plan.plots.length;\n const title = this.str(b[3]) ?? `Fill ${n + 1}`;\n const idx = (e: Expr | null | undefined): number | undefined => (e && e.k === \"id\" && e.sym?.kind === \"plot\" ? Number(e.sym.key) : undefined);\n const a = idx(b[0]), bb = idx(b[1]);\n for (const [i, e] of [[a, b[0]], [bb, b[1]]] as const) {\n if (i === undefined) continue;\n const plot = this.plan.plots[i]!;\n if (plot.kind === \"hline\") plot.column = true;\n else if (plot.kind !== \"line\") this.err(\"fill needs line plots or hline levels (not histogram, area or markers)\", e!);\n }\n if (a !== undefined && a === bb) this.err(\"fill needs two different plots\", c);\n this.plan.plots.push({ kind: \"fill\", key: this.nextKey(title, n + 1), title, color: this.colorRef(b[2], \"#2962ff33\"), ...(a !== undefined && { a }), ...(bb !== undefined && { b: bb }), span: c });\n return t(\"void\");\n }\n\n private plotshape(c: Call, b: (Expr | null)[]): Ty {\n const n = this.plan.plots.length;\n const x = b[0]!;\n const title = this.str(b[1]) ?? `Shape ${n + 1}`;\n const shape = (b[2] ? (this.constVal(b[2]) as string | undefined) : undefined) ?? \"circle\";\n const loc = (b[3] ? (this.constVal(b[3]) as string | undefined) : undefined) ?? \"above\";\n const xt = x.ty;\n if (xt && xt !== ERR) {\n if (xt.b === \"bool\" && loc === \"value\") this.err(\"location.absolute needs a number (the price to mark), not a bool\", x);\n else if (xt.b !== \"bool\" && loc !== \"value\") this.err(\"plotshape marks bars where a bool is true; for a number use location=location.absolute\", x);\n else if (xt.b !== \"bool\" && !isNum(xt)) this.err(`plotshape needs a bool or a number, got ${show(xt)}`, x);\n }\n const shift = this.offsetArg(b[5]);\n const last = this.int(b[6]);\n const within = this.int(b[7]);\n this.plan.plots.push({ kind: \"markers\", key: this.nextKey(title, n + 1), title, color: this.colorRef(b[4], \"#2962ff\"), expr: x, shape, position: loc, ...shift, ...(last !== undefined && { last }), ...(within !== undefined && { within }), span: c });\n return t(\"void\");\n }\n\n private inputDecl(s: VarDecl): void {\n const c = s.init as Call;\n const name = this.calleeName(c)!;\n const sig = SIGS.get(name);\n if (!sig) { this.err(`unknown function \"${name}\"`, c.callee); this.skipInputArgs(c); return; }\n c.fn = name;\n const bound = this.bind(sig, c);\n c.bound = bound;\n const kind = name.slice(\"input.\".length) as InputSpec[\"kind\"];\n const idx = (n: string) => sig.params.findIndex((p) => p.name === n);\n const arg = (n: string) => bound[idx(n)] ?? null;\n // arguments are literals; type them so errors point at the right place\n sig.params.forEach((p, k) => {\n const a = bound[k];\n if (!a) return;\n if (p.kind === \"strlist\") {\n if (a.k !== \"arr\" || a.items.length === 0 || a.items.some((i) => i.k !== \"str\")) this.err('options must be a non-empty list of string literals: options=[\"a\", \"b\"]', a);\n return;\n }\n if (name === \"input.source\" && p.name === \"defval\") return;\n this.expr(a);\n this.checkParam(sig, p, a);\n if (a.ty && a.ty !== ERR && a.ty.q !== \"const\" && p.kind !== \"series\") this.err(`${p.name} of ${name} must be a literal`, a);\n });\n let dflt: number | boolean | string = 0;\n const dv = arg(\"defval\");\n const label = this.str(arg(\"title\")) ?? s.name;\n const spec: InputSpec = { key: s.name, kind, label, default: 0, span: s.nameSpan };\n if (dv) {\n if (name === \"input.source\") {\n if (dv.k === \"id\" && (SOURCE_NAMES as readonly string[]).includes(dv.name) && !this.scope.find(dv.name)) {\n dflt = dv.name;\n dv.ty = FLOAT_S;\n this.need(dv.name === \"close\" ? \"value\" : \"ohlc\");\n } else this.err(`the default of input.source must be one of ${SOURCE_NAMES.join(\", \")}`, dv);\n } else {\n const v = this.constVal(dv);\n if (v !== undefined) dflt = v;\n }\n }\n spec.default = dflt;\n if (kind === \"int\" || kind === \"float\") {\n const mn = arg(\"minval\") ? this.int(arg(\"minval\")) : undefined, mx = arg(\"maxval\") ? this.int(arg(\"maxval\")) : undefined, st = arg(\"step\") ? this.int(arg(\"step\")) : undefined;\n if (mn !== undefined) spec.min = mn;\n if (mx !== undefined) spec.max = mx;\n if (st !== undefined) { if (st <= 0) this.err(\"step must be positive\", arg(\"step\")!); else spec.step = st; }\n if (typeof dflt === \"number\" && ((mn !== undefined && dflt < mn) || (mx !== undefined && dflt > mx))) this.err(`the default ${dflt} is outside [${mn ?? \"-inf\"}, ${mx ?? \"inf\"}]`, dv!);\n if (mn !== undefined && mx !== undefined && mn > mx) this.err(\"minval is above maxval\", c);\n }\n if (kind === \"string\") {\n const o = arg(\"options\");\n const opts = o && o.k === \"arr\" ? o.items.filter((i) => i.k === \"str\").map((i) => (i as { value: string }).value) : [];\n spec.options = opts;\n if (opts.length > 0 && !opts.includes(dflt as string)) this.err(`the default \"${String(dflt)}\" is not one of the options`, dv!);\n }\n if (kind === \"color\" && typeof dflt === \"string\" && !/^#[0-9a-f]{6}([0-9a-f]{2})?$/.test(dflt)) this.err(\"the default must be a color\", dv!);\n this.plan.inputs.push(spec);\n const ty: Ty = kind === \"source\" ? FLOAT_S : kind === \"string\" ? t(\"string\", \"input\") : t(kind as Ty[\"b\"], \"input\");\n const sym: Sym = { name: s.name, kind: \"input\", ty, key: s.name };\n this.declare(s.name, sym, s.nameSpan);\n s.sym = sym;\n s.init.ty = ty;\n void INT_S;\n void BOOL_S;\n }\n}\n\nexport function withTransparency(hex: string, transp: number): string {\n const h = hex.slice(1);\n const r = parseInt(h.slice(0, 2), 16), g = parseInt(h.slice(2, 4), 16), b = parseInt(h.slice(4, 6), 16);\n const a = Math.round((1 - transp / 100) * 1000) / 1000;\n return `rgba(${r},${g},${b},${a})`;\n}\n\nexport function check(prog: Program, rep: Reporter, limits = DEFAULT_LIMITS): Plan {\n return new Checker(rep, limits).run(prog);\n}\nexport type { Arg };\n","// Code generation: a checked Plan becomes a StudyDef for the indicators engine.\n//\n// Nothing here evaluates text: the output is a tree of JavaScript closures built\n// from the syntax tree, so no identifier or string of a script can become code.\n//\n// Evaluation model (see README \"How a script runs\"):\n// - pure parts (functions of the bars and inputs) become whole-column graph\n// nodes; ta.* calls are the same kernels the built-in studies use, so the\n// numbers are identical;\n// - the stateful part (var, :=, if, for) is one per-bar node. A var lives in\n// its column: bar i restarts from bar i-1's committed value, so a revised\n// last bar recomputes from committed state exactly like a built-in.\n\nimport type { Col, Graph, InputDef, Params, PlotDef, StudyDef } from \"@alphacharts/indicators\";\nimport { resolveParams, SOURCE_NAMES } from \"@alphacharts/indicators\";\nimport type { Call, Expr, Stmt, Sym } from \"./ast.js\";\nimport { ScriptError, type Span } from \"./diag.js\";\nimport { SIGS, type Sig } from \"./builtins.js\";\nimport type { Plan, PlotSpec } from \"./check.js\";\nimport type { Dependency } from \"./feeds.js\";\nimport { CHART_DOM, CONST_DOM } from \"./check.js\";\nimport { DEFAULT_LIMITS, MAX_HISTORY, type Limits } from \"./limits.js\";\n\ntype Ev = (i: number) => number;\ntype Mode = \"col\" | \"exec\";\nconst NaN_ = Number.NaN;\nconst truthy = (v: number) => v === v && v !== 0;\n\nexport interface ColorInput { key: string; label: string; default: string; plotKeys: string[] }\n\nexport interface Compiled {\n def: StudyDef;\n colorInputs: ColorInput[];\n}\n\nfunction hash(s: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 0x01000193) >>> 0;\n return h.toString(16).padStart(8, \"0\");\n}\n\nexport function generate(plan: Plan, source: string, limits: Limits = DEFAULT_LIMITS): Compiled {\n const inputDefs: InputDef[] = [];\n const colorInputs: ColorInput[] = [];\n for (const s of plan.inputs) {\n switch (s.kind) {\n case \"int\": inputDefs.push({ key: s.key, label: s.label, type: \"int\", default: s.default as number, ...(s.min !== undefined && { min: s.min }), ...(s.max !== undefined && { max: s.max }), step: s.step ?? 1 }); break;\n case \"float\": inputDefs.push({ key: s.key, label: s.label, type: \"float\", default: s.default as number, ...(s.min !== undefined && { min: s.min }), ...(s.max !== undefined && { max: s.max }), ...(s.step !== undefined && { step: s.step }) }); break;\n case \"bool\": inputDefs.push({ key: s.key, label: s.label, type: \"bool\", default: s.default as boolean }); break;\n case \"string\": inputDefs.push({ key: s.key, label: s.label, type: \"select\", default: s.default as string, options: s.options! }); break;\n case \"source\": inputDefs.push({ key: s.key, label: s.label, type: \"source\", default: s.default as string, options: SOURCE_NAMES }); break;\n case \"color\": colorInputs.push({ key: s.key, label: s.label, default: s.default as string, plotKeys: [] }); break;\n }\n }\n const inputDefault = (key: string) => plan.inputs.find((i) => i.key === key)!.default as string;\n\n // columns and plot definitions\n const columns: string[] = [];\n const plots: PlotDef[] = [];\n const colOfPlot = new Map<number, string>();\n plan.plots.forEach((sp, idx) => {\n const color = \"value\" in sp.color ? sp.color.value : inputDefault(sp.color.input);\n if (\"input\" in sp.color) colorInputs.find((c) => c.key === (sp.color as { input: string }).input)!.plotKeys.push(sp.key);\n const base = { key: sp.key, title: sp.title };\n switch (sp.kind) {\n case \"line\": {\n columns.push(sp.key);\n // a colour that depends on the bar rides along as a second column right after the line's own\n const when = sp.colorWhen ? `${sp.key}~when` : undefined;\n if (when) columns.push(when);\n colOfPlot.set(idx, sp.key);\n plots.push({ kind: \"line\", ...base, col: sp.key, color, ...(sp.width !== undefined && { width: sp.width }), ...offsetOf(sp, plan, limits), ...(when && { colorBy: { col: when, color: sp.colorWhen!.color } }) });\n break;\n }\n case \"barcolor\": columns.push(sp.key); plots.push({ kind: \"barcolor\", ...base, col: sp.key, color }); break;\n case \"bgcolor\": columns.push(sp.key); plots.push({ kind: \"bgcolor\", ...base, col: sp.key, color }); break;\n case \"histogram\": columns.push(sp.key); plots.push({ kind: \"histogram\", ...base, col: sp.key, color, ...(sp.colorDown && { colorDown: sp.colorDown }) }); break;\n case \"area\": columns.push(sp.key); plots.push({ kind: \"area\", ...base, col: sp.key, color }); break;\n case \"markers\": columns.push(sp.key); plots.push({ kind: \"markers\", ...base, col: sp.key, shape: sp.shape as \"circle\", position: sp.position as \"above\", color, ...offsetOf(sp, plan, limits), ...(sp.last !== undefined && { last: sp.last }), ...(sp.within !== undefined && { within: sp.within }) }); break;\n case \"hline\":\n // a fill between this level and another plot reads it as a column, constant on every bar\n if (sp.column) {\n const col = `${sp.key}~level`;\n columns.push(col);\n colOfPlot.set(idx, col);\n }\n plots.push({ kind: \"hline\", ...base, value: (p: Params) => new Builder(null, p, plan, limits).simpleNumber(sp.expr!), color, style: (sp.lineStyle ?? \"dashed\") as \"dashed\" });\n break;\n case \"fill\": plots.push({ kind: \"fill\", ...base, a: colOfPlot.get(sp.a!)!, b: colOfPlot.get(sp.b!)!, color }); break;\n }\n });\n\n const def: StudyDef = {\n id: `script-${hash(source)}`,\n name: plan.title,\n family: \"tv\",\n inputs: inputDefs,\n needs: plan.needs,\n pane: plan.overlay ? \"overlay\" : \"new\",\n ...(plan.scale === \"left\" && { scale: \"left\" as const }),\n columns,\n plots,\n build: (g, p) => new Builder(g, p, plan, limits).build(),\n reference: \"alphacharts script\",\n };\n return { def, colorInputs };\n}\n\n/** A plot's `offset`: the number written, or the function of the study's inputs that works out the expression written (an int input, `-right`). */\nfunction offsetOf(sp: PlotSpec, plan: Plan, limits: Limits): { offset?: number | ((p: Params) => number) } {\n if (sp.offsetExpr) {\n const e = sp.offsetExpr;\n return {\n offset: (p: Params) => {\n const v = new Builder(null, p, plan, limits).simpleNumber(e);\n if (!Number.isInteger(v) || v < -5000 || v > 5000) throw new ScriptError(`offset must be a whole number between -5000 and 5000, got ${v}`, sp.span, \"runtime\");\n return v;\n },\n };\n }\n return sp.offset !== undefined ? { offset: sp.offset } : {};\n}\n\nclass Builder {\n private readonly simple = new Map<Sym, number | string>();\n private readonly pure = new Map<Sym, Col>();\n private readonly stateCols = new Map<Sym, Col>();\n private readonly hoisted = new Map<Expr, Col[]>();\n private readonly mats = new Map<Expr, Col>();\n private readonly inits = new Map<Sym, Expr>();\n private S: Float64Array;\n private readonly ctx = { steps: 0 };\n private tr: Col | null = null;\n private bpy: Col | null = null;\n /**\n * Where expressions are being built: the chart's graph, or an outside series' own graph (`key`) while a window or\n * history of its values is built on its own bars.\n */\n private fx: { g: Graph | null; key: string | null };\n /** An outside series' column, by the column, read through the join onto the chart's bars. */\n private readonly joinedCols = new Map<Col, Col>();\n private readonly sameCols = new Map<string, Col>();\n\n constructor(private readonly g: Graph | null, private readonly p: Params, private readonly plan: Plan, private readonly limits: Limits) {\n this.fx = { g, key: null };\n this.S = new Float64Array(plan.slots);\n for (const s of plan.body) if (s.k === \"decl\" && s.sym) this.inits.set(s.sym, s.init);\n }\n\n private G(): Graph {\n if (!this.fx.g) throw new ScriptError(\"a series is not available here\");\n return this.fx.g;\n }\n\n /** The key of the outside series an expression is computed on, or null (the chart's bars, or none). */\n private feedDom(e: Expr): string | null {\n const d = e.dom;\n return d !== undefined && d !== CHART_DOM && d !== CONST_DOM ? d : null;\n }\n\n private inFeed<T>(key: string, fn: () => T): T {\n const saved = this.fx;\n this.fx = { g: this.g!.feed(key).graph, key };\n try { return fn(); } finally { this.fx = saved; }\n }\n\n /**\n * Expression `e`, which lives on outside series `key`'s own bars, read on the chart's bars: its windows and histories\n * are built on the series' graph, and the result is joined by time (indicators/src/engine/feed.ts).\n */\n private joinedCol(key: string, e: Expr): Col {\n const inner = this.inFeed(key, () => this.colOf(e));\n let c = this.joinedCols.get(inner);\n if (!c) this.joinedCols.set(inner, (c = this.G().joined(key, inner)));\n return c;\n }\n\n /**\n * An `outside(...)` call as a column: inside its own series' graph its raw field; on the chart's bars (a series on the\n * chart's own timeframe) its field read through the join.\n */\n private rawCol(c: Call): Col {\n const fld = c.bound![1];\n const field = (fld && fld.k === \"str\" ? fld.value : \"close\") as Dependency[\"field\"];\n if (this.fx.key !== null) return this.G()[field];\n const memo = `${c.feed}\\u0002${field}`;\n let col = this.sameCols.get(memo);\n if (!col) this.sameCols.set(memo, (col = this.G().external(c.feed!, field)));\n return col;\n }\n\n // ---- program -------------------------------------------------------------------\n\n build(): Col[] {\n const g = this.G();\n const exec: Stmt[] = [];\n for (const s of this.plan.body) {\n switch (s.k) {\n case \"decl\": {\n const sym = s.sym!;\n if (sym.kind === \"state\") exec.push(s);\n else if (sym.kind === \"pure\") {\n // a value on an outside series' own bars is kept there; reading it on the chart joins it\n const fk = this.feedDom(s.init);\n this.pure.set(sym, fk ? this.inFeed(fk, () => this.colOf(s.init)) : this.colOf(s.init));\n }\n break;\n }\n case \"tuple\": {\n const fk = this.feedDom(s.init);\n const cols = fk ? this.inFeed(fk, () => this.hoist(s.init as Call)) : this.hoist(s.init as Call);\n s.syms!.forEach((sym, k) => this.pure.set(sym, cols[k]!));\n break;\n }\n case \"assign\": case \"if\": case \"for\": exec.push(s); break;\n default: break;\n }\n }\n if (exec.length > 0 || this.plan.stateVars.length > 0) this.buildExec(exec);\n const out: Col[] = [];\n for (const sp of this.plan.plots) {\n if (sp.kind === \"hline\" && sp.column) {\n const level = this.simpleNumber(sp.expr!);\n out.push(g.calc(() => level));\n continue;\n }\n if (sp.kind === \"hline\" || sp.kind === \"fill\") continue;\n if (sp.kind === \"markers\" || sp.kind === \"barcolor\" || sp.kind === \"bgcolor\") { out.push(this.markers(sp)); continue; }\n out.push(this.colOf(sp.expr!));\n if (sp.colorWhen) out.push(this.colOf(sp.colorWhen.cond));\n }\n // the columns an outside series' own graph holds count too (its six bar columns and whatever is computed on them)\n let cols = g.cols.length;\n for (const f of g.feeds.values()) cols += f.graph.cols.length;\n if (cols > this.limits.maxColumns) throw new ScriptError(`the script needs ${cols} columns; the limit is ${this.limits.maxColumns}`);\n return out;\n }\n\n /** One for a bar where the condition holds, absent elsewhere (markers, barcolor, bgcolor); with an absolute location, the value itself. */\n private markers(sp: PlotSpec): Col {\n const e = sp.expr!;\n const f = this.ev(e, \"col\");\n const absolute = sp.position === \"value\";\n return this.G().calc(absolute ? f : (i) => (truthy(f(i)) ? 1 : NaN_));\n }\n\n private buildExec(stmts: Stmt[]): void {\n const g = this.G();\n for (const sym of this.plan.stateVars) this.stateCols.set(sym, g.col());\n const run = stmts.map((s) => this.stmt(s));\n const S = this.S, ctx = this.ctx, max = this.limits.maxSteps;\n const vars = this.plan.stateVars.map((sym) => ({ slot: sym.slot!, col: this.stateCols.get(sym)!, restore: !!sym.isVar }));\n g.node((_self, from, to) => {\n void max;\n for (let i = from; i < to; i++) {\n ctx.steps = 0; // the budget is per bar: it must not depend on how many bars a batch holds\n for (const v of vars) if (v.restore) S[v.slot] = i > 0 ? v.col.v[i - 1]! : NaN_;\n for (const r of run) r(i);\n for (const v of vars) v.col.v[i] = S[v.slot]!;\n }\n });\n }\n\n private step(span: Span): void {\n if (++this.ctx.steps > this.limits.maxSteps) throw new ScriptError(`execution budget exceeded: more than ${this.limits.maxSteps} loop steps in one bar`, span, \"budget\");\n }\n\n private stmt(s: Stmt): (i: number) => void {\n const S = this.S;\n switch (s.k) {\n case \"decl\": {\n const f = this.ev(s.init, \"exec\"), slot = s.sym!.slot!;\n return s.isVar ? (i) => { if (i === 0) S[slot] = f(i); } : (i) => { S[slot] = f(i); };\n }\n case \"assign\": {\n const f = this.ev(s.value, \"exec\"), slot = s.sym!.slot!;\n switch (s.op) {\n case \":=\": return (i) => { S[slot] = f(i); };\n case \"+=\": return (i) => { S[slot] = S[slot]! + f(i); };\n case \"-=\": return (i) => { S[slot] = S[slot]! - f(i); };\n case \"*=\": return (i) => { S[slot] = S[slot]! * f(i); };\n case \"/=\": return (i) => { const d = f(i); S[slot] = d === 0 ? NaN_ : S[slot]! / d; };\n default: return (i) => { const d = f(i); S[slot] = d === 0 ? NaN_ : S[slot]! % d; };\n }\n }\n case \"if\": {\n const c = this.ev(s.cond, \"exec\"), a = s.then.map((x) => this.stmt(x)), b = (s.else ?? []).map((x) => this.stmt(x));\n return (i) => { for (const r of truthy(c(i)) ? a : b) r(i); };\n }\n case \"for\": {\n const lo = this.ev(s.lo, \"exec\"), hi = this.ev(s.hi, \"exec\"), by = s.by ? this.ev(s.by, \"exec\") : null;\n const body = s.body.map((x) => this.stmt(x)), slot = s.sym!.slot!, maxIt = this.limits.maxLoopIterations;\n return (i) => {\n const a = lo(i), b = hi(i);\n let st = by ? by(i) : a <= b ? 1 : -1;\n if (!Number.isFinite(a) || !Number.isFinite(b) || !Number.isFinite(st) || st === 0) throw new ScriptError(\"loop bounds must be finite and the step non-zero\", s, \"runtime\");\n if (by && ((st > 0 && a > b) || (st < 0 && a < b))) return;\n if (!by && a > b) st = -1;\n const trips = Math.floor(Math.abs(b - a) / Math.abs(st)) + 1;\n if (trips > maxIt) throw new ScriptError(`this loop would run ${trips} times; the limit is ${maxIt} iterations per loop`, s, \"budget\");\n let v = a;\n for (let k = 0; k < trips; k++, v += st) {\n this.step(s);\n S[slot] = v;\n for (const r of body) r(i);\n }\n };\n }\n default: return () => {};\n }\n }\n\n // ---- series ---------------------------------------------------------------------\n\n private srcCol(name: string): Col {\n const g = this.G();\n switch (name) {\n case \"volume\": return g.volume;\n case \"time\": return g.time;\n case \"bar_index\": return g.calc((i) => i);\n case \"bars_per_year\": return this.fx.key === null ? (this.bpy ??= g.barsPerYear()) : g.barsPerYear();\n default: return g.src(name as \"close\");\n }\n }\n\n /** The column holding a series expression (materialised once). */\n colOf(e: Expr): Col {\n const fk = this.feedDom(e);\n if (fk && this.fx.key === null) return this.joinedCol(fk, e);\n if (e.k === \"call\" && e.fn === \"outside\") return this.rawCol(e);\n const g = this.G();\n if (e.k === \"id\" && e.sym) {\n const s = e.sym;\n if (s.kind === \"builtin\") return this.memo(e, () => this.srcCol(s.key!));\n if (s.kind === \"pure\") return this.pure.get(s)!;\n if (s.kind === \"state\") return this.stateCols.get(s)!;\n if (s.kind === \"input\" && s.ty.b === \"float\" && s.ty.q === \"series\") return this.srcCol(String(this.p[s.key!]));\n }\n if (e.k === \"call\" && this.isHoisted(e)) return this.hoist(e)[0]!;\n return this.memo(e, () => {\n const f = this.ev(e, \"col\");\n return g.calc(f);\n });\n }\n\n private memo(e: Expr, make: () => Col): Col {\n let c = this.mats.get(e);\n if (!c) this.mats.set(e, (c = make()));\n return c;\n }\n\n private isHoisted(c: Call): boolean {\n const sig = SIGS.get(c.fn!);\n return !!sig && (sig.op === \"kernel\" || sig.op === \"study\" || sig.name === \"ta.bb\");\n }\n\n private num(e: Expr | null | undefined, what: string, min: number, max: number, int = true): number {\n const v = this.ev(e!, \"col\")(0);\n if (!Number.isFinite(v) || (int && !Number.isInteger(v)) || v < min || v > max) {\n throw new ScriptError(`${what} must be ${int ? \"an integer\" : \"a number\"} between ${min} and ${max}, got ${v}`, e!, \"build\");\n }\n return v;\n }\n\n private hoist(c: Call): Col[] {\n const hit = this.hoisted.get(c);\n if (hit) return hit;\n const sig = SIGS.get(c.fn!)!;\n const b = c.bound!;\n const g = this.G();\n const lim = this.limits.maxPeriod;\n let out: Col[];\n const len = (k: number) => this.num(b[k], `the length of ${sig.name}`, 1, lim);\n switch (sig.name) {\n case \"ta.sma\": out = [g.sma(this.colOf(b[0]!), len(1))]; break;\n case \"ta.ema\": out = [g.ema(this.colOf(b[0]!), len(1))]; break;\n case \"ta.wma\": out = [g.wma(this.colOf(b[0]!), len(1))]; break;\n case \"ta.rma\": out = [g.rma(this.colOf(b[0]!), len(1))]; break;\n case \"ta.highest\": out = [g.highest(this.colOf(b[0]!), len(1))]; break;\n case \"ta.lowest\": out = [g.lowest(this.colOf(b[0]!), len(1))]; break;\n case \"ta.highestbars\": out = [g.highestBars(this.colOf(b[0]!), len(1))]; break;\n case \"ta.lowestbars\": out = [g.lowestBars(this.colOf(b[0]!), len(1))]; break;\n case \"ta.stdev\": case \"ta.variance\": {\n const sample = !!b[2] && truthy(this.ev(b[2], \"col\")(0));\n const n = sample ? this.num(b[1], `the length of ${sig.name} with sample=true`, 2, lim) : len(1);\n out = [sig.name === \"ta.stdev\" ? g.stdev(this.colOf(b[0]!), n, sample) : g.variance(this.colOf(b[0]!), n, sample)];\n break;\n }\n case \"ta.sum\": case \"math.sum\": out = [g.sum(this.colOf(b[0]!), len(1))]; break;\n case \"ta.linreg\": {\n const n = this.num(b[1], \"the length of ta.linreg\", 2, lim);\n out = [g.linreg(this.colOf(b[0]!), n).value];\n break;\n }\n case \"ta.atr\": out = [g.atr(len(0))]; break;\n case \"ta.bb\": {\n const def = SIGS.get(\"ta.bbands\")!.study!;\n const mult = this.num(b[2], \"mult of ta.bb\", 0, 100, false);\n const cols = this.runStudy(def, { length: len(1), multUp: mult, multDn: mult }, this.colOf(b[0]!));\n out = [cols[1]!, cols[0]!, cols[2]!];\n break;\n }\n default: out = this.hoistStudy(sig, c);\n }\n this.hoisted.set(c, out);\n return out;\n }\n\n private hoistStudy(sig: Sig, c: Call): Col[] {\n const def = sig.study!;\n const given: Record<string, unknown> = {};\n let srcCol: Col | null = null;\n sig.params.forEach((prm, k) => {\n const a = c.bound![k];\n if (!a) return;\n const inp = prm.input!;\n if (inp.type === \"source\") { srcCol = this.colOf(a); return; }\n if (inp.type === \"select\") { given[inp.key] = this.str(a); return; }\n if (inp.type === \"bool\") { given[inp.key] = truthy(this.ev(a, \"col\")(0)); return; }\n const v = this.ev(a, \"col\")(0);\n if (!Number.isFinite(v) || (inp.type === \"int\" && !Number.isInteger(v)) || (inp.min !== undefined && v < inp.min) || (inp.max !== undefined && v > inp.max)) {\n throw new ScriptError(`${inp.key} of ${sig.name} must be ${inp.type === \"int\" ? \"an integer\" : \"a number\"}${inp.min !== undefined ? ` >= ${inp.min}` : \"\"}${inp.max !== undefined ? ` <= ${inp.max}` : \"\"}, got ${v}`, a);\n }\n given[inp.key] = v;\n });\n try {\n return this.runStudy(def, given, srcCol);\n } catch (e) {\n if (e instanceof ScriptError) throw e;\n throw new ScriptError(`${sig.name}: ${e instanceof Error ? e.message : String(e)}`, c);\n }\n }\n\n /** Build a built-in study's nodes on this graph, with its `source` input bound to `src`. */\n private runStudy(def: StudyDef, given: Record<string, unknown>, src: Col | null): Col[] {\n // validated like addStudy validates a built-in's inputs: an unknown name or a value outside the schema is an error, never a default\n const p = resolveParams(def, given as Record<string, number | boolean | string>);\n const gv = Object.create(this.G()) as Graph;\n if (src) (gv as { src: (n: string) => Col }).src = () => src;\n return [...def.build(gv, p)];\n }\n\n // ---- expressions ----------------------------------------------------------------\n\n private str(e: Expr): string {\n switch (e.k) {\n case \"str\": return e.value;\n case \"color\": return e.value;\n case \"mem\": return String(e.cv);\n case \"id\": {\n const s = e.sym!;\n if (s.kind === \"input\") return String(this.p[s.key!]);\n if (s.kind === \"simple\") return String(this.simpleVal(s));\n break;\n }\n case \"tern\": return truthy(this.ev(e.c, \"col\")(0)) ? this.str(e.a) : this.str(e.b);\n case \"call\": if (e.fn === \"color.new\") return String(this.simpleVal2(e)); break;\n default: break;\n }\n throw new ScriptError(\"this string cannot be evaluated here\", e);\n }\n\n private simpleVal2(e: Call): string {\n return String(e.fn);\n }\n\n private simpleVal(s: Sym): number | string {\n const hit = this.simple.get(s);\n if (hit !== undefined) return hit;\n const init = this.inits.get(s)!;\n const v = init.ty!.b === \"string\" || init.ty!.b === \"color\" ? this.str(init) : this.ev(init, \"col\")(0);\n this.simple.set(s, v);\n return v;\n }\n\n simpleNumber(e: Expr): number {\n return this.ev(e, \"col\")(0);\n }\n\n private hist(x: Expr, k: Ev, mode: Mode, span: Span): Ev {\n const S = this.S;\n const bad = (v: number) => { throw new ScriptError(`the history offset must be an integer between 0 and ${MAX_HISTORY}, got ${v}`, span, \"runtime\"); };\n if (x.k === \"id\" && x.sym?.kind === \"state\" && mode === \"exec\") {\n const slot = x.sym.slot!, col = this.stateCols.get(x.sym)!;\n return (i) => {\n const n = k(i);\n if (!Number.isInteger(n) || n < 0 || n > MAX_HISTORY) return bad(n);\n return n === 0 ? S[slot]! : i - n >= 0 ? col.v[i - n]! : NaN_;\n };\n }\n const col = this.colOf(x);\n return (i) => {\n const n = k(i);\n if (!Number.isInteger(n) || n < 0 || n > MAX_HISTORY) return bad(n);\n return i - n >= 0 ? col.v[i - n]! : NaN_;\n };\n }\n\n ev(e: Expr, mode: Mode): Ev {\n const S = this.S;\n const fk = this.feedDom(e);\n if (fk && this.fx.key === null) {\n const c = this.joinedCol(fk, e);\n return (i) => c.v[i]!;\n }\n switch (e.k) {\n case \"num\": { const v = e.value; return () => v; }\n case \"bool\": { const v = e.value ? 1 : 0; return () => v; }\n case \"str\": case \"color\": case \"arr\": throw new ScriptError(\"a string or color is not a number\", e);\n case \"id\": {\n const s = e.sym;\n if (!s) return () => NaN_; // na\n switch (s.kind) {\n case \"builtin\": {\n if (s.key === \"bar_index\") return (i) => i;\n const c = this.srcCol(s.key!);\n return (i) => c.v[i]!;\n }\n case \"input\": {\n if (s.ty.b === \"float\" && s.ty.q === \"series\") { const c = this.srcCol(String(this.p[s.key!])); return (i) => c.v[i]!; }\n const v = this.p[s.key!];\n if (typeof v === \"string\") throw new ScriptError(\"a string is not a number\", e);\n const n = typeof v === \"boolean\" ? (v ? 1 : 0) : (v as number);\n return () => n;\n }\n case \"simple\": {\n const v = this.simpleVal(s);\n if (typeof v === \"string\") throw new ScriptError(\"a string is not a number\", e);\n return () => v;\n }\n case \"pure\": { const c = this.pure.get(s)!; return (i) => c.v[i]!; }\n case \"state\": {\n if (mode === \"exec\") { const slot = s.slot!; return () => S[slot]!; }\n const c = this.stateCols.get(s)!;\n return (i) => c.v[i]!;\n }\n case \"local\": case \"loop\": { const slot = s.slot!; return () => S[slot]!; }\n default: throw new ScriptError(\"this name has no numeric value\", e);\n }\n }\n case \"mem\": {\n if (typeof e.cv === \"number\") { const v = e.cv; return () => v; }\n if (e.obj.k === \"id\" && e.name === \"tr\") { const c = (this.tr ??= this.G().tr()); return (i) => c.v[i]!; }\n throw new ScriptError(\"this name has no numeric value\", e);\n }\n case \"un\": {\n const x = this.ev(e.x, mode);\n if (e.op === \"-\") return (i) => -x(i);\n if (e.op === \"+\") return x;\n return (i) => (truthy(x(i)) ? 0 : 1);\n }\n case \"bin\": return this.binary(e, mode);\n case \"tern\": {\n const c = this.ev(e.c, mode), a = this.ev(e.a, mode), b = this.ev(e.b, mode);\n return (i) => (truthy(c(i)) ? a(i) : b(i));\n }\n case \"idx\": {\n const k = this.ev(e.i, mode);\n return this.hist(e.x, k, mode, e);\n }\n case \"call\": return this.callEv(e, mode);\n }\n }\n\n private binary(e: Extract<Expr, { k: \"bin\" }>, mode: Mode): Ev {\n const ta = e.a.ty!, tb = e.b.ty!;\n if (e.op === \"==\" || e.op === \"!=\") {\n if ((ta.b === \"string\" || ta.b === \"color\") && ta.b === tb.b) {\n const eq = this.str(e.a) === this.str(e.b);\n const v = (e.op === \"==\") === eq ? 1 : 0;\n return () => v;\n }\n }\n const a = this.ev(e.a, mode), b = this.ev(e.b, mode);\n switch (e.op) {\n case \"+\": return (i) => a(i) + b(i);\n case \"-\": return (i) => a(i) - b(i);\n case \"*\": return (i) => a(i) * b(i);\n case \"/\": return (i) => { const d = b(i); return d === 0 ? NaN_ : a(i) / d; };\n case \"%\": return (i) => { const d = b(i); return d === 0 ? NaN_ : a(i) % d; };\n case \"<\": return (i) => (a(i) < b(i) ? 1 : 0);\n case \"<=\": return (i) => (a(i) <= b(i) ? 1 : 0);\n case \">\": return (i) => (a(i) > b(i) ? 1 : 0);\n case \">=\": return (i) => (a(i) >= b(i) ? 1 : 0);\n case \"==\": return (i) => (a(i) === b(i) ? 1 : 0);\n // na never compares equal or unequal: both sides must be present\n case \"!=\": return (i) => { const x = a(i), y = b(i); return x === x && y === y && x !== y ? 1 : 0; };\n case \"and\": return (i) => (truthy(a(i)) && truthy(b(i)) ? 1 : 0);\n case \"or\": return (i) => (truthy(a(i)) || truthy(b(i)) ? 1 : 0);\n default: throw new ScriptError(`unknown operator ${e.op}`, e);\n }\n }\n\n private callEv(c: Call, mode: Mode): Ev {\n const sig = SIGS.get(c.fn!)!;\n const b = c.bound!;\n if (sig.name === \"outside\") {\n const col = this.rawCol(c);\n return (i) => col.v[i]!;\n }\n if (this.isHoisted(c)) {\n const col = this.hoist(c)[0]!;\n return (i) => col.v[i]!;\n }\n switch (sig.name) {\n case \"nz\": {\n const x = this.ev(b[0]!, mode), r = b[1] ? this.ev(b[1], mode) : () => 0;\n return (i) => { const v = x(i); return v === v ? v : r(i); };\n }\n case \"na\": { const x = this.ev(b[0]!, mode); return (i) => { const v = x(i); return v === v ? 0 : 1; }; }\n case \"ta.change\": {\n const cur = this.ev(b[0]!, mode), prev = this.hist(b[0]!, b[1] ? this.ev(b[1], mode) : () => 1, mode, c);\n return (i) => cur(i) - prev(i);\n }\n case \"ta.crossover\": case \"ta.crossunder\": case \"ta.cross\": {\n const ca = this.ev(b[0]!, mode), cb = this.ev(b[1]!, mode);\n const pa = this.hist(b[0]!, () => 1, mode, c), pb = this.hist(b[1]!, () => 1, mode, c);\n const over = (i: number) => ca(i) > cb(i) && pa(i) <= pb(i);\n const under = (i: number) => ca(i) < cb(i) && pa(i) >= pb(i);\n if (sig.name === \"ta.crossover\") return (i) => (over(i) ? 1 : 0);\n if (sig.name === \"ta.crossunder\") return (i) => (under(i) ? 1 : 0);\n return (i) => (over(i) || under(i) ? 1 : 0);\n }\n case \"color.new\": throw new ScriptError(\"a color is not a number\", c);\n default:\n if (sig.op === \"scalar\") {\n const fn = sig.fn!, args = b.map((x) => this.ev(x!, mode));\n if (args.length === 1) { const a0 = args[0]!; return (i) => fn(a0(i)); }\n const a0 = args[0]!, a1 = args[1]!;\n return (i) => fn(a0(i), a1(i));\n }\n throw new ScriptError(`${sig.name} cannot be used as a value here`, c);\n }\n }\n}\n","// compile(source): lexer -> parser -> checker -> code generation.\n\nimport type { StudyDef } from \"@alphacharts/indicators\";\nimport { Reporter, type Diagnostic } from \"./diag.js\";\nimport { parse } from \"./parser.js\";\nimport { check, type InputSpec, type Plan, type PlotSpec } from \"./check.js\";\nimport type { Expr, Stmt } from \"./ast.js\";\nimport { generate, type ColorInput } from \"./codegen.js\";\nimport type { Dependency } from \"./feeds.js\";\nimport { DEFAULT_LIMITS, type Limits } from \"./limits.js\";\n\n/** One output statement of the script. `expr` is the series plotted (plot, plotshape) or the price of an hline; fill has none. */\nexport interface PlotView {\n kind: PlotSpec[\"kind\"];\n title: string;\n expr: Expr | null;\n}\n\n/**\n * What the script means, read off the checked syntax tree (nothing is executed). Read-only: the tree is shared with the\n * compiled study, do not change it. Names are resolved: an `id` node's `sym` is the declaration it refers to (same object for every use\n * and every assignment of one variable), `ty` is every expression's type, `call.fn` the resolved function name (\"ta.sma\").\n */\nexport interface ScriptPlan {\n overlay: boolean;\n /** The price axis the script's series use. */\n scale: \"left\" | \"right\";\n /**\n * The outside series the script reads, one entry per distinct `outside(symbol, field, timeframe)` call, found by\n * reading the program (nothing is run). `symbol` / `timeframe` are null for \"this chart's\". The host loads them and\n * gives them to the script (`feedsOf(plan.dependencies)` groups them by series).\n */\n dependencies: readonly Dependency[];\n /** The most the script reads: \"value\" (close/time only), \"ohlc\", or \"ohlcv\" when it reads volume (the `volume` series or a study that does). */\n needs: Plan[\"needs\"];\n plots: readonly PlotView[];\n /** Top-level statements, in order. */\n body: readonly Stmt[];\n}\n\nexport interface CompileOk {\n ok: true;\n study: StudyDef;\n /** Inputs the study schema has no type for (input.color): applied as plot colours. */\n colorInputs: ColorInput[];\n inputs: InputSpec[];\n title: string;\n /** Warnings only. */\n diagnostics: Diagnostic[];\n source: string;\n plan: ScriptPlan;\n}\nexport interface CompileFailed {\n ok: false;\n diagnostics: Diagnostic[];\n}\nexport type CompileResult = CompileOk | CompileFailed;\n\nexport function compile(source: string, limits: Limits = DEFAULT_LIMITS): CompileResult {\n if (typeof source !== \"string\") return { ok: false, diagnostics: [{ severity: \"error\", message: \"the script must be a string\", line: 1, column: 1, endLine: 1, endColumn: 1, from: 0, to: 0 }] };\n if (source.length > limits.maxSourceChars) {\n return { ok: false, diagnostics: [{ severity: \"error\", message: `the script is ${source.length} characters; the limit is ${limits.maxSourceChars}`, line: 1, column: 1, endLine: 1, endColumn: 1, from: 0, to: 0 }] };\n }\n const rep = new Reporter(source);\n const prog = parse(source, rep);\n let plan: Plan | null = null;\n if (rep.errorCount === 0) plan = check(prog, rep, limits);\n if (rep.errorCount === 0 && plan && plan.plots.length === 0) rep.error(\"the script draws nothing: add plot(...)\", { from: 0, to: Math.min(source.length, 1) });\n if (rep.errorCount > 0 || !plan) return { ok: false, diagnostics: rep.list };\n const { def, colorInputs } = generate(plan, source, limits);\n return { ok: true, study: def, colorInputs, inputs: plan.inputs, title: plan.title, diagnostics: rep.list, source, plan: { overlay: plan.overlay, scale: plan.scale, dependencies: plan.dependencies, needs: plan.needs, plots: plan.plots.map((p) => ({ kind: p.kind, title: p.title, expr: p.expr ?? null })), body: plan.body } };\n}\n","// The sandbox that runs user scripts inside a dedicated Web Worker.\n//\n// Defence in depth, innermost first:\n// 1. A script is never turned into JavaScript text: it is a tree of closures\n// built from its own syntax tree (codegen.ts), and the language has no way to\n// name `fetch`, `eval`, `self`, a prototype or any host object.\n// 2. Budgets: loop iterations per batch (steps), columns, bytes, bars, period\n// and history size, all checked with a diagnostic naming the limit.\n// 3. `lockdown` removes the host's network, storage, messaging and timing\n// capabilities from the worker global before any script is compiled, and\n// freezes the intrinsic prototypes.\n// Outside series (`outside(...)`) are columns the host transfers in; the worker only joins them by time.\n// Each counts against the limits: at most `maxFeeds` of them, each at most `maxBars` bars, and\n// their bytes (six columns, held here and on the page, so 6 x bars x 8 x 2) are added to the script's.\n// 4. The main thread terminates a worker that does not answer within the\n// batch / tick budget (runner.ts) and reports it.\n\nimport { StudyEngine, type BarColumns, type BarInput, type FeedBar, type FeedData, type InputValue, type StudyDef } from \"@alphacharts/indicators\";\nimport { compile } from \"./compile.js\";\nimport { DEFAULT_LIMITS, type Limits } from \"./limits.js\";\nimport { ScriptError } from \"./diag.js\";\n\n/** Host capabilities a script must not have: network, storage, other threads, message ports. */\nexport const BLOCKED_GLOBALS = [\n \"fetch\", \"XMLHttpRequest\", \"WebSocket\", \"WebTransport\", \"EventSource\", \"importScripts\", \"indexedDB\", \"caches\",\n \"BroadcastChannel\", \"SharedWorker\", \"Worker\", \"MessageChannel\", \"Request\", \"Response\", \"localStorage\", \"sessionStorage\",\n \"FileReader\", \"FileReaderSync\", \"Notification\", \"navigator\", \"location\", \"document\", \"window\", \"XMLHttpRequestUpload\", \"RTCPeerConnection\",\n] as const;\n\nexport interface LockdownReport {\n blocked: string[];\n missing: string[];\n}\n\n/** Shadow every blocked capability on `scope` with an undefined, non-configurable, read-only property. Idempotent. */\nexport function lockdown(scope: object = globalThis): LockdownReport {\n const blocked: string[] = [];\n const missing: string[] = [];\n for (const name of BLOCKED_GLOBALS) {\n try {\n Object.defineProperty(scope, name, { value: undefined, writable: false, configurable: false, enumerable: false });\n blocked.push(name);\n } catch {\n // already non-configurable: it is then either ours or the host's own; report it\n missing.push(name);\n }\n }\n const s = scope as { eval?: unknown; Math?: { random: unknown }; Date?: { now: unknown } };\n const refuse = (what: string) => () => { throw new Error(`${what} is not available to scripts`); };\n try { Object.defineProperty(scope, \"eval\", { value: refuse(\"eval\"), writable: false, configurable: false }); } catch { missing.push(\"eval\"); }\n if (s.Math) try { Object.defineProperty(s.Math, \"random\", { value: refuse(\"Math.random\"), writable: false, configurable: false }); } catch { missing.push(\"Math.random\"); }\n if (s.Date) try { Object.defineProperty(s.Date, \"now\", { value: refuse(\"Date.now\"), writable: false, configurable: false }); } catch { missing.push(\"Date.now\"); }\n const g = scope as Record<string, { prototype?: object } | undefined>;\n for (const k of [\"Object\", \"Array\", \"Function\", \"String\", \"Number\", \"Boolean\"]) {\n const proto = g[k]?.prototype;\n if (proto) Object.freeze(proto);\n }\n return { blocked, missing };\n}\n\n// ---- protocol -----------------------------------------------------------------------\n\nexport interface RunMsg { type: \"run\"; id: number; sid: number; source: string; params: Record<string, InputValue>; bars: BarColumns; feeds?: Record<string, FeedData>; limits?: Partial<Limits> }\nexport interface BarMsg { type: \"bar\"; sid: number; index: number; bar: BarInput }\n/** A live bar of outside series `key` (the `bar` channel for another instrument or timeframe). */\nexport interface FeedBarMsg { type: \"feed-bar\"; sid: number; key: string; bar: FeedBar }\nexport type ToWorker = RunMsg | BarMsg | FeedBarMsg | { type: \"cancel\"; id: number } | { type: \"dispose\"; sid: number };\n\nexport interface ErrorInfo { message: string; from?: number; to?: number; kind: \"build\" | \"runtime\" | \"budget\" | \"compile\" }\nexport type FromWorker =\n | { type: \"result\"; id: number; n: number; buffers: Float64Array[] }\n | { type: \"cancelled\"; id: number }\n | { type: \"error\"; id: number; error: ErrorInfo }\n | { type: \"values\"; sid: number; index: number; values: Float64Array }\n /** A feed bar that changed nothing the chart's last bar sees: nothing was recomputed. */\n | { type: \"idle\"; sid: number }\n | { type: \"tick-error\"; sid: number; error: ErrorInfo };\n\nconst yieldNow = (): Promise<void> => new Promise((r) => setTimeout(r, 0));\nconst CHUNK = 1 << 16;\n\nexport function errorInfo(e: unknown): ErrorInfo {\n if (e instanceof ScriptError) return { message: e.message, ...(e.span && { from: e.span.from, to: e.span.to }), kind: e.kind };\n return { message: e instanceof Error ? e.message : String(e), kind: \"build\" };\n}\n\n/** A script's definition with one trailing node (the bridge the main thread listens on). */\nexport function withBridge(def: StudyDef, body?: (i: number) => void, mirror = false): StudyDef {\n return {\n ...def,\n build: (g, p) => {\n let target = g;\n if (mirror) {\n // main-thread mirror: same columns, nodes that compute nothing\n target = Object.create(g) as typeof g;\n (target as { node: unknown }).node = () => g.node(() => {});\n }\n const out = def.build(target, p);\n g.node((_s, from, to) => { if (body && to - from === 1) body(from); });\n return out;\n },\n };\n}\n\n/** Worker-side handler. `post` sends to the main thread. */\nexport function serveScripts(post: (m: FromWorker, transfer?: Transferable[]) => void): (data: unknown) => void {\n const engines = new Map<number, StudyEngine>();\n const cancelled = new Set<number>();\n const inflight = new Set<number>();\n /** Instances disposed while a batch was still running must not keep an engine. */\n const gone = new Set<number>();\n return (data) => {\n const m = data as ToWorker;\n switch (m.type) {\n case \"cancel\": if (inflight.has(m.id)) cancelled.add(m.id); return;\n case \"dispose\": engines.delete(m.sid); gone.add(m.sid); return;\n case \"bar\": {\n const e = engines.get(m.sid);\n if (!e) { post({ type: \"tick-error\", sid: m.sid, error: { message: \"the script has no computed state in this worker (it was restarted); change an input to run it again\", kind: \"runtime\" } }); return; }\n try {\n const n = e.length;\n const last = n > 0 ? e.graph.time.v[n - 1]! : Number.NaN;\n if (n > 0 && m.bar.time === last) e.reviseLast(m.bar);\n else e.push(m.bar);\n if (e.length - 1 !== m.index) throw new ScriptError(`out of sync with the chart: bar ${m.index} arrived with ${e.length} bars computed`);\n const values = new Float64Array(e.outputs.length);\n e.outputs.forEach((c, k) => (values[k] = c.v[m.index]!));\n post({ type: \"values\", sid: m.sid, index: m.index, values }, [values.buffer]);\n } catch (err) {\n post({ type: \"tick-error\", sid: m.sid, error: errorInfo(err) });\n }\n return;\n }\n case \"feed-bar\": {\n const e = engines.get(m.sid);\n if (!e) { post({ type: \"tick-error\", sid: m.sid, error: { message: \"the script has no computed state in this worker (it was restarted); change an input to run it again\", kind: \"runtime\" } }); return; }\n try {\n if (!e.graph.feeds.has(m.key)) throw new ScriptError(`this script reads no outside series \"${m.key}\"`);\n if (!e.pushFeed(m.key, m.bar)) { post({ type: \"idle\", sid: m.sid }); return; }\n const n = e.length;\n const values = new Float64Array(e.outputs.length);\n e.outputs.forEach((c, k) => (values[k] = c.v[n - 1]!));\n post({ type: \"values\", sid: m.sid, index: n - 1, values }, [values.buffer]);\n } catch (err) {\n post({ type: \"tick-error\", sid: m.sid, error: errorInfo(err) });\n }\n return;\n }\n case \"run\": {\n inflight.add(m.id);\n void (async () => {\n try {\n const limits = { ...DEFAULT_LIMITS, ...m.limits };\n const r = compile(m.source, limits);\n if (!r.ok) throw new ScriptError(r.diagnostics.map((d) => `${d.line}:${d.column}: ${d.message}`).join(\"; \"));\n const n = m.bars.time.length;\n if (n > limits.maxBars) throw new ScriptError(`${n} bars exceed the limit of ${limits.maxBars}`, null, \"budget\");\n const e = new StudyEngine(withBridge(r.study), m.params);\n const feeds = Object.entries(m.feeds ?? {});\n if (feeds.length > limits.maxFeeds) throw new ScriptError(`${feeds.length} outside series exceed the limit of ${limits.maxFeeds}`, null, \"budget\");\n // an outside series is a graph of its own: its six bar columns and whatever the script computes on its bars\n // (held here like the script's own columns, 3 x), and the page keeps a copy of the bars (6 columns)\n let feedBytes = 0, feedRows = 0, feedCols = 0;\n for (const [key, f] of feeds) {\n const rows = f.bars.time.length;\n if (rows > limits.maxBars) throw new ScriptError(`an outside series has ${rows} bars; the limit is ${limits.maxBars}`, null, \"budget\");\n const cols = e.graph.feeds.get(key)?.graph.cols.length ?? 6;\n feedRows += rows;\n feedCols += cols;\n feedBytes += rows * cols * 8 * 3 + rows * 6 * 8;\n }\n const bytes = e.graph.cols.length * n * 8 * 3 + feedBytes;\n if (bytes > limits.maxBytes) {\n const mib = `${(bytes / 2 ** 20).toFixed(0)} MiB`, cap = `${(limits.maxBytes / 2 ** 20).toFixed(0)} MiB`;\n if (feeds.length === 0) throw new ScriptError(`the script needs ${mib} (3 x ${e.graph.cols.length} columns x ${n} bars x 8); the limit is ${cap}`, null, \"budget\");\n throw new ScriptError(`the script and its ${feeds.length} outside series need ${mib} (3 x ${e.graph.cols.length} columns x ${n} bars x 8, and 3 x ${feedCols} columns of ${feedRows} outside bars in all, x 8, with a copy of their bars); the limit is ${cap}`, null, \"budget\");\n }\n for (const [key, f] of feeds) e.setFeed(key, f.bars, f);\n const done = await e.loadChunked(m.bars, CHUNK, yieldNow, () => cancelled.has(m.id));\n if (!done) { post({ type: \"cancelled\", id: m.id }); return; }\n if (!gone.has(m.sid)) engines.set(m.sid, e);\n const buffers = e.graph.cols.map((c) => c.v.slice());\n post({ type: \"result\", id: m.id, n: e.length, buffers }, buffers.map((b) => b.buffer));\n } catch (err) {\n post({ type: \"error\", id: m.id, error: errorInfo(err) });\n } finally {\n cancelled.delete(m.id);\n inflight.delete(m.id);\n }\n })();\n return;\n }\n }\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { n as e, r as t } from "./sandbox-p2HPP8yl.js";
2
+ //#region src/sandbox-worker.ts
3
+ e(self);
4
+ var n = self, r = t((e, t) => n.postMessage(e, t));
5
+ n.onmessage = (e) => r(e.data);
6
+ //#endregion
7
+
8
+ //# sourceMappingURL=sandbox-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-worker.js","names":["lockdown","serveScripts","scope","handle","m"],"sources":["../src/sandbox-worker.ts"],"sourcesContent":["// Worker entry for user scripts. The lockdown runs first, before anything else\n// in this module graph handles a script.\nimport { lockdown, serveScripts, type FromWorker } from \"./sandbox.js\";\n\nlockdown(self);\nconst scope = self as unknown as { postMessage(m: unknown, t?: Transferable[]): void; onmessage: ((e: { data: unknown }) => void) | null };\nconst handle = serveScripts((m: FromWorker, t) => scope.postMessage(m, t));\nscope.onmessage = (e) => handle(e.data);\n"],"mappings":";;AAIAA,EAAS,IAAI;AACb,IAAME,IAAQ,MACRC,IAASF,GAAc,GAAe,MAAMC,EAAM,YAAYE,GAAG,CAAC,CAAC;AACzE,EAAM,aAAa,MAAMD,EAAO,EAAE,IAAI"}