@loaders.gl/netcdf 4.2.0-beta.1 → 4.2.0-beta.2

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.
package/dist/dist.min.js CHANGED
@@ -5,6 +5,6 @@
5
5
  else if (typeof exports === 'object') exports['loaders'] = factory();
6
6
  else root['loaders'] = factory();})(globalThis, function () {
7
7
  "use strict";var __exports__=(()=>{var H=Object.create;var g=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var Y=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),G=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},w=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of $(t))!z.call(e,n)&&n!==r&&g(e,n,{get:()=>t[n],enumerable:!(i=V(t,n))||i.enumerable});return e},E=(e,t,r)=>(w(e,t,"default"),r&&w(r,t,"default")),J=(e,t,r)=>(r=e!=null?H(Y(e)):{},w(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),j=e=>w(g({},"__esModule",{value:!0}),e);var F=M((st,T)=>{T.exports=globalThis.loaders});var p={};G(p,{NetCDFLoader:()=>R,NetCDFReader:()=>u});E(p,J(F(),1));var f=class{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;textDecoder=new TextDecoder;textEncoder=new TextEncoder;constructor(t=8192,r={}){let i=!1;typeof t=="number"?t=new ArrayBuffer(t):(i=!0,this.lastWrittenByte=t.byteLength);let n=r.offset?r.offset>>>0:0,a=t.byteLength-n,o=n;(ArrayBuffer.isView(t)||t instanceof f)&&(t.byteLength!==t.buffer.byteLength&&(o=t.byteOffset+n),t=t.buffer),i?this.lastWrittenByte=a:this.lastWrittenByte=0,this.buffer=t,this.length=a,this.byteLength=a,this.byteOffset=o,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,o,a),this._mark=0,this._marks=[]}available(t=1){return this.offset+t<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(t=1){return this.offset+=t,this}seek(t){return this.offset=t,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let t=this._marks.pop();if(t===void 0)throw new Error("Mark stack empty");return this.seek(t),this}rewind(){return this.offset=0,this}ensureAvailable(t=1){if(!this.available(t)){let i=(this.offset+t)*2,n=new Uint8Array(i);n.set(new Uint8Array(this.buffer)),this.buffer=n.buffer,this.length=this.byteLength=i,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(t=1){let r=new Uint8Array(t);for(let i=0;i<t;i++)r[i]=this.readByte();return r}readInt16(){let t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t}readUint16(){let t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t}readInt32(){let t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t}readUint32(){let t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat32(){let t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat64(){let t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t}readChar(){return String.fromCharCode(this.readInt8())}readChars(t=1){let r="";for(let i=0;i<t;i++)r+=this.readChar();return r}readUtf8(t=1){return this.textDecoder.decode(this.readBytes(t))}writeBoolean(t){return this.writeUint8(t?255:0),this}writeInt8(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this}writeUint8(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this}writeByte(t){return this.writeUint8(t)}writeBytes(t){this.ensureAvailable(t.length);for(let r=0;r<t.length;r++)this._data.setUint8(this.offset++,t[r]);return this._updateLastWrittenByte(),this}writeInt16(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(t){return this.writeUint8(t.charCodeAt(0))}writeChars(t){for(let r=0;r<t.length;r++)this.writeUint8(t.charCodeAt(r));return this}writeUtf8(t){let r=this.textEncoder.encode(t);return this.writeBytes(r)}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this.lastWrittenByte)}_updateLastWrittenByte(){this.offset>this.lastWrittenByte&&(this.lastWrittenByte=this.offset)}};var s={BYTE:1,CHAR:2,SHORT:3,INT:4,FLOAT:5,DOUBLE:6};function c(e,t,r){switch(t){case s.BYTE:return e.readBytes(r);case s.CHAR:return P(e.readChars(r));case s.SHORT:return b(r,e.readInt16.bind(e));case s.INT:return b(r,e.readInt32.bind(e));case s.FLOAT:return b(r,e.readFloat32.bind(e));case s.DOUBLE:return b(r,e.readFloat64.bind(e));default:throw new Error(`NetCDF: non valid type ${t}`)}}function B(e){switch(Number(e)){case s.BYTE:return"byte";case s.CHAR:return"char";case s.SHORT:return"short";case s.INT:return"int";case s.FLOAT:return"float";case s.DOUBLE:return"double";default:return"undefined"}}function D(e){switch(Number(e)){case s.BYTE:return 1;case s.CHAR:return 1;case s.SHORT:return 2;case s.INT:return 4;case s.FLOAT:return 4;case s.DOUBLE:return 8;default:return-1}}function N(e){switch(String(e)){case"byte":return s.BYTE;case"char":return s.CHAR;case"short":return s.SHORT;case"int":return s.INT;case"float":return s.FLOAT;case"double":return s.DOUBLE;default:return-1}}function b(e,t){if(e!==1){let r=new Array(e);for(let i=0;i<e;i++)r[i]=t();return r}return t()}function P(e){return e.charCodeAt(e.length-1)===0?e.substring(0,e.length-1):e}var l=0,Z=10,q=11,K=12,Q=0;function I(e,t){let r=e.readUint32(),i=X(e),n=x(e),a=tt(e,i.recordId,t);return{version:t,recordDimension:{length:r,id:i.recordId,name:i.recordName,recordStep:a.recordStep},dimensions:i.dimensions,variables:a.variables,attributes:n}}function X(e){let t=e.readUint32();if(t===l){if(e.readUint32()!==l)throw new Error("NetCDF: wrong empty tag for list of dimensions");return{recordId:0,recordName:"",dimensions:[]}}if(t!==Z)throw new Error("NetCDF: wrong tag for list of dimensions");let r=e.readUint32(),i=new Array(r),n,a;for(let o=0;o<r;o++){let h=v(e),d=e.readUint32();d===Q&&(n=o,a=h),i[o]={name:h,size:d}}return{dimensions:i,recordId:n,recordName:a}}function x(e){let t=e.readUint32();if(t===l){if(e.readUint32()!==l)throw new Error("NetCDF: wrong empty tag for list of attributes");return[]}if(t!==K)throw new Error("NetCDF: wrong tag for list of attributes");let r=e.readUint32(),i=new Array(r);for(let n=0;n<r;n++){let a=v(e),o=e.readUint32();if(o<1||o>6)throw new Error(`NetCDF: non valid type ${o}`);let h=e.readUint32(),d=c(e,o,h);O(e),i[n]={name:a,type:B(o),value:d}}return i}function tt(e,t,r){let i=e.readUint32(),n=0;if(i===l){if(e.readUint32()!==l)throw new Error("NetCDF: wrong empty tag for list of variables");return{recordStep:n,variables:[]}}if(i!==q)throw new Error("NetCDF: wrong tag for list of variables");let a=e.readUint32(),o=new Array(a);for(let h=0;h<a;h++){let d=v(e),y=e.readUint32(),U=new Array(y);for(let L=0;L<y;L++)U[L]=e.readUint32();let W=x(e),m=e.readUint32();if(m<1&&m>6)throw new Error(`NetCDF: non valid type ${m}`);let C=e.readUint32(),A=e.readUint32();if(r===2){if(A>0)throw new Error("NetCDF: offsets larger than 4GB not supported");A=e.readUint32()}let _=!1;typeof t<"u"&&U[0]===t&&(n+=C,_=!0),o[h]={name:d,dimensions:U,attributes:W,type:B(m),size:C,offset:A,record:_}}return{variables:o,recordStep:n}}function v(e){let t=e.readUint32(),r=e.readChars(t);return O(e),r}function O(e){e.offset%4!==0&&e.skip(4-e.offset%4)}function S(e,t){let r=N(t.type),i=t.size/D(r),n=new Array(i);for(let a=0;a<i;a++)n[a]=c(e,r,1);return n}function k(e,t,r){let i=N(t.type),n=t.size?t.size/D(i):1,a=r.length,o=new Array(a),h=r.recordStep;for(let d=0;d<a;d++){let y=e.offset;o[d]=c(e,i,n),e.seek(y+h)}return o}var u=class{header;buffer;constructor(t){let r=new f(t);r.setBigEndian();let i=r.readChars(3);if(i!=="CDF")throw new Error(`NetCDF: file should start with 'CDF', found ${i}`);let n=r.readByte();if(n>2)throw new Error(`NetCDF: unsupported version ${n}`);this.header=I(r,n),this.buffer=r}get version(){return this.header.version===1?"classic format":"64-bit offset format"}get recordDimension(){return this.header.recordDimension}get dimensions(){return this.header.dimensions}get attributes(){return this.header.attributes}get variables(){return this.header.variables}attributeExists(t){return this.attributes.find(i=>i.name===t)!==void 0}getAttribute(t){let r=this.attributes.find(i=>i.name===t);return r?r.value:null}dataVariableExists(t){return this.header.variables.find(function(i){return i.name===t})!==void 0}getDataVariableAsString(t){let r=this.getDataVariable(t);return r?r.join(""):null}getDataVariable(t){let r;if(typeof t=="string"?r=this.header.variables.find(function(i){return i.name===t}):r=t,r===void 0){let i;throw typeof t=="string"?i=t:typeof t=="object"&&(i=JSON.stringify(t)),new Error(`NetCDF: variable not found: ${i}`)}return this.buffer.seek(r.offset),r.record?k(this.buffer,r,this.header.recordDimension):S(this.buffer,r)}toString(){let t=[];t.push("DIMENSIONS");for(let i of this.dimensions)t.push(` ${i.name.padEnd(30)} = size: ${i.size}`);t.push(""),t.push("GLOBAL ATTRIBUTES");for(let i of this.attributes)t.push(` ${i.name.padEnd(30)} = ${i.value}`);let r=JSON.parse(JSON.stringify(this.variables));t.push(""),t.push("VARIABLES:");for(let i of r){i.value=this.getDataVariable(i);let n=JSON.stringify(i.value);n.length>50&&(n=n.substring(0,50)),isNaN(i.value.length)||(n+=` (length: ${i.value.length})`),t.push(` ${i.name.padEnd(30)} = ${n}`)}return t.join(`
8
- `)}};var et="4.2.0-alpha.6",rt={dataType:null,batchType:null,name:"NetCDF",id:"mvt",module:"mvt",version:et,extensions:["cdf","nc"],mimeTypes:["application/netcdf","application/x-netcdf"],category:"image",options:{netcdf:{loadVariables:!1}}},R={...rt,parse:async(e,t)=>it(e,t),binary:!0};function it(e,t){let r=new u(e),i={};if(t?.netcdf?.loadData)for(let n of r.variables)i[n.name]=r.getDataVariable(n);return{loaderData:r.header,data:i}}return j(p);})();
8
+ `)}};var et="4.2.0-beta.1",rt={dataType:null,batchType:null,name:"NetCDF",id:"mvt",module:"mvt",version:et,extensions:["cdf","nc"],mimeTypes:["application/netcdf","application/x-netcdf"],category:"image",options:{netcdf:{loadVariables:!1}}},R={...rt,parse:async(e,t)=>it(e,t),binary:!0};function it(e,t){let r=new u(e),i={};if(t?.netcdf?.loadData)for(let n of r.variables)i[n.name]=r.getDataVariable(n);return{loaderData:r.header,data:i}}return j(p);})();
9
9
  return __exports__;
10
10
  });
package/dist/index.cjs CHANGED
@@ -912,7 +912,7 @@ var NetCDFReader = class {
912
912
  };
913
913
 
914
914
  // dist/netcdf-loader.js
915
- var VERSION = true ? "4.2.0-alpha.6" : "latest";
915
+ var VERSION = true ? "4.2.0-beta.1" : "latest";
916
916
  var NetCDFWorkerLoader = {
917
917
  dataType: null,
918
918
  batchType: null,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.js", "iobuffer/iobuffer.js", "netcdfjs/read-type.js", "netcdfjs/read-header.js", "netcdfjs/read-data.js", "netcdfjs/netcdf-reader.js", "netcdf-loader.js"],
4
- "sourcesContent": ["export { NetCDFReader } from \"./netcdfjs/netcdf-reader.js\";\nexport { NetCDFLoader } from \"./netcdf-loader.js\";\n", "const DEFAULT_BYTE_LENGTH = 1024 * 8;\nexport class IOBuffer {\n /**\n * Reference to the internal ArrayBuffer object.\n */\n buffer;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n byteLength;\n /**\n * Byte offset of the internal ArrayBuffer.\n */\n byteOffset;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n length;\n /**\n * The current offset of the buffer's pointer.\n */\n offset;\n lastWrittenByte;\n littleEndian;\n _data;\n _mark;\n _marks;\n textDecoder = new TextDecoder();\n textEncoder = new TextEncoder();\n /**\n * @param data - The data to construct the IOBuffer with.\n * If data is a number, it will be the new buffer's length<br>\n * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n * @param options\n */\n constructor(data = DEFAULT_BYTE_LENGTH, options = {}) {\n let dataIsGiven = false;\n if (typeof data === 'number') {\n data = new ArrayBuffer(data);\n }\n else {\n dataIsGiven = true;\n this.lastWrittenByte = data.byteLength;\n }\n const offset = options.offset ? options.offset >>> 0 : 0;\n const byteLength = data.byteLength - offset;\n let dvOffset = offset;\n if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n if (data.byteLength !== data.buffer.byteLength) {\n dvOffset = data.byteOffset + offset;\n }\n data = data.buffer;\n }\n if (dataIsGiven) {\n this.lastWrittenByte = byteLength;\n }\n else {\n this.lastWrittenByte = 0;\n }\n this.buffer = data;\n this.length = byteLength;\n this.byteLength = byteLength;\n this.byteOffset = dvOffset;\n this.offset = 0;\n this.littleEndian = true;\n this._data = new DataView(this.buffer, dvOffset, byteLength);\n this._mark = 0;\n this._marks = [];\n }\n /**\n * Checks if the memory allocated to the buffer is sufficient to store more\n * bytes after the offset.\n * @param byteLength - The needed memory in bytes.\n * @returns `true` if there is sufficient space and `false` otherwise.\n */\n available(byteLength = 1) {\n return this.offset + byteLength <= this.length;\n }\n /**\n * Check if little-endian mode is used for reading and writing multi-byte\n * values.\n * @returns `true` if little-endian mode is used, `false` otherwise.\n */\n isLittleEndian() {\n return this.littleEndian;\n }\n /**\n * Set little-endian mode for reading and writing multi-byte values.\n */\n setLittleEndian() {\n this.littleEndian = true;\n return this;\n }\n /**\n * Check if big-endian mode is used for reading and writing multi-byte values.\n * @returns `true` if big-endian mode is used, `false` otherwise.\n */\n isBigEndian() {\n return !this.littleEndian;\n }\n /**\n * Switches to big-endian mode for reading and writing multi-byte values.\n */\n setBigEndian() {\n this.littleEndian = false;\n return this;\n }\n /**\n * Move the pointer n bytes forward.\n * @param n - Number of bytes to skip.\n */\n skip(n = 1) {\n this.offset += n;\n return this;\n }\n /**\n * Move the pointer to the given offset.\n * @param offset\n */\n seek(offset) {\n this.offset = offset;\n return this;\n }\n /**\n * Store the current pointer offset.\n * @see {@link IOBuffer#reset}\n */\n mark() {\n this._mark = this.offset;\n return this;\n }\n /**\n * Move the pointer back to the last pointer offset set by mark.\n * @see {@link IOBuffer#mark}\n */\n reset() {\n this.offset = this._mark;\n return this;\n }\n /**\n * Push the current pointer offset to the mark stack.\n * @see {@link IOBuffer#popMark}\n */\n pushMark() {\n this._marks.push(this.offset);\n return this;\n }\n /**\n * Pop the last pointer offset from the mark stack, and set the current\n * pointer offset to the popped value.\n * @see {@link IOBuffer#pushMark}\n */\n popMark() {\n const offset = this._marks.pop();\n if (offset === undefined) {\n throw new Error('Mark stack empty');\n }\n this.seek(offset);\n return this;\n }\n /**\n * Move the pointer offset back to 0.\n */\n rewind() {\n this.offset = 0;\n return this;\n }\n /**\n * Make sure the buffer has sufficient memory to write a given byteLength at\n * the current pointer offset.\n * If the buffer's memory is insufficient, this method will create a new\n * buffer (a copy) with a length that is twice (byteLength + current offset).\n * @param byteLength\n */\n ensureAvailable(byteLength = 1) {\n if (!this.available(byteLength)) {\n const lengthNeeded = this.offset + byteLength;\n const newLength = lengthNeeded * 2;\n const newArray = new Uint8Array(newLength);\n newArray.set(new Uint8Array(this.buffer));\n this.buffer = newArray.buffer;\n this.length = this.byteLength = newLength;\n this._data = new DataView(this.buffer);\n }\n return this;\n }\n /**\n * Read a byte and return false if the byte's value is 0, or true otherwise.\n * Moves pointer forward by one byte.\n */\n readBoolean() {\n return this.readUint8() !== 0;\n }\n /**\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\n */\n readInt8() {\n return this._data.getInt8(this.offset++);\n }\n /**\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n */\n readUint8() {\n return this._data.getUint8(this.offset++);\n }\n /**\n * Alias for {@link IOBuffer#readUint8}.\n */\n readByte() {\n return this.readUint8();\n }\n /**\n * Read `n` bytes and move pointer forward by `n` bytes.\n */\n readBytes(n = 1) {\n const bytes = new Uint8Array(n);\n for (let i = 0; i < n; i++) {\n bytes[i] = this.readByte();\n }\n return bytes;\n }\n /**\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n */\n readInt16() {\n const value = this._data.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n */\n readUint16() {\n const value = this._data.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n */\n readInt32() {\n const value = this._data.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n */\n readUint32() {\n const value = this._data.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\n */\n readFloat32() {\n const value = this._data.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\n */\n readFloat64() {\n const value = this._data.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n */\n readChar() {\n return String.fromCharCode(this.readInt8());\n }\n /**\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n */\n readChars(n = 1) {\n let result = '';\n for (let i = 0; i < n; i++) {\n result += this.readChar();\n }\n return result;\n }\n /**\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n * forward by `n` bytes.\n */\n readUtf8(n = 1) {\n return this.textDecoder.decode(this.readBytes(n));\n }\n /**\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n * forward by 1 byte.\n */\n writeBoolean(value) {\n this.writeUint8(value ? 0xff : 0x00);\n return this;\n }\n /**\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n */\n writeInt8(value) {\n this.ensureAvailable(1);\n this._data.setInt8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n * byte.\n */\n writeUint8(value) {\n this.ensureAvailable(1);\n this._data.setUint8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * An alias for {@link IOBuffer#writeUint8}.\n */\n writeByte(value) {\n return this.writeUint8(value);\n }\n /**\n * Write all elements of `bytes` as uint8 values and move pointer forward by\n * `bytes.length` bytes.\n */\n writeBytes(bytes) {\n this.ensureAvailable(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n this._data.setUint8(this.offset++, bytes[i]);\n }\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\n * bytes.\n */\n writeInt16(value) {\n this.ensureAvailable(2);\n this._data.setInt16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n * bytes.\n */\n writeUint16(value) {\n this.ensureAvailable(2);\n this._data.setUint16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\n * bytes.\n */\n writeInt32(value) {\n this.ensureAvailable(4);\n this._data.setInt32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n * bytes.\n */\n writeUint32(value) {\n this.ensureAvailable(4);\n this._data.setUint32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit floating number and move pointer forward by 4\n * bytes.\n */\n writeFloat32(value) {\n this.ensureAvailable(4);\n this._data.setFloat32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit floating number and move pointer forward by 8\n * bytes.\n */\n writeFloat64(value) {\n this.ensureAvailable(8);\n this._data.setFloat64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n * and move pointer forward by 1 byte.\n */\n writeChar(str) {\n return this.writeUint8(str.charCodeAt(0));\n }\n /**\n * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n * and move pointer forward by `str.length` bytes.\n */\n writeChars(str) {\n for (let i = 0; i < str.length; i++) {\n this.writeUint8(str.charCodeAt(i));\n }\n return this;\n }\n /**\n * UTF-8 encode and write `str` to the current pointer offset and move pointer\n * forward according to the encoded length.\n */\n writeUtf8(str) {\n const bytes = this.textEncoder.encode(str);\n return this.writeBytes(bytes);\n }\n /**\n * Export a Uint8Array view of the internal buffer.\n * The view starts at the byte offset and its length\n * is calculated to stop at the last written byte or the original length.\n */\n toArray() {\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n }\n /**\n * Update the last written byte offset\n * @private\n */\n _updateLastWrittenByte() {\n if (this.offset > this.lastWrittenByte) {\n this.lastWrittenByte = this.offset;\n }\n }\n}\n", "export const TYPES = {\n BYTE: 1,\n CHAR: 2,\n SHORT: 3,\n INT: 4,\n FLOAT: 5,\n DOUBLE: 6\n};\n/**\n * Given a type and a size reads the next element\n * @param buffer - Buffer for the file data\n * @param type - Type of the data to read\n * @param size - Size of the element to read\n * @return\n */\nexport function readType(buffer, type, size) {\n switch (type) {\n case TYPES.BYTE:\n return buffer.readBytes(size);\n case TYPES.CHAR:\n return trimNull(buffer.readChars(size));\n case TYPES.SHORT:\n return readNumber(size, buffer.readInt16.bind(buffer));\n case TYPES.INT:\n return readNumber(size, buffer.readInt32.bind(buffer));\n case TYPES.FLOAT:\n return readNumber(size, buffer.readFloat32.bind(buffer));\n case TYPES.DOUBLE:\n return readNumber(size, buffer.readFloat64.bind(buffer));\n /* istanbul ignore next */\n default:\n throw new Error(`NetCDF: non valid type ${type}`);\n }\n}\n/**\n * Parse a number into their respective type\n * @param type - integer that represents the type\n * @return parsed value of the type\n */\nexport function num2str(type) {\n switch (Number(type)) {\n case TYPES.BYTE:\n return 'byte';\n case TYPES.CHAR:\n return 'char';\n case TYPES.SHORT:\n return 'short';\n case TYPES.INT:\n return 'int';\n case TYPES.FLOAT:\n return 'float';\n case TYPES.DOUBLE:\n return 'double';\n /* istanbul ignore next */\n default:\n return 'undefined';\n }\n}\n/**\n * Parse a number type identifier to his size in bytes\n * @param type - integer that represents the type\n * @return size of the type\n */\nexport function num2bytes(type) {\n switch (Number(type)) {\n case TYPES.BYTE:\n return 1;\n case TYPES.CHAR:\n return 1;\n case TYPES.SHORT:\n return 2;\n case TYPES.INT:\n return 4;\n case TYPES.FLOAT:\n return 4;\n case TYPES.DOUBLE:\n return 8;\n /* istanbul ignore next */\n default:\n return -1;\n }\n}\n/**\n * Reverse search of num2str\n * @param type string that represents the type\n * @return parsed value of the type\n */\nexport function str2num(type) {\n switch (String(type)) {\n case 'byte':\n return TYPES.BYTE;\n case 'char':\n return TYPES.CHAR;\n case 'short':\n return TYPES.SHORT;\n case 'int':\n return TYPES.INT;\n case 'float':\n return TYPES.FLOAT;\n case 'double':\n return TYPES.DOUBLE;\n /* istanbul ignore next */\n default:\n return -1;\n }\n}\n/**\n * Auxiliary function to read numeric data\n * @param size - Size of the element to read\n * @param bufferReader - Function to read next value\n * @return\n */\nfunction readNumber(size, bufferReader) {\n if (size !== 1) {\n const numbers = new Array(size);\n for (let i = 0; i < size; i++) {\n numbers[i] = bufferReader();\n }\n return numbers;\n }\n return bufferReader();\n}\n/**\n * Removes null terminate value\n * @param value - String to trim\n * @return - Trimmed string\n */\nfunction trimNull(value) {\n if (value.charCodeAt(value.length - 1) === 0) {\n return value.substring(0, value.length - 1);\n }\n return value;\n}\n", "import { readType, num2str } from \"./read-type.js\";\n// Grammar constants\nconst ZERO = 0;\nconst NC_DIMENSION = 10;\nconst NC_VARIABLE = 11;\nconst NC_ATTRIBUTE = 12;\nconst NC_UNLIMITED = 0;\n/**\n * Read the header of the file\n * @param buffer - Buffer for the file data\n * @param version - Version of the file\n * @return - Header\n */\nexport function readNetCDFHeader(buffer, version) {\n // Length of record dimension\n // sum of the varSize's of all the record variables.\n const recordDimensionLength = buffer.readUint32();\n // List of dimensions\n const dimList = readDimensionsList(buffer);\n // List of global attributes\n const attributes = readAttributesList(buffer);\n // List of variables\n const variableList = readVariablesList(buffer, dimList.recordId, version);\n const header = {\n version,\n recordDimension: {\n length: recordDimensionLength,\n id: dimList.recordId, // id of the unlimited dimension\n name: dimList.recordName, // name of the unlimited dimension\n recordStep: variableList.recordStep\n },\n dimensions: dimList.dimensions,\n variables: variableList.variables,\n attributes\n };\n return header;\n}\n/**\n * Read list of dimensions\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n */\nfunction readDimensionsList(buffer) {\n const dimList = buffer.readUint32();\n if (dimList === ZERO) {\n if (buffer.readUint32() !== ZERO) {\n throw new Error('NetCDF: wrong empty tag for list of dimensions');\n }\n // TODO - is this empty dimension list supported / recoverable?\n return {\n recordId: 0,\n recordName: '',\n dimensions: []\n };\n }\n if (dimList !== NC_DIMENSION) {\n throw new Error('NetCDF: wrong tag for list of dimensions');\n }\n // Length of dimensions\n const dimensionSize = buffer.readUint32();\n const dimensions = new Array(dimensionSize);\n let recordId;\n let recordName;\n for (let dim = 0; dim < dimensionSize; dim++) {\n // Read name\n const name = readName(buffer);\n // Read dimension size\n const size = buffer.readUint32();\n if (size === NC_UNLIMITED) {\n // in netcdf 3 one field can be of size unlimmited\n recordId = dim;\n recordName = name;\n }\n dimensions[dim] = {\n name,\n size\n };\n }\n return {\n dimensions,\n recordId,\n recordName\n };\n}\n/**\n * List of attributes\n * @ignore\n * @param buffer - Buffer for the file data\n * @return List of attributes with:\n */\nfunction readAttributesList(buffer) {\n const gAttList = buffer.readUint32();\n if (gAttList === ZERO) {\n if (buffer.readUint32() !== ZERO) {\n throw new Error('NetCDF: wrong empty tag for list of attributes');\n }\n return [];\n }\n if (gAttList !== NC_ATTRIBUTE) {\n throw new Error('NetCDF: wrong tag for list of attributes');\n }\n // Length of attributes\n const attributeSize = buffer.readUint32();\n const attributes = new Array(attributeSize);\n for (let gAtt = 0; gAtt < attributeSize; gAtt++) {\n // Read name\n const name = readName(buffer);\n // Read type\n const type = buffer.readUint32();\n if (type < 1 || type > 6) {\n throw new Error(`NetCDF: non valid type ${type}`);\n }\n // Read attribute\n const size = buffer.readUint32();\n const value = readType(buffer, type, size);\n // Apply padding\n padding(buffer);\n attributes[gAtt] = {\n name,\n type: num2str(type),\n value\n };\n }\n return attributes;\n}\n/**\n * List of variables\n * @param buffer - Buffer for the file data\n * @param recordId - Id of the unlimited dimension (also called record dimension)\n * This value may be undefined if there is no unlimited dimension\n * @param {number} version - Version of the file\n */\n// eslint-disable-next-line max-statements, complexity\nfunction readVariablesList(buffer, recordId, version) {\n const varList = buffer.readUint32();\n let recordStep = 0;\n if (varList === ZERO) {\n if (buffer.readUint32() !== ZERO) {\n throw new Error('NetCDF: wrong empty tag for list of variables');\n }\n return {\n recordStep,\n variables: []\n };\n }\n if (varList !== NC_VARIABLE) {\n throw new Error('NetCDF: wrong tag for list of variables');\n }\n // Length of variables\n const variableSize = buffer.readUint32();\n const variables = new Array(variableSize);\n for (let v = 0; v < variableSize; v++) {\n // Read name\n const name = readName(buffer);\n // Read dimensionality of the variable\n const dimensionality = buffer.readUint32();\n // Index into the list of dimensions\n const dimensionsIds = new Array(dimensionality);\n for (let dim = 0; dim < dimensionality; dim++) {\n dimensionsIds[dim] = buffer.readUint32();\n }\n // Read variables size\n const attributes = readAttributesList(buffer);\n // Read type\n const type = buffer.readUint32();\n if (type < 1 && type > 6) {\n throw new Error(`NetCDF: non valid type ${type}`);\n }\n // Read variable size\n // The 32-bit varSize field is not large enough to contain the size of variables that require\n // more than 2^32 - 4 bytes, so 2^32 - 1 is used in the varSize field for such variables.\n const varSize = buffer.readUint32();\n // Read offset\n let offset = buffer.readUint32();\n if (version === 2) {\n if (offset > 0) {\n throw new Error('NetCDF: offsets larger than 4GB not supported');\n }\n offset = buffer.readUint32();\n }\n let record = false;\n // Count amount of record variables\n if (typeof recordId !== 'undefined' && dimensionsIds[0] === recordId) {\n recordStep += varSize;\n record = true;\n }\n variables[v] = {\n name,\n dimensions: dimensionsIds,\n attributes,\n type: num2str(type),\n size: varSize,\n offset,\n record\n };\n }\n return {\n variables,\n recordStep\n };\n}\n// HELPERS\n/**\n * Reads the name\n * @param buffer - Buffer for the file data\n * @return Name\n */\nexport function readName(buffer) {\n // Read name\n const nameLength = buffer.readUint32();\n const name = buffer.readChars(nameLength);\n // validate name\n // TODO\n // Apply padding\n padding(buffer);\n return name;\n}\n/**\n * Moves 1, 2, or 3 bytes to next 4-byte boundary\n */\nfunction padding(buffer) {\n if (buffer.offset % 4 !== 0) {\n buffer.skip(4 - (buffer.offset % 4));\n }\n}\n", "import { readType, str2num, num2bytes } from \"./read-type.js\";\n// const STREAMING = 4294967295;\n/**\n * Read data for the given non-record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @return Data of the element\n */\nexport function readNonRecord(buffer, variable) {\n // variable type\n const type = str2num(variable.type);\n // size of the data\n const size = variable.size / num2bytes(type);\n // iterates over the data\n const data = new Array(size);\n for (let i = 0; i < size; i++) {\n data[i] = readType(buffer, type, 1);\n }\n return data;\n}\n/**\n * Read data for the given record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @param recordDimension - Record dimension metadata\n * @return - Data of the element\n */\nexport function readRecord(buffer, variable, recordDimension) {\n // variable type\n const type = str2num(variable.type);\n const width = variable.size ? variable.size / num2bytes(type) : 1;\n // size of the data\n // TODO streaming data\n const size = recordDimension.length;\n // iterates over the data\n const data = new Array(size);\n const step = recordDimension.recordStep;\n for (let i = 0; i < size; i++) {\n const currentOffset = buffer.offset;\n data[i] = readType(buffer, type, width);\n buffer.seek(currentOffset + step);\n }\n return data;\n}\n", "import { IOBuffer } from \"../iobuffer/iobuffer.js\";\nimport { readNetCDFHeader } from \"./read-header.js\";\nimport { readRecord, readNonRecord } from \"./read-data.js\";\n/**\n * Reads a NetCDF v3.x file\n * https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications.html\n * @param {ArrayBuffer} data - ArrayBuffer or any Typed Array (including Node.js' Buffer from v4) with the data\n * @constructor\n */\nexport class NetCDFReader {\n header;\n buffer;\n constructor(data) {\n const buffer = new IOBuffer(data);\n buffer.setBigEndian();\n // Validate that it's a NetCDF file\n const magic = buffer.readChars(3);\n if (magic !== 'CDF') {\n throw new Error(`NetCDF: file should start with 'CDF', found ${magic}`);\n }\n // Check the NetCDF format\n const version = buffer.readByte();\n if (version > 2) {\n throw new Error(`NetCDF: unsupported version ${version}`);\n }\n // Read the header\n this.header = readNetCDFHeader(buffer, version);\n this.buffer = buffer;\n }\n /**\n * @return {string} - Version for the NetCDF format\n */\n get version() {\n if (this.header.version === 1) {\n return 'classic format';\n }\n return '64-bit offset format';\n }\n /**\n * Get metadata for the record dimension\n */\n get recordDimension() {\n return this.header.recordDimension;\n }\n /**\n * Get list of dimensions (each with `name` and `size`)\n */\n get dimensions() {\n return this.header.dimensions;\n }\n /**\n * Get list of global attributes with:\n * * `name`: String with the name of the attribute\n * * `type`: String with the type of the attribute\n * * `value`: A number or string with the value of the attribute\n */\n get attributes() {\n return this.header.attributes;\n }\n /**\n * Get list of variables\n */\n get variables() {\n return this.header.variables;\n }\n /**\n * Check if an attribute exists\n * @param attributeName - Name of the attribute to find\n * @return\n */\n attributeExists(attributeName) {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n return attribute !== undefined;\n }\n /**\n * Returns the value of an attribute\n * @param attributeName\n * @return Value of the attributeName or null\n */\n getAttribute(attributeName) {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n if (attribute)\n return attribute.value;\n return null;\n }\n /**\n * Check if a dataVariable exists\n * @param variableName - Name of the variable to find\n * @return\n */\n dataVariableExists(variableName) {\n const variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n return variable !== undefined;\n }\n /**\n * Returns the value of a variable as a string\n * @param variableName\n * @return Value of the variable as a string or null\n */\n getDataVariableAsString(variableName) {\n const variable = this.getDataVariable(variableName);\n if (variable)\n return variable.join('');\n return null;\n }\n /**\n * Retrieves the data for a given variable\n * @param variableName - Name of the variable to search or variable object\n * @return List with the variable values\n */\n getDataVariable(variableName) {\n let variable;\n if (typeof variableName === 'string') {\n // search the variable\n variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n }\n else {\n variable = variableName;\n }\n // throws if variable not found\n if (variable === undefined) {\n let errorOutput;\n if (typeof variableName === 'string') {\n errorOutput = variableName;\n }\n else if (typeof variableName === 'object') {\n errorOutput = JSON.stringify(variableName);\n }\n throw new Error(`NetCDF: variable not found: ${errorOutput}`);\n }\n // go to the offset position\n this.buffer.seek(variable.offset);\n if (variable.record) {\n // record variable case\n return readRecord(this.buffer, variable, this.header.recordDimension);\n }\n // non-record variable case\n return readNonRecord(this.buffer, variable);\n }\n toString() {\n const result = [];\n result.push('DIMENSIONS');\n for (const dimension of this.dimensions) {\n result.push(` ${dimension.name.padEnd(30)} = size: ${dimension.size}`);\n }\n result.push('');\n result.push('GLOBAL ATTRIBUTES');\n for (const attribute of this.attributes) {\n result.push(` ${attribute.name.padEnd(30)} = ${attribute.value}`);\n }\n const variables = JSON.parse(JSON.stringify(this.variables));\n result.push('');\n result.push('VARIABLES:');\n for (const variable of variables) {\n variable.value = this.getDataVariable(variable);\n let stringify = JSON.stringify(variable.value);\n if (stringify.length > 50)\n stringify = stringify.substring(0, 50);\n if (!isNaN(variable.value.length)) {\n stringify += ` (length: ${variable.value.length})`;\n }\n result.push(` ${variable.name.padEnd(30)} = ${stringify}`);\n }\n return result.join('\\n');\n }\n}\n", "import { NetCDFReader } from \"./netcdfjs/netcdf-reader.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.2.0-alpha.6\" !== 'undefined' ? \"4.2.0-alpha.6\" : 'latest';\n/**\n * Worker loader for NETCDF\n */\nexport const NetCDFWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'NetCDF',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n extensions: ['cdf', 'nc'],\n mimeTypes: [\n 'application/netcdf',\n 'application/x-netcdf'\n // 'application/octet-stream'\n ],\n category: 'image',\n options: {\n netcdf: {\n loadVariables: false\n }\n }\n};\n/**\n * Loader for the NetCDF format\n */\nexport const NetCDFLoader = {\n ...NetCDFWorkerLoader,\n parse: async (arrayBuffer, options) => parseNetCDF(arrayBuffer, options),\n binary: true\n};\nfunction parseNetCDF(arrayBuffer, options) {\n const reader = new NetCDFReader(arrayBuffer);\n const variables = {};\n if (options?.netcdf?.loadData) {\n for (const variable of reader.variables) {\n variables[variable.name] = reader.getDataVariable(variable);\n }\n }\n return {\n loaderData: reader.header,\n data: variables\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export { NetCDFReader } from \"./netcdfjs/netcdf-reader.js\";\nexport { NetCDFLoader } from \"./netcdf-loader.js\";\n", "const DEFAULT_BYTE_LENGTH = 1024 * 8;\nexport class IOBuffer {\n /**\n * Reference to the internal ArrayBuffer object.\n */\n buffer;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n byteLength;\n /**\n * Byte offset of the internal ArrayBuffer.\n */\n byteOffset;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n length;\n /**\n * The current offset of the buffer's pointer.\n */\n offset;\n lastWrittenByte;\n littleEndian;\n _data;\n _mark;\n _marks;\n textDecoder = new TextDecoder();\n textEncoder = new TextEncoder();\n /**\n * @param data - The data to construct the IOBuffer with.\n * If data is a number, it will be the new buffer's length<br>\n * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n * @param options\n */\n constructor(data = DEFAULT_BYTE_LENGTH, options = {}) {\n let dataIsGiven = false;\n if (typeof data === 'number') {\n data = new ArrayBuffer(data);\n }\n else {\n dataIsGiven = true;\n this.lastWrittenByte = data.byteLength;\n }\n const offset = options.offset ? options.offset >>> 0 : 0;\n const byteLength = data.byteLength - offset;\n let dvOffset = offset;\n if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n if (data.byteLength !== data.buffer.byteLength) {\n dvOffset = data.byteOffset + offset;\n }\n data = data.buffer;\n }\n if (dataIsGiven) {\n this.lastWrittenByte = byteLength;\n }\n else {\n this.lastWrittenByte = 0;\n }\n this.buffer = data;\n this.length = byteLength;\n this.byteLength = byteLength;\n this.byteOffset = dvOffset;\n this.offset = 0;\n this.littleEndian = true;\n this._data = new DataView(this.buffer, dvOffset, byteLength);\n this._mark = 0;\n this._marks = [];\n }\n /**\n * Checks if the memory allocated to the buffer is sufficient to store more\n * bytes after the offset.\n * @param byteLength - The needed memory in bytes.\n * @returns `true` if there is sufficient space and `false` otherwise.\n */\n available(byteLength = 1) {\n return this.offset + byteLength <= this.length;\n }\n /**\n * Check if little-endian mode is used for reading and writing multi-byte\n * values.\n * @returns `true` if little-endian mode is used, `false` otherwise.\n */\n isLittleEndian() {\n return this.littleEndian;\n }\n /**\n * Set little-endian mode for reading and writing multi-byte values.\n */\n setLittleEndian() {\n this.littleEndian = true;\n return this;\n }\n /**\n * Check if big-endian mode is used for reading and writing multi-byte values.\n * @returns `true` if big-endian mode is used, `false` otherwise.\n */\n isBigEndian() {\n return !this.littleEndian;\n }\n /**\n * Switches to big-endian mode for reading and writing multi-byte values.\n */\n setBigEndian() {\n this.littleEndian = false;\n return this;\n }\n /**\n * Move the pointer n bytes forward.\n * @param n - Number of bytes to skip.\n */\n skip(n = 1) {\n this.offset += n;\n return this;\n }\n /**\n * Move the pointer to the given offset.\n * @param offset\n */\n seek(offset) {\n this.offset = offset;\n return this;\n }\n /**\n * Store the current pointer offset.\n * @see {@link IOBuffer#reset}\n */\n mark() {\n this._mark = this.offset;\n return this;\n }\n /**\n * Move the pointer back to the last pointer offset set by mark.\n * @see {@link IOBuffer#mark}\n */\n reset() {\n this.offset = this._mark;\n return this;\n }\n /**\n * Push the current pointer offset to the mark stack.\n * @see {@link IOBuffer#popMark}\n */\n pushMark() {\n this._marks.push(this.offset);\n return this;\n }\n /**\n * Pop the last pointer offset from the mark stack, and set the current\n * pointer offset to the popped value.\n * @see {@link IOBuffer#pushMark}\n */\n popMark() {\n const offset = this._marks.pop();\n if (offset === undefined) {\n throw new Error('Mark stack empty');\n }\n this.seek(offset);\n return this;\n }\n /**\n * Move the pointer offset back to 0.\n */\n rewind() {\n this.offset = 0;\n return this;\n }\n /**\n * Make sure the buffer has sufficient memory to write a given byteLength at\n * the current pointer offset.\n * If the buffer's memory is insufficient, this method will create a new\n * buffer (a copy) with a length that is twice (byteLength + current offset).\n * @param byteLength\n */\n ensureAvailable(byteLength = 1) {\n if (!this.available(byteLength)) {\n const lengthNeeded = this.offset + byteLength;\n const newLength = lengthNeeded * 2;\n const newArray = new Uint8Array(newLength);\n newArray.set(new Uint8Array(this.buffer));\n this.buffer = newArray.buffer;\n this.length = this.byteLength = newLength;\n this._data = new DataView(this.buffer);\n }\n return this;\n }\n /**\n * Read a byte and return false if the byte's value is 0, or true otherwise.\n * Moves pointer forward by one byte.\n */\n readBoolean() {\n return this.readUint8() !== 0;\n }\n /**\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\n */\n readInt8() {\n return this._data.getInt8(this.offset++);\n }\n /**\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n */\n readUint8() {\n return this._data.getUint8(this.offset++);\n }\n /**\n * Alias for {@link IOBuffer#readUint8}.\n */\n readByte() {\n return this.readUint8();\n }\n /**\n * Read `n` bytes and move pointer forward by `n` bytes.\n */\n readBytes(n = 1) {\n const bytes = new Uint8Array(n);\n for (let i = 0; i < n; i++) {\n bytes[i] = this.readByte();\n }\n return bytes;\n }\n /**\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n */\n readInt16() {\n const value = this._data.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n */\n readUint16() {\n const value = this._data.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n */\n readInt32() {\n const value = this._data.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n */\n readUint32() {\n const value = this._data.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\n */\n readFloat32() {\n const value = this._data.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\n */\n readFloat64() {\n const value = this._data.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n */\n readChar() {\n return String.fromCharCode(this.readInt8());\n }\n /**\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n */\n readChars(n = 1) {\n let result = '';\n for (let i = 0; i < n; i++) {\n result += this.readChar();\n }\n return result;\n }\n /**\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n * forward by `n` bytes.\n */\n readUtf8(n = 1) {\n return this.textDecoder.decode(this.readBytes(n));\n }\n /**\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n * forward by 1 byte.\n */\n writeBoolean(value) {\n this.writeUint8(value ? 0xff : 0x00);\n return this;\n }\n /**\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n */\n writeInt8(value) {\n this.ensureAvailable(1);\n this._data.setInt8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n * byte.\n */\n writeUint8(value) {\n this.ensureAvailable(1);\n this._data.setUint8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * An alias for {@link IOBuffer#writeUint8}.\n */\n writeByte(value) {\n return this.writeUint8(value);\n }\n /**\n * Write all elements of `bytes` as uint8 values and move pointer forward by\n * `bytes.length` bytes.\n */\n writeBytes(bytes) {\n this.ensureAvailable(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n this._data.setUint8(this.offset++, bytes[i]);\n }\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\n * bytes.\n */\n writeInt16(value) {\n this.ensureAvailable(2);\n this._data.setInt16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n * bytes.\n */\n writeUint16(value) {\n this.ensureAvailable(2);\n this._data.setUint16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\n * bytes.\n */\n writeInt32(value) {\n this.ensureAvailable(4);\n this._data.setInt32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n * bytes.\n */\n writeUint32(value) {\n this.ensureAvailable(4);\n this._data.setUint32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit floating number and move pointer forward by 4\n * bytes.\n */\n writeFloat32(value) {\n this.ensureAvailable(4);\n this._data.setFloat32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit floating number and move pointer forward by 8\n * bytes.\n */\n writeFloat64(value) {\n this.ensureAvailable(8);\n this._data.setFloat64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n * and move pointer forward by 1 byte.\n */\n writeChar(str) {\n return this.writeUint8(str.charCodeAt(0));\n }\n /**\n * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n * and move pointer forward by `str.length` bytes.\n */\n writeChars(str) {\n for (let i = 0; i < str.length; i++) {\n this.writeUint8(str.charCodeAt(i));\n }\n return this;\n }\n /**\n * UTF-8 encode and write `str` to the current pointer offset and move pointer\n * forward according to the encoded length.\n */\n writeUtf8(str) {\n const bytes = this.textEncoder.encode(str);\n return this.writeBytes(bytes);\n }\n /**\n * Export a Uint8Array view of the internal buffer.\n * The view starts at the byte offset and its length\n * is calculated to stop at the last written byte or the original length.\n */\n toArray() {\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n }\n /**\n * Update the last written byte offset\n * @private\n */\n _updateLastWrittenByte() {\n if (this.offset > this.lastWrittenByte) {\n this.lastWrittenByte = this.offset;\n }\n }\n}\n", "export const TYPES = {\n BYTE: 1,\n CHAR: 2,\n SHORT: 3,\n INT: 4,\n FLOAT: 5,\n DOUBLE: 6\n};\n/**\n * Given a type and a size reads the next element\n * @param buffer - Buffer for the file data\n * @param type - Type of the data to read\n * @param size - Size of the element to read\n * @return\n */\nexport function readType(buffer, type, size) {\n switch (type) {\n case TYPES.BYTE:\n return buffer.readBytes(size);\n case TYPES.CHAR:\n return trimNull(buffer.readChars(size));\n case TYPES.SHORT:\n return readNumber(size, buffer.readInt16.bind(buffer));\n case TYPES.INT:\n return readNumber(size, buffer.readInt32.bind(buffer));\n case TYPES.FLOAT:\n return readNumber(size, buffer.readFloat32.bind(buffer));\n case TYPES.DOUBLE:\n return readNumber(size, buffer.readFloat64.bind(buffer));\n /* istanbul ignore next */\n default:\n throw new Error(`NetCDF: non valid type ${type}`);\n }\n}\n/**\n * Parse a number into their respective type\n * @param type - integer that represents the type\n * @return parsed value of the type\n */\nexport function num2str(type) {\n switch (Number(type)) {\n case TYPES.BYTE:\n return 'byte';\n case TYPES.CHAR:\n return 'char';\n case TYPES.SHORT:\n return 'short';\n case TYPES.INT:\n return 'int';\n case TYPES.FLOAT:\n return 'float';\n case TYPES.DOUBLE:\n return 'double';\n /* istanbul ignore next */\n default:\n return 'undefined';\n }\n}\n/**\n * Parse a number type identifier to his size in bytes\n * @param type - integer that represents the type\n * @return size of the type\n */\nexport function num2bytes(type) {\n switch (Number(type)) {\n case TYPES.BYTE:\n return 1;\n case TYPES.CHAR:\n return 1;\n case TYPES.SHORT:\n return 2;\n case TYPES.INT:\n return 4;\n case TYPES.FLOAT:\n return 4;\n case TYPES.DOUBLE:\n return 8;\n /* istanbul ignore next */\n default:\n return -1;\n }\n}\n/**\n * Reverse search of num2str\n * @param type string that represents the type\n * @return parsed value of the type\n */\nexport function str2num(type) {\n switch (String(type)) {\n case 'byte':\n return TYPES.BYTE;\n case 'char':\n return TYPES.CHAR;\n case 'short':\n return TYPES.SHORT;\n case 'int':\n return TYPES.INT;\n case 'float':\n return TYPES.FLOAT;\n case 'double':\n return TYPES.DOUBLE;\n /* istanbul ignore next */\n default:\n return -1;\n }\n}\n/**\n * Auxiliary function to read numeric data\n * @param size - Size of the element to read\n * @param bufferReader - Function to read next value\n * @return\n */\nfunction readNumber(size, bufferReader) {\n if (size !== 1) {\n const numbers = new Array(size);\n for (let i = 0; i < size; i++) {\n numbers[i] = bufferReader();\n }\n return numbers;\n }\n return bufferReader();\n}\n/**\n * Removes null terminate value\n * @param value - String to trim\n * @return - Trimmed string\n */\nfunction trimNull(value) {\n if (value.charCodeAt(value.length - 1) === 0) {\n return value.substring(0, value.length - 1);\n }\n return value;\n}\n", "import { readType, num2str } from \"./read-type.js\";\n// Grammar constants\nconst ZERO = 0;\nconst NC_DIMENSION = 10;\nconst NC_VARIABLE = 11;\nconst NC_ATTRIBUTE = 12;\nconst NC_UNLIMITED = 0;\n/**\n * Read the header of the file\n * @param buffer - Buffer for the file data\n * @param version - Version of the file\n * @return - Header\n */\nexport function readNetCDFHeader(buffer, version) {\n // Length of record dimension\n // sum of the varSize's of all the record variables.\n const recordDimensionLength = buffer.readUint32();\n // List of dimensions\n const dimList = readDimensionsList(buffer);\n // List of global attributes\n const attributes = readAttributesList(buffer);\n // List of variables\n const variableList = readVariablesList(buffer, dimList.recordId, version);\n const header = {\n version,\n recordDimension: {\n length: recordDimensionLength,\n id: dimList.recordId, // id of the unlimited dimension\n name: dimList.recordName, // name of the unlimited dimension\n recordStep: variableList.recordStep\n },\n dimensions: dimList.dimensions,\n variables: variableList.variables,\n attributes\n };\n return header;\n}\n/**\n * Read list of dimensions\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n */\nfunction readDimensionsList(buffer) {\n const dimList = buffer.readUint32();\n if (dimList === ZERO) {\n if (buffer.readUint32() !== ZERO) {\n throw new Error('NetCDF: wrong empty tag for list of dimensions');\n }\n // TODO - is this empty dimension list supported / recoverable?\n return {\n recordId: 0,\n recordName: '',\n dimensions: []\n };\n }\n if (dimList !== NC_DIMENSION) {\n throw new Error('NetCDF: wrong tag for list of dimensions');\n }\n // Length of dimensions\n const dimensionSize = buffer.readUint32();\n const dimensions = new Array(dimensionSize);\n let recordId;\n let recordName;\n for (let dim = 0; dim < dimensionSize; dim++) {\n // Read name\n const name = readName(buffer);\n // Read dimension size\n const size = buffer.readUint32();\n if (size === NC_UNLIMITED) {\n // in netcdf 3 one field can be of size unlimmited\n recordId = dim;\n recordName = name;\n }\n dimensions[dim] = {\n name,\n size\n };\n }\n return {\n dimensions,\n recordId,\n recordName\n };\n}\n/**\n * List of attributes\n * @ignore\n * @param buffer - Buffer for the file data\n * @return List of attributes with:\n */\nfunction readAttributesList(buffer) {\n const gAttList = buffer.readUint32();\n if (gAttList === ZERO) {\n if (buffer.readUint32() !== ZERO) {\n throw new Error('NetCDF: wrong empty tag for list of attributes');\n }\n return [];\n }\n if (gAttList !== NC_ATTRIBUTE) {\n throw new Error('NetCDF: wrong tag for list of attributes');\n }\n // Length of attributes\n const attributeSize = buffer.readUint32();\n const attributes = new Array(attributeSize);\n for (let gAtt = 0; gAtt < attributeSize; gAtt++) {\n // Read name\n const name = readName(buffer);\n // Read type\n const type = buffer.readUint32();\n if (type < 1 || type > 6) {\n throw new Error(`NetCDF: non valid type ${type}`);\n }\n // Read attribute\n const size = buffer.readUint32();\n const value = readType(buffer, type, size);\n // Apply padding\n padding(buffer);\n attributes[gAtt] = {\n name,\n type: num2str(type),\n value\n };\n }\n return attributes;\n}\n/**\n * List of variables\n * @param buffer - Buffer for the file data\n * @param recordId - Id of the unlimited dimension (also called record dimension)\n * This value may be undefined if there is no unlimited dimension\n * @param {number} version - Version of the file\n */\n// eslint-disable-next-line max-statements, complexity\nfunction readVariablesList(buffer, recordId, version) {\n const varList = buffer.readUint32();\n let recordStep = 0;\n if (varList === ZERO) {\n if (buffer.readUint32() !== ZERO) {\n throw new Error('NetCDF: wrong empty tag for list of variables');\n }\n return {\n recordStep,\n variables: []\n };\n }\n if (varList !== NC_VARIABLE) {\n throw new Error('NetCDF: wrong tag for list of variables');\n }\n // Length of variables\n const variableSize = buffer.readUint32();\n const variables = new Array(variableSize);\n for (let v = 0; v < variableSize; v++) {\n // Read name\n const name = readName(buffer);\n // Read dimensionality of the variable\n const dimensionality = buffer.readUint32();\n // Index into the list of dimensions\n const dimensionsIds = new Array(dimensionality);\n for (let dim = 0; dim < dimensionality; dim++) {\n dimensionsIds[dim] = buffer.readUint32();\n }\n // Read variables size\n const attributes = readAttributesList(buffer);\n // Read type\n const type = buffer.readUint32();\n if (type < 1 && type > 6) {\n throw new Error(`NetCDF: non valid type ${type}`);\n }\n // Read variable size\n // The 32-bit varSize field is not large enough to contain the size of variables that require\n // more than 2^32 - 4 bytes, so 2^32 - 1 is used in the varSize field for such variables.\n const varSize = buffer.readUint32();\n // Read offset\n let offset = buffer.readUint32();\n if (version === 2) {\n if (offset > 0) {\n throw new Error('NetCDF: offsets larger than 4GB not supported');\n }\n offset = buffer.readUint32();\n }\n let record = false;\n // Count amount of record variables\n if (typeof recordId !== 'undefined' && dimensionsIds[0] === recordId) {\n recordStep += varSize;\n record = true;\n }\n variables[v] = {\n name,\n dimensions: dimensionsIds,\n attributes,\n type: num2str(type),\n size: varSize,\n offset,\n record\n };\n }\n return {\n variables,\n recordStep\n };\n}\n// HELPERS\n/**\n * Reads the name\n * @param buffer - Buffer for the file data\n * @return Name\n */\nexport function readName(buffer) {\n // Read name\n const nameLength = buffer.readUint32();\n const name = buffer.readChars(nameLength);\n // validate name\n // TODO\n // Apply padding\n padding(buffer);\n return name;\n}\n/**\n * Moves 1, 2, or 3 bytes to next 4-byte boundary\n */\nfunction padding(buffer) {\n if (buffer.offset % 4 !== 0) {\n buffer.skip(4 - (buffer.offset % 4));\n }\n}\n", "import { readType, str2num, num2bytes } from \"./read-type.js\";\n// const STREAMING = 4294967295;\n/**\n * Read data for the given non-record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @return Data of the element\n */\nexport function readNonRecord(buffer, variable) {\n // variable type\n const type = str2num(variable.type);\n // size of the data\n const size = variable.size / num2bytes(type);\n // iterates over the data\n const data = new Array(size);\n for (let i = 0; i < size; i++) {\n data[i] = readType(buffer, type, 1);\n }\n return data;\n}\n/**\n * Read data for the given record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @param recordDimension - Record dimension metadata\n * @return - Data of the element\n */\nexport function readRecord(buffer, variable, recordDimension) {\n // variable type\n const type = str2num(variable.type);\n const width = variable.size ? variable.size / num2bytes(type) : 1;\n // size of the data\n // TODO streaming data\n const size = recordDimension.length;\n // iterates over the data\n const data = new Array(size);\n const step = recordDimension.recordStep;\n for (let i = 0; i < size; i++) {\n const currentOffset = buffer.offset;\n data[i] = readType(buffer, type, width);\n buffer.seek(currentOffset + step);\n }\n return data;\n}\n", "import { IOBuffer } from \"../iobuffer/iobuffer.js\";\nimport { readNetCDFHeader } from \"./read-header.js\";\nimport { readRecord, readNonRecord } from \"./read-data.js\";\n/**\n * Reads a NetCDF v3.x file\n * https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications.html\n * @param {ArrayBuffer} data - ArrayBuffer or any Typed Array (including Node.js' Buffer from v4) with the data\n * @constructor\n */\nexport class NetCDFReader {\n header;\n buffer;\n constructor(data) {\n const buffer = new IOBuffer(data);\n buffer.setBigEndian();\n // Validate that it's a NetCDF file\n const magic = buffer.readChars(3);\n if (magic !== 'CDF') {\n throw new Error(`NetCDF: file should start with 'CDF', found ${magic}`);\n }\n // Check the NetCDF format\n const version = buffer.readByte();\n if (version > 2) {\n throw new Error(`NetCDF: unsupported version ${version}`);\n }\n // Read the header\n this.header = readNetCDFHeader(buffer, version);\n this.buffer = buffer;\n }\n /**\n * @return {string} - Version for the NetCDF format\n */\n get version() {\n if (this.header.version === 1) {\n return 'classic format';\n }\n return '64-bit offset format';\n }\n /**\n * Get metadata for the record dimension\n */\n get recordDimension() {\n return this.header.recordDimension;\n }\n /**\n * Get list of dimensions (each with `name` and `size`)\n */\n get dimensions() {\n return this.header.dimensions;\n }\n /**\n * Get list of global attributes with:\n * * `name`: String with the name of the attribute\n * * `type`: String with the type of the attribute\n * * `value`: A number or string with the value of the attribute\n */\n get attributes() {\n return this.header.attributes;\n }\n /**\n * Get list of variables\n */\n get variables() {\n return this.header.variables;\n }\n /**\n * Check if an attribute exists\n * @param attributeName - Name of the attribute to find\n * @return\n */\n attributeExists(attributeName) {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n return attribute !== undefined;\n }\n /**\n * Returns the value of an attribute\n * @param attributeName\n * @return Value of the attributeName or null\n */\n getAttribute(attributeName) {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n if (attribute)\n return attribute.value;\n return null;\n }\n /**\n * Check if a dataVariable exists\n * @param variableName - Name of the variable to find\n * @return\n */\n dataVariableExists(variableName) {\n const variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n return variable !== undefined;\n }\n /**\n * Returns the value of a variable as a string\n * @param variableName\n * @return Value of the variable as a string or null\n */\n getDataVariableAsString(variableName) {\n const variable = this.getDataVariable(variableName);\n if (variable)\n return variable.join('');\n return null;\n }\n /**\n * Retrieves the data for a given variable\n * @param variableName - Name of the variable to search or variable object\n * @return List with the variable values\n */\n getDataVariable(variableName) {\n let variable;\n if (typeof variableName === 'string') {\n // search the variable\n variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n }\n else {\n variable = variableName;\n }\n // throws if variable not found\n if (variable === undefined) {\n let errorOutput;\n if (typeof variableName === 'string') {\n errorOutput = variableName;\n }\n else if (typeof variableName === 'object') {\n errorOutput = JSON.stringify(variableName);\n }\n throw new Error(`NetCDF: variable not found: ${errorOutput}`);\n }\n // go to the offset position\n this.buffer.seek(variable.offset);\n if (variable.record) {\n // record variable case\n return readRecord(this.buffer, variable, this.header.recordDimension);\n }\n // non-record variable case\n return readNonRecord(this.buffer, variable);\n }\n toString() {\n const result = [];\n result.push('DIMENSIONS');\n for (const dimension of this.dimensions) {\n result.push(` ${dimension.name.padEnd(30)} = size: ${dimension.size}`);\n }\n result.push('');\n result.push('GLOBAL ATTRIBUTES');\n for (const attribute of this.attributes) {\n result.push(` ${attribute.name.padEnd(30)} = ${attribute.value}`);\n }\n const variables = JSON.parse(JSON.stringify(this.variables));\n result.push('');\n result.push('VARIABLES:');\n for (const variable of variables) {\n variable.value = this.getDataVariable(variable);\n let stringify = JSON.stringify(variable.value);\n if (stringify.length > 50)\n stringify = stringify.substring(0, 50);\n if (!isNaN(variable.value.length)) {\n stringify += ` (length: ${variable.value.length})`;\n }\n result.push(` ${variable.name.padEnd(30)} = ${stringify}`);\n }\n return result.join('\\n');\n }\n}\n", "import { NetCDFReader } from \"./netcdfjs/netcdf-reader.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.2.0-beta.1\" !== 'undefined' ? \"4.2.0-beta.1\" : 'latest';\n/**\n * Worker loader for NETCDF\n */\nexport const NetCDFWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'NetCDF',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n extensions: ['cdf', 'nc'],\n mimeTypes: [\n 'application/netcdf',\n 'application/x-netcdf'\n // 'application/octet-stream'\n ],\n category: 'image',\n options: {\n netcdf: {\n loadVariables: false\n }\n }\n};\n/**\n * Loader for the NetCDF format\n */\nexport const NetCDFLoader = {\n ...NetCDFWorkerLoader,\n parse: async (arrayBuffer, options) => parseNetCDF(arrayBuffer, options),\n binary: true\n};\nfunction parseNetCDF(arrayBuffer, options) {\n const reader = new NetCDFReader(arrayBuffer);\n const variables = {};\n if (options?.netcdf?.loadData) {\n for (const variable of reader.variables) {\n variables[variable.name] = reader.getDataVariable(variable);\n }\n }\n return {\n loaderData: reader.header,\n data: variables\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { NetCDFReader } from "./netcdfjs/netcdf-reader.js";
2
2
  // __VERSION__ is injected by babel-plugin-version-inline
3
3
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
4
- const VERSION = typeof "4.2.0-alpha.6" !== 'undefined' ? "4.2.0-alpha.6" : 'latest';
4
+ const VERSION = typeof "4.2.0-beta.1" !== 'undefined' ? "4.2.0-beta.1" : 'latest';
5
5
  /**
6
6
  * Worker loader for NETCDF
7
7
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/netcdf",
3
3
  "description": "Loader for NetCDF",
4
- "version": "4.2.0-beta.1",
4
+ "version": "4.2.0-beta.2",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "publishConfig": {
@@ -39,10 +39,10 @@
39
39
  "build-bundle-dev": "ocular-bundle ./bundle.ts --env=dev --output=dist/dist.dev.js"
40
40
  },
41
41
  "dependencies": {
42
- "@loaders.gl/loader-utils": "4.2.0-beta.1"
42
+ "@loaders.gl/loader-utils": "4.2.0-beta.2"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@loaders.gl/core": "^4.0.0"
46
46
  },
47
- "gitHead": "c386a9196516fe3ff24847b40e6c77be039cf905"
47
+ "gitHead": "13c03663fec365a4d24c06377d50035cebd7ba9f"
48
48
  }