documents.js 1.60.3 → 1.62.0

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 (216) hide show
  1. package/README.md +84 -44
  2. package/dist/{blr-types-CYYC3yYU.d.cts → blr-types-DVgO1DQ9.d.cts} +1 -1
  3. package/dist/{blr-types-CYYC3yYU.d.ts → blr-types-DVgO1DQ9.d.ts} +1 -1
  4. package/dist/convert/capability.cjs +1 -0
  5. package/dist/convert/capability.d.cts +1 -1
  6. package/dist/convert/capability.d.ts +1 -1
  7. package/dist/convert/capability.js +1 -0
  8. package/dist/convert/convert.cjs +29 -27
  9. package/dist/convert/convert.d.cts +9 -3
  10. package/dist/convert/convert.d.ts +9 -3
  11. package/dist/convert/convert.js +29 -27
  12. package/dist/edit/docx/content.cjs +75 -13
  13. package/dist/edit/docx/content.d.cts +8 -2
  14. package/dist/edit/docx/content.d.ts +8 -2
  15. package/dist/edit/docx/content.js +75 -13
  16. package/dist/edit/docx/paragraph.cjs +14 -0
  17. package/dist/edit/docx/paragraph.d.cts +5 -0
  18. package/dist/edit/docx/paragraph.d.ts +5 -0
  19. package/dist/edit/docx/paragraph.js +14 -0
  20. package/dist/edit/docx/run.cjs +1 -1
  21. package/dist/edit/docx/run.js +1 -1
  22. package/dist/edit/docx/table.cjs +41 -0
  23. package/dist/edit/docx/table.d.cts +7 -1
  24. package/dist/edit/docx/table.d.ts +7 -1
  25. package/dist/edit/docx/table.js +42 -1
  26. package/dist/edit/geometry.cjs +38 -0
  27. package/dist/edit/geometry.d.cts +7 -0
  28. package/dist/edit/geometry.d.ts +7 -0
  29. package/dist/edit/geometry.js +36 -0
  30. package/dist/edit/odg/content.cjs +15 -12
  31. package/dist/edit/odg/content.js +15 -12
  32. package/dist/edit/odg/editor.d.cts +1 -1
  33. package/dist/edit/odg/editor.d.ts +1 -1
  34. package/dist/edit/odg/page.d.cts +3 -3
  35. package/dist/edit/odg/page.d.ts +3 -3
  36. package/dist/edit/odg/vector.cjs +22 -13
  37. package/dist/edit/odg/vector.d.cts +1 -1
  38. package/dist/edit/odg/vector.d.ts +1 -1
  39. package/dist/edit/odg/vector.js +23 -14
  40. package/dist/edit/odp/content.cjs +15 -0
  41. package/dist/edit/odp/content.js +16 -1
  42. package/dist/edit/odp/editor.d.cts +1 -1
  43. package/dist/edit/odp/editor.d.ts +1 -1
  44. package/dist/edit/odp/image.d.cts +1 -1
  45. package/dist/edit/odp/image.d.ts +1 -1
  46. package/dist/edit/odp/shape.cjs +11 -30
  47. package/dist/edit/odp/shape.d.cts +2 -2
  48. package/dist/edit/odp/shape.d.ts +2 -2
  49. package/dist/edit/odp/shape.js +13 -33
  50. package/dist/edit/odp/slide.cjs +11 -0
  51. package/dist/edit/odp/slide.d.cts +14 -4
  52. package/dist/edit/odp/slide.d.ts +14 -4
  53. package/dist/edit/odp/slide.js +12 -1
  54. package/dist/edit/odt/content.cjs +56 -16
  55. package/dist/edit/odt/content.d.cts +4 -2
  56. package/dist/edit/odt/content.d.ts +4 -2
  57. package/dist/edit/odt/content.js +56 -17
  58. package/dist/edit/odt/editor.d.cts +1 -1
  59. package/dist/edit/odt/editor.d.ts +1 -1
  60. package/dist/edit/odt/table.cjs +36 -0
  61. package/dist/edit/odt/table.d.cts +1 -36
  62. package/dist/edit/odt/table.d.ts +1 -36
  63. package/dist/edit/odt/table.js +37 -1
  64. package/dist/edit/pptx/content.cjs +71 -3
  65. package/dist/edit/pptx/content.js +71 -3
  66. package/dist/edit/pptx/editor.d.cts +1 -1
  67. package/dist/edit/pptx/editor.d.ts +1 -1
  68. package/dist/edit/pptx/image.d.cts +1 -1
  69. package/dist/edit/pptx/image.d.ts +1 -1
  70. package/dist/edit/pptx/shape.cjs +23 -1
  71. package/dist/edit/pptx/shape.d.cts +2 -2
  72. package/dist/edit/pptx/shape.d.ts +2 -2
  73. package/dist/edit/pptx/shape.js +23 -3
  74. package/dist/edit/pptx/slide.cjs +10 -1
  75. package/dist/edit/pptx/slide.d.cts +11 -4
  76. package/dist/edit/pptx/slide.d.ts +11 -4
  77. package/dist/edit/pptx/slide.js +10 -1
  78. package/dist/edit/pptx/table.cjs +136 -0
  79. package/dist/edit/pptx/table.d.cts +2 -0
  80. package/dist/edit/pptx/table.d.ts +2 -0
  81. package/dist/edit/pptx/table.js +131 -0
  82. package/dist/firebird/backup.d.cts +1 -1
  83. package/dist/firebird/backup.d.ts +1 -1
  84. package/dist/firebird/blr-types.cjs +2 -2
  85. package/dist/firebird/blr-types.d.cts +1 -1
  86. package/dist/firebird/blr-types.d.ts +1 -1
  87. package/dist/firebird/blr-types.js +2 -2
  88. package/dist/firebird/data.cjs +68 -14
  89. package/dist/firebird/data.d.cts +1 -1
  90. package/dist/firebird/data.d.ts +1 -1
  91. package/dist/firebird/data.js +68 -14
  92. package/dist/firebird/schema.cjs +13 -1
  93. package/dist/firebird/schema.d.cts +1 -1
  94. package/dist/firebird/schema.d.ts +1 -1
  95. package/dist/firebird/schema.js +13 -1
  96. package/dist/{geometry-DvwdrIij.d.cts → geometry-DaJr8yQW.d.cts} +2 -2
  97. package/dist/{geometry-DvwdrIij.d.ts → geometry-DaJr8yQW.d.ts} +2 -2
  98. package/dist/hsqldb/binary-script.cjs +154 -0
  99. package/dist/hsqldb/binary-script.d.cts +15 -0
  100. package/dist/hsqldb/binary-script.d.ts +15 -0
  101. package/dist/hsqldb/binary-script.js +151 -0
  102. package/dist/hsqldb/cache.cjs +18 -11
  103. package/dist/hsqldb/cache.d.cts +9 -4
  104. package/dist/hsqldb/cache.d.ts +9 -4
  105. package/dist/hsqldb/cache.js +18 -11
  106. package/dist/hsqldb/rowformat.cjs +60 -16
  107. package/dist/hsqldb/rowformat.d.cts +2 -21
  108. package/dist/hsqldb/rowformat.d.ts +2 -21
  109. package/dist/hsqldb/rowformat.js +60 -17
  110. package/dist/{image-BZDy72Jb.d.cts → image-7snmKIxn.d.cts} +1 -1
  111. package/dist/{image-B-xQWYYS.d.ts → image-Cs8xF753.d.ts} +1 -1
  112. package/dist/{image-CeqwL-Qs.d.ts → image-DHcA9kaK.d.ts} +1 -1
  113. package/dist/{image-DWX6cNOD.d.cts → image-M5SezZVI.d.cts} +1 -1
  114. package/dist/index.cjs +54 -3
  115. package/dist/index.d.cts +28 -20
  116. package/dist/index.d.ts +27 -19
  117. package/dist/index.js +13 -4
  118. package/dist/layout/cell-typing.cjs +209 -0
  119. package/dist/layout/cell-typing.d.cts +22 -0
  120. package/dist/layout/cell-typing.d.ts +22 -0
  121. package/dist/layout/cell-typing.js +208 -0
  122. package/dist/layout/drawing.cjs +193 -17
  123. package/dist/layout/drawing.js +193 -17
  124. package/dist/layout/engine.cjs +46 -29
  125. package/dist/layout/engine.d.cts +0 -2
  126. package/dist/layout/engine.d.ts +0 -2
  127. package/dist/layout/engine.js +47 -30
  128. package/dist/layout/lattice.cjs +139 -0
  129. package/dist/layout/lattice.d.cts +20 -0
  130. package/dist/layout/lattice.d.ts +20 -0
  131. package/dist/layout/lattice.js +135 -0
  132. package/dist/layout/reconstruct.cjs +176 -113
  133. package/dist/layout/reconstruct.d.cts +2 -0
  134. package/dist/layout/reconstruct.d.ts +2 -0
  135. package/dist/layout/reconstruct.js +173 -110
  136. package/dist/layout/shared.cjs +52 -0
  137. package/dist/layout/shared.d.cts +4 -2
  138. package/dist/layout/shared.d.ts +4 -2
  139. package/dist/layout/shared.js +51 -1
  140. package/dist/layout/sheets.cjs +45 -11
  141. package/dist/layout/sheets.js +46 -12
  142. package/dist/layout/slides.cjs +7 -7
  143. package/dist/layout/slides.d.cts +0 -3
  144. package/dist/layout/slides.d.ts +0 -3
  145. package/dist/layout/slides.js +7 -7
  146. package/dist/markdown/write.cjs +19 -6
  147. package/dist/markdown/write.js +19 -6
  148. package/dist/mathml/layout.cjs +43 -9
  149. package/dist/mathml/layout.d.cts +1 -1
  150. package/dist/mathml/layout.d.ts +1 -1
  151. package/dist/mathml/layout.js +43 -9
  152. package/dist/mathml/variant.cjs +48 -5
  153. package/dist/mathml/variant.js +48 -5
  154. package/dist/model/embedded-drawing.cjs +32 -0
  155. package/dist/model/embedded-drawing.d.cts +8 -0
  156. package/dist/model/embedded-drawing.d.ts +8 -0
  157. package/dist/model/embedded-drawing.js +30 -0
  158. package/dist/model/formula.cjs +31 -0
  159. package/dist/model/formula.d.cts +6 -6
  160. package/dist/model/formula.d.ts +6 -6
  161. package/dist/model/formula.js +27 -0
  162. package/dist/model/geometry.d.cts +1 -1
  163. package/dist/model/geometry.d.ts +1 -1
  164. package/dist/model/paint-order.cjs +15 -0
  165. package/dist/model/paint-order.d.cts +14 -0
  166. package/dist/model/paint-order.d.ts +14 -0
  167. package/dist/model/paint-order.js +14 -0
  168. package/dist/odb/components.cjs +12 -0
  169. package/dist/odb/components.d.cts +6 -0
  170. package/dist/odb/components.d.ts +6 -0
  171. package/dist/odb/components.js +10 -0
  172. package/dist/odb/read.cjs +11 -7
  173. package/dist/odb/read.d.cts +3 -2
  174. package/dist/odb/read.d.ts +3 -2
  175. package/dist/odb/read.js +11 -7
  176. package/dist/odf/formula/detect.cjs +86 -18
  177. package/dist/odf/formula/detect.d.cts +10 -6
  178. package/dist/odf/formula/detect.d.ts +10 -6
  179. package/dist/odf/formula/detect.js +86 -19
  180. package/dist/odf/formula/read.cjs +4 -16
  181. package/dist/odf/formula/read.d.cts +4 -8
  182. package/dist/odf/formula/read.d.ts +4 -8
  183. package/dist/odf/formula/read.js +5 -17
  184. package/dist/odf/odp/read.cjs +9 -19
  185. package/dist/odf/odp/read.d.cts +2 -7
  186. package/dist/odf/odp/read.d.ts +2 -7
  187. package/dist/odf/odp/read.js +10 -20
  188. package/dist/odf/odt/read.cjs +63 -23
  189. package/dist/odf/odt/read.d.cts +2 -7
  190. package/dist/odf/odt/read.d.ts +2 -7
  191. package/dist/odf/odt/read.js +64 -24
  192. package/dist/omml/write.cjs +258 -0
  193. package/dist/omml/write.d.cts +2 -0
  194. package/dist/omml/write.d.ts +2 -0
  195. package/dist/omml/write.js +256 -0
  196. package/dist/rowformat-Cl2exlEh.d.cts +25 -0
  197. package/dist/rowformat-Cl2exlEh.d.ts +25 -0
  198. package/dist/{schema-Acco3Ezi.d.cts → schema-BeR_KJ0X.d.cts} +3 -1
  199. package/dist/{schema-VkAA6pF5.d.ts → schema-CSKwSb_v.d.ts} +3 -1
  200. package/dist/{shape-BUfjw5eZ.d.cts → shape-BhkP6HB8.d.cts} +6 -2
  201. package/dist/{shape-CTkl6kt8.d.ts → shape-BkVcwPcf.d.ts} +6 -2
  202. package/dist/{shape-BfN3m52m.d.ts → shape-CVXedeL7.d.ts} +3 -2
  203. package/dist/{shape-CN2ycxOo.d.cts → shape-CXZ6fejV.d.cts} +3 -2
  204. package/dist/table-C3CPZ--2.d.cts +35 -0
  205. package/dist/table-DjYcNOFm.d.cts +44 -0
  206. package/dist/table-DqfqMkVq.d.ts +44 -0
  207. package/dist/table-DvS_7UQS.d.ts +35 -0
  208. package/dist/{vector-ClohqsOe.d.cts → vector-Puuqu_IT.d.cts} +4 -0
  209. package/dist/{vector-ClohqsOe.d.ts → vector-Puuqu_IT.d.ts} +4 -0
  210. package/dist/write-DuyfnbL_.d.cts +16 -0
  211. package/dist/write-Zqwx6pka.d.ts +16 -0
  212. package/package.json +4 -4
  213. package/dist/odf/formula/placeholder.cjs +0 -36
  214. package/dist/odf/formula/placeholder.d.cts +0 -14
  215. package/dist/odf/formula/placeholder.d.ts +0 -14
  216. package/dist/odf/formula/placeholder.js +0 -36
@@ -25,23 +25,71 @@ var FirebirdCompositeRecordUnsupportedError = class extends Error {
25
25
  this.recordType = recordType;
26
26
  }
27
27
  };
28
- function skipBlobRecord(reader) {
29
- let segmentCount;
28
+ function readBlobRecord(reader) {
29
+ const ATT_BLOB_FIELD_NUMBER = 3;
30
+ const ATT_BLOB_NUMBER_SEGMENTS = 5;
31
+ const ATT_BLOB_DATA = 7;
32
+ let fieldNumber;
33
+ let segmentCount = 0;
30
34
  for (;;) {
31
35
  const attribute = reader.readTag();
32
- if (attribute === 0) break;
33
- if (attribute === 5) segmentCount = reader.readInt32Attribute();
34
- else if (attribute === 7) {
35
- const count = segmentCount ?? 0;
36
- for (let i = 0; i < count; i++) {
37
- const length = reader.readBlobSegmentLength();
38
- reader.readRawPayload(length);
39
- }
40
- } else reader.skipAttributeValue();
36
+ if (attribute === ATT_BLOB_DATA) break;
37
+ if (attribute === ATT_BLOB_FIELD_NUMBER) fieldNumber = reader.readInt32Attribute();
38
+ else if (attribute === ATT_BLOB_NUMBER_SEGMENTS) segmentCount = reader.readInt32Attribute();
39
+ else reader.skipAttributeValue();
40
+ }
41
+ if (fieldNumber === void 0) throw new FirebirdDataParseError("a rec_blob record had no att_blob_field_number attribute, so its content cannot be attributed to a column");
42
+ const segments = [];
43
+ let total = 0;
44
+ for (let i = 0; i < segmentCount; i++) {
45
+ const length = reader.readBlobSegmentLength();
46
+ const segment = reader.readRawPayload(length);
47
+ segments.push(segment);
48
+ total += segment.length;
49
+ }
50
+ const bytes = new Uint8Array(total);
51
+ let offset = 0;
52
+ for (const segment of segments) {
53
+ bytes.set(segment, offset);
54
+ offset += segment.length;
41
55
  }
56
+ return {
57
+ fieldNumber,
58
+ bytes
59
+ };
60
+ }
61
+ const BINARY_BLOB_DATA_URI_PREFIX = "data:application/octet-stream;base64,";
62
+ const BLOB_SUB_TYPE_TEXT = 1;
63
+ const BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
64
+ function bytesToBase64(bytes) {
65
+ let result = "";
66
+ for (let i = 0; i < bytes.length; i += 3) {
67
+ const b0 = bytes[i] ?? 0;
68
+ const b1 = bytes[i + 1];
69
+ const b2 = bytes[i + 2];
70
+ const triple = b0 << 16 | (b1 ?? 0) << 8 | (b2 ?? 0);
71
+ result += BASE64_ALPHABET[triple >> 18 & 63] ?? "";
72
+ result += BASE64_ALPHABET[triple >> 12 & 63] ?? "";
73
+ result += b1 === void 0 ? "=" : BASE64_ALPHABET[triple >> 6 & 63] ?? "";
74
+ result += b2 === void 0 ? "=" : BASE64_ALPHABET[triple & 63] ?? "";
75
+ }
76
+ return result;
77
+ }
78
+ function blobCellValue(field, bytes) {
79
+ if (field.subType === BLOB_SUB_TYPE_TEXT) return {
80
+ kind: "string",
81
+ value: new TextDecoder("utf-8").decode(bytes)
82
+ };
83
+ return {
84
+ kind: "string",
85
+ value: `${BINARY_BLOB_DATA_URI_PREFIX}${bytesToBase64(bytes)}`
86
+ };
87
+ }
88
+ function storedFieldsOf(fields) {
89
+ return fields.filter((field) => !field.computed);
42
90
  }
43
91
  function decodeRowValues(fields, payload) {
44
- const storedFields = fields.filter((field) => !field.computed);
92
+ const storedFields = storedFieldsOf(fields);
45
93
  const xdr = new XdrReader(payload);
46
94
  const rawValues = [];
47
95
  for (const field of storedFields) switch (field.physicalType) {
@@ -170,10 +218,16 @@ function readRowGroup(reader, relation, compressed) {
170
218
  if (dataTag !== ATT_DATA_DATA) throw new FirebirdDataParseError(`relation "${relation.name}": expected att_data_data (tag ${ATT_DATA_DATA}), found tag ${dataTag}`);
171
219
  }
172
220
  const payload = compressed ? reader.readCompressedPayload(xdrLength) : reader.readRawPayload(xdrLength);
173
- rows.push(decodeRowValues(relation.fields, payload));
221
+ const values = decodeRowValues(relation.fields, payload);
222
+ rows.push(values);
174
223
  let next = reader.readTag();
175
224
  while (next === REC_BLOB) {
176
- skipBlobRecord(reader);
225
+ const blob = readBlobRecord(reader);
226
+ const storedFields = storedFieldsOf(relation.fields);
227
+ const columnIndex = storedFields.findIndex((field) => field.fieldNumber === blob.fieldNumber);
228
+ const field = storedFields[columnIndex];
229
+ if (field === void 0) throw new FirebirdDataParseError(`relation "${relation.name}": a rec_blob record names att_blob_field_number ${blob.fieldNumber}, which matches no field's own att_field_number in this relation`);
230
+ values[columnIndex] = blobCellValue(field, blob.bytes);
177
231
  next = reader.readTag();
178
232
  }
179
233
  if (next !== REC_DATA) {
@@ -12,8 +12,10 @@ var FirebirdSchemaParseError = class extends Error {
12
12
  const ATT_RELATION_NAME = 1;
13
13
  const ATT_FIELD_NAME = 1;
14
14
  const ATT_FIELD_TYPE = 8;
15
+ const ATT_FIELD_SUB_TYPE = 9;
15
16
  const ATT_FIELD_LENGTH = 10;
16
17
  const ATT_FIELD_SCALE = 11;
18
+ const ATT_FIELD_NUMBER = 22;
17
19
  const ATT_FIELD_COMPUTED_FLAG = 23;
18
20
  const ATT_FIELD_CHARACTER_LENGTH = 41;
19
21
  function readField(reader) {
@@ -22,6 +24,8 @@ function readField(reader) {
22
24
  let lengthBytes = 0;
23
25
  let scale = 0;
24
26
  let characterLength;
27
+ let subType = 0;
28
+ let fieldNumber;
25
29
  let computed = false;
26
30
  for (;;) {
27
31
  const attribute = reader.readTag();
@@ -33,9 +37,15 @@ function readField(reader) {
33
37
  case ATT_FIELD_TYPE:
34
38
  blrType = reader.readInt32Attribute();
35
39
  break;
40
+ case ATT_FIELD_SUB_TYPE:
41
+ subType = reader.readInt32Attribute();
42
+ break;
36
43
  case ATT_FIELD_LENGTH:
37
44
  lengthBytes = reader.readInt32Attribute();
38
45
  break;
46
+ case ATT_FIELD_NUMBER:
47
+ fieldNumber = reader.readInt32Attribute();
48
+ break;
39
49
  case ATT_FIELD_SCALE:
40
50
  scale = reader.readInt32Attribute();
41
51
  break;
@@ -51,13 +61,15 @@ function readField(reader) {
51
61
  if (name === void 0) throw new FirebirdSchemaParseError("a rec_field record had no att_field_name attribute");
52
62
  if (blrType === void 0) throw new FirebirdSchemaParseError(`field "${name}" had no att_field_type attribute`);
53
63
  const physicalType = require_firebird_blr_types.decodeBlrType(blrType);
54
- const typeLabel = require_firebird_blr_types.describeFieldType(physicalType, lengthBytes, scale, characterLength);
64
+ const typeLabel = require_firebird_blr_types.describeFieldType(physicalType, lengthBytes, scale, characterLength, subType);
55
65
  return {
56
66
  name,
57
67
  physicalType,
58
68
  lengthBytes,
59
69
  scale,
60
70
  characterLength,
71
+ subType,
72
+ fieldNumber,
61
73
  typeLabel,
62
74
  computed
63
75
  };
@@ -1,2 +1,2 @@
1
- import { i as readRelationSchema, n as FirebirdRelation, r as FirebirdSchemaParseError, t as FirebirdField } from "../schema-Acco3Ezi.cjs";
1
+ import { i as readRelationSchema, n as FirebirdRelation, r as FirebirdSchemaParseError, t as FirebirdField } from "../schema-BeR_KJ0X.cjs";
2
2
  export { FirebirdField, FirebirdRelation, FirebirdSchemaParseError, readRelationSchema };
@@ -1,2 +1,2 @@
1
- import { i as readRelationSchema, n as FirebirdRelation, r as FirebirdSchemaParseError, t as FirebirdField } from "../schema-VkAA6pF5.js";
1
+ import { i as readRelationSchema, n as FirebirdRelation, r as FirebirdSchemaParseError, t as FirebirdField } from "../schema-CSKwSb_v.js";
2
2
  export { FirebirdField, FirebirdRelation, FirebirdSchemaParseError, readRelationSchema };
@@ -11,8 +11,10 @@ var FirebirdSchemaParseError = class extends Error {
11
11
  const ATT_RELATION_NAME = 1;
12
12
  const ATT_FIELD_NAME = 1;
13
13
  const ATT_FIELD_TYPE = 8;
14
+ const ATT_FIELD_SUB_TYPE = 9;
14
15
  const ATT_FIELD_LENGTH = 10;
15
16
  const ATT_FIELD_SCALE = 11;
17
+ const ATT_FIELD_NUMBER = 22;
16
18
  const ATT_FIELD_COMPUTED_FLAG = 23;
17
19
  const ATT_FIELD_CHARACTER_LENGTH = 41;
18
20
  function readField(reader) {
@@ -21,6 +23,8 @@ function readField(reader) {
21
23
  let lengthBytes = 0;
22
24
  let scale = 0;
23
25
  let characterLength;
26
+ let subType = 0;
27
+ let fieldNumber;
24
28
  let computed = false;
25
29
  for (;;) {
26
30
  const attribute = reader.readTag();
@@ -32,9 +36,15 @@ function readField(reader) {
32
36
  case ATT_FIELD_TYPE:
33
37
  blrType = reader.readInt32Attribute();
34
38
  break;
39
+ case ATT_FIELD_SUB_TYPE:
40
+ subType = reader.readInt32Attribute();
41
+ break;
35
42
  case ATT_FIELD_LENGTH:
36
43
  lengthBytes = reader.readInt32Attribute();
37
44
  break;
45
+ case ATT_FIELD_NUMBER:
46
+ fieldNumber = reader.readInt32Attribute();
47
+ break;
38
48
  case ATT_FIELD_SCALE:
39
49
  scale = reader.readInt32Attribute();
40
50
  break;
@@ -50,13 +60,15 @@ function readField(reader) {
50
60
  if (name === void 0) throw new FirebirdSchemaParseError("a rec_field record had no att_field_name attribute");
51
61
  if (blrType === void 0) throw new FirebirdSchemaParseError(`field "${name}" had no att_field_type attribute`);
52
62
  const physicalType = decodeBlrType(blrType);
53
- const typeLabel = describeFieldType(physicalType, lengthBytes, scale, characterLength);
63
+ const typeLabel = describeFieldType(physicalType, lengthBytes, scale, characterLength, subType);
54
64
  return {
55
65
  name,
56
66
  physicalType,
57
67
  lengthBytes,
58
68
  scale,
59
69
  characterLength,
70
+ subType,
71
+ fieldNumber,
60
72
  typeLabel,
61
73
  computed
62
74
  };
@@ -1,5 +1,5 @@
1
- import { Box, Box as Box$1, BoxSchema, Margins, MarginsSchema, PAGE_SIZE_A4, PAGE_SIZE_LETTER, PageSize, PageSizeSchema, SLIDE_SIZE_STANDARD, SLIDE_SIZE_WIDESCREEN } from "document-schema.js";
1
+ import { Box, Box as Box$1, BoxSchema, Margins, MarginsSchema, PAGE_SIZE_A4, PAGE_SIZE_LETTER, PageSize as PageSize$1, PageSizeSchema, SLIDE_SIZE_STANDARD, SLIDE_SIZE_WIDESCREEN } from "document-schema.js";
2
2
  //#region src/model/geometry.d.ts
3
3
  declare function flipY(box: Box, containerHeightPt: number): Box;
4
4
  //#endregion
5
- export { PAGE_SIZE_A4 as a, PageSizeSchema as c, flipY as d, MarginsSchema as i, SLIDE_SIZE_STANDARD as l, BoxSchema as n, PAGE_SIZE_LETTER as o, Margins as r, PageSize as s, Box$1 as t, SLIDE_SIZE_WIDESCREEN as u };
5
+ export { PAGE_SIZE_A4 as a, PageSizeSchema as c, flipY as d, MarginsSchema as i, SLIDE_SIZE_STANDARD as l, BoxSchema as n, PAGE_SIZE_LETTER as o, Margins as r, PageSize$1 as s, Box$1 as t, SLIDE_SIZE_WIDESCREEN as u };
@@ -1,5 +1,5 @@
1
- import { Box, Box as Box$1, BoxSchema, Margins, MarginsSchema, PAGE_SIZE_A4, PAGE_SIZE_LETTER, PageSize, PageSizeSchema, SLIDE_SIZE_STANDARD, SLIDE_SIZE_WIDESCREEN } from "document-schema.js";
1
+ import { Box, Box as Box$1, BoxSchema, Margins, MarginsSchema, PAGE_SIZE_A4, PAGE_SIZE_LETTER, PageSize as PageSize$1, PageSizeSchema, SLIDE_SIZE_STANDARD, SLIDE_SIZE_WIDESCREEN } from "document-schema.js";
2
2
  //#region src/model/geometry.d.ts
3
3
  declare function flipY(box: Box, containerHeightPt: number): Box;
4
4
  //#endregion
5
- export { PAGE_SIZE_A4 as a, PageSizeSchema as c, flipY as d, MarginsSchema as i, SLIDE_SIZE_STANDARD as l, BoxSchema as n, PAGE_SIZE_LETTER as o, Margins as r, PageSize as s, Box$1 as t, SLIDE_SIZE_WIDESCREEN as u };
5
+ export { PAGE_SIZE_A4 as a, PageSizeSchema as c, flipY as d, MarginsSchema as i, SLIDE_SIZE_STANDARD as l, BoxSchema as n, PAGE_SIZE_LETTER as o, Margins as r, PageSize$1 as s, Box$1 as t, SLIDE_SIZE_WIDESCREEN as u };
@@ -0,0 +1,154 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_hsqldb_script = require("./script.cjs");
3
+ const require_hsqldb_rowformat = require("./rowformat.cjs");
4
+ let fflate = require("fflate");
5
+ //#region src/hsqldb/binary-script.ts
6
+ var HsqldbBinaryScriptParseError = class extends Error {
7
+ offset;
8
+ constructor(message, offset) {
9
+ super(`HSQLDB binary script parse error at byte offset ${offset}: ${message}`);
10
+ this.name = "HsqldbBinaryScriptParseError";
11
+ this.offset = offset;
12
+ }
13
+ };
14
+ const RESULT_MODE_DATA = 3;
15
+ const SQL_TYPE_VARCHAR = 12;
16
+ const TABLE_INIT_WITH_SCHEMA = 1;
17
+ const TABLE_INIT_WITHOUT_SCHEMA = 0;
18
+ var BinaryScriptCursor = class {
19
+ cursor;
20
+ length;
21
+ constructor(bytes) {
22
+ this.cursor = new require_hsqldb_rowformat.HsqldbDataCursor(bytes);
23
+ this.length = bytes.length;
24
+ }
25
+ get position() {
26
+ return this.cursor.position;
27
+ }
28
+ set position(value) {
29
+ this.cursor.position = value;
30
+ }
31
+ hasRecordLength() {
32
+ return this.cursor.position + 4 <= this.length;
33
+ }
34
+ require(byteCount, what) {
35
+ if (this.cursor.position + byteCount > this.length) throw new HsqldbBinaryScriptParseError(`stream ends after ${this.length} bytes while reading ${what} (${byteCount} byte(s) needed)`, this.cursor.position);
36
+ }
37
+ readInt32(what) {
38
+ this.require(4, what);
39
+ return this.cursor.readInt32();
40
+ }
41
+ readInt16(what) {
42
+ this.require(2, what);
43
+ return this.cursor.readInt16();
44
+ }
45
+ readString(what) {
46
+ const byteLength = this.readInt32(`${what}'s own length prefix`);
47
+ if (byteLength < 0) throw new HsqldbBinaryScriptParseError(`${what} declares a negative length ${byteLength}`, this.cursor.position);
48
+ this.require(byteLength, what);
49
+ return require_hsqldb_rowformat.readModifiedUtf8(this.cursor.readBytes(byteLength));
50
+ }
51
+ };
52
+ function readResultMetaData(reader) {
53
+ const columnCount = reader.readInt32("the DDL result's own column count");
54
+ if (columnCount < 0) throw new HsqldbBinaryScriptParseError(`the DDL result declares a negative column count ${columnCount}`, reader.position);
55
+ const columnTypes = [];
56
+ for (let i = 0; i < columnCount; i++) {
57
+ columnTypes.push(reader.readInt16(`column ${i}'s own SQL type`));
58
+ reader.readInt32(`column ${i}'s own declared size`);
59
+ reader.readInt32(`column ${i}'s own declared scale`);
60
+ reader.readString(`column ${i}'s own label`);
61
+ const tableName = reader.readString(`column ${i}'s own table name`);
62
+ const columnName = reader.readString(`column ${i}'s own name`);
63
+ reader.readString(`column ${i}'s own class name`);
64
+ if (tableName.length > 0 && columnName.length > 0) {
65
+ reader.readInt32(`column ${i}'s own table-column attribute mask`);
66
+ reader.readString(`column ${i}'s own catalog name`);
67
+ reader.readString(`column ${i}'s own schema name`);
68
+ }
69
+ }
70
+ return columnTypes;
71
+ }
72
+ function readDdlStatements(reader) {
73
+ const recordStart = reader.position;
74
+ const recordLength = reader.readInt32("the leading DDL result record's own length");
75
+ if (recordLength <= 4) throw new HsqldbBinaryScriptParseError(`the leading DDL result record declares an implausible length ${recordLength} -- not a recognisable HSQLDB binary script`, recordStart);
76
+ const mode = reader.readInt32("the DDL result's own mode");
77
+ if (mode !== RESULT_MODE_DATA) throw new HsqldbBinaryScriptParseError(`the leading record has Result mode ${mode}, not the DATA mode (${RESULT_MODE_DATA}) a script's own DDL result always carries -- not a recognisable HSQLDB binary script`, recordStart);
78
+ reader.readInt32("the DDL result's own database id");
79
+ reader.readInt32("the DDL result's own session id");
80
+ const columnTypes = readResultMetaData(reader);
81
+ const firstColumnType = columnTypes[0];
82
+ if (columnTypes.length !== 1 || firstColumnType !== SQL_TYPE_VARCHAR) throw new HsqldbBinaryScriptParseError(`the DDL result has ${columnTypes.length} column(s) of type [${columnTypes.join(", ")}] -- a script's own DDL result is always the single VARCHAR "COMMAND" column DatabaseScript.getScript builds`, recordStart);
83
+ const rowCount = reader.readInt32("the DDL result's own row count");
84
+ if (rowCount < 0) throw new HsqldbBinaryScriptParseError(`the DDL result declares a negative row count ${rowCount}`, reader.position);
85
+ const statements = [];
86
+ for (let i = 0; i < rowCount; i++) {
87
+ reader.require(1, `DDL statement ${i}`);
88
+ const value = require_hsqldb_rowformat.readHsqldbColumnValue(reader.cursor, SQL_TYPE_VARCHAR);
89
+ if (value.kind !== "string") throw new HsqldbBinaryScriptParseError(`DDL statement ${i} decoded as a ${value.kind} value rather than a string`, reader.position);
90
+ statements.push(value.value);
91
+ }
92
+ const recordEnd = recordStart + recordLength;
93
+ if (reader.position > recordEnd) throw new HsqldbBinaryScriptParseError(`the DDL result overran its own declared length (consumed ${reader.position - recordStart} bytes, declared ${recordLength})`, reader.position);
94
+ reader.position = recordEnd;
95
+ return statements;
96
+ }
97
+ function readTableSection(reader, tables, options) {
98
+ if (!reader.hasRecordLength()) return;
99
+ if (reader.readInt32("a table section's own init record length") === 0) return;
100
+ const tableName = reader.readString("a table section's own table name");
101
+ const schemaFlag = reader.readInt32(`table "${tableName}"'s own schema-presence flag`);
102
+ if (schemaFlag !== TABLE_INIT_WITH_SCHEMA && schemaFlag !== TABLE_INIT_WITHOUT_SCHEMA) throw new HsqldbBinaryScriptParseError(`table "${tableName}"'s init record has schema flag ${schemaFlag}, which is neither ${TABLE_INIT_WITHOUT_SCHEMA} nor ${TABLE_INIT_WITH_SCHEMA}`, reader.position);
103
+ if (schemaFlag === TABLE_INIT_WITH_SCHEMA) reader.readString(`table "${tableName}"'s own schema name`);
104
+ const table = tables.get(tableName.toUpperCase());
105
+ if (table === void 0) throw new HsqldbBinaryScriptParseError(`the data section declares rows for table "${tableName}", which the script's own DDL never declared`, reader.position);
106
+ const typeCodes = table.columns.map((column) => require_hsqldb_rowformat.resolveHsqldbTypeCode(column.type));
107
+ const rows = [];
108
+ for (;;) {
109
+ const rowStart = reader.position;
110
+ const rowLength = reader.readInt32(`a row length in table "${tableName}"`);
111
+ if (rowLength === 0) break;
112
+ if (rowLength < 0) throw new HsqldbBinaryScriptParseError(`a row in table "${tableName}" declares a negative length ${rowLength}`, rowStart);
113
+ const rowEnd = rowStart + rowLength;
114
+ reader.require(rowLength - 4, `a row in table "${tableName}"`);
115
+ rows.push(typeCodes.map((typeCode) => require_hsqldb_rowformat.readHsqldbColumnValue(reader.cursor, typeCode, options)));
116
+ if (reader.position > rowEnd) throw new HsqldbBinaryScriptParseError(`a row in table "${tableName}" overran its own declared length (consumed ${reader.position - rowStart} bytes, declared ${rowLength})`, reader.position);
117
+ reader.position = rowEnd;
118
+ }
119
+ const declaredRowCount = reader.readInt32(`table "${tableName}"'s own trailing row count`);
120
+ if (declaredRowCount !== rows.length) throw new HsqldbBinaryScriptParseError(`table "${tableName}" declares ${declaredRowCount} row(s) in its own terminator but the section carried ${rows.length}`, reader.position);
121
+ return {
122
+ tableName,
123
+ rows
124
+ };
125
+ }
126
+ function parseHsqldbBinaryScript(bytes, options) {
127
+ const reader = new BinaryScriptCursor(bytes);
128
+ const scriptText = readDdlStatements(reader).join("\n");
129
+ const tables = require_hsqldb_script.parseHsqldbScript(new TextEncoder().encode(scriptText));
130
+ const tablesByName = new Map(tables.map((table) => [table.tableName.toUpperCase(), table]));
131
+ const rowsByTable = /* @__PURE__ */ new Map();
132
+ for (;;) {
133
+ const section = readTableSection(reader, tablesByName, options);
134
+ if (section === void 0) break;
135
+ rowsByTable.set(section.tableName.toUpperCase(), section.rows);
136
+ }
137
+ return {
138
+ scriptText,
139
+ tables: tables.map((table) => {
140
+ const rows = rowsByTable.get(table.tableName.toUpperCase());
141
+ return rows === void 0 ? table : {
142
+ ...table,
143
+ rows
144
+ };
145
+ })
146
+ };
147
+ }
148
+ function inflateHsqldbCompressedScript(bytes) {
149
+ return (0, fflate.unzlibSync)(bytes);
150
+ }
151
+ //#endregion
152
+ exports.HsqldbBinaryScriptParseError = HsqldbBinaryScriptParseError;
153
+ exports.inflateHsqldbCompressedScript = inflateHsqldbCompressedScript;
154
+ exports.parseHsqldbBinaryScript = parseHsqldbBinaryScript;
@@ -0,0 +1,15 @@
1
+ import { n as HsqldbDecodeOptions } from "../rowformat-Cl2exlEh.cjs";
2
+ import { HsqldbTable } from "./script.cjs";
3
+ //#region src/hsqldb/binary-script.d.ts
4
+ declare class HsqldbBinaryScriptParseError extends Error {
5
+ readonly offset: number;
6
+ constructor(message: string, offset: number);
7
+ }
8
+ interface HsqldbBinaryScript {
9
+ readonly scriptText: string;
10
+ readonly tables: readonly HsqldbTable[];
11
+ }
12
+ declare function parseHsqldbBinaryScript(bytes: Uint8Array<ArrayBuffer>, options?: HsqldbDecodeOptions): HsqldbBinaryScript;
13
+ declare function inflateHsqldbCompressedScript(bytes: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer>;
14
+ //#endregion
15
+ export { HsqldbBinaryScript, HsqldbBinaryScriptParseError, inflateHsqldbCompressedScript, parseHsqldbBinaryScript };
@@ -0,0 +1,15 @@
1
+ import { n as HsqldbDecodeOptions } from "../rowformat-Cl2exlEh.js";
2
+ import { HsqldbTable } from "./script.js";
3
+ //#region src/hsqldb/binary-script.d.ts
4
+ declare class HsqldbBinaryScriptParseError extends Error {
5
+ readonly offset: number;
6
+ constructor(message: string, offset: number);
7
+ }
8
+ interface HsqldbBinaryScript {
9
+ readonly scriptText: string;
10
+ readonly tables: readonly HsqldbTable[];
11
+ }
12
+ declare function parseHsqldbBinaryScript(bytes: Uint8Array<ArrayBuffer>, options?: HsqldbDecodeOptions): HsqldbBinaryScript;
13
+ declare function inflateHsqldbCompressedScript(bytes: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer>;
14
+ //#endregion
15
+ export { HsqldbBinaryScript, HsqldbBinaryScriptParseError, inflateHsqldbCompressedScript, parseHsqldbBinaryScript };
@@ -0,0 +1,151 @@
1
+ import { parseHsqldbScript } from "./script.js";
2
+ import { HsqldbDataCursor, readHsqldbColumnValue, readModifiedUtf8, resolveHsqldbTypeCode } from "./rowformat.js";
3
+ import { unzlibSync } from "fflate";
4
+ //#region src/hsqldb/binary-script.ts
5
+ var HsqldbBinaryScriptParseError = class extends Error {
6
+ offset;
7
+ constructor(message, offset) {
8
+ super(`HSQLDB binary script parse error at byte offset ${offset}: ${message}`);
9
+ this.name = "HsqldbBinaryScriptParseError";
10
+ this.offset = offset;
11
+ }
12
+ };
13
+ const RESULT_MODE_DATA = 3;
14
+ const SQL_TYPE_VARCHAR = 12;
15
+ const TABLE_INIT_WITH_SCHEMA = 1;
16
+ const TABLE_INIT_WITHOUT_SCHEMA = 0;
17
+ var BinaryScriptCursor = class {
18
+ cursor;
19
+ length;
20
+ constructor(bytes) {
21
+ this.cursor = new HsqldbDataCursor(bytes);
22
+ this.length = bytes.length;
23
+ }
24
+ get position() {
25
+ return this.cursor.position;
26
+ }
27
+ set position(value) {
28
+ this.cursor.position = value;
29
+ }
30
+ hasRecordLength() {
31
+ return this.cursor.position + 4 <= this.length;
32
+ }
33
+ require(byteCount, what) {
34
+ if (this.cursor.position + byteCount > this.length) throw new HsqldbBinaryScriptParseError(`stream ends after ${this.length} bytes while reading ${what} (${byteCount} byte(s) needed)`, this.cursor.position);
35
+ }
36
+ readInt32(what) {
37
+ this.require(4, what);
38
+ return this.cursor.readInt32();
39
+ }
40
+ readInt16(what) {
41
+ this.require(2, what);
42
+ return this.cursor.readInt16();
43
+ }
44
+ readString(what) {
45
+ const byteLength = this.readInt32(`${what}'s own length prefix`);
46
+ if (byteLength < 0) throw new HsqldbBinaryScriptParseError(`${what} declares a negative length ${byteLength}`, this.cursor.position);
47
+ this.require(byteLength, what);
48
+ return readModifiedUtf8(this.cursor.readBytes(byteLength));
49
+ }
50
+ };
51
+ function readResultMetaData(reader) {
52
+ const columnCount = reader.readInt32("the DDL result's own column count");
53
+ if (columnCount < 0) throw new HsqldbBinaryScriptParseError(`the DDL result declares a negative column count ${columnCount}`, reader.position);
54
+ const columnTypes = [];
55
+ for (let i = 0; i < columnCount; i++) {
56
+ columnTypes.push(reader.readInt16(`column ${i}'s own SQL type`));
57
+ reader.readInt32(`column ${i}'s own declared size`);
58
+ reader.readInt32(`column ${i}'s own declared scale`);
59
+ reader.readString(`column ${i}'s own label`);
60
+ const tableName = reader.readString(`column ${i}'s own table name`);
61
+ const columnName = reader.readString(`column ${i}'s own name`);
62
+ reader.readString(`column ${i}'s own class name`);
63
+ if (tableName.length > 0 && columnName.length > 0) {
64
+ reader.readInt32(`column ${i}'s own table-column attribute mask`);
65
+ reader.readString(`column ${i}'s own catalog name`);
66
+ reader.readString(`column ${i}'s own schema name`);
67
+ }
68
+ }
69
+ return columnTypes;
70
+ }
71
+ function readDdlStatements(reader) {
72
+ const recordStart = reader.position;
73
+ const recordLength = reader.readInt32("the leading DDL result record's own length");
74
+ if (recordLength <= 4) throw new HsqldbBinaryScriptParseError(`the leading DDL result record declares an implausible length ${recordLength} -- not a recognisable HSQLDB binary script`, recordStart);
75
+ const mode = reader.readInt32("the DDL result's own mode");
76
+ if (mode !== RESULT_MODE_DATA) throw new HsqldbBinaryScriptParseError(`the leading record has Result mode ${mode}, not the DATA mode (${RESULT_MODE_DATA}) a script's own DDL result always carries -- not a recognisable HSQLDB binary script`, recordStart);
77
+ reader.readInt32("the DDL result's own database id");
78
+ reader.readInt32("the DDL result's own session id");
79
+ const columnTypes = readResultMetaData(reader);
80
+ const firstColumnType = columnTypes[0];
81
+ if (columnTypes.length !== 1 || firstColumnType !== SQL_TYPE_VARCHAR) throw new HsqldbBinaryScriptParseError(`the DDL result has ${columnTypes.length} column(s) of type [${columnTypes.join(", ")}] -- a script's own DDL result is always the single VARCHAR "COMMAND" column DatabaseScript.getScript builds`, recordStart);
82
+ const rowCount = reader.readInt32("the DDL result's own row count");
83
+ if (rowCount < 0) throw new HsqldbBinaryScriptParseError(`the DDL result declares a negative row count ${rowCount}`, reader.position);
84
+ const statements = [];
85
+ for (let i = 0; i < rowCount; i++) {
86
+ reader.require(1, `DDL statement ${i}`);
87
+ const value = readHsqldbColumnValue(reader.cursor, SQL_TYPE_VARCHAR);
88
+ if (value.kind !== "string") throw new HsqldbBinaryScriptParseError(`DDL statement ${i} decoded as a ${value.kind} value rather than a string`, reader.position);
89
+ statements.push(value.value);
90
+ }
91
+ const recordEnd = recordStart + recordLength;
92
+ if (reader.position > recordEnd) throw new HsqldbBinaryScriptParseError(`the DDL result overran its own declared length (consumed ${reader.position - recordStart} bytes, declared ${recordLength})`, reader.position);
93
+ reader.position = recordEnd;
94
+ return statements;
95
+ }
96
+ function readTableSection(reader, tables, options) {
97
+ if (!reader.hasRecordLength()) return;
98
+ if (reader.readInt32("a table section's own init record length") === 0) return;
99
+ const tableName = reader.readString("a table section's own table name");
100
+ const schemaFlag = reader.readInt32(`table "${tableName}"'s own schema-presence flag`);
101
+ if (schemaFlag !== TABLE_INIT_WITH_SCHEMA && schemaFlag !== TABLE_INIT_WITHOUT_SCHEMA) throw new HsqldbBinaryScriptParseError(`table "${tableName}"'s init record has schema flag ${schemaFlag}, which is neither ${TABLE_INIT_WITHOUT_SCHEMA} nor ${TABLE_INIT_WITH_SCHEMA}`, reader.position);
102
+ if (schemaFlag === TABLE_INIT_WITH_SCHEMA) reader.readString(`table "${tableName}"'s own schema name`);
103
+ const table = tables.get(tableName.toUpperCase());
104
+ if (table === void 0) throw new HsqldbBinaryScriptParseError(`the data section declares rows for table "${tableName}", which the script's own DDL never declared`, reader.position);
105
+ const typeCodes = table.columns.map((column) => resolveHsqldbTypeCode(column.type));
106
+ const rows = [];
107
+ for (;;) {
108
+ const rowStart = reader.position;
109
+ const rowLength = reader.readInt32(`a row length in table "${tableName}"`);
110
+ if (rowLength === 0) break;
111
+ if (rowLength < 0) throw new HsqldbBinaryScriptParseError(`a row in table "${tableName}" declares a negative length ${rowLength}`, rowStart);
112
+ const rowEnd = rowStart + rowLength;
113
+ reader.require(rowLength - 4, `a row in table "${tableName}"`);
114
+ rows.push(typeCodes.map((typeCode) => readHsqldbColumnValue(reader.cursor, typeCode, options)));
115
+ if (reader.position > rowEnd) throw new HsqldbBinaryScriptParseError(`a row in table "${tableName}" overran its own declared length (consumed ${reader.position - rowStart} bytes, declared ${rowLength})`, reader.position);
116
+ reader.position = rowEnd;
117
+ }
118
+ const declaredRowCount = reader.readInt32(`table "${tableName}"'s own trailing row count`);
119
+ if (declaredRowCount !== rows.length) throw new HsqldbBinaryScriptParseError(`table "${tableName}" declares ${declaredRowCount} row(s) in its own terminator but the section carried ${rows.length}`, reader.position);
120
+ return {
121
+ tableName,
122
+ rows
123
+ };
124
+ }
125
+ function parseHsqldbBinaryScript(bytes, options) {
126
+ const reader = new BinaryScriptCursor(bytes);
127
+ const scriptText = readDdlStatements(reader).join("\n");
128
+ const tables = parseHsqldbScript(new TextEncoder().encode(scriptText));
129
+ const tablesByName = new Map(tables.map((table) => [table.tableName.toUpperCase(), table]));
130
+ const rowsByTable = /* @__PURE__ */ new Map();
131
+ for (;;) {
132
+ const section = readTableSection(reader, tablesByName, options);
133
+ if (section === void 0) break;
134
+ rowsByTable.set(section.tableName.toUpperCase(), section.rows);
135
+ }
136
+ return {
137
+ scriptText,
138
+ tables: tables.map((table) => {
139
+ const rows = rowsByTable.get(table.tableName.toUpperCase());
140
+ return rows === void 0 ? table : {
141
+ ...table,
142
+ rows
143
+ };
144
+ })
145
+ };
146
+ }
147
+ function inflateHsqldbCompressedScript(bytes) {
148
+ return unzlibSync(bytes);
149
+ }
150
+ //#endregion
151
+ export { HsqldbBinaryScriptParseError, inflateHsqldbCompressedScript, parseHsqldbBinaryScript };
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_hsqldb_rowformat = require("./rowformat.cjs");
3
3
  //#region src/hsqldb/cache.ts
4
4
  const SUPPORTED_COMPATIBLE_VERSION_PREFIXES = ["1.7.", "1.8."];
5
+ const DISK_NODE_SIZE_BYTES = 16;
5
6
  function parseHsqldbProperties(text) {
6
7
  const props = /* @__PURE__ */ new Map();
7
8
  for (const rawLine of text.split("\n")) {
@@ -32,17 +33,22 @@ function parseHsqldbIndexRoots(scriptText) {
32
33
  const tokensText = match[2] ?? "";
33
34
  const tableName = unquoteIdentifier(rawName).toUpperCase();
34
35
  const tokens = tokensText.trim().length === 0 ? [] : tokensText.trim().split(/\s+/);
35
- if (tokens.length !== 2) throw new require_hsqldb_rowformat.HsqldbRowFormatError(`table "${tableName}" declares ${Math.max(tokens.length - 1, 0)} index root(s) in its SET TABLE...INDEX line -- only a single-index (primary-key-only) CACHED table is supported`);
36
+ if (tokens.length < 2) throw new require_hsqldb_rowformat.HsqldbRowFormatError(`table "${tableName}"'s SET TABLE...INDEX line has ${tokens.length} token(s) -- every such line carries at least one index root position followed by the table's own identity-sequence value`);
37
+ const indexCount = tokens.length - 1;
36
38
  const rootToken = tokens[0] ?? "";
37
- const rootPos = Number(rootToken);
38
- if (!Number.isInteger(rootPos)) throw new require_hsqldb_rowformat.HsqldbRowFormatError(`table "${tableName}"'s SET TABLE...INDEX line has a non-integer root position "${rootToken}"`);
39
- roots.set(tableName, rootPos);
39
+ const rootPosition = Number(rootToken);
40
+ if (!Number.isInteger(rootPosition)) throw new require_hsqldb_rowformat.HsqldbRowFormatError(`table "${tableName}"'s SET TABLE...INDEX line has a non-integer root position "${rootToken}"`);
41
+ roots.set(tableName, {
42
+ rootPosition,
43
+ indexCount
44
+ });
40
45
  }
41
46
  return roots;
42
47
  }
43
- function readHsqldbCachedTableRows(dataBytes, rootPos, cacheFileScale, columns) {
48
+ function readHsqldbCachedTableRows(dataBytes, roots, cacheFileScale, columns, options) {
44
49
  const typeCodes = columns.map((column) => require_hsqldb_rowformat.resolveHsqldbTypeCode(column.type));
45
50
  const results = [];
51
+ const trailingNodeBytes = (roots.indexCount - 1) * DISK_NODE_SIZE_BYTES;
46
52
  function visit(pos) {
47
53
  if (pos <= 0) return;
48
54
  const byteOffset = pos * cacheFileScale;
@@ -55,26 +61,27 @@ function readHsqldbCachedTableRows(dataBytes, rootPos, cacheFileScale, columns)
55
61
  const iLeft = cursor.readInt32();
56
62
  const iRight = cursor.readInt32();
57
63
  cursor.readInt32();
64
+ cursor.position += trailingNodeBytes;
58
65
  const values = columns.map((_column, index) => {
59
66
  const typeCode = typeCodes[index];
60
67
  if (typeCode === void 0) throw new require_hsqldb_rowformat.HsqldbRowFormatError("internal error: column/type-code alignment failure");
61
- return require_hsqldb_rowformat.readHsqldbColumnValue(cursor, typeCode);
68
+ return require_hsqldb_rowformat.readHsqldbColumnValue(cursor, typeCode, options);
62
69
  });
63
70
  if (cursor.position > rowEnd) throw new require_hsqldb_rowformat.HsqldbRowFormatError(`row at position ${pos} overran its own declared storage size (consumed ${cursor.position - byteOffset} bytes, declared ${storageSize})`);
64
71
  visit(iLeft);
65
72
  results.push(values);
66
73
  visit(iRight);
67
74
  }
68
- visit(rootPos);
75
+ visit(roots.rootPosition);
69
76
  return results;
70
77
  }
71
- function decodeHsqldbCachedTables(tables, scriptText, dataBytes, propertiesText) {
78
+ function decodeHsqldbCachedTables(tables, scriptText, dataBytes, propertiesText, options) {
72
79
  const { cacheFileScale } = parseHsqldbProperties(propertiesText);
73
80
  const roots = parseHsqldbIndexRoots(scriptText);
74
81
  return tables.map((table) => {
75
- const rootPos = roots.get(table.tableName.toUpperCase());
76
- if (rootPos === void 0) return table;
77
- const rows = readHsqldbCachedTableRows(dataBytes, rootPos, cacheFileScale, table.columns);
82
+ const tableRoots = roots.get(table.tableName.toUpperCase());
83
+ if (tableRoots === void 0) return table;
84
+ const rows = readHsqldbCachedTableRows(dataBytes, tableRoots, cacheFileScale, table.columns, options);
78
85
  return {
79
86
  ...table,
80
87
  rows