@earthyscience/netcdf4-wasm 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.
@@ -0,0 +1,556 @@
1
+ // WASM module loading and wrapping functionality
2
+ import { NC_CONSTANTS } from './constants.js';
3
+ const NC_MAX_NAME = 256;
4
+ const NC_MAX_DIMS = 1024;
5
+ const NC_MAX_VARS = 8192;
6
+ export class WasmModuleLoader {
7
+ static async loadModule(options = {}) {
8
+ try {
9
+ if (typeof window === 'undefined') {
10
+ throw new Error('NetCDF4-WASM only works in browser environments.');
11
+ }
12
+ // Dynamically import the generated netcdf4-wasm.js module
13
+ const netcdf4Module = await import('./netcdf4-wasm.js');
14
+ const createNetCDF4Module = netcdf4Module.default;
15
+ // Use the imported module factory
16
+ const rawModule = await createNetCDF4Module({
17
+ locateFile: (file) => {
18
+ if (file.endsWith('.wasm')) {
19
+ return options.wasmPath || './netcdf4-wasm.wasm';
20
+ }
21
+ return file;
22
+ }
23
+ });
24
+ // Wrap the module with high-level functions
25
+ return WasmModuleLoader.wrapModule(rawModule);
26
+ }
27
+ catch (error) {
28
+ throw new Error(`Failed to load NetCDF4 WASM module: ${error}`);
29
+ }
30
+ }
31
+ static wrapModule(module) {
32
+ // Create wrappers for NetCDF functions
33
+ const nc_open_wrapper = module.cwrap('nc_open_wrapper', 'number', ['string', 'number', 'number']);
34
+ const nc_close_wrapper = module.cwrap('nc_close_wrapper', 'number', ['number']);
35
+ const nc_create_wrapper = module.cwrap('nc_create_wrapper', 'number', ['string', 'number', 'number']);
36
+ const nc_def_dim_wrapper = module.cwrap('nc_def_dim_wrapper', 'number', ['number', 'string', 'number', 'number']);
37
+ const nc_def_var_wrapper = module.cwrap('nc_def_var_wrapper', 'number', ['number', 'string', 'number', 'number', 'number', 'number']);
38
+ const nc_put_var_double_wrapper = module.cwrap('nc_put_var_double_wrapper', 'number', ['number', 'number', 'number']);
39
+ // const nc_get_var_double_wrapper = module.cwrap('nc_get_var_double_wrapper', 'number', ['number', 'number', 'number']);
40
+ const nc_enddef_wrapper = module.cwrap('nc_enddef_wrapper', 'number', ['number']);
41
+ // Dimension inquiry wrappers
42
+ const nc_inq_ndims_wrapper = module.cwrap('nc_inq_ndims_wrapper', 'number', ['number', 'number']);
43
+ const nc_inq_unlimdim_wrapper = module.cwrap('nc_inq_unlimdim_wrapper', 'number', ['number', 'number']);
44
+ const nc_inq_dimids_wrapper = module.cwrap('nc_inq_dimids_wrapper', 'number', ['number', 'number', 'number', 'number']);
45
+ const nc_inq_dim_wrapper = module.cwrap('nc_inq_dim_wrapper', 'number', ['number', 'number', 'number', 'number']);
46
+ const nc_inq_dimid_wrapper = module.cwrap('nc_inq_dimid_wrapper', 'number', ['number', 'string', 'number']);
47
+ const nc_inq_dimlen_wrapper = module.cwrap('nc_inq_dimlen_wrapper', 'number', ['number', 'number', 'number']);
48
+ const nc_inq_dimname_wrapper = module.cwrap('nc_inq_dimname_wrapper', 'number', ['number', 'number', 'number']);
49
+ // Variable inquiry wrappers
50
+ const nc_inq_nvars_wrapper = module.cwrap('nc_inq_nvars_wrapper', 'number', ['number', 'number']);
51
+ const nc_inq_varids_wrapper = module.cwrap('nc_inq_varids_wrapper', 'number', ['number', 'number', 'number']);
52
+ const nc_inq_varid_wrapper = module.cwrap('nc_inq_varid_wrapper', 'number', ['number', 'string', 'number']);
53
+ const nc_inq_var_wrapper = module.cwrap('nc_inq_var_wrapper', 'number', [
54
+ 'number', 'number', // ncid, varid
55
+ 'number', // name pointer
56
+ 'number', 'number', 'number', // typep, ndimsp, dimidsp, nattsp
57
+ ]);
58
+ // Variable inquiry wrappers
59
+ const nc_inq_varname_wrapper = module.cwrap('nc_inq_varname_wrapper', 'number', ['number', 'number', 'number']);
60
+ const nc_inq_vartype_wrapper = module.cwrap('nc_inq_vartype_wrapper', 'number', ['number', 'number', 'number']);
61
+ const nc_inq_varndims_wrapper = module.cwrap('nc_inq_varndims_wrapper', 'number', ['number', 'number', 'number']);
62
+ const nc_inq_vardimid_wrapper = module.cwrap('nc_inq_vardimid_wrapper', 'number', ['number', 'number', 'number']);
63
+ const nc_inq_varnatts_wrapper = module.cwrap('nc_inq_varnatts_wrapper', 'number', ['number', 'number', 'number']);
64
+ const nc_inq_var_chunking_wrapper = module.cwrap('nc_inq_var_chunking_wrapper', 'number', ['number', 'number', 'number', 'number']);
65
+ // Attribute inquiry wrappers
66
+ const nc_inq_natts_wrapper = module.cwrap('nc_inq_natts_wrapper', 'number', ['number', 'number']);
67
+ const nc_inq_att_wrapper = module.cwrap('nc_inq_att_wrapper', 'number', ['number', 'number', 'string', 'number', 'number']);
68
+ const nc_inq_attid_wrapper = module.cwrap('nc_inq_attid_wrapper', 'number', ['number', 'number', 'string', 'number']);
69
+ const nc_inq_attname_wrapper = module.cwrap('nc_inq_attname_wrapper', 'number', ['number', 'number', 'number', 'number']);
70
+ const nc_inq_atttype_wrapper = module.cwrap('nc_inq_atttype_wrapper', 'number', ['number', 'number', 'string', 'number']);
71
+ const nc_inq_attlen_wrapper = module.cwrap('nc_inq_attlen_wrapper', 'number', ['number', 'number', 'string', 'number']);
72
+ // Attribute getters
73
+ const nc_get_att_text_wrapper = module.cwrap('nc_get_att_text_wrapper', 'number', ['number', 'number', 'string', 'number']);
74
+ const nc_get_att_short_wrapper = module.cwrap('nc_get_att_short_wrapper', 'number', ['number', 'number', 'string', 'number']);
75
+ const nc_get_att_int_wrapper = module.cwrap('nc_get_att_int_wrapper', 'number', ['number', 'number', 'string', 'number']);
76
+ const nc_get_att_float_wrapper = module.cwrap('nc_get_att_float_wrapper', 'number', ['number', 'number', 'string', 'number']);
77
+ const nc_get_att_double_wrapper = module.cwrap('nc_get_att_double_wrapper', 'number', ['number', 'number', 'string', 'number']);
78
+ const nc_get_att_longlong_wrapper = module.cwrap('nc_get_att_longlong_wrapper', 'number', ['number', 'number', 'string', 'number']);
79
+ // Variable getters
80
+ const nc_get_vara_short_wrapper = module.cwrap('nc_get_vara_short_wrapper', 'number', ['number', 'number', 'number', 'number', 'number']);
81
+ const nc_get_vara_int_wrapper = module.cwrap('nc_get_vara_int_wrapper', 'number', ['number', 'number', 'number', 'number', 'number']);
82
+ const nc_get_vara_float_wrapper = module.cwrap('nc_get_vara_float_wrapper', 'number', ['number', 'number', 'number', 'number', 'number']);
83
+ const nc_get_vara_double_wrapper = module.cwrap('nc_get_vara_double_wrapper', 'number', ['number', 'number', 'number', 'number', 'number']);
84
+ const nc_get_var_text_wrapper = module.cwrap('nc_get_var_text_wrapper', 'number', ['number', 'number', 'number']);
85
+ const nc_get_var_short_wrapper = module.cwrap('nc_get_var_short_wrapper', 'number', ['number', 'number', 'number']);
86
+ const nc_get_var_int_wrapper = module.cwrap('nc_get_var_int_wrapper', 'number', ['number', 'number', 'number']);
87
+ const nc_get_var_longlong_wrapper = module.cwrap('nc_get_var_longlong_wrapper', 'number', ['number', 'number', 'number']);
88
+ const nc_get_var_float_wrapper = module.cwrap('nc_get_var_float_wrapper', 'number', ['number', 'number', 'number']);
89
+ const nc_get_var_double_wrapper = module.cwrap('nc_get_var_double_wrapper', 'number', ['number', 'number', 'number']);
90
+ return {
91
+ ...module,
92
+ nc_open: (path, mode) => {
93
+ const ncidPtr = module._malloc(4);
94
+ const result = nc_open_wrapper(path, mode, ncidPtr);
95
+ const ncid = module.getValue(ncidPtr, 'i32');
96
+ module._free(ncidPtr);
97
+ return { result, ncid };
98
+ },
99
+ nc_close: (ncid) => {
100
+ return nc_close_wrapper(ncid);
101
+ },
102
+ nc_create: (path, mode) => {
103
+ const ncidPtr = module._malloc(4);
104
+ const result = nc_create_wrapper(path, mode, ncidPtr);
105
+ const ncid = module.getValue(ncidPtr, 'i32');
106
+ module._free(ncidPtr);
107
+ return { result, ncid };
108
+ },
109
+ // ---- Dimension Inquiry ----//
110
+ nc_inq_ndims: (ncid) => {
111
+ const ndimsPtr = module._malloc(4);
112
+ const result = nc_inq_ndims_wrapper(ncid, ndimsPtr);
113
+ const ndims = result === NC_CONSTANTS.NC_NOERR ? module.getValue(ndimsPtr, 'i32') : undefined;
114
+ module._free(ndimsPtr);
115
+ return { result, ndims };
116
+ },
117
+ nc_inq_unlimdim: (ncid) => {
118
+ const unlimdimidPtr = module._malloc(4);
119
+ const result = nc_inq_unlimdim_wrapper(ncid, unlimdimidPtr);
120
+ const unlimdimid = result === NC_CONSTANTS.NC_NOERR ? module.getValue(unlimdimidPtr, 'i32') : undefined;
121
+ module._free(unlimdimidPtr);
122
+ return { result, unlimdimid };
123
+ },
124
+ nc_inq_dimids: (ncid, include_parents = 0) => {
125
+ const ndimsPtr = module._malloc(4);
126
+ const dimidsPtr = module._malloc(NC_MAX_DIMS * 4);
127
+ const result = nc_inq_dimids_wrapper(ncid, ndimsPtr, dimidsPtr, include_parents);
128
+ let ndims, dimids;
129
+ if (result === NC_CONSTANTS.NC_NOERR) {
130
+ ndims = module.getValue(ndimsPtr, 'i32');
131
+ dimids = Int32Array.from({ length: ndims }, (_, i) => module.getValue(dimidsPtr + (i * 4), 'i32'));
132
+ }
133
+ module._free(ndimsPtr);
134
+ module._free(dimidsPtr);
135
+ return { result, ndims, dimids };
136
+ },
137
+ nc_inq_dim: (ncid, dimid) => {
138
+ const namePtr = module._malloc(NC_MAX_NAME + 1);
139
+ const lenPtr = module._malloc(8); // size_t (use 8 bytes for safety in wasm64)
140
+ const result = nc_inq_dim_wrapper(ncid, dimid, namePtr, lenPtr);
141
+ let name, len;
142
+ if (result === NC_CONSTANTS.NC_NOERR) {
143
+ name = module.UTF8ToString(namePtr);
144
+ len = module.getValue(lenPtr, 'i32'); // or 'i32' if your build uses 32-bit size_t
145
+ }
146
+ module._free(namePtr);
147
+ module._free(lenPtr);
148
+ return { result, name, len };
149
+ },
150
+ nc_inq_dimid: (ncid, name) => {
151
+ const dimidPtr = module._malloc(4);
152
+ const result = nc_inq_dimid_wrapper(ncid, name, dimidPtr);
153
+ const dimid = result === NC_CONSTANTS.NC_NOERR ? module.getValue(dimidPtr, 'i32') : undefined;
154
+ module._free(dimidPtr);
155
+ return { result, dimid };
156
+ },
157
+ nc_inq_dimlen: (ncid, dimid) => {
158
+ const lenPtr = module._malloc(8);
159
+ const result = nc_inq_dimlen_wrapper(ncid, dimid, lenPtr);
160
+ const len = result === NC_CONSTANTS.NC_NOERR ? module.getValue(lenPtr, 'i64') : undefined;
161
+ module._free(lenPtr);
162
+ return { result, len };
163
+ },
164
+ nc_inq_dimname: (ncid, dimid) => {
165
+ const namePtr = module._malloc(NC_MAX_NAME + 1);
166
+ module.HEAPU8.fill(0, namePtr, namePtr + NC_MAX_NAME + 1);
167
+ const result = nc_inq_dimname_wrapper(ncid, dimid, namePtr);
168
+ const name = result === NC_CONSTANTS.NC_NOERR ? module.UTF8ToString(namePtr) : undefined;
169
+ module._free(namePtr);
170
+ return { result, name };
171
+ },
172
+ //---- Variable inquiry functions ----//
173
+ nc_inq_nvars: (ncid) => {
174
+ const nvarsPtr = module._malloc(4);
175
+ const result = nc_inq_nvars_wrapper(ncid, nvarsPtr);
176
+ const nvars = result === NC_CONSTANTS.NC_NOERR ? module.getValue(nvarsPtr, 'i32') : undefined;
177
+ module._free(nvarsPtr);
178
+ return { result, nvars };
179
+ },
180
+ nc_inq_varids: (ncid) => {
181
+ const nvarsPtr = module._malloc(4);
182
+ const varidsPtr = module._malloc(NC_MAX_VARS * 4);
183
+ const result = nc_inq_varids_wrapper(ncid, nvarsPtr, varidsPtr);
184
+ let nvars, varids;
185
+ if (result === NC_CONSTANTS.NC_NOERR) {
186
+ nvars = module.getValue(nvarsPtr, 'i32');
187
+ varids = Int32Array.from({ length: nvars }, (_, i) => module.getValue(varidsPtr + (i * 4), 'i32'));
188
+ }
189
+ module._free(nvarsPtr);
190
+ module._free(varidsPtr);
191
+ return { result, nvars, varids };
192
+ },
193
+ nc_inq_varid: (ncid, name) => {
194
+ const varidPtr = module._malloc(4);
195
+ const result = nc_inq_varid_wrapper(ncid, name, varidPtr);
196
+ const varid = result === NC_CONSTANTS.NC_NOERR ? module.getValue(varidPtr, 'i32') : undefined;
197
+ module._free(varidPtr);
198
+ return { result, varid };
199
+ },
200
+ nc_inq_var: (ncid, varid) => {
201
+ const namePtr = module._malloc(NC_MAX_NAME + 1);
202
+ const typePtr = module._malloc(4);
203
+ const ndimsPtr = module._malloc(4);
204
+ const dimidsPtr = module._malloc(NC_MAX_DIMS * 4);
205
+ const nattsPtr = module._malloc(4);
206
+ const result = nc_inq_var_wrapper(ncid, varid, namePtr, typePtr, ndimsPtr, dimidsPtr, nattsPtr);
207
+ let name, type, ndims, dimids, natts;
208
+ if (result === NC_CONSTANTS.NC_NOERR) {
209
+ name = module.UTF8ToString(namePtr);
210
+ type = module.getValue(typePtr, 'i32');
211
+ ndims = module.getValue(ndimsPtr, 'i32');
212
+ natts = module.getValue(nattsPtr, 'i32');
213
+ dimids = Int32Array.from({ length: ndims }, (_, i) => module.getValue(dimidsPtr + (i * 4), 'i32'));
214
+ }
215
+ module._free(namePtr);
216
+ module._free(typePtr);
217
+ module._free(ndimsPtr);
218
+ module._free(dimidsPtr);
219
+ module._free(nattsPtr);
220
+ return { result, name, type, ndims, dimids, natts };
221
+ },
222
+ nc_inq_varname: (ncid, varid) => {
223
+ const namePtr = module._malloc(NC_MAX_NAME + 1);
224
+ const result = nc_inq_varname_wrapper(ncid, varid, namePtr);
225
+ const name = result === NC_CONSTANTS.NC_NOERR ? module.UTF8ToString(namePtr) : undefined;
226
+ module._free(namePtr);
227
+ return { result, name };
228
+ },
229
+ nc_inq_vartype: (ncid, varid) => {
230
+ const typePtr = module._malloc(4);
231
+ const result = nc_inq_vartype_wrapper(ncid, varid, typePtr);
232
+ const type = result === NC_CONSTANTS.NC_NOERR ? module.getValue(typePtr, 'i32') : undefined;
233
+ module._free(typePtr);
234
+ return { result, type };
235
+ },
236
+ nc_inq_varndims: (ncid, varid) => {
237
+ const ndimsPtr = module._malloc(4);
238
+ const result = nc_inq_varndims_wrapper(ncid, varid, ndimsPtr);
239
+ const ndims = result === NC_CONSTANTS.NC_NOERR ? module.getValue(ndimsPtr, 'i32') : undefined;
240
+ module._free(ndimsPtr);
241
+ return { result, ndims };
242
+ },
243
+ nc_inq_vardimid: (ncid, varid) => {
244
+ const ndimsPtr = module._malloc(4);
245
+ const dimidsPtr = module._malloc(NC_MAX_DIMS * 4);
246
+ const result = nc_inq_vardimid_wrapper(ncid, varid, dimidsPtr); // Note: this wrapper doesn't return ndims first
247
+ // nc_inq_vardimid writes directly into dimids array; we need ndims separately or assume max
248
+ // Better: always call nc_inq_varndims first in practice, or use nc_inq_var
249
+ // For standalone use, we'll read up to NC_MAX_DIMS
250
+ let dimids;
251
+ if (result === NC_CONSTANTS.NC_NOERR) {
252
+ // You may want to get ndims first via nc_inq_varndims for exact length
253
+ dimids = Int32Array.from(new Int32Array(module.HEAP32.buffer, dimidsPtr, NC_MAX_DIMS));
254
+ // Trim trailing -1 or invalid values if needed
255
+ }
256
+ module._free(ndimsPtr);
257
+ module._free(dimidsPtr);
258
+ return { result, dimids };
259
+ },
260
+ nc_inq_varnatts: (ncid, varid) => {
261
+ const nattsPtr = module._malloc(4);
262
+ const result = nc_inq_varnatts_wrapper(ncid, varid, nattsPtr);
263
+ const natts = result === NC_CONSTANTS.NC_NOERR ? module.getValue(nattsPtr, 'i32') : undefined;
264
+ module._free(nattsPtr);
265
+ return { result, natts };
266
+ },
267
+ nc_inq_var_chunking: (ncid, varid) => {
268
+ const chunkingPtr = module._malloc(4);
269
+ const chunkSizesPtr = module._malloc(NC_MAX_DIMS * 4); // assuming size_t is 8 bytes
270
+ const result = nc_inq_var_chunking_wrapper(ncid, varid, chunkingPtr, chunkSizesPtr);
271
+ let chunking, chunkSizes;
272
+ if (result === NC_CONSTANTS.NC_NOERR) {
273
+ chunking = module.getValue(chunkingPtr, 'i32');
274
+ // First, get the number of dimensions for this variable
275
+ const ndimsPtr = module._malloc(4);
276
+ const inqResult = nc_inq_varndims_wrapper(ncid, varid, ndimsPtr);
277
+ let ndims = NC_MAX_DIMS; // default fallback
278
+ if (inqResult === NC_CONSTANTS.NC_NOERR) {
279
+ ndims = module.getValue(ndimsPtr, 'i32');
280
+ }
281
+ module._free(ndimsPtr);
282
+ // Only read the actual number of dimensions
283
+ chunkSizes = new Array(ndims);
284
+ for (let i = 0; i < ndims; i++) {
285
+ chunkSizes[i] = module.getValue(chunkSizesPtr + i * 4, 'i32');
286
+ }
287
+ }
288
+ module._free(chunkingPtr);
289
+ module._free(chunkSizesPtr);
290
+ return { result, chunking, chunkSizes };
291
+ },
292
+ //---- Attribute inquiry functions ----//
293
+ nc_inq_natts: (ncid) => {
294
+ const nattsPtr = module._malloc(4);
295
+ const result = nc_inq_natts_wrapper(ncid, nattsPtr);
296
+ const natts = result === NC_CONSTANTS.NC_NOERR ? module.getValue(nattsPtr, 'i32') : undefined;
297
+ module._free(nattsPtr);
298
+ return { result, natts };
299
+ },
300
+ nc_inq_att: (ncid, varid, name) => {
301
+ const typePtr = module._malloc(4);
302
+ const lenPtr = module._malloc(8);
303
+ const result = nc_inq_att_wrapper(ncid, varid, name, typePtr, lenPtr);
304
+ let type, len;
305
+ if (result === NC_CONSTANTS.NC_NOERR) {
306
+ type = module.getValue(typePtr, 'i32');
307
+ len = module.getValue(lenPtr, 'i32');
308
+ }
309
+ module._free(typePtr);
310
+ module._free(lenPtr);
311
+ return { result, type, len };
312
+ },
313
+ nc_inq_attid: (ncid, varid, name) => {
314
+ const attnumPtr = module._malloc(4);
315
+ const result = nc_inq_attid_wrapper(ncid, varid, name, attnumPtr);
316
+ const attnum = result === NC_CONSTANTS.NC_NOERR ? module.getValue(attnumPtr, 'i32') : undefined;
317
+ module._free(attnumPtr);
318
+ return { result, attnum };
319
+ },
320
+ nc_inq_attname: (ncid, varid, attnum) => {
321
+ const namePtr = module._malloc(NC_MAX_NAME + 1);
322
+ const result = nc_inq_attname_wrapper(ncid, varid, attnum, namePtr);
323
+ const name = result === NC_CONSTANTS.NC_NOERR ? module.UTF8ToString(namePtr) : undefined;
324
+ module._free(namePtr);
325
+ return { result, name };
326
+ },
327
+ nc_inq_atttype: (ncid, varid, name) => {
328
+ const typePtr = module._malloc(4);
329
+ const result = nc_inq_atttype_wrapper(ncid, varid, name, typePtr);
330
+ const type = result === NC_CONSTANTS.NC_NOERR ? module.getValue(typePtr, 'i32') : undefined;
331
+ module._free(typePtr);
332
+ return { result, type };
333
+ },
334
+ nc_inq_attlen: (ncid, varid, name) => {
335
+ const lenPtr = module._malloc(8);
336
+ const result = nc_inq_attlen_wrapper(ncid, varid, name, lenPtr);
337
+ const len = result === NC_CONSTANTS.NC_NOERR ? module.getValue(lenPtr, 'i64') : undefined;
338
+ module._free(lenPtr);
339
+ return { result, len };
340
+ },
341
+ //---- Attribute Getters ----//
342
+ nc_get_att_text: (ncid, varid, name, length) => {
343
+ const dataPtr = module._malloc(length + 1);
344
+ const result = nc_get_att_text_wrapper(ncid, varid, name, dataPtr);
345
+ module.setValue(dataPtr + length, 0, 'i8'); // Add null terminator so it doesn't read too far
346
+ const data = result === NC_CONSTANTS.NC_NOERR
347
+ ? module.UTF8ToString(dataPtr)
348
+ : undefined;
349
+ module._free(dataPtr);
350
+ return { result, data };
351
+ },
352
+ nc_get_att_short: (ncid, varid, name, length) => {
353
+ const dataPtr = module._malloc(length * 2);
354
+ const result = nc_get_att_short_wrapper(ncid, varid, name, dataPtr);
355
+ const data = result === NC_CONSTANTS.NC_NOERR
356
+ ? Array.from({ length }, (_, i) => module.getValue(dataPtr + i * 2, 'i16'))
357
+ : undefined;
358
+ module._free(dataPtr);
359
+ return { result, data };
360
+ },
361
+ nc_get_att_int: (ncid, varid, name, length) => {
362
+ const dataPtr = module._malloc(length * 4);
363
+ const result = nc_get_att_int_wrapper(ncid, varid, name, dataPtr);
364
+ const data = result === NC_CONSTANTS.NC_NOERR
365
+ ? Array.from({ length }, (_, i) => module.getValue(dataPtr + i * 4, 'i32'))
366
+ : undefined;
367
+ module._free(dataPtr);
368
+ return { result, data };
369
+ },
370
+ nc_get_att_float: (ncid, varid, name, length) => {
371
+ const dataPtr = module._malloc(length * 4);
372
+ const result = nc_get_att_float_wrapper(ncid, varid, name, dataPtr);
373
+ const data = result === NC_CONSTANTS.NC_NOERR
374
+ ? Array.from({ length }, (_, i) => module.getValue(dataPtr + i * 4, 'float'))
375
+ : undefined;
376
+ module._free(dataPtr);
377
+ return { result, data };
378
+ },
379
+ nc_get_att_double: (ncid, varid, name, length) => {
380
+ const dataPtr = module._malloc(length * 8);
381
+ const result = nc_get_att_double_wrapper(ncid, varid, name, dataPtr);
382
+ const data = result === NC_CONSTANTS.NC_NOERR
383
+ ? Array.from({ length }, (_, i) => module.getValue(dataPtr + i * 8, 'double'))
384
+ : undefined;
385
+ module._free(dataPtr);
386
+ return { result, data };
387
+ },
388
+ nc_get_att_longlong: (ncid, varid, name, length) => {
389
+ const dataPtr = module._malloc(length * 8);
390
+ const result = nc_get_att_longlong_wrapper(ncid, varid, name, dataPtr);
391
+ const data = result === NC_CONSTANTS.NC_NOERR
392
+ ? Array.from({ length }, (_, i) => BigInt(module.getValue(dataPtr + i * 8, 'i64')))
393
+ : undefined;
394
+ module._free(dataPtr);
395
+ return { result, data };
396
+ },
397
+ //---- Variable Getters ----//
398
+ nc_get_vara_short: (ncid, varid, start, count) => {
399
+ const totalLength = count.reduce((a, b) => a * b, 1);
400
+ const dataPtr = module._malloc(totalLength * 2);
401
+ const startPtr = module._malloc(start.length * 8);
402
+ const countPtr = module._malloc(count.length * 8);
403
+ start.forEach((val, i) => module.setValue(startPtr + i * 8, val, 'i64'));
404
+ count.forEach((val, i) => module.setValue(countPtr + i * 8, val, 'i64'));
405
+ const result = nc_get_vara_short_wrapper(ncid, varid, startPtr, countPtr, dataPtr);
406
+ const data = result === NC_CONSTANTS.NC_NOERR
407
+ ? new Int16Array(module.HEAP16.buffer, dataPtr, totalLength).slice()
408
+ : undefined;
409
+ module._free(dataPtr);
410
+ module._free(startPtr);
411
+ module._free(countPtr);
412
+ return { result, data };
413
+ },
414
+ nc_get_vara_int: (ncid, varid, start, count) => {
415
+ const totalLength = count.reduce((a, b) => a * b, 1);
416
+ const dataPtr = module._malloc(totalLength * 4);
417
+ const startPtr = module._malloc(start.length * 8);
418
+ const countPtr = module._malloc(count.length * 8);
419
+ start.forEach((val, i) => module.setValue(startPtr + i * 8, val, 'i64'));
420
+ count.forEach((val, i) => module.setValue(countPtr + i * 8, val, 'i64'));
421
+ const result = nc_get_vara_int_wrapper(ncid, varid, startPtr, countPtr, dataPtr);
422
+ const data = result === NC_CONSTANTS.NC_NOERR
423
+ ? new Int32Array(module.HEAP32.buffer, dataPtr, totalLength).slice()
424
+ : undefined;
425
+ module._free(dataPtr);
426
+ module._free(startPtr);
427
+ module._free(countPtr);
428
+ return { result, data };
429
+ },
430
+ nc_get_vara_float: (ncid, varid, start, count) => {
431
+ const totalLength = count.reduce((a, b) => a * b, 1);
432
+ const dataPtr = module._malloc(totalLength * 4);
433
+ const startPtr = module._malloc(start.length * 4);
434
+ const countPtr = module._malloc(count.length * 4);
435
+ start.forEach((val, i) => module.setValue(startPtr + i * 4, val, 'i32'));
436
+ count.forEach((val, i) => module.setValue(countPtr + i * 4, val, 'i32'));
437
+ const result = nc_get_vara_float_wrapper(ncid, varid, startPtr, countPtr, dataPtr);
438
+ const data = result === NC_CONSTANTS.NC_NOERR
439
+ ? new Float32Array(module.HEAPF32.buffer, dataPtr, totalLength).slice()
440
+ : undefined;
441
+ module._free(dataPtr);
442
+ module._free(startPtr);
443
+ module._free(countPtr);
444
+ return { result, data };
445
+ },
446
+ nc_get_vara_double: (ncid, varid, start, count) => {
447
+ const totalLength = count.reduce((a, b) => a * b, 1);
448
+ const dataPtr = module._malloc(totalLength * 8);
449
+ const startPtr = module._malloc(start.length * 8);
450
+ const countPtr = module._malloc(count.length * 8);
451
+ start.forEach((val, i) => module.setValue(startPtr + i * 8, val, 'i64'));
452
+ count.forEach((val, i) => module.setValue(countPtr + i * 8, val, 'i64'));
453
+ const result = nc_get_vara_double_wrapper(ncid, varid, startPtr, countPtr, dataPtr);
454
+ const data = result === NC_CONSTANTS.NC_NOERR
455
+ ? new Float64Array(module.HEAPF64.buffer, dataPtr, totalLength).slice()
456
+ : undefined;
457
+ module._free(dataPtr);
458
+ module._free(startPtr);
459
+ module._free(countPtr);
460
+ return { result, data };
461
+ },
462
+ //---- Full Variable Getters ----//
463
+ nc_get_var_text: (ncid, varid, length) => {
464
+ const dataPtr = module._malloc(length);
465
+ const result = nc_get_var_text_wrapper(ncid, varid, dataPtr);
466
+ const data = result === NC_CONSTANTS.NC_NOERR
467
+ ? Array.from({ length }, (_, i) => module.UTF8ToString(module.getValue(dataPtr + i, 'i8')))
468
+ : undefined;
469
+ module._free(dataPtr);
470
+ return { result, data };
471
+ },
472
+ nc_get_var_short: (ncid, varid, length) => {
473
+ const dataPtr = module._malloc(length * 2);
474
+ const result = nc_get_var_short_wrapper(ncid, varid, dataPtr);
475
+ let data;
476
+ if (result === NC_CONSTANTS.NC_NOERR) {
477
+ // Create a view of the heap and copy it into a new Int16Array
478
+ data = new Int16Array(module.HEAP16.buffer, dataPtr, length).slice();
479
+ }
480
+ module._free(dataPtr);
481
+ return { result, data };
482
+ },
483
+ nc_get_var_int: (ncid, varid, length) => {
484
+ const dataPtr = module._malloc(length * 4);
485
+ const result = nc_get_var_int_wrapper(ncid, varid, dataPtr);
486
+ let data;
487
+ if (result === NC_CONSTANTS.NC_NOERR) {
488
+ data = new Int32Array(module.HEAP32.buffer, dataPtr, length).slice();
489
+ }
490
+ module._free(dataPtr);
491
+ return { result, data };
492
+ },
493
+ nc_get_var_float: (ncid, varid, length) => {
494
+ const dataPtr = module._malloc(length * 4);
495
+ const result = nc_get_var_float_wrapper(ncid, varid, dataPtr);
496
+ let data;
497
+ if (result === NC_CONSTANTS.NC_NOERR) {
498
+ data = new Float32Array(module.HEAPF32.buffer, dataPtr, length).slice();
499
+ }
500
+ module._free(dataPtr);
501
+ return { result, data };
502
+ },
503
+ nc_get_var_longlong: (ncid, varid, length) => {
504
+ const dataPtr = module._malloc(length * 8);
505
+ const result = nc_get_var_longlong_wrapper(ncid, varid, dataPtr);
506
+ let data;
507
+ if (result === NC_CONSTANTS.NC_NOERR) {
508
+ // BigInt64Array is used for i64 (long long)
509
+ data = new BigInt64Array(module.HEAP64.buffer, dataPtr, length).slice();
510
+ }
511
+ module._free(dataPtr);
512
+ return { result, data };
513
+ },
514
+ nc_def_dim: (ncid, name, len) => {
515
+ const dimidPtr = module._malloc(4);
516
+ const result = nc_def_dim_wrapper(ncid, name, len, dimidPtr);
517
+ const dimid = module.getValue(dimidPtr, 'i32');
518
+ module._free(dimidPtr);
519
+ return { result, dimid };
520
+ },
521
+ nc_def_var: (ncid, name, xtype, ndims, dimids) => {
522
+ const varidPtr = module._malloc(4);
523
+ const dimidsPtr = module._malloc(dimids.length * 4);
524
+ for (let i = 0; i < dimids.length; i++) {
525
+ module.setValue(dimidsPtr + i * 4, dimids[i], 'i32');
526
+ }
527
+ const result = nc_def_var_wrapper(ncid, name, xtype, ndims, dimidsPtr, varidPtr);
528
+ const varid = module.getValue(varidPtr, 'i32');
529
+ module._free(varidPtr);
530
+ module._free(dimidsPtr);
531
+ return { result, varid };
532
+ },
533
+ nc_put_var_double: (ncid, varid, data) => {
534
+ const dataPtr = module._malloc(data.length * 8);
535
+ module.HEAPF64.set(data, dataPtr / 8);
536
+ const result = nc_put_var_double_wrapper(ncid, varid, dataPtr);
537
+ module._free(dataPtr);
538
+ return result;
539
+ },
540
+ nc_get_var_double: (ncid, varid, length) => {
541
+ const dataPtr = module._malloc(length * 8);
542
+ const result = nc_get_var_double_wrapper(ncid, varid, dataPtr);
543
+ let data;
544
+ if (result === NC_CONSTANTS.NC_NOERR) {
545
+ data = new Float64Array(module.HEAPF64.buffer, dataPtr, length).slice();
546
+ }
547
+ module._free(dataPtr);
548
+ return { result, data };
549
+ },
550
+ nc_enddef: (ncid) => {
551
+ return nc_enddef_wrapper(ncid);
552
+ }
553
+ };
554
+ }
555
+ }
556
+ //# sourceMappingURL=wasm-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-module.js","sourceRoot":"","sources":["../src/wasm-module.ts"],"names":[],"mappings":"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"}