{"version":3,"file":"netcdfjs.js","sources":["../node_modules/iobuffer/lib-esm/text.browser.js","../node_modules/iobuffer/lib-esm/IOBuffer.js","../src/utils.js","../src/types.js","../src/data.js","../src/header.js","../src/toString.js","../src/index.js"],"sourcesContent":["// eslint-disable-next-line import/no-unassigned-import\nimport './text-encoding-polyfill';\nexport function decode(bytes, encoding = 'utf8') {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\nexport function encode(str) {\n    return encoder.encode(str);\n}\n//# sourceMappingURL=text.browser.js.map","import { decode, encode } from './text';\nconst defaultByteLength = 1024 * 8;\nexport class IOBuffer {\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 = defaultByteLength, 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 n bytes backward.\n     * @param n - Number of bytes to move back.\n     */\n    back(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 64-bit signed integer number and move pointer forward by 8 bytes.\n     */\n    readBigInt64() {\n        const value = this._data.getBigInt64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n     */\n    readBigUint64() {\n        const value = this._data.getBigUint64(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 decode(this.readBytes(n));\n    }\n    /**\n     * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n     * forward by `n` bytes.\n     * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n     */\n    decodeText(n = 1, encoding = 'utf-8') {\n        return decode(this.readBytes(n), encoding);\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 `value` as a 64-bit signed bigint and move pointer forward by 8\n     * bytes.\n     */\n    writeBigInt64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigInt64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n     * bytes.\n     */\n    writeBigUint64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigUint64(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        return this.writeBytes(encode(str));\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//# sourceMappingURL=IOBuffer.js.map","/**\n * Throws a non-valid NetCDF exception if the statement it's true\n * @ignore\n * @param {boolean} statement - Throws if true\n * @param {string} reason - Reason to throw\n */\nexport function notNetcdf(statement, reason) {\n  if (statement) {\n    throw new TypeError(`Not a valid NetCDF v3.x file: ${reason}`);\n  }\n}\n\n/**\n * Moves 1, 2, or 3 bytes to next 4-byte boundary\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n */\nexport function padding(buffer) {\n  if (buffer.offset % 4 !== 0) {\n    buffer.skip(4 - (buffer.offset % 4));\n  }\n}\n\n/**\n * Reads the name\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @return {string} - Name\n */\nexport function readName(buffer) {\n  // Read name\n  let nameLength = buffer.readUint32();\n  let name = buffer.readChars(nameLength);\n\n  // validate name\n  // TODO\n\n  // Apply padding\n  padding(buffer);\n  return name;\n}\n","import { notNetcdf } from \"./utils.js\";\n\nconst types = {\n  BYTE: 1,\n  CHAR: 2,\n  SHORT: 3,\n  INT: 4,\n  FLOAT: 5,\n  DOUBLE: 6,\n};\n\n/**\n * Parse a number into their respective type\n * @ignore\n * @param {number} type - integer that represents the type\n * @return {string} - 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/**\n * Parse a number type identifier to his size in bytes\n * @ignore\n * @param {number} type - integer that represents the type\n * @return {number} -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/**\n * Reverse search of num2str\n * @ignore\n * @param {string} type - string that represents the type\n * @return {number} - 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/**\n * Auxiliary function to read numeric data\n * @ignore\n * @param {number} size - Size of the element to read\n * @param {function} bufferReader - Function to read next value\n * @return {Array<number>|number}\n */\nfunction readNumber(size, bufferReader) {\n  if (size !== 1) {\n    let numbers = new Array(size);\n    for (let i = 0; i < size; i++) {\n      numbers[i] = bufferReader();\n    }\n    return numbers;\n  } else {\n    return bufferReader();\n  }\n}\n\n/**\n * Given a type and a size reads the next element\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @param {number} type - Type of the data to read\n * @param {number} size - Size of the element to read\n * @return {string|Array<number>|number}\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      notNetcdf(true, `non valid type ${type}`);\n      return undefined;\n  }\n}\n\n/**\n * Removes null terminate value\n * @ignore\n * @param {string} value - String to trim\n * @return {string} - 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 { num2bytes, str2num, readType } from \"./types.js\";\n\n// const STREAMING = 4294967295;\n\n/**\n * Read data for the given non-record variable\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @param {object} variable - Variable metadata\n * @return {Array} - Data of the element\n */\nexport function nonRecord(buffer, variable) {\n  // variable type\n  const type = str2num(variable.type);\n\n  // size of the data\n  let size = variable.size / num2bytes(type);\n\n  // iterates over the data\n  let data = new Array(size);\n  for (let i = 0; i < size; i++) {\n    data[i] = readType(buffer, type, 1);\n  }\n\n  return data;\n}\n\n/**\n * Read data for the given record variable\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @param {object} variable - Variable metadata\n * @param {object} recordDimension - Record dimension metadata\n * @return {Array} - Data of the element\n */\nexport function record(buffer, variable, recordDimension) {\n  // variable type\n  const type = str2num(variable.type);\n  const width = variable.size ? variable.size / num2bytes(type) : 1;\n\n  // size of the data\n  // TODO streaming data\n  let size = recordDimension.length;\n\n  // iterates over the data\n  let data = new Array(size);\n  const step = recordDimension.recordStep;\n\n  for (let i = 0; i < size; i++) {\n    let currentOffset = buffer.offset;\n    data[i] = readType(buffer, type, width);\n    buffer.seek(currentOffset + step);\n  }\n\n  return data;\n}\n","import { num2str, readType } from \"./types.js\";\nimport { padding, notNetcdf, readName } from \"./utils.js\";\n\n// Grammar constants\nconst ZERO = 0;\nconst NC_DIMENSION = 10;\nconst NC_VARIABLE = 11;\nconst NC_ATTRIBUTE = 12;\n\n/**\n * Read the header of the file\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @param {number} version - Version of the file\n * @return {object} - Object with the fields:\n *  * `recordDimension`: Number with the length of record dimension\n *  * `dimensions`: List of dimensions\n *  * `globalAttributes`: List of global attributes\n *  * `variables`: List of variables\n */\nexport function header(buffer, version) {\n  // Length of record dimension\n  // sum of the varSize's of all the record variables.\n  let header = { recordDimension: { length: buffer.readUint32() } };\n\n  // Version\n  header.version = version;\n\n  // List of dimensions\n  let dimList = dimensionsList(buffer);\n  header.recordDimension.id = dimList.recordId; // id of the unlimited dimension\n  header.recordDimension.name = dimList.recordName; // name of the unlimited dimension\n  header.dimensions = dimList.dimensions;\n\n  // List of global attributes\n  header.globalAttributes = attributesList(buffer);\n\n  // List of variables\n  let variables = variablesList(buffer, dimList.recordId, version);\n  header.variables = variables.variables;\n  header.recordDimension.recordStep = variables.recordStep;\n\n  return header;\n}\n\nconst NC_UNLIMITED = 0;\n\n/**\n * List of dimensions\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @return {object} - Ojbect containing the following properties:\n *  * `dimensions` that is an array of dimension object:\n *  * `name`: String with the name of the dimension\n *  * `size`: Number with the size of the dimension dimensions: dimensions\n *  * `recordId`: the id of the dimension that has unlimited size or undefined,\n *  * `recordName`: name of the dimension that has unlimited size\n */\nfunction dimensionsList(buffer) {\n  let recordId, recordName;\n  const dimList = buffer.readUint32();\n  let dimensions;\n  if (dimList === ZERO) {\n    notNetcdf(\n      buffer.readUint32() !== ZERO,\n      \"wrong empty tag for list of dimensions\"\n    );\n    return [];\n  } else {\n    notNetcdf(dimList !== NC_DIMENSION, \"wrong tag for list of dimensions\");\n\n    // Length of dimensions\n    const dimensionSize = buffer.readUint32();\n    dimensions = new Array(dimensionSize);\n    for (let dim = 0; dim < dimensionSize; dim++) {\n      // Read name\n      let name = readName(buffer);\n\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\n      dimensions[dim] = {\n        name,\n        size,\n      };\n    }\n  }\n  return {\n    dimensions,\n    recordId,\n    recordName,\n  };\n}\n\n/**\n * List of attributes\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @return {Array<object>} - List of 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 */\nfunction attributesList(buffer) {\n  const gAttList = buffer.readUint32();\n  let attributes;\n  if (gAttList === ZERO) {\n    notNetcdf(\n      buffer.readUint32() !== ZERO,\n      \"wrong empty tag for list of attributes\"\n    );\n    return [];\n  } else {\n    notNetcdf(gAttList !== NC_ATTRIBUTE, \"wrong tag for list of attributes\");\n\n    // Length of attributes\n    const attributeSize = buffer.readUint32();\n    attributes = new Array(attributeSize);\n    for (let gAtt = 0; gAtt < attributeSize; gAtt++) {\n      // Read name\n      let name = readName(buffer);\n\n      // Read type\n      let type = buffer.readUint32();\n      notNetcdf(type < 1 || type > 6, `non valid type ${type}`);\n\n      // Read attribute\n      let size = buffer.readUint32();\n      let value = readType(buffer, type, size);\n\n      // Apply padding\n      padding(buffer);\n\n      attributes[gAtt] = {\n        name,\n        type: num2str(type),\n        value,\n      };\n    }\n  }\n  return attributes;\n}\n\n/**\n * List of variables\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n * @param {number} 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 * @return {object} - Number of recordStep and list of variables with:\n *  * `name`: String with the name of the variable\n *  * `dimensions`: Array with the dimension IDs of the variable\n *  * `attributes`: Array with the attributes of the variable\n *  * `type`: String with the type of the variable\n *  * `size`: Number with the size of the variable\n *  * `offset`: Number with the offset where of the variable begins\n *  * `record`: True if is a record variable, false otherwise (unlimited size)\n */\n\nfunction variablesList(buffer, recordId, version) {\n  const varList = buffer.readUint32();\n  let recordStep = 0;\n  let variables;\n  if (varList === ZERO) {\n    notNetcdf(\n      buffer.readUint32() !== ZERO,\n      \"wrong empty tag for list of variables\"\n    );\n    return [];\n  } else {\n    notNetcdf(varList !== NC_VARIABLE, \"wrong tag for list of variables\");\n\n    // Length of variables\n    const variableSize = buffer.readUint32();\n    variables = new Array(variableSize);\n    for (let v = 0; v < variableSize; v++) {\n      // Read name\n      let name = readName(buffer);\n\n      // Read dimensionality of the variable\n      const dimensionality = buffer.readUint32();\n\n      // Index into the list of dimensions\n      let dimensionsIds = new Array(dimensionality);\n      for (let dim = 0; dim < dimensionality; dim++) {\n        dimensionsIds[dim] = buffer.readUint32();\n      }\n\n      // Read variables size\n      let attributes = attributesList(buffer);\n\n      // Read type\n      let type = buffer.readUint32();\n      notNetcdf(type < 1 && type > 6, `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\n      // Read offset\n      let offset = buffer.readUint32();\n      if (version === 2) {\n        notNetcdf(offset > 0, \"offsets larger than 4GB not supported\");\n        offset = buffer.readUint32();\n      }\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  }\n\n  return {\n    variables,\n    recordStep,\n  };\n}\n","export function toString() {\n  let result = [];\n\n  result.push(\"DIMENSIONS\");\n  for (let dimension of this.dimensions) {\n    result.push(`  ${dimension.name.padEnd(30)} = size: ${dimension.size}`);\n  }\n\n  result.push(\"\");\n  result.push(\"GLOBAL ATTRIBUTES\");\n  for (let attribute of this.globalAttributes) {\n    result.push(`  ${attribute.name.padEnd(30)} = ${attribute.value}`);\n  }\n\n  let variables = JSON.parse(JSON.stringify(this.variables));\n  result.push(\"\");\n  result.push(\"VARIABLES:\");\n  for (let variable of variables) {\n    variable.value = this.getDataVariable(variable);\n    let stringify = JSON.stringify(variable.value);\n    if (stringify.length > 50) 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","import { IOBuffer } from \"iobuffer\";\n\nimport { record, nonRecord } from \"./data.js\";\nimport { header } from \"./header.js\";\nimport { toString } from \"./toString.js\";\nimport { notNetcdf } from \"./utils.js\";\n\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  constructor(data) {\n    const buffer = new IOBuffer(data);\n    buffer.setBigEndian();\n\n    // Validate that it's a NetCDF file\n    notNetcdf(buffer.readChars(3) !== \"CDF\", \"should start with CDF\");\n\n    // Check the NetCDF format\n    const version = buffer.readByte();\n    notNetcdf(version > 2, \"unknown version\");\n\n    // Read the header\n    this.header = header(buffer, version);\n    this.buffer = buffer;\n  }\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    } else {\n      return \"64-bit offset format\";\n    }\n  }\n\n  /**\n   * @return {object} - Metadata for the record dimension\n   *  * `length`: Number of elements in the record dimension\n   *  * `id`: Id number in the list of dimensions for the record dimension\n   *  * `name`: String with the name of the record dimension\n   *  * `recordStep`: Number with the record variables step size\n   */\n  get recordDimension() {\n    return this.header.recordDimension;\n  }\n\n  /**\n   * @return {Array<object>} - List of dimensions with:\n   *  * `name`: String with the name of the dimension\n   *  * `size`: Number with the size of the dimension\n   */\n  get dimensions() {\n    return this.header.dimensions;\n  }\n\n  /**\n   * @return {Array<object>} - 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 globalAttributes() {\n    return this.header.globalAttributes;\n  }\n\n  /**\n   * Returns the value of an attribute\n   * @param {string} attributeName\n   * @return {string} Value of the attributeName or null\n   */\n  getAttribute(attributeName) {\n    const attribute = this.globalAttributes.find(\n      (val) => val.name === attributeName\n    );\n    if (attribute) return attribute.value;\n    return null;\n  }\n\n  /**\n   * Returns the value of a variable as a string\n   * @param {string} variableName\n   * @return {string} Value of the variable as a string or null\n   */\n  getDataVariableAsString(variableName) {\n    const variable = this.getDataVariable(variableName);\n    if (variable) return variable.join(\"\");\n    return null;\n  }\n\n  /**\n   * @return {Array<object>} - List of variables with:\n   *  * `name`: String with the name of the variable\n   *  * `dimensions`: Array with the dimension IDs of the variable\n   *  * `attributes`: Array with the attributes of the variable\n   *  * `type`: String with the type of the variable\n   *  * `size`: Number with the size of the variable\n   *  * `offset`: Number with the offset where of the variable begins\n   *  * `record`: True if is a record variable, false otherwise\n   */\n  get variables() {\n    return this.header.variables;\n  }\n\n  toString() {\n    return toString.call(this);\n  }\n\n  /**\n   * Retrieves the data for a given variable\n   * @param {string|object} variableName - Name of the variable to search or variable object\n   * @return {Array} - 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((val) => {\n        return val.name === variableName;\n      });\n    } else {\n      variable = variableName;\n    }\n\n    // throws if variable not found\n    notNetcdf(variable === undefined, `variable not found: ${variableName}`);\n\n    // go to the offset position\n    this.buffer.seek(variable.offset);\n\n    if (variable.record) {\n      // record variable case\n      return record(this.buffer, variable, this.header.recordDimension);\n    } else {\n      // non-record variable case\n      return nonRecord(this.buffer, variable);\n    }\n  }\n\n  /**\n   * Check if a dataVariable exists\n   * @param {string} variableName - Name of the variable to find\n   * @return {boolean}\n   */\n  dataVariableExists(variableName) {\n    const variable = this.header.variables.find((val) => {\n      return val.name === variableName;\n    });\n    return variable !== undefined;\n  }\n\n  /**\n   * Check if an attribute exists\n   * @param {string} attributeName - Name of the attribute to find\n   * @return {boolean}\n   */\n  attributeExists(attributeName) {\n    const attribute = this.globalAttributes.find(\n      (val) => val.name === attributeName\n    );\n    return attribute !== undefined;\n  }\n}\n"],"names":["decode","bytes","encoding","decoder","TextDecoder","encoder","TextEncoder","encode","str","defaultByteLength","IOBuffer","constructor","data","options","dataIsGiven","ArrayBuffer","lastWrittenByte","byteLength","offset","dvOffset","isView","buffer","byteOffset","length","littleEndian","_data","DataView","_mark","_marks","available","isLittleEndian","setLittleEndian","isBigEndian","setBigEndian","skip","n","back","seek","mark","reset","pushMark","push","popMark","pop","undefined","Error","rewind","ensureAvailable","lengthNeeded","newLength","newArray","Uint8Array","set","readBoolean","readUint8","readInt8","getInt8","getUint8","readByte","readBytes","i","readInt16","value","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readFloat32","getFloat32","readFloat64","getFloat64","readBigInt64","getBigInt64","readBigUint64","getBigUint64","readChar","String","fromCharCode","readChars","result","readUtf8","decodeText","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBigInt64","setBigInt64","writeBigUint64","setBigUint64","writeChar","charCodeAt","writeChars","writeUtf8","toArray","notNetcdf","statement","reason","TypeError","padding","readName","nameLength","name","types","BYTE","CHAR","SHORT","INT","FLOAT","DOUBLE","num2str","type","Number","num2bytes","str2num","readNumber","size","bufferReader","numbers","Array","readType","trimNull","bind","substring","nonRecord","variable","record","recordDimension","width","step","recordStep","currentOffset","ZERO","NC_DIMENSION","NC_VARIABLE","NC_ATTRIBUTE","header","version","dimList","dimensionsList","id","recordId","recordName","dimensions","globalAttributes","attributesList","variables","variablesList","NC_UNLIMITED","dimensionSize","dim","gAttList","attributes","attributeSize","gAtt","varList","variableSize","v","dimensionality","dimensionsIds","varSize","toString","dimension","padEnd","attribute","JSON","parse","stringify","getDataVariable","isNaN","join","NetCDFReader","getAttribute","attributeName","find","val","getDataVariableAsString","variableName","call","dataVariableExists","attributeExists"],"mappings":"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"}