@platforma-sdk/model 1.53.10 → 1.53.13

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.
Files changed (288) hide show
  1. package/dist/annotations/converter.cjs +11 -11
  2. package/dist/annotations/converter.cjs.map +1 -1
  3. package/dist/annotations/converter.d.ts +1 -1
  4. package/dist/annotations/converter.d.ts.map +1 -1
  5. package/dist/annotations/converter.js +11 -11
  6. package/dist/annotations/converter.js.map +1 -1
  7. package/dist/annotations/index.d.ts +2 -2
  8. package/dist/annotations/types.d.ts +4 -4
  9. package/dist/bconfig/index.d.ts +5 -5
  10. package/dist/bconfig/lambdas.d.ts +7 -7
  11. package/dist/bconfig/lambdas.d.ts.map +1 -1
  12. package/dist/bconfig/normalization.cjs.map +1 -1
  13. package/dist/bconfig/normalization.d.ts +3 -3
  14. package/dist/bconfig/normalization.js.map +1 -1
  15. package/dist/bconfig/types.cjs.map +1 -1
  16. package/dist/bconfig/types.d.ts +2 -2
  17. package/dist/bconfig/types.d.ts.map +1 -1
  18. package/dist/bconfig/types.js.map +1 -1
  19. package/dist/bconfig/util.d.ts +4 -4
  20. package/dist/bconfig/v3.d.ts +3 -3
  21. package/dist/block_api_v1.d.ts +2 -2
  22. package/dist/block_api_v1.d.ts.map +1 -1
  23. package/dist/block_api_v2.d.ts +2 -2
  24. package/dist/block_api_v2.d.ts.map +1 -1
  25. package/dist/block_api_v3.d.ts +3 -3
  26. package/dist/block_migrations.cjs +10 -10
  27. package/dist/block_migrations.cjs.map +1 -1
  28. package/dist/block_migrations.d.ts.map +1 -1
  29. package/dist/block_migrations.js +10 -10
  30. package/dist/block_migrations.js.map +1 -1
  31. package/dist/block_model.cjs +11 -11
  32. package/dist/block_model.cjs.map +1 -1
  33. package/dist/block_model.d.ts +8 -8
  34. package/dist/block_model.d.ts.map +1 -1
  35. package/dist/block_model.js +11 -11
  36. package/dist/block_model.js.map +1 -1
  37. package/dist/block_state_patch.d.ts +2 -2
  38. package/dist/block_state_util.cjs +1 -1
  39. package/dist/block_state_util.cjs.map +1 -1
  40. package/dist/block_state_util.d.ts +3 -3
  41. package/dist/block_state_util.js +1 -1
  42. package/dist/block_state_util.js.map +1 -1
  43. package/dist/block_storage.cjs +10 -10
  44. package/dist/block_storage.cjs.map +1 -1
  45. package/dist/block_storage.d.ts +2 -2
  46. package/dist/block_storage.d.ts.map +1 -1
  47. package/dist/block_storage.js +10 -10
  48. package/dist/block_storage.js.map +1 -1
  49. package/dist/block_storage_vm.cjs +22 -22
  50. package/dist/block_storage_vm.cjs.map +1 -1
  51. package/dist/block_storage_vm.d.ts +1 -1
  52. package/dist/block_storage_vm.d.ts.map +1 -1
  53. package/dist/block_storage_vm.js +22 -22
  54. package/dist/block_storage_vm.js.map +1 -1
  55. package/dist/builder.cjs +32 -23
  56. package/dist/builder.cjs.map +1 -1
  57. package/dist/builder.d.ts +7 -7
  58. package/dist/builder.d.ts.map +1 -1
  59. package/dist/builder.js +32 -23
  60. package/dist/builder.js.map +1 -1
  61. package/dist/components/PFrameForGraphs.cjs +7 -6
  62. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  63. package/dist/components/PFrameForGraphs.d.ts +4 -4
  64. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  65. package/dist/components/PFrameForGraphs.js +7 -6
  66. package/dist/components/PFrameForGraphs.js.map +1 -1
  67. package/dist/components/PlAnnotations/filter.d.ts +14 -14
  68. package/dist/components/PlAnnotations/filter.d.ts.map +1 -1
  69. package/dist/components/PlAnnotations/filters_ui.cjs +46 -46
  70. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  71. package/dist/components/PlAnnotations/filters_ui.d.ts +10 -34
  72. package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -1
  73. package/dist/components/PlAnnotations/filters_ui.js +46 -46
  74. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  75. package/dist/components/PlAnnotations/index.d.ts +2 -2
  76. package/dist/components/PlAnnotations/types.d.ts +2 -2
  77. package/dist/components/PlDataTable.cjs +19 -20
  78. package/dist/components/PlDataTable.cjs.map +1 -1
  79. package/dist/components/PlDataTable.d.ts +27 -27
  80. package/dist/components/PlDataTable.d.ts.map +1 -1
  81. package/dist/components/PlDataTable.js +19 -20
  82. package/dist/components/PlDataTable.js.map +1 -1
  83. package/dist/components/PlMultiSequenceAlignment.cjs +2 -2
  84. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  85. package/dist/components/PlMultiSequenceAlignment.d.ts +6 -6
  86. package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -1
  87. package/dist/components/PlMultiSequenceAlignment.js +2 -2
  88. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  89. package/dist/components/PlSelectionModel.cjs.map +1 -1
  90. package/dist/components/PlSelectionModel.d.ts +1 -1
  91. package/dist/components/PlSelectionModel.js.map +1 -1
  92. package/dist/components/index.d.ts +5 -5
  93. package/dist/config/actions.cjs +39 -39
  94. package/dist/config/actions.cjs.map +1 -1
  95. package/dist/config/actions.d.ts +9 -9
  96. package/dist/config/actions.d.ts.map +1 -1
  97. package/dist/config/actions.js +39 -39
  98. package/dist/config/actions.js.map +1 -1
  99. package/dist/config/actions_kinds.d.ts +30 -30
  100. package/dist/config/actions_kinds.d.ts.map +1 -1
  101. package/dist/config/index.d.ts +6 -6
  102. package/dist/config/model.d.ts +28 -28
  103. package/dist/config/model_meta.d.ts +1 -1
  104. package/dist/config/type_engine.d.ts +3 -3
  105. package/dist/config/type_util.d.ts +2 -2
  106. package/dist/env_value.cjs +1 -1
  107. package/dist/env_value.cjs.map +1 -1
  108. package/dist/env_value.js +1 -1
  109. package/dist/env_value.js.map +1 -1
  110. package/dist/filters/converter.cjs +36 -32
  111. package/dist/filters/converter.cjs.map +1 -1
  112. package/dist/filters/converter.d.ts +2 -2
  113. package/dist/filters/converter.d.ts.map +1 -1
  114. package/dist/filters/converter.js +36 -32
  115. package/dist/filters/converter.js.map +1 -1
  116. package/dist/filters/index.d.ts +2 -2
  117. package/dist/filters/types.d.ts +33 -33
  118. package/dist/filters/types.d.ts.map +1 -1
  119. package/dist/index.d.ts +24 -24
  120. package/dist/internal.cjs +7 -7
  121. package/dist/internal.cjs.map +1 -1
  122. package/dist/internal.d.ts +4 -4
  123. package/dist/internal.d.ts.map +1 -1
  124. package/dist/internal.js +7 -7
  125. package/dist/internal.js.map +1 -1
  126. package/dist/package.json.cjs +1 -1
  127. package/dist/package.json.js +1 -1
  128. package/dist/pframe.cjs +1 -1
  129. package/dist/pframe.cjs.map +1 -1
  130. package/dist/pframe.d.ts +1 -1
  131. package/dist/pframe.js +1 -1
  132. package/dist/pframe.js.map +1 -1
  133. package/dist/pframe_utils/columns.cjs +23 -15
  134. package/dist/pframe_utils/columns.cjs.map +1 -1
  135. package/dist/pframe_utils/columns.d.ts +3 -3
  136. package/dist/pframe_utils/columns.d.ts.map +1 -1
  137. package/dist/pframe_utils/columns.js +23 -15
  138. package/dist/pframe_utils/columns.js.map +1 -1
  139. package/dist/pframe_utils/index.cjs +25 -25
  140. package/dist/pframe_utils/index.cjs.map +1 -1
  141. package/dist/pframe_utils/index.d.ts +3 -3
  142. package/dist/pframe_utils/index.d.ts.map +1 -1
  143. package/dist/pframe_utils/index.js +25 -25
  144. package/dist/pframe_utils/index.js.map +1 -1
  145. package/dist/platforma.d.ts +7 -7
  146. package/dist/platforma.d.ts.map +1 -1
  147. package/dist/raw_globals.cjs +4 -1
  148. package/dist/raw_globals.cjs.map +1 -1
  149. package/dist/raw_globals.d.ts +2 -2
  150. package/dist/raw_globals.d.ts.map +1 -1
  151. package/dist/raw_globals.js +4 -1
  152. package/dist/raw_globals.js.map +1 -1
  153. package/dist/ref_util.cjs +4 -4
  154. package/dist/ref_util.cjs.map +1 -1
  155. package/dist/ref_util.d.ts +1 -1
  156. package/dist/ref_util.js +4 -4
  157. package/dist/ref_util.js.map +1 -1
  158. package/dist/render/accessor.cjs +24 -24
  159. package/dist/render/accessor.cjs.map +1 -1
  160. package/dist/render/accessor.d.ts +10 -10
  161. package/dist/render/accessor.d.ts.map +1 -1
  162. package/dist/render/accessor.js +24 -24
  163. package/dist/render/accessor.js.map +1 -1
  164. package/dist/render/api.cjs +23 -23
  165. package/dist/render/api.cjs.map +1 -1
  166. package/dist/render/api.d.ts +11 -11
  167. package/dist/render/api.d.ts.map +1 -1
  168. package/dist/render/api.js +23 -23
  169. package/dist/render/api.js.map +1 -1
  170. package/dist/render/future.cjs.map +1 -1
  171. package/dist/render/future.d.ts +1 -1
  172. package/dist/render/future.js.map +1 -1
  173. package/dist/render/index.d.ts +6 -6
  174. package/dist/render/internal.cjs +4 -4
  175. package/dist/render/internal.cjs.map +1 -1
  176. package/dist/render/internal.d.ts +7 -7
  177. package/dist/render/internal.d.ts.map +1 -1
  178. package/dist/render/internal.js +4 -4
  179. package/dist/render/internal.js.map +1 -1
  180. package/dist/render/traversal_ops.d.ts +1 -1
  181. package/dist/render/util/axis_filtering.cjs +48 -44
  182. package/dist/render/util/axis_filtering.cjs.map +1 -1
  183. package/dist/render/util/axis_filtering.d.ts +2 -2
  184. package/dist/render/util/axis_filtering.js +48 -44
  185. package/dist/render/util/axis_filtering.js.map +1 -1
  186. package/dist/render/util/column_collection.cjs +42 -35
  187. package/dist/render/util/column_collection.cjs.map +1 -1
  188. package/dist/render/util/column_collection.d.ts +4 -4
  189. package/dist/render/util/column_collection.d.ts.map +1 -1
  190. package/dist/render/util/column_collection.js +42 -35
  191. package/dist/render/util/column_collection.js.map +1 -1
  192. package/dist/render/util/index.d.ts +4 -4
  193. package/dist/render/util/label.cjs +15 -21
  194. package/dist/render/util/label.cjs.map +1 -1
  195. package/dist/render/util/label.d.ts +2 -2
  196. package/dist/render/util/label.d.ts.map +1 -1
  197. package/dist/render/util/label.js +15 -21
  198. package/dist/render/util/label.js.map +1 -1
  199. package/dist/render/util/pcolumn_data.cjs +56 -54
  200. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  201. package/dist/render/util/pcolumn_data.d.ts +5 -5
  202. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  203. package/dist/render/util/pcolumn_data.js +56 -54
  204. package/dist/render/util/pcolumn_data.js.map +1 -1
  205. package/dist/render/util/pframe_upgraders.cjs +6 -6
  206. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  207. package/dist/render/util/pframe_upgraders.d.ts +1 -1
  208. package/dist/render/util/pframe_upgraders.d.ts.map +1 -1
  209. package/dist/render/util/pframe_upgraders.js +6 -6
  210. package/dist/render/util/pframe_upgraders.js.map +1 -1
  211. package/dist/render/util/split_selectors.d.ts +1 -1
  212. package/dist/render/util/split_selectors.d.ts.map +1 -1
  213. package/dist/sdk_info.cjs.map +1 -1
  214. package/dist/sdk_info.js.map +1 -1
  215. package/dist/version.cjs.map +1 -1
  216. package/dist/version.js.map +1 -1
  217. package/package.json +23 -21
  218. package/src/annotations/converter.test.ts +98 -101
  219. package/src/annotations/converter.ts +21 -17
  220. package/src/annotations/index.ts +2 -2
  221. package/src/annotations/types.ts +4 -4
  222. package/src/bconfig/index.ts +5 -5
  223. package/src/bconfig/lambdas.ts +10 -12
  224. package/src/bconfig/normalization.ts +5 -5
  225. package/src/bconfig/types.ts +3 -5
  226. package/src/bconfig/util.ts +3 -3
  227. package/src/bconfig/v3.ts +3 -3
  228. package/src/block_api_v1.ts +7 -3
  229. package/src/block_api_v2.ts +7 -3
  230. package/src/block_api_v3.ts +3 -3
  231. package/src/block_migrations.test.ts +66 -67
  232. package/src/block_migrations.ts +16 -16
  233. package/src/block_model.ts +76 -140
  234. package/src/block_state_patch.ts +2 -2
  235. package/src/block_state_util.ts +4 -4
  236. package/src/block_storage.test.ts +106 -99
  237. package/src/block_storage.ts +22 -25
  238. package/src/block_storage_vm.ts +41 -35
  239. package/src/builder.ts +107 -95
  240. package/src/components/PFrameForGraphs.test.ts +261 -255
  241. package/src/components/PFrameForGraphs.ts +35 -22
  242. package/src/components/PlAnnotations/filter.ts +21 -15
  243. package/src/components/PlAnnotations/filters_ui.test.ts +230 -73
  244. package/src/components/PlAnnotations/filters_ui.ts +138 -105
  245. package/src/components/PlAnnotations/index.ts +2 -2
  246. package/src/components/PlAnnotations/types.ts +2 -2
  247. package/src/components/PlDataTable.ts +177 -164
  248. package/src/components/PlMultiSequenceAlignment.ts +11 -18
  249. package/src/components/PlSelectionModel.ts +1 -1
  250. package/src/components/index.ts +5 -5
  251. package/src/config/actions.ts +64 -59
  252. package/src/config/actions_kinds.ts +38 -34
  253. package/src/config/index.ts +6 -6
  254. package/src/config/model.ts +28 -28
  255. package/src/config/model_meta.ts +1 -1
  256. package/src/config/type_engine.ts +3 -3
  257. package/src/config/type_util.ts +2 -2
  258. package/src/env_value.ts +2 -2
  259. package/src/filters/converter.test.ts +185 -144
  260. package/src/filters/converter.ts +47 -35
  261. package/src/filters/index.ts +2 -2
  262. package/src/filters/types.ts +44 -39
  263. package/src/global.d.ts +1 -1
  264. package/src/index.ts +24 -24
  265. package/src/internal.ts +27 -17
  266. package/src/pframe.ts +3 -3
  267. package/src/pframe_utils/columns.ts +81 -31
  268. package/src/pframe_utils/index.ts +65 -43
  269. package/src/platforma.ts +44 -21
  270. package/src/raw_globals.ts +13 -7
  271. package/src/ref_util.ts +6 -6
  272. package/src/render/accessor.ts +43 -44
  273. package/src/render/api.ts +102 -78
  274. package/src/render/future.ts +2 -2
  275. package/src/render/index.ts +6 -6
  276. package/src/render/internal.ts +11 -12
  277. package/src/render/traversal_ops.ts +1 -1
  278. package/src/render/util/axis_filtering.ts +67 -52
  279. package/src/render/util/column_collection.ts +171 -91
  280. package/src/render/util/index.ts +4 -4
  281. package/src/render/util/label.test.ts +139 -139
  282. package/src/render/util/label.ts +42 -33
  283. package/src/render/util/pcolumn_data.ts +111 -75
  284. package/src/render/util/pframe_upgraders.ts +24 -13
  285. package/src/render/util/split_selectors.ts +6 -1
  286. package/src/sdk_info.ts +1 -1
  287. package/src/typing.test.ts +56 -56
  288. package/src/version.ts +1 -1
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from 'vitest';
1
+ import { describe, expect, it } from "vitest";
2
2
  import {
3
3
  BLOCK_STORAGE_KEY,
4
4
  BLOCK_STORAGE_SCHEMA_VERSION,
@@ -18,63 +18,65 @@ import {
18
18
  updateStorageData,
19
19
  updateStorageDataVersion,
20
20
  updateStorage,
21
- } from './block_storage';
21
+ } from "./block_storage";
22
22
 
23
- describe('BlockStorage', () => {
24
- describe('BLOCK_STORAGE_KEY and BLOCK_STORAGE_SCHEMA_VERSION', () => {
25
- it('should have correct key constant', () => {
26
- expect(typeof BLOCK_STORAGE_KEY).toBe('string');
27
- expect(BLOCK_STORAGE_KEY).toBe('__pl_a7f3e2b9__');
23
+ describe("BlockStorage", () => {
24
+ describe("BLOCK_STORAGE_KEY and BLOCK_STORAGE_SCHEMA_VERSION", () => {
25
+ it("should have correct key constant", () => {
26
+ expect(typeof BLOCK_STORAGE_KEY).toBe("string");
27
+ expect(BLOCK_STORAGE_KEY).toBe("__pl_a7f3e2b9__");
28
28
  });
29
29
 
30
- it('should have correct schema version', () => {
31
- expect(BLOCK_STORAGE_SCHEMA_VERSION).toBe('v1');
30
+ it("should have correct schema version", () => {
31
+ expect(BLOCK_STORAGE_SCHEMA_VERSION).toBe("v1");
32
32
  });
33
33
  });
34
34
 
35
- describe('isBlockStorage', () => {
36
- it('should return true for valid BlockStorage with discriminator', () => {
35
+ describe("isBlockStorage", () => {
36
+ it("should return true for valid BlockStorage with discriminator", () => {
37
37
  const storage = createBlockStorage({});
38
38
  expect(isBlockStorage(storage)).toBe(true);
39
39
  });
40
40
 
41
- it('should return true for BlockStorage with plugin data', () => {
42
- const storage = setPluginData(createBlockStorage({ foo: 'bar' }), 'test', { data: 123 });
41
+ it("should return true for BlockStorage with plugin data", () => {
42
+ const storage = setPluginData(createBlockStorage({ foo: "bar" }), "test", { data: 123 });
43
43
  expect(isBlockStorage(storage)).toBe(true);
44
44
  });
45
45
 
46
- it('should return false for null', () => {
46
+ it("should return false for null", () => {
47
47
  expect(isBlockStorage(null)).toBe(false);
48
48
  });
49
49
 
50
- it('should return false for undefined', () => {
50
+ it("should return false for undefined", () => {
51
51
  expect(isBlockStorage(undefined)).toBe(false);
52
52
  });
53
53
 
54
- it('should return false for primitive values', () => {
54
+ it("should return false for primitive values", () => {
55
55
  expect(isBlockStorage(42)).toBe(false);
56
- expect(isBlockStorage('string')).toBe(false);
56
+ expect(isBlockStorage("string")).toBe(false);
57
57
  expect(isBlockStorage(true)).toBe(false);
58
58
  });
59
59
 
60
- it('should return false for objects without discriminator', () => {
61
- expect(isBlockStorage({ __dataVersion: 'v1', __data: {} })).toBe(false);
60
+ it("should return false for objects without discriminator", () => {
61
+ expect(isBlockStorage({ __dataVersion: "v1", __data: {} })).toBe(false);
62
62
  });
63
63
 
64
- it('should return false for objects with wrong discriminator value', () => {
65
- expect(isBlockStorage({ [BLOCK_STORAGE_KEY]: 'wrong', __dataVersion: 'v1', __data: {} })).toBe(false);
64
+ it("should return false for objects with wrong discriminator value", () => {
65
+ expect(
66
+ isBlockStorage({ [BLOCK_STORAGE_KEY]: "wrong", __dataVersion: "v1", __data: {} }),
67
+ ).toBe(false);
66
68
  });
67
69
  });
68
70
 
69
- describe('createBlockStorage', () => {
70
- it('should create storage with discriminator key and default values', () => {
71
+ describe("createBlockStorage", () => {
72
+ it("should create storage with discriminator key and default values", () => {
71
73
  const storage = createBlockStorage();
72
74
  expect(storage[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
73
75
  expect(storage.__dataVersion).toBe(DATA_MODEL_DEFAULT_VERSION);
74
76
  expect(storage.__data).toEqual({});
75
77
  });
76
78
 
77
- it('should create storage with custom initial data', () => {
79
+ it("should create storage with custom initial data", () => {
78
80
  const data = { numbers: [1, 2, 3] };
79
81
  const storage = createBlockStorage(data);
80
82
  expect(storage[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
@@ -82,37 +84,37 @@ describe('BlockStorage', () => {
82
84
  expect(storage.__data).toEqual(data);
83
85
  });
84
86
 
85
- it('should create storage with custom version', () => {
86
- const storage = createBlockStorage({ foo: 'bar' }, 'v5');
87
+ it("should create storage with custom version", () => {
88
+ const storage = createBlockStorage({ foo: "bar" }, "v5");
87
89
  expect(storage[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
88
- expect(storage.__dataVersion).toBe('v5');
89
- expect(storage.__data).toEqual({ foo: 'bar' });
90
+ expect(storage.__dataVersion).toBe("v5");
91
+ expect(storage.__data).toEqual({ foo: "bar" });
90
92
  });
91
93
  });
92
94
 
93
- describe('normalizeBlockStorage', () => {
94
- it('should return BlockStorage as-is', () => {
95
- const storage = createBlockStorage({ data: 'test' }, 'v2');
95
+ describe("normalizeBlockStorage", () => {
96
+ it("should return BlockStorage as-is", () => {
97
+ const storage = createBlockStorage({ data: "test" }, "v2");
96
98
  const normalized = normalizeBlockStorage(storage);
97
99
  expect(normalized).toEqual(storage);
98
100
  });
99
101
 
100
- it('should wrap legacy data in BlockStorage structure', () => {
101
- const legacyData = { numbers: [1, 2, 3], name: 'test' };
102
+ it("should wrap legacy data in BlockStorage structure", () => {
103
+ const legacyData = { numbers: [1, 2, 3], name: "test" };
102
104
  const normalized = normalizeBlockStorage(legacyData);
103
105
  expect(normalized[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
104
106
  expect(normalized.__dataVersion).toBe(DATA_MODEL_DEFAULT_VERSION);
105
107
  expect(normalized.__data).toEqual(legacyData);
106
108
  });
107
109
 
108
- it('should wrap primitive legacy data', () => {
109
- const normalized = normalizeBlockStorage('simple string');
110
+ it("should wrap primitive legacy data", () => {
111
+ const normalized = normalizeBlockStorage("simple string");
110
112
  expect(normalized[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
111
113
  expect(normalized.__dataVersion).toBe(DATA_MODEL_DEFAULT_VERSION);
112
- expect(normalized.__data).toBe('simple string');
114
+ expect(normalized.__data).toBe("simple string");
113
115
  });
114
116
 
115
- it('should wrap null legacy data', () => {
117
+ it("should wrap null legacy data", () => {
116
118
  const normalized = normalizeBlockStorage(null);
117
119
  expect(normalized[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
118
120
  expect(normalized.__dataVersion).toBe(DATA_MODEL_DEFAULT_VERSION);
@@ -120,117 +122,120 @@ describe('BlockStorage', () => {
120
122
  });
121
123
  });
122
124
 
123
- describe('Data access functions', () => {
124
- const storage = createBlockStorage({ count: 42 }, 'v3');
125
+ describe("Data access functions", () => {
126
+ const storage = createBlockStorage({ count: 42 }, "v3");
125
127
 
126
- it('getStorageData should return the data', () => {
128
+ it("getStorageData should return the data", () => {
127
129
  expect(getStorageData(storage)).toEqual({ count: 42 });
128
130
  });
129
131
 
130
- it('getStorageDataVersion should return the version', () => {
131
- expect(getStorageDataVersion(storage)).toBe('v3');
132
+ it("getStorageDataVersion should return the version", () => {
133
+ expect(getStorageDataVersion(storage)).toBe("v3");
132
134
  });
133
135
 
134
- it('updateStorageData should return new storage with updated data', () => {
135
- const newStorage = updateStorageData(storage, { operation: 'update-data', value: { count: 100 } });
136
+ it("updateStorageData should return new storage with updated data", () => {
137
+ const newStorage = updateStorageData(storage, {
138
+ operation: "update-data",
139
+ value: { count: 100 },
140
+ });
136
141
  expect(newStorage.__data).toEqual({ count: 100 });
137
- expect(newStorage.__dataVersion).toBe('v3');
142
+ expect(newStorage.__dataVersion).toBe("v3");
138
143
  expect(newStorage[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
139
144
  // Original should be unchanged
140
145
  expect(storage.__data).toEqual({ count: 42 });
141
146
  });
142
147
 
143
- it('updateStorageDataVersion should return new storage with updated version', () => {
144
- const newStorage = updateStorageDataVersion(storage, 'v5');
145
- expect(newStorage.__dataVersion).toBe('v5');
148
+ it("updateStorageDataVersion should return new storage with updated version", () => {
149
+ const newStorage = updateStorageDataVersion(storage, "v5");
150
+ expect(newStorage.__dataVersion).toBe("v5");
146
151
  expect(newStorage.__data).toEqual({ count: 42 });
147
152
  expect(newStorage[BLOCK_STORAGE_KEY]).toBe(BLOCK_STORAGE_SCHEMA_VERSION);
148
153
  // Original should be unchanged
149
- expect(storage.__dataVersion).toBe('v3');
154
+ expect(storage.__dataVersion).toBe("v3");
150
155
  });
151
156
  });
152
157
 
153
- describe('Plugin data functions', () => {
158
+ describe("Plugin data functions", () => {
154
159
  const baseStorage = createBlockStorage({});
155
160
 
156
- it('setPluginData should add plugin data', () => {
157
- const storage = setPluginData(baseStorage, 'table', { columns: ['a', 'b'] });
158
- expect(storage['@plugin/table']).toEqual({ columns: ['a', 'b'] });
161
+ it("setPluginData should add plugin data", () => {
162
+ const storage = setPluginData(baseStorage, "table", { columns: ["a", "b"] });
163
+ expect(storage["@plugin/table"]).toEqual({ columns: ["a", "b"] });
159
164
  });
160
165
 
161
- it('getPluginData should retrieve plugin data', () => {
162
- const storage = setPluginData(baseStorage, 'chart', { type: 'bar' });
163
- expect(getPluginData(storage, 'chart')).toEqual({ type: 'bar' });
166
+ it("getPluginData should retrieve plugin data", () => {
167
+ const storage = setPluginData(baseStorage, "chart", { type: "bar" });
168
+ expect(getPluginData(storage, "chart")).toEqual({ type: "bar" });
164
169
  });
165
170
 
166
- it('getPluginData should return undefined for missing plugin', () => {
167
- expect(getPluginData(baseStorage, 'nonexistent')).toBeUndefined();
171
+ it("getPluginData should return undefined for missing plugin", () => {
172
+ expect(getPluginData(baseStorage, "nonexistent")).toBeUndefined();
168
173
  });
169
174
 
170
- it('removePluginData should remove plugin data', () => {
171
- let storage = setPluginData(baseStorage, 'toRemove', { data: 'test' });
172
- storage = setPluginData(storage, 'toKeep', { other: 'data' });
173
- const result = removePluginData(storage, 'toRemove');
174
- expect(result['@plugin/toRemove']).toBeUndefined();
175
- expect(result['@plugin/toKeep']).toEqual({ other: 'data' });
175
+ it("removePluginData should remove plugin data", () => {
176
+ let storage = setPluginData(baseStorage, "toRemove", { data: "test" });
177
+ storage = setPluginData(storage, "toKeep", { other: "data" });
178
+ const result = removePluginData(storage, "toRemove");
179
+ expect(result["@plugin/toRemove"]).toBeUndefined();
180
+ expect(result["@plugin/toKeep"]).toEqual({ other: "data" });
176
181
  });
177
182
 
178
- it('getPluginNames should return all plugin names', () => {
183
+ it("getPluginNames should return all plugin names", () => {
179
184
  let storage = createBlockStorage({});
180
- storage = setPluginData(storage, 'alpha', {});
181
- storage = setPluginData(storage, 'beta', {});
182
- storage = setPluginData(storage, 'gamma', {});
185
+ storage = setPluginData(storage, "alpha", {});
186
+ storage = setPluginData(storage, "beta", {});
187
+ storage = setPluginData(storage, "gamma", {});
183
188
  const names = getPluginNames(storage);
184
- expect(names.sort()).toEqual(['alpha', 'beta', 'gamma']);
189
+ expect(names.sort()).toEqual(["alpha", "beta", "gamma"]);
185
190
  });
186
191
 
187
- it('getPluginNames should return empty array when no plugins', () => {
192
+ it("getPluginNames should return empty array when no plugins", () => {
188
193
  expect(getPluginNames(baseStorage)).toEqual([]);
189
194
  });
190
195
  });
191
196
 
192
- describe('Generic storage access', () => {
193
- const storage = createBlockStorage('hello', 'v2');
197
+ describe("Generic storage access", () => {
198
+ const storage = createBlockStorage("hello", "v2");
194
199
 
195
- it('getFromStorage should get __data', () => {
196
- expect(getFromStorage(storage, '__data')).toBe('hello');
200
+ it("getFromStorage should get __data", () => {
201
+ expect(getFromStorage(storage, "__data")).toBe("hello");
197
202
  });
198
203
 
199
- it('getFromStorage should get __dataVersion', () => {
200
- expect(getFromStorage(storage, '__dataVersion')).toBe('v2');
204
+ it("getFromStorage should get __dataVersion", () => {
205
+ expect(getFromStorage(storage, "__dataVersion")).toBe("v2");
201
206
  });
202
207
 
203
- it('updateStorage should update any key', () => {
204
- const updated = updateStorage(storage, '__data', 'world');
205
- expect(updated.__data).toBe('world');
206
- expect(storage.__data).toBe('hello'); // immutable
208
+ it("updateStorage should update any key", () => {
209
+ const updated = updateStorage(storage, "__data", "world");
210
+ expect(updated.__data).toBe("world");
211
+ expect(storage.__data).toBe("hello"); // immutable
207
212
  });
208
213
  });
209
214
 
210
- describe('BlockStorageHandlers', () => {
211
- describe('defaultBlockStorageHandlers', () => {
212
- it('transformStateForStorage should replace data', () => {
213
- const storage = createBlockStorage('old');
214
- const result = defaultBlockStorageHandlers.transformStateForStorage(storage, 'new');
215
- expect(result.__data).toBe('new');
215
+ describe("BlockStorageHandlers", () => {
216
+ describe("defaultBlockStorageHandlers", () => {
217
+ it("transformStateForStorage should replace data", () => {
218
+ const storage = createBlockStorage("old");
219
+ const result = defaultBlockStorageHandlers.transformStateForStorage(storage, "new");
220
+ expect(result.__data).toBe("new");
216
221
  expect(result.__dataVersion).toBe(DATA_MODEL_DEFAULT_VERSION);
217
222
  });
218
223
 
219
- it('deriveStateForArgs should return data directly', () => {
220
- const storage = createBlockStorage({ data: 'test' });
221
- expect(defaultBlockStorageHandlers.deriveStateForArgs(storage)).toEqual({ data: 'test' });
224
+ it("deriveStateForArgs should return data directly", () => {
225
+ const storage = createBlockStorage({ data: "test" });
226
+ expect(defaultBlockStorageHandlers.deriveStateForArgs(storage)).toEqual({ data: "test" });
222
227
  });
223
228
 
224
- it('migrateStorage should update version only', () => {
225
- const storage = createBlockStorage({ data: 'test' });
226
- const result = defaultBlockStorageHandlers.migrateStorage(storage, 'v1', 'v3');
227
- expect(result.__dataVersion).toBe('v3');
228
- expect(result.__data).toEqual({ data: 'test' });
229
+ it("migrateStorage should update version only", () => {
230
+ const storage = createBlockStorage({ data: "test" });
231
+ const result = defaultBlockStorageHandlers.migrateStorage(storage, "v1", "v3");
232
+ expect(result.__dataVersion).toBe("v3");
233
+ expect(result.__data).toEqual({ data: "test" });
229
234
  });
230
235
  });
231
236
 
232
- describe('mergeBlockStorageHandlers', () => {
233
- it('should return defaults when no custom handlers provided', () => {
237
+ describe("mergeBlockStorageHandlers", () => {
238
+ it("should return defaults when no custom handlers provided", () => {
234
239
  const handlers = mergeBlockStorageHandlers();
235
240
  expect(handlers.transformStateForStorage).toBe(
236
241
  defaultBlockStorageHandlers.transformStateForStorage,
@@ -239,8 +244,11 @@ describe('BlockStorage', () => {
239
244
  expect(handlers.migrateStorage).toBe(defaultBlockStorageHandlers.migrateStorage);
240
245
  });
241
246
 
242
- it('should override with custom handlers', () => {
243
- const customTransform = <T>(storage: ReturnType<typeof createBlockStorage<T>>, data: T) => ({
247
+ it("should override with custom handlers", () => {
248
+ const customTransform = <T>(
249
+ storage: ReturnType<typeof createBlockStorage<T>>,
250
+ data: T,
251
+ ) => ({
244
252
  ...storage,
245
253
  __data: data,
246
254
  __dataVersion: `${storage.__dataVersion}-next`,
@@ -256,4 +264,3 @@ describe('BlockStorage', () => {
256
264
  });
257
265
  });
258
266
  });
259
-
@@ -17,24 +17,24 @@
17
17
  * Discriminator key for BlockStorage format detection.
18
18
  * This unique hash-based key identifies data as BlockStorage vs legacy formats.
19
19
  */
20
- export const BLOCK_STORAGE_KEY = '__pl_a7f3e2b9__';
20
+ export const BLOCK_STORAGE_KEY = "__pl_a7f3e2b9__";
21
21
 
22
22
  /**
23
23
  * Current BlockStorage schema version.
24
24
  * Increment this when the storage structure itself changes (not block state migrations).
25
25
  */
26
- export const BLOCK_STORAGE_SCHEMA_VERSION = 'v1';
26
+ export const BLOCK_STORAGE_SCHEMA_VERSION = "v1";
27
27
 
28
28
  /**
29
29
  * Default data version for new blocks without migrations.
30
30
  * Unique identifier ensures blocks are created via DataModel API.
31
31
  */
32
- export const DATA_MODEL_DEFAULT_VERSION = '__pl_v1_d4e8f2a1__';
32
+ export const DATA_MODEL_DEFAULT_VERSION = "__pl_v1_d4e8f2a1__";
33
33
 
34
34
  /**
35
35
  * Type for valid schema versions
36
36
  */
37
- export type BlockStorageSchemaVersion = 'v1'; // Add 'v2', 'v3', etc. as schema evolves
37
+ export type BlockStorageSchemaVersion = "v1"; // Add 'v2', 'v3', etc. as schema evolves
38
38
 
39
39
  /**
40
40
  * Plugin key type - keys starting with `@plugin/` are reserved for plugin data
@@ -65,11 +65,11 @@ export type BlockStorage<TState = unknown> = {
65
65
  * Checks for the discriminator key and valid schema version.
66
66
  */
67
67
  export function isBlockStorage(value: unknown): value is BlockStorage {
68
- if (value === null || typeof value !== 'object') return false;
68
+ if (value === null || typeof value !== "object") return false;
69
69
  const obj = value as Record<string, unknown>;
70
70
  const schemaVersion = obj[BLOCK_STORAGE_KEY];
71
71
  // Currently only 'v1' is valid, but this allows future versions
72
- return schemaVersion === 'v1'; // Add more versions as schema evolves
72
+ return schemaVersion === "v1"; // Add more versions as schema evolves
73
73
  }
74
74
 
75
75
  // =============================================================================
@@ -108,9 +108,10 @@ export function normalizeBlockStorage<TState = unknown>(raw: unknown): BlockStor
108
108
  return {
109
109
  ...storage,
110
110
  // Fix for early released version where __dataVersion was a number
111
- __dataVersion: typeof storage.__dataVersion === 'number'
112
- ? DATA_MODEL_DEFAULT_VERSION
113
- : storage.__dataVersion,
111
+ __dataVersion:
112
+ typeof storage.__dataVersion === "number"
113
+ ? DATA_MODEL_DEFAULT_VERSION
114
+ : storage.__dataVersion,
114
115
  };
115
116
  }
116
117
  // Legacy format: raw is the state directly
@@ -142,16 +143,14 @@ export function getStorageData<TState>(storage: BlockStorage<TState>): TState {
142
143
  * @param rawStorage - Raw storage data from middle layer (may be any format)
143
144
  * @returns The extracted data value, or undefined if storage is undefined/null
144
145
  */
145
- export function deriveDataFromStorage<TData = unknown>(
146
- rawStorage: unknown,
147
- ): TData {
146
+ export function deriveDataFromStorage<TData = unknown>(rawStorage: unknown): TData {
148
147
  // Normalize to BlockStorage format (handles legacy formats too)
149
148
  const storage = normalizeBlockStorage<TData>(rawStorage);
150
149
  return getStorageData(storage);
151
150
  }
152
151
 
153
152
  /** Payload for storage mutation operations. SDK defines specific operations. */
154
- export type MutateStoragePayload<T = unknown> = { operation: 'update-data'; value: T };
153
+ export type MutateStoragePayload<T = unknown> = { operation: "update-data"; value: T };
155
154
 
156
155
  /**
157
156
  * Updates the data in BlockStorage (immutable)
@@ -165,7 +164,7 @@ export function updateStorageData<TValue = unknown>(
165
164
  payload: MutateStoragePayload<TValue>,
166
165
  ): BlockStorage<TValue> {
167
166
  switch (payload.operation) {
168
- case 'update-data':
167
+ case "update-data":
169
168
  return { ...storage, __data: payload.value };
170
169
  default:
171
170
  throw new Error(`Unknown storage operation: ${(payload as { operation: string }).operation}`);
@@ -267,8 +266,8 @@ export function removePluginData<TState>(
267
266
  */
268
267
  export function getPluginNames(storage: BlockStorage): string[] {
269
268
  return Object.keys(storage)
270
- .filter((key): key is PluginKey => key.startsWith('@plugin/'))
271
- .map((key) => key.slice('@plugin/'.length));
269
+ .filter((key): key is PluginKey => key.startsWith("@plugin/"))
270
+ .map((key) => key.slice("@plugin/".length));
272
271
  }
273
272
 
274
273
  // =============================================================================
@@ -282,10 +281,10 @@ export function getPluginNames(storage: BlockStorage): string[] {
282
281
  * @param key - The key to retrieve
283
282
  * @returns The value at the given key
284
283
  */
285
- export function getFromStorage<
286
- TState,
287
- K extends keyof BlockStorage<TState>,
288
- >(storage: BlockStorage<TState>, key: K): BlockStorage<TState>[K] {
284
+ export function getFromStorage<TState, K extends keyof BlockStorage<TState>>(
285
+ storage: BlockStorage<TState>,
286
+ key: K,
287
+ ): BlockStorage<TState>[K] {
289
288
  return storage[key];
290
289
  }
291
290
 
@@ -297,10 +296,7 @@ export function getFromStorage<
297
296
  * @param value - The new value
298
297
  * @returns A new BlockStorage with the updated value
299
298
  */
300
- export function updateStorage<
301
- TState,
302
- K extends keyof BlockStorage<TState>,
303
- >(
299
+ export function updateStorage<TState, K extends keyof BlockStorage<TState>>(
304
300
  storage: BlockStorage<TState>,
305
301
  key: K,
306
302
  value: BlockStorage<TState>[K],
@@ -362,7 +358,8 @@ export const defaultBlockStorageHandlers: Required<BlockStorageHandlers<unknown>
362
358
  transformStateForStorage: <TState>(
363
359
  storage: BlockStorage<TState>,
364
360
  newState: TState,
365
- ): BlockStorage<TState> => updateStorageData(storage, { operation: 'update-data', value: newState }),
361
+ ): BlockStorage<TState> =>
362
+ updateStorageData(storage, { operation: "update-data", value: newState }),
366
363
 
367
364
  deriveStateForArgs: <TState>(storage: BlockStorage<TState>): TState => getStorageData(storage),
368
365