@milaboratories/pl-model-common 1.46.2 → 1.46.4

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 (205) hide show
  1. package/dist/author_marker.d.ts.map +1 -1
  2. package/dist/base32_encode.cjs.map +1 -1
  3. package/dist/base32_encode.js.map +1 -1
  4. package/dist/base64.cjs.map +1 -1
  5. package/dist/base64.d.ts.map +1 -1
  6. package/dist/base64.js.map +1 -1
  7. package/dist/bmodel/block_config.cjs.map +1 -1
  8. package/dist/bmodel/block_config.d.ts.map +1 -1
  9. package/dist/bmodel/block_config.js.map +1 -1
  10. package/dist/bmodel/code.cjs +0 -1
  11. package/dist/bmodel/code.cjs.map +1 -1
  12. package/dist/bmodel/code.d.ts.map +1 -1
  13. package/dist/bmodel/code.js.map +1 -1
  14. package/dist/bmodel/index.cjs +6 -3
  15. package/dist/bmodel/index.d.ts +2 -1
  16. package/dist/bmodel/index.js +4 -3
  17. package/dist/bmodel/normalization.cjs +2 -1
  18. package/dist/bmodel/normalization.cjs.map +1 -1
  19. package/dist/bmodel/normalization.d.ts.map +1 -1
  20. package/dist/bmodel/normalization.js +2 -1
  21. package/dist/bmodel/normalization.js.map +1 -1
  22. package/dist/branding.d.ts.map +1 -1
  23. package/dist/common_types.d.ts.map +1 -1
  24. package/dist/dialog/index.d.ts.map +1 -1
  25. package/dist/drivers/ChunkedStreamReader.cjs.map +1 -1
  26. package/dist/drivers/ChunkedStreamReader.d.ts.map +1 -1
  27. package/dist/drivers/ChunkedStreamReader.js.map +1 -1
  28. package/dist/drivers/blob.cjs +2 -1
  29. package/dist/drivers/blob.cjs.map +1 -1
  30. package/dist/drivers/blob.d.ts.map +1 -1
  31. package/dist/drivers/blob.js +2 -0
  32. package/dist/drivers/blob.js.map +1 -1
  33. package/dist/drivers/index.cjs +106 -18
  34. package/dist/drivers/index.d.ts +2 -1
  35. package/dist/drivers/index.js +19 -18
  36. package/dist/drivers/interfaces.d.ts.map +1 -1
  37. package/dist/drivers/log.cjs.map +1 -1
  38. package/dist/drivers/log.d.ts.map +1 -1
  39. package/dist/drivers/log.js.map +1 -1
  40. package/dist/drivers/ls.cjs.map +1 -1
  41. package/dist/drivers/ls.d.ts.map +1 -1
  42. package/dist/drivers/ls.js.map +1 -1
  43. package/dist/drivers/pframe/data_info.cjs.map +1 -1
  44. package/dist/drivers/pframe/data_info.d.ts.map +1 -1
  45. package/dist/drivers/pframe/data_info.js.map +1 -1
  46. package/dist/drivers/pframe/data_types.cjs.map +1 -1
  47. package/dist/drivers/pframe/data_types.d.ts.map +1 -1
  48. package/dist/drivers/pframe/data_types.js.map +1 -1
  49. package/dist/drivers/pframe/driver.d.ts.map +1 -1
  50. package/dist/drivers/pframe/filter_spec.d.ts.map +1 -1
  51. package/dist/drivers/pframe/find_columns.d.ts.map +1 -1
  52. package/dist/drivers/pframe/index.cjs +89 -14
  53. package/dist/drivers/pframe/index.d.ts +2 -1
  54. package/dist/drivers/pframe/index.js +14 -14
  55. package/dist/drivers/pframe/linker_columns.cjs +2 -2
  56. package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
  57. package/dist/drivers/pframe/linker_columns.d.ts.map +1 -1
  58. package/dist/drivers/pframe/linker_columns.js +2 -2
  59. package/dist/drivers/pframe/linker_columns.js.map +1 -1
  60. package/dist/drivers/pframe/pframe.d.ts.map +1 -1
  61. package/dist/drivers/pframe/query/index.cjs +6 -1
  62. package/dist/drivers/pframe/query/index.d.ts +2 -1
  63. package/dist/drivers/pframe/query/index.js +2 -1
  64. package/dist/drivers/pframe/query/query_common.d.ts +1 -1
  65. package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
  66. package/dist/drivers/pframe/query/query_data.d.ts.map +1 -1
  67. package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
  68. package/dist/drivers/pframe/query/utils.cjs +1 -1
  69. package/dist/drivers/pframe/query/utils.cjs.map +1 -1
  70. package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
  71. package/dist/drivers/pframe/query/utils.js +1 -1
  72. package/dist/drivers/pframe/query/utils.js.map +1 -1
  73. package/dist/drivers/pframe/spec/anchored.cjs +2 -1
  74. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
  75. package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
  76. package/dist/drivers/pframe/spec/anchored.js +1 -0
  77. package/dist/drivers/pframe/spec/anchored.js.map +1 -1
  78. package/dist/drivers/pframe/spec/discovered_column.cjs +0 -1
  79. package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -1
  80. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
  81. package/dist/drivers/pframe/spec/discovered_column.js.map +1 -1
  82. package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
  83. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
  84. package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
  85. package/dist/drivers/pframe/spec/ids.cjs +1 -1
  86. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  87. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  88. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  89. package/dist/drivers/pframe/spec/index.cjs +57 -7
  90. package/dist/drivers/pframe/spec/index.d.ts +2 -1
  91. package/dist/drivers/pframe/spec/index.js +8 -7
  92. package/dist/drivers/pframe/spec/native_id.cjs +1 -1
  93. package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
  94. package/dist/drivers/pframe/spec/native_id.d.ts.map +1 -1
  95. package/dist/drivers/pframe/spec/native_id.js.map +1 -1
  96. package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
  97. package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
  98. package/dist/drivers/pframe/spec/selectors.js.map +1 -1
  99. package/dist/drivers/pframe/spec/spec.cjs +1 -2
  100. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  101. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  102. package/dist/drivers/pframe/spec/spec.js +1 -1
  103. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  104. package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
  105. package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
  106. package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
  107. package/dist/drivers/pframe/table_calculate.js.map +1 -1
  108. package/dist/drivers/pframe/table_common.cjs.map +1 -1
  109. package/dist/drivers/pframe/table_common.d.ts.map +1 -1
  110. package/dist/drivers/pframe/table_common.js.map +1 -1
  111. package/dist/drivers/pframe/unique_values.d.ts.map +1 -1
  112. package/dist/drivers/upload.d.ts.map +1 -1
  113. package/dist/drivers/urls.cjs.map +1 -1
  114. package/dist/drivers/urls.d.ts.map +1 -1
  115. package/dist/drivers/urls.js.map +1 -1
  116. package/dist/errors.cjs.map +1 -1
  117. package/dist/errors.d.ts.map +1 -1
  118. package/dist/errors.js.map +1 -1
  119. package/dist/flags/block_flags.cjs.map +1 -1
  120. package/dist/flags/block_flags.d.ts.map +1 -1
  121. package/dist/flags/block_flags.js.map +1 -1
  122. package/dist/flags/flag_utils.cjs +1 -0
  123. package/dist/flags/flag_utils.cjs.map +1 -1
  124. package/dist/flags/flag_utils.d.ts.map +1 -1
  125. package/dist/flags/flag_utils.js +1 -0
  126. package/dist/flags/flag_utils.js.map +1 -1
  127. package/dist/flags/index.d.ts +2 -1
  128. package/dist/flags/type_utils.d.ts.map +1 -1
  129. package/dist/httpAuth.cjs.map +1 -1
  130. package/dist/httpAuth.d.ts.map +1 -1
  131. package/dist/httpAuth.js.map +1 -1
  132. package/dist/json.cjs +1 -1
  133. package/dist/json.cjs.map +1 -1
  134. package/dist/json.d.ts.map +1 -1
  135. package/dist/json.js.map +1 -1
  136. package/dist/navigation.cjs.map +1 -1
  137. package/dist/navigation.d.ts.map +1 -1
  138. package/dist/navigation.js.map +1 -1
  139. package/dist/plid.cjs +1 -2
  140. package/dist/plid.cjs.map +1 -1
  141. package/dist/plid.d.ts.map +1 -1
  142. package/dist/plid.js +1 -1
  143. package/dist/plid.js.map +1 -1
  144. package/dist/pool/entry.d.ts.map +1 -1
  145. package/dist/pool/index.d.ts +2 -1
  146. package/dist/pool/query.cjs.map +1 -1
  147. package/dist/pool/query.d.ts.map +1 -1
  148. package/dist/pool/query.js.map +1 -1
  149. package/dist/pool/spec.cjs.map +1 -1
  150. package/dist/pool/spec.d.ts.map +1 -1
  151. package/dist/pool/spec.js.map +1 -1
  152. package/dist/pool_entry.cjs +1 -0
  153. package/dist/pool_entry.cjs.map +1 -1
  154. package/dist/pool_entry.d.ts.map +1 -1
  155. package/dist/pool_entry.js +1 -0
  156. package/dist/pool_entry.js.map +1 -1
  157. package/dist/project_id.d.ts.map +1 -1
  158. package/dist/ref.cjs +0 -1
  159. package/dist/ref.cjs.map +1 -1
  160. package/dist/ref.d.ts.map +1 -1
  161. package/dist/ref.js.map +1 -1
  162. package/dist/resource_types.cjs +4 -1
  163. package/dist/resource_types.cjs.map +1 -1
  164. package/dist/resource_types.d.ts +3 -0
  165. package/dist/resource_types.d.ts.map +1 -1
  166. package/dist/resource_types.js +4 -1
  167. package/dist/resource_types.js.map +1 -1
  168. package/dist/services/index.cjs +28 -6
  169. package/dist/services/index.d.ts +2 -1
  170. package/dist/services/index.js +7 -6
  171. package/dist/services/node_service_handlers.cjs.map +1 -1
  172. package/dist/services/node_service_handlers.d.ts.map +1 -1
  173. package/dist/services/node_service_handlers.js.map +1 -1
  174. package/dist/services/service_capabilities.cjs +4 -1
  175. package/dist/services/service_capabilities.cjs.map +1 -1
  176. package/dist/services/service_capabilities.d.ts.map +1 -1
  177. package/dist/services/service_capabilities.js +4 -1
  178. package/dist/services/service_capabilities.js.map +1 -1
  179. package/dist/services/service_declarations.cjs.map +1 -1
  180. package/dist/services/service_declarations.js.map +1 -1
  181. package/dist/services/service_injectors.cjs +1 -0
  182. package/dist/services/service_injectors.cjs.map +1 -1
  183. package/dist/services/service_injectors.d.ts +1 -1
  184. package/dist/services/service_injectors.d.ts.map +1 -1
  185. package/dist/services/service_injectors.js +1 -1
  186. package/dist/services/service_injectors.js.map +1 -1
  187. package/dist/services/service_registry.cjs.map +1 -1
  188. package/dist/services/service_registry.d.ts.map +1 -1
  189. package/dist/services/service_registry.js.map +1 -1
  190. package/dist/services/service_types.cjs.map +1 -1
  191. package/dist/services/service_types.d.ts.map +1 -1
  192. package/dist/services/service_types.js.map +1 -1
  193. package/dist/utag.d.ts.map +1 -1
  194. package/dist/util.cjs.map +1 -1
  195. package/dist/util.d.ts.map +1 -1
  196. package/dist/util.js.map +1 -1
  197. package/dist/value_or_error.cjs.map +1 -1
  198. package/dist/value_or_error.d.ts.map +1 -1
  199. package/dist/value_or_error.js.map +1 -1
  200. package/package.json +5 -5
  201. package/src/resource_types.ts +3 -0
  202. package/dist/drivers/pframe/driver.cjs +0 -6
  203. package/dist/drivers/pframe/driver.cjs.map +0 -1
  204. package/dist/drivers/pframe/driver.js +0 -6
  205. package/dist/drivers/pframe/driver.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"author_marker.d.ts","names":[],"sources":["../src/author_marker.ts"],"mappings":";;AAEA;UAAiB,YAAA;;;EAGf,QAAA;;EAGA,YAAA;AAAA"}
1
+ {"version":3,"file":"author_marker.d.ts","names":[],"sources":["../src/author_marker.ts"],"mappings":";;AAEA;UAAiB,YAAA;;;EAGf,QAAA;;EAGA,YAAY;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"base32_encode.cjs","names":[],"sources":["../src/base32_encode.ts"],"sourcesContent":["type Data = Int8Array | Uint8Array | Uint8ClampedArray | ArrayBuffer;\n\nfunction toDataView(data: Data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray)\n return new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (data instanceof ArrayBuffer) return new DataView(data);\n\n throw new TypeError(\n \"Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray\",\n );\n}\n\ninterface Options {\n /** If set, forcefully enable or disable padding. The default behavior is to follow the default of the selected variant. */\n padding?: boolean;\n}\n\nconst RFC4648 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst RFC4648_HEX = \"0123456789ABCDEFGHIJKLMNOPQRSTUV\";\nconst CROCKFORD = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nexport function base32Encode(\n data: Data,\n variant: \"RFC3548\" | \"RFC4648\" | \"RFC4648-HEX\" | \"Crockford\",\n options?: Options,\n) {\n options = options || {};\n let alphabet, defaultPadding;\n\n switch (variant) {\n case \"RFC3548\":\n case \"RFC4648\":\n alphabet = RFC4648;\n defaultPadding = true;\n break;\n case \"RFC4648-HEX\":\n alphabet = RFC4648_HEX;\n defaultPadding = true;\n break;\n case \"Crockford\":\n alphabet = CROCKFORD;\n defaultPadding = false;\n break;\n default:\n throw new Error(\"Unknown base32 variant: \" + String(variant));\n }\n\n const padding = options.padding !== undefined ? options.padding : defaultPadding;\n const view = toDataView(data);\n\n let bits = 0;\n let value = 0;\n let output = \"\";\n\n for (let i = 0; i < view.byteLength; i++) {\n value = (value << 8) | view.getUint8(i);\n bits += 8;\n\n while (bits >= 5) {\n output += alphabet[(value >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n\n if (bits > 0) output += alphabet[(value << (5 - bits)) & 31];\n\n if (padding)\n while (output.length % 8 !== 0) {\n output += \"=\";\n }\n\n return output;\n}\n"],"mappings":";AAEA,SAAS,WAAW,MAAY;AAC9B,KAAI,gBAAgB,aAAa,gBAAgB,cAAc,gBAAgB,kBAC7E,QAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,WAAW;AAEpE,KAAI,gBAAgB,YAAa,QAAO,IAAI,SAAS,KAAK;AAE1D,OAAM,IAAI,UACR,2FACD;;AAQH,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,YAAY;AAElB,SAAgB,aACd,MACA,SACA,SACA;AACA,WAAU,WAAW,EAAE;CACvB,IAAI,UAAU;AAEd,SAAQ,SAAR;EACE,KAAK;EACL,KAAK;AACH,cAAW;AACX,oBAAiB;AACjB;EACF,KAAK;AACH,cAAW;AACX,oBAAiB;AACjB;EACF,KAAK;AACH,cAAW;AACX,oBAAiB;AACjB;EACF,QACE,OAAM,IAAI,MAAM,6BAA6B,OAAO,QAAQ,CAAC;;CAGjE,MAAM,UAAU,QAAQ,YAAY,KAAA,IAAY,QAAQ,UAAU;CAClE,MAAM,OAAO,WAAW,KAAK;CAE7B,IAAI,OAAO;CACX,IAAI,QAAQ;CACZ,IAAI,SAAS;AAEb,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK;AACxC,UAAS,SAAS,IAAK,KAAK,SAAS,EAAE;AACvC,UAAQ;AAER,SAAO,QAAQ,GAAG;AAChB,aAAU,SAAU,UAAW,OAAO,IAAM;AAC5C,WAAQ;;;AAIZ,KAAI,OAAO,EAAG,WAAU,SAAU,SAAU,IAAI,OAAS;AAEzD,KAAI,QACF,QAAO,OAAO,SAAS,MAAM,EAC3B,WAAU;AAGd,QAAO"}
1
+ {"version":3,"file":"base32_encode.cjs","names":[],"sources":["../src/base32_encode.ts"],"sourcesContent":["type Data = Int8Array | Uint8Array | Uint8ClampedArray | ArrayBuffer;\n\nfunction toDataView(data: Data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray)\n return new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (data instanceof ArrayBuffer) return new DataView(data);\n\n throw new TypeError(\n \"Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray\",\n );\n}\n\ninterface Options {\n /** If set, forcefully enable or disable padding. The default behavior is to follow the default of the selected variant. */\n padding?: boolean;\n}\n\nconst RFC4648 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst RFC4648_HEX = \"0123456789ABCDEFGHIJKLMNOPQRSTUV\";\nconst CROCKFORD = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nexport function base32Encode(\n data: Data,\n variant: \"RFC3548\" | \"RFC4648\" | \"RFC4648-HEX\" | \"Crockford\",\n options?: Options,\n) {\n options = options || {};\n let alphabet, defaultPadding;\n\n switch (variant) {\n case \"RFC3548\":\n case \"RFC4648\":\n alphabet = RFC4648;\n defaultPadding = true;\n break;\n case \"RFC4648-HEX\":\n alphabet = RFC4648_HEX;\n defaultPadding = true;\n break;\n case \"Crockford\":\n alphabet = CROCKFORD;\n defaultPadding = false;\n break;\n default:\n throw new Error(\"Unknown base32 variant: \" + String(variant));\n }\n\n const padding = options.padding !== undefined ? options.padding : defaultPadding;\n const view = toDataView(data);\n\n let bits = 0;\n let value = 0;\n let output = \"\";\n\n for (let i = 0; i < view.byteLength; i++) {\n value = (value << 8) | view.getUint8(i);\n bits += 8;\n\n while (bits >= 5) {\n output += alphabet[(value >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n\n if (bits > 0) output += alphabet[(value << (5 - bits)) & 31];\n\n if (padding)\n while (output.length % 8 !== 0) {\n output += \"=\";\n }\n\n return output;\n}\n"],"mappings":";AAEA,SAAS,WAAW,MAAY;CAC9B,IAAI,gBAAgB,aAAa,gBAAgB,cAAc,gBAAgB,mBAC7E,OAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;CAEnE,IAAI,gBAAgB,aAAa,OAAO,IAAI,SAAS,IAAI;CAEzD,MAAM,IAAI,UACR,0FACF;AACF;AAOA,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,YAAY;AAElB,SAAgB,aACd,MACA,SACA,SACA;CACA,UAAU,WAAW,CAAC;CACtB,IAAI,UAAU;CAEd,QAAQ,SAAR;EACE,KAAK;EACL,KAAK;GACH,WAAW;GACX,iBAAiB;GACjB;EACF,KAAK;GACH,WAAW;GACX,iBAAiB;GACjB;EACF,KAAK;GACH,WAAW;GACX,iBAAiB;GACjB;EACF,SACE,MAAM,IAAI,MAAM,6BAA6B,OAAO,OAAO,CAAC;CAChE;CAEA,MAAM,UAAU,QAAQ,YAAY,KAAA,IAAY,QAAQ,UAAU;CAClE,MAAM,OAAO,WAAW,IAAI;CAE5B,IAAI,OAAO;CACX,IAAI,QAAQ;CACZ,IAAI,SAAS;CAEb,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK;EACxC,QAAS,SAAS,IAAK,KAAK,SAAS,CAAC;EACtC,QAAQ;EAER,OAAO,QAAQ,GAAG;GAChB,UAAU,SAAU,UAAW,OAAO,IAAM;GAC5C,QAAQ;EACV;CACF;CAEA,IAAI,OAAO,GAAG,UAAU,SAAU,SAAU,IAAI,OAAS;CAEzD,IAAI,SACF,OAAO,OAAO,SAAS,MAAM,GAC3B,UAAU;CAGd,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"base32_encode.js","names":[],"sources":["../src/base32_encode.ts"],"sourcesContent":["type Data = Int8Array | Uint8Array | Uint8ClampedArray | ArrayBuffer;\n\nfunction toDataView(data: Data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray)\n return new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (data instanceof ArrayBuffer) return new DataView(data);\n\n throw new TypeError(\n \"Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray\",\n );\n}\n\ninterface Options {\n /** If set, forcefully enable or disable padding. The default behavior is to follow the default of the selected variant. */\n padding?: boolean;\n}\n\nconst RFC4648 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst RFC4648_HEX = \"0123456789ABCDEFGHIJKLMNOPQRSTUV\";\nconst CROCKFORD = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nexport function base32Encode(\n data: Data,\n variant: \"RFC3548\" | \"RFC4648\" | \"RFC4648-HEX\" | \"Crockford\",\n options?: Options,\n) {\n options = options || {};\n let alphabet, defaultPadding;\n\n switch (variant) {\n case \"RFC3548\":\n case \"RFC4648\":\n alphabet = RFC4648;\n defaultPadding = true;\n break;\n case \"RFC4648-HEX\":\n alphabet = RFC4648_HEX;\n defaultPadding = true;\n break;\n case \"Crockford\":\n alphabet = CROCKFORD;\n defaultPadding = false;\n break;\n default:\n throw new Error(\"Unknown base32 variant: \" + String(variant));\n }\n\n const padding = options.padding !== undefined ? options.padding : defaultPadding;\n const view = toDataView(data);\n\n let bits = 0;\n let value = 0;\n let output = \"\";\n\n for (let i = 0; i < view.byteLength; i++) {\n value = (value << 8) | view.getUint8(i);\n bits += 8;\n\n while (bits >= 5) {\n output += alphabet[(value >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n\n if (bits > 0) output += alphabet[(value << (5 - bits)) & 31];\n\n if (padding)\n while (output.length % 8 !== 0) {\n output += \"=\";\n }\n\n return output;\n}\n"],"mappings":";AAEA,SAAS,WAAW,MAAY;AAC9B,KAAI,gBAAgB,aAAa,gBAAgB,cAAc,gBAAgB,kBAC7E,QAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,WAAW;AAEpE,KAAI,gBAAgB,YAAa,QAAO,IAAI,SAAS,KAAK;AAE1D,OAAM,IAAI,UACR,2FACD;;AAQH,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,YAAY;AAElB,SAAgB,aACd,MACA,SACA,SACA;AACA,WAAU,WAAW,EAAE;CACvB,IAAI,UAAU;AAEd,SAAQ,SAAR;EACE,KAAK;EACL,KAAK;AACH,cAAW;AACX,oBAAiB;AACjB;EACF,KAAK;AACH,cAAW;AACX,oBAAiB;AACjB;EACF,KAAK;AACH,cAAW;AACX,oBAAiB;AACjB;EACF,QACE,OAAM,IAAI,MAAM,6BAA6B,OAAO,QAAQ,CAAC;;CAGjE,MAAM,UAAU,QAAQ,YAAY,KAAA,IAAY,QAAQ,UAAU;CAClE,MAAM,OAAO,WAAW,KAAK;CAE7B,IAAI,OAAO;CACX,IAAI,QAAQ;CACZ,IAAI,SAAS;AAEb,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK;AACxC,UAAS,SAAS,IAAK,KAAK,SAAS,EAAE;AACvC,UAAQ;AAER,SAAO,QAAQ,GAAG;AAChB,aAAU,SAAU,UAAW,OAAO,IAAM;AAC5C,WAAQ;;;AAIZ,KAAI,OAAO,EAAG,WAAU,SAAU,SAAU,IAAI,OAAS;AAEzD,KAAI,QACF,QAAO,OAAO,SAAS,MAAM,EAC3B,WAAU;AAGd,QAAO"}
1
+ {"version":3,"file":"base32_encode.js","names":[],"sources":["../src/base32_encode.ts"],"sourcesContent":["type Data = Int8Array | Uint8Array | Uint8ClampedArray | ArrayBuffer;\n\nfunction toDataView(data: Data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray)\n return new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (data instanceof ArrayBuffer) return new DataView(data);\n\n throw new TypeError(\n \"Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray\",\n );\n}\n\ninterface Options {\n /** If set, forcefully enable or disable padding. The default behavior is to follow the default of the selected variant. */\n padding?: boolean;\n}\n\nconst RFC4648 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst RFC4648_HEX = \"0123456789ABCDEFGHIJKLMNOPQRSTUV\";\nconst CROCKFORD = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nexport function base32Encode(\n data: Data,\n variant: \"RFC3548\" | \"RFC4648\" | \"RFC4648-HEX\" | \"Crockford\",\n options?: Options,\n) {\n options = options || {};\n let alphabet, defaultPadding;\n\n switch (variant) {\n case \"RFC3548\":\n case \"RFC4648\":\n alphabet = RFC4648;\n defaultPadding = true;\n break;\n case \"RFC4648-HEX\":\n alphabet = RFC4648_HEX;\n defaultPadding = true;\n break;\n case \"Crockford\":\n alphabet = CROCKFORD;\n defaultPadding = false;\n break;\n default:\n throw new Error(\"Unknown base32 variant: \" + String(variant));\n }\n\n const padding = options.padding !== undefined ? options.padding : defaultPadding;\n const view = toDataView(data);\n\n let bits = 0;\n let value = 0;\n let output = \"\";\n\n for (let i = 0; i < view.byteLength; i++) {\n value = (value << 8) | view.getUint8(i);\n bits += 8;\n\n while (bits >= 5) {\n output += alphabet[(value >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n\n if (bits > 0) output += alphabet[(value << (5 - bits)) & 31];\n\n if (padding)\n while (output.length % 8 !== 0) {\n output += \"=\";\n }\n\n return output;\n}\n"],"mappings":";AAEA,SAAS,WAAW,MAAY;CAC9B,IAAI,gBAAgB,aAAa,gBAAgB,cAAc,gBAAgB,mBAC7E,OAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,UAAU;CAEnE,IAAI,gBAAgB,aAAa,OAAO,IAAI,SAAS,IAAI;CAEzD,MAAM,IAAI,UACR,0FACF;AACF;AAOA,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,YAAY;AAElB,SAAgB,aACd,MACA,SACA,SACA;CACA,UAAU,WAAW,CAAC;CACtB,IAAI,UAAU;CAEd,QAAQ,SAAR;EACE,KAAK;EACL,KAAK;GACH,WAAW;GACX,iBAAiB;GACjB;EACF,KAAK;GACH,WAAW;GACX,iBAAiB;GACjB;EACF,KAAK;GACH,WAAW;GACX,iBAAiB;GACjB;EACF,SACE,MAAM,IAAI,MAAM,6BAA6B,OAAO,OAAO,CAAC;CAChE;CAEA,MAAM,UAAU,QAAQ,YAAY,KAAA,IAAY,QAAQ,UAAU;CAClE,MAAM,OAAO,WAAW,IAAI;CAE5B,IAAI,OAAO;CACX,IAAI,QAAQ;CACZ,IAAI,SAAS;CAEb,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK;EACxC,QAAS,SAAS,IAAK,KAAK,SAAS,CAAC;EACtC,QAAQ;EAER,OAAO,QAAQ,GAAG;GAChB,UAAU,SAAU,UAAW,OAAO,IAAM;GAC5C,QAAQ;EACV;CACF;CAEA,IAAI,OAAO,GAAG,UAAU,SAAU,SAAU,IAAI,OAAS;CAEzD,IAAI,SACF,OAAO,OAAO,SAAS,MAAM,GAC3B,UAAU;CAGd,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"base64.cjs","names":[],"sources":["../src/base64.ts"],"sourcesContent":["import type { WithImplicitCoercion } from \"node:buffer\";\n\nexport type Base64Compatible<T> =\n T extends WithImplicitCoercion<Uint8Array | readonly number[] | string> ? T : never;\n\nexport type Base64Encoded<T = unknown> =\n Base64Compatible<T> extends never\n ? never\n : string & {\n __base64_encoded: T;\n };\n\nexport function base64Encode<T>(value: Base64Compatible<T>): Base64Encoded<T> {\n return Buffer.from(value).toString(\"base64\") as Base64Encoded<T>;\n}\n\nexport function base64Decode<T extends string>(value: Base64Encoded<T>): T {\n return Buffer.from(value, \"base64\").toString() as T;\n}\n"],"mappings":";AAYA,SAAgB,aAAgB,OAA8C;AAC5E,QAAO,OAAO,KAAK,MAAM,CAAC,SAAS,SAAS;;AAG9C,SAAgB,aAA+B,OAA4B;AACzE,QAAO,OAAO,KAAK,OAAO,SAAS,CAAC,UAAU"}
1
+ {"version":3,"file":"base64.cjs","names":[],"sources":["../src/base64.ts"],"sourcesContent":["import type { WithImplicitCoercion } from \"node:buffer\";\n\nexport type Base64Compatible<T> =\n T extends WithImplicitCoercion<Uint8Array | readonly number[] | string> ? T : never;\n\nexport type Base64Encoded<T = unknown> =\n Base64Compatible<T> extends never\n ? never\n : string & {\n __base64_encoded: T;\n };\n\nexport function base64Encode<T>(value: Base64Compatible<T>): Base64Encoded<T> {\n return Buffer.from(value).toString(\"base64\") as Base64Encoded<T>;\n}\n\nexport function base64Decode<T extends string>(value: Base64Encoded<T>): T {\n return Buffer.from(value, \"base64\").toString() as T;\n}\n"],"mappings":";AAYA,SAAgB,aAAgB,OAA8C;CAC5E,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,QAAQ;AAC7C;AAEA,SAAgB,aAA+B,OAA4B;CACzE,OAAO,OAAO,KAAK,OAAO,QAAQ,CAAC,CAAC,SAAS;AAC/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"base64.d.ts","names":[],"sources":["../src/base64.ts"],"mappings":";;;KAEY,gBAAA,MACV,CAAA,SAAU,oBAAA,CAAqB,UAAA,iCAA2C,CAAA;AAAA,KAEhE,aAAA,gBACV,gBAAA,CAAiB,CAAA;EAGX,gBAAA,EAAkB,CAAA;AAAA;AAAA,iBAGV,YAAA,GAAA,CAAgB,KAAA,EAAO,gBAAA,CAAiB,CAAA,IAAK,aAAA,CAAc,CAAA;AAAA,iBAI3D,YAAA,kBAAA,CAA+B,KAAA,EAAO,aAAA,CAAc,CAAA,IAAK,CAAA"}
1
+ {"version":3,"file":"base64.d.ts","names":[],"sources":["../src/base64.ts"],"mappings":";;;KAEY,gBAAA,MACV,CAAA,SAAU,oBAAA,CAAqB,UAAA,iCAA2C,CAAA;AAAA,KAEhE,aAAA,gBACV,gBAAA,CAAiB,CAAA;EAGX,gBAAA,EAAkB,CAAA;AAAA;AAAA,iBAGV,YAAA,IAAgB,KAAA,EAAO,gBAAA,CAAiB,CAAA,IAAK,aAAA,CAAc,CAAA;AAAA,iBAI3D,YAAA,mBAA+B,KAAA,EAAO,aAAA,CAAc,CAAA,IAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","names":[],"sources":["../src/base64.ts"],"sourcesContent":["import type { WithImplicitCoercion } from \"node:buffer\";\n\nexport type Base64Compatible<T> =\n T extends WithImplicitCoercion<Uint8Array | readonly number[] | string> ? T : never;\n\nexport type Base64Encoded<T = unknown> =\n Base64Compatible<T> extends never\n ? never\n : string & {\n __base64_encoded: T;\n };\n\nexport function base64Encode<T>(value: Base64Compatible<T>): Base64Encoded<T> {\n return Buffer.from(value).toString(\"base64\") as Base64Encoded<T>;\n}\n\nexport function base64Decode<T extends string>(value: Base64Encoded<T>): T {\n return Buffer.from(value, \"base64\").toString() as T;\n}\n"],"mappings":";AAYA,SAAgB,aAAgB,OAA8C;AAC5E,QAAO,OAAO,KAAK,MAAM,CAAC,SAAS,SAAS;;AAG9C,SAAgB,aAA+B,OAA4B;AACzE,QAAO,OAAO,KAAK,OAAO,SAAS,CAAC,UAAU"}
1
+ {"version":3,"file":"base64.js","names":[],"sources":["../src/base64.ts"],"sourcesContent":["import type { WithImplicitCoercion } from \"node:buffer\";\n\nexport type Base64Compatible<T> =\n T extends WithImplicitCoercion<Uint8Array | readonly number[] | string> ? T : never;\n\nexport type Base64Encoded<T = unknown> =\n Base64Compatible<T> extends never\n ? never\n : string & {\n __base64_encoded: T;\n };\n\nexport function base64Encode<T>(value: Base64Compatible<T>): Base64Encoded<T> {\n return Buffer.from(value).toString(\"base64\") as Base64Encoded<T>;\n}\n\nexport function base64Decode<T extends string>(value: Base64Encoded<T>): T {\n return Buffer.from(value, \"base64\").toString() as T;\n}\n"],"mappings":";AAYA,SAAgB,aAAgB,OAA8C;CAC5E,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,QAAQ;AAC7C;AAEA,SAAgB,aAA+B,OAA4B;CACzE,OAAO,OAAO,KAAK,OAAO,QAAQ,CAAC,CAAC,SAAS;AAC/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"block_config.cjs","names":[],"sources":["../../src/bmodel/block_config.ts"],"sourcesContent":["// TODO BroadActiveHandleDescriptor must be removed\n\nimport type { BlockCodeFeatureFlags } from \"../flags\";\nimport type { BlockCodeWithInfo, Code } from \"./code\";\nimport type { BlockRenderingMode } from \"./types\";\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV4Generic<\n _Args = unknown,\n _Data extends Record<string, unknown> = Record<string, unknown>,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 4;\n\n readonly modelAPIVersion: 2;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Lambda to derive list of sections for the left overview panel */\n readonly sections: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n * */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n\n /** Facade callbacks supported by this block (for pre-execution validation) */\n readonly blockLifecycleCallbacks: Record<string, NarrowActiveHandleDescriptor>;\n};\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV3Generic<\n Args = unknown,\n UiState = unknown,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 3;\n\n readonly modelAPIVersion: 1;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Initial value for the args when block is added to the project */\n readonly initialArgs: Args;\n\n /** Initial value for the args when block is added to the project */\n readonly initialUiState: UiState;\n\n /**\n * Config to determine whether the block can be executed with current\n * arguments.\n *\n * Optional to support earlier SDK version configs.\n */\n readonly inputsValid: BroadActiveHandleDescriptor;\n\n /** Configuration to derive list of section for the left overview panel */\n readonly sections: BroadActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n};\n\nexport type BlockConfigGeneric = BlockConfigV3Generic | BlockConfigV4Generic;\n\nexport function extractCodeWithInfo(cfg: BlockConfigGeneric): BlockCodeWithInfo {\n if (cfg.code === undefined) throw new Error(\"extractCodeWithInfo: No code bundle\");\n return {\n code: cfg.code,\n sdkVersion: cfg.sdkVersion,\n featureFlags: cfg.featureFlags,\n };\n}\n"],"mappings":";AAmIA,SAAgB,oBAAoB,KAA4C;AAC9E,KAAI,IAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,sCAAsC;AAClF,QAAO;EACL,MAAM,IAAI;EACV,YAAY,IAAI;EAChB,cAAc,IAAI;EACnB"}
1
+ {"version":3,"file":"block_config.cjs","names":[],"sources":["../../src/bmodel/block_config.ts"],"sourcesContent":["// TODO BroadActiveHandleDescriptor must be removed\n\nimport type { BlockCodeFeatureFlags } from \"../flags\";\nimport type { BlockCodeWithInfo, Code } from \"./code\";\nimport type { BlockRenderingMode } from \"./types\";\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV4Generic<\n _Args = unknown,\n _Data extends Record<string, unknown> = Record<string, unknown>,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 4;\n\n readonly modelAPIVersion: 2;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Lambda to derive list of sections for the left overview panel */\n readonly sections: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n * */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n\n /** Facade callbacks supported by this block (for pre-execution validation) */\n readonly blockLifecycleCallbacks: Record<string, NarrowActiveHandleDescriptor>;\n};\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV3Generic<\n Args = unknown,\n UiState = unknown,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 3;\n\n readonly modelAPIVersion: 1;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Initial value for the args when block is added to the project */\n readonly initialArgs: Args;\n\n /** Initial value for the args when block is added to the project */\n readonly initialUiState: UiState;\n\n /**\n * Config to determine whether the block can be executed with current\n * arguments.\n *\n * Optional to support earlier SDK version configs.\n */\n readonly inputsValid: BroadActiveHandleDescriptor;\n\n /** Configuration to derive list of section for the left overview panel */\n readonly sections: BroadActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n};\n\nexport type BlockConfigGeneric = BlockConfigV3Generic | BlockConfigV4Generic;\n\nexport function extractCodeWithInfo(cfg: BlockConfigGeneric): BlockCodeWithInfo {\n if (cfg.code === undefined) throw new Error(\"extractCodeWithInfo: No code bundle\");\n return {\n code: cfg.code,\n sdkVersion: cfg.sdkVersion,\n featureFlags: cfg.featureFlags,\n };\n}\n"],"mappings":";AAmIA,SAAgB,oBAAoB,KAA4C;CAC9E,IAAI,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,qCAAqC;CACjF,OAAO;EACL,MAAM,IAAI;EACV,YAAY,IAAI;EAChB,cAAc,IAAI;CACpB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"block_config.d.ts","names":[],"sources":["../../src/bmodel/block_config.ts"],"mappings":";;;;;;;;AAUA;KAAY,oBAAA,gCAEI,MAAA,oBAA0B,MAAA,+FAEH,2BAAA,GAA8B,2BAAA,kBACnD,MAAA,SAAe,2BAAA,IAA+B,MAAA,SAE5D,2BAAA;EAP4B,wDAWrB,aAAA;EAAA,SAEA,eAAA,KAT4B;EAAA,SAY5B,UAAA,UAXsB;EAAA,SActB,aAAA,EAAe,kBAAA,EAZtB;EAAA,SAeO,QAAA,EAAU,4BAAA,EAHK;EAAA,SAMf,KAAA,GAAQ,4BAAA,EAAA;EAAA,SAGR,QAAA,GAAW,4BAAA,EAGJ;EAAA,SAAP,IAAA,GAAO,2BAAA;EASE;;;;EAAA,SAHT,iBAAA,GAAoB,4BAAA,EAYW;EAAA,SAT/B,OAAA,EAAS,OAAA,EAvClB;EAAA,SA0CS,IAAA,GAAO,IAAA,EAzCF;EAAA,SA4CL,YAAA,GAAe,qBAAA,EA3CxB;EAAA,SA8CS,uBAAA,EAAyB,MAAA,SAAe,4BAAA;AAAA;;;;;KAOvC,oBAAA,gHAI2B,2BAAA,GAA8B,2BAAA,kBACnD,MAAA,SAAe,2BAAA,IAA+B,MAAA,SAE5D,2BAAA;EAxDA,wDA4DO,aAAA;EAAA,SAEA,eAAA,KArDA;EAAA,SAwDA,UAAA,UArDe;EAAA,SAwDf,aAAA,EAAe,kBAAA,EArDL;EAAA,SAwDV,WAAA,EAAa,IAAA,EArDL;EAAA,SAwDR,cAAA,EAAgB,OAAA;EArDL;;;;;;EAAA,SA6DX,WAAA,EAAa,2BAAA,EA9Cb;EAAA,SAiDA,QAAA,EAAU,2BAAA,EA9CV;EAAA,SAiDA,KAAA,GAAQ,4BAAA,EA9CR;EAAA,SAiDA,QAAA,GAAW,4BAAA,EAjD6B;EAAA,SAoDxC,IAAA,GAAO,2BAAA;EApD6D;AAO/E;;;EAP+E,SA0DpE,iBAAA,GAAoB,4BAAA,EA/CsC;EAAA,SAkD1D,OAAA,EAAS,OAAA,EAjDF;EAAA,SAoDP,IAAA,GAAO,IAAA,EApD8C;EAAA,SAuDrD,YAAA,GAAe,qBAAA;AAAA;AAAA,KAGd,kBAAA,GAAqB,oBAAA,GAAuB,oBAAA;AAAA,iBAExC,mBAAA,CAAoB,GAAA,EAAK,kBAAA,GAAqB,iBAAA"}
1
+ {"version":3,"file":"block_config.d.ts","names":[],"sources":["../../src/bmodel/block_config.ts"],"mappings":";;;;;;;;AAUA;KAAY,oBAAA,gCAEI,MAAA,oBAA0B,MAAA,+FAEH,2BAAA,GAA8B,2BAAA,kBACnD,MAAA,SAAe,2BAAA,IAA+B,MAAA,SAE5D,2BAAA;EAP4B,wDAWrB,aAAA;EAAA,SAEA,eAAA,KAT4B;EAAA,SAY5B,UAAA,UAXsB;EAAA,SActB,aAAA,EAAe,kBAAA,EAZtB;EAAA,SAeO,QAAA,EAAU,4BAAA,EAHK;EAAA,SAMf,KAAA,GAAQ,4BAAA,EAAA;EAAA,SAGR,QAAA,GAAW,4BAAA,EAGJ;EAAA,SAAP,IAAA,GAAO,2BAAA;EASE;;;;EAAA,SAHT,iBAAA,GAAoB,4BAAA,EAYW;EAAA,SAT/B,OAAA,EAAS,OAAA,EAvClB;EAAA,SA0CS,IAAA,GAAO,IAAA,EAzCF;EAAA,SA4CL,YAAA,GAAe,qBAAA,EA3CxB;EAAA,SA8CS,uBAAA,EAAyB,MAAA,SAAe,4BAAA;AAAA;;;;;KAOvC,oBAAA,gHAI2B,2BAAA,GAA8B,2BAAA,kBACnD,MAAA,SAAe,2BAAA,IAA+B,MAAA,SAE5D,2BAAA;EAxDA,wDA4DO,aAAA;EAAA,SAEA,eAAA,KArDA;EAAA,SAwDA,UAAA,UArDe;EAAA,SAwDf,aAAA,EAAe,kBAAA,EArDL;EAAA,SAwDV,WAAA,EAAa,IAAA,EArDL;EAAA,SAwDR,cAAA,EAAgB,OAAA;EArDL;;;;;;EAAA,SA6DX,WAAA,EAAa,2BAAA,EA9Cb;EAAA,SAiDA,QAAA,EAAU,2BAAA,EA9CV;EAAA,SAiDA,KAAA,GAAQ,4BAAA,EA9CR;EAAA,SAiDA,QAAA,GAAW,4BAAA,EAjD6B;EAAA,SAoDxC,IAAA,GAAO,2BAAA;EApD6D;AAO/E;;;EAP+E,SA0DpE,iBAAA,GAAoB,4BAAA,EA/CsC;EAAA,SAkD1D,OAAA,EAAS,OAAA,EAjDF;EAAA,SAoDP,IAAA,GAAO,IAAA,EApD8C;EAAA,SAuDrD,YAAA,GAAe,qBAAA;AAAA;AAAA,KAGd,kBAAA,GAAqB,oBAAA,GAAuB,oBAAoB;AAAA,iBAE5D,mBAAA,CAAoB,GAAA,EAAK,kBAAA,GAAqB,iBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"block_config.js","names":[],"sources":["../../src/bmodel/block_config.ts"],"sourcesContent":["// TODO BroadActiveHandleDescriptor must be removed\n\nimport type { BlockCodeFeatureFlags } from \"../flags\";\nimport type { BlockCodeWithInfo, Code } from \"./code\";\nimport type { BlockRenderingMode } from \"./types\";\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV4Generic<\n _Args = unknown,\n _Data extends Record<string, unknown> = Record<string, unknown>,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 4;\n\n readonly modelAPIVersion: 2;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Lambda to derive list of sections for the left overview panel */\n readonly sections: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n * */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n\n /** Facade callbacks supported by this block (for pre-execution validation) */\n readonly blockLifecycleCallbacks: Record<string, NarrowActiveHandleDescriptor>;\n};\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV3Generic<\n Args = unknown,\n UiState = unknown,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 3;\n\n readonly modelAPIVersion: 1;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Initial value for the args when block is added to the project */\n readonly initialArgs: Args;\n\n /** Initial value for the args when block is added to the project */\n readonly initialUiState: UiState;\n\n /**\n * Config to determine whether the block can be executed with current\n * arguments.\n *\n * Optional to support earlier SDK version configs.\n */\n readonly inputsValid: BroadActiveHandleDescriptor;\n\n /** Configuration to derive list of section for the left overview panel */\n readonly sections: BroadActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n};\n\nexport type BlockConfigGeneric = BlockConfigV3Generic | BlockConfigV4Generic;\n\nexport function extractCodeWithInfo(cfg: BlockConfigGeneric): BlockCodeWithInfo {\n if (cfg.code === undefined) throw new Error(\"extractCodeWithInfo: No code bundle\");\n return {\n code: cfg.code,\n sdkVersion: cfg.sdkVersion,\n featureFlags: cfg.featureFlags,\n };\n}\n"],"mappings":";AAmIA,SAAgB,oBAAoB,KAA4C;AAC9E,KAAI,IAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,sCAAsC;AAClF,QAAO;EACL,MAAM,IAAI;EACV,YAAY,IAAI;EAChB,cAAc,IAAI;EACnB"}
1
+ {"version":3,"file":"block_config.js","names":[],"sources":["../../src/bmodel/block_config.ts"],"sourcesContent":["// TODO BroadActiveHandleDescriptor must be removed\n\nimport type { BlockCodeFeatureFlags } from \"../flags\";\nimport type { BlockCodeWithInfo, Code } from \"./code\";\nimport type { BlockRenderingMode } from \"./types\";\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV4Generic<\n _Args = unknown,\n _Data extends Record<string, unknown> = Record<string, unknown>,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 4;\n\n readonly modelAPIVersion: 2;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Lambda to derive list of sections for the left overview panel */\n readonly sections: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n * */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n\n /** Facade callbacks supported by this block (for pre-execution validation) */\n readonly blockLifecycleCallbacks: Record<string, NarrowActiveHandleDescriptor>;\n};\n\n/**\n * BroadActiveHandleDescriptor = TypedConfigOrConfigLambda,\n * NarrowActiveHandleDescriptor = ConfigRenderLambda\n */\nexport type BlockConfigV3Generic<\n Args = unknown,\n UiState = unknown,\n BroadActiveHandleDescriptor = unknown,\n NarrowActiveHandleDescriptor extends BroadActiveHandleDescriptor = BroadActiveHandleDescriptor,\n Outputs extends Record<string, BroadActiveHandleDescriptor> = Record<\n string,\n BroadActiveHandleDescriptor\n >,\n> = {\n /** Discriminator to identify config version */\n readonly configVersion: 3;\n\n readonly modelAPIVersion: 1;\n\n /** SDK version used by the block */\n readonly sdkVersion: string;\n\n /** Main rendering mode for the block */\n readonly renderingMode: BlockRenderingMode;\n\n /** Initial value for the args when block is added to the project */\n readonly initialArgs: Args;\n\n /** Initial value for the args when block is added to the project */\n readonly initialUiState: UiState;\n\n /**\n * Config to determine whether the block can be executed with current\n * arguments.\n *\n * Optional to support earlier SDK version configs.\n */\n readonly inputsValid: BroadActiveHandleDescriptor;\n\n /** Configuration to derive list of section for the left overview panel */\n readonly sections: BroadActiveHandleDescriptor;\n\n /** Lambda to derive block title */\n readonly title?: NarrowActiveHandleDescriptor;\n\n /** Lambda to derive block subtitle, shown below the title */\n readonly subtitle?: NarrowActiveHandleDescriptor;\n\n /** Lambda returning array of tags for search functionality */\n readonly tags?: BroadActiveHandleDescriptor;\n\n /**\n * Lambda returning list of upstream blocks this block enriches with its exports,\n * influences dependency graph construction\n */\n readonly enrichmentTargets?: NarrowActiveHandleDescriptor;\n\n /** Configuration for the output cells */\n readonly outputs: Outputs;\n\n /** Config code bundle */\n readonly code?: Code;\n\n /** Feature flags for the block Model and UI code. */\n readonly featureFlags?: BlockCodeFeatureFlags;\n};\n\nexport type BlockConfigGeneric = BlockConfigV3Generic | BlockConfigV4Generic;\n\nexport function extractCodeWithInfo(cfg: BlockConfigGeneric): BlockCodeWithInfo {\n if (cfg.code === undefined) throw new Error(\"extractCodeWithInfo: No code bundle\");\n return {\n code: cfg.code,\n sdkVersion: cfg.sdkVersion,\n featureFlags: cfg.featureFlags,\n };\n}\n"],"mappings":";AAmIA,SAAgB,oBAAoB,KAA4C;CAC9E,IAAI,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,qCAAqC;CACjF,OAAO;EACL,MAAM,IAAI;EACV,YAAY,IAAI;EAChB,cAAc,IAAI;CACpB;AACF"}
@@ -1,4 +1,3 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  let zod = require("zod");
3
2
  //#region src/bmodel/code.ts
4
3
  const Code = zod.z.object({
@@ -1 +1 @@
1
- {"version":3,"file":"code.cjs","names":["z"],"sources":["../../src/bmodel/code.ts"],"sourcesContent":["import type { BlockCodeFeatureFlags } from \"../flags\";\nimport { z } from \"zod\";\n\nexport const Code = z.object({\n type: z.literal(\"plain\"),\n content: z.string(),\n});\n\nexport type Code = z.infer<typeof Code>;\n\nexport type BlockCodeWithInfo = {\n readonly code: Code;\n readonly sdkVersion: string;\n readonly featureFlags: BlockCodeFeatureFlags | undefined;\n};\n"],"mappings":";;;AAGA,MAAa,OAAOA,IAAAA,EAAE,OAAO;CAC3B,MAAMA,IAAAA,EAAE,QAAQ,QAAQ;CACxB,SAASA,IAAAA,EAAE,QAAQ;CACpB,CAAC"}
1
+ {"version":3,"file":"code.cjs","names":["z"],"sources":["../../src/bmodel/code.ts"],"sourcesContent":["import type { BlockCodeFeatureFlags } from \"../flags\";\nimport { z } from \"zod\";\n\nexport const Code = z.object({\n type: z.literal(\"plain\"),\n content: z.string(),\n});\n\nexport type Code = z.infer<typeof Code>;\n\nexport type BlockCodeWithInfo = {\n readonly code: Code;\n readonly sdkVersion: string;\n readonly featureFlags: BlockCodeFeatureFlags | undefined;\n};\n"],"mappings":";;AAGA,MAAa,OAAOA,IAAAA,EAAE,OAAO;CAC3B,MAAMA,IAAAA,EAAE,QAAQ,OAAO;CACvB,SAASA,IAAAA,EAAE,OAAO;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"code.d.ts","names":[],"sources":["../../src/bmodel/code.ts"],"mappings":";;;;cAGa,IAAA,EAAI,CAAA,CAAA,SAAA;;;;;;;;;;KAKL,IAAA,GAAO,CAAA,CAAE,KAAA,QAAa,IAAA;AAAA,KAEtB,iBAAA;EAAA,SACD,IAAA,EAAM,IAAA;EAAA,SACN,UAAA;EAAA,SACA,YAAA,EAAc,qBAAA;AAAA"}
1
+ {"version":3,"file":"code.d.ts","names":[],"sources":["../../src/bmodel/code.ts"],"mappings":";;;;cAGa,IAAA,EAAI,CAAA,CAAA,SAAA;;;;;;;;;;KAKL,IAAA,GAAO,CAAA,CAAE,KAAK,QAAQ,IAAA;AAAA,KAEtB,iBAAA;EAAA,SACD,IAAA,EAAM,IAAA;EAAA,SACN,UAAA;EAAA,SACA,YAAA,EAAc,qBAAqB;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"code.js","names":[],"sources":["../../src/bmodel/code.ts"],"sourcesContent":["import type { BlockCodeFeatureFlags } from \"../flags\";\nimport { z } from \"zod\";\n\nexport const Code = z.object({\n type: z.literal(\"plain\"),\n content: z.string(),\n});\n\nexport type Code = z.infer<typeof Code>;\n\nexport type BlockCodeWithInfo = {\n readonly code: Code;\n readonly sdkVersion: string;\n readonly featureFlags: BlockCodeFeatureFlags | undefined;\n};\n"],"mappings":";;AAGA,MAAa,OAAO,EAAE,OAAO;CAC3B,MAAM,EAAE,QAAQ,QAAQ;CACxB,SAAS,EAAE,QAAQ;CACpB,CAAC"}
1
+ {"version":3,"file":"code.js","names":[],"sources":["../../src/bmodel/code.ts"],"sourcesContent":["import type { BlockCodeFeatureFlags } from \"../flags\";\nimport { z } from \"zod\";\n\nexport const Code = z.object({\n type: z.literal(\"plain\"),\n content: z.string(),\n});\n\nexport type Code = z.infer<typeof Code>;\n\nexport type BlockCodeWithInfo = {\n readonly code: Code;\n readonly sdkVersion: string;\n readonly featureFlags: BlockCodeFeatureFlags | undefined;\n};\n"],"mappings":";;AAGA,MAAa,OAAO,EAAE,OAAO;CAC3B,MAAM,EAAE,QAAQ,OAAO;CACvB,SAAS,EAAE,OAAO;AACpB,CAAC"}
@@ -1,3 +1,6 @@
1
- require("./block_config.cjs");
2
- require("./code.cjs");
3
- require("./normalization.cjs");
1
+ const require_block_config = require("./block_config.cjs");
2
+ const require_code = require("./code.cjs");
3
+ const require_normalization = require("./normalization.cjs");
4
+ exports.Code = require_code.Code;
5
+ exports.extractCodeWithInfo = require_block_config.extractCodeWithInfo;
6
+ exports.extractConfigGeneric = require_normalization.extractConfigGeneric;
@@ -2,4 +2,5 @@ import { BlockCodeWithInfo, Code } from "./code.js";
2
2
  import { BlockRenderingMode } from "./types.js";
3
3
  import { BlockConfigGeneric, BlockConfigV3Generic, BlockConfigV4Generic, extractCodeWithInfo } from "./block_config.js";
4
4
  import { BlockConfigContainer } from "./container.js";
5
- import { extractConfigGeneric } from "./normalization.js";
5
+ import { extractConfigGeneric } from "./normalization.js";
6
+ export { BlockCodeWithInfo, BlockConfigContainer, BlockConfigGeneric, BlockConfigV3Generic, BlockConfigV4Generic, BlockRenderingMode, Code, extractCodeWithInfo, extractConfigGeneric };
@@ -1,3 +1,4 @@
1
- import "./block_config.js";
2
- import "./code.js";
3
- import "./normalization.js";
1
+ import { extractCodeWithInfo } from "./block_config.js";
2
+ import { Code } from "./code.js";
3
+ import { extractConfigGeneric } from "./normalization.js";
4
+ export { Code, extractCodeWithInfo, extractConfigGeneric };
@@ -87,7 +87,8 @@ function extractConfigGeneric(cfg) {
87
87
  };
88
88
  } else {
89
89
  const { sdkVersion } = cfg;
90
- throw new Error(`Config format not supported: SDK = ${sdkVersion}; Fields = ${Object.keys(cfg).join(", ")}`);
90
+ const fields = Object.keys(cfg);
91
+ throw new Error(`Config format not supported: SDK = ${sdkVersion}; Fields = ${fields.join(", ")}`);
91
92
  }
92
93
  }
93
94
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"normalization.cjs","names":[],"sources":["../../src/bmodel/normalization.ts"],"sourcesContent":["import type { BlockConfigGeneric } from \"./block_config\";\nimport type { BlockConfigContainer } from \"./container\";\n\nfunction upgradeCfgOrLambda(data: unknown): unknown;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined {\n if (data === undefined) return undefined;\n if (typeof data === \"string\") return { __renderLambda: true, handle: data, retentive: false };\n return data;\n}\n\n/**\n * Takes universal config, and converts it into latest config structure.\n *\n * **Important**: This operation is not meant to be executed recursively.\n * In no circumstance result of this function should be persisted!\n * */\nexport function extractConfigGeneric(cfg: BlockConfigContainer): BlockConfigGeneric {\n if (cfg.v4 !== undefined) {\n // version 4 (BlockModelV3) - inputsValid is derived from args() success/failure\n const {\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks = {},\n } = cfg.v4;\n const { code } = cfg;\n return {\n configVersion: 4,\n modelAPIVersion: 2,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks,\n code,\n };\n } else if (cfg.v3 !== undefined) {\n // version 3 (BlockModel v1)\n const {\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n } = cfg.v3;\n const { code } = cfg;\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n code,\n enrichmentTargets,\n };\n } else if (cfg.inputsValid !== undefined) {\n // version 2 (legacy) - normalize to v3 format\n const { sdkVersion, renderingMode, outputs, inputsValid, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n sdkVersion === undefined ||\n renderingMode === undefined ||\n outputs === undefined ||\n inputsValid === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v2. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion,\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(inputsValid),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else if (cfg.renderingMode !== undefined) {\n // version 1 (legacy) - normalize to v3 format\n const { sdkVersion, canRun, renderingMode, outputs, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n renderingMode === undefined ||\n outputs === undefined ||\n canRun === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v1. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion: sdkVersion ?? \"unknown\",\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(canRun),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else {\n const { sdkVersion } = cfg;\n const fields = Object.keys(cfg);\n throw new Error(\n `Config format not supported: SDK = ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n }\n}\n"],"mappings":";AAKA,SAAS,mBAAmB,MAAgD;AAC1E,KAAI,SAAS,KAAA,EAAW,QAAO,KAAA;AAC/B,KAAI,OAAO,SAAS,SAAU,QAAO;EAAE,gBAAgB;EAAM,QAAQ;EAAM,WAAW;EAAO;AAC7F,QAAO;;;;;;;;AAST,SAAgB,qBAAqB,KAA+C;AAClF,KAAI,IAAI,OAAO,KAAA,GAAW;EAExB,MAAM,EACJ,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,mBACA,0BAA0B,EAAE,KAC1B,IAAI;EACR,MAAM,EAAE,SAAS;AACjB,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;YACQ,IAAI,OAAO,KAAA,GAAW;EAE/B,MAAM,EACJ,aACA,gBACA,aACA,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,sBACE,IAAI;EACR,MAAM,EAAE,SAAS;AACjB,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;YACQ,IAAI,gBAAgB,KAAA,GAAW;EAExC,MAAM,EAAE,YAAY,eAAe,SAAS,aAAa,UAAU,aAAa,SAAS;EACzF,MAAM,SAAS,OAAO,KAAK,IAAI;AAC/B,MACE,eAAe,KAAA,KACf,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,gBAAgB,KAAA,KAChB,aAAa,KAAA,KACb,gBAAgB,KAAA,EAEhB,OAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,KAAK,GAC9E;AACH,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,MAAM,CAAC,CAAC,CAChF;GACD,aAAa,mBAAmB,YAAY;GAC5C,UAAU,mBAAmB,SAAS;GACtC,gBAAgB,KAAA;GAChB;GACD;YACQ,IAAI,kBAAkB,KAAA,GAAW;EAE1C,MAAM,EAAE,YAAY,QAAQ,eAAe,SAAS,UAAU,aAAa,SAAS;EACpF,MAAM,SAAS,OAAO,KAAK,IAAI;AAC/B,MACE,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,WAAW,KAAA,KACX,aAAa,KAAA,KACb,gBAAgB,KAAA,EAEhB,OAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,KAAK,GAC9E;AACH,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB,YAAY,cAAc;GAC1B;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,MAAM,CAAC,CAAC,CAChF;GACD,aAAa,mBAAmB,OAAO;GACvC,UAAU,mBAAmB,SAAS;GACtC,gBAAgB,KAAA;GAChB;GACD;QACI;EACL,MAAM,EAAE,eAAe;AAEvB,QAAM,IAAI,MACR,sCAAsC,WAAW,aAFpC,OAAO,KAAK,IAAI,CAEwC,KAAK,KAAK,GAChF"}
1
+ {"version":3,"file":"normalization.cjs","names":[],"sources":["../../src/bmodel/normalization.ts"],"sourcesContent":["import type { BlockConfigGeneric } from \"./block_config\";\nimport type { BlockConfigContainer } from \"./container\";\n\nfunction upgradeCfgOrLambda(data: unknown): unknown;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined {\n if (data === undefined) return undefined;\n if (typeof data === \"string\") return { __renderLambda: true, handle: data, retentive: false };\n return data;\n}\n\n/**\n * Takes universal config, and converts it into latest config structure.\n *\n * **Important**: This operation is not meant to be executed recursively.\n * In no circumstance result of this function should be persisted!\n * */\nexport function extractConfigGeneric(cfg: BlockConfigContainer): BlockConfigGeneric {\n if (cfg.v4 !== undefined) {\n // version 4 (BlockModelV3) - inputsValid is derived from args() success/failure\n const {\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks = {},\n } = cfg.v4;\n const { code } = cfg;\n return {\n configVersion: 4,\n modelAPIVersion: 2,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks,\n code,\n };\n } else if (cfg.v3 !== undefined) {\n // version 3 (BlockModel v1)\n const {\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n } = cfg.v3;\n const { code } = cfg;\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n code,\n enrichmentTargets,\n };\n } else if (cfg.inputsValid !== undefined) {\n // version 2 (legacy) - normalize to v3 format\n const { sdkVersion, renderingMode, outputs, inputsValid, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n sdkVersion === undefined ||\n renderingMode === undefined ||\n outputs === undefined ||\n inputsValid === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v2. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion,\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(inputsValid),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else if (cfg.renderingMode !== undefined) {\n // version 1 (legacy) - normalize to v3 format\n const { sdkVersion, canRun, renderingMode, outputs, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n renderingMode === undefined ||\n outputs === undefined ||\n canRun === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v1. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion: sdkVersion ?? \"unknown\",\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(canRun),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else {\n const { sdkVersion } = cfg;\n const fields = Object.keys(cfg);\n throw new Error(\n `Config format not supported: SDK = ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n }\n}\n"],"mappings":";AAKA,SAAS,mBAAmB,MAAgD;CAC1E,IAAI,SAAS,KAAA,GAAW,OAAO,KAAA;CAC/B,IAAI,OAAO,SAAS,UAAU,OAAO;EAAE,gBAAgB;EAAM,QAAQ;EAAM,WAAW;CAAM;CAC5F,OAAO;AACT;;;;;;;AAQA,SAAgB,qBAAqB,KAA+C;CAClF,IAAI,IAAI,OAAO,KAAA,GAAW;EAExB,MAAM,EACJ,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,mBACA,0BAA0B,CAAC,MACzB,IAAI;EACR,MAAM,EAAE,SAAS;EACjB,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,OAAO,IAAI,IAAI,OAAO,KAAA,GAAW;EAE/B,MAAM,EACJ,aACA,gBACA,aACA,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,sBACE,IAAI;EACR,MAAM,EAAE,SAAS;EACjB,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,OAAO,IAAI,IAAI,gBAAgB,KAAA,GAAW;EAExC,MAAM,EAAE,YAAY,eAAe,SAAS,aAAa,UAAU,aAAa,SAAS;EACzF,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,IACE,eAAe,KAAA,KACf,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,gBAAgB,KAAA,KAChB,aAAa,KAAA,KACb,gBAAgB,KAAA,GAEhB,MAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,IAAI,GAC9E;EACF,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,KAAK,CAAC,CAAC,CAChF;GACA,aAAa,mBAAmB,WAAW;GAC3C,UAAU,mBAAmB,QAAQ;GACrC,gBAAgB,KAAA;GAChB;EACF;CACF,OAAO,IAAI,IAAI,kBAAkB,KAAA,GAAW;EAE1C,MAAM,EAAE,YAAY,QAAQ,eAAe,SAAS,UAAU,aAAa,SAAS;EACpF,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,IACE,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,WAAW,KAAA,KACX,aAAa,KAAA,KACb,gBAAgB,KAAA,GAEhB,MAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,IAAI,GAC9E;EACF,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB,YAAY,cAAc;GAC1B;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,KAAK,CAAC,CAAC,CAChF;GACA,aAAa,mBAAmB,MAAM;GACtC,UAAU,mBAAmB,QAAQ;GACrC,gBAAgB,KAAA;GAChB;EACF;CACF,OAAO;EACL,MAAM,EAAE,eAAe;EACvB,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,MAAM,IAAI,MACR,sCAAsC,WAAW,aAAa,OAAO,KAAK,IAAI,GAChF;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalization.d.ts","names":[],"sources":["../../src/bmodel/normalization.ts"],"mappings":";;;;;;AAiBA;;;;iBAAgB,oBAAA,CAAqB,GAAA,EAAK,oBAAA,GAAuB,kBAAA"}
1
+ {"version":3,"file":"normalization.d.ts","names":[],"sources":["../../src/bmodel/normalization.ts"],"mappings":";;;;;;AAiBA;;;;iBAAgB,oBAAA,CAAqB,GAAA,EAAK,oBAAA,GAAuB,kBAAkB"}
@@ -87,7 +87,8 @@ function extractConfigGeneric(cfg) {
87
87
  };
88
88
  } else {
89
89
  const { sdkVersion } = cfg;
90
- throw new Error(`Config format not supported: SDK = ${sdkVersion}; Fields = ${Object.keys(cfg).join(", ")}`);
90
+ const fields = Object.keys(cfg);
91
+ throw new Error(`Config format not supported: SDK = ${sdkVersion}; Fields = ${fields.join(", ")}`);
91
92
  }
92
93
  }
93
94
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"normalization.js","names":[],"sources":["../../src/bmodel/normalization.ts"],"sourcesContent":["import type { BlockConfigGeneric } from \"./block_config\";\nimport type { BlockConfigContainer } from \"./container\";\n\nfunction upgradeCfgOrLambda(data: unknown): unknown;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined {\n if (data === undefined) return undefined;\n if (typeof data === \"string\") return { __renderLambda: true, handle: data, retentive: false };\n return data;\n}\n\n/**\n * Takes universal config, and converts it into latest config structure.\n *\n * **Important**: This operation is not meant to be executed recursively.\n * In no circumstance result of this function should be persisted!\n * */\nexport function extractConfigGeneric(cfg: BlockConfigContainer): BlockConfigGeneric {\n if (cfg.v4 !== undefined) {\n // version 4 (BlockModelV3) - inputsValid is derived from args() success/failure\n const {\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks = {},\n } = cfg.v4;\n const { code } = cfg;\n return {\n configVersion: 4,\n modelAPIVersion: 2,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks,\n code,\n };\n } else if (cfg.v3 !== undefined) {\n // version 3 (BlockModel v1)\n const {\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n } = cfg.v3;\n const { code } = cfg;\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n code,\n enrichmentTargets,\n };\n } else if (cfg.inputsValid !== undefined) {\n // version 2 (legacy) - normalize to v3 format\n const { sdkVersion, renderingMode, outputs, inputsValid, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n sdkVersion === undefined ||\n renderingMode === undefined ||\n outputs === undefined ||\n inputsValid === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v2. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion,\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(inputsValid),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else if (cfg.renderingMode !== undefined) {\n // version 1 (legacy) - normalize to v3 format\n const { sdkVersion, canRun, renderingMode, outputs, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n renderingMode === undefined ||\n outputs === undefined ||\n canRun === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v1. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion: sdkVersion ?? \"unknown\",\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(canRun),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else {\n const { sdkVersion } = cfg;\n const fields = Object.keys(cfg);\n throw new Error(\n `Config format not supported: SDK = ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n }\n}\n"],"mappings":";AAKA,SAAS,mBAAmB,MAAgD;AAC1E,KAAI,SAAS,KAAA,EAAW,QAAO,KAAA;AAC/B,KAAI,OAAO,SAAS,SAAU,QAAO;EAAE,gBAAgB;EAAM,QAAQ;EAAM,WAAW;EAAO;AAC7F,QAAO;;;;;;;;AAST,SAAgB,qBAAqB,KAA+C;AAClF,KAAI,IAAI,OAAO,KAAA,GAAW;EAExB,MAAM,EACJ,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,mBACA,0BAA0B,EAAE,KAC1B,IAAI;EACR,MAAM,EAAE,SAAS;AACjB,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;YACQ,IAAI,OAAO,KAAA,GAAW;EAE/B,MAAM,EACJ,aACA,gBACA,aACA,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,sBACE,IAAI;EACR,MAAM,EAAE,SAAS;AACjB,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;YACQ,IAAI,gBAAgB,KAAA,GAAW;EAExC,MAAM,EAAE,YAAY,eAAe,SAAS,aAAa,UAAU,aAAa,SAAS;EACzF,MAAM,SAAS,OAAO,KAAK,IAAI;AAC/B,MACE,eAAe,KAAA,KACf,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,gBAAgB,KAAA,KAChB,aAAa,KAAA,KACb,gBAAgB,KAAA,EAEhB,OAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,KAAK,GAC9E;AACH,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,MAAM,CAAC,CAAC,CAChF;GACD,aAAa,mBAAmB,YAAY;GAC5C,UAAU,mBAAmB,SAAS;GACtC,gBAAgB,KAAA;GAChB;GACD;YACQ,IAAI,kBAAkB,KAAA,GAAW;EAE1C,MAAM,EAAE,YAAY,QAAQ,eAAe,SAAS,UAAU,aAAa,SAAS;EACpF,MAAM,SAAS,OAAO,KAAK,IAAI;AAC/B,MACE,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,WAAW,KAAA,KACX,aAAa,KAAA,KACb,gBAAgB,KAAA,EAEhB,OAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,KAAK,GAC9E;AACH,SAAO;GACL,eAAe;GACf,iBAAiB;GACjB,YAAY,cAAc;GAC1B;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,MAAM,CAAC,CAAC,CAChF;GACD,aAAa,mBAAmB,OAAO;GACvC,UAAU,mBAAmB,SAAS;GACtC,gBAAgB,KAAA;GAChB;GACD;QACI;EACL,MAAM,EAAE,eAAe;AAEvB,QAAM,IAAI,MACR,sCAAsC,WAAW,aAFpC,OAAO,KAAK,IAAI,CAEwC,KAAK,KAAK,GAChF"}
1
+ {"version":3,"file":"normalization.js","names":[],"sources":["../../src/bmodel/normalization.ts"],"sourcesContent":["import type { BlockConfigGeneric } from \"./block_config\";\nimport type { BlockConfigContainer } from \"./container\";\n\nfunction upgradeCfgOrLambda(data: unknown): unknown;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined;\nfunction upgradeCfgOrLambda(data: unknown | undefined): unknown | undefined {\n if (data === undefined) return undefined;\n if (typeof data === \"string\") return { __renderLambda: true, handle: data, retentive: false };\n return data;\n}\n\n/**\n * Takes universal config, and converts it into latest config structure.\n *\n * **Important**: This operation is not meant to be executed recursively.\n * In no circumstance result of this function should be persisted!\n * */\nexport function extractConfigGeneric(cfg: BlockConfigContainer): BlockConfigGeneric {\n if (cfg.v4 !== undefined) {\n // version 4 (BlockModelV3) - inputsValid is derived from args() success/failure\n const {\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks = {},\n } = cfg.v4;\n const { code } = cfg;\n return {\n configVersion: 4,\n modelAPIVersion: 2,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n blockLifecycleCallbacks,\n code,\n };\n } else if (cfg.v3 !== undefined) {\n // version 3 (BlockModel v1)\n const {\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n enrichmentTargets,\n } = cfg.v3;\n const { code } = cfg;\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n initialArgs,\n initialUiState,\n inputsValid,\n outputs,\n renderingMode,\n sdkVersion,\n featureFlags,\n sections,\n title,\n subtitle,\n tags,\n code,\n enrichmentTargets,\n };\n } else if (cfg.inputsValid !== undefined) {\n // version 2 (legacy) - normalize to v3 format\n const { sdkVersion, renderingMode, outputs, inputsValid, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n sdkVersion === undefined ||\n renderingMode === undefined ||\n outputs === undefined ||\n inputsValid === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v2. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion,\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(inputsValid),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else if (cfg.renderingMode !== undefined) {\n // version 1 (legacy) - normalize to v3 format\n const { sdkVersion, canRun, renderingMode, outputs, sections, initialArgs, code } = cfg;\n const fields = Object.keys(cfg);\n if (\n renderingMode === undefined ||\n outputs === undefined ||\n canRun === undefined ||\n sections === undefined ||\n initialArgs === undefined\n )\n throw new Error(\n `Malformed config v1. SDK version ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n return {\n configVersion: 3,\n modelAPIVersion: 1,\n sdkVersion: sdkVersion ?? \"unknown\",\n renderingMode,\n initialArgs,\n outputs: Object.fromEntries(\n Object.entries(outputs).map(([key, value]) => [key, upgradeCfgOrLambda(value)]),\n ),\n inputsValid: upgradeCfgOrLambda(canRun),\n sections: upgradeCfgOrLambda(sections),\n initialUiState: undefined,\n code,\n };\n } else {\n const { sdkVersion } = cfg;\n const fields = Object.keys(cfg);\n throw new Error(\n `Config format not supported: SDK = ${sdkVersion}; Fields = ${fields.join(\", \")}`,\n );\n }\n}\n"],"mappings":";AAKA,SAAS,mBAAmB,MAAgD;CAC1E,IAAI,SAAS,KAAA,GAAW,OAAO,KAAA;CAC/B,IAAI,OAAO,SAAS,UAAU,OAAO;EAAE,gBAAgB;EAAM,QAAQ;EAAM,WAAW;CAAM;CAC5F,OAAO;AACT;;;;;;;AAQA,SAAgB,qBAAqB,KAA+C;CAClF,IAAI,IAAI,OAAO,KAAA,GAAW;EAExB,MAAM,EACJ,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,mBACA,0BAA0B,CAAC,MACzB,IAAI;EACR,MAAM,EAAE,SAAS;EACjB,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,OAAO,IAAI,IAAI,OAAO,KAAA,GAAW;EAE/B,MAAM,EACJ,aACA,gBACA,aACA,SACA,eACA,YACA,cACA,UACA,OACA,UACA,MACA,sBACE,IAAI;EACR,MAAM,EAAE,SAAS;EACjB,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,OAAO,IAAI,IAAI,gBAAgB,KAAA,GAAW;EAExC,MAAM,EAAE,YAAY,eAAe,SAAS,aAAa,UAAU,aAAa,SAAS;EACzF,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,IACE,eAAe,KAAA,KACf,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,gBAAgB,KAAA,KAChB,aAAa,KAAA,KACb,gBAAgB,KAAA,GAEhB,MAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,IAAI,GAC9E;EACF,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB;GACA;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,KAAK,CAAC,CAAC,CAChF;GACA,aAAa,mBAAmB,WAAW;GAC3C,UAAU,mBAAmB,QAAQ;GACrC,gBAAgB,KAAA;GAChB;EACF;CACF,OAAO,IAAI,IAAI,kBAAkB,KAAA,GAAW;EAE1C,MAAM,EAAE,YAAY,QAAQ,eAAe,SAAS,UAAU,aAAa,SAAS;EACpF,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,IACE,kBAAkB,KAAA,KAClB,YAAY,KAAA,KACZ,WAAW,KAAA,KACX,aAAa,KAAA,KACb,gBAAgB,KAAA,GAEhB,MAAM,IAAI,MACR,oCAAoC,WAAW,aAAa,OAAO,KAAK,IAAI,GAC9E;EACF,OAAO;GACL,eAAe;GACf,iBAAiB;GACjB,YAAY,cAAc;GAC1B;GACA;GACA,SAAS,OAAO,YACd,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,mBAAmB,KAAK,CAAC,CAAC,CAChF;GACA,aAAa,mBAAmB,MAAM;GACtC,UAAU,mBAAmB,QAAQ;GACrC,gBAAgB,KAAA;GAChB;EACF;CACF,OAAO;EACL,MAAM,EAAE,eAAe;EACvB,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,MAAM,IAAI,MACR,sCAAsC,WAAW,aAAa,OAAO,KAAK,IAAI,GAChF;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"branding.d.ts","names":[],"sources":["../src/branding.ts"],"mappings":";KAAK,KAAA,yDAA8D,CAAA,GAAI,CAAA;AAAA,KAE3D,OAAA,kDAAyD,CAAA,GAAI,KAAA,CAAM,CAAA,EAAG,CAAA"}
1
+ {"version":3,"file":"branding.d.ts","names":[],"sources":["../src/branding.ts"],"mappings":";KAAK,KAAA,yDAA8D,CAAA,GAAI,CAAC;AAAA,KAE5D,OAAA,kDAAyD,CAAA,GAAI,KAAA,CAAM,CAAA,EAAG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"common_types.d.ts","names":[],"sources":["../src/common_types.ts"],"mappings":";;;;KAGY,WAAA,OAAkB,IAAA;AAAA,KAElB,gBAAA;EACN,EAAA;EAAU,KAAA,EAAO,CAAA;EAAG,MAAA;AAAA;EACpB,EAAA;EAAW,MAAA,EAAQ,SAAA;EAAa,UAAA;AAAA;;KAG1B,gBAAA,GAAmB,MAAA,SAAe,gBAAA;AAAA,KAElC,cAAA;EACV,KAAA;EACA,WAAA;EACA,KAAA,EAAO,CAAA;EACP,KAAA;AAAA"}
1
+ {"version":3,"file":"common_types.d.ts","names":[],"sources":["../src/common_types.ts"],"mappings":";;;;KAGY,WAAA,OAAkB,IAAI;AAAA,KAEtB,gBAAA;EACN,EAAA;EAAU,KAAA,EAAO,CAAA;EAAG,MAAA;AAAA;EACpB,EAAA;EAAW,MAAA,EAAQ,SAAS;EAAI,UAAA;AAAA;;KAG1B,gBAAA,GAAmB,MAAM,SAAS,gBAAA;AAAA,KAElC,cAAA;EACV,KAAA;EACA,WAAA;EACA,KAAA,EAAO,CAAC;EACR,KAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/dialog/index.ts"],"mappings":";;AAIA;;;UAAiB,UAAA;EACf,IAAA;EACA,UAAA;AAAA;;;;;;UAQe,qBAAA;EACf,eAAA;EACA,OAAA,GAAU,UAAA;EACV,KAAA;AAAA;;UAIe,oBAAA;EACf,QAAA;EACA,IAAA;AAAA;;;;;UAOe,aAAA;EACf,cAAA,CAAe,OAAA,EAAS,qBAAA,GAAwB,OAAA,CAAQ,oBAAA;AAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/dialog/index.ts"],"mappings":";;AAIA;;;UAAiB,UAAA;EACf,IAAA;EACA,UAAU;AAAA;;;;;;UAQK,qBAAA;EACf,eAAA;EACA,OAAA,GAAU,UAAU;EACpB,KAAA;AAAA;;UAIe,oBAAA;EACf,QAAA;EACA,IAAI;AAAA;;;;;UAOW,aAAA;EACf,cAAA,CAAe,OAAA,EAAS,qBAAA,GAAwB,OAAA,CAAQ,oBAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChunkedStreamReader.cjs","names":[],"sources":["../../src/drivers/ChunkedStreamReader.ts"],"sourcesContent":["import type { RangeBytes } from \"./blob\";\n\n/**\n * Status returned by onError handler to indicate what action to take\n * - 'continue': Retry the failed operation\n * - 'error': Error the stream (calls controller.error, aborts ongoing fetches)\n * - 'cancel': Cancel the stream gracefully (calls controller.close, aborts ongoing fetches)\n */\nexport type ErrorHandlerStatus = \"continue\" | \"error\" | \"cancel\";\n\n/**\n * Options for creating a ChunkedStreamReader\n */\nexport interface ChunkedStreamReaderOptions {\n /**\n * Function to fetch a chunk of data. Optionally accepts an AbortSignal to cancel the fetch.\n */\n fetchChunk: (range: RangeBytes, signal?: AbortSignal) => Promise<Uint8Array>;\n\n /**\n * Total size of the blob in bytes\n */\n totalSize: number;\n\n /**\n * Size of each chunk to read in bytes (default: 16MB)\n */\n chunkSize?: number;\n\n /**\n * Error handler callback. Called when an error occurs during chunk fetching.\n * Should return:\n * - 'continue' to retry the operation\n * - 'error' to error the stream (will call controller.error and abort ongoing fetches)\n * - 'cancel' to cancel gracefully (will call controller.close and abort ongoing fetches)\n * Default behavior: returns 'error'.\n */\n onError?: (error: unknown) => Promise<ErrorHandlerStatus>;\n}\n\n/**\n * ChunkedStreamReader creates a ReadableStream that reads data from a blob driver\n * in fixed-size chunks. This is useful for streaming large files without loading\n * them entirely into memory.\n */\nexport class ChunkedStreamReader {\n private currentPosition: number = 0;\n private _read = true;\n private _canceled = false;\n private _errored = false;\n private abortController: AbortController | null = null;\n private readonly options: Required<ChunkedStreamReaderOptions>;\n\n /**\n * Creates a new ChunkedStreamReader instance.\n * Use the static `create` method instead.\n */\n private constructor(options: ChunkedStreamReaderOptions) {\n // Normalize options with defaults\n this.options = {\n ...options,\n chunkSize: options.chunkSize ?? 16 * 1024 * 1024,\n onError:\n options.onError ??\n (async () => {\n // Default behavior: error (will automatically call controller.error)\n return \"error\";\n }),\n };\n\n if (this.totalSize < 0) {\n throw new Error(\"Total size must be non-negative\");\n }\n if (this.chunkSize <= 0) {\n throw new Error(\"Chunk size must be positive\");\n }\n }\n\n /**\n * Gets the fetchChunk function from options\n */\n private get fetchChunk() {\n return this.options.fetchChunk;\n }\n\n /**\n * Gets the total size from options\n */\n private get totalSize() {\n return this.options.totalSize;\n }\n\n /**\n * Gets the chunk size from options\n */\n private get chunkSize() {\n return this.options.chunkSize;\n }\n\n /**\n * Gets the onError callback from options\n */\n private get onError() {\n return this.options.onError;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n *\n * @param options - Configuration options for the chunked stream reader\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n *\n * @example\n * ```typescript\n * const stream = ChunkedStreamReader.create({\n * fetchChunk: async (range, signal) => {\n * const response = await fetch(`/api/data?from=${range.from}&to=${range.to}`, { signal });\n * return new Uint8Array(await response.arrayBuffer());\n * },\n * totalSize: 1024 * 1024, // 1MB\n * chunkSize: 64 * 1024, // 64KB chunks\n * });\n * ```\n */\n static create(options: ChunkedStreamReaderOptions): ReadableStream<Uint8Array> {\n const reader = new ChunkedStreamReader(options);\n return reader.createStream();\n }\n\n private readStart() {\n this._read = true;\n }\n\n private readStop() {\n this._read = false;\n }\n\n private async tryRead(controller: ReadableStreamDefaultController<Uint8Array>): Promise<boolean> {\n if (this._canceled) {\n return true;\n }\n\n // Check if we've read all data\n if (this.isComplete()) {\n controller.close();\n return true;\n }\n\n try {\n // Calculate the end position for this chunk\n // Ensure we don't read beyond the total size\n const endPosition = Math.min(this.currentPosition + this.chunkSize, this.totalSize);\n\n // Fetch the chunk from the blob driver, passing the abort signal if available\n const data = await this.fetchChunk(\n { from: this.currentPosition, to: endPosition },\n this.abortController?.signal,\n );\n\n // Check if stream was cancelled during the fetch\n if (this._canceled) {\n return true;\n }\n\n // Enqueue the data into the stream\n controller.enqueue(data);\n\n // Update the current position for the next chunk\n this.currentPosition = endPosition;\n\n if (!controller.desiredSize || controller.desiredSize <= 0) {\n // The internal queue is full, so propagate\n // the backpressure signal to the underlying source.\n this.readStop();\n }\n } catch (error) {\n // If any error occurs during chunk reading, call the error handler\n const status = await this.onError(error);\n\n if (status === \"error\") {\n this._errored = true;\n // Error the stream and abort any ongoing fetch operations\n controller.error(error);\n this.abortController?.abort(\"Stream errored\");\n return true; // Stop reading\n }\n\n if (status === \"cancel\") {\n this._canceled = true;\n // Close the stream gracefully and abort any ongoing fetch operations\n controller.close();\n this.abortController?.abort(\"Stream cancelled\");\n console.debug(\"ChunkedStreamReader cancelled due to error\");\n return true; // Stop reading\n }\n }\n\n return false;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n * The stream will automatically close when all data has been read.\n *\n * @private - Use the static `create` method instead\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n */\n private createStream(): ReadableStream<Uint8Array> {\n // Create an AbortController for this stream\n this.abortController = new AbortController();\n\n return new ReadableStream({\n start: async (controller) => {\n while (true) {\n if (this._canceled || this._errored) {\n return;\n }\n\n if (!this._read) {\n await new Promise((r) => setTimeout(r, 0));\n if (controller.desiredSize) {\n this.readStart();\n }\n } else {\n const isDone = await this.tryRead(controller);\n if (isDone) {\n return;\n }\n }\n }\n },\n\n pull: () => {\n this.readStart();\n },\n\n cancel: (reason) => {\n this._canceled = true;\n // Abort any ongoing fetch operations\n this.abortController?.abort(reason);\n console.debug(\"ChunkedStreamReader cancelled:\", reason);\n },\n });\n }\n\n /**\n * Gets the current reading position in bytes.\n *\n * @returns Current position as number of bytes read\n */\n getCurrentPosition(): number {\n return this.currentPosition;\n }\n\n /**\n * Gets the remaining bytes to be read.\n *\n * @returns Number of bytes remaining\n */\n getRemainingBytes(): number {\n return Math.max(0, this.totalSize - this.currentPosition);\n }\n\n /**\n * Checks if the entire blob has been read.\n *\n * @returns True if all data has been read\n */\n isComplete(): boolean {\n return this.currentPosition >= this.totalSize;\n }\n}\n"],"mappings":";;;;;;AA6CA,IAAa,sBAAb,MAAa,oBAAoB;CAC/B,kBAAkC;CAClC,QAAgB;CAChB,YAAoB;CACpB,WAAmB;CACnB,kBAAkD;CAClD;;;;;CAMA,YAAoB,SAAqC;AAEvD,OAAK,UAAU;GACb,GAAG;GACH,WAAW,QAAQ,aAAa,KAAK,OAAO;GAC5C,SACE,QAAQ,YACP,YAAY;AAEX,WAAO;;GAEZ;AAED,MAAI,KAAK,YAAY,EACnB,OAAM,IAAI,MAAM,kCAAkC;AAEpD,MAAI,KAAK,aAAa,EACpB,OAAM,IAAI,MAAM,8BAA8B;;;;;CAOlD,IAAY,aAAa;AACvB,SAAO,KAAK,QAAQ;;;;;CAMtB,IAAY,YAAY;AACtB,SAAO,KAAK,QAAQ;;;;;CAMtB,IAAY,YAAY;AACtB,SAAO,KAAK,QAAQ;;;;;CAMtB,IAAY,UAAU;AACpB,SAAO,KAAK,QAAQ;;;;;;;;;;;;;;;;;;;;CAqBtB,OAAO,OAAO,SAAiE;AAE7E,SADe,IAAI,oBAAoB,QAAQ,CACjC,cAAc;;CAG9B,YAAoB;AAClB,OAAK,QAAQ;;CAGf,WAAmB;AACjB,OAAK,QAAQ;;CAGf,MAAc,QAAQ,YAA2E;AAC/F,MAAI,KAAK,UACP,QAAO;AAIT,MAAI,KAAK,YAAY,EAAE;AACrB,cAAW,OAAO;AAClB,UAAO;;AAGT,MAAI;GAGF,MAAM,cAAc,KAAK,IAAI,KAAK,kBAAkB,KAAK,WAAW,KAAK,UAAU;GAGnF,MAAM,OAAO,MAAM,KAAK,WACtB;IAAE,MAAM,KAAK;IAAiB,IAAI;IAAa,EAC/C,KAAK,iBAAiB,OACvB;AAGD,OAAI,KAAK,UACP,QAAO;AAIT,cAAW,QAAQ,KAAK;AAGxB,QAAK,kBAAkB;AAEvB,OAAI,CAAC,WAAW,eAAe,WAAW,eAAe,EAGvD,MAAK,UAAU;WAEV,OAAO;GAEd,MAAM,SAAS,MAAM,KAAK,QAAQ,MAAM;AAExC,OAAI,WAAW,SAAS;AACtB,SAAK,WAAW;AAEhB,eAAW,MAAM,MAAM;AACvB,SAAK,iBAAiB,MAAM,iBAAiB;AAC7C,WAAO;;AAGT,OAAI,WAAW,UAAU;AACvB,SAAK,YAAY;AAEjB,eAAW,OAAO;AAClB,SAAK,iBAAiB,MAAM,mBAAmB;AAC/C,YAAQ,MAAM,6CAA6C;AAC3D,WAAO;;;AAIX,SAAO;;;;;;;;;CAUT,eAAmD;AAEjD,OAAK,kBAAkB,IAAI,iBAAiB;AAE5C,SAAO,IAAI,eAAe;GACxB,OAAO,OAAO,eAAe;AAC3B,WAAO,MAAM;AACX,SAAI,KAAK,aAAa,KAAK,SACzB;AAGF,SAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI,SAAS,MAAM,WAAW,GAAG,EAAE,CAAC;AAC1C,UAAI,WAAW,YACb,MAAK,WAAW;gBAGH,MAAM,KAAK,QAAQ,WAAW,CAE3C;;;GAMR,YAAY;AACV,SAAK,WAAW;;GAGlB,SAAS,WAAW;AAClB,SAAK,YAAY;AAEjB,SAAK,iBAAiB,MAAM,OAAO;AACnC,YAAQ,MAAM,kCAAkC,OAAO;;GAE1D,CAAC;;;;;;;CAQJ,qBAA6B;AAC3B,SAAO,KAAK;;;;;;;CAQd,oBAA4B;AAC1B,SAAO,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,gBAAgB;;;;;;;CAQ3D,aAAsB;AACpB,SAAO,KAAK,mBAAmB,KAAK"}
1
+ {"version":3,"file":"ChunkedStreamReader.cjs","names":[],"sources":["../../src/drivers/ChunkedStreamReader.ts"],"sourcesContent":["import type { RangeBytes } from \"./blob\";\n\n/**\n * Status returned by onError handler to indicate what action to take\n * - 'continue': Retry the failed operation\n * - 'error': Error the stream (calls controller.error, aborts ongoing fetches)\n * - 'cancel': Cancel the stream gracefully (calls controller.close, aborts ongoing fetches)\n */\nexport type ErrorHandlerStatus = \"continue\" | \"error\" | \"cancel\";\n\n/**\n * Options for creating a ChunkedStreamReader\n */\nexport interface ChunkedStreamReaderOptions {\n /**\n * Function to fetch a chunk of data. Optionally accepts an AbortSignal to cancel the fetch.\n */\n fetchChunk: (range: RangeBytes, signal?: AbortSignal) => Promise<Uint8Array>;\n\n /**\n * Total size of the blob in bytes\n */\n totalSize: number;\n\n /**\n * Size of each chunk to read in bytes (default: 16MB)\n */\n chunkSize?: number;\n\n /**\n * Error handler callback. Called when an error occurs during chunk fetching.\n * Should return:\n * - 'continue' to retry the operation\n * - 'error' to error the stream (will call controller.error and abort ongoing fetches)\n * - 'cancel' to cancel gracefully (will call controller.close and abort ongoing fetches)\n * Default behavior: returns 'error'.\n */\n onError?: (error: unknown) => Promise<ErrorHandlerStatus>;\n}\n\n/**\n * ChunkedStreamReader creates a ReadableStream that reads data from a blob driver\n * in fixed-size chunks. This is useful for streaming large files without loading\n * them entirely into memory.\n */\nexport class ChunkedStreamReader {\n private currentPosition: number = 0;\n private _read = true;\n private _canceled = false;\n private _errored = false;\n private abortController: AbortController | null = null;\n private readonly options: Required<ChunkedStreamReaderOptions>;\n\n /**\n * Creates a new ChunkedStreamReader instance.\n * Use the static `create` method instead.\n */\n private constructor(options: ChunkedStreamReaderOptions) {\n // Normalize options with defaults\n this.options = {\n ...options,\n chunkSize: options.chunkSize ?? 16 * 1024 * 1024,\n onError:\n options.onError ??\n (async () => {\n // Default behavior: error (will automatically call controller.error)\n return \"error\";\n }),\n };\n\n if (this.totalSize < 0) {\n throw new Error(\"Total size must be non-negative\");\n }\n if (this.chunkSize <= 0) {\n throw new Error(\"Chunk size must be positive\");\n }\n }\n\n /**\n * Gets the fetchChunk function from options\n */\n private get fetchChunk() {\n return this.options.fetchChunk;\n }\n\n /**\n * Gets the total size from options\n */\n private get totalSize() {\n return this.options.totalSize;\n }\n\n /**\n * Gets the chunk size from options\n */\n private get chunkSize() {\n return this.options.chunkSize;\n }\n\n /**\n * Gets the onError callback from options\n */\n private get onError() {\n return this.options.onError;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n *\n * @param options - Configuration options for the chunked stream reader\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n *\n * @example\n * ```typescript\n * const stream = ChunkedStreamReader.create({\n * fetchChunk: async (range, signal) => {\n * const response = await fetch(`/api/data?from=${range.from}&to=${range.to}`, { signal });\n * return new Uint8Array(await response.arrayBuffer());\n * },\n * totalSize: 1024 * 1024, // 1MB\n * chunkSize: 64 * 1024, // 64KB chunks\n * });\n * ```\n */\n static create(options: ChunkedStreamReaderOptions): ReadableStream<Uint8Array> {\n const reader = new ChunkedStreamReader(options);\n return reader.createStream();\n }\n\n private readStart() {\n this._read = true;\n }\n\n private readStop() {\n this._read = false;\n }\n\n private async tryRead(controller: ReadableStreamDefaultController<Uint8Array>): Promise<boolean> {\n if (this._canceled) {\n return true;\n }\n\n // Check if we've read all data\n if (this.isComplete()) {\n controller.close();\n return true;\n }\n\n try {\n // Calculate the end position for this chunk\n // Ensure we don't read beyond the total size\n const endPosition = Math.min(this.currentPosition + this.chunkSize, this.totalSize);\n\n // Fetch the chunk from the blob driver, passing the abort signal if available\n const data = await this.fetchChunk(\n { from: this.currentPosition, to: endPosition },\n this.abortController?.signal,\n );\n\n // Check if stream was cancelled during the fetch\n if (this._canceled) {\n return true;\n }\n\n // Enqueue the data into the stream\n controller.enqueue(data);\n\n // Update the current position for the next chunk\n this.currentPosition = endPosition;\n\n if (!controller.desiredSize || controller.desiredSize <= 0) {\n // The internal queue is full, so propagate\n // the backpressure signal to the underlying source.\n this.readStop();\n }\n } catch (error) {\n // If any error occurs during chunk reading, call the error handler\n const status = await this.onError(error);\n\n if (status === \"error\") {\n this._errored = true;\n // Error the stream and abort any ongoing fetch operations\n controller.error(error);\n this.abortController?.abort(\"Stream errored\");\n return true; // Stop reading\n }\n\n if (status === \"cancel\") {\n this._canceled = true;\n // Close the stream gracefully and abort any ongoing fetch operations\n controller.close();\n this.abortController?.abort(\"Stream cancelled\");\n console.debug(\"ChunkedStreamReader cancelled due to error\");\n return true; // Stop reading\n }\n }\n\n return false;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n * The stream will automatically close when all data has been read.\n *\n * @private - Use the static `create` method instead\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n */\n private createStream(): ReadableStream<Uint8Array> {\n // Create an AbortController for this stream\n this.abortController = new AbortController();\n\n return new ReadableStream({\n start: async (controller) => {\n while (true) {\n if (this._canceled || this._errored) {\n return;\n }\n\n if (!this._read) {\n await new Promise((r) => setTimeout(r, 0));\n if (controller.desiredSize) {\n this.readStart();\n }\n } else {\n const isDone = await this.tryRead(controller);\n if (isDone) {\n return;\n }\n }\n }\n },\n\n pull: () => {\n this.readStart();\n },\n\n cancel: (reason) => {\n this._canceled = true;\n // Abort any ongoing fetch operations\n this.abortController?.abort(reason);\n console.debug(\"ChunkedStreamReader cancelled:\", reason);\n },\n });\n }\n\n /**\n * Gets the current reading position in bytes.\n *\n * @returns Current position as number of bytes read\n */\n getCurrentPosition(): number {\n return this.currentPosition;\n }\n\n /**\n * Gets the remaining bytes to be read.\n *\n * @returns Number of bytes remaining\n */\n getRemainingBytes(): number {\n return Math.max(0, this.totalSize - this.currentPosition);\n }\n\n /**\n * Checks if the entire blob has been read.\n *\n * @returns True if all data has been read\n */\n isComplete(): boolean {\n return this.currentPosition >= this.totalSize;\n }\n}\n"],"mappings":";;;;;;AA6CA,IAAa,sBAAb,MAAa,oBAAoB;CAC/B,kBAAkC;CAClC,QAAgB;CAChB,YAAoB;CACpB,WAAmB;CACnB,kBAAkD;CAClD;;;;;CAMA,YAAoB,SAAqC;EAEvD,KAAK,UAAU;GACb,GAAG;GACH,WAAW,QAAQ,aAAa,KAAK,OAAO;GAC5C,SACE,QAAQ,YACP,YAAY;IAEX,OAAO;GACT;EACJ;EAEA,IAAI,KAAK,YAAY,GACnB,MAAM,IAAI,MAAM,iCAAiC;EAEnD,IAAI,KAAK,aAAa,GACpB,MAAM,IAAI,MAAM,6BAA6B;CAEjD;;;;CAKA,IAAY,aAAa;EACvB,OAAO,KAAK,QAAQ;CACtB;;;;CAKA,IAAY,YAAY;EACtB,OAAO,KAAK,QAAQ;CACtB;;;;CAKA,IAAY,YAAY;EACtB,OAAO,KAAK,QAAQ;CACtB;;;;CAKA,IAAY,UAAU;EACpB,OAAO,KAAK,QAAQ;CACtB;;;;;;;;;;;;;;;;;;;CAoBA,OAAO,OAAO,SAAiE;EAE7E,OAAO,IADY,oBAAoB,OAC3B,CAAC,CAAC,aAAa;CAC7B;CAEA,YAAoB;EAClB,KAAK,QAAQ;CACf;CAEA,WAAmB;EACjB,KAAK,QAAQ;CACf;CAEA,MAAc,QAAQ,YAA2E;EAC/F,IAAI,KAAK,WACP,OAAO;EAIT,IAAI,KAAK,WAAW,GAAG;GACrB,WAAW,MAAM;GACjB,OAAO;EACT;EAEA,IAAI;GAGF,MAAM,cAAc,KAAK,IAAI,KAAK,kBAAkB,KAAK,WAAW,KAAK,SAAS;GAGlF,MAAM,OAAO,MAAM,KAAK,WACtB;IAAE,MAAM,KAAK;IAAiB,IAAI;GAAY,GAC9C,KAAK,iBAAiB,MACxB;GAGA,IAAI,KAAK,WACP,OAAO;GAIT,WAAW,QAAQ,IAAI;GAGvB,KAAK,kBAAkB;GAEvB,IAAI,CAAC,WAAW,eAAe,WAAW,eAAe,GAGvD,KAAK,SAAS;EAElB,SAAS,OAAO;GAEd,MAAM,SAAS,MAAM,KAAK,QAAQ,KAAK;GAEvC,IAAI,WAAW,SAAS;IACtB,KAAK,WAAW;IAEhB,WAAW,MAAM,KAAK;IACtB,KAAK,iBAAiB,MAAM,gBAAgB;IAC5C,OAAO;GACT;GAEA,IAAI,WAAW,UAAU;IACvB,KAAK,YAAY;IAEjB,WAAW,MAAM;IACjB,KAAK,iBAAiB,MAAM,kBAAkB;IAC9C,QAAQ,MAAM,4CAA4C;IAC1D,OAAO;GACT;EACF;EAEA,OAAO;CACT;;;;;;;;CASA,eAAmD;EAEjD,KAAK,kBAAkB,IAAI,gBAAgB;EAE3C,OAAO,IAAI,eAAe;GACxB,OAAO,OAAO,eAAe;IAC3B,OAAO,MAAM;KACX,IAAI,KAAK,aAAa,KAAK,UACzB;KAGF,IAAI,CAAC,KAAK,OAAO;MACf,MAAM,IAAI,SAAS,MAAM,WAAW,GAAG,CAAC,CAAC;MACzC,IAAI,WAAW,aACb,KAAK,UAAU;KAEnB,OAEE,IAAI,MADiB,KAAK,QAAQ,UAAU,GAE1C;IAGN;GACF;GAEA,YAAY;IACV,KAAK,UAAU;GACjB;GAEA,SAAS,WAAW;IAClB,KAAK,YAAY;IAEjB,KAAK,iBAAiB,MAAM,MAAM;IAClC,QAAQ,MAAM,kCAAkC,MAAM;GACxD;EACF,CAAC;CACH;;;;;;CAOA,qBAA6B;EAC3B,OAAO,KAAK;CACd;;;;;;CAOA,oBAA4B;EAC1B,OAAO,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,eAAe;CAC1D;;;;;;CAOA,aAAsB;EACpB,OAAO,KAAK,mBAAmB,KAAK;CACtC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChunkedStreamReader.d.ts","names":[],"sources":["../../src/drivers/ChunkedStreamReader.ts"],"mappings":";;;;;AAQA;;;;KAAY,kBAAA;AAKZ;;;AAAA,UAAiB,0BAAA;EAI0B;;;EAAzC,UAAA,GAAa,KAAA,EAAO,UAAA,EAAY,MAAA,GAAS,WAAA,KAAgB,OAAA,CAAQ,UAAA;EAoBnC;;;EAf9B,SAAA;EALoB;;;EAUpB,SAAA;EAVyD;;;;;;;;EAoBzD,OAAA,IAAW,KAAA,cAAmB,OAAA,CAAQ,kBAAA;AAAA;AAQxC;;;;;AAAA,cAAa,mBAAA;EAAA,QACH,eAAA;EAAA,QACA,KAAA;EAAA,QACA,SAAA;EAAA,QACA,QAAA;EAAA,QACA,eAAA;EAAA,iBACS,OAAA;EADT;;;;EAAA,QAOD,WAAA,CAAA;EAsCK;;;EAAA,YAdA,UAAA,CAAA;EA2CE;;;EAAA,YApCF,SAAA,CAAA;EA6CJ;;;EAAA,YAtCI,SAAA,CAAA;EAoKZ;;;EAAA,YA7JY,OAAA,CAAA;;;;;;;;;;;;;;;;;;;SAsBL,MAAA,CAAO,OAAA,EAAS,0BAAA,GAA6B,cAAA,CAAe,UAAA;EAAA,QAK3D,SAAA;EAAA,QAIA,QAAA;EAAA,QAIM,OAAA;;;;;;;;UAsEN,YAAA;;;;;;EA2CR,kBAAA,CAAA;;;;;;EASA,iBAAA,CAAA;;;;;;EASA,UAAA,CAAA;AAAA"}
1
+ {"version":3,"file":"ChunkedStreamReader.d.ts","names":[],"sources":["../../src/drivers/ChunkedStreamReader.ts"],"mappings":";;;;;AAQA;;;;KAAY,kBAAA;AAKZ;;;AAAA,UAAiB,0BAAA;EAI0B;;;EAAzC,UAAA,GAAa,KAAA,EAAO,UAAA,EAAY,MAAA,GAAS,WAAA,KAAgB,OAAA,CAAQ,UAAA;EAoBnC;;;EAf9B,SAAA;EALoB;;;EAUpB,SAAA;EAVyD;;;;;;;;EAoBzD,OAAA,IAAW,KAAA,cAAmB,OAAA,CAAQ,kBAAA;AAAA;AAQxC;;;;;AAAA,cAAa,mBAAA;EAAA,QACH,eAAA;EAAA,QACA,KAAA;EAAA,QACA,SAAA;EAAA,QACA,QAAA;EAAA,QACA,eAAA;EAAA,iBACS,OAAA;EADT;;;;EAAA,QAOD,WAAA;EAsCK;;;EAAA,YAdA,UAAA;EA2CE;;;EAAA,YApCF,SAAA;EA6CJ;;;EAAA,YAtCI,SAAA;EAoKZ;;;EAAA,YA7JY,OAAA;;;;;;;;;;;;;;;;;;;SAsBL,MAAA,CAAO,OAAA,EAAS,0BAAA,GAA6B,cAAA,CAAe,UAAA;EAAA,QAK3D,SAAA;EAAA,QAIA,QAAA;EAAA,QAIM,OAAA;;;;;;;;UAsEN,YAAA;;;;;;EA2CR,kBAAA;;;;;;EASA,iBAAA;;;;;;EASA,UAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChunkedStreamReader.js","names":[],"sources":["../../src/drivers/ChunkedStreamReader.ts"],"sourcesContent":["import type { RangeBytes } from \"./blob\";\n\n/**\n * Status returned by onError handler to indicate what action to take\n * - 'continue': Retry the failed operation\n * - 'error': Error the stream (calls controller.error, aborts ongoing fetches)\n * - 'cancel': Cancel the stream gracefully (calls controller.close, aborts ongoing fetches)\n */\nexport type ErrorHandlerStatus = \"continue\" | \"error\" | \"cancel\";\n\n/**\n * Options for creating a ChunkedStreamReader\n */\nexport interface ChunkedStreamReaderOptions {\n /**\n * Function to fetch a chunk of data. Optionally accepts an AbortSignal to cancel the fetch.\n */\n fetchChunk: (range: RangeBytes, signal?: AbortSignal) => Promise<Uint8Array>;\n\n /**\n * Total size of the blob in bytes\n */\n totalSize: number;\n\n /**\n * Size of each chunk to read in bytes (default: 16MB)\n */\n chunkSize?: number;\n\n /**\n * Error handler callback. Called when an error occurs during chunk fetching.\n * Should return:\n * - 'continue' to retry the operation\n * - 'error' to error the stream (will call controller.error and abort ongoing fetches)\n * - 'cancel' to cancel gracefully (will call controller.close and abort ongoing fetches)\n * Default behavior: returns 'error'.\n */\n onError?: (error: unknown) => Promise<ErrorHandlerStatus>;\n}\n\n/**\n * ChunkedStreamReader creates a ReadableStream that reads data from a blob driver\n * in fixed-size chunks. This is useful for streaming large files without loading\n * them entirely into memory.\n */\nexport class ChunkedStreamReader {\n private currentPosition: number = 0;\n private _read = true;\n private _canceled = false;\n private _errored = false;\n private abortController: AbortController | null = null;\n private readonly options: Required<ChunkedStreamReaderOptions>;\n\n /**\n * Creates a new ChunkedStreamReader instance.\n * Use the static `create` method instead.\n */\n private constructor(options: ChunkedStreamReaderOptions) {\n // Normalize options with defaults\n this.options = {\n ...options,\n chunkSize: options.chunkSize ?? 16 * 1024 * 1024,\n onError:\n options.onError ??\n (async () => {\n // Default behavior: error (will automatically call controller.error)\n return \"error\";\n }),\n };\n\n if (this.totalSize < 0) {\n throw new Error(\"Total size must be non-negative\");\n }\n if (this.chunkSize <= 0) {\n throw new Error(\"Chunk size must be positive\");\n }\n }\n\n /**\n * Gets the fetchChunk function from options\n */\n private get fetchChunk() {\n return this.options.fetchChunk;\n }\n\n /**\n * Gets the total size from options\n */\n private get totalSize() {\n return this.options.totalSize;\n }\n\n /**\n * Gets the chunk size from options\n */\n private get chunkSize() {\n return this.options.chunkSize;\n }\n\n /**\n * Gets the onError callback from options\n */\n private get onError() {\n return this.options.onError;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n *\n * @param options - Configuration options for the chunked stream reader\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n *\n * @example\n * ```typescript\n * const stream = ChunkedStreamReader.create({\n * fetchChunk: async (range, signal) => {\n * const response = await fetch(`/api/data?from=${range.from}&to=${range.to}`, { signal });\n * return new Uint8Array(await response.arrayBuffer());\n * },\n * totalSize: 1024 * 1024, // 1MB\n * chunkSize: 64 * 1024, // 64KB chunks\n * });\n * ```\n */\n static create(options: ChunkedStreamReaderOptions): ReadableStream<Uint8Array> {\n const reader = new ChunkedStreamReader(options);\n return reader.createStream();\n }\n\n private readStart() {\n this._read = true;\n }\n\n private readStop() {\n this._read = false;\n }\n\n private async tryRead(controller: ReadableStreamDefaultController<Uint8Array>): Promise<boolean> {\n if (this._canceled) {\n return true;\n }\n\n // Check if we've read all data\n if (this.isComplete()) {\n controller.close();\n return true;\n }\n\n try {\n // Calculate the end position for this chunk\n // Ensure we don't read beyond the total size\n const endPosition = Math.min(this.currentPosition + this.chunkSize, this.totalSize);\n\n // Fetch the chunk from the blob driver, passing the abort signal if available\n const data = await this.fetchChunk(\n { from: this.currentPosition, to: endPosition },\n this.abortController?.signal,\n );\n\n // Check if stream was cancelled during the fetch\n if (this._canceled) {\n return true;\n }\n\n // Enqueue the data into the stream\n controller.enqueue(data);\n\n // Update the current position for the next chunk\n this.currentPosition = endPosition;\n\n if (!controller.desiredSize || controller.desiredSize <= 0) {\n // The internal queue is full, so propagate\n // the backpressure signal to the underlying source.\n this.readStop();\n }\n } catch (error) {\n // If any error occurs during chunk reading, call the error handler\n const status = await this.onError(error);\n\n if (status === \"error\") {\n this._errored = true;\n // Error the stream and abort any ongoing fetch operations\n controller.error(error);\n this.abortController?.abort(\"Stream errored\");\n return true; // Stop reading\n }\n\n if (status === \"cancel\") {\n this._canceled = true;\n // Close the stream gracefully and abort any ongoing fetch operations\n controller.close();\n this.abortController?.abort(\"Stream cancelled\");\n console.debug(\"ChunkedStreamReader cancelled due to error\");\n return true; // Stop reading\n }\n }\n\n return false;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n * The stream will automatically close when all data has been read.\n *\n * @private - Use the static `create` method instead\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n */\n private createStream(): ReadableStream<Uint8Array> {\n // Create an AbortController for this stream\n this.abortController = new AbortController();\n\n return new ReadableStream({\n start: async (controller) => {\n while (true) {\n if (this._canceled || this._errored) {\n return;\n }\n\n if (!this._read) {\n await new Promise((r) => setTimeout(r, 0));\n if (controller.desiredSize) {\n this.readStart();\n }\n } else {\n const isDone = await this.tryRead(controller);\n if (isDone) {\n return;\n }\n }\n }\n },\n\n pull: () => {\n this.readStart();\n },\n\n cancel: (reason) => {\n this._canceled = true;\n // Abort any ongoing fetch operations\n this.abortController?.abort(reason);\n console.debug(\"ChunkedStreamReader cancelled:\", reason);\n },\n });\n }\n\n /**\n * Gets the current reading position in bytes.\n *\n * @returns Current position as number of bytes read\n */\n getCurrentPosition(): number {\n return this.currentPosition;\n }\n\n /**\n * Gets the remaining bytes to be read.\n *\n * @returns Number of bytes remaining\n */\n getRemainingBytes(): number {\n return Math.max(0, this.totalSize - this.currentPosition);\n }\n\n /**\n * Checks if the entire blob has been read.\n *\n * @returns True if all data has been read\n */\n isComplete(): boolean {\n return this.currentPosition >= this.totalSize;\n }\n}\n"],"mappings":";;;;;;AA6CA,IAAa,sBAAb,MAAa,oBAAoB;CAC/B,kBAAkC;CAClC,QAAgB;CAChB,YAAoB;CACpB,WAAmB;CACnB,kBAAkD;CAClD;;;;;CAMA,YAAoB,SAAqC;AAEvD,OAAK,UAAU;GACb,GAAG;GACH,WAAW,QAAQ,aAAa,KAAK,OAAO;GAC5C,SACE,QAAQ,YACP,YAAY;AAEX,WAAO;;GAEZ;AAED,MAAI,KAAK,YAAY,EACnB,OAAM,IAAI,MAAM,kCAAkC;AAEpD,MAAI,KAAK,aAAa,EACpB,OAAM,IAAI,MAAM,8BAA8B;;;;;CAOlD,IAAY,aAAa;AACvB,SAAO,KAAK,QAAQ;;;;;CAMtB,IAAY,YAAY;AACtB,SAAO,KAAK,QAAQ;;;;;CAMtB,IAAY,YAAY;AACtB,SAAO,KAAK,QAAQ;;;;;CAMtB,IAAY,UAAU;AACpB,SAAO,KAAK,QAAQ;;;;;;;;;;;;;;;;;;;;CAqBtB,OAAO,OAAO,SAAiE;AAE7E,SADe,IAAI,oBAAoB,QAAQ,CACjC,cAAc;;CAG9B,YAAoB;AAClB,OAAK,QAAQ;;CAGf,WAAmB;AACjB,OAAK,QAAQ;;CAGf,MAAc,QAAQ,YAA2E;AAC/F,MAAI,KAAK,UACP,QAAO;AAIT,MAAI,KAAK,YAAY,EAAE;AACrB,cAAW,OAAO;AAClB,UAAO;;AAGT,MAAI;GAGF,MAAM,cAAc,KAAK,IAAI,KAAK,kBAAkB,KAAK,WAAW,KAAK,UAAU;GAGnF,MAAM,OAAO,MAAM,KAAK,WACtB;IAAE,MAAM,KAAK;IAAiB,IAAI;IAAa,EAC/C,KAAK,iBAAiB,OACvB;AAGD,OAAI,KAAK,UACP,QAAO;AAIT,cAAW,QAAQ,KAAK;AAGxB,QAAK,kBAAkB;AAEvB,OAAI,CAAC,WAAW,eAAe,WAAW,eAAe,EAGvD,MAAK,UAAU;WAEV,OAAO;GAEd,MAAM,SAAS,MAAM,KAAK,QAAQ,MAAM;AAExC,OAAI,WAAW,SAAS;AACtB,SAAK,WAAW;AAEhB,eAAW,MAAM,MAAM;AACvB,SAAK,iBAAiB,MAAM,iBAAiB;AAC7C,WAAO;;AAGT,OAAI,WAAW,UAAU;AACvB,SAAK,YAAY;AAEjB,eAAW,OAAO;AAClB,SAAK,iBAAiB,MAAM,mBAAmB;AAC/C,YAAQ,MAAM,6CAA6C;AAC3D,WAAO;;;AAIX,SAAO;;;;;;;;;CAUT,eAAmD;AAEjD,OAAK,kBAAkB,IAAI,iBAAiB;AAE5C,SAAO,IAAI,eAAe;GACxB,OAAO,OAAO,eAAe;AAC3B,WAAO,MAAM;AACX,SAAI,KAAK,aAAa,KAAK,SACzB;AAGF,SAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI,SAAS,MAAM,WAAW,GAAG,EAAE,CAAC;AAC1C,UAAI,WAAW,YACb,MAAK,WAAW;gBAGH,MAAM,KAAK,QAAQ,WAAW,CAE3C;;;GAMR,YAAY;AACV,SAAK,WAAW;;GAGlB,SAAS,WAAW;AAClB,SAAK,YAAY;AAEjB,SAAK,iBAAiB,MAAM,OAAO;AACnC,YAAQ,MAAM,kCAAkC,OAAO;;GAE1D,CAAC;;;;;;;CAQJ,qBAA6B;AAC3B,SAAO,KAAK;;;;;;;CAQd,oBAA4B;AAC1B,SAAO,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,gBAAgB;;;;;;;CAQ3D,aAAsB;AACpB,SAAO,KAAK,mBAAmB,KAAK"}
1
+ {"version":3,"file":"ChunkedStreamReader.js","names":[],"sources":["../../src/drivers/ChunkedStreamReader.ts"],"sourcesContent":["import type { RangeBytes } from \"./blob\";\n\n/**\n * Status returned by onError handler to indicate what action to take\n * - 'continue': Retry the failed operation\n * - 'error': Error the stream (calls controller.error, aborts ongoing fetches)\n * - 'cancel': Cancel the stream gracefully (calls controller.close, aborts ongoing fetches)\n */\nexport type ErrorHandlerStatus = \"continue\" | \"error\" | \"cancel\";\n\n/**\n * Options for creating a ChunkedStreamReader\n */\nexport interface ChunkedStreamReaderOptions {\n /**\n * Function to fetch a chunk of data. Optionally accepts an AbortSignal to cancel the fetch.\n */\n fetchChunk: (range: RangeBytes, signal?: AbortSignal) => Promise<Uint8Array>;\n\n /**\n * Total size of the blob in bytes\n */\n totalSize: number;\n\n /**\n * Size of each chunk to read in bytes (default: 16MB)\n */\n chunkSize?: number;\n\n /**\n * Error handler callback. Called when an error occurs during chunk fetching.\n * Should return:\n * - 'continue' to retry the operation\n * - 'error' to error the stream (will call controller.error and abort ongoing fetches)\n * - 'cancel' to cancel gracefully (will call controller.close and abort ongoing fetches)\n * Default behavior: returns 'error'.\n */\n onError?: (error: unknown) => Promise<ErrorHandlerStatus>;\n}\n\n/**\n * ChunkedStreamReader creates a ReadableStream that reads data from a blob driver\n * in fixed-size chunks. This is useful for streaming large files without loading\n * them entirely into memory.\n */\nexport class ChunkedStreamReader {\n private currentPosition: number = 0;\n private _read = true;\n private _canceled = false;\n private _errored = false;\n private abortController: AbortController | null = null;\n private readonly options: Required<ChunkedStreamReaderOptions>;\n\n /**\n * Creates a new ChunkedStreamReader instance.\n * Use the static `create` method instead.\n */\n private constructor(options: ChunkedStreamReaderOptions) {\n // Normalize options with defaults\n this.options = {\n ...options,\n chunkSize: options.chunkSize ?? 16 * 1024 * 1024,\n onError:\n options.onError ??\n (async () => {\n // Default behavior: error (will automatically call controller.error)\n return \"error\";\n }),\n };\n\n if (this.totalSize < 0) {\n throw new Error(\"Total size must be non-negative\");\n }\n if (this.chunkSize <= 0) {\n throw new Error(\"Chunk size must be positive\");\n }\n }\n\n /**\n * Gets the fetchChunk function from options\n */\n private get fetchChunk() {\n return this.options.fetchChunk;\n }\n\n /**\n * Gets the total size from options\n */\n private get totalSize() {\n return this.options.totalSize;\n }\n\n /**\n * Gets the chunk size from options\n */\n private get chunkSize() {\n return this.options.chunkSize;\n }\n\n /**\n * Gets the onError callback from options\n */\n private get onError() {\n return this.options.onError;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n *\n * @param options - Configuration options for the chunked stream reader\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n *\n * @example\n * ```typescript\n * const stream = ChunkedStreamReader.create({\n * fetchChunk: async (range, signal) => {\n * const response = await fetch(`/api/data?from=${range.from}&to=${range.to}`, { signal });\n * return new Uint8Array(await response.arrayBuffer());\n * },\n * totalSize: 1024 * 1024, // 1MB\n * chunkSize: 64 * 1024, // 64KB chunks\n * });\n * ```\n */\n static create(options: ChunkedStreamReaderOptions): ReadableStream<Uint8Array> {\n const reader = new ChunkedStreamReader(options);\n return reader.createStream();\n }\n\n private readStart() {\n this._read = true;\n }\n\n private readStop() {\n this._read = false;\n }\n\n private async tryRead(controller: ReadableStreamDefaultController<Uint8Array>): Promise<boolean> {\n if (this._canceled) {\n return true;\n }\n\n // Check if we've read all data\n if (this.isComplete()) {\n controller.close();\n return true;\n }\n\n try {\n // Calculate the end position for this chunk\n // Ensure we don't read beyond the total size\n const endPosition = Math.min(this.currentPosition + this.chunkSize, this.totalSize);\n\n // Fetch the chunk from the blob driver, passing the abort signal if available\n const data = await this.fetchChunk(\n { from: this.currentPosition, to: endPosition },\n this.abortController?.signal,\n );\n\n // Check if stream was cancelled during the fetch\n if (this._canceled) {\n return true;\n }\n\n // Enqueue the data into the stream\n controller.enqueue(data);\n\n // Update the current position for the next chunk\n this.currentPosition = endPosition;\n\n if (!controller.desiredSize || controller.desiredSize <= 0) {\n // The internal queue is full, so propagate\n // the backpressure signal to the underlying source.\n this.readStop();\n }\n } catch (error) {\n // If any error occurs during chunk reading, call the error handler\n const status = await this.onError(error);\n\n if (status === \"error\") {\n this._errored = true;\n // Error the stream and abort any ongoing fetch operations\n controller.error(error);\n this.abortController?.abort(\"Stream errored\");\n return true; // Stop reading\n }\n\n if (status === \"cancel\") {\n this._canceled = true;\n // Close the stream gracefully and abort any ongoing fetch operations\n controller.close();\n this.abortController?.abort(\"Stream cancelled\");\n console.debug(\"ChunkedStreamReader cancelled due to error\");\n return true; // Stop reading\n }\n }\n\n return false;\n }\n\n /**\n * Creates and returns a ReadableStream that reads data in chunks.\n * The stream will automatically close when all data has been read.\n *\n * @private - Use the static `create` method instead\n * @returns ReadableStream that can be consumed by zip.add or other stream consumers\n */\n private createStream(): ReadableStream<Uint8Array> {\n // Create an AbortController for this stream\n this.abortController = new AbortController();\n\n return new ReadableStream({\n start: async (controller) => {\n while (true) {\n if (this._canceled || this._errored) {\n return;\n }\n\n if (!this._read) {\n await new Promise((r) => setTimeout(r, 0));\n if (controller.desiredSize) {\n this.readStart();\n }\n } else {\n const isDone = await this.tryRead(controller);\n if (isDone) {\n return;\n }\n }\n }\n },\n\n pull: () => {\n this.readStart();\n },\n\n cancel: (reason) => {\n this._canceled = true;\n // Abort any ongoing fetch operations\n this.abortController?.abort(reason);\n console.debug(\"ChunkedStreamReader cancelled:\", reason);\n },\n });\n }\n\n /**\n * Gets the current reading position in bytes.\n *\n * @returns Current position as number of bytes read\n */\n getCurrentPosition(): number {\n return this.currentPosition;\n }\n\n /**\n * Gets the remaining bytes to be read.\n *\n * @returns Number of bytes remaining\n */\n getRemainingBytes(): number {\n return Math.max(0, this.totalSize - this.currentPosition);\n }\n\n /**\n * Checks if the entire blob has been read.\n *\n * @returns True if all data has been read\n */\n isComplete(): boolean {\n return this.currentPosition >= this.totalSize;\n }\n}\n"],"mappings":";;;;;;AA6CA,IAAa,sBAAb,MAAa,oBAAoB;CAC/B,kBAAkC;CAClC,QAAgB;CAChB,YAAoB;CACpB,WAAmB;CACnB,kBAAkD;CAClD;;;;;CAMA,YAAoB,SAAqC;EAEvD,KAAK,UAAU;GACb,GAAG;GACH,WAAW,QAAQ,aAAa,KAAK,OAAO;GAC5C,SACE,QAAQ,YACP,YAAY;IAEX,OAAO;GACT;EACJ;EAEA,IAAI,KAAK,YAAY,GACnB,MAAM,IAAI,MAAM,iCAAiC;EAEnD,IAAI,KAAK,aAAa,GACpB,MAAM,IAAI,MAAM,6BAA6B;CAEjD;;;;CAKA,IAAY,aAAa;EACvB,OAAO,KAAK,QAAQ;CACtB;;;;CAKA,IAAY,YAAY;EACtB,OAAO,KAAK,QAAQ;CACtB;;;;CAKA,IAAY,YAAY;EACtB,OAAO,KAAK,QAAQ;CACtB;;;;CAKA,IAAY,UAAU;EACpB,OAAO,KAAK,QAAQ;CACtB;;;;;;;;;;;;;;;;;;;CAoBA,OAAO,OAAO,SAAiE;EAE7E,OAAO,IADY,oBAAoB,OAC3B,CAAC,CAAC,aAAa;CAC7B;CAEA,YAAoB;EAClB,KAAK,QAAQ;CACf;CAEA,WAAmB;EACjB,KAAK,QAAQ;CACf;CAEA,MAAc,QAAQ,YAA2E;EAC/F,IAAI,KAAK,WACP,OAAO;EAIT,IAAI,KAAK,WAAW,GAAG;GACrB,WAAW,MAAM;GACjB,OAAO;EACT;EAEA,IAAI;GAGF,MAAM,cAAc,KAAK,IAAI,KAAK,kBAAkB,KAAK,WAAW,KAAK,SAAS;GAGlF,MAAM,OAAO,MAAM,KAAK,WACtB;IAAE,MAAM,KAAK;IAAiB,IAAI;GAAY,GAC9C,KAAK,iBAAiB,MACxB;GAGA,IAAI,KAAK,WACP,OAAO;GAIT,WAAW,QAAQ,IAAI;GAGvB,KAAK,kBAAkB;GAEvB,IAAI,CAAC,WAAW,eAAe,WAAW,eAAe,GAGvD,KAAK,SAAS;EAElB,SAAS,OAAO;GAEd,MAAM,SAAS,MAAM,KAAK,QAAQ,KAAK;GAEvC,IAAI,WAAW,SAAS;IACtB,KAAK,WAAW;IAEhB,WAAW,MAAM,KAAK;IACtB,KAAK,iBAAiB,MAAM,gBAAgB;IAC5C,OAAO;GACT;GAEA,IAAI,WAAW,UAAU;IACvB,KAAK,YAAY;IAEjB,WAAW,MAAM;IACjB,KAAK,iBAAiB,MAAM,kBAAkB;IAC9C,QAAQ,MAAM,4CAA4C;IAC1D,OAAO;GACT;EACF;EAEA,OAAO;CACT;;;;;;;;CASA,eAAmD;EAEjD,KAAK,kBAAkB,IAAI,gBAAgB;EAE3C,OAAO,IAAI,eAAe;GACxB,OAAO,OAAO,eAAe;IAC3B,OAAO,MAAM;KACX,IAAI,KAAK,aAAa,KAAK,UACzB;KAGF,IAAI,CAAC,KAAK,OAAO;MACf,MAAM,IAAI,SAAS,MAAM,WAAW,GAAG,CAAC,CAAC;MACzC,IAAI,WAAW,aACb,KAAK,UAAU;KAEnB,OAEE,IAAI,MADiB,KAAK,QAAQ,UAAU,GAE1C;IAGN;GACF;GAEA,YAAY;IACV,KAAK,UAAU;GACjB;GAEA,SAAS,WAAW;IAClB,KAAK,YAAY;IAEjB,KAAK,iBAAiB,MAAM,MAAM;IAClC,QAAQ,MAAM,kCAAkC,MAAM;GACxD;EACF,CAAC;CACH;;;;;;CAOA,qBAA6B;EAC3B,OAAO,KAAK;CACd;;;;;;CAOA,oBAA4B;EAC1B,OAAO,KAAK,IAAI,GAAG,KAAK,YAAY,KAAK,eAAe;CAC1D;;;;;;CAOA,aAAsB;EACpB,OAAO,KAAK,mBAAmB,KAAK;CACtC;AACF"}
@@ -1,9 +1,10 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  let zod = require("zod");
3
2
  //#region src/drivers/blob.ts
4
3
  /** Range in bytes, from should be less than to. */
5
4
  const RangeBytes = zod.z.object({
5
+ /** Included left border. */
6
6
  from: zod.z.number().min(0),
7
+ /** Excluded right border. */
7
8
  to: zod.z.number().min(1)
8
9
  });
9
10
  function newRangeBytesOpt(from, to) {
@@ -1 +1 @@
1
- {"version":3,"file":"blob.cjs","names":["z"],"sources":["../../src/drivers/blob.ts"],"sourcesContent":["import type { Branded } from \"../branding\";\nimport { z } from \"zod\";\n\n/** Handle of locally downloaded blob. This handle is issued only after the\n * blob's content is downloaded locally, and ready for quick access. */\nexport type LocalBlobHandle = Branded<string, \"LocalBlobHandle\">;\n\n/** Handle of remote blob. This handle is issued as soon as the data becomes\n * available on the remote server. */\nexport type RemoteBlobHandle = Branded<string, \"RemoteBlobHandle\">;\n\n/** Being configured inside the output structure provides information about\n * blob's content and means to retrieve it when needed. */\nexport interface BlobHandleAndSize<\n H extends LocalBlobHandle | RemoteBlobHandle = LocalBlobHandle | RemoteBlobHandle,\n> {\n /** Handle to retrieve block content using {@link BlobDriver.getContent()} */\n readonly handle: H;\n\n /** Blob size in bytes. */\n readonly size: number;\n}\n\n/** Range in bytes, from should be less than to. */\nexport const RangeBytes = z.object({\n /** Included left border. */\n from: z.number().min(0),\n /** Excluded right border. */\n to: z.number().min(1),\n});\n\nexport type RangeBytes = z.infer<typeof RangeBytes>;\n\nexport function newRangeBytesOpt(from?: number, to?: number): RangeBytes | undefined {\n if (from == undefined || to == undefined) {\n return undefined;\n }\n\n const range = { from, to };\n validateRangeBytes(range, \"newRangeBytesOpt\");\n\n return range;\n}\n\nexport function validateRangeBytes(range: RangeBytes, errMsg: string) {\n if (range.from < 0 || range.from >= range.to) {\n throw new Error(`${errMsg}: invalid bytes range: ${range}`);\n }\n}\n\n/** Being configured inside the output structure provides information about\n * locally downloaded blob and means to retrieve it's content when needed. This\n * structure is created only after the blob's content is downloaded locally, and\n * ready for quick access. */\nexport type LocalBlobHandleAndSize = BlobHandleAndSize<LocalBlobHandle>;\n\n/** Being configured inside the output structure provides information about\n * remote blob and means to retrieve it's content when needed. This structure\n * is created as soon as remote blob becomes available. */\nexport type RemoteBlobHandleAndSize = BlobHandleAndSize<RemoteBlobHandle>;\n\nexport type GetContentOptions = {\n /** Byte range in [from, to) format. */\n range?: RangeBytes;\n /** Signal to abort the operation early. */\n signal?: AbortSignal;\n};\n\nexport type ContentHandler<T> = (content: ReadableStream, size: number) => Promise<T>;\n\n/** Defines API of blob driver as it is seen from the block UI code. */\nexport interface BlobDriver {\n /**\n * Given the blob handle returns its content.\n * Depending on the handle type, content will be served from locally downloaded file,\n * or directly from remote platforma storage.\n */\n getContent(handle: LocalBlobHandle | RemoteBlobHandle, range?: RangeBytes): Promise<Uint8Array>;\n}\n\n/**\n * Operational metrics of the blob download driver.\n */\nexport type BlobDriverMetrics = {\n /** Downloads that bypassed the ranges (sparse) cache. Counted when issued, so failed downloads still count. */\n uncachedRequests: number;\n /** Bytes actually streamed off the wire on the uncached path. */\n uncachedRequestBytes: number;\n /** Currently active remote downloads. */\n downloadsInFlight: number;\n /** Sum of known sizes of active downloads — progress-bar denominator. */\n inFlightBytesTotal: number;\n /** Sum of bytes received so far across active downloads — progress-bar numerator. */\n inFlightBytesReceived: number;\n /** Cached presigned URL was used and the download started successfully (one gRPC sign call avoided). */\n presignedUrlCacheHits: number;\n /** No cached presigned URL; a fresh one was fetched. */\n presignedUrlCacheMisses: number;\n /** Cached presigned URL was rejected (HTTP 400) and re-fetched — signals the TTL safety margin is too loose. */\n presignedUrlStaleHits: number;\n /** Total latency of presigned-URL fetch calls (misses + stale hits); divide by their count for the mean cost a hit avoids. */\n presignedUrlRequestSumLatencyMs: number;\n};\n"],"mappings":";;;;AAwBA,MAAa,aAAaA,IAAAA,EAAE,OAAO;CAEjC,MAAMA,IAAAA,EAAE,QAAQ,CAAC,IAAI,EAAE;CAEvB,IAAIA,IAAAA,EAAE,QAAQ,CAAC,IAAI,EAAE;CACtB,CAAC;AAIF,SAAgB,iBAAiB,MAAe,IAAqC;AACnF,KAAI,QAAQ,KAAA,KAAa,MAAM,KAAA,EAC7B;CAGF,MAAM,QAAQ;EAAE;EAAM;EAAI;AAC1B,oBAAmB,OAAO,mBAAmB;AAE7C,QAAO;;AAGT,SAAgB,mBAAmB,OAAmB,QAAgB;AACpE,KAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,GACxC,OAAM,IAAI,MAAM,GAAG,OAAO,yBAAyB,QAAQ"}
1
+ {"version":3,"file":"blob.cjs","names":["z"],"sources":["../../src/drivers/blob.ts"],"sourcesContent":["import type { Branded } from \"../branding\";\nimport { z } from \"zod\";\n\n/** Handle of locally downloaded blob. This handle is issued only after the\n * blob's content is downloaded locally, and ready for quick access. */\nexport type LocalBlobHandle = Branded<string, \"LocalBlobHandle\">;\n\n/** Handle of remote blob. This handle is issued as soon as the data becomes\n * available on the remote server. */\nexport type RemoteBlobHandle = Branded<string, \"RemoteBlobHandle\">;\n\n/** Being configured inside the output structure provides information about\n * blob's content and means to retrieve it when needed. */\nexport interface BlobHandleAndSize<\n H extends LocalBlobHandle | RemoteBlobHandle = LocalBlobHandle | RemoteBlobHandle,\n> {\n /** Handle to retrieve block content using {@link BlobDriver.getContent()} */\n readonly handle: H;\n\n /** Blob size in bytes. */\n readonly size: number;\n}\n\n/** Range in bytes, from should be less than to. */\nexport const RangeBytes = z.object({\n /** Included left border. */\n from: z.number().min(0),\n /** Excluded right border. */\n to: z.number().min(1),\n});\n\nexport type RangeBytes = z.infer<typeof RangeBytes>;\n\nexport function newRangeBytesOpt(from?: number, to?: number): RangeBytes | undefined {\n if (from == undefined || to == undefined) {\n return undefined;\n }\n\n const range = { from, to };\n validateRangeBytes(range, \"newRangeBytesOpt\");\n\n return range;\n}\n\nexport function validateRangeBytes(range: RangeBytes, errMsg: string) {\n if (range.from < 0 || range.from >= range.to) {\n throw new Error(`${errMsg}: invalid bytes range: ${range}`);\n }\n}\n\n/** Being configured inside the output structure provides information about\n * locally downloaded blob and means to retrieve it's content when needed. This\n * structure is created only after the blob's content is downloaded locally, and\n * ready for quick access. */\nexport type LocalBlobHandleAndSize = BlobHandleAndSize<LocalBlobHandle>;\n\n/** Being configured inside the output structure provides information about\n * remote blob and means to retrieve it's content when needed. This structure\n * is created as soon as remote blob becomes available. */\nexport type RemoteBlobHandleAndSize = BlobHandleAndSize<RemoteBlobHandle>;\n\nexport type GetContentOptions = {\n /** Byte range in [from, to) format. */\n range?: RangeBytes;\n /** Signal to abort the operation early. */\n signal?: AbortSignal;\n};\n\nexport type ContentHandler<T> = (content: ReadableStream, size: number) => Promise<T>;\n\n/** Defines API of blob driver as it is seen from the block UI code. */\nexport interface BlobDriver {\n /**\n * Given the blob handle returns its content.\n * Depending on the handle type, content will be served from locally downloaded file,\n * or directly from remote platforma storage.\n */\n getContent(handle: LocalBlobHandle | RemoteBlobHandle, range?: RangeBytes): Promise<Uint8Array>;\n}\n\n/**\n * Operational metrics of the blob download driver.\n */\nexport type BlobDriverMetrics = {\n /** Downloads that bypassed the ranges (sparse) cache. Counted when issued, so failed downloads still count. */\n uncachedRequests: number;\n /** Bytes actually streamed off the wire on the uncached path. */\n uncachedRequestBytes: number;\n /** Currently active remote downloads. */\n downloadsInFlight: number;\n /** Sum of known sizes of active downloads — progress-bar denominator. */\n inFlightBytesTotal: number;\n /** Sum of bytes received so far across active downloads — progress-bar numerator. */\n inFlightBytesReceived: number;\n /** Cached presigned URL was used and the download started successfully (one gRPC sign call avoided). */\n presignedUrlCacheHits: number;\n /** No cached presigned URL; a fresh one was fetched. */\n presignedUrlCacheMisses: number;\n /** Cached presigned URL was rejected (HTTP 400) and re-fetched — signals the TTL safety margin is too loose. */\n presignedUrlStaleHits: number;\n /** Total latency of presigned-URL fetch calls (misses + stale hits); divide by their count for the mean cost a hit avoids. */\n presignedUrlRequestSumLatencyMs: number;\n};\n"],"mappings":";;;AAwBA,MAAa,aAAaA,IAAAA,EAAE,OAAO;;CAEjC,MAAMA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;;CAEtB,IAAIA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AACtB,CAAC;AAID,SAAgB,iBAAiB,MAAe,IAAqC;CACnF,IAAI,QAAQ,KAAA,KAAa,MAAM,KAAA,GAC7B;CAGF,MAAM,QAAQ;EAAE;EAAM;CAAG;CACzB,mBAAmB,OAAO,kBAAkB;CAE5C,OAAO;AACT;AAEA,SAAgB,mBAAmB,OAAmB,QAAgB;CACpE,IAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,IACxC,MAAM,IAAI,MAAM,GAAG,OAAO,yBAAyB,OAAO;AAE9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"blob.d.ts","names":[],"sources":["../../src/drivers/blob.ts"],"mappings":";;;;;;KAKY,eAAA,GAAkB,OAAA;;;KAIlB,gBAAA,GAAmB,OAAA;;AAA/B;UAIiB,iBAAA,WACL,eAAA,GAAkB,gBAAA,GAAmB,eAAA,GAAkB,gBAAA;;WAGxD,MAAA,EAAQ,CAAA;EARmB;EAAA,SAW3B,IAAA;AAAA;;cAIE,UAAA,EAAU,CAAA,CAAA,SAAA;EAVO,+CAAqC;;;;;;;;;KAiBvD,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,UAAA;AAAA,iBAExB,gBAAA,CAAiB,IAAA,WAAe,EAAA,YAAc,UAAA;AAAA,iBAW9C,kBAAA,CAAmB,KAAA,EAAO,UAAA,EAAY,MAAA;;;AApBtD;;KA8BY,sBAAA,GAAyB,iBAAA,CAAkB,eAAA;;;;KAK3C,uBAAA,GAA0B,iBAAA,CAAkB,gBAAA;AAAA,KAE5C,iBAAA;EArCW,uCAuCrB,KAAA,GAAQ,UAAA,EAvCa;EAyCrB,MAAA,GAAS,WAAA;AAAA;AAAA,KAGC,cAAA,OAAqB,OAAA,EAAS,cAAA,EAAgB,IAAA,aAAiB,OAAA,CAAQ,CAAA;;UAGlE,UAAA;;;;;;EAMf,UAAA,CAAW,MAAA,EAAQ,eAAA,GAAkB,gBAAA,EAAkB,KAAA,GAAQ,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA;;;AA9CtF;KAoDY,iBAAA;iHAEV,gBAAA,UAtDuB;EAwDvB,oBAAA,UAxDsC;EA0DtC,iBAAA,UA1DgD;EA4DhD,kBAAA,UA1D8B;EA4D9B,qBAAA,UA5DsE;EA8DtE,qBAAA,UA9D8C;EAgE9C,uBAAA,UAhEsE;EAkEtE,qBAAA,UAvDc;EAyDd,+BAAA;AAAA"}
1
+ {"version":3,"file":"blob.d.ts","names":[],"sources":["../../src/drivers/blob.ts"],"mappings":";;;;;;KAKY,eAAA,GAAkB,OAAO;;;KAIzB,gBAAA,GAAmB,OAAO;AAJD;AAIrC;AAJqC,UAQpB,iBAAA,WACL,eAAA,GAAkB,gBAAA,GAAmB,eAAA,GAAkB,gBAAA;;WAGxD,MAAA,EAAQ,CAAA;EARmB;EAAA,SAW3B,IAAA;AAAA;;cAIE,UAAA,EAAU,CAAA,CAAA,SAAA;EAVO,+CAAqC;;;;;;;;;KAiBvD,UAAA,GAAa,CAAA,CAAE,KAAK,QAAQ,UAAA;AAAA,iBAExB,gBAAA,CAAiB,IAAA,WAAe,EAAA,YAAc,UAAU;AAAA,iBAWxD,kBAAA,CAAmB,KAAA,EAAO,UAAU,EAAE,MAAA;;AAxBvC;AAIf;;KA8BY,sBAAA,GAAyB,iBAAiB,CAAC,eAAA;;;;KAK3C,uBAAA,GAA0B,iBAAiB,CAAC,gBAAA;AAAA,KAE5C,iBAAA;EArCW,uCAuCrB,KAAA,GAAQ,UAAA,EAvCa;EAyCrB,MAAA,GAAS,WAAW;AAAA;AAAA,KAGV,cAAA,OAAqB,OAAA,EAAS,cAAA,EAAgB,IAAA,aAAiB,OAAA,CAAQ,CAAA;;UAGlE,UAAA;;;;;;EAMf,UAAA,CAAW,MAAA,EAAQ,eAAA,GAAkB,gBAAA,EAAkB,KAAA,GAAQ,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA;;;AA9CtF;KAoDY,iBAAA;iHAEV,gBAAA,UAtDuB;EAwDvB,oBAAA,UAxDsC;EA0DtC,iBAAA,UA1DgD;EA4DhD,kBAAA,UA1D8B;EA4D9B,qBAAA,UA5DsE;EA8DtE,qBAAA,UA9D8C;EAgE9C,uBAAA,UAhEsE;EAkEtE,qBAAA,UAvDc;EAyDd,+BAAA;AAAA"}
@@ -2,7 +2,9 @@ import { z } from "zod";
2
2
  //#region src/drivers/blob.ts
3
3
  /** Range in bytes, from should be less than to. */
4
4
  const RangeBytes = z.object({
5
+ /** Included left border. */
5
6
  from: z.number().min(0),
7
+ /** Excluded right border. */
6
8
  to: z.number().min(1)
7
9
  });
8
10
  function newRangeBytesOpt(from, to) {
@@ -1 +1 @@
1
- {"version":3,"file":"blob.js","names":[],"sources":["../../src/drivers/blob.ts"],"sourcesContent":["import type { Branded } from \"../branding\";\nimport { z } from \"zod\";\n\n/** Handle of locally downloaded blob. This handle is issued only after the\n * blob's content is downloaded locally, and ready for quick access. */\nexport type LocalBlobHandle = Branded<string, \"LocalBlobHandle\">;\n\n/** Handle of remote blob. This handle is issued as soon as the data becomes\n * available on the remote server. */\nexport type RemoteBlobHandle = Branded<string, \"RemoteBlobHandle\">;\n\n/** Being configured inside the output structure provides information about\n * blob's content and means to retrieve it when needed. */\nexport interface BlobHandleAndSize<\n H extends LocalBlobHandle | RemoteBlobHandle = LocalBlobHandle | RemoteBlobHandle,\n> {\n /** Handle to retrieve block content using {@link BlobDriver.getContent()} */\n readonly handle: H;\n\n /** Blob size in bytes. */\n readonly size: number;\n}\n\n/** Range in bytes, from should be less than to. */\nexport const RangeBytes = z.object({\n /** Included left border. */\n from: z.number().min(0),\n /** Excluded right border. */\n to: z.number().min(1),\n});\n\nexport type RangeBytes = z.infer<typeof RangeBytes>;\n\nexport function newRangeBytesOpt(from?: number, to?: number): RangeBytes | undefined {\n if (from == undefined || to == undefined) {\n return undefined;\n }\n\n const range = { from, to };\n validateRangeBytes(range, \"newRangeBytesOpt\");\n\n return range;\n}\n\nexport function validateRangeBytes(range: RangeBytes, errMsg: string) {\n if (range.from < 0 || range.from >= range.to) {\n throw new Error(`${errMsg}: invalid bytes range: ${range}`);\n }\n}\n\n/** Being configured inside the output structure provides information about\n * locally downloaded blob and means to retrieve it's content when needed. This\n * structure is created only after the blob's content is downloaded locally, and\n * ready for quick access. */\nexport type LocalBlobHandleAndSize = BlobHandleAndSize<LocalBlobHandle>;\n\n/** Being configured inside the output structure provides information about\n * remote blob and means to retrieve it's content when needed. This structure\n * is created as soon as remote blob becomes available. */\nexport type RemoteBlobHandleAndSize = BlobHandleAndSize<RemoteBlobHandle>;\n\nexport type GetContentOptions = {\n /** Byte range in [from, to) format. */\n range?: RangeBytes;\n /** Signal to abort the operation early. */\n signal?: AbortSignal;\n};\n\nexport type ContentHandler<T> = (content: ReadableStream, size: number) => Promise<T>;\n\n/** Defines API of blob driver as it is seen from the block UI code. */\nexport interface BlobDriver {\n /**\n * Given the blob handle returns its content.\n * Depending on the handle type, content will be served from locally downloaded file,\n * or directly from remote platforma storage.\n */\n getContent(handle: LocalBlobHandle | RemoteBlobHandle, range?: RangeBytes): Promise<Uint8Array>;\n}\n\n/**\n * Operational metrics of the blob download driver.\n */\nexport type BlobDriverMetrics = {\n /** Downloads that bypassed the ranges (sparse) cache. Counted when issued, so failed downloads still count. */\n uncachedRequests: number;\n /** Bytes actually streamed off the wire on the uncached path. */\n uncachedRequestBytes: number;\n /** Currently active remote downloads. */\n downloadsInFlight: number;\n /** Sum of known sizes of active downloads — progress-bar denominator. */\n inFlightBytesTotal: number;\n /** Sum of bytes received so far across active downloads — progress-bar numerator. */\n inFlightBytesReceived: number;\n /** Cached presigned URL was used and the download started successfully (one gRPC sign call avoided). */\n presignedUrlCacheHits: number;\n /** No cached presigned URL; a fresh one was fetched. */\n presignedUrlCacheMisses: number;\n /** Cached presigned URL was rejected (HTTP 400) and re-fetched — signals the TTL safety margin is too loose. */\n presignedUrlStaleHits: number;\n /** Total latency of presigned-URL fetch calls (misses + stale hits); divide by their count for the mean cost a hit avoids. */\n presignedUrlRequestSumLatencyMs: number;\n};\n"],"mappings":";;;AAwBA,MAAa,aAAa,EAAE,OAAO;CAEjC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CAEvB,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;CACtB,CAAC;AAIF,SAAgB,iBAAiB,MAAe,IAAqC;AACnF,KAAI,QAAQ,KAAA,KAAa,MAAM,KAAA,EAC7B;CAGF,MAAM,QAAQ;EAAE;EAAM;EAAI;AAC1B,oBAAmB,OAAO,mBAAmB;AAE7C,QAAO;;AAGT,SAAgB,mBAAmB,OAAmB,QAAgB;AACpE,KAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,GACxC,OAAM,IAAI,MAAM,GAAG,OAAO,yBAAyB,QAAQ"}
1
+ {"version":3,"file":"blob.js","names":[],"sources":["../../src/drivers/blob.ts"],"sourcesContent":["import type { Branded } from \"../branding\";\nimport { z } from \"zod\";\n\n/** Handle of locally downloaded blob. This handle is issued only after the\n * blob's content is downloaded locally, and ready for quick access. */\nexport type LocalBlobHandle = Branded<string, \"LocalBlobHandle\">;\n\n/** Handle of remote blob. This handle is issued as soon as the data becomes\n * available on the remote server. */\nexport type RemoteBlobHandle = Branded<string, \"RemoteBlobHandle\">;\n\n/** Being configured inside the output structure provides information about\n * blob's content and means to retrieve it when needed. */\nexport interface BlobHandleAndSize<\n H extends LocalBlobHandle | RemoteBlobHandle = LocalBlobHandle | RemoteBlobHandle,\n> {\n /** Handle to retrieve block content using {@link BlobDriver.getContent()} */\n readonly handle: H;\n\n /** Blob size in bytes. */\n readonly size: number;\n}\n\n/** Range in bytes, from should be less than to. */\nexport const RangeBytes = z.object({\n /** Included left border. */\n from: z.number().min(0),\n /** Excluded right border. */\n to: z.number().min(1),\n});\n\nexport type RangeBytes = z.infer<typeof RangeBytes>;\n\nexport function newRangeBytesOpt(from?: number, to?: number): RangeBytes | undefined {\n if (from == undefined || to == undefined) {\n return undefined;\n }\n\n const range = { from, to };\n validateRangeBytes(range, \"newRangeBytesOpt\");\n\n return range;\n}\n\nexport function validateRangeBytes(range: RangeBytes, errMsg: string) {\n if (range.from < 0 || range.from >= range.to) {\n throw new Error(`${errMsg}: invalid bytes range: ${range}`);\n }\n}\n\n/** Being configured inside the output structure provides information about\n * locally downloaded blob and means to retrieve it's content when needed. This\n * structure is created only after the blob's content is downloaded locally, and\n * ready for quick access. */\nexport type LocalBlobHandleAndSize = BlobHandleAndSize<LocalBlobHandle>;\n\n/** Being configured inside the output structure provides information about\n * remote blob and means to retrieve it's content when needed. This structure\n * is created as soon as remote blob becomes available. */\nexport type RemoteBlobHandleAndSize = BlobHandleAndSize<RemoteBlobHandle>;\n\nexport type GetContentOptions = {\n /** Byte range in [from, to) format. */\n range?: RangeBytes;\n /** Signal to abort the operation early. */\n signal?: AbortSignal;\n};\n\nexport type ContentHandler<T> = (content: ReadableStream, size: number) => Promise<T>;\n\n/** Defines API of blob driver as it is seen from the block UI code. */\nexport interface BlobDriver {\n /**\n * Given the blob handle returns its content.\n * Depending on the handle type, content will be served from locally downloaded file,\n * or directly from remote platforma storage.\n */\n getContent(handle: LocalBlobHandle | RemoteBlobHandle, range?: RangeBytes): Promise<Uint8Array>;\n}\n\n/**\n * Operational metrics of the blob download driver.\n */\nexport type BlobDriverMetrics = {\n /** Downloads that bypassed the ranges (sparse) cache. Counted when issued, so failed downloads still count. */\n uncachedRequests: number;\n /** Bytes actually streamed off the wire on the uncached path. */\n uncachedRequestBytes: number;\n /** Currently active remote downloads. */\n downloadsInFlight: number;\n /** Sum of known sizes of active downloads — progress-bar denominator. */\n inFlightBytesTotal: number;\n /** Sum of bytes received so far across active downloads — progress-bar numerator. */\n inFlightBytesReceived: number;\n /** Cached presigned URL was used and the download started successfully (one gRPC sign call avoided). */\n presignedUrlCacheHits: number;\n /** No cached presigned URL; a fresh one was fetched. */\n presignedUrlCacheMisses: number;\n /** Cached presigned URL was rejected (HTTP 400) and re-fetched — signals the TTL safety margin is too loose. */\n presignedUrlStaleHits: number;\n /** Total latency of presigned-URL fetch calls (misses + stale hits); divide by their count for the mean cost a hit avoids. */\n presignedUrlRequestSumLatencyMs: number;\n};\n"],"mappings":";;;AAwBA,MAAa,aAAa,EAAE,OAAO;;CAEjC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;;CAEtB,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AACtB,CAAC;AAID,SAAgB,iBAAiB,MAAe,IAAqC;CACnF,IAAI,QAAQ,KAAA,KAAa,MAAM,KAAA,GAC7B;CAGF,MAAM,QAAQ;EAAE;EAAM;CAAG;CACzB,mBAAmB,OAAO,kBAAkB;CAE5C,OAAO;AACT;AAEA,SAAgB,mBAAmB,OAAmB,QAAgB;CACpE,IAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,IACxC,MAAM,IAAI,MAAM,GAAG,OAAO,yBAAyB,OAAO;AAE9D"}