@invinite-org/chartlang-compiler 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +254 -0
- package/dist/analysis/extractAlertConditions.js.map +1 -1
- package/dist/analysis/extractCapabilities.js.map +1 -1
- package/dist/analysis/extractDependencyGraph.js.map +1 -1
- package/dist/analysis/extractInputs.js.map +1 -1
- package/dist/analysis/extractMaxLookback.d.ts +2 -1
- package/dist/analysis/extractMaxLookback.d.ts.map +1 -1
- package/dist/analysis/extractMaxLookback.js +90 -6
- package/dist/analysis/extractMaxLookback.js.map +1 -1
- package/dist/analysis/extractRequestedIntervals.d.ts +43 -1
- package/dist/analysis/extractRequestedIntervals.d.ts.map +1 -1
- package/dist/analysis/extractRequestedIntervals.js +95 -10
- package/dist/analysis/extractRequestedIntervals.js.map +1 -1
- package/dist/analysis/extractRequiresIntervals.js.map +1 -1
- package/dist/analysis/forbiddenConstructs.d.ts.map +1 -1
- package/dist/analysis/forbiddenConstructs.js +2 -41
- package/dist/analysis/forbiddenConstructs.js.map +1 -1
- package/dist/analysis/index.d.ts +3 -1
- package/dist/analysis/index.d.ts.map +1 -1
- package/dist/analysis/index.js +2 -1
- package/dist/analysis/index.js.map +1 -1
- package/dist/analysis/loopBounds.d.ts +91 -0
- package/dist/analysis/loopBounds.d.ts.map +1 -0
- package/dist/analysis/loopBounds.js +132 -0
- package/dist/analysis/loopBounds.js.map +1 -0
- package/dist/analysis/resolveIndexBound.d.ts +73 -0
- package/dist/analysis/resolveIndexBound.d.ts.map +1 -0
- package/dist/analysis/resolveIndexBound.js +336 -0
- package/dist/analysis/resolveIndexBound.js.map +1 -0
- package/dist/analysis/statefulCallInLoop.js.map +1 -1
- package/dist/analysis/structuralChecks.js.map +1 -1
- package/dist/analysis/validateLowerTfIntervals.js.map +1 -1
- package/dist/analysis/validateSecurityExpr.d.ts +25 -0
- package/dist/analysis/validateSecurityExpr.d.ts.map +1 -0
- package/dist/analysis/validateSecurityExpr.js +154 -0
- package/dist/analysis/validateSecurityExpr.js.map +1 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +13 -3
- package/dist/api.js.map +1 -1
- package/dist/bundle.js.map +1 -1
- package/dist/dependency/index.js.map +1 -1
- package/dist/dependency/resolveProducer.js.map +1 -1
- package/dist/diagnostics.d.ts +4 -2
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +2 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +7 -0
- package/dist/manifest.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +91 -14
- package/dist/program.js.map +1 -1
- package/dist/transformers/callsiteIdInjection.d.ts +21 -0
- package/dist/transformers/callsiteIdInjection.d.ts.map +1 -1
- package/dist/transformers/callsiteIdInjection.js +26 -3
- package/dist/transformers/callsiteIdInjection.js.map +1 -1
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/plotKindFromCallsite.js.map +1 -1
- package/dist/transformers/resolveCallee.d.ts +21 -0
- package/dist/transformers/resolveCallee.d.ts.map +1 -1
- package/dist/transformers/resolveCallee.js +14 -1
- package/dist/transformers/resolveCallee.js.map +1 -1
- package/dist/transformers/rewriteDependencyAccessors.js.map +1 -1
- package/dist/typesEmit.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveCallee.js","sourceRoot":"","sources":["../../src/transformers/resolveCallee.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolveCallee.js","sourceRoot":"","sources":["../../src/transformers/resolveCallee.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,OAAuB;IAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,IAAI,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,OAAO,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAC9B,UAAuC,EACvC,OAAuB;IAEvB,MAAM,QAAQ,GAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,OAAO,GAAkB,UAAU,CAAC,UAAU,CAAC;IACnD,OAAO,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iCAAiC,CAC7C,IAAgC,EAChC,OAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,qBAAqB,CACjC,OAAuB,EACvB,UAAyB;IAEzB,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,MAAM,GACR,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK;QACpC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,WAAW,CAAC;IACtB,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC/C,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,QAAQ,KAAK,gBAAgB,CAAC,EAAE,CAAC;QAC5E,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IACD,kEAAkE;IAClE,+DAA+D;IAC/D,mEAAmE;IACnE,mEAAmE;IACnE,+DAA+D;IAC/D,8DAA8D;IAC9D,gEAAgE;IAChE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC;YAAE,SAAS;QAChD,iEAAiE;QACjE,2DAA2D;QAC3D,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;QAC9C,MAAM,aAAa,GACf,YAAY,KAAK,SAAS,IAAI,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;YACvD,CAAC,CAAC,YAAY,CAAC,IAAI;YACnB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,IAAI,kCAAkC,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;YAC1E,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,oBAAoB;QACpB,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QACvC,oBAAoB;QACpB,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,QAAQ,KAAK,gBAAgB,CAAC;YAAE,SAAS;QACtF,IAAI,YAAY,KAAK,SAAS,IAAI,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9D,OAAO,YAAY,CAAC,IAAI,CAAC;QAC7B,CAAC;QACD,OAAO,UAAU,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,kCAAkC,CACvC,OAAuB,EACvB,WAA8B,EAC9B,aAAqB;IAErB,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;IAC1C,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9F,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;IACnD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC;AACtF,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport ts from \"typescript\";\n\nimport { CORE_MODULE_PATH } from \"../program.js\";\n\n/**\n * Resolve a `CallExpression`'s callee to its fully-qualified name. Returns\n * one of `\"ta.<method>\"`, `\"plot\"`, `\"hline\"`, `\"alert\"`,\n * `\"defineIndicator\"`, `\"defineAlert\"` for calls whose target comes from\n * `@invinite-org/chartlang-core`; returns `null` for everything else\n * (user-shadowed identifiers, computed access, optional chains, calls on\n * call results).\n *\n * Identifier callees are gated on the symbol's declaration source file\n * matching the core ambient module path so a user's `const plot = (x) => x;\n * plot(42);` is not mistaken for the core `plot` primitive.\n *\n * @since 0.1\n * @example\n * // const fqn = resolveCalleeName(callNode, checker);\n * // fqn === \"ta.ema\" | \"plot\" | \"alert\" | ... | null\n * const fn: typeof resolveCalleeName = resolveCalleeName;\n * void fn;\n */\nexport function resolveCalleeName(node: ts.CallExpression, checker: ts.TypeChecker): string | null {\n const expression = node.expression;\n if (ts.isPropertyAccessExpression(expression)) {\n return resolvePropertyAccessName(expression, checker);\n }\n if (ts.isIdentifier(expression)) {\n const canonical = resolveCoreSymbolName(checker, expression);\n if (canonical === null) return null;\n return canonical;\n }\n return null;\n}\n\nfunction resolvePropertyAccessName(\n expression: ts.PropertyAccessExpression,\n checker: ts.TypeChecker,\n): string | null {\n const segments: string[] = [expression.name.text];\n let current: ts.Expression = expression.expression;\n while (ts.isPropertyAccessExpression(current)) {\n segments.unshift(current.name.text);\n current = current.expression;\n }\n if (!ts.isIdentifier(current)) return null;\n const canonical = resolveCoreSymbolName(checker, current);\n if (canonical === null) return null;\n return [canonical, ...segments].join(\".\");\n}\n\n/**\n * Resolve the canonical core-export name for the *object* of an\n * `ElementAccessExpression` (`obj[...]`). Used by the callsite-id\n * transformer to detect element-access calls on core namespaces\n * (`ta[\"ema\"](...)`, `state[\"foo\"]?.()`) that would otherwise silently\n * skip slot-id injection. Returns the canonical name (e.g. `\"ta\"`) when\n * the object identifier resolves to a core symbol, or `null` when it\n * does not (user-shadowed identifier, non-core object, computed receiver).\n *\n * @since 0.1\n * @example\n * // const name = resolveCoreSymbolForElementAccess(node, checker);\n * // name === \"ta\" | null\n * const fn: typeof resolveCoreSymbolForElementAccess = resolveCoreSymbolForElementAccess;\n * void fn;\n */\nexport function resolveCoreSymbolForElementAccess(\n node: ts.ElementAccessExpression,\n checker: ts.TypeChecker,\n): string | null {\n const obj = node.expression;\n if (!ts.isIdentifier(obj)) return null;\n return resolveCoreSymbolName(checker, obj);\n}\n\n/**\n * Return the canonical core-export name for `identifier`, or `null` if\n * the identifier does not resolve to a `@invinite-org/chartlang-core`\n * symbol. Renamed imports (`import { ta as TA } from \"core\"; TA.ema(...)`)\n * map back to their export name (`\"ta\"`) so the resulting slot-id\n * matches what `STATEFUL_PRIMITIVES` expects.\n *\n * Reused by the `request.security` expression capture check\n * (`validateSecurityExpr`) to decide whether a free identifier inside the\n * HTF callback resolves to the ambient `ta` / `inputs` namespaces (allowed)\n * versus an outer-scope binding (rejected).\n *\n * @since 0.7\n * @stable\n * @example\n * // const name = resolveCoreSymbolName(checker, identifier);\n * // name === \"ta\" | \"inputs\" | null\n * const fn: typeof resolveCoreSymbolName = resolveCoreSymbolName;\n * void fn;\n */\nexport function resolveCoreSymbolName(\n checker: ts.TypeChecker,\n identifier: ts.Identifier,\n): string | null {\n const localSymbol = checker.getSymbolAtLocation(identifier);\n if (!localSymbol) return null;\n const target =\n localSymbol.flags & ts.SymbolFlags.Alias\n ? checker.getAliasedSymbol(localSymbol)\n : localSymbol;\n const declarations = target.declarations ?? [];\n if (declarations.some((d) => d.getSourceFile().fileName === CORE_MODULE_PATH)) {\n return target.getName();\n }\n // Destructured `compute({ ta, plot, ... })` binding: the symbol's\n // declaration is the binding element, not the core module. The\n // identifier's *type*, however, comes from `ComputeContext` (core)\n // — so a binding element whose type declaration originates in core\n // counts as a core symbol for the callsite-id transformer. The\n // canonical name is the binding's property name (or, when the\n // binding is renamed `{ ta: TA }`, the original property name).\n for (const declaration of declarations) {\n if (!ts.isBindingElement(declaration)) continue;\n // `{ ta }` → propertyName is undefined, fall back to identifier.\n // `{ ta: TA }` → propertyName is `ta`, identifier is `TA`.\n const propertyName = declaration.propertyName;\n const canonicalName =\n propertyName !== undefined && ts.isIdentifier(propertyName)\n ? propertyName.text\n : identifier.text;\n if (bindingElementComesFromCoreContext(checker, declaration, canonicalName)) {\n return canonicalName;\n }\n const type = checker.getTypeAtLocation(identifier);\n const typeSymbol = type.getSymbol();\n /* v8 ignore next */\n if (typeSymbol === undefined) continue;\n /* v8 ignore next */\n const typeDecls = typeSymbol.declarations ?? [];\n if (!typeDecls.some((d) => d.getSourceFile().fileName === CORE_MODULE_PATH)) continue;\n if (propertyName !== undefined && ts.isIdentifier(propertyName)) {\n return propertyName.text;\n }\n return identifier.text;\n }\n return null;\n}\n\nfunction bindingElementComesFromCoreContext(\n checker: ts.TypeChecker,\n declaration: ts.BindingElement,\n canonicalName: string,\n): boolean {\n const bindingPattern = declaration.parent;\n const bindingOwner = bindingPattern.parent;\n if (!ts.isObjectBindingPattern(bindingPattern) || !ts.isParameter(bindingOwner)) return false;\n const parameterType = checker.getTypeAtLocation(bindingOwner);\n const property = parameterType.getProperty(canonicalName);\n const propertyDecls = property?.declarations ?? [];\n return propertyDecls.some((d) => d.getSourceFile().fileName === CORE_MODULE_PATH);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriteDependencyAccessors.js","sourceRoot":"","sources":["../../src/transformers/rewriteDependencyAccessors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rewriteDependencyAccessors.js","sourceRoot":"","sources":["../../src/transformers/rewriteDependencyAccessors.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,MAAM,YAAY,CAAC;AA0B5B,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,0BAA0B,CACtC,UAAyB,EACzB,QAAkB,EAClB,UAAkB;IAElB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK;QAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzE,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW;QAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7D,+DAA+D;IAC/D,gEAAgE;IAChE,mEAAmE;IACnE,gEAAgE;IAChE,mEAAmE;IACnE,kEAAkE;IAClE,iEAAiE;IACjE,aAAa;IACb,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI;YAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAyC,CAAC,OAAO,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAe,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC5D,OAAO,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACvD,CAAC;YACL,CAAC;YACD,IACI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,WAAW,KAAK,SAAS,EAChC,CAAC;gBACC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC,yBAAyB,CACvC,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,IAAI,EACT,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC,CAAC;gBACN,CAAC;YACL,CAAC;YACD,IACI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACzB,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EACxC,CAAC;gBACC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBACrE,IAAI,YAAY,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;wBACxC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;wBAC5E,MAAM,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC;wBAC9D,OAAO,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAClC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAC9C,SAAS,EACT;4BACI,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;4BACtC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC;4BACjD,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;yBAC3C,CACJ,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;YACD,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAkB,CAAC;IACjF,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,WAAW;QACX,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAsC,CAAC;KACrE,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,UAAyB;IAC/C,IAAI,OAAO,GAAkB,UAAU,CAAC;IACxC,OAAO,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;QAClC,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QACnD,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IACD,sBAAsB;IACtB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,sBAAsB,CAC3B,QAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuD,CAAC;IAC3E,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,2BAA2B,CAChC,IAAuB,EACvB,OAAyC;IAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9B,sBAAsB;IACtB,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnB,EAAE,CAAC,OAAO,CAAC,6BAA6B,CACpC;QACI,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,OAAO,EACP,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAC/C;QACD,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,MAAM,EACN,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAC9C;KACJ,EACD,KAAK,CACR,CACJ,EACD,KAAK,CACR,CAAC;IACF,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,GAAG,EAAE;QAC7D,GAAG,GAAG,CAAC,UAAU;QACjB,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,EAAE,cAAc,CAAC;KACjE,CAAC,CAAC;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;QAC9E,UAAU;QACV,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;KAC7B,CAAC,CAAC;AACP,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAuB;IAChD,kEAAkE;IAClE,6DAA6D;IAC7D,8DAA8D;IAC9D,wDAAwD;IACxD,iEAAiE;IACjE,iEAAiE;IACjE,IAAI,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { OutputDeclaration } from \"@invinite-org/chartlang-core\";\nimport ts from \"typescript\";\n\nimport type { DepGraph } from \"../analysis/extractDependencyGraph.js\";\nimport type { CompileDiagnostic } from \"../diagnostics.js\";\n\n/**\n * Result of `rewriteDependencyAccessors`. `transformed` is the new\n * source file where every consumer-side `<binding>.output(\"title\")`\n * call has been replaced with the synthesised\n * `__chartlang_depOutput(\"slotId\", \"localId\", \"title\")` call the\n * runtime's dep executor (Phase 7 / Task 4) consumes.\n *\n * @since 0.7\n * @stable\n * @example\n * const r: RewriteDependencyAccessorsResult = {\n * transformed: undefined as unknown as ts.SourceFile,\n * diagnostics: [],\n * };\n * void r;\n */\nexport type RewriteDependencyAccessorsResult = Readonly<{\n readonly transformed: ts.SourceFile;\n readonly diagnostics: ReadonlyArray<CompileDiagnostic>;\n}>;\n\nconst DEP_OUTPUT_HELPER = \"__chartlang_depOutput\";\n\n/**\n * Rewrite every consumer-side `<binding>.output(\"title\")` call into\n * `__chartlang_depOutput(\"slotId\", \"localId\", \"title\")`. The receiver\n * traces back to a binding declared in the file's\n * {@link DepGraph}; the slot id follows the existing\n * `<sourcePath>:<line>:<col>#0` format (Phase 1 §5.5) read from the\n * **input** source file before any rewrite. Bindings that are not\n * part of the dep graph (zero consumes, unknown receivers) are\n * left untouched — they would already have raised diagnostics during\n * `extractDependencyGraph`.\n *\n * The same pass injects each producer binding's statically-resolved\n * titled `outputs` into its `defineIndicator({...})` opts literal so\n * the runtime object built by `defineIndicator` carries\n * `manifest.outputs` directly. Without this, a sibling- or dep-mounted\n * producer's `manifest.outputs` is `undefined` at runtime — the host\n * never allocates a {@link DepOutputStore} ring buffer for it and the\n * consumer's `.output(\"title\")` reads NaN every bar (Phase-7\n * composition bug). The compiler already computes these outputs in\n * `extractDependencyGraph`; here they are baked onto the producer\n * object so every host path (worker, quickjs, conformance) wires the\n * store with zero assembler changes. The injection is scoped to\n * bindings that are producers within a composition graph — private\n * deps and named-export siblings always, the default export only when\n * the file participates in composition (multi-export or has private\n * deps) or is itself consumed cross-file — so a standalone\n * single-export script with no deps stays byte-identical.\n *\n * Runs **before** `injectCallsiteIds` so the synthesised\n * `__chartlang_depOutput` carries a slot id read from the original\n * source positions.\n *\n * @since 0.7\n * @stable\n * @example\n * // Input: fastTrend.output(\"line\")\n * // Output: __chartlang_depOutput(\"demo.chart.ts:6:14#0\", \"fastTrend\", \"line\")\n * const fn: typeof rewriteDependencyAccessors = rewriteDependencyAccessors;\n * void fn;\n */\nexport function rewriteDependencyAccessors(\n sourceFile: ts.SourceFile,\n depGraph: DepGraph,\n sourcePath: string,\n): RewriteDependencyAccessorsResult {\n const knownLocalIds = new Set<string>();\n for (const drawn of depGraph.drawn) knownLocalIds.add(drawn.bindingName);\n for (const dep of depGraph.privateDeps) knownLocalIds.add(dep.localId);\n const outputsByDefineCall = collectProducerOutputs(depGraph);\n // `withInputs`-derived aliases (synthetic private deps with no\n // `defineCall` of their own). Every such alias's declaration is\n // rewritten from `const <alias> = <root>.withInputs({...})...;` to\n // `const <alias> = <root>;` so the runtime sentinel never fires\n // when the bundle is loaded. The merged effective inputs flow into\n // the dep runner through the manifest's `dependencies` entry; the\n // alias binding itself just needs to be a `CompiledScriptObject`\n // reference.\n const aliasLocalIds = new Set<string>();\n for (const dep of depGraph.privateDeps) {\n if (dep.defineCall === null) aliasLocalIds.add(dep.localId);\n }\n\n const factory: ts.TransformerFactory<ts.SourceFile> = (context) => {\n const visit: ts.Visitor = (node) => {\n if (ts.isCallExpression(node)) {\n const outputs = outputsByDefineCall.get(node);\n if (outputs !== undefined) {\n const injected = injectOutputsIntoDefineCall(node, outputs);\n return ts.visitEachChild(injected, visit, context);\n }\n }\n if (\n ts.isVariableDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n aliasLocalIds.has(node.name.text) &&\n node.initializer !== undefined\n ) {\n const root = resolveChainRoot(node.initializer);\n if (root !== null) {\n return ts.factory.updateVariableDeclaration(\n node,\n node.name,\n node.exclamationToken,\n node.type,\n ts.factory.createIdentifier(root.text),\n );\n }\n }\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n node.expression.name.text === \"output\"\n ) {\n const arg = node.arguments[0];\n if (arg !== undefined && ts.isStringLiteral(arg)) {\n const receiverRoot = resolveReceiverRoot(node.expression.expression);\n if (receiverRoot !== null && knownLocalIds.has(receiverRoot.text)) {\n const start = node.getStart(sourceFile);\n const { line, character } = sourceFile.getLineAndCharacterOfPosition(start);\n const slotId = `${sourcePath}:${line + 1}:${character + 1}#0`;\n return ts.factory.createCallExpression(\n ts.factory.createIdentifier(DEP_OUTPUT_HELPER),\n undefined,\n [\n ts.factory.createStringLiteral(slotId),\n ts.factory.createStringLiteral(receiverRoot.text),\n ts.factory.createStringLiteral(arg.text),\n ],\n );\n }\n }\n }\n return ts.visitEachChild(node, visit, context);\n };\n return (file) => ts.visitNode(file, visit, ts.isSourceFile) as ts.SourceFile;\n };\n\n const result = ts.transform(sourceFile, [factory]);\n const transformed = result.transformed[0];\n result.dispose();\n return Object.freeze({\n transformed,\n diagnostics: Object.freeze([] as ReadonlyArray<CompileDiagnostic>),\n });\n}\n\n/**\n * Walk back from a `<root>.withInputs({...}).withInputs({...})` chain\n * to its rooted identifier. The analysis pass already validates every\n * alias's chain shape (`dep-dynamic` errors abort the rewrite long\n * before we reach this function), so only the happy path is exercised\n * in production; the defensive `null` branches keep the rewriter\n * conservative if a future caller misuses it.\n */\nfunction resolveChainRoot(expression: ts.Expression): ts.Identifier | null {\n let current: ts.Expression = expression;\n while (ts.isCallExpression(current)) {\n const callee = current.expression;\n /* v8 ignore next 2 */\n if (!ts.isPropertyAccessExpression(callee)) return null;\n if (callee.name.text !== \"withInputs\") return null;\n current = callee.expression;\n }\n /* v8 ignore next 2 */\n if (!ts.isIdentifier(current)) return null;\n return current;\n}\n\n/**\n * Map each producer binding's original `defineIndicator(...)` call node\n * to the titled outputs that must be baked onto its runtime manifest.\n *\n * A binding is in scope when it has a real `defineCall` (withInputs\n * aliases have `null`) and declares at least one titled `plot(...)`\n * output. Every drawn binding — named-export sibling AND default — is a\n * potential producer: a same-file sibling can be consumed by the\n * default, and a single-export default can be consumed cross-file\n * (`import baseTrend from \"./base-trend.chart\"`). The compiler cannot\n * know during a producer file's own compile whether its default will be\n * imported elsewhere, so the default is always baked when it declares\n * titled outputs. This keeps cross-file producers self-describing\n * without an assembler change.\n *\n * Output-free bindings (no titled `plot`) are never touched, so a\n * standalone script that only emits untitled plots stays byte-identical.\n */\nfunction collectProducerOutputs(\n depGraph: DepGraph,\n): ReadonlyMap<ts.CallExpression, ReadonlyArray<OutputDeclaration>> {\n const map = new Map<ts.CallExpression, ReadonlyArray<OutputDeclaration>>();\n for (const dep of depGraph.privateDeps) {\n if (dep.defineCall !== null && dep.outputs.length > 0) {\n map.set(dep.defineCall, dep.outputs);\n }\n }\n for (const drawn of depGraph.drawn) {\n if (drawn.outputs.length > 0) map.set(drawn.defineCall, drawn.outputs);\n }\n return map;\n}\n\n/**\n * Append an `outputs: [{ title, kind }, ...]` property assignment to the\n * `defineIndicator({...})` opts object literal. The analysis pass\n * guarantees a producer binding's `defineCall` carries an object-literal\n * first argument, so the non-object-literal branch is defensive only.\n */\nfunction injectOutputsIntoDefineCall(\n call: ts.CallExpression,\n outputs: ReadonlyArray<OutputDeclaration>,\n): ts.CallExpression {\n const arg = call.arguments[0];\n /* v8 ignore next 3 */\n if (arg === undefined || !ts.isObjectLiteralExpression(arg)) {\n return call;\n }\n const outputsLiteral = ts.factory.createArrayLiteralExpression(\n outputs.map((output) =>\n ts.factory.createObjectLiteralExpression(\n [\n ts.factory.createPropertyAssignment(\n \"title\",\n ts.factory.createStringLiteral(output.title),\n ),\n ts.factory.createPropertyAssignment(\n \"kind\",\n ts.factory.createStringLiteral(output.kind),\n ),\n ],\n false,\n ),\n ),\n false,\n );\n const updatedArg = ts.factory.updateObjectLiteralExpression(arg, [\n ...arg.properties,\n ts.factory.createPropertyAssignment(\"outputs\", outputsLiteral),\n ]);\n return ts.factory.updateCallExpression(call, call.expression, call.typeArguments, [\n updatedArg,\n ...call.arguments.slice(1),\n ]);\n}\n\nfunction resolveReceiverRoot(receiver: ts.Expression): ts.Identifier | null {\n // extractDependencyGraph validates that every `.output(...)` call\n // reaching the rewriter has a bare identifier receiver (or a\n // withInputs-aliased binding name we already collapsed in the\n // graph). The defensive null return is exercised by the\n // \"leaves unknown .output() receivers untouched\" test case where\n // the receiver type isn't an Identifier (it's a PropertyAccess).\n if (ts.isIdentifier(receiver)) return receiver;\n return null;\n}\n"]}
|
package/dist/typesEmit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesEmit.js","sourceRoot":"","sources":["../src/typesEmit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typesEmit.js","sourceRoot":"","sources":["../src/typesEmit.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { ScriptManifest } from \"@invinite-org/chartlang-core\";\n\n/**\n * Options accepted by `emitTypes`. `manifest` accepts either a single\n * `ScriptManifest` (single-script files) or an array of manifests for\n * multi-export indicator-composition files. `sourcePath` is reserved so a\n * future generator can embed it into the declarations as a comment when\n * source navigation surfaces land.\n *\n * @since 0.1\n * @example\n * const opts: EmitTypesOptions = {\n * manifest: { } as never,\n * sourcePath: \"demo.chart.ts\",\n * };\n * void opts;\n */\nexport type EmitTypesOptions = Readonly<{\n manifest: ScriptManifest | ReadonlyArray<ScriptManifest>;\n sourcePath: string;\n}>;\n\n/**\n * Generate the `.d.ts` sibling for a compiled script. Single-script files\n * with no `outputs` / `dependencies` emit the Phase-1 minimal declarations\n * byte-identically so existing snapshot tests stay green. Multi-export\n * files (array input) or single-export files carrying `outputs` /\n * `dependencies` emit per-binding typed declarations — `output<K extends\n * \"title1\" | \"title2\">(name: K): Series<number>` overloads + `withInputs`\n * typed against the binding's `inputs` schema.\n *\n * @since 0.1\n * @example\n * // const dts = emitTypes({ manifest, sourcePath: \"demo.chart.ts\" });\n * // dts.includes(\"export default script\");\n * const fn: typeof emitTypes = emitTypes;\n * void fn;\n */\nexport function emitTypes(opts: EmitTypesOptions): string {\n const manifests: ReadonlyArray<ScriptManifest> = Array.isArray(opts.manifest)\n ? opts.manifest\n : [opts.manifest as ScriptManifest];\n\n if (manifests.length === 1 && !needsTypedExports(manifests[0] as ScriptManifest)) {\n return BACK_COMPAT_DTS;\n }\n\n return emitTypedDeclarations(manifests);\n}\n\nconst BACK_COMPAT_DTS = `// auto-generated by @invinite-org/chartlang-compiler\nimport type { CompiledScriptObject, ScriptManifest } from \"@invinite-org/chartlang-core\";\n\ndeclare const script: CompiledScriptObject;\nexport default script;\n\nexport declare const __manifest: ScriptManifest;\n`;\n\nfunction needsTypedExports(manifest: ScriptManifest): boolean {\n const hasOutputs = manifest.outputs !== undefined && manifest.outputs.length > 0;\n const hasDependencies = manifest.dependencies !== undefined && manifest.dependencies.length > 0;\n return hasOutputs || hasDependencies;\n}\n\nfunction emitTypedDeclarations(manifests: ReadonlyArray<ScriptManifest>): string {\n const lines: string[] = [\n \"// auto-generated by @invinite-org/chartlang-compiler\",\n 'import type { CompiledScriptObject, ScriptManifest, Series } from \"@invinite-org/chartlang-core\";',\n \"\",\n ];\n\n for (const m of manifests) {\n const exportName = m.exportName ?? \"default\";\n const localName = exportName === \"default\" ? \"script\" : exportName;\n lines.push(\n `declare const ${localName}: CompiledScriptObject & {`,\n ` output${outputOverloadSignature(m)}: Series<number>;`,\n ` withInputs(overrides: ${inputsOverrideType(m)}): typeof ${localName};`,\n \"};\",\n );\n if (exportName === \"default\") {\n lines.push(`export default ${localName};`, \"\");\n } else {\n lines.push(`export { ${localName} };`, \"\");\n }\n }\n\n const manifestType = manifests.length > 1 ? \"ReadonlyArray<ScriptManifest>\" : \"ScriptManifest\";\n lines.push(`export declare const __manifest: ${manifestType};`, \"\");\n\n return lines.join(\"\\n\");\n}\n\nfunction outputOverloadSignature(manifest: ScriptManifest): string {\n const outputs = manifest.outputs ?? [];\n if (outputs.length === 0) {\n return \"<K extends never>(name: K)\";\n }\n const titleUnion = outputs.map((o) => JSON.stringify(o.title)).join(\" | \");\n return `<K extends ${titleUnion}>(name: K)`;\n}\n\nfunction inputsOverrideType(manifest: ScriptManifest): string {\n const inputs = manifest.inputs;\n const keys = Object.keys(inputs);\n if (keys.length === 0) {\n return \"Readonly<Record<string, never>>\";\n }\n const fields: string[] = [];\n for (const key of keys) {\n const descriptor = inputs[key] as Readonly<Record<string, unknown>>;\n const tsType = descriptorToTsType(descriptor);\n fields.push(`${quoteFieldKey(key)}?: ${tsType}`);\n }\n /* v8 ignore next */\n return `Readonly<{ ${fields.join(\"; \")} }>`;\n}\n\nconst KIND_TO_TS_TYPE: ReadonlyMap<string, string> = new Map([\n [\"int\", \"number\"],\n [\"float\", \"number\"],\n [\"price\", \"number\"],\n [\"time\", \"number\"],\n [\"string\", \"string\"],\n [\"enum\", \"string\"],\n [\"color\", \"string\"],\n [\"source\", \"string\"],\n [\"symbol\", \"string\"],\n [\"interval\", \"string\"],\n [\"bool\", \"boolean\"],\n [\"external-series\", \"unknown\"],\n]);\n\nfunction descriptorToTsType(descriptor: Readonly<Record<string, unknown>>): string {\n const kind = descriptor.kind;\n /* v8 ignore next 2 */\n if (typeof kind !== \"string\") return \"unknown\";\n return KIND_TO_TS_TYPE.get(kind) ?? \"unknown\";\n}\n\nconst SAFE_FIELD_NAME = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nfunction quoteFieldKey(key: string): string {\n /* v8 ignore next */\n return SAFE_FIELD_NAME.test(key) ? key : JSON.stringify(key);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@invinite-org/chartlang-compiler",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "TypeScript transformer + bundler for .chart.ts files",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"esbuild": "^0.24.0",
|
|
23
23
|
"typescript": "^5.6.0",
|
|
24
|
-
"@invinite-org/chartlang-core": "1.
|
|
24
|
+
"@invinite-org/chartlang-core": "1.2.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "^20.0.0",
|