@ifc-lite/server-client 3.1.0 → 4.0.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 (48) hide show
  1. package/README.md +17 -0
  2. package/dist/client.d.ts +21 -34
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +26 -19
  5. package/dist/client.js.map +1 -1
  6. package/dist/data-model-decoder.d.ts +15 -2
  7. package/dist/data-model-decoder.d.ts.map +1 -1
  8. package/dist/data-model-decoder.js +4 -24
  9. package/dist/data-model-decoder.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/material-association-decoder.d.ts +11 -0
  15. package/dist/material-association-decoder.d.ts.map +1 -0
  16. package/dist/material-association-decoder.js +47 -0
  17. package/dist/material-association-decoder.js.map +1 -0
  18. package/dist/parquet-columns.d.ts +4 -0
  19. package/dist/parquet-columns.d.ts.map +1 -1
  20. package/dist/parquet-columns.js +14 -0
  21. package/dist/parquet-columns.js.map +1 -1
  22. package/dist/parquet-decoder.d.ts +14 -0
  23. package/dist/parquet-decoder.d.ts.map +1 -1
  24. package/dist/parquet-decoder.js +15 -5
  25. package/dist/parquet-decoder.js.map +1 -1
  26. package/dist/parquet-stream-events.d.ts.map +1 -1
  27. package/dist/parquet-stream-events.js +13 -2
  28. package/dist/parquet-stream-events.js.map +1 -1
  29. package/dist/parquet-stream-shapes.d.ts +48 -0
  30. package/dist/parquet-stream-shapes.d.ts.map +1 -0
  31. package/dist/parquet-stream-shapes.js +104 -0
  32. package/dist/parquet-stream-shapes.js.map +1 -0
  33. package/dist/parse-options.d.ts +50 -0
  34. package/dist/parse-options.d.ts.map +1 -0
  35. package/dist/parse-options.js +5 -0
  36. package/dist/parse-options.js.map +1 -0
  37. package/dist/parse-query.d.ts +18 -2
  38. package/dist/parse-query.d.ts.map +1 -1
  39. package/dist/parse-query.js +34 -1
  40. package/dist/parse-query.js.map +1 -1
  41. package/dist/server-error.d.ts +31 -0
  42. package/dist/server-error.d.ts.map +1 -0
  43. package/dist/server-error.js +75 -0
  44. package/dist/server-error.js.map +1 -0
  45. package/dist/types.d.ts +25 -3
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js.map +1 -1
  48. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-association-decoder.js","sourceRoot":"","sources":["../src/material-association-decoder.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,8 @@ export declare function meshColumns(table: ArrowTableLike, rowCount: number): {
59
59
  geometryClass: ArrayLike<number> | undefined;
60
60
  geometryItemId: ArrayLike<number> | undefined;
61
61
  materialId: ArrayLike<number> | undefined;
62
+ metallic: ArrayLike<number> | undefined;
63
+ roughness: ArrayLike<number> | undefined;
62
64
  };
63
65
  /** One source-id column at one row, or `undefined` when absent. */
64
66
  export declare function readSourceId(column: ArrayLike<number> | undefined, index: number): number | undefined;
@@ -77,5 +79,7 @@ export declare function transformFields(index: number, cols: {
77
79
  geometryClass?: ArrayLike<number>;
78
80
  geometryItemId?: ArrayLike<number>;
79
81
  materialId?: ArrayLike<number>;
82
+ metallic?: ArrayLike<number>;
83
+ roughness?: ArrayLike<number>;
80
84
  }): Partial<MeshData>;
81
85
  //# sourceMappingURL=parquet-columns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-columns.d.ts","sourceRoot":"","sources":["../src/parquet-columns.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAE3C,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAG/B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;;;;;;;EASlE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,aAAa,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CAChC,GACA,OAAO,CAAC,QAAQ,CAAC,CA0BnB"}
1
+ {"version":3,"file":"parquet-columns.d.ts","sourceRoot":"","sources":["../src/parquet-columns.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAE3C,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAG/B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;EAWlE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,aAAa,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CAC/B,GACA,OAAO,CAAC,QAAQ,CAAC,CAiCnB"}
@@ -55,6 +55,8 @@ export function meshColumns(table, rowCount) {
55
55
  geometryClass: usableColumn(table, 'geometry_class', rowCount),
56
56
  geometryItemId: usableColumn(table, 'geometry_item_id', rowCount),
57
57
  materialId: usableColumn(table, 'material_id', rowCount),
58
+ metallic: usableColumn(table, 'metallic', rowCount),
59
+ roughness: usableColumn(table, 'roughness', rowCount),
58
60
  };
59
61
  }
60
62
  /** One source-id column at one row, or `undefined` when absent. */
@@ -87,11 +89,23 @@ export function transformFields(index, cols) {
87
89
  // for another entity. Non-nullable means no validity bitmap to leak.
88
90
  const geometry_item_id = readSourceId(cols.geometryItemId, index);
89
91
  const material_id = readSourceId(cols.materialId, index);
92
+ // The IFC-authored finish (#5984). NaN, not null, marks "unauthored" for
93
+ // the same parquet-wasm reason; an authored 0 is finite and kept, so this
94
+ // tests finiteness, never truthiness.
95
+ const metallic = readFinish(cols.metallic, index);
96
+ const roughness = readFinish(cols.roughness, index);
90
97
  return {
91
98
  ...(origin ? { origin } : {}),
92
99
  ...(geometry_class ? { geometry_class } : {}),
93
100
  ...(geometry_item_id ? { geometry_item_id } : {}),
94
101
  ...(material_id ? { material_id } : {}),
102
+ ...(metallic !== undefined ? { metallic } : {}),
103
+ ...(roughness !== undefined ? { roughness } : {}),
95
104
  };
96
105
  }
106
+ /** One finish column at one row, or `undefined` when absent or NaN (#5984). */
107
+ function readFinish(column, index) {
108
+ const v = column?.[index];
109
+ return v !== undefined && Number.isFinite(v) ? v : undefined;
110
+ }
97
111
  //# sourceMappingURL=parquet-columns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-columns.js","sourceRoot":"","sources":["../src/parquet-columns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parquet-columns.js","sourceRoot":"","sources":["../src/parquet-columns.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * Uses parquet-wasm for efficient Parquet parsing in the browser.
6
6
  */
7
7
  import type { MeshData } from './types.js';
8
+ import { type ArrowTableLike } from './parquet-tables.js';
8
9
  type ParquetModule = typeof import('parquet-wasm');
9
10
  /**
10
11
  * Ensure parquet-wasm WASM module is initialized.
@@ -25,6 +26,19 @@ export declare function ensureParquetInit(): Promise<ParquetModule>;
25
26
  * @returns Decoded MeshData array
26
27
  */
27
28
  export declare function decodeParquetGeometry(data: ArrayBuffer): Promise<MeshData[]>;
29
+ /** The three tables of one flat geometry blob, as Arrow tables. */
30
+ export interface FlatTables {
31
+ meshArrow: ArrowTableLike;
32
+ vertexArrow: ArrowTableLike;
33
+ indexArrow: ArrowTableLike;
34
+ }
35
+ /**
36
+ * Read the `[len][mesh][len][vertex][len][index]` framing into its three
37
+ * tables, WITHOUT deciding what they mean. Split out of `decodeParquetGeometry`
38
+ * so the cross-batch stream reader (#5407) can put a batch's vertex and index
39
+ * tables behind the ones earlier batches sent before building meshes.
40
+ */
41
+ export declare function readFlatTables(data: ArrayBuffer): Promise<FlatTables>;
28
42
  /**
29
43
  * Check if parquet-wasm is available and can be initialized.
30
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-decoder.d.ts","sourceRoot":"","sources":["../src/parquet-decoder.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,KAAK,aAAa,GAAG,cAAc,cAAc,CAAC,CAAC;AAGnD;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAQhE;AAkDD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA2ClF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS3D;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,WAAW,EACjB,gBAAgB,GAAE,MAAc,GAC/B,OAAO,CAAC,QAAQ,EAAE,CAAC,CA4ErB"}
1
+ {"version":3,"file":"parquet-decoder.d.ts","sourceRoot":"","sources":["../src/parquet-decoder.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAO7B,KAAK,aAAa,GAAG,cAAc,cAAc,CAAC,CAAC;AAGnD;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAQhE;AAkDD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMlF;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAuC3E;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS3D;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,WAAW,EACjB,gBAAgB,GAAE,MAAc,GAC/B,OAAO,CAAC,QAAQ,EAAE,CAAC,CA4ErB"}
@@ -1,7 +1,7 @@
1
1
  // This Source Code Form is subject to the terms of the Mozilla Public
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
- import { buildMeshesFromTables, buildMeshesFromOptimizedTables } from './parquet-tables.js';
4
+ import { buildMeshesFromTables, buildMeshesFromOptimizedTables, } from './parquet-tables.js';
5
5
  let parquetInit = null;
6
6
  /**
7
7
  * Ensure parquet-wasm WASM module is initialized.
@@ -56,6 +56,19 @@ async function loadParquet() {
56
56
  * @returns Decoded MeshData array
57
57
  */
58
58
  export async function decodeParquetGeometry(data) {
59
+ const { meshArrow, vertexArrow, indexArrow } = await readFlatTables(data);
60
+ // Column semantics (including the additive origin / geometry_class columns of
61
+ // issue #1841) live in `parquet-tables.ts` so they are unit-testable without
62
+ // booting parquet-wasm. Everything above is wire framing.
63
+ return buildMeshesFromTables(meshArrow, vertexArrow, indexArrow);
64
+ }
65
+ /**
66
+ * Read the `[len][mesh][len][vertex][len][index]` framing into its three
67
+ * tables, WITHOUT deciding what they mean. Split out of `decodeParquetGeometry`
68
+ * so the cross-batch stream reader (#5407) can put a batch's vertex and index
69
+ * tables behind the ones earlier batches sent before building meshes.
70
+ */
71
+ export async function readFlatTables(data) {
59
72
  // Initialize WASM module (only runs once)
60
73
  const parquet = await ensureParquetInit();
61
74
  const view = new DataView(data);
@@ -86,10 +99,7 @@ export async function decodeParquetGeometry(data) {
86
99
  const meshArrow = arrow.tableFromIPC(meshTable.intoIPCStream());
87
100
  const vertexArrow = arrow.tableFromIPC(vertexTable.intoIPCStream());
88
101
  const indexArrow = arrow.tableFromIPC(indexTable.intoIPCStream());
89
- // Column semantics (including the additive origin / geometry_class columns of
90
- // issue #1841) live in `parquet-tables.ts` so they are unit-testable without
91
- // booting parquet-wasm. Everything above is wire framing.
92
- return buildMeshesFromTables(meshArrow, vertexArrow, indexArrow);
102
+ return { meshArrow, vertexArrow, indexArrow };
93
103
  }
94
104
  /**
95
105
  * Check if parquet-wasm is available and can be initialized.
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-decoder.js","sourceRoot":"","sources":["../src/parquet-decoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parquet-decoder.js","sourceRoot":"","sources":["../src/parquet-decoder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-stream-events.d.ts","sourceRoot":"","sources":["../src/parquet-stream-events.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mCAAmC,8FAC6C,CAAC;AAE9F;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,CAAC,CA4G9B"}
1
+ {"version":3,"file":"parquet-stream-events.d.ts","sourceRoot":"","sources":["../src/parquet-stream-events.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mCAAmC,8FAC6C,CAAC;AAE9F;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,CAAC,CAuH9B"}
@@ -12,6 +12,7 @@
12
12
  * guarantee stops being observable on the client.
13
13
  */
14
14
  import { decodeParquetGeometry } from './parquet-decoder.js';
15
+ import { decodeCrossBatch, StreamShapeStore } from './parquet-stream-shapes.js';
15
16
  /**
16
17
  * Raised when an SSE parse stream ends with no terminal event.
17
18
  *
@@ -44,6 +45,9 @@ export async function consumeParquetStream(response, onBatch, startedAt) {
44
45
  let stats = null;
45
46
  let metadata = null;
46
47
  let symbolic_data;
48
+ // Shapes earlier batches carried, for a server that shares across batches
49
+ // (#5407). Only ever filled by batches that state their bases.
50
+ const shapes = new StreamShapeStore();
47
51
  // A thrown 'error' event (or any other exception mid-loop) must not
48
52
  // leave the reader locked on `response.body` — mirrors the try/finally
49
53
  // `parseStream` already uses for the same SSE-reading shape.
@@ -80,8 +84,15 @@ export async function consumeParquetStream(response, onBatch, startedAt) {
80
84
  for (let i = 0; i < binaryStr.length; i++) {
81
85
  bytes[i] = binaryStr.charCodeAt(i);
82
86
  }
83
- // Decode Parquet to meshes
84
- const meshes = await decodeParquetGeometry(bytes.buffer);
87
+ // Decode Parquet to meshes. A batch stating its bases indexes the
88
+ // whole stream's shapes; one without decodes on its own.
89
+ const { vertex_base, index_base } = event;
90
+ if ((vertex_base === undefined) !== (index_base === undefined)) {
91
+ throw new Error('Malformed Parquet stream: a batch stated only one of vertex_base / index_base');
92
+ }
93
+ const meshes = vertex_base !== undefined && index_base !== undefined
94
+ ? await decodeCrossBatch(bytes.buffer, shapes, vertex_base, index_base, event.batch_number)
95
+ : await decodeParquetGeometry(bytes.buffer);
85
96
  const decodeTime = performance.now() - decodeStart;
86
97
  total_meshes += meshes.length;
87
98
  console.log(`[client] Batch #${event.batch_number}: ${meshes.length} meshes, decode: ${decodeTime.toFixed(0)}ms`);
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-stream-events.js","sourceRoot":"","sources":["../src/parquet-stream-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parquet-stream-events.js","sourceRoot":"","sources":["../src/parquet-stream-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The client half of cross-batch shape sharing on
3
+ * `POST /api/v1/parse/parquet-stream?stream_shapes=cross-batch` (issue #5407).
4
+ *
5
+ * On that stream a batch carries only the shapes no earlier batch did, and its
6
+ * mesh rows index the vertex and index rows of the WHOLE stream so far. So the
7
+ * reader keeps every batch's vertex and index columns, appended in order, and
8
+ * builds each batch's meshes against all of them. What it keeps is the
9
+ * stream's distinct shape geometry, sent once, which is what makes the stream
10
+ * small in the first place; occurrences are materialized per batch and handed
11
+ * off exactly as before.
12
+ *
13
+ * Each batch states where its tables start (`vertex_base`, `index_base`). The
14
+ * store refuses a batch whose base is not what it holds, so a dropped or
15
+ * reordered batch fails loud instead of drawing one shape's vertices for
16
+ * another. It also refuses a batch number out of sequence: a batch that
17
+ * brought no new shapes leaves the bases where they were, so only its number
18
+ * shows that it went missing or arrived out of order. A batch WITHOUT bases came from a server that did not honour the
19
+ * opt-in and decodes on its own, as every batch did before.
20
+ */
21
+ import type { MeshData } from './types.js';
22
+ import { type ArrowTableLike } from './parquet-tables.js';
23
+ /** Every vertex and index row a cross-batch stream has sent so far. */
24
+ export declare class StreamShapeStore {
25
+ private readonly vertex;
26
+ private readonly index;
27
+ /** Vertex rows received. */
28
+ private vertices;
29
+ /** Indices received, three per index-table row: the unit of `index_base`. */
30
+ private indices;
31
+ /** Batches appended; the next one must be number `batches + 1`. */
32
+ private batches;
33
+ /**
34
+ * Append batch `batchNumber`'s vertex and index tables at the bases it
35
+ * states. Throws, appending nothing, when the number is out of sequence, a
36
+ * base is not what the store holds, or a table is malformed.
37
+ */
38
+ append(vertexArrow: ArrowTableLike, indexArrow: ArrowTableLike, vertexBase: number, indexBase: number, batchNumber: number): void;
39
+ vertexTable(): ArrowTableLike;
40
+ indexTable(): ArrowTableLike;
41
+ }
42
+ /**
43
+ * Decode one cross-batch stream batch against everything the stream has sent:
44
+ * append its tables to `store`, then build its meshes, whose ranges may reach
45
+ * back into any earlier batch.
46
+ */
47
+ export declare function decodeCrossBatch(data: ArrayBuffer, store: StreamShapeStore, vertexBase: number, indexBase: number, batchNumber: number): Promise<MeshData[]>;
48
+ //# sourceMappingURL=parquet-stream-shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-stream-shapes.d.ts","sourceRoot":"","sources":["../src/parquet-stream-shapes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2CjF,uEAAuE;AACvE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuD;IAC9E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqD;IAC3E,4BAA4B;IAC5B,OAAO,CAAC,QAAQ,CAAK;IACrB,6EAA6E;IAC7E,OAAO,CAAC,OAAO,CAAK;IACpB,mEAAmE;IACnE,OAAO,CAAC,OAAO,CAAK;IAEpB;;;;OAIG;IACH,MAAM,CACJ,WAAW,EAAE,cAAc,EAC3B,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,IAAI;IAsBP,WAAW,IAAI,cAAc;IAI7B,UAAU,IAAI,cAAc;CAG7B;AAeD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAIrB"}
@@ -0,0 +1,104 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { numericColumn } from './parquet-columns.js';
5
+ import { readFlatTables } from './parquet-decoder.js';
6
+ import { buildMeshesFromTables } from './parquet-tables.js';
7
+ const VERTEX_COLUMNS = ['x', 'y', 'z', 'nx', 'ny', 'nz'];
8
+ const INDEX_COLUMNS = ['i0', 'i1', 'i2'];
9
+ /** An append-only typed column that doubles its capacity as it grows. */
10
+ class GrowableColumn {
11
+ constructor(allocate) {
12
+ this.allocate = allocate;
13
+ this.length = 0;
14
+ this.buffer = allocate(1024);
15
+ }
16
+ append(values) {
17
+ const needed = this.length + values.length;
18
+ if (needed > this.buffer.length) {
19
+ const grown = this.allocate(Math.max(needed, this.buffer.length * 2));
20
+ grown.set(this.buffer.subarray(0, this.length));
21
+ this.buffer = grown;
22
+ }
23
+ this.buffer.set(values, this.length);
24
+ this.length = needed;
25
+ }
26
+ view() {
27
+ return this.buffer.subarray(0, this.length);
28
+ }
29
+ }
30
+ function columns(names, allocate) {
31
+ return new Map(names.map((name) => [name, new GrowableColumn(allocate)]));
32
+ }
33
+ function tableOf(cols) {
34
+ return {
35
+ getChild(name) {
36
+ const view = cols.get(name)?.view();
37
+ return view ? { toArray: () => view, get: (i) => view[i] } : null;
38
+ },
39
+ };
40
+ }
41
+ /** Every vertex and index row a cross-batch stream has sent so far. */
42
+ export class StreamShapeStore {
43
+ constructor() {
44
+ this.vertex = columns(VERTEX_COLUMNS, (n) => new Float32Array(n));
45
+ this.index = columns(INDEX_COLUMNS, (n) => new Uint32Array(n));
46
+ /** Vertex rows received. */
47
+ this.vertices = 0;
48
+ /** Indices received, three per index-table row: the unit of `index_base`. */
49
+ this.indices = 0;
50
+ /** Batches appended; the next one must be number `batches + 1`. */
51
+ this.batches = 0;
52
+ }
53
+ /**
54
+ * Append batch `batchNumber`'s vertex and index tables at the bases it
55
+ * states. Throws, appending nothing, when the number is out of sequence, a
56
+ * base is not what the store holds, or a table is malformed.
57
+ */
58
+ append(vertexArrow, indexArrow, vertexBase, indexBase, batchNumber) {
59
+ if (batchNumber !== this.batches + 1) {
60
+ throw new Error(`Malformed Parquet stream: batch ${batchNumber} arrived after batch ${this.batches} ` +
61
+ '(a batch is missing or out of order)');
62
+ }
63
+ if (vertexBase !== this.vertices || indexBase !== this.indices) {
64
+ throw new Error(`Malformed Parquet stream: batch starts at vertex ${vertexBase} / index ${indexBase}, ` +
65
+ `but ${this.vertices} / ${this.indices} were received (a batch is missing or out of order)`);
66
+ }
67
+ const vertexCols = parallelColumns(vertexArrow, VERTEX_COLUMNS);
68
+ const indexCols = parallelColumns(indexArrow, INDEX_COLUMNS);
69
+ VERTEX_COLUMNS.forEach((name, i) => this.vertex.get(name)?.append(vertexCols[i]));
70
+ INDEX_COLUMNS.forEach((name, i) => this.index.get(name)?.append(indexCols[i]));
71
+ this.vertices += vertexCols[0].length;
72
+ this.indices += 3 * indexCols[0].length;
73
+ this.batches = batchNumber;
74
+ }
75
+ vertexTable() {
76
+ return tableOf(this.vertex);
77
+ }
78
+ indexTable() {
79
+ return tableOf(this.index);
80
+ }
81
+ }
82
+ /** All of `names`, present and of one length, or throw. */
83
+ function parallelColumns(table, names) {
84
+ const cols = [];
85
+ for (const name of names) {
86
+ const col = numericColumn(table, name);
87
+ if (!col || (cols.length > 0 && col.length !== cols[0].length)) {
88
+ throw new Error(`Malformed Parquet stream: missing or ragged ${names.join('/')} columns`);
89
+ }
90
+ cols.push(col);
91
+ }
92
+ return cols;
93
+ }
94
+ /**
95
+ * Decode one cross-batch stream batch against everything the stream has sent:
96
+ * append its tables to `store`, then build its meshes, whose ranges may reach
97
+ * back into any earlier batch.
98
+ */
99
+ export async function decodeCrossBatch(data, store, vertexBase, indexBase, batchNumber) {
100
+ const { meshArrow, vertexArrow, indexArrow } = await readFlatTables(data);
101
+ store.append(vertexArrow, indexArrow, vertexBase, indexBase, batchNumber);
102
+ return buildMeshesFromTables(meshArrow, store.vertexTable(), store.indexTable());
103
+ }
104
+ //# sourceMappingURL=parquet-stream-shapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-stream-shapes.js","sourceRoot":"","sources":["../src/parquet-stream-shapes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Per-request options of the parse endpoints, split out of `client.ts` (which
3
+ * re-exports them) when #6034 added `dataModelEntities`.
4
+ */
5
+ /**
6
+ * Per-request parse options shared by all parse endpoints.
7
+ */
8
+ export interface ParseRequestOptions {
9
+ /**
10
+ * Tessellation detail level (#976). Omitted = `'medium'`, which is
11
+ * byte-identical to the historical output — and to what the wasm path
12
+ * produces without `setTessellationQuality`, so client-side and
13
+ * server-side meshes stay in parity. Non-default levels get distinct
14
+ * server cache entries.
15
+ */
16
+ tessellationQuality?: 'lowest' | 'low' | 'medium' | 'high' | 'highest';
17
+ /**
18
+ * Which rows the data model's entities table carries (#6034). Omitted =
19
+ * `'all'`: every STEP instance in the file, as before.
20
+ *
21
+ * `'rooted'` keeps only the objects (`IfcRoot` subtypes, the rows with a
22
+ * GlobalId) plus every non-rooted instance another data-model table
23
+ * references by id (materials, material sets, classification and document
24
+ * references), so no relation dangles. The geometry-and-property plumbing
25
+ * nothing points at (`IfcCartesianPoint`, `IfcFace`, `IfcPropertySingleValue`,
26
+ * ...) is left out; on large models that is most of the table. Property
27
+ * values, quantities, materials and the spatial tree are unaffected.
28
+ *
29
+ * The two variants are separate server cache entries, so pass the SAME value
30
+ * to the parse call and to `IfcServerClient.fetchDataModel`: a rooted
31
+ * parse writes only the rooted table, and fetching without the option asks
32
+ * for the full one.
33
+ */
34
+ dataModelEntities?: 'all' | 'rooted';
35
+ }
36
+ /**
37
+ * Options for {@link IfcServerClient.parseParquetStream}.
38
+ */
39
+ export interface ParseStreamOptions extends ParseRequestOptions {
40
+ /**
41
+ * Skip the hash-only cache probe and upload straight away (#3901).
42
+ *
43
+ * The probe costs one round trip plus a local SHA-256 of the file, and saves
44
+ * the entire upload when the server already has the model. Turn it off when
45
+ * you know the server is cold, or when hashing locally is the expensive part
46
+ * (a very large file behind a fast link).
47
+ */
48
+ skipCacheProbe?: boolean;
49
+ }
50
+ //# sourceMappingURL=parse-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-options.d.ts","sourceRoot":"","sources":["../src/parse-options.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACvE;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B"}
@@ -0,0 +1,5 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export {};
5
+ //# sourceMappingURL=parse-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-options.js","sourceRoot":"","sources":["../src/parse-options.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
@@ -12,7 +12,23 @@
12
12
  * signal has to go on EVERY endpoint touching that cache — both parse routes,
13
13
  * the cache check and the cached-geometry fetch. One that forgets it asks about
14
14
  * the other entry. Pinned by `parquet-layout-signal.test.ts`.
15
+ *
16
+ * The streaming route takes one more opt-in, `stream_shapes=cross-batch`
17
+ * (issue #5407), for the same reason one level down: with it a batch's mesh
18
+ * rows may point at vertices an EARLIER batch carried, which a client decoding
19
+ * each batch on its own would read out of range. This version's stream reader
20
+ * keeps earlier batches' shapes, so it opts in; see `parquetStreamQuery`.
21
+ */
22
+ import type { ParseRequestOptions } from './parse-options.js';
23
+ export declare function parseQuery(options?: ParseRequestOptions, flatLayout?: boolean, sha256?: string, crossBatchShapes?: boolean): string;
24
+ /**
25
+ * The query of both `POST /api/v1/parse/parquet-stream` requests, the hash
26
+ * probe and the upload: the shared-shape layout plus cross-batch sharing. Only
27
+ * that route reads `stream_shapes`, and it is not part of the cache identity,
28
+ * so the probe and the upload must agree on it only because they must agree on
29
+ * how the answer is decoded.
15
30
  */
16
- import type { ParseRequestOptions } from './client.js';
17
- export declare function parseQuery(options?: ParseRequestOptions, flatLayout?: boolean, sha256?: string): string;
31
+ export declare function parquetStreamQuery(options?: ParseRequestOptions, sha256?: string): string;
32
+ /** The query of `GET /api/v1/parse/data-model/{key}`. */
33
+ export declare function dataModelQuery(options?: Pick<ParseRequestOptions, 'dataModelEntities'>): string;
18
34
  //# sourceMappingURL=parse-query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-query.d.ts","sourceRoot":"","sources":["../src/parse-query.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,UAAU,CACxB,OAAO,CAAC,EAAE,mBAAmB,EAC7B,UAAU,UAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAgBR"}
1
+ {"version":3,"file":"parse-query.d.ts","sourceRoot":"","sources":["../src/parse-query.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,wBAAgB,UAAU,CACxB,OAAO,CAAC,EAAE,mBAAmB,EAC7B,UAAU,UAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,UAAQ,GACvB,MAAM,CAoBR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzF;AAkBD,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,GAAG,MAAM,CAK/F"}
@@ -1,7 +1,7 @@
1
1
  /* This Source Code Form is subject to the terms of the Mozilla Public
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- export function parseQuery(options, flatLayout = false, sha256) {
4
+ export function parseQuery(options, flatLayout = false, sha256, crossBatchShapes = false) {
5
5
  const params = new URLSearchParams();
6
6
  if (options?.tessellationQuality && options.tessellationQuality !== 'medium') {
7
7
  params.set('tessellation_quality', options.tessellationQuality);
@@ -15,6 +15,39 @@ export function parseQuery(options, flatLayout = false, sha256) {
15
15
  if (sha256) {
16
16
  params.set('sha256', sha256);
17
17
  }
18
+ if (crossBatchShapes) {
19
+ params.set('stream_shapes', 'cross-batch');
20
+ }
21
+ setDataModelEntities(params, options);
22
+ const qs = params.toString();
23
+ return qs ? `?${qs}` : '';
24
+ }
25
+ /**
26
+ * The query of both `POST /api/v1/parse/parquet-stream` requests, the hash
27
+ * probe and the upload: the shared-shape layout plus cross-batch sharing. Only
28
+ * that route reads `stream_shapes`, and it is not part of the cache identity,
29
+ * so the probe and the upload must agree on it only because they must agree on
30
+ * how the answer is decoded.
31
+ */
32
+ export function parquetStreamQuery(options, sha256) {
33
+ return parseQuery(options, true, sha256, true);
34
+ }
35
+ /**
36
+ * Selects which data-model entry a request writes or asks about (#6034): the
37
+ * parse routes, the cache check and the data-model fetch all take it, and
38
+ * they must agree, because the full and rooted-only tables are separate
39
+ * server cache entries. Sent only when non-default, so a default request's URL
40
+ * is unchanged.
41
+ */
42
+ function setDataModelEntities(params, options) {
43
+ if (options?.dataModelEntities === 'rooted') {
44
+ params.set('data_model_entities', 'rooted');
45
+ }
46
+ }
47
+ /** The query of `GET /api/v1/parse/data-model/{key}`. */
48
+ export function dataModelQuery(options) {
49
+ const params = new URLSearchParams();
50
+ setDataModelEntities(params, options);
18
51
  const qs = params.toString();
19
52
  return qs ? `?${qs}` : '';
20
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-query.js","sourceRoot":"","sources":["../src/parse-query.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoB/D,MAAM,UAAU,UAAU,CACxB,OAA6B,EAC7B,UAAU,GAAG,KAAK,EAClB,MAAe;IAEf,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,OAAO,EAAE,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAChD,CAAC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"parse-query.js","sourceRoot":"","sources":["../src/parse-query.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0B/D,MAAM,UAAU,UAAU,CACxB,OAA6B,EAC7B,UAAU,GAAG,KAAK,EAClB,MAAe,EACf,gBAAgB,GAAG,KAAK;IAExB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,OAAO,EAAE,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAChD,CAAC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAC7C,CAAC;IACD,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA6B,EAAE,MAAe;IAC/E,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,MAAuB,EACvB,OAAwD;IAExD,IAAI,OAAO,EAAE,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,OAAwD;IACrF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A non-2xx answer from the server.
3
+ *
4
+ * Every error the server writes is the `{ error, code }` envelope
5
+ * ({@link ErrorResponse}); `code` is its stable identifier (`NOT_FOUND`,
6
+ * `BAD_REQUEST`, `UNAUTHORIZED`, `OVERLOADED`, ...) and is what to branch on.
7
+ * A body that is not the envelope (a proxy in front of the server answered,
8
+ * or a server older than the envelope's coverage of every status) still
9
+ * yields this error, with `code` set to `HTTP_<status>`.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * try {
14
+ * await client.getCached(key);
15
+ * } catch (error) {
16
+ * if (error instanceof IfcServerError && error.code === 'OVERLOADED') {
17
+ * // retry later
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ export declare class IfcServerError extends Error {
23
+ /** HTTP status of the response. */
24
+ readonly status: number;
25
+ /** The envelope's `code`, or `HTTP_<status>` when the body was not the envelope. */
26
+ readonly code: string;
27
+ constructor(message: string, status: number, code: string);
28
+ }
29
+ /** Decode a failed response into an {@link IfcServerError}. Consumes the body. */
30
+ export declare function serverErrorFromResponse(response: Response): Promise<IfcServerError>;
31
+ //# sourceMappingURL=server-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-error.d.ts","sourceRoot":"","sources":["../src/server-error.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAM1D;AA6BD,kFAAkF;AAClF,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAsBzF"}