@baron1996/kline-scene-schema 0.6.0 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- /** 场景协议包版本;Scene version 仍保持 1。 */
2
- export declare const SCENE_PACKAGE_VERSION: "0.6.0";
1
+ /** 场景协议包版本;支持 Scene v1,并以 Scene v2 作为当前版本。 */
2
+ export declare const SCENE_PACKAGE_VERSION: "0.9.7";
3
3
  export * from './canonical-json.js';
4
4
  export * from './canonicalize.js';
5
5
  export * from './decimal-normalization.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AAEtD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mCAAmC,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qCAAqC,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AAEtD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mCAAmC,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qCAAqC,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- /** 场景协议包版本;Scene version 仍保持 1。 */
2
- export const SCENE_PACKAGE_VERSION = '0.6.0';
1
+ /** 场景协议包版本;支持 Scene v1,并以 Scene v2 作为当前版本。 */
2
+ export const SCENE_PACKAGE_VERSION = '0.9.7';
3
3
  export * from './canonical-json.js';
4
4
  export * from './canonicalize.js';
5
5
  export * from './decimal-normalization.js';
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-validator.d.ts","sourceRoot":"","sources":["../src/semantic-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EAIV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AA8iB/E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,CAM9E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAM3D"}
1
+ {"version":3,"file":"semantic-validator.d.ts","sourceRoot":"","sources":["../src/semantic-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EAIV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAmlB/E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,CAM9E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAM3D"}
@@ -87,6 +87,25 @@ function validateMarketData(scene, issues) {
87
87
  if (!scene.data.some((bar) => bar.timestamp === scene.viewport.anchorTimestamp)) {
88
88
  issues.push(issue('INVALID_REFERENCE', '/viewport/anchorTimestamp', 'Viewport anchorTimestamp must reference an embedded market-data bar.'));
89
89
  }
90
+ const barTimestamps = new Set(scene.data.map((bar) => bar.timestamp));
91
+ let previousGapTimestamp = -Infinity;
92
+ for (let index = 0; index < (scene.gaps?.length ?? 0); index++) {
93
+ const gap = scene.gaps?.[index];
94
+ if (gap === undefined) {
95
+ continue;
96
+ }
97
+ const path = `/gaps/${index}`;
98
+ if (gap.timestamp <= previousGapTimestamp) {
99
+ issues.push(issue('INVALID_MARKET_DATA', `${path}/timestamp`, 'Market-data Gap timestamps must be strictly increasing.'));
100
+ }
101
+ previousGapTimestamp = gap.timestamp;
102
+ if (gap.barEnd <= gap.timestamp) {
103
+ issues.push(issue('INVALID_MARKET_DATA', `${path}/barEnd`, 'Market-data Gap barEnd must be greater than timestamp.'));
104
+ }
105
+ if (barTimestamps.has(gap.timestamp)) {
106
+ issues.push(issue('INVALID_MARKET_DATA', `${path}/timestamp`, 'A timestamp cannot contain both a real Bar and a Gap.'));
107
+ }
108
+ }
90
109
  }
91
110
  function validateIndicator(indicator, pane, index, issues) {
92
111
  const path = `/panes/${pane.order}/indicators/${index}`;
package/dist/version.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export declare const SCENE_SCHEMA_NAME: "@baron1996/kline-scene";
2
- export declare const SCENE_SCHEMA_VERSION: 1;
2
+ export declare const LEGACY_SCENE_SCHEMA_VERSION: 1;
3
+ export declare const SCENE_SCHEMA_VERSION: 2;
4
+ export declare const SUPPORTED_SCENE_SCHEMA_VERSIONS: readonly [1, 2];
3
5
  export declare const KLINECHARTS_ENGINE_VERSION: "10.0.0";
4
6
  export declare const M1_SCENE_RUNTIME_VERSION: "0.1.0";
5
7
  export declare const SCENE_RUNTIME_VERSION: "0.2.0";
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAG,wBAAiC,CAAC;AACnE,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAC/C,eAAO,MAAM,0BAA0B,EAAG,QAAiB,CAAC;AAC5D,eAAO,MAAM,wBAAwB,EAAG,OAAgB,CAAC;AACzD,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AACtD,eAAO,MAAM,gCAAgC,6BAGnC,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAG,wBAAiC,CAAC;AACnE,eAAO,MAAM,2BAA2B,EAAG,CAAU,CAAC;AACtD,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAC/C,eAAO,MAAM,+BAA+B,iBAGlC,CAAC;AACX,eAAO,MAAM,0BAA0B,EAAG,QAAiB,CAAC;AAC5D,eAAO,MAAM,wBAAwB,EAAG,OAAgB,CAAC;AACzD,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AACtD,eAAO,MAAM,gCAAgC,6BAGnC,CAAC"}
package/dist/version.js CHANGED
@@ -1,5 +1,10 @@
1
1
  export const SCENE_SCHEMA_NAME = '@baron1996/kline-scene';
2
- export const SCENE_SCHEMA_VERSION = 1;
2
+ export const LEGACY_SCENE_SCHEMA_VERSION = 1;
3
+ export const SCENE_SCHEMA_VERSION = 2;
4
+ export const SUPPORTED_SCENE_SCHEMA_VERSIONS = [
5
+ LEGACY_SCENE_SCHEMA_VERSION,
6
+ SCENE_SCHEMA_VERSION,
7
+ ];
3
8
  export const KLINECHARTS_ENGINE_VERSION = '10.0.0';
4
9
  export const M1_SCENE_RUNTIME_VERSION = '0.1.0';
5
10
  export const SCENE_RUNTIME_VERSION = '0.2.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baron1996/kline-scene-schema",
3
- "version": "0.6.0",
3
+ "version": "0.9.7",
4
4
  "description": "Strict ChartScene schema, types, validation, and canonical serialization.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -23,7 +23,10 @@
23
23
  "const": "@baron1996/kline-scene"
24
24
  },
25
25
  "version": {
26
- "const": 1
26
+ "enum": [
27
+ 1,
28
+ 2
29
+ ]
27
30
  },
28
31
  "runtime": {
29
32
  "$ref": "https://baron.dev/kline-scene/runtime.schema.json"
@@ -42,6 +45,13 @@
42
45
  "$ref": "https://baron.dev/kline-scene/market-data.schema.json"
43
46
  }
44
47
  },
48
+ "gaps": {
49
+ "type": "array",
50
+ "maxItems": 1000000,
51
+ "items": {
52
+ "$ref": "https://baron.dev/kline-scene/market-data-gap.schema.json"
53
+ }
54
+ },
45
55
  "chart": {
46
56
  "$ref": "https://baron.dev/kline-scene/chart-config.schema.json"
47
57
  },
@@ -70,6 +80,33 @@
70
80
  "$ref": "https://baron.dev/kline-scene/common.schema.json#/$defs/metadata"
71
81
  }
72
82
  },
83
+ "allOf": [
84
+ {
85
+ "if": {
86
+ "properties": {
87
+ "version": {
88
+ "const": 1
89
+ }
90
+ },
91
+ "required": [
92
+ "version"
93
+ ]
94
+ },
95
+ "then": {
96
+ "properties": {
97
+ "gaps": false
98
+ }
99
+ },
100
+ "else": {
101
+ "properties": {
102
+ "gaps": true
103
+ },
104
+ "required": [
105
+ "gaps"
106
+ ]
107
+ }
108
+ }
109
+ ],
73
110
  "$defs": {
74
111
  "symbol": {
75
112
  "type": "object",
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://baron.dev/kline-scene/market-data-gap.schema.json",
4
+ "title": "MarketDataGap",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "timestamp",
9
+ "barEnd",
10
+ "classification",
11
+ "reasonCode",
12
+ "retryable"
13
+ ],
14
+ "properties": {
15
+ "timestamp": {
16
+ "$ref": "https://baron.dev/kline-scene/common.schema.json#/$defs/safeInteger"
17
+ },
18
+ "barEnd": {
19
+ "$ref": "https://baron.dev/kline-scene/common.schema.json#/$defs/safeInteger"
20
+ },
21
+ "classification": {
22
+ "enum": [
23
+ "INSTRUMENT_NOT_TRADABLE",
24
+ "SOURCE_ERROR",
25
+ "NO_TRADE",
26
+ "UNKNOWN_MISSING"
27
+ ]
28
+ },
29
+ "reasonCode": {
30
+ "type": "string",
31
+ "minLength": 1,
32
+ "maxLength": 128,
33
+ "pattern": "^[A-Z][A-Z0-9_]*$"
34
+ },
35
+ "retryable": {
36
+ "type": "boolean"
37
+ }
38
+ }
39
+ }