@swmmrs/swmmrs 0.1.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 (120) hide show
  1. package/README.md +264 -0
  2. package/dist/README.md +264 -0
  3. package/dist/serial/README.md +264 -0
  4. package/dist/serial/swmmrs.d.ts +395 -0
  5. package/dist/serial/swmmrs.js +3169 -0
  6. package/dist/serial/swmmrs_bg.wasm +0 -0
  7. package/dist/snippets/swmmrs-parallel-5d1c71108133e81d/worker-pool/browser.js +98 -0
  8. package/dist/swmmrs.d.ts +422 -0
  9. package/dist/swmmrs.js +3330 -0
  10. package/dist/swmmrs_bg.wasm +0 -0
  11. package/index.d.ts +2 -0
  12. package/index.js +2 -0
  13. package/lib/swmmrs/client.d.ts +11 -0
  14. package/lib/swmmrs/client.d.ts.map +1 -0
  15. package/lib/swmmrs/client.js +82 -0
  16. package/lib/swmmrs/client.js.map +1 -0
  17. package/lib/swmmrs/enums.d.ts +41 -0
  18. package/lib/swmmrs/enums.d.ts.map +1 -0
  19. package/lib/swmmrs/enums.js +2 -0
  20. package/lib/swmmrs/enums.js.map +1 -0
  21. package/lib/swmmrs/exceptions.d.ts +98 -0
  22. package/lib/swmmrs/exceptions.d.ts.map +1 -0
  23. package/lib/swmmrs/exceptions.js +86 -0
  24. package/lib/swmmrs/exceptions.js.map +1 -0
  25. package/lib/swmmrs/index.d.ts +27 -0
  26. package/lib/swmmrs/index.d.ts.map +1 -0
  27. package/lib/swmmrs/index.js +13 -0
  28. package/lib/swmmrs/index.js.map +1 -0
  29. package/lib/swmmrs/objects/amm.d.ts +114 -0
  30. package/lib/swmmrs/objects/amm.d.ts.map +1 -0
  31. package/lib/swmmrs/objects/amm.js +19 -0
  32. package/lib/swmmrs/objects/amm.js.map +1 -0
  33. package/lib/swmmrs/objects/collections.d.ts +109 -0
  34. package/lib/swmmrs/objects/collections.d.ts.map +1 -0
  35. package/lib/swmmrs/objects/collections.js +158 -0
  36. package/lib/swmmrs/objects/collections.js.map +1 -0
  37. package/lib/swmmrs/objects/definitions.d.ts +215 -0
  38. package/lib/swmmrs/objects/definitions.d.ts.map +1 -0
  39. package/lib/swmmrs/objects/definitions.js +69 -0
  40. package/lib/swmmrs/objects/definitions.js.map +1 -0
  41. package/lib/swmmrs/objects/lids.d.ts +446 -0
  42. package/lib/swmmrs/objects/lids.d.ts.map +1 -0
  43. package/lib/swmmrs/objects/lids.js +90 -0
  44. package/lib/swmmrs/objects/lids.js.map +1 -0
  45. package/lib/swmmrs/objects/links.d.ts +615 -0
  46. package/lib/swmmrs/objects/links.d.ts.map +1 -0
  47. package/lib/swmmrs/objects/links.js +90 -0
  48. package/lib/swmmrs/objects/links.js.map +1 -0
  49. package/lib/swmmrs/objects/nodes.d.ts +494 -0
  50. package/lib/swmmrs/objects/nodes.d.ts.map +1 -0
  51. package/lib/swmmrs/objects/nodes.js +147 -0
  52. package/lib/swmmrs/objects/nodes.js.map +1 -0
  53. package/lib/swmmrs/objects/options.d.ts +112 -0
  54. package/lib/swmmrs/objects/options.d.ts.map +1 -0
  55. package/lib/swmmrs/objects/options.js +27 -0
  56. package/lib/swmmrs/objects/options.js.map +1 -0
  57. package/lib/swmmrs/objects/rtk.d.ts +82 -0
  58. package/lib/swmmrs/objects/rtk.d.ts.map +1 -0
  59. package/lib/swmmrs/objects/rtk.js +19 -0
  60. package/lib/swmmrs/objects/rtk.js.map +1 -0
  61. package/lib/swmmrs/objects/subcatchments.d.ts +575 -0
  62. package/lib/swmmrs/objects/subcatchments.d.ts.map +1 -0
  63. package/lib/swmmrs/objects/subcatchments.js +243 -0
  64. package/lib/swmmrs/objects/subcatchments.js.map +1 -0
  65. package/lib/swmmrs/output.d.ts +412 -0
  66. package/lib/swmmrs/output.d.ts.map +1 -0
  67. package/lib/swmmrs/output.js +507 -0
  68. package/lib/swmmrs/output.js.map +1 -0
  69. package/lib/swmmrs/protocol.d.ts +80 -0
  70. package/lib/swmmrs/protocol.d.ts.map +1 -0
  71. package/lib/swmmrs/protocol.js +2 -0
  72. package/lib/swmmrs/protocol.js.map +1 -0
  73. package/lib/swmmrs/runtime.d.ts +22 -0
  74. package/lib/swmmrs/runtime.d.ts.map +1 -0
  75. package/lib/swmmrs/runtime.js +146 -0
  76. package/lib/swmmrs/runtime.js.map +1 -0
  77. package/lib/swmmrs/scenarios.d.ts +41 -0
  78. package/lib/swmmrs/scenarios.d.ts.map +1 -0
  79. package/lib/swmmrs/scenarios.js +2 -0
  80. package/lib/swmmrs/scenarios.js.map +1 -0
  81. package/lib/swmmrs/simulation.d.ts +249 -0
  82. package/lib/swmmrs/simulation.d.ts.map +1 -0
  83. package/lib/swmmrs/simulation.js +415 -0
  84. package/lib/swmmrs/simulation.js.map +1 -0
  85. package/lib/swmmrs/snapshots.d.ts +192 -0
  86. package/lib/swmmrs/snapshots.d.ts.map +1 -0
  87. package/lib/swmmrs/snapshots.js +2 -0
  88. package/lib/swmmrs/snapshots.js.map +1 -0
  89. package/lib/swmmrs/types.d.ts +123 -0
  90. package/lib/swmmrs/types.d.ts.map +1 -0
  91. package/lib/swmmrs/types.js +2 -0
  92. package/lib/swmmrs/types.js.map +1 -0
  93. package/lib/swmmrs/worker.d.ts +2 -0
  94. package/lib/swmmrs/worker.d.ts.map +1 -0
  95. package/lib/swmmrs/worker.js +488 -0
  96. package/lib/swmmrs/worker.js.map +1 -0
  97. package/package.json +33 -0
  98. package/src/swmmrs/client.ts +76 -0
  99. package/src/swmmrs/enums.ts +73 -0
  100. package/src/swmmrs/exceptions.ts +120 -0
  101. package/src/swmmrs/index.ts +79 -0
  102. package/src/swmmrs/objects/amm.ts +113 -0
  103. package/src/swmmrs/objects/collections.ts +153 -0
  104. package/src/swmmrs/objects/definitions.ts +246 -0
  105. package/src/swmmrs/objects/lids.ts +487 -0
  106. package/src/swmmrs/objects/links.ts +626 -0
  107. package/src/swmmrs/objects/nodes.ts +504 -0
  108. package/src/swmmrs/objects/options.ts +114 -0
  109. package/src/swmmrs/objects/rtk.ts +79 -0
  110. package/src/swmmrs/objects/subcatchments.ts +650 -0
  111. package/src/swmmrs/output.ts +798 -0
  112. package/src/swmmrs/protocol.ts +62 -0
  113. package/src/swmmrs/runtime.ts +188 -0
  114. package/src/swmmrs/scenarios.ts +40 -0
  115. package/src/swmmrs/simulation.ts +406 -0
  116. package/src/swmmrs/snapshots.ts +199 -0
  117. package/src/swmmrs/types.ts +123 -0
  118. package/src/swmmrs/worker.ts +233 -0
  119. package/worker-node.js +142 -0
  120. package/worker.js +1 -0
@@ -0,0 +1,123 @@
1
+ import type { FlowUnits, ModelTime, RoutingModel, SimulationState, UnitSystem } from "./enums.js";
2
+ /**
3
+ * File contents, never a host path. Strings are text; `Blob` includes browser
4
+ * `File` values. Byte views use their byte offset and length; Node `Buffer` is accepted.
5
+ */
6
+ export type FileContents = string | Blob | ArrayBuffer | ArrayBufferView;
7
+ /** Worker creation options, distinct from the INP model options. */
8
+ export interface SimulationOptions {
9
+ /**
10
+ * Positive integer worker capacity. Node defaults to 1; isolated browser pages
11
+ * may use hardware concurrency. One selects serial WASM; higher values require
12
+ * browser cross-origin isolation. Effective solver threads may be capped by the model.
13
+ */
14
+ threads?: number;
15
+ /** Worker asset URL override; otherwise resolved relative to the compiled module. */
16
+ workerUrl?: string | URL;
17
+ }
18
+ /** Options for starting a run or executing one model to completion. */
19
+ export interface RunOptions {
20
+ /** Retain binary report-period results; defaults to true. False returns empty output bytes. */
21
+ saveResults?: boolean;
22
+ }
23
+ /** Automatic advancement and observation cadence for `Simulation.steps()`. */
24
+ export interface StepOptions extends RunOptions {
25
+ /** Positive 32-bit integer seconds between observations. Omit for each routing step. */
26
+ seconds?: number;
27
+ /** Land exactly on observation boundaries; defaults to true. Ignored without `seconds`. False allows overshoot by a routing step. */
28
+ strict?: boolean;
29
+ }
30
+ /** Detached model identities, solver metadata, and configured schedule from `simulation.info()`. */
31
+ export interface SimulationInfo {
32
+ /** Configured project flow units. */
33
+ readonly flowUnits: FlowUnits;
34
+ /** Configured US or SI unit system. */
35
+ readonly unitSystem: UnitSystem;
36
+ /** Native solver release. */
37
+ readonly solverVersion: string;
38
+ /** Embedded native solver build identifier. */
39
+ readonly solverBuildId: string;
40
+ /** Configured routing model. */
41
+ readonly routeModel: RoutingModel;
42
+ /** Effective solver thread count after runtime and model caps. */
43
+ readonly effectiveThreads: number;
44
+ /** Canonical node IDs in configured order. */
45
+ readonly nodeIds: readonly string[];
46
+ /** Canonical link IDs in configured order. */
47
+ readonly linkIds: readonly string[];
48
+ /** Canonical subcatchment IDs in configured order. */
49
+ readonly subcatchmentIds: readonly string[];
50
+ /** Canonical rain-gage IDs in configured order. */
51
+ readonly rainGageIds: readonly string[];
52
+ /** Canonical pollutant IDs in configured order. */
53
+ readonly pollutantIds: readonly string[];
54
+ /** Canonical land-use IDs in configured order. */
55
+ readonly landUseIds: readonly string[];
56
+ /** Canonical time-pattern IDs in configured order. */
57
+ readonly timePatternIds: readonly string[];
58
+ /** Canonical curve IDs in configured order. */
59
+ readonly curveIds: readonly string[];
60
+ /** Canonical time-series IDs in configured order. */
61
+ readonly timeSeriesIds: readonly string[];
62
+ /** Canonical control-rule IDs in configured order. */
63
+ readonly controlIds: readonly string[];
64
+ /** Canonical transect IDs in configured order. */
65
+ readonly transectIds: readonly string[];
66
+ /** Canonical aquifer IDs in configured order. */
67
+ readonly aquiferIds: readonly string[];
68
+ /** Canonical snowmelt parameter-set IDs in configured order. */
69
+ readonly snowmeltIds: readonly string[];
70
+ /** Canonical custom-shape IDs in configured order. */
71
+ readonly shapeIds: readonly string[];
72
+ /** Canonical street IDs in configured order. */
73
+ readonly streetIds: readonly string[];
74
+ /** Canonical inlet-design IDs in configured order. */
75
+ readonly inletDesignIds: readonly string[];
76
+ /** Canonical AMM-model IDs in configured order. */
77
+ readonly ammModelIds: readonly string[];
78
+ /** Canonical RTK unit-hydrograph IDs in configured order. */
79
+ readonly unitHydrographIds: readonly string[];
80
+ /** Canonical LID-control IDs in configured order. */
81
+ readonly lidControlIds: readonly string[];
82
+ /** Configured simulation start, without a timezone. */
83
+ readonly startTime: ModelTime;
84
+ /** Configured simulation end, without a timezone. */
85
+ readonly endTime: ModelTime;
86
+ /** First reporting time, without a timezone. */
87
+ readonly reportStart: ModelTime;
88
+ }
89
+ /** Detached lifecycle/progress record. `simulation.status()` is unavailable after close. */
90
+ export interface SimulationStatus {
91
+ /** Current owner lifecycle state. */
92
+ readonly state: SimulationState;
93
+ /** Whether the native project is open. */
94
+ readonly isOpen: boolean;
95
+ /** Whether a solver run has started. */
96
+ readonly isStarted: boolean;
97
+ /** Whether accepted declaration changes need solver preparation. */
98
+ readonly configurationDirty: boolean;
99
+ /** Whether this run retains binary report-period results. */
100
+ readonly saveResults: boolean;
101
+ /** Current model time, or null before a result time exists. */
102
+ readonly currentTime: ModelTime | null;
103
+ /** Elapsed simulation time in seconds. */
104
+ readonly elapsedSeconds: number;
105
+ /** Configured simulation duration in seconds. */
106
+ readonly durationSeconds: number;
107
+ /** Completion in the range 0 to 100. */
108
+ readonly percentComplete: number;
109
+ /** Number of routing steps executed. */
110
+ readonly stepCount: number;
111
+ /** Number of report periods written. */
112
+ readonly reportPeriodCount: number;
113
+ /** Native warning count. */
114
+ readonly warningCount: number;
115
+ }
116
+ /** Finalized, caller-owned files returned by `run()`, `finish()`, or `runSwmm()`. */
117
+ export interface RunResults {
118
+ /** Finalized report text. */
119
+ readonly report: string;
120
+ /** Finalized binary output bytes; empty with `saveResults: false`. Not a live worker view. */
121
+ readonly output: Uint8Array;
122
+ }
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/swmmrs/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/swmmrs/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/swmmrs/worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,488 @@
1
+ import { loadWasm } from "./runtime.js";
2
+ // This module runs in a dedicated worker; the public build also uses DOM types.
3
+ const host = globalThis;
4
+ const decoder = new TextDecoder();
5
+ let simulation;
6
+ let outputReader;
7
+ let terminateThreadPool;
8
+ let queue = Promise.resolve();
9
+ function shutdown() {
10
+ const errors = [];
11
+ try {
12
+ simulation?.close();
13
+ }
14
+ catch (error) {
15
+ errors.push(error);
16
+ }
17
+ try {
18
+ simulation?.free();
19
+ }
20
+ catch (error) {
21
+ errors.push(error);
22
+ }
23
+ simulation = undefined;
24
+ try {
25
+ outputReader?.free();
26
+ }
27
+ catch (error) {
28
+ errors.push(error);
29
+ }
30
+ outputReader = undefined;
31
+ try {
32
+ terminateThreadPool?.();
33
+ }
34
+ catch (error) {
35
+ errors.push(error);
36
+ }
37
+ if (errors.length) {
38
+ const [primary, ...secondary] = errors;
39
+ const error = primary instanceof Error ? primary : new Error(String(primary));
40
+ if (secondary.length)
41
+ Object.assign(error, { cleanupError: secondary.map(String).join("; ") });
42
+ throw error;
43
+ }
44
+ }
45
+ function results(owner) {
46
+ return {
47
+ report: decoder.decode(owner.readFile("model.rpt")),
48
+ output: owner.status().saveResults ? owner.readFile("model.out") : new Uint8Array(),
49
+ };
50
+ }
51
+ async function dispatch(request) {
52
+ const { id, method } = request;
53
+ try {
54
+ let result = undefined;
55
+ if (request.method === "open" || request.method === "resumeCheckpoint" || request.method === "openOutput") {
56
+ if (simulation || outputReader)
57
+ throw new Error("An owner is already open");
58
+ const threads = request.method === "open" ? request.args[2]
59
+ : request.method === "resumeCheckpoint" ? request.args[1] : 1;
60
+ const bindings = threads === 1
61
+ ? await import("../../dist/serial/swmmrs.js")
62
+ : await import("../../dist/swmmrs.js");
63
+ const moduleUrl = threads === 1
64
+ ? new URL("../../dist/serial/swmmrs.js", import.meta.url).href
65
+ : new URL("../../dist/swmmrs.js", import.meta.url).href;
66
+ terminateThreadPool = bindings.terminateThreadPool;
67
+ await loadWasm(bindings, moduleUrl);
68
+ await bindings.initThreadPool(threads, moduleUrl);
69
+ if (request.method === "openOutput") {
70
+ outputReader = new bindings.OutputReader(request.args[0]);
71
+ result = outputReader.outputMetadata();
72
+ }
73
+ else {
74
+ simulation = request.method === "open"
75
+ ? new bindings.Simulation(request.args[0], request.args[1])
76
+ : bindings.Simulation.resumeCheckpoint(request.args[0]);
77
+ result = simulation.info();
78
+ }
79
+ }
80
+ else if (request.method === "close" || request.method === "closeOutput") {
81
+ shutdown();
82
+ }
83
+ else if (request.method === "outputMetadata" || request.method === "outputReadBulkSeries" ||
84
+ request.method === "outputReadBulkSeriesByPeriod" || request.method === "outputReadStoredDates" ||
85
+ request.method === "outputSubcatchmentSeries" || request.method === "outputNodeSeries" ||
86
+ request.method === "outputLinkSeries" || request.method === "outputSystemSeries") {
87
+ if (!outputReader)
88
+ throw new Error("Output reader is closed");
89
+ switch (request.method) {
90
+ case "outputMetadata":
91
+ result = outputReader.outputMetadata();
92
+ break;
93
+ case "outputReadBulkSeries":
94
+ result = outputReader.outputReadBulkSeries(...request.args);
95
+ break;
96
+ case "outputReadBulkSeriesByPeriod":
97
+ result = outputReader.outputReadBulkSeriesByPeriod(...request.args);
98
+ break;
99
+ case "outputReadStoredDates":
100
+ result = outputReader.outputReadStoredDates(...request.args);
101
+ break;
102
+ case "outputSubcatchmentSeries":
103
+ result = outputReader.outputSubcatchmentSeries(...request.args);
104
+ break;
105
+ case "outputNodeSeries":
106
+ result = outputReader.outputNodeSeries(...request.args);
107
+ break;
108
+ case "outputLinkSeries":
109
+ result = outputReader.outputLinkSeries(...request.args);
110
+ break;
111
+ case "outputSystemSeries":
112
+ result = outputReader.outputSystemSeries(...request.args);
113
+ break;
114
+ }
115
+ }
116
+ else {
117
+ if (!simulation)
118
+ throw new Error("Simulation is closed");
119
+ switch (request.method) {
120
+ case "state":
121
+ result = simulation.state;
122
+ break;
123
+ case "info":
124
+ result = simulation.info();
125
+ break;
126
+ case "status":
127
+ result = simulation.status();
128
+ break;
129
+ case "start":
130
+ simulation.start(...request.args);
131
+ break;
132
+ case "step":
133
+ result = simulation.step() ?? null;
134
+ break;
135
+ case "stride":
136
+ result = simulation.stride(...request.args) ?? null;
137
+ break;
138
+ case "node":
139
+ result = simulation.node(...request.args);
140
+ break;
141
+ case "link":
142
+ result = simulation.link(...request.args);
143
+ break;
144
+ case "nodes":
145
+ result = simulation.nodes(request.args[0] === undefined ? undefined : [...request.args[0]]);
146
+ break;
147
+ case "links":
148
+ result = simulation.links(request.args[0] === undefined ? undefined : [...request.args[0]]);
149
+ break;
150
+ case "subcatchment":
151
+ result = simulation.subcatchment(...request.args);
152
+ break;
153
+ case "nodeExternalInflow":
154
+ result = simulation.nodeExternalInflow(...request.args);
155
+ break;
156
+ case "outfallFixedStage":
157
+ result = simulation.outfallFixedStage(...request.args) ?? null;
158
+ break;
159
+ case "nodeQuality":
160
+ result = simulation.nodeQuality(...request.args);
161
+ break;
162
+ case "nodeQualitySnapshot":
163
+ result = simulation.nodeQualitySnapshot(request.args[0] === undefined ? undefined : [...request.args[0]]);
164
+ break;
165
+ case "overrideNodePollutantConcentrations":
166
+ simulation.overrideNodePollutantConcentrations(...request.args);
167
+ break;
168
+ case "nodeExternalPollutantMassFlux":
169
+ result = simulation.nodeExternalPollutantMassFlux(...request.args);
170
+ break;
171
+ case "nodeExternalPollutantMassFluxValue":
172
+ result = simulation.nodeExternalPollutantMassFluxValue(...request.args);
173
+ break;
174
+ case "updateNodeExternalPollutantMassFlux":
175
+ simulation.updateNodeExternalPollutantMassFlux(...request.args);
176
+ break;
177
+ case "nodeStatistics":
178
+ result = simulation.nodeStatistics(...request.args);
179
+ break;
180
+ case "storageStatistics":
181
+ result = simulation.storageStatistics(...request.args);
182
+ break;
183
+ case "outfallStatistics":
184
+ result = simulation.outfallStatistics(...request.args);
185
+ break;
186
+ case "nodeStatisticsSnapshot":
187
+ result = simulation.nodeStatisticsSnapshot(request.args[0] === undefined ? undefined : [...request.args[0]]);
188
+ break;
189
+ case "nodeTotalInflowVolume":
190
+ result = simulation.nodeTotalInflowVolume(...request.args);
191
+ break;
192
+ case "linkQuality":
193
+ result = simulation.linkQuality(...request.args);
194
+ break;
195
+ case "linkQualitySnapshot":
196
+ result = simulation.linkQualitySnapshot(request.args[0] === undefined ? undefined : [...request.args[0]]);
197
+ break;
198
+ case "overrideLinkPollutantConcentrations":
199
+ simulation.overrideLinkPollutantConcentrations(...request.args);
200
+ break;
201
+ case "linkExternalPollutantMassFlux":
202
+ result = simulation.linkExternalPollutantMassFlux(...request.args);
203
+ break;
204
+ case "linkExternalPollutantMassFluxValue":
205
+ result = simulation.linkExternalPollutantMassFluxValue(...request.args);
206
+ break;
207
+ case "updateLinkExternalPollutantMassFlux":
208
+ simulation.updateLinkExternalPollutantMassFlux(...request.args);
209
+ break;
210
+ case "setLinkFlowLimit":
211
+ simulation.setLinkFlowLimit(...request.args);
212
+ break;
213
+ case "linkStatistics":
214
+ result = simulation.linkStatistics(...request.args);
215
+ break;
216
+ case "pumpStatistics":
217
+ result = simulation.pumpStatistics(...request.args);
218
+ break;
219
+ case "linkStatisticsSnapshot":
220
+ result = simulation.linkStatisticsSnapshot(request.args[0] === undefined ? undefined : [...request.args[0]]);
221
+ break;
222
+ case "linkInlet":
223
+ result = simulation.linkInlet(...request.args);
224
+ break;
225
+ case "inletResults":
226
+ result = simulation.inletResults(...request.args);
227
+ break;
228
+ case "updateInlet":
229
+ simulation.updateInlet(...request.args);
230
+ break;
231
+ case "subcatchments":
232
+ result = simulation.subcatchments(request.args[0] === undefined ? undefined : [...request.args[0]]);
233
+ break;
234
+ case "rainGage":
235
+ result = simulation.rainGage(...request.args);
236
+ break;
237
+ case "nodeConfiguration":
238
+ result = simulation.nodeConfiguration(...request.args);
239
+ break;
240
+ case "linkConfiguration":
241
+ result = simulation.linkConfiguration(...request.args);
242
+ break;
243
+ case "useRainGageExternalPrecipitation":
244
+ simulation.useRainGageExternalPrecipitation(...request.args);
245
+ break;
246
+ case "rainGageExternalPrecipitationRate":
247
+ result = simulation.rainGageExternalPrecipitationRate(...request.args) ?? null;
248
+ break;
249
+ case "rainGageRainfallOverride":
250
+ result = simulation.rainGageRainfallOverride(...request.args) ?? null;
251
+ break;
252
+ case "subcatchmentPrecipitationScaleFactors":
253
+ result = simulation.subcatchmentPrecipitationScaleFactors(...request.args);
254
+ break;
255
+ case "setSubcatchmentPrecipitationScaleFactors":
256
+ simulation.setSubcatchmentPrecipitationScaleFactors(...request.args);
257
+ break;
258
+ case "subcatchmentExternalForcing":
259
+ result = simulation.subcatchmentExternalForcing(...request.args);
260
+ break;
261
+ case "setSubcatchmentExternalRainfall":
262
+ simulation.setSubcatchmentExternalRainfall(...request.args);
263
+ break;
264
+ case "setSubcatchmentExternalSnowfall":
265
+ simulation.setSubcatchmentExternalSnowfall(...request.args);
266
+ break;
267
+ case "subcatchmentQuality":
268
+ result = simulation.subcatchmentQuality(...request.args);
269
+ break;
270
+ case "subcatchmentQualitySnapshot":
271
+ result = simulation.subcatchmentQualitySnapshot(request.args[0] === undefined ? undefined : [...request.args[0]]);
272
+ break;
273
+ case "subcatchmentNamedSettings":
274
+ result = simulation.subcatchmentNamedSettings(...request.args);
275
+ break;
276
+ case "subcatchmentNamedSetting":
277
+ result = simulation.subcatchmentNamedSetting(...request.args);
278
+ break;
279
+ case "updateSubcatchmentNamedSettings":
280
+ simulation.updateSubcatchmentNamedSettings(...request.args);
281
+ break;
282
+ case "subcatchmentExternalPollutantBuildupIncrement":
283
+ result = simulation.subcatchmentExternalPollutantBuildupIncrement(...request.args);
284
+ break;
285
+ case "subcatchmentExternalPollutantBuildupIncrementValue":
286
+ result = simulation.subcatchmentExternalPollutantBuildupIncrementValue(...request.args);
287
+ break;
288
+ case "updateSubcatchmentExternalPollutantBuildupIncrement":
289
+ simulation.updateSubcatchmentExternalPollutantBuildupIncrement(...request.args);
290
+ break;
291
+ case "subcatchmentStatistics":
292
+ result = simulation.subcatchmentStatistics(...request.args);
293
+ break;
294
+ case "subcatchmentStatisticsSnapshot":
295
+ result = simulation.subcatchmentStatisticsSnapshot(request.args[0] === undefined ? undefined : [...request.args[0]]);
296
+ break;
297
+ case "subcatchmentConfiguration":
298
+ result = simulation.subcatchmentConfiguration(...request.args);
299
+ break;
300
+ case "configureNode":
301
+ simulation.configureNode(...request.args);
302
+ break;
303
+ case "configureLink":
304
+ simulation.configureLink(...request.args);
305
+ break;
306
+ case "configureSubcatchment":
307
+ simulation.configureSubcatchment(...request.args);
308
+ break;
309
+ case "setNodeExternalInflow":
310
+ simulation.setNodeExternalInflow(...request.args);
311
+ break;
312
+ case "setLinkTargetSetting":
313
+ simulation.setLinkTargetSetting(...request.args);
314
+ break;
315
+ case "setOutfallStage":
316
+ simulation.setOutfallStage(...request.args);
317
+ break;
318
+ case "setRainGagePrecipitation":
319
+ simulation.setRainGagePrecipitation(...request.args);
320
+ break;
321
+ case "setRainGageRainfallOverride":
322
+ simulation.setRainGageRainfallOverride(...request.args);
323
+ break;
324
+ case "options":
325
+ result = simulation.options();
326
+ break;
327
+ case "configureOptions":
328
+ simulation.configureOptions(...request.args);
329
+ break;
330
+ case "updateSchedule":
331
+ simulation.updateSchedule(...request.args);
332
+ break;
333
+ case "maximumRoutingStepSeconds":
334
+ result = simulation.maximumRoutingStepSeconds();
335
+ break;
336
+ case "ammModelConfiguration":
337
+ result = simulation.ammModelConfiguration(...request.args);
338
+ break;
339
+ case "configureAmmModel":
340
+ simulation.configureAmmModel(...request.args);
341
+ break;
342
+ case "ammAssignments":
343
+ result = simulation.ammAssignments();
344
+ break;
345
+ case "replaceAmmAssignments":
346
+ simulation.replaceAmmAssignments(...request.args);
347
+ break;
348
+ case "unitHydrographConfiguration":
349
+ result = simulation.unitHydrographConfiguration(...request.args);
350
+ break;
351
+ case "configureUnitHydrograph":
352
+ simulation.configureUnitHydrograph(...request.args);
353
+ break;
354
+ case "rdiiAssignments":
355
+ result = simulation.rdiiAssignments();
356
+ break;
357
+ case "replaceRdiiAssignments":
358
+ simulation.replaceRdiiAssignments(...request.args);
359
+ break;
360
+ case "aquiferConfiguration":
361
+ result = simulation.aquiferConfiguration(...request.args);
362
+ break;
363
+ case "configureAquifer":
364
+ simulation.configureAquifer(...request.args);
365
+ break;
366
+ case "snowmeltConfiguration":
367
+ result = simulation.snowmeltConfiguration(...request.args);
368
+ break;
369
+ case "configureSnowmelt":
370
+ simulation.configureSnowmelt(...request.args);
371
+ break;
372
+ case "snowmeltSurfaceConfiguration":
373
+ result = simulation.snowmeltSurfaceConfiguration(...request.args);
374
+ break;
375
+ case "configureSnowmeltSurface":
376
+ simulation.configureSnowmeltSurface(...request.args);
377
+ break;
378
+ case "lidControlConfiguration":
379
+ result = simulation.lidControlConfiguration(...request.args);
380
+ break;
381
+ case "configureLidControl":
382
+ simulation.configureLidControl(...request.args);
383
+ break;
384
+ case "lidUnitCount":
385
+ result = simulation.lidUnitCount(...request.args);
386
+ break;
387
+ case "lidUnitConfiguration":
388
+ result = simulation.lidUnitConfiguration(...request.args);
389
+ break;
390
+ case "configureLidUnit":
391
+ simulation.configureLidUnit(...request.args);
392
+ break;
393
+ case "lidUnitSnapshot":
394
+ result = simulation.lidUnitSnapshot(...request.args);
395
+ break;
396
+ case "subcatchmentLidSnapshot":
397
+ result = simulation.subcatchmentLidSnapshot(...request.args);
398
+ break;
399
+ case "useHotstart":
400
+ simulation.useHotstart(...request.args);
401
+ break;
402
+ case "saveHotstart":
403
+ result = simulation.saveHotstart();
404
+ break;
405
+ case "exportCheckpoint":
406
+ result = simulation.exportCheckpoint();
407
+ break;
408
+ case "loadCheckpointState":
409
+ simulation.loadCheckpointState(...request.args);
410
+ break;
411
+ case "statistics":
412
+ result = simulation.statistics();
413
+ break;
414
+ case "finish":
415
+ simulation.finish();
416
+ result = results(simulation);
417
+ break;
418
+ case "run":
419
+ simulation.run(...request.args);
420
+ result = results(simulation);
421
+ break;
422
+ case "end":
423
+ simulation.end();
424
+ break;
425
+ case "finalizeReport":
426
+ simulation.finalizeReport();
427
+ break;
428
+ case "report":
429
+ simulation.report();
430
+ break;
431
+ case "resetSolver":
432
+ simulation.resetSolver();
433
+ break;
434
+ case "sleepWorkers":
435
+ simulation.sleepWorkers();
436
+ break;
437
+ case "readFile":
438
+ result = simulation.readFile(...request.args);
439
+ break;
440
+ default: {
441
+ const unhandled = request;
442
+ throw new Error(`Unknown simulation operation: ${String(unhandled)}`);
443
+ }
444
+ }
445
+ }
446
+ const transfers = [];
447
+ if (result instanceof Uint8Array)
448
+ transfers.push(result.buffer);
449
+ else if (result && typeof result === "object") {
450
+ if ("output" in result && result.output instanceof Uint8Array)
451
+ transfers.push(result.output.buffer);
452
+ if (request.method === "exportCheckpoint") {
453
+ const checkpoint = result;
454
+ transfers.push(checkpoint.manifest.buffer);
455
+ for (const bytes of Object.values(checkpoint.files))
456
+ transfers.push(bytes.buffer);
457
+ }
458
+ }
459
+ host.postMessage({ id, ok: true, result }, transfers);
460
+ }
461
+ catch (error) {
462
+ const fatal = error instanceof WebAssembly.RuntimeError || method === "open" || method === "resumeCheckpoint" || method === "openOutput" || method === "close" || method === "closeOutput";
463
+ const source = error && typeof error === "object" ? error : {};
464
+ const detail = {
465
+ message: error instanceof Error ? error.message : String(error),
466
+ code: typeof source.code === "number" ? source.code : error instanceof WebAssembly.RuntimeError ? 9999 : undefined,
467
+ operation: typeof source.operation === "string" ? source.operation : method,
468
+ detail: typeof source.detail === "string" ? source.detail : undefined,
469
+ semanticCode: typeof source.semanticCode === "string" ? source.semanticCode : undefined,
470
+ category: typeof source.category === "string" ? source.category : undefined,
471
+ diagnostics: Array.isArray(source.diagnostics) ? source.diagnostics : undefined,
472
+ report: typeof source.report === "string" ? source.report : undefined,
473
+ cleanupError: typeof source.cleanupError === "string" ? source.cleanupError : undefined,
474
+ };
475
+ if (fatal && method !== "close") {
476
+ try {
477
+ shutdown();
478
+ }
479
+ catch (cleanupError) {
480
+ detail.cleanupError = String(cleanupError);
481
+ }
482
+ }
483
+ host.postMessage({ id, ok: false, error: detail, fatal });
484
+ }
485
+ }
486
+ // Native calls are synchronous. Initialization must finish before later requests.
487
+ host.onmessage = ({ data }) => { queue = queue.then(() => dispatch(data)); };
488
+ //# sourceMappingURL=worker.js.map