@milaboratories/pl-model-common 1.19.7 → 1.19.9

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 (238) hide show
  1. package/dist/author_marker.d.ts +0 -1
  2. package/dist/base32_encode.cjs +56 -0
  3. package/dist/base32_encode.cjs.map +1 -0
  4. package/dist/base32_encode.d.ts +0 -1
  5. package/dist/base32_encode.js +54 -0
  6. package/dist/base32_encode.js.map +1 -0
  7. package/dist/block_state.d.ts +0 -1
  8. package/dist/bmodel/block_config.cjs +15 -0
  9. package/dist/bmodel/block_config.cjs.map +1 -0
  10. package/dist/bmodel/block_config.d.ts +0 -1
  11. package/dist/bmodel/block_config.js +13 -0
  12. package/dist/bmodel/block_config.js.map +1 -0
  13. package/dist/bmodel/code.d.ts +0 -1
  14. package/dist/bmodel/container.d.ts +0 -1
  15. package/dist/bmodel/index.d.ts +0 -1
  16. package/dist/bmodel/normalization.cjs +86 -0
  17. package/dist/bmodel/normalization.cjs.map +1 -0
  18. package/dist/bmodel/normalization.d.ts +0 -1
  19. package/dist/bmodel/normalization.js +84 -0
  20. package/dist/bmodel/normalization.js.map +1 -0
  21. package/dist/bmodel/types.d.ts +0 -1
  22. package/dist/branding.d.ts +0 -1
  23. package/dist/common_types.d.ts +0 -1
  24. package/dist/driver_kit.d.ts +0 -1
  25. package/dist/drivers/blob.cjs +27 -0
  26. package/dist/drivers/blob.cjs.map +1 -0
  27. package/dist/drivers/blob.d.ts +0 -1
  28. package/dist/drivers/blob.js +23 -0
  29. package/dist/drivers/blob.js.map +1 -0
  30. package/dist/drivers/index.d.ts +0 -1
  31. package/dist/drivers/interfaces.d.ts +0 -1
  32. package/dist/drivers/log.cjs +9 -0
  33. package/dist/drivers/log.cjs.map +1 -0
  34. package/dist/drivers/log.d.ts +0 -1
  35. package/dist/drivers/log.js +7 -0
  36. package/dist/drivers/log.js.map +1 -0
  37. package/dist/drivers/ls.cjs +39 -0
  38. package/dist/drivers/ls.cjs.map +1 -0
  39. package/dist/drivers/ls.d.ts +0 -1
  40. package/dist/drivers/ls.js +34 -0
  41. package/dist/drivers/ls.js.map +1 -0
  42. package/dist/drivers/pframe/column_filter.d.ts +0 -1
  43. package/dist/drivers/pframe/data_info.cjs +275 -0
  44. package/dist/drivers/pframe/data_info.cjs.map +1 -0
  45. package/dist/drivers/pframe/data_info.d.ts +0 -1
  46. package/dist/drivers/pframe/data_info.js +266 -0
  47. package/dist/drivers/pframe/data_info.js.map +1 -0
  48. package/dist/drivers/pframe/data_types.cjs +91 -0
  49. package/dist/drivers/pframe/data_types.cjs.map +1 -0
  50. package/dist/drivers/pframe/data_types.d.ts +0 -1
  51. package/dist/drivers/pframe/data_types.js +83 -0
  52. package/dist/drivers/pframe/data_types.js.map +1 -0
  53. package/dist/drivers/pframe/driver.d.ts +0 -1
  54. package/dist/drivers/pframe/find_columns.d.ts +0 -1
  55. package/dist/drivers/pframe/index.d.ts +0 -1
  56. package/dist/drivers/pframe/linker_columns.cjs +218 -0
  57. package/dist/drivers/pframe/linker_columns.cjs.map +1 -0
  58. package/dist/drivers/pframe/linker_columns.d.ts +0 -1
  59. package/dist/drivers/pframe/linker_columns.js +216 -0
  60. package/dist/drivers/pframe/linker_columns.js.map +1 -0
  61. package/dist/drivers/pframe/pframe.d.ts +0 -1
  62. package/dist/drivers/pframe/spec/anchored.cjs +234 -0
  63. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -0
  64. package/dist/drivers/pframe/spec/anchored.d.ts +0 -1
  65. package/dist/drivers/pframe/spec/anchored.js +231 -0
  66. package/dist/drivers/pframe/spec/anchored.js.map +1 -0
  67. package/dist/drivers/pframe/spec/filtered_column.cjs +13 -0
  68. package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -0
  69. package/dist/drivers/pframe/spec/filtered_column.d.ts +0 -1
  70. package/dist/drivers/pframe/spec/filtered_column.js +11 -0
  71. package/dist/drivers/pframe/spec/filtered_column.js.map +1 -0
  72. package/dist/drivers/pframe/spec/ids.cjs +24 -0
  73. package/dist/drivers/pframe/spec/ids.cjs.map +1 -0
  74. package/dist/drivers/pframe/spec/ids.d.ts +0 -1
  75. package/dist/drivers/pframe/spec/ids.js +21 -0
  76. package/dist/drivers/pframe/spec/ids.js.map +1 -0
  77. package/dist/drivers/pframe/spec/index.d.ts +0 -1
  78. package/dist/drivers/pframe/spec/native_id.cjs +20 -0
  79. package/dist/drivers/pframe/spec/native_id.cjs.map +1 -0
  80. package/dist/drivers/pframe/spec/native_id.d.ts +0 -1
  81. package/dist/drivers/pframe/spec/native_id.js +18 -0
  82. package/dist/drivers/pframe/spec/native_id.js.map +1 -0
  83. package/dist/drivers/pframe/spec/selectors.cjs +120 -0
  84. package/dist/drivers/pframe/spec/selectors.cjs.map +1 -0
  85. package/dist/drivers/pframe/spec/selectors.d.ts +0 -1
  86. package/dist/drivers/pframe/spec/selectors.js +116 -0
  87. package/dist/drivers/pframe/spec/selectors.js.map +1 -0
  88. package/dist/drivers/pframe/spec/spec.cjs +361 -0
  89. package/dist/drivers/pframe/spec/spec.cjs.map +1 -0
  90. package/dist/drivers/pframe/spec/spec.d.ts +0 -1
  91. package/dist/drivers/pframe/spec/spec.js +332 -0
  92. package/dist/drivers/pframe/spec/spec.js.map +1 -0
  93. package/dist/drivers/pframe/table.d.ts +0 -1
  94. package/dist/drivers/pframe/table_calculate.cjs +43 -0
  95. package/dist/drivers/pframe/table_calculate.cjs.map +1 -0
  96. package/dist/drivers/pframe/table_calculate.d.ts +0 -1
  97. package/dist/drivers/pframe/table_calculate.js +40 -0
  98. package/dist/drivers/pframe/table_calculate.js.map +1 -0
  99. package/dist/drivers/pframe/table_common.cjs +19 -0
  100. package/dist/drivers/pframe/table_common.cjs.map +1 -0
  101. package/dist/drivers/pframe/table_common.d.ts +0 -1
  102. package/dist/drivers/pframe/table_common.js +17 -0
  103. package/dist/drivers/pframe/table_common.js.map +1 -0
  104. package/dist/drivers/pframe/type_util.d.ts +0 -1
  105. package/dist/drivers/pframe/unique_values.d.ts +0 -1
  106. package/dist/drivers/upload.d.ts +0 -1
  107. package/dist/drivers/urls.cjs +14 -0
  108. package/dist/drivers/urls.cjs.map +1 -0
  109. package/dist/drivers/urls.d.ts +0 -1
  110. package/dist/drivers/urls.js +11 -0
  111. package/dist/drivers/urls.js.map +1 -0
  112. package/dist/errors.cjs +141 -0
  113. package/dist/errors.cjs.map +1 -0
  114. package/dist/errors.d.ts +0 -1
  115. package/dist/errors.js +121 -0
  116. package/dist/errors.js.map +1 -0
  117. package/dist/flags/block_flags.cjs +8 -0
  118. package/dist/flags/block_flags.cjs.map +1 -0
  119. package/dist/flags/block_flags.d.ts +0 -1
  120. package/dist/flags/block_flags.js +5 -0
  121. package/dist/flags/block_flags.js.map +1 -0
  122. package/dist/flags/flag_utils.cjs +100 -0
  123. package/dist/flags/flag_utils.cjs.map +1 -0
  124. package/dist/flags/flag_utils.d.ts +0 -1
  125. package/dist/flags/flag_utils.js +94 -0
  126. package/dist/flags/flag_utils.js.map +1 -0
  127. package/dist/flags/index.d.ts +0 -1
  128. package/dist/flags/type_utils.d.ts +0 -1
  129. package/dist/index.cjs +151 -0
  130. package/dist/index.cjs.map +1 -0
  131. package/dist/index.d.ts +10 -12
  132. package/dist/index.js +27 -1
  133. package/dist/index.js.map +1 -1
  134. package/dist/json.cjs +18 -0
  135. package/dist/json.cjs.map +1 -0
  136. package/dist/json.d.ts +0 -1
  137. package/dist/json.js +14 -0
  138. package/dist/json.js.map +1 -0
  139. package/dist/navigation.cjs +6 -0
  140. package/dist/navigation.cjs.map +1 -0
  141. package/dist/navigation.d.ts +0 -1
  142. package/dist/navigation.js +4 -0
  143. package/dist/navigation.js.map +1 -0
  144. package/dist/plid.cjs +37 -0
  145. package/dist/plid.cjs.map +1 -0
  146. package/dist/plid.d.ts +0 -1
  147. package/dist/plid.js +30 -0
  148. package/dist/plid.js.map +1 -0
  149. package/dist/pool/entry.d.ts +0 -1
  150. package/dist/pool/index.d.ts +0 -1
  151. package/dist/pool/query.cjs +49 -0
  152. package/dist/pool/query.cjs.map +1 -0
  153. package/dist/pool/query.d.ts +0 -1
  154. package/dist/pool/query.js +47 -0
  155. package/dist/pool/query.js.map +1 -0
  156. package/dist/pool/spec.cjs +67 -0
  157. package/dist/pool/spec.cjs.map +1 -0
  158. package/dist/pool/spec.d.ts +0 -1
  159. package/dist/pool/spec.js +59 -0
  160. package/dist/pool/spec.js.map +1 -0
  161. package/dist/ref.cjs +88 -0
  162. package/dist/ref.cjs.map +1 -0
  163. package/dist/ref.d.ts +0 -1
  164. package/dist/ref.js +82 -0
  165. package/dist/ref.js.map +1 -0
  166. package/dist/utag.d.ts +0 -1
  167. package/dist/util.cjs +8 -0
  168. package/dist/util.cjs.map +1 -0
  169. package/dist/util.d.ts +0 -1
  170. package/dist/util.js +6 -0
  171. package/dist/util.js.map +1 -0
  172. package/dist/value_or_error.cjs +8 -0
  173. package/dist/value_or_error.cjs.map +1 -0
  174. package/dist/value_or_error.d.ts +0 -1
  175. package/dist/value_or_error.js +6 -0
  176. package/dist/value_or_error.js.map +1 -0
  177. package/package.json +13 -11
  178. package/src/drivers/pframe/type_util.ts +1 -0
  179. package/src/flags/type_utils.ts +1 -0
  180. package/src/index.ts +10 -11
  181. package/dist/author_marker.d.ts.map +0 -1
  182. package/dist/base32_encode.d.ts.map +0 -1
  183. package/dist/block_state.d.ts.map +0 -1
  184. package/dist/bmodel/block_config.d.ts.map +0 -1
  185. package/dist/bmodel/code.d.ts.map +0 -1
  186. package/dist/bmodel/container.d.ts.map +0 -1
  187. package/dist/bmodel/index.d.ts.map +0 -1
  188. package/dist/bmodel/normalization.d.ts.map +0 -1
  189. package/dist/bmodel/types.d.ts.map +0 -1
  190. package/dist/branding.d.ts.map +0 -1
  191. package/dist/common_types.d.ts.map +0 -1
  192. package/dist/driver_kit.d.ts.map +0 -1
  193. package/dist/drivers/blob.d.ts.map +0 -1
  194. package/dist/drivers/index.d.ts.map +0 -1
  195. package/dist/drivers/interfaces.d.ts.map +0 -1
  196. package/dist/drivers/log.d.ts.map +0 -1
  197. package/dist/drivers/ls.d.ts.map +0 -1
  198. package/dist/drivers/pframe/column_filter.d.ts.map +0 -1
  199. package/dist/drivers/pframe/data_info.d.ts.map +0 -1
  200. package/dist/drivers/pframe/data_types.d.ts.map +0 -1
  201. package/dist/drivers/pframe/driver.d.ts.map +0 -1
  202. package/dist/drivers/pframe/find_columns.d.ts.map +0 -1
  203. package/dist/drivers/pframe/index.d.ts.map +0 -1
  204. package/dist/drivers/pframe/linker_columns.d.ts.map +0 -1
  205. package/dist/drivers/pframe/pframe.d.ts.map +0 -1
  206. package/dist/drivers/pframe/spec/anchored.d.ts.map +0 -1
  207. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +0 -1
  208. package/dist/drivers/pframe/spec/ids.d.ts.map +0 -1
  209. package/dist/drivers/pframe/spec/index.d.ts.map +0 -1
  210. package/dist/drivers/pframe/spec/native_id.d.ts.map +0 -1
  211. package/dist/drivers/pframe/spec/selectors.d.ts.map +0 -1
  212. package/dist/drivers/pframe/spec/spec.d.ts.map +0 -1
  213. package/dist/drivers/pframe/table.d.ts.map +0 -1
  214. package/dist/drivers/pframe/table_calculate.d.ts.map +0 -1
  215. package/dist/drivers/pframe/table_common.d.ts.map +0 -1
  216. package/dist/drivers/pframe/type_util.d.ts.map +0 -1
  217. package/dist/drivers/pframe/unique_values.d.ts.map +0 -1
  218. package/dist/drivers/upload.d.ts.map +0 -1
  219. package/dist/drivers/urls.d.ts.map +0 -1
  220. package/dist/errors.d.ts.map +0 -1
  221. package/dist/flags/block_flags.d.ts.map +0 -1
  222. package/dist/flags/flag_utils.d.ts.map +0 -1
  223. package/dist/flags/index.d.ts.map +0 -1
  224. package/dist/flags/type_utils.d.ts.map +0 -1
  225. package/dist/index.d.ts.map +0 -1
  226. package/dist/index.mjs +0 -1587
  227. package/dist/index.mjs.map +0 -1
  228. package/dist/json.d.ts.map +0 -1
  229. package/dist/navigation.d.ts.map +0 -1
  230. package/dist/plid.d.ts.map +0 -1
  231. package/dist/pool/entry.d.ts.map +0 -1
  232. package/dist/pool/index.d.ts.map +0 -1
  233. package/dist/pool/query.d.ts.map +0 -1
  234. package/dist/pool/spec.d.ts.map +0 -1
  235. package/dist/ref.d.ts.map +0 -1
  236. package/dist/utag.d.ts.map +0 -1
  237. package/dist/util.d.ts.map +0 -1
  238. package/dist/value_or_error.d.ts.map +0 -1
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ function isFolderURL(url) {
4
+ const parsed = new URL(url);
5
+ return parsed.protocol == 'plblob+folder:';
6
+ }
7
+ function isBlockUIURL(url) {
8
+ const parsed = new URL(url);
9
+ return parsed.protocol == 'block-ui:';
10
+ }
11
+
12
+ exports.isBlockUIURL = isBlockUIURL;
13
+ exports.isFolderURL = isFolderURL;
14
+ //# sourceMappingURL=urls.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.cjs","sources":["../../src/drivers/urls.ts"],"sourcesContent":["/**\n * plblob+folder://signature@sufolder_with_unzipped_blob/\n */\nexport type FolderURL = `plblob+folder://${string}`;\n\nexport type ArchiveFormat = 'zip' | 'tar' | 'tgz';\n\nexport interface BlobToURLDriver {\n getPathForCustomProtocol(url: FolderURL): string;\n}\n\nexport function isFolderURL(url: string): url is FolderURL {\n const parsed = new URL(url);\n return parsed.protocol == 'plblob+folder:';\n}\n\n/**\n * URLs and a custom protocol for the block UI.\n * block-ui://signature@folder_with_ui/\n */\nexport type BlockUIURL = `block-ui://${string}`;\n\nexport interface FrontendDriver {\n getPathForBlockUI(url: BlockUIURL): string;\n}\n\nexport function isBlockUIURL(url: string): url is BlockUIURL {\n const parsed = new URL(url);\n return parsed.protocol == 'block-ui:';\n}\n"],"names":[],"mappings":";;AAWM,SAAU,WAAW,CAAC,GAAW,EAAA;AACrC,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,IAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,gBAAgB;AAC5C;AAYM,SAAU,YAAY,CAAC,GAAW,EAAA;AACtC,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,IAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,WAAW;AACvC;;;;;"}
@@ -16,4 +16,3 @@ export interface FrontendDriver {
16
16
  getPathForBlockUI(url: BlockUIURL): string;
17
17
  }
18
18
  export declare function isBlockUIURL(url: string): url is BlockUIURL;
19
- //# sourceMappingURL=urls.d.ts.map
@@ -0,0 +1,11 @@
1
+ function isFolderURL(url) {
2
+ const parsed = new URL(url);
3
+ return parsed.protocol == 'plblob+folder:';
4
+ }
5
+ function isBlockUIURL(url) {
6
+ const parsed = new URL(url);
7
+ return parsed.protocol == 'block-ui:';
8
+ }
9
+
10
+ export { isBlockUIURL, isFolderURL };
11
+ //# sourceMappingURL=urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.js","sources":["../../src/drivers/urls.ts"],"sourcesContent":["/**\n * plblob+folder://signature@sufolder_with_unzipped_blob/\n */\nexport type FolderURL = `plblob+folder://${string}`;\n\nexport type ArchiveFormat = 'zip' | 'tar' | 'tgz';\n\nexport interface BlobToURLDriver {\n getPathForCustomProtocol(url: FolderURL): string;\n}\n\nexport function isFolderURL(url: string): url is FolderURL {\n const parsed = new URL(url);\n return parsed.protocol == 'plblob+folder:';\n}\n\n/**\n * URLs and a custom protocol for the block UI.\n * block-ui://signature@folder_with_ui/\n */\nexport type BlockUIURL = `block-ui://${string}`;\n\nexport interface FrontendDriver {\n getPathForBlockUI(url: BlockUIURL): string;\n}\n\nexport function isBlockUIURL(url: string): url is BlockUIURL {\n const parsed = new URL(url);\n return parsed.protocol == 'block-ui:';\n}\n"],"names":[],"mappings":"AAWM,SAAU,WAAW,CAAC,GAAW,EAAA;AACrC,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,IAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,gBAAgB;AAC5C;AAYM,SAAU,YAAY,CAAC,GAAW,EAAA;AACtC,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,IAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,WAAW;AACvC;;;;"}
@@ -0,0 +1,141 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Just for convenience, usually it is an Error with name 'AbortError'
5
+ */
6
+ class AbortError extends Error {
7
+ name = 'AbortError';
8
+ }
9
+ /**
10
+ * Throw this to show a message without stack trace in UI
11
+ */
12
+ class UiError extends Error {
13
+ name = 'UiError';
14
+ }
15
+ function isAbortError(error) {
16
+ return error instanceof Error && error.name === 'AbortError';
17
+ }
18
+ function hasAbortError(error) {
19
+ if (!(error instanceof Error)) {
20
+ return false;
21
+ }
22
+ return error.name === 'AbortError' || hasAbortError(error.cause);
23
+ }
24
+ function isAggregateError(error) {
25
+ return error instanceof Error && error.name === 'AggregateError';
26
+ }
27
+ class PFrameError extends Error {
28
+ name = 'PFrameError';
29
+ }
30
+ function isPFrameError(error) {
31
+ return error instanceof Error && error.name === 'PFrameError';
32
+ }
33
+ class PFrameDriverError extends PFrameError {
34
+ name = 'PFrameError.Driver';
35
+ }
36
+ function isPFrameDriverError(error) {
37
+ return error instanceof Error && error.name === 'PFrameError.Driver';
38
+ }
39
+ function stringifyValue(value) {
40
+ if (typeof value === 'string') {
41
+ return `String value was thrown: ${value}`;
42
+ }
43
+ if (value && typeof value === 'object') {
44
+ try {
45
+ return `Plain object was thrown: ${JSON.stringify(value)}`;
46
+ }
47
+ catch (jsonError) {
48
+ const errorMessage = jsonError instanceof Error ? jsonError.message : String(jsonError);
49
+ return `Non-serializable object was thrown (JSON.stringify failed: ${errorMessage}): ${String(value)}`;
50
+ }
51
+ }
52
+ return String(`Non-Error value (${typeof value}) was thrown: ${value}`);
53
+ }
54
+ function ensureError(value) {
55
+ if (value instanceof Error) {
56
+ return value;
57
+ }
58
+ return new Error(stringifyValue(value));
59
+ }
60
+ function deserializeError(obj) {
61
+ const cause = obj.cause ? deserializeError(obj.cause) : undefined;
62
+ const error = new Error(obj.message, cause !== undefined ? { cause } : undefined);
63
+ error.name = obj.name || 'Error';
64
+ error.stack = obj.stack;
65
+ return error;
66
+ }
67
+ function serializeError(e) {
68
+ const error = ensureError(e);
69
+ const cause = error.cause ? serializeError(error.cause) : undefined;
70
+ return {
71
+ name: error.name,
72
+ message: error.message,
73
+ stack: error.stack,
74
+ ...(error.cause !== undefined && { cause }),
75
+ };
76
+ }
77
+ function unwrapResult(result) {
78
+ if (result.error) {
79
+ throw result.error instanceof Error ? result.error : deserializeError(result.error);
80
+ }
81
+ return result.value;
82
+ }
83
+ function serializeResult(result) {
84
+ if (result.error) {
85
+ return { error: serializeError(result.error) };
86
+ }
87
+ return { value: result.value };
88
+ }
89
+ function deserializeResult(result) {
90
+ if (result.error) {
91
+ return { error: deserializeError(result.error) };
92
+ }
93
+ return { value: result.value };
94
+ }
95
+ function wrapCallback(callback) {
96
+ try {
97
+ const value = callback();
98
+ return { value };
99
+ }
100
+ catch (error) {
101
+ return { error: ensureError(error) };
102
+ }
103
+ }
104
+ async function wrapAsyncCallback(callback) {
105
+ try {
106
+ const value = await callback();
107
+ return { value };
108
+ }
109
+ catch (error) {
110
+ return { error: ensureError(error) };
111
+ }
112
+ }
113
+ function wrapAndSerialize(callback) {
114
+ const result = wrapCallback(callback);
115
+ return serializeResult(result);
116
+ }
117
+ async function wrapAndSerializeAsync(callback) {
118
+ const result = await wrapAsyncCallback(callback);
119
+ return serializeResult(result);
120
+ }
121
+
122
+ exports.AbortError = AbortError;
123
+ exports.PFrameDriverError = PFrameDriverError;
124
+ exports.PFrameError = PFrameError;
125
+ exports.UiError = UiError;
126
+ exports.deserializeError = deserializeError;
127
+ exports.deserializeResult = deserializeResult;
128
+ exports.ensureError = ensureError;
129
+ exports.hasAbortError = hasAbortError;
130
+ exports.isAbortError = isAbortError;
131
+ exports.isAggregateError = isAggregateError;
132
+ exports.isPFrameDriverError = isPFrameDriverError;
133
+ exports.isPFrameError = isPFrameError;
134
+ exports.serializeError = serializeError;
135
+ exports.serializeResult = serializeResult;
136
+ exports.unwrapResult = unwrapResult;
137
+ exports.wrapAndSerialize = wrapAndSerialize;
138
+ exports.wrapAndSerializeAsync = wrapAndSerializeAsync;
139
+ exports.wrapAsyncCallback = wrapAsyncCallback;
140
+ exports.wrapCallback = wrapCallback;
141
+ //# sourceMappingURL=errors.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.cjs","sources":["../src/errors.ts"],"sourcesContent":["/**\n * Just for convenience, usually it is an Error with name 'AbortError'\n */\nexport class AbortError extends Error {\n name = 'AbortError';\n}\n\n/**\n * Throw this to show a message without stack trace in UI\n */\nexport class UiError extends Error {\n name = 'UiError';\n}\n\nexport function isAbortError(error: unknown): error is Error & { name: 'AbortError' } {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nexport function hasAbortError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === 'AbortError' || hasAbortError(error.cause);\n}\n\nexport function isAggregateError(error: unknown): error is AggregateError {\n return error instanceof Error && error.name === 'AggregateError';\n}\n\nexport class PFrameError extends Error {\n name = 'PFrameError';\n}\n\nexport function isPFrameError(error: unknown): error is PFrameError {\n return error instanceof Error && error.name === 'PFrameError';\n}\n\nexport class PFrameDriverError extends PFrameError {\n name = 'PFrameError.Driver';\n}\n\nexport function isPFrameDriverError(error: unknown): error is PFrameDriverError {\n return error instanceof Error && error.name === 'PFrameError.Driver';\n}\n\nfunction stringifyValue(value: unknown): string {\n if (typeof value === 'string') {\n return `String value was thrown: ${value}`;\n }\n\n if (value && typeof value === 'object') {\n try {\n return `Plain object was thrown: ${JSON.stringify(value)}`;\n } catch (jsonError) {\n const errorMessage = jsonError instanceof Error ? jsonError.message : String(jsonError);\n return `Non-serializable object was thrown (JSON.stringify failed: ${errorMessage}): ${String(value)}`;\n }\n }\n\n return String(`Non-Error value (${typeof value}) was thrown: ${value}`);\n}\n\nexport function ensureError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n return new Error(stringifyValue(value));\n}\n\n// Error serialization for IPC/network transmission (Error objects can't be JSON serialized)\n\nexport type SerializedError = {\n name: string;\n message: string;\n stack: string | undefined;\n cause?: SerializedError;\n};\n\nexport function deserializeError(obj: SerializedError): Error {\n const cause = obj.cause ? deserializeError(obj.cause) : undefined;\n\n const error = new Error(obj.message, cause !== undefined ? { cause } : undefined);\n error.name = obj.name || 'Error';\n error.stack = obj.stack;\n\n return error;\n}\n\nexport function serializeError(e: unknown): SerializedError {\n const error = ensureError(e);\n const cause = error.cause ? serializeError(error.cause) : undefined;\n\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n ...(error.cause !== undefined && { cause }),\n };\n}\n\nexport type ResultOrError<S, F = Error> = {\n value: S;\n error?: undefined;\n} | {\n error: F;\n};\n\nexport function unwrapResult<T>(result: ResultOrError<T, Error | SerializedError>): T {\n if (result.error) {\n throw result.error instanceof Error ? result.error : deserializeError(result.error);\n }\n return result.value;\n}\n\nexport function serializeResult<T>(result: ResultOrError<T>): ResultOrError<T, SerializedError> {\n if (result.error) {\n return { error: serializeError(result.error) };\n }\n return { value: result.value };\n}\n\nexport function deserializeResult<T>(result: ResultOrError<T, SerializedError>): ResultOrError<T> {\n if (result.error) {\n return { error: deserializeError(result.error) };\n }\n return { value: result.value };\n}\n\nexport function wrapCallback<T>(callback: () => T): ResultOrError<T> {\n try {\n const value = callback();\n return { value };\n } catch (error) {\n return { error: ensureError(error) };\n }\n}\n\nexport async function wrapAsyncCallback<T>(callback: () => Promise<T>): Promise<ResultOrError<T>> {\n try {\n const value = await callback();\n return { value };\n } catch (error) {\n return { error: ensureError(error) };\n }\n}\n\nexport function wrapAndSerialize<T>(callback: () => T): ResultOrError<T, SerializedError> {\n const result = wrapCallback(callback);\n return serializeResult(result);\n}\n\nexport async function wrapAndSerializeAsync<T>(callback: () => Promise<T>): Promise<ResultOrError<T, SerializedError>> {\n const result = await wrapAsyncCallback(callback);\n return serializeResult(result);\n}\n"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -45,4 +45,3 @@ export declare function wrapCallback<T>(callback: () => T): ResultOrError<T>;
45
45
  export declare function wrapAsyncCallback<T>(callback: () => Promise<T>): Promise<ResultOrError<T>>;
46
46
  export declare function wrapAndSerialize<T>(callback: () => T): ResultOrError<T, SerializedError>;
47
47
  export declare function wrapAndSerializeAsync<T>(callback: () => Promise<T>): Promise<ResultOrError<T, SerializedError>>;
48
- //# sourceMappingURL=errors.d.ts.map
package/dist/errors.js ADDED
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Just for convenience, usually it is an Error with name 'AbortError'
3
+ */
4
+ class AbortError extends Error {
5
+ name = 'AbortError';
6
+ }
7
+ /**
8
+ * Throw this to show a message without stack trace in UI
9
+ */
10
+ class UiError extends Error {
11
+ name = 'UiError';
12
+ }
13
+ function isAbortError(error) {
14
+ return error instanceof Error && error.name === 'AbortError';
15
+ }
16
+ function hasAbortError(error) {
17
+ if (!(error instanceof Error)) {
18
+ return false;
19
+ }
20
+ return error.name === 'AbortError' || hasAbortError(error.cause);
21
+ }
22
+ function isAggregateError(error) {
23
+ return error instanceof Error && error.name === 'AggregateError';
24
+ }
25
+ class PFrameError extends Error {
26
+ name = 'PFrameError';
27
+ }
28
+ function isPFrameError(error) {
29
+ return error instanceof Error && error.name === 'PFrameError';
30
+ }
31
+ class PFrameDriverError extends PFrameError {
32
+ name = 'PFrameError.Driver';
33
+ }
34
+ function isPFrameDriverError(error) {
35
+ return error instanceof Error && error.name === 'PFrameError.Driver';
36
+ }
37
+ function stringifyValue(value) {
38
+ if (typeof value === 'string') {
39
+ return `String value was thrown: ${value}`;
40
+ }
41
+ if (value && typeof value === 'object') {
42
+ try {
43
+ return `Plain object was thrown: ${JSON.stringify(value)}`;
44
+ }
45
+ catch (jsonError) {
46
+ const errorMessage = jsonError instanceof Error ? jsonError.message : String(jsonError);
47
+ return `Non-serializable object was thrown (JSON.stringify failed: ${errorMessage}): ${String(value)}`;
48
+ }
49
+ }
50
+ return String(`Non-Error value (${typeof value}) was thrown: ${value}`);
51
+ }
52
+ function ensureError(value) {
53
+ if (value instanceof Error) {
54
+ return value;
55
+ }
56
+ return new Error(stringifyValue(value));
57
+ }
58
+ function deserializeError(obj) {
59
+ const cause = obj.cause ? deserializeError(obj.cause) : undefined;
60
+ const error = new Error(obj.message, cause !== undefined ? { cause } : undefined);
61
+ error.name = obj.name || 'Error';
62
+ error.stack = obj.stack;
63
+ return error;
64
+ }
65
+ function serializeError(e) {
66
+ const error = ensureError(e);
67
+ const cause = error.cause ? serializeError(error.cause) : undefined;
68
+ return {
69
+ name: error.name,
70
+ message: error.message,
71
+ stack: error.stack,
72
+ ...(error.cause !== undefined && { cause }),
73
+ };
74
+ }
75
+ function unwrapResult(result) {
76
+ if (result.error) {
77
+ throw result.error instanceof Error ? result.error : deserializeError(result.error);
78
+ }
79
+ return result.value;
80
+ }
81
+ function serializeResult(result) {
82
+ if (result.error) {
83
+ return { error: serializeError(result.error) };
84
+ }
85
+ return { value: result.value };
86
+ }
87
+ function deserializeResult(result) {
88
+ if (result.error) {
89
+ return { error: deserializeError(result.error) };
90
+ }
91
+ return { value: result.value };
92
+ }
93
+ function wrapCallback(callback) {
94
+ try {
95
+ const value = callback();
96
+ return { value };
97
+ }
98
+ catch (error) {
99
+ return { error: ensureError(error) };
100
+ }
101
+ }
102
+ async function wrapAsyncCallback(callback) {
103
+ try {
104
+ const value = await callback();
105
+ return { value };
106
+ }
107
+ catch (error) {
108
+ return { error: ensureError(error) };
109
+ }
110
+ }
111
+ function wrapAndSerialize(callback) {
112
+ const result = wrapCallback(callback);
113
+ return serializeResult(result);
114
+ }
115
+ async function wrapAndSerializeAsync(callback) {
116
+ const result = await wrapAsyncCallback(callback);
117
+ return serializeResult(result);
118
+ }
119
+
120
+ export { AbortError, PFrameDriverError, PFrameError, UiError, deserializeError, deserializeResult, ensureError, hasAbortError, isAbortError, isAggregateError, isPFrameDriverError, isPFrameError, serializeError, serializeResult, unwrapResult, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
121
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sources":["../src/errors.ts"],"sourcesContent":["/**\n * Just for convenience, usually it is an Error with name 'AbortError'\n */\nexport class AbortError extends Error {\n name = 'AbortError';\n}\n\n/**\n * Throw this to show a message without stack trace in UI\n */\nexport class UiError extends Error {\n name = 'UiError';\n}\n\nexport function isAbortError(error: unknown): error is Error & { name: 'AbortError' } {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nexport function hasAbortError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === 'AbortError' || hasAbortError(error.cause);\n}\n\nexport function isAggregateError(error: unknown): error is AggregateError {\n return error instanceof Error && error.name === 'AggregateError';\n}\n\nexport class PFrameError extends Error {\n name = 'PFrameError';\n}\n\nexport function isPFrameError(error: unknown): error is PFrameError {\n return error instanceof Error && error.name === 'PFrameError';\n}\n\nexport class PFrameDriverError extends PFrameError {\n name = 'PFrameError.Driver';\n}\n\nexport function isPFrameDriverError(error: unknown): error is PFrameDriverError {\n return error instanceof Error && error.name === 'PFrameError.Driver';\n}\n\nfunction stringifyValue(value: unknown): string {\n if (typeof value === 'string') {\n return `String value was thrown: ${value}`;\n }\n\n if (value && typeof value === 'object') {\n try {\n return `Plain object was thrown: ${JSON.stringify(value)}`;\n } catch (jsonError) {\n const errorMessage = jsonError instanceof Error ? jsonError.message : String(jsonError);\n return `Non-serializable object was thrown (JSON.stringify failed: ${errorMessage}): ${String(value)}`;\n }\n }\n\n return String(`Non-Error value (${typeof value}) was thrown: ${value}`);\n}\n\nexport function ensureError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n return new Error(stringifyValue(value));\n}\n\n// Error serialization for IPC/network transmission (Error objects can't be JSON serialized)\n\nexport type SerializedError = {\n name: string;\n message: string;\n stack: string | undefined;\n cause?: SerializedError;\n};\n\nexport function deserializeError(obj: SerializedError): Error {\n const cause = obj.cause ? deserializeError(obj.cause) : undefined;\n\n const error = new Error(obj.message, cause !== undefined ? { cause } : undefined);\n error.name = obj.name || 'Error';\n error.stack = obj.stack;\n\n return error;\n}\n\nexport function serializeError(e: unknown): SerializedError {\n const error = ensureError(e);\n const cause = error.cause ? serializeError(error.cause) : undefined;\n\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n ...(error.cause !== undefined && { cause }),\n };\n}\n\nexport type ResultOrError<S, F = Error> = {\n value: S;\n error?: undefined;\n} | {\n error: F;\n};\n\nexport function unwrapResult<T>(result: ResultOrError<T, Error | SerializedError>): T {\n if (result.error) {\n throw result.error instanceof Error ? result.error : deserializeError(result.error);\n }\n return result.value;\n}\n\nexport function serializeResult<T>(result: ResultOrError<T>): ResultOrError<T, SerializedError> {\n if (result.error) {\n return { error: serializeError(result.error) };\n }\n return { value: result.value };\n}\n\nexport function deserializeResult<T>(result: ResultOrError<T, SerializedError>): ResultOrError<T> {\n if (result.error) {\n return { error: deserializeError(result.error) };\n }\n return { value: result.value };\n}\n\nexport function wrapCallback<T>(callback: () => T): ResultOrError<T> {\n try {\n const value = callback();\n return { value };\n } catch (error) {\n return { error: ensureError(error) };\n }\n}\n\nexport async function wrapAsyncCallback<T>(callback: () => Promise<T>): Promise<ResultOrError<T>> {\n try {\n const value = await callback();\n return { value };\n } catch (error) {\n return { error: ensureError(error) };\n }\n}\n\nexport function wrapAndSerialize<T>(callback: () => T): ResultOrError<T, SerializedError> {\n const result = wrapCallback(callback);\n return serializeResult(result);\n}\n\nexport async function wrapAndSerializeAsync<T>(callback: () => Promise<T>): Promise<ResultOrError<T, SerializedError>> {\n const result = await wrapAsyncCallback(callback);\n return serializeResult(result);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ const AllSupportsFeatureFlags = ['supportsLazyState'];
4
+ const AllRequiresFeatureFlags = ['requiresUIAPIVersion', 'requiresModelAPIVersion'];
5
+
6
+ exports.AllRequiresFeatureFlags = AllRequiresFeatureFlags;
7
+ exports.AllSupportsFeatureFlags = AllSupportsFeatureFlags;
8
+ //# sourceMappingURL=block_flags.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block_flags.cjs","sources":["../../src/flags/block_flags.ts"],"sourcesContent":["import type { ArrayTypeUnion, Assert, Is, IsSubtypeOf } from './type_utils';\n\n/**\n * Block-specific feature flags. Define flags that are interpreted by the desktop app to select\n * appropriate API to expose into Model and UI runtimes.\n *\n * Flags are split into two categories:\n * - supports... - those flags tells the desktop app that the block supports certain APIs, but can without them as well\n * - requires... - those flags tells the desktop app that the block requires certain APIs, and if desktop app doesn't support it, it can't be used in the block\n */\nexport type BlockCodeFeatureFlags = Record<`supports${string}`, boolean | number | undefined> & Record<`requires${string}`, boolean | number | undefined>;\n\n/**\n * Known block flags. Flags are set during model compilation, see `BlockModel.create` for more details and for initial values.\n */\nexport type BlockCodeKnownFeatureFlags = {\n readonly supportsLazyState?: boolean;\n readonly requiresModelAPIVersion?: number;\n readonly requiresUIAPIVersion?: number;\n};\n\nexport const AllSupportsFeatureFlags\n = ['supportsLazyState'] as const;\n\nexport const AllRequiresFeatureFlags\n = ['requiresUIAPIVersion', 'requiresModelAPIVersion'] as const;\n\n//\n// Assertions\n//\n\n// This assertion ensures that BlockConfigV3KnownFeatureFlags is a subtype of BlockConfigV3FeatureFlags.\n// It will produce a compile-time error if there's a mismatch.\ntype _KnownFlagsAreValidFlags = Assert<IsSubtypeOf<BlockCodeKnownFeatureFlags, BlockCodeFeatureFlags>>;\n\n// This check ensures that all keys in BlockConfigV3FeatureFlags are covered in the arrays above.\n// It will produce a compile-time error if there's a mismatch.\ntype _AllFlagsAreCovered = Assert<\n Is<\n keyof BlockCodeKnownFeatureFlags,\n ArrayTypeUnion<typeof AllRequiresFeatureFlags, typeof AllSupportsFeatureFlags>\n >\n>;\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,GAChC,CAAC,mBAAmB;MAEX,uBAAuB,GAChC,CAAC,sBAAsB,EAAE,yBAAyB;;;;;"}
@@ -17,4 +17,3 @@ export type BlockCodeKnownFeatureFlags = {
17
17
  };
18
18
  export declare const AllSupportsFeatureFlags: readonly ["supportsLazyState"];
19
19
  export declare const AllRequiresFeatureFlags: readonly ["requiresUIAPIVersion", "requiresModelAPIVersion"];
20
- //# sourceMappingURL=block_flags.d.ts.map
@@ -0,0 +1,5 @@
1
+ const AllSupportsFeatureFlags = ['supportsLazyState'];
2
+ const AllRequiresFeatureFlags = ['requiresUIAPIVersion', 'requiresModelAPIVersion'];
3
+
4
+ export { AllRequiresFeatureFlags, AllSupportsFeatureFlags };
5
+ //# sourceMappingURL=block_flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block_flags.js","sources":["../../src/flags/block_flags.ts"],"sourcesContent":["import type { ArrayTypeUnion, Assert, Is, IsSubtypeOf } from './type_utils';\n\n/**\n * Block-specific feature flags. Define flags that are interpreted by the desktop app to select\n * appropriate API to expose into Model and UI runtimes.\n *\n * Flags are split into two categories:\n * - supports... - those flags tells the desktop app that the block supports certain APIs, but can without them as well\n * - requires... - those flags tells the desktop app that the block requires certain APIs, and if desktop app doesn't support it, it can't be used in the block\n */\nexport type BlockCodeFeatureFlags = Record<`supports${string}`, boolean | number | undefined> & Record<`requires${string}`, boolean | number | undefined>;\n\n/**\n * Known block flags. Flags are set during model compilation, see `BlockModel.create` for more details and for initial values.\n */\nexport type BlockCodeKnownFeatureFlags = {\n readonly supportsLazyState?: boolean;\n readonly requiresModelAPIVersion?: number;\n readonly requiresUIAPIVersion?: number;\n};\n\nexport const AllSupportsFeatureFlags\n = ['supportsLazyState'] as const;\n\nexport const AllRequiresFeatureFlags\n = ['requiresUIAPIVersion', 'requiresModelAPIVersion'] as const;\n\n//\n// Assertions\n//\n\n// This assertion ensures that BlockConfigV3KnownFeatureFlags is a subtype of BlockConfigV3FeatureFlags.\n// It will produce a compile-time error if there's a mismatch.\ntype _KnownFlagsAreValidFlags = Assert<IsSubtypeOf<BlockCodeKnownFeatureFlags, BlockCodeFeatureFlags>>;\n\n// This check ensures that all keys in BlockConfigV3FeatureFlags are covered in the arrays above.\n// It will produce a compile-time error if there's a mismatch.\ntype _AllFlagsAreCovered = Assert<\n Is<\n keyof BlockCodeKnownFeatureFlags,\n ArrayTypeUnion<typeof AllRequiresFeatureFlags, typeof AllSupportsFeatureFlags>\n >\n>;\n"],"names":[],"mappings":"AAqBO,MAAM,uBAAuB,GAChC,CAAC,mBAAmB;MAEX,uBAAuB,GAChC,CAAC,sBAAsB,EAAE,yBAAyB;;;;"}
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ function checkBlockFlag(flags, flag, flagValue = true) {
4
+ if (flags === undefined)
5
+ return false;
6
+ return flags[flag] === flagValue;
7
+ }
8
+ /**
9
+ * Extracts all requirements from the feature flags.
10
+ * @param flags - The feature flags.
11
+ * @returns A set of requirements.
12
+ */
13
+ function extractAllRequirements(flags) {
14
+ if (flags === undefined)
15
+ return new Set();
16
+ return new Set(Object.entries(flags)
17
+ .filter(([key, value]) => key.startsWith('requires') && value === true)
18
+ .map(([key]) => key));
19
+ }
20
+ /**
21
+ * Extracts all supports from the feature flags.
22
+ * @param flags - The feature flags.
23
+ * @returns A set of supports.
24
+ */
25
+ function extractAllSupports(flags) {
26
+ if (flags === undefined)
27
+ return new Set();
28
+ return new Set(Object.entries(flags)
29
+ .filter(([key, value]) => key.startsWith('supports') && value === true)
30
+ .map(([key]) => key));
31
+ }
32
+ class IncompatibleFlagsError extends Error {
33
+ incompatibleFlags;
34
+ name = 'IncompatibleFlagsError';
35
+ constructor(incompatibleFlags) {
36
+ super(`Some of the block requirements are not supported by the runtime: ${Array.from(incompatibleFlags.entries()).map(([key, value]) => `${key}: ${value}`).join(', ')}`);
37
+ this.incompatibleFlags = incompatibleFlags;
38
+ }
39
+ }
40
+ class RuntimeCapabilities {
41
+ supportedRequirements = new Map();
42
+ /**
43
+ * Adds a supported requirement to the runtime capabilities.
44
+ * @param requirement - The requirement.
45
+ * @param value - The value of the requirement. If not provided, defaults to true.
46
+ */
47
+ addSupportedRequirement(requirement, value = true) {
48
+ if (!this.supportedRequirements.has(requirement)) {
49
+ this.supportedRequirements.set(requirement, new Set());
50
+ }
51
+ this.supportedRequirements.get(requirement).add(value);
52
+ return this;
53
+ }
54
+ /**
55
+ * Returns a map of incompatible flags. If the block flags are compatible, returns undefined.
56
+ * @param blockFlags - The block flags.
57
+ * @returns A map of incompatible flags, or undefined if the block flags are compatible.
58
+ */
59
+ getIncompatibleFlags(blockFlags) {
60
+ if (blockFlags === undefined)
61
+ return undefined;
62
+ const incompatibleFlags = new Map();
63
+ for (const [key, value] of Object.entries(blockFlags)) {
64
+ if (key.startsWith('requires')) {
65
+ if (value === undefined)
66
+ continue;
67
+ const supportedValues = this.supportedRequirements.get(key);
68
+ if (supportedValues === undefined || !supportedValues.has(value)) {
69
+ incompatibleFlags.set(key, value);
70
+ }
71
+ }
72
+ }
73
+ return incompatibleFlags.size === 0 ? undefined : incompatibleFlags;
74
+ }
75
+ /**
76
+ * Checks if the block flags are compatible with the runtime capabilities.
77
+ * @param blockFlags - The block flags.
78
+ * @returns True if the block flags are compatible, false otherwise.
79
+ */
80
+ checkCompatibility(blockFlags) {
81
+ return this.getIncompatibleFlags(blockFlags) === undefined;
82
+ }
83
+ /**
84
+ * Throws an error if the block flags are incompatible with the runtime capabilities.
85
+ * @param blockFlags - The block flags.
86
+ * @throws IncompatibleFlagsError if the block flags are incompatible with the runtime capabilities.
87
+ */
88
+ throwIfIncompatible(blockFlags) {
89
+ const incompatibleFlags = this.getIncompatibleFlags(blockFlags);
90
+ if (incompatibleFlags !== undefined)
91
+ throw new IncompatibleFlagsError(incompatibleFlags);
92
+ }
93
+ }
94
+
95
+ exports.IncompatibleFlagsError = IncompatibleFlagsError;
96
+ exports.RuntimeCapabilities = RuntimeCapabilities;
97
+ exports.checkBlockFlag = checkBlockFlag;
98
+ exports.extractAllRequirements = extractAllRequirements;
99
+ exports.extractAllSupports = extractAllSupports;
100
+ //# sourceMappingURL=flag_utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag_utils.cjs","sources":["../../src/flags/flag_utils.ts"],"sourcesContent":["import type { BlockCodeFeatureFlags, BlockCodeKnownFeatureFlags } from './block_flags';\nimport type { FilterKeysByPrefix } from './type_utils';\n\nexport function checkBlockFlag(flags: BlockCodeFeatureFlags | undefined, flag: keyof BlockCodeKnownFeatureFlags, flagValue: boolean | number = true): boolean {\n if (flags === undefined) return false;\n return flags[flag] === flagValue;\n}\n\n/**\n * Extracts all requirements from the feature flags.\n * @param flags - The feature flags.\n * @returns A set of requirements.\n */\nexport function extractAllRequirements(flags: BlockCodeFeatureFlags | undefined): Set<`requires${string}`> {\n if (flags === undefined) return new Set();\n return new Set(Object.entries(flags)\n .filter(([key, value]) => key.startsWith('requires') && value === true)\n .map(([key]) => key as `requires${string}`));\n}\n\n/**\n * Extracts all supports from the feature flags.\n * @param flags - The feature flags.\n * @returns A set of supports.\n */\nexport function extractAllSupports(flags: BlockCodeFeatureFlags | undefined): Set<`supports${string}`> {\n if (flags === undefined) return new Set();\n return new Set(Object.entries(flags)\n .filter(([key, value]) => key.startsWith('supports') && value === true)\n .map(([key]) => key as `supports${string}`));\n}\n\nexport class IncompatibleFlagsError extends Error {\n name = 'IncompatibleFlagsError';\n constructor(public readonly incompatibleFlags: Map<`requires${string}`, number | boolean>) {\n super(`Some of the block requirements are not supported by the runtime: ${Array.from(incompatibleFlags.entries()).map(([key, value]) => `${key}: ${value}`).join(', ')}`);\n }\n}\n\n/**\n * A type that represents a supported requirement.\n * @remarks\n * This type is used to represent a supported requirement.\n * It is a subtype of `BlockCodeKnownFeatureFlags` and is used to represent a supported requirement.\n * It is used to represent a supported requirement.\n */\nexport type SupportedRequirement = FilterKeysByPrefix<BlockCodeKnownFeatureFlags, 'requires'>;\n\nexport class RuntimeCapabilities {\n private readonly supportedRequirements: Map<`requires${string}`, Set<number | boolean>> = new Map();\n\n /**\n * Adds a supported requirement to the runtime capabilities.\n * @param requirement - The requirement.\n * @param value - The value of the requirement. If not provided, defaults to true.\n */\n public addSupportedRequirement(requirement: SupportedRequirement, value: number | boolean = true): this {\n if (!this.supportedRequirements.has(requirement)) {\n this.supportedRequirements.set(requirement, new Set());\n }\n this.supportedRequirements.get(requirement)!.add(value);\n return this;\n }\n\n /**\n * Returns a map of incompatible flags. If the block flags are compatible, returns undefined.\n * @param blockFlags - The block flags.\n * @returns A map of incompatible flags, or undefined if the block flags are compatible.\n */\n public getIncompatibleFlags(blockFlags: BlockCodeFeatureFlags | undefined): Map<`requires${string}`, number | boolean> | undefined {\n if (blockFlags === undefined) return undefined;\n const incompatibleFlags = new Map<`requires${string}`, number | boolean>();\n for (const [key, value] of Object.entries(blockFlags)) {\n if (key.startsWith('requires')) {\n if (value === undefined) continue;\n const supportedValues = this.supportedRequirements.get(key as `requires${string}`);\n if (supportedValues === undefined || !supportedValues.has(value as number | boolean)) {\n incompatibleFlags.set(key as `requires${string}`, value as number | boolean);\n }\n }\n }\n return incompatibleFlags.size === 0 ? undefined : incompatibleFlags;\n }\n\n /**\n * Checks if the block flags are compatible with the runtime capabilities.\n * @param blockFlags - The block flags.\n * @returns True if the block flags are compatible, false otherwise.\n */\n public checkCompatibility(blockFlags: BlockCodeFeatureFlags | undefined): boolean {\n return this.getIncompatibleFlags(blockFlags) === undefined;\n }\n\n /**\n * Throws an error if the block flags are incompatible with the runtime capabilities.\n * @param blockFlags - The block flags.\n * @throws IncompatibleFlagsError if the block flags are incompatible with the runtime capabilities.\n */\n public throwIfIncompatible(blockFlags: BlockCodeFeatureFlags | undefined) {\n const incompatibleFlags = this.getIncompatibleFlags(blockFlags);\n if (incompatibleFlags !== undefined)\n throw new IncompatibleFlagsError(incompatibleFlags);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -53,4 +53,3 @@ export declare class RuntimeCapabilities {
53
53
  */
54
54
  throwIfIncompatible(blockFlags: BlockCodeFeatureFlags | undefined): void;
55
55
  }
56
- //# sourceMappingURL=flag_utils.d.ts.map
@@ -0,0 +1,94 @@
1
+ function checkBlockFlag(flags, flag, flagValue = true) {
2
+ if (flags === undefined)
3
+ return false;
4
+ return flags[flag] === flagValue;
5
+ }
6
+ /**
7
+ * Extracts all requirements from the feature flags.
8
+ * @param flags - The feature flags.
9
+ * @returns A set of requirements.
10
+ */
11
+ function extractAllRequirements(flags) {
12
+ if (flags === undefined)
13
+ return new Set();
14
+ return new Set(Object.entries(flags)
15
+ .filter(([key, value]) => key.startsWith('requires') && value === true)
16
+ .map(([key]) => key));
17
+ }
18
+ /**
19
+ * Extracts all supports from the feature flags.
20
+ * @param flags - The feature flags.
21
+ * @returns A set of supports.
22
+ */
23
+ function extractAllSupports(flags) {
24
+ if (flags === undefined)
25
+ return new Set();
26
+ return new Set(Object.entries(flags)
27
+ .filter(([key, value]) => key.startsWith('supports') && value === true)
28
+ .map(([key]) => key));
29
+ }
30
+ class IncompatibleFlagsError extends Error {
31
+ incompatibleFlags;
32
+ name = 'IncompatibleFlagsError';
33
+ constructor(incompatibleFlags) {
34
+ super(`Some of the block requirements are not supported by the runtime: ${Array.from(incompatibleFlags.entries()).map(([key, value]) => `${key}: ${value}`).join(', ')}`);
35
+ this.incompatibleFlags = incompatibleFlags;
36
+ }
37
+ }
38
+ class RuntimeCapabilities {
39
+ supportedRequirements = new Map();
40
+ /**
41
+ * Adds a supported requirement to the runtime capabilities.
42
+ * @param requirement - The requirement.
43
+ * @param value - The value of the requirement. If not provided, defaults to true.
44
+ */
45
+ addSupportedRequirement(requirement, value = true) {
46
+ if (!this.supportedRequirements.has(requirement)) {
47
+ this.supportedRequirements.set(requirement, new Set());
48
+ }
49
+ this.supportedRequirements.get(requirement).add(value);
50
+ return this;
51
+ }
52
+ /**
53
+ * Returns a map of incompatible flags. If the block flags are compatible, returns undefined.
54
+ * @param blockFlags - The block flags.
55
+ * @returns A map of incompatible flags, or undefined if the block flags are compatible.
56
+ */
57
+ getIncompatibleFlags(blockFlags) {
58
+ if (blockFlags === undefined)
59
+ return undefined;
60
+ const incompatibleFlags = new Map();
61
+ for (const [key, value] of Object.entries(blockFlags)) {
62
+ if (key.startsWith('requires')) {
63
+ if (value === undefined)
64
+ continue;
65
+ const supportedValues = this.supportedRequirements.get(key);
66
+ if (supportedValues === undefined || !supportedValues.has(value)) {
67
+ incompatibleFlags.set(key, value);
68
+ }
69
+ }
70
+ }
71
+ return incompatibleFlags.size === 0 ? undefined : incompatibleFlags;
72
+ }
73
+ /**
74
+ * Checks if the block flags are compatible with the runtime capabilities.
75
+ * @param blockFlags - The block flags.
76
+ * @returns True if the block flags are compatible, false otherwise.
77
+ */
78
+ checkCompatibility(blockFlags) {
79
+ return this.getIncompatibleFlags(blockFlags) === undefined;
80
+ }
81
+ /**
82
+ * Throws an error if the block flags are incompatible with the runtime capabilities.
83
+ * @param blockFlags - The block flags.
84
+ * @throws IncompatibleFlagsError if the block flags are incompatible with the runtime capabilities.
85
+ */
86
+ throwIfIncompatible(blockFlags) {
87
+ const incompatibleFlags = this.getIncompatibleFlags(blockFlags);
88
+ if (incompatibleFlags !== undefined)
89
+ throw new IncompatibleFlagsError(incompatibleFlags);
90
+ }
91
+ }
92
+
93
+ export { IncompatibleFlagsError, RuntimeCapabilities, checkBlockFlag, extractAllRequirements, extractAllSupports };
94
+ //# sourceMappingURL=flag_utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag_utils.js","sources":["../../src/flags/flag_utils.ts"],"sourcesContent":["import type { BlockCodeFeatureFlags, BlockCodeKnownFeatureFlags } from './block_flags';\nimport type { FilterKeysByPrefix } from './type_utils';\n\nexport function checkBlockFlag(flags: BlockCodeFeatureFlags | undefined, flag: keyof BlockCodeKnownFeatureFlags, flagValue: boolean | number = true): boolean {\n if (flags === undefined) return false;\n return flags[flag] === flagValue;\n}\n\n/**\n * Extracts all requirements from the feature flags.\n * @param flags - The feature flags.\n * @returns A set of requirements.\n */\nexport function extractAllRequirements(flags: BlockCodeFeatureFlags | undefined): Set<`requires${string}`> {\n if (flags === undefined) return new Set();\n return new Set(Object.entries(flags)\n .filter(([key, value]) => key.startsWith('requires') && value === true)\n .map(([key]) => key as `requires${string}`));\n}\n\n/**\n * Extracts all supports from the feature flags.\n * @param flags - The feature flags.\n * @returns A set of supports.\n */\nexport function extractAllSupports(flags: BlockCodeFeatureFlags | undefined): Set<`supports${string}`> {\n if (flags === undefined) return new Set();\n return new Set(Object.entries(flags)\n .filter(([key, value]) => key.startsWith('supports') && value === true)\n .map(([key]) => key as `supports${string}`));\n}\n\nexport class IncompatibleFlagsError extends Error {\n name = 'IncompatibleFlagsError';\n constructor(public readonly incompatibleFlags: Map<`requires${string}`, number | boolean>) {\n super(`Some of the block requirements are not supported by the runtime: ${Array.from(incompatibleFlags.entries()).map(([key, value]) => `${key}: ${value}`).join(', ')}`);\n }\n}\n\n/**\n * A type that represents a supported requirement.\n * @remarks\n * This type is used to represent a supported requirement.\n * It is a subtype of `BlockCodeKnownFeatureFlags` and is used to represent a supported requirement.\n * It is used to represent a supported requirement.\n */\nexport type SupportedRequirement = FilterKeysByPrefix<BlockCodeKnownFeatureFlags, 'requires'>;\n\nexport class RuntimeCapabilities {\n private readonly supportedRequirements: Map<`requires${string}`, Set<number | boolean>> = new Map();\n\n /**\n * Adds a supported requirement to the runtime capabilities.\n * @param requirement - The requirement.\n * @param value - The value of the requirement. If not provided, defaults to true.\n */\n public addSupportedRequirement(requirement: SupportedRequirement, value: number | boolean = true): this {\n if (!this.supportedRequirements.has(requirement)) {\n this.supportedRequirements.set(requirement, new Set());\n }\n this.supportedRequirements.get(requirement)!.add(value);\n return this;\n }\n\n /**\n * Returns a map of incompatible flags. If the block flags are compatible, returns undefined.\n * @param blockFlags - The block flags.\n * @returns A map of incompatible flags, or undefined if the block flags are compatible.\n */\n public getIncompatibleFlags(blockFlags: BlockCodeFeatureFlags | undefined): Map<`requires${string}`, number | boolean> | undefined {\n if (blockFlags === undefined) return undefined;\n const incompatibleFlags = new Map<`requires${string}`, number | boolean>();\n for (const [key, value] of Object.entries(blockFlags)) {\n if (key.startsWith('requires')) {\n if (value === undefined) continue;\n const supportedValues = this.supportedRequirements.get(key as `requires${string}`);\n if (supportedValues === undefined || !supportedValues.has(value as number | boolean)) {\n incompatibleFlags.set(key as `requires${string}`, value as number | boolean);\n }\n }\n }\n return incompatibleFlags.size === 0 ? undefined : incompatibleFlags;\n }\n\n /**\n * Checks if the block flags are compatible with the runtime capabilities.\n * @param blockFlags - The block flags.\n * @returns True if the block flags are compatible, false otherwise.\n */\n public checkCompatibility(blockFlags: BlockCodeFeatureFlags | undefined): boolean {\n return this.getIncompatibleFlags(blockFlags) === undefined;\n }\n\n /**\n * Throws an error if the block flags are incompatible with the runtime capabilities.\n * @param blockFlags - The block flags.\n * @throws IncompatibleFlagsError if the block flags are incompatible with the runtime capabilities.\n */\n public throwIfIncompatible(blockFlags: BlockCodeFeatureFlags | undefined) {\n const incompatibleFlags = this.getIncompatibleFlags(blockFlags);\n if (incompatibleFlags !== undefined)\n throw new IncompatibleFlagsError(incompatibleFlags);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
1
  export * from './block_flags';
2
2
  export * from './flag_utils';
3
3
  export * from './type_utils';
4
- //# sourceMappingURL=index.d.ts.map
@@ -32,4 +32,3 @@ export type Assert<T extends true> = T;
32
32
  * Helper to create a union type of two array value types.
33
33
  */
34
34
  export type ArrayTypeUnion<T extends readonly any[], U extends readonly any[]> = T[number] extends never ? U[number] : U[number] extends never ? T[number] : T[number] | U[number];
35
- //# sourceMappingURL=type_utils.d.ts.map