@invinite-org/chartlang-core 1.0.1
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 +1694 -0
- package/LICENSE +21 -0
- package/README.md +53 -0
- package/dist/alert/alert.d.ts +32 -0
- package/dist/alert/alert.d.ts.map +1 -0
- package/dist/alert/alert.js +19 -0
- package/dist/alert/alert.js.map +1 -0
- package/dist/alert/index.d.ts +2 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/alert/index.js +4 -0
- package/dist/alert/index.js.map +1 -0
- package/dist/color/colorHelpers.d.ts +65 -0
- package/dist/color/colorHelpers.d.ts.map +1 -0
- package/dist/color/colorHelpers.js +137 -0
- package/dist/color/colorHelpers.js.map +1 -0
- package/dist/color/index.d.ts +37 -0
- package/dist/color/index.d.ts.map +1 -0
- package/dist/color/index.js +23 -0
- package/dist/color/index.js.map +1 -0
- package/dist/color/parseColor.d.ts +48 -0
- package/dist/color/parseColor.d.ts.map +1 -0
- package/dist/color/parseColor.js +141 -0
- package/dist/color/parseColor.js.map +1 -0
- package/dist/define/defineAlert.d.ts +43 -0
- package/dist/define/defineAlert.d.ts.map +1 -0
- package/dist/define/defineAlert.js +49 -0
- package/dist/define/defineAlert.js.map +1 -0
- package/dist/define/defineAlertCondition.d.ts +65 -0
- package/dist/define/defineAlertCondition.d.ts.map +1 -0
- package/dist/define/defineAlertCondition.js +64 -0
- package/dist/define/defineAlertCondition.js.map +1 -0
- package/dist/define/defineDrawing.d.ts +62 -0
- package/dist/define/defineDrawing.d.ts.map +1 -0
- package/dist/define/defineDrawing.js +67 -0
- package/dist/define/defineDrawing.js.map +1 -0
- package/dist/define/defineIndicator.d.ts +48 -0
- package/dist/define/defineIndicator.d.ts.map +1 -0
- package/dist/define/defineIndicator.js +54 -0
- package/dist/define/defineIndicator.js.map +1 -0
- package/dist/define/index.d.ts +6 -0
- package/dist/define/index.d.ts.map +1 -0
- package/dist/define/index.js +7 -0
- package/dist/define/index.js.map +1 -0
- package/dist/define/overrides.d.ts +102 -0
- package/dist/define/overrides.d.ts.map +1 -0
- package/dist/define/overrides.js +4 -0
- package/dist/define/overrides.js.map +1 -0
- package/dist/draw/buckets.d.ts +57 -0
- package/dist/draw/buckets.d.ts.map +1 -0
- package/dist/draw/buckets.js +110 -0
- package/dist/draw/buckets.js.map +1 -0
- package/dist/draw/draw.d.ts +128 -0
- package/dist/draw/draw.d.ts.map +1 -0
- package/dist/draw/draw.js +40 -0
- package/dist/draw/draw.js.map +1 -0
- package/dist/draw/drawingKind.d.ts +80 -0
- package/dist/draw/drawingKind.d.ts.map +1 -0
- package/dist/draw/drawingKind.js +177 -0
- package/dist/draw/drawingKind.js.map +1 -0
- package/dist/draw/drawingState.d.ts +1420 -0
- package/dist/draw/drawingState.d.ts.map +1 -0
- package/dist/draw/drawingState.js +4 -0
- package/dist/draw/drawingState.js.map +1 -0
- package/dist/draw/drawingStyle.d.ts +219 -0
- package/dist/draw/drawingStyle.d.ts.map +1 -0
- package/dist/draw/drawingStyle.js +4 -0
- package/dist/draw/drawingStyle.js.map +1 -0
- package/dist/draw/handle.d.ts +32 -0
- package/dist/draw/handle.d.ts.map +1 -0
- package/dist/draw/handle.js +4 -0
- package/dist/draw/handle.js.map +1 -0
- package/dist/draw/index.d.ts +13 -0
- package/dist/draw/index.d.ts.map +1 -0
- package/dist/draw/index.js +7 -0
- package/dist/draw/index.js.map +1 -0
- package/dist/draw/table.d.ts +84 -0
- package/dist/draw/table.d.ts.map +1 -0
- package/dist/draw/table.js +22 -0
- package/dist/draw/table.js.map +1 -0
- package/dist/draw/worldPoint.d.ts +114 -0
- package/dist/draw/worldPoint.d.ts.map +1 -0
- package/dist/draw/worldPoint.js +4 -0
- package/dist/draw/worldPoint.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/input/index.d.ts +3 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +4 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/input.d.ts +174 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +174 -0
- package/dist/input/input.js.map +1 -0
- package/dist/input/inputDescriptor.d.ts +204 -0
- package/dist/input/inputDescriptor.d.ts.map +1 -0
- package/dist/input/inputDescriptor.js +4 -0
- package/dist/input/inputDescriptor.js.map +1 -0
- package/dist/interval/intervalToSeconds.d.ts +20 -0
- package/dist/interval/intervalToSeconds.d.ts.map +1 -0
- package/dist/interval/intervalToSeconds.js +50 -0
- package/dist/interval/intervalToSeconds.js.map +1 -0
- package/dist/plot/index.d.ts +2 -0
- package/dist/plot/index.d.ts.map +1 -0
- package/dist/plot/index.js +4 -0
- package/dist/plot/index.js.map +1 -0
- package/dist/plot/plot.d.ts +277 -0
- package/dist/plot/plot.d.ts.map +1 -0
- package/dist/plot/plot.js +37 -0
- package/dist/plot/plot.js.map +1 -0
- package/dist/request/index.d.ts +2 -0
- package/dist/request/index.d.ts.map +1 -0
- package/dist/request/index.js +4 -0
- package/dist/request/index.js.map +1 -0
- package/dist/request/request.d.ts +106 -0
- package/dist/request/request.d.ts.map +1 -0
- package/dist/request/request.js +44 -0
- package/dist/request/request.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/runtime.d.ts +84 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +72 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/state/index.d.ts +5 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +4 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/mutableSlot.d.ts +25 -0
- package/dist/state/mutableSlot.d.ts.map +1 -0
- package/dist/state/mutableSlot.js +4 -0
- package/dist/state/mutableSlot.js.map +1 -0
- package/dist/state/snapshot.d.ts +108 -0
- package/dist/state/snapshot.d.ts.map +1 -0
- package/dist/state/snapshot.js +4 -0
- package/dist/state/snapshot.js.map +1 -0
- package/dist/state/state.d.ts +86 -0
- package/dist/state/state.d.ts.map +1 -0
- package/dist/state/state.js +95 -0
- package/dist/state/state.js.map +1 -0
- package/dist/statefulPrimitives.d.ts +71 -0
- package/dist/statefulPrimitives.d.ts.map +1 -0
- package/dist/statefulPrimitives.js +234 -0
- package/dist/statefulPrimitives.js.map +1 -0
- package/dist/ta/index.d.ts +2 -0
- package/dist/ta/index.d.ts.map +1 -0
- package/dist/ta/index.js +4 -0
- package/dist/ta/index.js.map +1 -0
- package/dist/ta/ta.d.ts +2476 -0
- package/dist/ta/ta.d.ts.map +1 -0
- package/dist/ta/ta.js +312 -0
- package/dist/ta/ta.js.map +1 -0
- package/dist/time/_lib/dateTimeFormatCache.d.ts +11 -0
- package/dist/time/_lib/dateTimeFormatCache.d.ts.map +1 -0
- package/dist/time/_lib/dateTimeFormatCache.js +22 -0
- package/dist/time/_lib/dateTimeFormatCache.js.map +1 -0
- package/dist/time/index.d.ts +7 -0
- package/dist/time/index.d.ts.map +1 -0
- package/dist/time/index.js +8 -0
- package/dist/time/index.js.map +1 -0
- package/dist/time/nyDayKey.d.ts +24 -0
- package/dist/time/nyDayKey.d.ts.map +1 -0
- package/dist/time/nyDayKey.js +49 -0
- package/dist/time/nyDayKey.js.map +1 -0
- package/dist/time/session.d.ts +16 -0
- package/dist/time/session.d.ts.map +1 -0
- package/dist/time/session.js +18 -0
- package/dist/time/session.js.map +1 -0
- package/dist/time/sessionBoundaries.d.ts +40 -0
- package/dist/time/sessionBoundaries.d.ts.map +1 -0
- package/dist/time/sessionBoundaries.js +102 -0
- package/dist/time/sessionBoundaries.js.map +1 -0
- package/dist/time/types.d.ts +34 -0
- package/dist/time/types.d.ts.map +1 -0
- package/dist/time/types.js +4 -0
- package/dist/time/types.js.map +1 -0
- package/dist/time/weekKey.d.ts +11 -0
- package/dist/time/weekKey.d.ts.map +1 -0
- package/dist/time/weekKey.js +25 -0
- package/dist/time/weekKey.js.map +1 -0
- package/dist/time/weekday.d.ts +12 -0
- package/dist/time/weekday.d.ts.map +1 -0
- package/dist/time/weekday.js +22 -0
- package/dist/time/weekday.js.map +1 -0
- package/dist/types.d.ts +464 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/views/barstate.d.ts +40 -0
- package/dist/views/barstate.d.ts.map +1 -0
- package/dist/views/barstate.js +22 -0
- package/dist/views/barstate.js.map +1 -0
- package/dist/views/index.d.ts +4 -0
- package/dist/views/index.d.ts.map +1 -0
- package/dist/views/index.js +4 -0
- package/dist/views/index.js.map +1 -0
- package/dist/views/syminfo.d.ts +46 -0
- package/dist/views/syminfo.d.ts.map +1 -0
- package/dist/views/syminfo.js +25 -0
- package/dist/views/syminfo.js.map +1 -0
- package/dist/views/timeframe.d.ts +40 -0
- package/dist/views/timeframe.d.ts.map +1 -0
- package/dist/views/timeframe.js +21 -0
- package/dist/views/timeframe.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CompiledScriptObject, ComputeFn, InputSchema } from "../types.js";
|
|
2
|
+
import type { ScriptOverrides } from "./overrides.js";
|
|
3
|
+
type AlertOverrides = Omit<ScriptOverrides, "scale" | "format" | "precision">;
|
|
4
|
+
/**
|
|
5
|
+
* Author-supplied options the script passes to `defineAlert(...)`. Same shape
|
|
6
|
+
* as `DefineIndicatorOpts` minus the indicator-only `overlay` flag — alert
|
|
7
|
+
* scripts have no plot output.
|
|
8
|
+
*
|
|
9
|
+
* @since 0.1
|
|
10
|
+
* @example
|
|
11
|
+
* const opts: DefineAlertOpts = {
|
|
12
|
+
* name: "RSI overbought",
|
|
13
|
+
* apiVersion: 1,
|
|
14
|
+
* compute: () => {},
|
|
15
|
+
* };
|
|
16
|
+
*/
|
|
17
|
+
export type DefineAlertOpts = Readonly<{
|
|
18
|
+
name: string;
|
|
19
|
+
apiVersion: 1;
|
|
20
|
+
inputs?: InputSchema;
|
|
21
|
+
compute: ComputeFn;
|
|
22
|
+
}> & AlertOverrides;
|
|
23
|
+
/**
|
|
24
|
+
* Construct a Phase-1 alert script object. Returns a frozen
|
|
25
|
+
* `CompiledScriptObject` whose `manifest.kind` is `"alert"` and whose
|
|
26
|
+
* declared `capabilities` is `["alerts"]`. Same compile-time override
|
|
27
|
+
* semantics as `defineIndicator`.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.1
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { defineAlert } from "@invinite-org/chartlang-core";
|
|
33
|
+
*
|
|
34
|
+
* export default defineAlert({
|
|
35
|
+
* name: "RSI > 70",
|
|
36
|
+
* apiVersion: 1,
|
|
37
|
+
* compute: ({ alert }) => { alert("overbought"); },
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function defineAlert(opts: DefineAlertOpts): CompiledScriptObject;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=defineAlert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineAlert.d.ts","sourceRoot":"","sources":["../../src/define/defineAlert.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,KAAK,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;CACtB,CAAC,GACE,cAAc,CAAC;AAEnB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,oBAAoB,CA2BvE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
/**
|
|
4
|
+
* Construct a Phase-1 alert script object. Returns a frozen
|
|
5
|
+
* `CompiledScriptObject` whose `manifest.kind` is `"alert"` and whose
|
|
6
|
+
* declared `capabilities` is `["alerts"]`. Same compile-time override
|
|
7
|
+
* semantics as `defineIndicator`.
|
|
8
|
+
*
|
|
9
|
+
* @since 0.1
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { defineAlert } from "@invinite-org/chartlang-core";
|
|
13
|
+
*
|
|
14
|
+
* export default defineAlert({
|
|
15
|
+
* name: "RSI > 70",
|
|
16
|
+
* apiVersion: 1,
|
|
17
|
+
* compute: ({ alert }) => { alert("overbought"); },
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function defineAlert(opts) {
|
|
22
|
+
const capabilities = Object.freeze(["alerts"]);
|
|
23
|
+
const requestedIntervals = Object.freeze([]);
|
|
24
|
+
const seriesCapacities = Object.freeze({});
|
|
25
|
+
const base = {
|
|
26
|
+
apiVersion: 1,
|
|
27
|
+
kind: "alert",
|
|
28
|
+
name: opts.name,
|
|
29
|
+
inputs: opts.inputs ?? {},
|
|
30
|
+
capabilities,
|
|
31
|
+
requestedIntervals,
|
|
32
|
+
userPickableInterval: false,
|
|
33
|
+
seriesCapacities,
|
|
34
|
+
maxLookback: 0,
|
|
35
|
+
};
|
|
36
|
+
const manifest = {
|
|
37
|
+
...base,
|
|
38
|
+
...(opts.maxBarsBack === undefined ? {} : { maxBarsBack: opts.maxBarsBack }),
|
|
39
|
+
...(opts.requiresIntervals === undefined
|
|
40
|
+
? {}
|
|
41
|
+
: { requiresIntervals: opts.requiresIntervals }),
|
|
42
|
+
...(opts.shortName === undefined ? {} : { shortName: opts.shortName }),
|
|
43
|
+
};
|
|
44
|
+
return Object.freeze({
|
|
45
|
+
manifest: Object.freeze(manifest),
|
|
46
|
+
compute: opts.compute,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=defineAlert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineAlert.js","sourceRoot":"","sources":["../../src/define/defineAlert.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA4B/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC7C,MAAM,YAAY,GAA4B,MAAM,CAAC,MAAM,CAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpF,MAAM,kBAAkB,GAA0B,MAAM,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG;QACT,UAAU,EAAE,CAAU;QACtB,IAAI,EAAE,OAAgB;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,YAAY;QACZ,kBAAkB;QAClB,oBAAoB,EAAE,KAAK;QAC3B,gBAAgB;QAChB,WAAW,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,QAAQ,GAAG;QACb,GAAG,IAAI;QACP,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;KACzE,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;KACxB,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AlertConditionDescriptor, CompiledScriptObject, ComputeFn, InputSchema } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Author-supplied options for `defineAlertCondition(...)`. Mirrors
|
|
4
|
+
* `DefineAlertOpts` plus the `conditions` map.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.5
|
|
7
|
+
* @stable
|
|
8
|
+
* @example
|
|
9
|
+
* const opts: DefineAlertConditionOpts = {
|
|
10
|
+
* name: "EMA cross",
|
|
11
|
+
* apiVersion: 1,
|
|
12
|
+
* conditions: {
|
|
13
|
+
* up: {
|
|
14
|
+
* title: "Up",
|
|
15
|
+
* description: "Close > EMA",
|
|
16
|
+
* defaultMessage: "{{ticker}} up",
|
|
17
|
+
* },
|
|
18
|
+
* },
|
|
19
|
+
* compute: () => {},
|
|
20
|
+
* };
|
|
21
|
+
* void opts;
|
|
22
|
+
*/
|
|
23
|
+
export type DefineAlertConditionOpts = Readonly<{
|
|
24
|
+
name: string;
|
|
25
|
+
apiVersion: 1;
|
|
26
|
+
inputs?: InputSchema;
|
|
27
|
+
conditions: Readonly<Record<string, AlertConditionDescriptor>>;
|
|
28
|
+
compute: ComputeFn;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Construct a Phase-5 alert-condition script. Returns a frozen
|
|
32
|
+
* `CompiledScriptObject` whose `manifest.kind` is `"alertCondition"`.
|
|
33
|
+
*
|
|
34
|
+
* @since 0.5
|
|
35
|
+
* @stable
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { defineAlertCondition, input, ta } from "@invinite-org/chartlang-core";
|
|
39
|
+
*
|
|
40
|
+
* export default defineAlertCondition({
|
|
41
|
+
* name: "EMA cross",
|
|
42
|
+
* apiVersion: 1,
|
|
43
|
+
* inputs: { length: input.int(20) },
|
|
44
|
+
* conditions: {
|
|
45
|
+
* up: {
|
|
46
|
+
* title: "Up",
|
|
47
|
+
* description: "Close > EMA",
|
|
48
|
+
* defaultMessage: "{{ticker}} up",
|
|
49
|
+
* },
|
|
50
|
+
* down: {
|
|
51
|
+
* title: "Down",
|
|
52
|
+
* description: "Close < EMA",
|
|
53
|
+
* defaultMessage: "{{ticker}} down",
|
|
54
|
+
* },
|
|
55
|
+
* },
|
|
56
|
+
* compute({ bar, ta, inputs, signal }) {
|
|
57
|
+
* const ema = ta.ema(bar.close, inputs.length as number);
|
|
58
|
+
* signal?.("up", ta.crossover(bar.close, ema).current);
|
|
59
|
+
* signal?.("down", ta.crossunder(bar.close, ema).current);
|
|
60
|
+
* },
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function defineAlertCondition(opts: DefineAlertConditionOpts): CompiledScriptObject;
|
|
65
|
+
//# sourceMappingURL=defineAlertCondition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineAlertCondition.d.ts","sourceRoot":"","sources":["../../src/define/defineAlertCondition.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,wBAAwB,EAExB,oBAAoB,EACpB,SAAS,EACT,WAAW,EAEd,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAC/D,OAAO,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAcH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,oBAAoB,CAoBzF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
function freezeCondition(id, descriptor) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
id,
|
|
6
|
+
title: descriptor.title,
|
|
7
|
+
description: descriptor.description,
|
|
8
|
+
defaultMessage: descriptor.defaultMessage,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Construct a Phase-5 alert-condition script. Returns a frozen
|
|
13
|
+
* `CompiledScriptObject` whose `manifest.kind` is `"alertCondition"`.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.5
|
|
16
|
+
* @stable
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { defineAlertCondition, input, ta } from "@invinite-org/chartlang-core";
|
|
20
|
+
*
|
|
21
|
+
* export default defineAlertCondition({
|
|
22
|
+
* name: "EMA cross",
|
|
23
|
+
* apiVersion: 1,
|
|
24
|
+
* inputs: { length: input.int(20) },
|
|
25
|
+
* conditions: {
|
|
26
|
+
* up: {
|
|
27
|
+
* title: "Up",
|
|
28
|
+
* description: "Close > EMA",
|
|
29
|
+
* defaultMessage: "{{ticker}} up",
|
|
30
|
+
* },
|
|
31
|
+
* down: {
|
|
32
|
+
* title: "Down",
|
|
33
|
+
* description: "Close < EMA",
|
|
34
|
+
* defaultMessage: "{{ticker}} down",
|
|
35
|
+
* },
|
|
36
|
+
* },
|
|
37
|
+
* compute({ bar, ta, inputs, signal }) {
|
|
38
|
+
* const ema = ta.ema(bar.close, inputs.length as number);
|
|
39
|
+
* signal?.("up", ta.crossover(bar.close, ema).current);
|
|
40
|
+
* signal?.("down", ta.crossunder(bar.close, ema).current);
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function defineAlertCondition(opts) {
|
|
46
|
+
const alertConditions = Object.freeze(Object.entries(opts.conditions).map(([id, descriptor]) => freezeCondition(id, descriptor)));
|
|
47
|
+
const capabilities = Object.freeze(["alertConditions"]);
|
|
48
|
+
const requestedIntervals = Object.freeze([]);
|
|
49
|
+
const seriesCapacities = Object.freeze({});
|
|
50
|
+
const manifest = Object.freeze({
|
|
51
|
+
apiVersion: 1,
|
|
52
|
+
kind: "alertCondition",
|
|
53
|
+
name: opts.name,
|
|
54
|
+
inputs: opts.inputs ?? {},
|
|
55
|
+
capabilities,
|
|
56
|
+
requestedIntervals,
|
|
57
|
+
userPickableInterval: false,
|
|
58
|
+
seriesCapacities,
|
|
59
|
+
maxLookback: 0,
|
|
60
|
+
alertConditions,
|
|
61
|
+
});
|
|
62
|
+
return Object.freeze({ manifest, compute: opts.compute });
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=defineAlertCondition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineAlertCondition.js","sourceRoot":"","sources":["../../src/define/defineAlertCondition.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAwC/D,SAAS,eAAe,CACpB,EAAU,EACV,UAAoC;IAEpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,EAAE;QACF,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,cAAc,EAAE,UAAU,CAAC,cAAc;KAC5C,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA8B;IAC/D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CACjC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAC7F,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAmC,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1F,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAmB,MAAM,CAAC,MAAM,CAAC;QAC3C,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,YAAY;QACZ,kBAAkB;QAClB,oBAAoB,EAAE,KAAK;QAC3B,gBAAgB;QAChB,WAAW,EAAE,CAAC;QACd,eAAe;KAClB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { CompiledScriptObject, ComputeFn, DrawingCounts, InputSchema } from "../types.js";
|
|
2
|
+
import type { ScriptOverrides } from "./overrides.js";
|
|
3
|
+
type DrawingOverrides = Omit<ScriptOverrides, "maxBarsBack" | "scale">;
|
|
4
|
+
/**
|
|
5
|
+
* Author-supplied options the script passes to `defineDrawing(...)`. Same
|
|
6
|
+
* shape as `DefineAlertOpts` (no indicator-only `overlay` flag) plus the
|
|
7
|
+
* Phase-3 `maxDrawings` per-bucket cap from `DefineIndicatorOpts`.
|
|
8
|
+
*
|
|
9
|
+
* @since 0.3
|
|
10
|
+
* @stable
|
|
11
|
+
* @example
|
|
12
|
+
* const opts: DefineDrawingOpts = {
|
|
13
|
+
* name: "Interactive Fib Retracement",
|
|
14
|
+
* apiVersion: 1,
|
|
15
|
+
* compute: () => {},
|
|
16
|
+
* };
|
|
17
|
+
*/
|
|
18
|
+
export type DefineDrawingOpts = Readonly<{
|
|
19
|
+
name: string;
|
|
20
|
+
apiVersion: 1;
|
|
21
|
+
inputs?: InputSchema;
|
|
22
|
+
compute: ComputeFn;
|
|
23
|
+
/** Per-bucket cap on `draw.*` emissions per bar. @since 0.3 */
|
|
24
|
+
maxDrawings?: DrawingCounts;
|
|
25
|
+
}> & DrawingOverrides;
|
|
26
|
+
/**
|
|
27
|
+
* Construct a Phase-3 drawing script object. Mirrors `defineIndicator`
|
|
28
|
+
* structurally; only `manifest.kind` (`"drawing"`) and the declared
|
|
29
|
+
* `capabilities` (`["drawings"]`) differ. The runtime treats indicator
|
|
30
|
+
* and drawing scripts identically at the per-bar level — the
|
|
31
|
+
* discriminator is a host-side hint the editor uses to distinguish
|
|
32
|
+
* drawing scripts from indicator scripts in the script-picker UI
|
|
33
|
+
* (PLAN.md §4.1).
|
|
34
|
+
*
|
|
35
|
+
* `compute({ bar, draw, inputs, ... })` runs per bar; emit drawings via
|
|
36
|
+
* the `draw.*` namespace. Each `draw.<kind>(...)` returns a
|
|
37
|
+
* {@link DrawingHandle} the script can `update(...)` or `remove()`
|
|
38
|
+
* across bars. Phase 4 layers an interactive-anchor-picker UI on top of
|
|
39
|
+
* this constructor (PLAN.md §10.1.1); Phase 3 ships the constructor
|
|
40
|
+
* with fixed anchors so the runtime path can be exercised.
|
|
41
|
+
*
|
|
42
|
+
* @since 0.3
|
|
43
|
+
* @stable
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { defineDrawing } from "@invinite-org/chartlang-core";
|
|
47
|
+
*
|
|
48
|
+
* export default defineDrawing({
|
|
49
|
+
* name: "Interactive Fib Retracement",
|
|
50
|
+
* apiVersion: 1,
|
|
51
|
+
* compute: ({ draw }) => {
|
|
52
|
+
* draw.fibRetracement(
|
|
53
|
+
* { time: 1_700_000_000_000, price: 100 },
|
|
54
|
+
* { time: 1_700_086_400_000, price: 110 },
|
|
55
|
+
* );
|
|
56
|
+
* },
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function defineDrawing(opts: DefineDrawingOpts): CompiledScriptObject;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=defineDrawing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineDrawing.d.ts","sourceRoot":"","sources":["../../src/define/defineDrawing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,KAAK,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC,GACE,gBAAgB,CAAC;AAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,CA6B3E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
/**
|
|
4
|
+
* Construct a Phase-3 drawing script object. Mirrors `defineIndicator`
|
|
5
|
+
* structurally; only `manifest.kind` (`"drawing"`) and the declared
|
|
6
|
+
* `capabilities` (`["drawings"]`) differ. The runtime treats indicator
|
|
7
|
+
* and drawing scripts identically at the per-bar level — the
|
|
8
|
+
* discriminator is a host-side hint the editor uses to distinguish
|
|
9
|
+
* drawing scripts from indicator scripts in the script-picker UI
|
|
10
|
+
* (PLAN.md §4.1).
|
|
11
|
+
*
|
|
12
|
+
* `compute({ bar, draw, inputs, ... })` runs per bar; emit drawings via
|
|
13
|
+
* the `draw.*` namespace. Each `draw.<kind>(...)` returns a
|
|
14
|
+
* {@link DrawingHandle} the script can `update(...)` or `remove()`
|
|
15
|
+
* across bars. Phase 4 layers an interactive-anchor-picker UI on top of
|
|
16
|
+
* this constructor (PLAN.md §10.1.1); Phase 3 ships the constructor
|
|
17
|
+
* with fixed anchors so the runtime path can be exercised.
|
|
18
|
+
*
|
|
19
|
+
* @since 0.3
|
|
20
|
+
* @stable
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { defineDrawing } from "@invinite-org/chartlang-core";
|
|
24
|
+
*
|
|
25
|
+
* export default defineDrawing({
|
|
26
|
+
* name: "Interactive Fib Retracement",
|
|
27
|
+
* apiVersion: 1,
|
|
28
|
+
* compute: ({ draw }) => {
|
|
29
|
+
* draw.fibRetracement(
|
|
30
|
+
* { time: 1_700_000_000_000, price: 100 },
|
|
31
|
+
* { time: 1_700_086_400_000, price: 110 },
|
|
32
|
+
* );
|
|
33
|
+
* },
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function defineDrawing(opts) {
|
|
38
|
+
const capabilities = Object.freeze(["drawings"]);
|
|
39
|
+
const requestedIntervals = Object.freeze([]);
|
|
40
|
+
const seriesCapacities = Object.freeze({});
|
|
41
|
+
const base = {
|
|
42
|
+
apiVersion: 1,
|
|
43
|
+
kind: "drawing",
|
|
44
|
+
name: opts.name,
|
|
45
|
+
inputs: opts.inputs ?? {},
|
|
46
|
+
capabilities,
|
|
47
|
+
requestedIntervals,
|
|
48
|
+
userPickableInterval: false,
|
|
49
|
+
seriesCapacities,
|
|
50
|
+
maxLookback: 0,
|
|
51
|
+
};
|
|
52
|
+
const manifest = {
|
|
53
|
+
...base,
|
|
54
|
+
...(opts.maxDrawings === undefined ? {} : { maxDrawings: opts.maxDrawings }),
|
|
55
|
+
...(opts.format === undefined ? {} : { format: opts.format }),
|
|
56
|
+
...(opts.precision === undefined ? {} : { precision: opts.precision }),
|
|
57
|
+
...(opts.requiresIntervals === undefined
|
|
58
|
+
? {}
|
|
59
|
+
: { requiresIntervals: opts.requiresIntervals }),
|
|
60
|
+
...(opts.shortName === undefined ? {} : { shortName: opts.shortName }),
|
|
61
|
+
};
|
|
62
|
+
return Object.freeze({
|
|
63
|
+
manifest: Object.freeze(manifest),
|
|
64
|
+
compute: opts.compute,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=defineDrawing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineDrawing.js","sourceRoot":"","sources":["../../src/define/defineDrawing.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA+B/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB;IACjD,MAAM,YAAY,GAA8B,MAAM,CAAC,MAAM,CAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1F,MAAM,kBAAkB,GAA0B,MAAM,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG;QACT,UAAU,EAAE,CAAU;QACtB,IAAI,EAAE,SAAkB;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,YAAY;QACZ,kBAAkB;QAClB,oBAAoB,EAAE,KAAK;QAC3B,gBAAgB;QAChB,WAAW,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,QAAQ,GAAG;QACb,GAAG,IAAI;QACP,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;KACzE,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;KACxB,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { CompiledScriptObject, ComputeFn, DrawingCounts, InputSchema } from "../types.js";
|
|
2
|
+
import type { ScriptOverrides } from "./overrides.js";
|
|
3
|
+
/**
|
|
4
|
+
* Author-supplied options the script passes to `defineIndicator(...)`. The
|
|
5
|
+
* compiler reads this object's static shape to build the script's manifest;
|
|
6
|
+
* any field can be overridden at compile time via the AST transform.
|
|
7
|
+
*
|
|
8
|
+
* `maxDrawings` (Phase 3 / §10 / §4.1) caps the per-bucket `draw.*`
|
|
9
|
+
* emission rate per bar. Omit to default to the adapter's cap.
|
|
10
|
+
*
|
|
11
|
+
* @since 0.1
|
|
12
|
+
* @example
|
|
13
|
+
* const opts: DefineIndicatorOpts = {
|
|
14
|
+
* name: "demo",
|
|
15
|
+
* apiVersion: 1,
|
|
16
|
+
* compute: () => {},
|
|
17
|
+
* };
|
|
18
|
+
*/
|
|
19
|
+
export type DefineIndicatorOpts = Readonly<{
|
|
20
|
+
name: string;
|
|
21
|
+
apiVersion: 1;
|
|
22
|
+
overlay?: boolean;
|
|
23
|
+
inputs?: InputSchema;
|
|
24
|
+
compute: ComputeFn;
|
|
25
|
+
/** Per-bucket cap on `draw.*` emissions per bar. @since 0.3 */
|
|
26
|
+
maxDrawings?: DrawingCounts;
|
|
27
|
+
}> & ScriptOverrides;
|
|
28
|
+
/**
|
|
29
|
+
* Construct a Phase-1 indicator script object. Returns a frozen
|
|
30
|
+
* `CompiledScriptObject` with a default manifest the compiler later overrides
|
|
31
|
+
* (extracts `capabilities` from primitive usage, `maxLookback` from
|
|
32
|
+
* `series[N]` reads). The defaults let the constructor work in unit tests
|
|
33
|
+
* before the compiler runs.
|
|
34
|
+
*
|
|
35
|
+
* @since 0.1
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { defineIndicator } from "@invinite-org/chartlang-core";
|
|
39
|
+
*
|
|
40
|
+
* export default defineIndicator({
|
|
41
|
+
* name: "EMA(20)",
|
|
42
|
+
* apiVersion: 1,
|
|
43
|
+
* compute: ({ bar, plot }) => { plot(bar.close); },
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function defineIndicator(opts: DefineIndicatorOpts): CompiledScriptObject;
|
|
48
|
+
//# sourceMappingURL=defineIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineIndicator.d.ts","sourceRoot":"","sources":["../../src/define/defineIndicator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC,GACE,eAAe,CAAC;AAEpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,oBAAoB,CA+B/E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
/**
|
|
4
|
+
* Construct a Phase-1 indicator script object. Returns a frozen
|
|
5
|
+
* `CompiledScriptObject` with a default manifest the compiler later overrides
|
|
6
|
+
* (extracts `capabilities` from primitive usage, `maxLookback` from
|
|
7
|
+
* `series[N]` reads). The defaults let the constructor work in unit tests
|
|
8
|
+
* before the compiler runs.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.1
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { defineIndicator } from "@invinite-org/chartlang-core";
|
|
14
|
+
*
|
|
15
|
+
* export default defineIndicator({
|
|
16
|
+
* name: "EMA(20)",
|
|
17
|
+
* apiVersion: 1,
|
|
18
|
+
* compute: ({ bar, plot }) => { plot(bar.close); },
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function defineIndicator(opts) {
|
|
23
|
+
const capabilities = Object.freeze(["indicators"]);
|
|
24
|
+
const requestedIntervals = Object.freeze([]);
|
|
25
|
+
const seriesCapacities = Object.freeze({});
|
|
26
|
+
const base = {
|
|
27
|
+
apiVersion: 1,
|
|
28
|
+
kind: "indicator",
|
|
29
|
+
name: opts.name,
|
|
30
|
+
inputs: opts.inputs ?? {},
|
|
31
|
+
capabilities,
|
|
32
|
+
requestedIntervals,
|
|
33
|
+
userPickableInterval: false,
|
|
34
|
+
seriesCapacities,
|
|
35
|
+
maxLookback: 0,
|
|
36
|
+
};
|
|
37
|
+
const manifest = {
|
|
38
|
+
...base,
|
|
39
|
+
...(opts.maxDrawings === undefined ? {} : { maxDrawings: opts.maxDrawings }),
|
|
40
|
+
...(opts.maxBarsBack === undefined ? {} : { maxBarsBack: opts.maxBarsBack }),
|
|
41
|
+
...(opts.format === undefined ? {} : { format: opts.format }),
|
|
42
|
+
...(opts.precision === undefined ? {} : { precision: opts.precision }),
|
|
43
|
+
...(opts.scale === undefined ? {} : { scale: opts.scale }),
|
|
44
|
+
...(opts.requiresIntervals === undefined
|
|
45
|
+
? {}
|
|
46
|
+
: { requiresIntervals: opts.requiresIntervals }),
|
|
47
|
+
...(opts.shortName === undefined ? {} : { shortName: opts.shortName }),
|
|
48
|
+
};
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
manifest: Object.freeze(manifest),
|
|
51
|
+
compute: opts.compute,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=defineIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineIndicator.js","sourceRoot":"","sources":["../../src/define/defineIndicator.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAgC/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,eAAe,CAAC,IAAyB;IACrD,MAAM,YAAY,GAAgC,MAAM,CAAC,MAAM,CAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;IAChG,MAAM,kBAAkB,GAA0B,MAAM,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG;QACT,UAAU,EAAE,CAAU;QACtB,IAAI,EAAE,WAAoB;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,YAAY;QACZ,kBAAkB;QAClB,oBAAoB,EAAE,KAAK;QAC3B,gBAAgB;QAChB,WAAW,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,QAAQ,GAAG;QACb,GAAG,IAAI;QACP,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;KACzE,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;KACxB,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from "./defineIndicator.js";
|
|
2
|
+
export * from "./defineAlert.js";
|
|
3
|
+
export * from "./defineAlertCondition.js";
|
|
4
|
+
export * from "./defineDrawing.js";
|
|
5
|
+
export type { ScaleAxis, ScriptOverrides, ValueFormat } from "./overrides.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/define/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
export * from "./defineIndicator.js";
|
|
4
|
+
export * from "./defineAlert.js";
|
|
5
|
+
export * from "./defineAlertCondition.js";
|
|
6
|
+
export * from "./defineDrawing.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/define/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value-format hint the adapter uses for axis-label rendering. PLAN §4.1.
|
|
3
|
+
* `"price"` formats with the symbol's quote-currency rules; `"volume"` uses
|
|
4
|
+
* K/M/B compact notation; `"percent"` appends `%`; `"compact"` falls back to
|
|
5
|
+
* K/M/B for generic non-volume values.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4
|
|
8
|
+
* @stable
|
|
9
|
+
* @example
|
|
10
|
+
* const f: ValueFormat = "percent";
|
|
11
|
+
* void f;
|
|
12
|
+
*/
|
|
13
|
+
export type ValueFormat = "price" | "volume" | "percent" | "compact";
|
|
14
|
+
/**
|
|
15
|
+
* Scale axis the indicator should bind to. PLAN §4.1.
|
|
16
|
+
*
|
|
17
|
+
* - `"price"` — overlay on the main price pane.
|
|
18
|
+
* - `"left"` / `"right"` — sub-pane axis side.
|
|
19
|
+
* - `"new"` — request a fresh sub-pane keyed by the script id.
|
|
20
|
+
*
|
|
21
|
+
* @since 0.4
|
|
22
|
+
* @stable
|
|
23
|
+
* @example
|
|
24
|
+
* const s: ScaleAxis = "right";
|
|
25
|
+
* void s;
|
|
26
|
+
*/
|
|
27
|
+
export type ScaleAxis = "price" | "left" | "right" | "new";
|
|
28
|
+
/**
|
|
29
|
+
* Author-supplied display + budget overrides. Every field is optional;
|
|
30
|
+
* missing fields fall back to adapter defaults.
|
|
31
|
+
*
|
|
32
|
+
* @since 0.4
|
|
33
|
+
* @stable
|
|
34
|
+
* @example
|
|
35
|
+
* const o: ScriptOverrides = {
|
|
36
|
+
* shortName: "EMA(20)",
|
|
37
|
+
* precision: 4,
|
|
38
|
+
* format: "price",
|
|
39
|
+
* };
|
|
40
|
+
* void o;
|
|
41
|
+
*/
|
|
42
|
+
export type ScriptOverrides = Readonly<{
|
|
43
|
+
/**
|
|
44
|
+
* Max bars of historical lookback the script needs. `0` keeps the
|
|
45
|
+
* runtime default. Pine `max_bars_back` parity.
|
|
46
|
+
*
|
|
47
|
+
* @since 0.4
|
|
48
|
+
* @example
|
|
49
|
+
* const v: ScriptOverrides["maxBarsBack"] = 100;
|
|
50
|
+
* void v;
|
|
51
|
+
*/
|
|
52
|
+
maxBarsBack?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Value-formatting hint for axis labels + cursor read-out.
|
|
55
|
+
*
|
|
56
|
+
* @since 0.4
|
|
57
|
+
* @example
|
|
58
|
+
* const v: ScriptOverrides["format"] = "price";
|
|
59
|
+
* void v;
|
|
60
|
+
*/
|
|
61
|
+
format?: ValueFormat;
|
|
62
|
+
/**
|
|
63
|
+
* Decimal precision the adapter renders the indicator at. `0`-`10`;
|
|
64
|
+
* `undefined` follows the symbol's default precision.
|
|
65
|
+
*
|
|
66
|
+
* @since 0.4
|
|
67
|
+
* @example
|
|
68
|
+
* const v: ScriptOverrides["precision"] = 2;
|
|
69
|
+
* void v;
|
|
70
|
+
*/
|
|
71
|
+
precision?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Scale-axis binding. Defaults to `"price"` for overlay indicators and
|
|
74
|
+
* `"right"` for sub-pane indicators.
|
|
75
|
+
*
|
|
76
|
+
* @since 0.4
|
|
77
|
+
* @example
|
|
78
|
+
* const v: ScriptOverrides["scale"] = "right";
|
|
79
|
+
* void v;
|
|
80
|
+
*/
|
|
81
|
+
scale?: ScaleAxis;
|
|
82
|
+
/**
|
|
83
|
+
* Intervals the script requires the adapter to ship in
|
|
84
|
+
* `Capabilities.intervals`.
|
|
85
|
+
*
|
|
86
|
+
* @since 0.4
|
|
87
|
+
* @example
|
|
88
|
+
* const v: ScriptOverrides["requiresIntervals"] = ["1D"];
|
|
89
|
+
* void v;
|
|
90
|
+
*/
|
|
91
|
+
requiresIntervals?: ReadonlyArray<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Compact display label for legend chips. Defaults to truncated `name`.
|
|
94
|
+
*
|
|
95
|
+
* @since 0.4
|
|
96
|
+
* @example
|
|
97
|
+
* const v: ScriptOverrides["shortName"] = "EMA";
|
|
98
|
+
* void v;
|
|
99
|
+
*/
|
|
100
|
+
shortName?: string;
|
|
101
|
+
}>;
|
|
102
|
+
//# sourceMappingURL=overrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/define/overrides.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAErE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACnC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/define/overrides.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D"}
|