@invinite-org/chartlang-compiler 1.0.1 → 1.2.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 +107 -0
- package/README.md +3 -0
- package/dist/analysis/extractCapabilities.d.ts +5 -1
- package/dist/analysis/extractCapabilities.d.ts.map +1 -1
- package/dist/analysis/extractCapabilities.js +6 -2
- package/dist/analysis/extractCapabilities.js.map +1 -1
- package/dist/analysis/extractDependencyGraph.d.ts +160 -0
- package/dist/analysis/extractDependencyGraph.d.ts.map +1 -0
- package/dist/analysis/extractDependencyGraph.js +690 -0
- package/dist/analysis/extractDependencyGraph.js.map +1 -0
- package/dist/analysis/extractInputs.d.ts +5 -1
- package/dist/analysis/extractInputs.d.ts.map +1 -1
- package/dist/analysis/extractInputs.js +6 -2
- package/dist/analysis/extractInputs.js.map +1 -1
- package/dist/analysis/extractMaxLookback.d.ts +6 -1
- package/dist/analysis/extractMaxLookback.d.ts.map +1 -1
- package/dist/analysis/extractMaxLookback.js +10 -5
- package/dist/analysis/extractMaxLookback.js.map +1 -1
- package/dist/analysis/forbiddenConstructs.d.ts +1 -2
- package/dist/analysis/forbiddenConstructs.d.ts.map +1 -1
- package/dist/analysis/forbiddenConstructs.js +4 -2
- 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 +1 -0
- package/dist/analysis/index.js.map +1 -1
- package/dist/analysis/structuralChecks.d.ts +65 -9
- package/dist/analysis/structuralChecks.d.ts.map +1 -1
- package/dist/analysis/structuralChecks.js +111 -22
- package/dist/analysis/structuralChecks.js.map +1 -1
- package/dist/api.d.ts +52 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +485 -35
- package/dist/api.js.map +1 -1
- package/dist/bundle.d.ts +91 -3
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +88 -5
- package/dist/bundle.js.map +1 -1
- package/dist/dependency/index.d.ts +3 -0
- package/dist/dependency/index.d.ts.map +1 -0
- package/dist/dependency/index.js +4 -0
- package/dist/dependency/index.js.map +1 -0
- package/dist/dependency/resolveProducer.d.ts +183 -0
- package/dist/dependency/resolveProducer.d.ts.map +1 -0
- package/dist/dependency/resolveProducer.js +256 -0
- package/dist/dependency/resolveProducer.js.map +1 -0
- package/dist/diagnostics.d.ts +6 -2
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +8 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +27 -0
- package/dist/manifest.js.map +1 -1
- package/dist/program.d.ts +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +80 -4
- package/dist/program.js.map +1 -1
- package/dist/transformers/callsiteIdInjection.d.ts +3 -2
- package/dist/transformers/callsiteIdInjection.d.ts.map +1 -1
- package/dist/transformers/callsiteIdInjection.js +16 -1
- package/dist/transformers/callsiteIdInjection.js.map +1 -1
- package/dist/transformers/index.d.ts +2 -0
- package/dist/transformers/index.d.ts.map +1 -1
- package/dist/transformers/index.js +1 -0
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/plotKindFromCallsite.d.ts +43 -0
- package/dist/transformers/plotKindFromCallsite.d.ts.map +1 -0
- package/dist/transformers/plotKindFromCallsite.js +103 -0
- package/dist/transformers/plotKindFromCallsite.js.map +1 -0
- package/dist/transformers/rewriteDependencyAccessors.d.ts +65 -0
- package/dist/transformers/rewriteDependencyAccessors.d.ts.map +1 -0
- package/dist/transformers/rewriteDependencyAccessors.js +204 -0
- package/dist/transformers/rewriteDependencyAccessors.js.map +1 -0
- package/dist/typesEmit.d.ts +14 -11
- package/dist/typesEmit.d.ts.map +1 -1
- package/dist/typesEmit.js +91 -7
- package/dist/typesEmit.js.map +1 -1
- package/package.json +2 -2
package/dist/typesEmit.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
2
|
// See the LICENSE file in the repo root for full license text.
|
|
3
3
|
/**
|
|
4
|
-
* Generate the
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Generate the `.d.ts` sibling for a compiled script. Single-script files
|
|
5
|
+
* with no `outputs` / `dependencies` emit the Phase-1 minimal declarations
|
|
6
|
+
* byte-identically so existing snapshot tests stay green. Multi-export
|
|
7
|
+
* files (array input) or single-export files carrying `outputs` /
|
|
8
|
+
* `dependencies` emit per-binding typed declarations — `output<K extends
|
|
9
|
+
* "title1" | "title2">(name: K): Series<number>` overloads + `withInputs`
|
|
10
|
+
* typed against the binding's `inputs` schema.
|
|
9
11
|
*
|
|
10
12
|
* @since 0.1
|
|
11
13
|
* @example
|
|
@@ -14,8 +16,16 @@
|
|
|
14
16
|
* const fn: typeof emitTypes = emitTypes;
|
|
15
17
|
* void fn;
|
|
16
18
|
*/
|
|
17
|
-
export function emitTypes(
|
|
18
|
-
|
|
19
|
+
export function emitTypes(opts) {
|
|
20
|
+
const manifests = Array.isArray(opts.manifest)
|
|
21
|
+
? opts.manifest
|
|
22
|
+
: [opts.manifest];
|
|
23
|
+
if (manifests.length === 1 && !needsTypedExports(manifests[0])) {
|
|
24
|
+
return BACK_COMPAT_DTS;
|
|
25
|
+
}
|
|
26
|
+
return emitTypedDeclarations(manifests);
|
|
27
|
+
}
|
|
28
|
+
const BACK_COMPAT_DTS = `// auto-generated by @invinite-org/chartlang-compiler
|
|
19
29
|
import type { CompiledScriptObject, ScriptManifest } from "@invinite-org/chartlang-core";
|
|
20
30
|
|
|
21
31
|
declare const script: CompiledScriptObject;
|
|
@@ -23,5 +33,79 @@ export default script;
|
|
|
23
33
|
|
|
24
34
|
export declare const __manifest: ScriptManifest;
|
|
25
35
|
`;
|
|
36
|
+
function needsTypedExports(manifest) {
|
|
37
|
+
const hasOutputs = manifest.outputs !== undefined && manifest.outputs.length > 0;
|
|
38
|
+
const hasDependencies = manifest.dependencies !== undefined && manifest.dependencies.length > 0;
|
|
39
|
+
return hasOutputs || hasDependencies;
|
|
40
|
+
}
|
|
41
|
+
function emitTypedDeclarations(manifests) {
|
|
42
|
+
const lines = [
|
|
43
|
+
"// auto-generated by @invinite-org/chartlang-compiler",
|
|
44
|
+
'import type { CompiledScriptObject, ScriptManifest, Series } from "@invinite-org/chartlang-core";',
|
|
45
|
+
"",
|
|
46
|
+
];
|
|
47
|
+
for (const m of manifests) {
|
|
48
|
+
const exportName = m.exportName ?? "default";
|
|
49
|
+
const localName = exportName === "default" ? "script" : exportName;
|
|
50
|
+
lines.push(`declare const ${localName}: CompiledScriptObject & {`, ` output${outputOverloadSignature(m)}: Series<number>;`, ` withInputs(overrides: ${inputsOverrideType(m)}): typeof ${localName};`, "};");
|
|
51
|
+
if (exportName === "default") {
|
|
52
|
+
lines.push(`export default ${localName};`, "");
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
lines.push(`export { ${localName} };`, "");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const manifestType = manifests.length > 1 ? "ReadonlyArray<ScriptManifest>" : "ScriptManifest";
|
|
59
|
+
lines.push(`export declare const __manifest: ${manifestType};`, "");
|
|
60
|
+
return lines.join("\n");
|
|
61
|
+
}
|
|
62
|
+
function outputOverloadSignature(manifest) {
|
|
63
|
+
const outputs = manifest.outputs ?? [];
|
|
64
|
+
if (outputs.length === 0) {
|
|
65
|
+
return "<K extends never>(name: K)";
|
|
66
|
+
}
|
|
67
|
+
const titleUnion = outputs.map((o) => JSON.stringify(o.title)).join(" | ");
|
|
68
|
+
return `<K extends ${titleUnion}>(name: K)`;
|
|
69
|
+
}
|
|
70
|
+
function inputsOverrideType(manifest) {
|
|
71
|
+
const inputs = manifest.inputs;
|
|
72
|
+
const keys = Object.keys(inputs);
|
|
73
|
+
if (keys.length === 0) {
|
|
74
|
+
return "Readonly<Record<string, never>>";
|
|
75
|
+
}
|
|
76
|
+
const fields = [];
|
|
77
|
+
for (const key of keys) {
|
|
78
|
+
const descriptor = inputs[key];
|
|
79
|
+
const tsType = descriptorToTsType(descriptor);
|
|
80
|
+
fields.push(`${quoteFieldKey(key)}?: ${tsType}`);
|
|
81
|
+
}
|
|
82
|
+
/* v8 ignore next */
|
|
83
|
+
return `Readonly<{ ${fields.join("; ")} }>`;
|
|
84
|
+
}
|
|
85
|
+
const KIND_TO_TS_TYPE = new Map([
|
|
86
|
+
["int", "number"],
|
|
87
|
+
["float", "number"],
|
|
88
|
+
["price", "number"],
|
|
89
|
+
["time", "number"],
|
|
90
|
+
["string", "string"],
|
|
91
|
+
["enum", "string"],
|
|
92
|
+
["color", "string"],
|
|
93
|
+
["source", "string"],
|
|
94
|
+
["symbol", "string"],
|
|
95
|
+
["interval", "string"],
|
|
96
|
+
["bool", "boolean"],
|
|
97
|
+
["external-series", "unknown"],
|
|
98
|
+
]);
|
|
99
|
+
function descriptorToTsType(descriptor) {
|
|
100
|
+
const kind = descriptor.kind;
|
|
101
|
+
/* v8 ignore next 2 */
|
|
102
|
+
if (typeof kind !== "string")
|
|
103
|
+
return "unknown";
|
|
104
|
+
return KIND_TO_TS_TYPE.get(kind) ?? "unknown";
|
|
105
|
+
}
|
|
106
|
+
const SAFE_FIELD_NAME = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
107
|
+
function quoteFieldKey(key) {
|
|
108
|
+
/* v8 ignore next */
|
|
109
|
+
return SAFE_FIELD_NAME.test(key) ? key : JSON.stringify(key);
|
|
26
110
|
}
|
|
27
111
|
//# sourceMappingURL=typesEmit.js.map
|
package/dist/typesEmit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesEmit.js","sourceRoot":"","sources":["../src/typesEmit.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;
|
|
1
|
+
{"version":3,"file":"typesEmit.js","sourceRoot":"","sources":["../src/typesEmit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@invinite-org/chartlang-compiler",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.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.0
|
|
24
|
+
"@invinite-org/chartlang-core": "1.1.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "^20.0.0",
|