@loaders.gl/netcdf 3.3.0-alpha.5 → 3.3.0-alpha.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/netcdfjs/read-header.ts"],"names":["ZERO","NC_DIMENSION","NC_VARIABLE","NC_ATTRIBUTE","NC_UNLIMITED","readNetCDFHeader","buffer","version","recordDimensionLength","readUint32","dimList","readDimensionsList","attributes","readAttributesList","variableList","readVariablesList","recordId","header","recordDimension","length","id","name","recordName","recordStep","dimensions","variables","Error","dimensionSize","Array","dim","readName","size","gAttList","attributeSize","gAtt","type","value","padding","varList","variableSize","v","dimensionality","dimensionsIds","varSize","offset","record","nameLength","readChars","skip"],"mappings":"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","sourcesContent":["import type {IOBuffer} from '../iobuffer/iobuffer';\nimport type {NetCDFHeader, NetCDFDimension, NetCDFVariable, NetCDFAttribute} from './netcdf-types';\nimport {readType, num2str} from './read-type';\n\n// Grammar constants\nconst ZERO = 0;\nconst NC_DIMENSION = 10;\nconst NC_VARIABLE = 11;\nconst NC_ATTRIBUTE = 12;\n\nconst NC_UNLIMITED = 0;\n\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: IOBuffer, version: number): NetCDFHeader {\n // Length of record dimension\n // sum of the varSize's of all the record variables.\n const recordDimensionLength = buffer.readUint32();\n\n // List of dimensions\n const dimList = readDimensionsList(buffer);\n\n // List of global attributes\n const attributes = readAttributesList(buffer);\n\n // List of variables\n const variableList = readVariablesList(buffer, dimList.recordId, version);\n\n const header: NetCDFHeader = {\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\n return header;\n}\n\n/**\n * Read list of dimensions\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n */\nfunction readDimensionsList(buffer: IOBuffer): {\n recordId: number;\n recordName: string;\n dimensions: NetCDFDimension[];\n} {\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\n if (dimList !== NC_DIMENSION) {\n throw new Error('NetCDF: wrong tag for list of dimensions');\n }\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\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 buffer - Buffer for the file data\n * @return List of attributes with:\n */\nfunction readAttributesList(buffer: IOBuffer): NetCDFAttribute[] {\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\n if (gAttList !== NC_ATTRIBUTE) {\n throw new Error('NetCDF: wrong tag for list of attributes');\n }\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\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\n // Read attribute\n const size = buffer.readUint32();\n const 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 return attributes;\n}\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(\n buffer: IOBuffer,\n recordId: number,\n version: number\n): {\n recordStep: number;\n variables: NetCDFVariable[];\n} {\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\n if (varList !== NC_VARIABLE) {\n throw new Error('NetCDF: wrong tag for list of variables');\n }\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\n // Read dimensionality of the variable\n const dimensionality = buffer.readUint32();\n\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\n // Read variables size\n const attributes = readAttributesList(buffer);\n\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\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 if (offset > 0) {\n throw new Error('NetCDF: offsets larger than 4GB not supported');\n }\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 return {\n variables,\n recordStep\n };\n}\n\n// HELPERS\n\n/**\n * Reads the name\n * @param buffer - Buffer for the file data\n * @return Name\n */\nexport function readName(buffer: IOBuffer): string {\n // Read name\n const nameLength = buffer.readUint32();\n const name = buffer.readChars(nameLength);\n\n // validate name\n // TODO\n\n // Apply padding\n padding(buffer);\n return name;\n}\n\n/**\n * Moves 1, 2, or 3 bytes to next 4-byte boundary\n */\nfunction padding(buffer: IOBuffer) {\n if (buffer.offset % 4 !== 0) {\n buffer.skip(4 - (buffer.offset % 4));\n }\n}\n"],"file":"read-header.js"}
1
+ {"version":3,"file":"read-header.js","names":["ZERO","NC_DIMENSION","NC_VARIABLE","NC_ATTRIBUTE","NC_UNLIMITED","readNetCDFHeader","buffer","version","recordDimensionLength","readUint32","dimList","readDimensionsList","attributes","readAttributesList","variableList","readVariablesList","recordId","header","recordDimension","length","id","name","recordName","recordStep","dimensions","variables","Error","dimensionSize","Array","dim","readName","size","gAttList","attributeSize","gAtt","type","value","readType","padding","num2str","varList","variableSize","v","dimensionality","dimensionsIds","varSize","offset","record","nameLength","readChars","skip"],"sources":["../../../src/netcdfjs/read-header.ts"],"sourcesContent":["import type {IOBuffer} from '../iobuffer/iobuffer';\nimport type {NetCDFHeader, NetCDFDimension, NetCDFVariable, NetCDFAttribute} from './netcdf-types';\nimport {readType, num2str} from './read-type';\n\n// Grammar constants\nconst ZERO = 0;\nconst NC_DIMENSION = 10;\nconst NC_VARIABLE = 11;\nconst NC_ATTRIBUTE = 12;\n\nconst NC_UNLIMITED = 0;\n\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: IOBuffer, version: number): NetCDFHeader {\n // Length of record dimension\n // sum of the varSize's of all the record variables.\n const recordDimensionLength = buffer.readUint32();\n\n // List of dimensions\n const dimList = readDimensionsList(buffer);\n\n // List of global attributes\n const attributes = readAttributesList(buffer);\n\n // List of variables\n const variableList = readVariablesList(buffer, dimList.recordId, version);\n\n const header: NetCDFHeader = {\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\n return header;\n}\n\n/**\n * Read list of dimensions\n * @ignore\n * @param {IOBuffer} buffer - Buffer for the file data\n */\nfunction readDimensionsList(buffer: IOBuffer): {\n recordId: number;\n recordName: string;\n dimensions: NetCDFDimension[];\n} {\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\n if (dimList !== NC_DIMENSION) {\n throw new Error('NetCDF: wrong tag for list of dimensions');\n }\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\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 buffer - Buffer for the file data\n * @return List of attributes with:\n */\nfunction readAttributesList(buffer: IOBuffer): NetCDFAttribute[] {\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\n if (gAttList !== NC_ATTRIBUTE) {\n throw new Error('NetCDF: wrong tag for list of attributes');\n }\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\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\n // Read attribute\n const size = buffer.readUint32();\n const 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 return attributes;\n}\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(\n buffer: IOBuffer,\n recordId: number,\n version: number\n): {\n recordStep: number;\n variables: NetCDFVariable[];\n} {\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\n if (varList !== NC_VARIABLE) {\n throw new Error('NetCDF: wrong tag for list of variables');\n }\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\n // Read dimensionality of the variable\n const dimensionality = buffer.readUint32();\n\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\n // Read variables size\n const attributes = readAttributesList(buffer);\n\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\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 if (offset > 0) {\n throw new Error('NetCDF: offsets larger than 4GB not supported');\n }\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 return {\n variables,\n recordStep\n };\n}\n\n// HELPERS\n\n/**\n * Reads the name\n * @param buffer - Buffer for the file data\n * @return Name\n */\nexport function readName(buffer: IOBuffer): string {\n // Read name\n const nameLength = buffer.readUint32();\n const name = buffer.readChars(nameLength);\n\n // validate name\n // TODO\n\n // Apply padding\n padding(buffer);\n return name;\n}\n\n/**\n * Moves 1, 2, or 3 bytes to next 4-byte boundary\n */\nfunction padding(buffer: IOBuffer) {\n if (buffer.offset % 4 !== 0) {\n buffer.skip(4 - (buffer.offset % 4));\n }\n}\n"],"mappings":"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"}
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.readType = readType;
7
- exports.num2str = num2str;
6
+ exports.TYPES = void 0;
8
7
  exports.num2bytes = num2bytes;
8
+ exports.num2str = num2str;
9
+ exports.readType = readType;
9
10
  exports.str2num = str2num;
10
- exports.TYPES = void 0;
11
11
  var TYPES = {
12
12
  BYTE: 1,
13
13
  CHAR: 2,
@@ -16,28 +16,22 @@ var TYPES = {
16
16
  FLOAT: 5,
17
17
  DOUBLE: 6
18
18
  };
19
- exports.TYPES = TYPES;
20
19
 
20
+ exports.TYPES = TYPES;
21
21
  function readType(buffer, type, size) {
22
22
  switch (type) {
23
23
  case TYPES.BYTE:
24
24
  return buffer.readBytes(size);
25
-
26
25
  case TYPES.CHAR:
27
26
  return trimNull(buffer.readChars(size));
28
-
29
27
  case TYPES.SHORT:
30
28
  return readNumber(size, buffer.readInt16.bind(buffer));
31
-
32
29
  case TYPES.INT:
33
30
  return readNumber(size, buffer.readInt32.bind(buffer));
34
-
35
31
  case TYPES.FLOAT:
36
32
  return readNumber(size, buffer.readFloat32.bind(buffer));
37
-
38
33
  case TYPES.DOUBLE:
39
34
  return readNumber(size, buffer.readFloat64.bind(buffer));
40
-
41
35
  default:
42
36
  throw new Error("NetCDF: non valid type ".concat(type));
43
37
  }
@@ -47,22 +41,16 @@ function num2str(type) {
47
41
  switch (Number(type)) {
48
42
  case TYPES.BYTE:
49
43
  return 'byte';
50
-
51
44
  case TYPES.CHAR:
52
45
  return 'char';
53
-
54
46
  case TYPES.SHORT:
55
47
  return 'short';
56
-
57
48
  case TYPES.INT:
58
49
  return 'int';
59
-
60
50
  case TYPES.FLOAT:
61
51
  return 'float';
62
-
63
52
  case TYPES.DOUBLE:
64
53
  return 'double';
65
-
66
54
  default:
67
55
  return 'undefined';
68
56
  }
@@ -72,22 +60,16 @@ function num2bytes(type) {
72
60
  switch (Number(type)) {
73
61
  case TYPES.BYTE:
74
62
  return 1;
75
-
76
63
  case TYPES.CHAR:
77
64
  return 1;
78
-
79
65
  case TYPES.SHORT:
80
66
  return 2;
81
-
82
67
  case TYPES.INT:
83
68
  return 4;
84
-
85
69
  case TYPES.FLOAT:
86
70
  return 4;
87
-
88
71
  case TYPES.DOUBLE:
89
72
  return 8;
90
-
91
73
  default:
92
74
  return -1;
93
75
  }
@@ -97,22 +79,16 @@ function str2num(type) {
97
79
  switch (String(type)) {
98
80
  case 'byte':
99
81
  return TYPES.BYTE;
100
-
101
82
  case 'char':
102
83
  return TYPES.CHAR;
103
-
104
84
  case 'short':
105
85
  return TYPES.SHORT;
106
-
107
86
  case 'int':
108
87
  return TYPES.INT;
109
-
110
88
  case 'float':
111
89
  return TYPES.FLOAT;
112
-
113
90
  case 'double':
114
91
  return TYPES.DOUBLE;
115
-
116
92
  default:
117
93
  return -1;
118
94
  }
@@ -121,14 +97,11 @@ function str2num(type) {
121
97
  function readNumber(size, bufferReader) {
122
98
  if (size !== 1) {
123
99
  var numbers = new Array(size);
124
-
125
100
  for (var i = 0; i < size; i++) {
126
101
  numbers[i] = bufferReader();
127
102
  }
128
-
129
103
  return numbers;
130
104
  }
131
-
132
105
  return bufferReader();
133
106
  }
134
107
 
@@ -136,7 +109,6 @@ function trimNull(value) {
136
109
  if (value.charCodeAt(value.length - 1) === 0) {
137
110
  return value.substring(0, value.length - 1);
138
111
  }
139
-
140
112
  return value;
141
113
  }
142
114
  //# sourceMappingURL=read-type.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/netcdfjs/read-type.ts"],"names":["TYPES","BYTE","CHAR","SHORT","INT","FLOAT","DOUBLE","readType","buffer","type","size","readBytes","trimNull","readChars","readNumber","readInt16","bind","readInt32","readFloat32","readFloat64","Error","num2str","Number","num2bytes","str2num","String","bufferReader","numbers","Array","i","value","charCodeAt","length","substring"],"mappings":"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","sourcesContent":["import {IOBuffer} from '../iobuffer/iobuffer';\n\nexport const TYPES = {\n BYTE: 1,\n CHAR: 2,\n SHORT: 3,\n INT: 4,\n FLOAT: 5,\n DOUBLE: 6\n};\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(\n buffer: IOBuffer,\n type: number,\n size: number\n): string | number | number[] | Uint8Array {\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/**\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: number): string {\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 * @param type - integer that represents the type\n * @return size of the type\n */\nexport function num2bytes(type: number): number {\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 * @param type string that represents the type\n * @return parsed value of the type\n */\nexport function str2num(type: string): number {\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 * @param size - Size of the element to read\n * @param bufferReader - Function to read next value\n * @return\n */\nfunction readNumber(size: number, bufferReader: () => number): number | number[] {\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/**\n * Removes null terminate value\n * @param value - String to trim\n * @return - Trimmed string\n */\nfunction trimNull(value: string): string {\n if (value.charCodeAt(value.length - 1) === 0) {\n return value.substring(0, value.length - 1);\n }\n return value;\n}\n"],"file":"read-type.js"}
1
+ {"version":3,"file":"read-type.js","names":["TYPES","BYTE","CHAR","SHORT","INT","FLOAT","DOUBLE","readType","buffer","type","size","readBytes","trimNull","readChars","readNumber","readInt16","bind","readInt32","readFloat32","readFloat64","Error","num2str","Number","num2bytes","str2num","String","bufferReader","numbers","Array","i","value","charCodeAt","length","substring"],"sources":["../../../src/netcdfjs/read-type.ts"],"sourcesContent":["import {IOBuffer} from '../iobuffer/iobuffer';\n\nexport const TYPES = {\n BYTE: 1,\n CHAR: 2,\n SHORT: 3,\n INT: 4,\n FLOAT: 5,\n DOUBLE: 6\n};\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(\n buffer: IOBuffer,\n type: number,\n size: number\n): string | number | number[] | Uint8Array {\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/**\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: number): string {\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 * @param type - integer that represents the type\n * @return size of the type\n */\nexport function num2bytes(type: number): number {\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 * @param type string that represents the type\n * @return parsed value of the type\n */\nexport function str2num(type: string): number {\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 * @param size - Size of the element to read\n * @param bufferReader - Function to read next value\n * @return\n */\nfunction readNumber(size: number, bufferReader: () => number): number | number[] {\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/**\n * Removes null terminate value\n * @param value - String to trim\n * @return - Trimmed string\n */\nfunction trimNull(value: string): string {\n if (value.charCodeAt(value.length - 1) === 0) {\n return value.substring(0, value.length - 1);\n }\n return value;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["NetCDFReader","NetCDFLoader"],"mappings":"AAAA,SAAQA,YAAR,QAA2B,0BAA3B;AAEA,SAAQC,YAAR,QAA2B,iBAA3B","sourcesContent":["export {NetCDFReader} from './netcdfjs/netcdf-reader';\n\nexport {NetCDFLoader} from './netcdf-loader';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["NetCDFReader","NetCDFLoader"],"sources":["../../src/index.ts"],"sourcesContent":["export {NetCDFReader} from './netcdfjs/netcdf-reader';\n\nexport {NetCDFLoader} from './netcdf-loader';\n"],"mappings":"AAAA,SAAQA,YAAY,QAAO,0BAA0B;AAErD,SAAQC,YAAY,QAAO,iBAAiB"}
@@ -1,58 +1,43 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  const DEFAULT_BYTE_LENGTH = 1024 * 8;
3
3
  export class IOBuffer {
4
- constructor(data = DEFAULT_BYTE_LENGTH, options = {}) {
5
- _defineProperty(this, "buffer", void 0);
6
4
 
5
+ constructor() {
6
+ let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_BYTE_LENGTH;
7
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8
+ _defineProperty(this, "buffer", void 0);
7
9
  _defineProperty(this, "byteLength", void 0);
8
-
9
10
  _defineProperty(this, "byteOffset", void 0);
10
-
11
11
  _defineProperty(this, "length", void 0);
12
-
13
12
  _defineProperty(this, "offset", void 0);
14
-
15
13
  _defineProperty(this, "lastWrittenByte", void 0);
16
-
17
14
  _defineProperty(this, "littleEndian", void 0);
18
-
19
15
  _defineProperty(this, "_data", void 0);
20
-
21
16
  _defineProperty(this, "_mark", void 0);
22
-
23
17
  _defineProperty(this, "_marks", void 0);
24
-
25
18
  _defineProperty(this, "textDecoder", new TextDecoder());
26
-
27
19
  _defineProperty(this, "textEncoder", new TextEncoder());
28
-
29
20
  let dataIsGiven = false;
30
-
31
21
  if (typeof data === 'number') {
32
22
  data = new ArrayBuffer(data);
33
23
  } else {
34
24
  dataIsGiven = true;
35
25
  this.lastWrittenByte = data.byteLength;
36
26
  }
37
-
38
27
  const offset = options.offset ? options.offset >>> 0 : 0;
39
28
  const byteLength = data.byteLength - offset;
40
29
  let dvOffset = offset;
41
-
42
30
  if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {
43
31
  if (data.byteLength !== data.buffer.byteLength) {
44
32
  dvOffset = data.byteOffset + offset;
45
33
  }
46
-
47
34
  data = data.buffer;
48
35
  }
49
-
50
36
  if (dataIsGiven) {
51
37
  this.lastWrittenByte = byteLength;
52
38
  } else {
53
39
  this.lastWrittenByte = 0;
54
40
  }
55
-
56
41
  this.buffer = data;
57
42
  this.length = byteLength;
58
43
  this.byteLength = byteLength;
@@ -64,7 +49,8 @@ export class IOBuffer {
64
49
  this._marks = [];
65
50
  }
66
51
 
67
- available(byteLength = 1) {
52
+ available() {
53
+ let byteLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
68
54
  return this.offset + byteLength <= this.length;
69
55
  }
70
56
 
@@ -86,7 +72,8 @@ export class IOBuffer {
86
72
  return this;
87
73
  }
88
74
 
89
- skip(n = 1) {
75
+ skip() {
76
+ let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
90
77
  this.offset += n;
91
78
  return this;
92
79
  }
@@ -108,17 +95,14 @@ export class IOBuffer {
108
95
 
109
96
  pushMark() {
110
97
  this._marks.push(this.offset);
111
-
112
98
  return this;
113
99
  }
114
100
 
115
101
  popMark() {
116
102
  const offset = this._marks.pop();
117
-
118
103
  if (offset === undefined) {
119
104
  throw new Error('Mark stack empty');
120
105
  }
121
-
122
106
  this.seek(offset);
123
107
  return this;
124
108
  }
@@ -128,7 +112,8 @@ export class IOBuffer {
128
112
  return this;
129
113
  }
130
114
 
131
- ensureAvailable(byteLength = 1) {
115
+ ensureAvailable() {
116
+ let byteLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
132
117
  if (!this.available(byteLength)) {
133
118
  const lengthNeeded = this.offset + byteLength;
134
119
  const newLength = lengthNeeded * 2;
@@ -138,7 +123,6 @@ export class IOBuffer {
138
123
  this.length = this.byteLength = newLength;
139
124
  this._data = new DataView(this.buffer);
140
125
  }
141
-
142
126
  return this;
143
127
  }
144
128
 
@@ -158,54 +142,47 @@ export class IOBuffer {
158
142
  return this.readUint8();
159
143
  }
160
144
 
161
- readBytes(n = 1) {
145
+ readBytes() {
146
+ let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
162
147
  const bytes = new Uint8Array(n);
163
-
164
148
  for (let i = 0; i < n; i++) {
165
149
  bytes[i] = this.readByte();
166
150
  }
167
-
168
151
  return bytes;
169
152
  }
170
153
 
171
154
  readInt16() {
172
155
  const value = this._data.getInt16(this.offset, this.littleEndian);
173
-
174
156
  this.offset += 2;
175
157
  return value;
176
158
  }
177
159
 
178
160
  readUint16() {
179
161
  const value = this._data.getUint16(this.offset, this.littleEndian);
180
-
181
162
  this.offset += 2;
182
163
  return value;
183
164
  }
184
165
 
185
166
  readInt32() {
186
167
  const value = this._data.getInt32(this.offset, this.littleEndian);
187
-
188
168
  this.offset += 4;
189
169
  return value;
190
170
  }
191
171
 
192
172
  readUint32() {
193
173
  const value = this._data.getUint32(this.offset, this.littleEndian);
194
-
195
174
  this.offset += 4;
196
175
  return value;
197
176
  }
198
177
 
199
178
  readFloat32() {
200
179
  const value = this._data.getFloat32(this.offset, this.littleEndian);
201
-
202
180
  this.offset += 4;
203
181
  return value;
204
182
  }
205
183
 
206
184
  readFloat64() {
207
185
  const value = this._data.getFloat64(this.offset, this.littleEndian);
208
-
209
186
  this.offset += 8;
210
187
  return value;
211
188
  }
@@ -214,17 +191,17 @@ export class IOBuffer {
214
191
  return String.fromCharCode(this.readInt8());
215
192
  }
216
193
 
217
- readChars(n = 1) {
194
+ readChars() {
195
+ let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
218
196
  let result = '';
219
-
220
197
  for (let i = 0; i < n; i++) {
221
198
  result += this.readChar();
222
199
  }
223
-
224
200
  return result;
225
201
  }
226
202
 
227
- readUtf8(n = 1) {
203
+ readUtf8() {
204
+ let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
228
205
  return this.textDecoder.decode(this.readBytes(n));
229
206
  }
230
207
 
@@ -235,21 +212,15 @@ export class IOBuffer {
235
212
 
236
213
  writeInt8(value) {
237
214
  this.ensureAvailable(1);
238
-
239
215
  this._data.setInt8(this.offset++, value);
240
-
241
216
  this._updateLastWrittenByte();
242
-
243
217
  return this;
244
218
  }
245
219
 
246
220
  writeUint8(value) {
247
221
  this.ensureAvailable(1);
248
-
249
222
  this._data.setUint8(this.offset++, value);
250
-
251
223
  this._updateLastWrittenByte();
252
-
253
224
  return this;
254
225
  }
255
226
 
@@ -259,85 +230,58 @@ export class IOBuffer {
259
230
 
260
231
  writeBytes(bytes) {
261
232
  this.ensureAvailable(bytes.length);
262
-
263
233
  for (let i = 0; i < bytes.length; i++) {
264
234
  this._data.setUint8(this.offset++, bytes[i]);
265
235
  }
266
-
267
236
  this._updateLastWrittenByte();
268
-
269
237
  return this;
270
238
  }
271
239
 
272
240
  writeInt16(value) {
273
241
  this.ensureAvailable(2);
274
-
275
242
  this._data.setInt16(this.offset, value, this.littleEndian);
276
-
277
243
  this.offset += 2;
278
-
279
244
  this._updateLastWrittenByte();
280
-
281
245
  return this;
282
246
  }
283
247
 
284
248
  writeUint16(value) {
285
249
  this.ensureAvailable(2);
286
-
287
250
  this._data.setUint16(this.offset, value, this.littleEndian);
288
-
289
251
  this.offset += 2;
290
-
291
252
  this._updateLastWrittenByte();
292
-
293
253
  return this;
294
254
  }
295
255
 
296
256
  writeInt32(value) {
297
257
  this.ensureAvailable(4);
298
-
299
258
  this._data.setInt32(this.offset, value, this.littleEndian);
300
-
301
259
  this.offset += 4;
302
-
303
260
  this._updateLastWrittenByte();
304
-
305
261
  return this;
306
262
  }
307
263
 
308
264
  writeUint32(value) {
309
265
  this.ensureAvailable(4);
310
-
311
266
  this._data.setUint32(this.offset, value, this.littleEndian);
312
-
313
267
  this.offset += 4;
314
-
315
268
  this._updateLastWrittenByte();
316
-
317
269
  return this;
318
270
  }
319
271
 
320
272
  writeFloat32(value) {
321
273
  this.ensureAvailable(4);
322
-
323
274
  this._data.setFloat32(this.offset, value, this.littleEndian);
324
-
325
275
  this.offset += 4;
326
-
327
276
  this._updateLastWrittenByte();
328
-
329
277
  return this;
330
278
  }
331
279
 
332
280
  writeFloat64(value) {
333
281
  this.ensureAvailable(8);
334
-
335
282
  this._data.setFloat64(this.offset, value, this.littleEndian);
336
-
337
283
  this.offset += 8;
338
-
339
284
  this._updateLastWrittenByte();
340
-
341
285
  return this;
342
286
  }
343
287
 
@@ -349,7 +293,6 @@ export class IOBuffer {
349
293
  for (let i = 0; i < str.length; i++) {
350
294
  this.writeUint8(str.charCodeAt(i));
351
295
  }
352
-
353
296
  return this;
354
297
  }
355
298
 
@@ -367,6 +310,5 @@ export class IOBuffer {
367
310
  this.lastWrittenByte = this.offset;
368
311
  }
369
312
  }
370
-
371
313
  }
372
314
  //# sourceMappingURL=iobuffer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/iobuffer/iobuffer.ts"],"names":["DEFAULT_BYTE_LENGTH","IOBuffer","constructor","data","options","TextDecoder","TextEncoder","dataIsGiven","ArrayBuffer","lastWrittenByte","byteLength","offset","dvOffset","isView","buffer","byteOffset","length","littleEndian","_data","DataView","_mark","_marks","available","isLittleEndian","setLittleEndian","isBigEndian","setBigEndian","skip","n","seek","mark","reset","pushMark","push","popMark","pop","undefined","Error","rewind","ensureAvailable","lengthNeeded","newLength","newArray","Uint8Array","set","readBoolean","readUint8","readInt8","getInt8","getUint8","readByte","readBytes","bytes","i","readInt16","value","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readFloat32","getFloat32","readFloat64","getFloat64","readChar","String","fromCharCode","readChars","result","readUtf8","textDecoder","decode","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeChar","str","charCodeAt","writeChars","writeUtf8","textEncoder","encode","toArray"],"mappings":";AAAA,MAAMA,mBAAmB,GAAG,OAAO,CAAnC;AAWA,OAAO,MAAMC,QAAN,CAAe;AA4CbC,EAAAA,WAAW,CAACC,IAAe,GAAGH,mBAAnB,EAAwCI,OAAwB,GAAG,EAAnE,EAAuE;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,yCAXnE,IAAIC,WAAJ,EAWmE;;AAAA,yCAVnE,IAAIC,WAAJ,EAUmE;;AACvF,QAAIC,WAAW,GAAG,KAAlB;;AACA,QAAI,OAAOJ,IAAP,KAAgB,QAApB,EAA8B;AAC5BA,MAAAA,IAAI,GAAG,IAAIK,WAAJ,CAAgBL,IAAhB,CAAP;AACD,KAFD,MAEO;AACLI,MAAAA,WAAW,GAAG,IAAd;AACA,WAAKE,eAAL,GAAuBN,IAAI,CAACO,UAA5B;AACD;;AAED,UAAMC,MAAM,GAAGP,OAAO,CAACO,MAAR,GAAiBP,OAAO,CAACO,MAAR,KAAmB,CAApC,GAAwC,CAAvD;AACA,UAAMD,UAAU,GAAGP,IAAI,CAACO,UAAL,GAAkBC,MAArC;AACA,QAAIC,QAAQ,GAAGD,MAAf;;AACA,QAAIH,WAAW,CAACK,MAAZ,CAAmBV,IAAnB,KAA4BA,IAAI,YAAYF,QAAhD,EAA0D;AACxD,UAAIE,IAAI,CAACO,UAAL,KAAoBP,IAAI,CAACW,MAAL,CAAYJ,UAApC,EAAgD;AAC9CE,QAAAA,QAAQ,GAAGT,IAAI,CAACY,UAAL,GAAkBJ,MAA7B;AACD;;AACDR,MAAAA,IAAI,GAAGA,IAAI,CAACW,MAAZ;AACD;;AACD,QAAIP,WAAJ,EAAiB;AACf,WAAKE,eAAL,GAAuBC,UAAvB;AACD,KAFD,MAEO;AACL,WAAKD,eAAL,GAAuB,CAAvB;AACD;;AACD,SAAKK,MAAL,GAAcX,IAAd;AACA,SAAKa,MAAL,GAAcN,UAAd;AACA,SAAKA,UAAL,GAAkBA,UAAlB;AACA,SAAKK,UAAL,GAAkBH,QAAlB;AACA,SAAKD,MAAL,GAAc,CAAd;AACA,SAAKM,YAAL,GAAoB,IAApB;AACA,SAAKC,KAAL,GAAa,IAAIC,QAAJ,CAAa,KAAKL,MAAlB,EAA0BF,QAA1B,EAAoCF,UAApC,CAAb;AACA,SAAKU,KAAL,GAAa,CAAb;AACA,SAAKC,MAAL,GAAc,EAAd;AACD;;AAQMC,EAAAA,SAAS,CAACZ,UAAU,GAAG,CAAd,EAA0B;AACxC,WAAO,KAAKC,MAAL,GAAcD,UAAd,IAA4B,KAAKM,MAAxC;AACD;;AAOMO,EAAAA,cAAc,GAAY;AAC/B,WAAO,KAAKN,YAAZ;AACD;;AAKMO,EAAAA,eAAe,GAAS;AAC7B,SAAKP,YAAL,GAAoB,IAApB;AACA,WAAO,IAAP;AACD;;AAMMQ,EAAAA,WAAW,GAAY;AAC5B,WAAO,CAAC,KAAKR,YAAb;AACD;;AAKMS,EAAAA,YAAY,GAAS;AAC1B,SAAKT,YAAL,GAAoB,KAApB;AACA,WAAO,IAAP;AACD;;AAMMU,EAAAA,IAAI,CAACC,CAAC,GAAG,CAAL,EAAc;AACvB,SAAKjB,MAAL,IAAeiB,CAAf;AACA,WAAO,IAAP;AACD;;AAMMC,EAAAA,IAAI,CAAClB,MAAD,EAAuB;AAChC,SAAKA,MAAL,GAAcA,MAAd;AACA,WAAO,IAAP;AACD;;AAMMmB,EAAAA,IAAI,GAAS;AAClB,SAAKV,KAAL,GAAa,KAAKT,MAAlB;AACA,WAAO,IAAP;AACD;;AAMMoB,EAAAA,KAAK,GAAS;AACnB,SAAKpB,MAAL,GAAc,KAAKS,KAAnB;AACA,WAAO,IAAP;AACD;;AAMMY,EAAAA,QAAQ,GAAS;AACtB,SAAKX,MAAL,CAAYY,IAAZ,CAAiB,KAAKtB,MAAtB;;AACA,WAAO,IAAP;AACD;;AAOMuB,EAAAA,OAAO,GAAS;AACrB,UAAMvB,MAAM,GAAG,KAAKU,MAAL,CAAYc,GAAZ,EAAf;;AACA,QAAIxB,MAAM,KAAKyB,SAAf,EAA0B;AACxB,YAAM,IAAIC,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,SAAKR,IAAL,CAAUlB,MAAV;AACA,WAAO,IAAP;AACD;;AAKM2B,EAAAA,MAAM,GAAS;AACpB,SAAK3B,MAAL,GAAc,CAAd;AACA,WAAO,IAAP;AACD;;AASM4B,EAAAA,eAAe,CAAC7B,UAAU,GAAG,CAAd,EAAuB;AAC3C,QAAI,CAAC,KAAKY,SAAL,CAAeZ,UAAf,CAAL,EAAiC;AAC/B,YAAM8B,YAAY,GAAG,KAAK7B,MAAL,GAAcD,UAAnC;AACA,YAAM+B,SAAS,GAAGD,YAAY,GAAG,CAAjC;AACA,YAAME,QAAQ,GAAG,IAAIC,UAAJ,CAAeF,SAAf,CAAjB;AACAC,MAAAA,QAAQ,CAACE,GAAT,CAAa,IAAID,UAAJ,CAAe,KAAK7B,MAApB,CAAb;AACA,WAAKA,MAAL,GAAc4B,QAAQ,CAAC5B,MAAvB;AACA,WAAKE,MAAL,GAAc,KAAKN,UAAL,GAAkB+B,SAAhC;AACA,WAAKvB,KAAL,GAAa,IAAIC,QAAJ,CAAa,KAAKL,MAAlB,CAAb;AACD;;AACD,WAAO,IAAP;AACD;;AAMM+B,EAAAA,WAAW,GAAY;AAC5B,WAAO,KAAKC,SAAL,OAAqB,CAA5B;AACD;;AAKMC,EAAAA,QAAQ,GAAW;AACxB,WAAO,KAAK7B,KAAL,CAAW8B,OAAX,CAAmB,KAAKrC,MAAL,EAAnB,CAAP;AACD;;AAKMmC,EAAAA,SAAS,GAAW;AACzB,WAAO,KAAK5B,KAAL,CAAW+B,QAAX,CAAoB,KAAKtC,MAAL,EAApB,CAAP;AACD;;AAKMuC,EAAAA,QAAQ,GAAW;AACxB,WAAO,KAAKJ,SAAL,EAAP;AACD;;AAKMK,EAAAA,SAAS,CAACvB,CAAC,GAAG,CAAL,EAAoB;AAClC,UAAMwB,KAAK,GAAG,IAAIT,UAAJ,CAAef,CAAf,CAAd;;AACA,SAAK,IAAIyB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGzB,CAApB,EAAuByB,CAAC,EAAxB,EAA4B;AAC1BD,MAAAA,KAAK,CAACC,CAAD,CAAL,GAAW,KAAKH,QAAL,EAAX;AACD;;AACD,WAAOE,KAAP;AACD;;AAKME,EAAAA,SAAS,GAAW;AACzB,UAAMC,KAAK,GAAG,KAAKrC,KAAL,CAAWsC,QAAX,CAAoB,KAAK7C,MAAzB,EAAiC,KAAKM,YAAtC,CAAd;;AACA,SAAKN,MAAL,IAAe,CAAf;AACA,WAAO4C,KAAP;AACD;;AAKME,EAAAA,UAAU,GAAW;AAC1B,UAAMF,KAAK,GAAG,KAAKrC,KAAL,CAAWwC,SAAX,CAAqB,KAAK/C,MAA1B,EAAkC,KAAKM,YAAvC,CAAd;;AACA,SAAKN,MAAL,IAAe,CAAf;AACA,WAAO4C,KAAP;AACD;;AAKMI,EAAAA,SAAS,GAAW;AACzB,UAAMJ,KAAK,GAAG,KAAKrC,KAAL,CAAW0C,QAAX,CAAoB,KAAKjD,MAAzB,EAAiC,KAAKM,YAAtC,CAAd;;AACA,SAAKN,MAAL,IAAe,CAAf;AACA,WAAO4C,KAAP;AACD;;AAKMM,EAAAA,UAAU,GAAW;AAC1B,UAAMN,KAAK,GAAG,KAAKrC,KAAL,CAAW4C,SAAX,CAAqB,KAAKnD,MAA1B,EAAkC,KAAKM,YAAvC,CAAd;;AACA,SAAKN,MAAL,IAAe,CAAf;AACA,WAAO4C,KAAP;AACD;;AAKMQ,EAAAA,WAAW,GAAW;AAC3B,UAAMR,KAAK,GAAG,KAAKrC,KAAL,CAAW8C,UAAX,CAAsB,KAAKrD,MAA3B,EAAmC,KAAKM,YAAxC,CAAd;;AACA,SAAKN,MAAL,IAAe,CAAf;AACA,WAAO4C,KAAP;AACD;;AAKMU,EAAAA,WAAW,GAAW;AAC3B,UAAMV,KAAK,GAAG,KAAKrC,KAAL,CAAWgD,UAAX,CAAsB,KAAKvD,MAA3B,EAAmC,KAAKM,YAAxC,CAAd;;AACA,SAAKN,MAAL,IAAe,CAAf;AACA,WAAO4C,KAAP;AACD;;AAKMY,EAAAA,QAAQ,GAAW;AACxB,WAAOC,MAAM,CAACC,YAAP,CAAoB,KAAKtB,QAAL,EAApB,CAAP;AACD;;AAKMuB,EAAAA,SAAS,CAAC1C,CAAC,GAAG,CAAL,EAAgB;AAC9B,QAAI2C,MAAM,GAAG,EAAb;;AACA,SAAK,IAAIlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGzB,CAApB,EAAuByB,CAAC,EAAxB,EAA4B;AAC1BkB,MAAAA,MAAM,IAAI,KAAKJ,QAAL,EAAV;AACD;;AACD,WAAOI,MAAP;AACD;;AAMMC,EAAAA,QAAQ,CAAC5C,CAAC,GAAG,CAAL,EAAgB;AAC7B,WAAO,KAAK6C,WAAL,CAAiBC,MAAjB,CAAwB,KAAKvB,SAAL,CAAevB,CAAf,CAAxB,CAAP;AACD;;AAMM+C,EAAAA,YAAY,CAACpB,KAAD,EAAuB;AACxC,SAAKqB,UAAL,CAAgBrB,KAAK,GAAG,IAAH,GAAU,IAA/B;AACA,WAAO,IAAP;AACD;;AAKMsB,EAAAA,SAAS,CAACtB,KAAD,EAAsB;AACpC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAW4D,OAAX,CAAmB,KAAKnE,MAAL,EAAnB,EAAkC4C,KAAlC;;AACA,SAAKwB,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMH,EAAAA,UAAU,CAACrB,KAAD,EAAsB;AACrC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAW8D,QAAX,CAAoB,KAAKrE,MAAL,EAApB,EAAmC4C,KAAnC;;AACA,SAAKwB,sBAAL;;AACA,WAAO,IAAP;AACD;;AAKME,EAAAA,SAAS,CAAC1B,KAAD,EAAsB;AACpC,WAAO,KAAKqB,UAAL,CAAgBrB,KAAhB,CAAP;AACD;;AAMM2B,EAAAA,UAAU,CAAC9B,KAAD,EAAiC;AAChD,SAAKb,eAAL,CAAqBa,KAAK,CAACpC,MAA3B;;AACA,SAAK,IAAIqC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,KAAK,CAACpC,MAA1B,EAAkCqC,CAAC,EAAnC,EAAuC;AACrC,WAAKnC,KAAL,CAAW8D,QAAX,CAAoB,KAAKrE,MAAL,EAApB,EAAmCyC,KAAK,CAACC,CAAD,CAAxC;AACD;;AACD,SAAK0B,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMI,EAAAA,UAAU,CAAC5B,KAAD,EAAsB;AACrC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAWkE,QAAX,CAAoB,KAAKzE,MAAzB,EAAiC4C,KAAjC,EAAwC,KAAKtC,YAA7C;;AACA,SAAKN,MAAL,IAAe,CAAf;;AACA,SAAKoE,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMM,EAAAA,WAAW,CAAC9B,KAAD,EAAsB;AACtC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAWoE,SAAX,CAAqB,KAAK3E,MAA1B,EAAkC4C,KAAlC,EAAyC,KAAKtC,YAA9C;;AACA,SAAKN,MAAL,IAAe,CAAf;;AACA,SAAKoE,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMQ,EAAAA,UAAU,CAAChC,KAAD,EAAsB;AACrC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAWsE,QAAX,CAAoB,KAAK7E,MAAzB,EAAiC4C,KAAjC,EAAwC,KAAKtC,YAA7C;;AACA,SAAKN,MAAL,IAAe,CAAf;;AACA,SAAKoE,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMU,EAAAA,WAAW,CAAClC,KAAD,EAAsB;AACtC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAWwE,SAAX,CAAqB,KAAK/E,MAA1B,EAAkC4C,KAAlC,EAAyC,KAAKtC,YAA9C;;AACA,SAAKN,MAAL,IAAe,CAAf;;AACA,SAAKoE,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMY,EAAAA,YAAY,CAACpC,KAAD,EAAsB;AACvC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAW0E,UAAX,CAAsB,KAAKjF,MAA3B,EAAmC4C,KAAnC,EAA0C,KAAKtC,YAA/C;;AACA,SAAKN,MAAL,IAAe,CAAf;;AACA,SAAKoE,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMc,EAAAA,YAAY,CAACtC,KAAD,EAAsB;AACvC,SAAKhB,eAAL,CAAqB,CAArB;;AACA,SAAKrB,KAAL,CAAW4E,UAAX,CAAsB,KAAKnF,MAA3B,EAAmC4C,KAAnC,EAA0C,KAAKtC,YAA/C;;AACA,SAAKN,MAAL,IAAe,CAAf;;AACA,SAAKoE,sBAAL;;AACA,WAAO,IAAP;AACD;;AAMMgB,EAAAA,SAAS,CAACC,GAAD,EAAoB;AAClC,WAAO,KAAKpB,UAAL,CAAgBoB,GAAG,CAACC,UAAJ,CAAe,CAAf,CAAhB,CAAP;AACD;;AAMMC,EAAAA,UAAU,CAACF,GAAD,EAAoB;AACnC,SAAK,IAAI3C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2C,GAAG,CAAChF,MAAxB,EAAgCqC,CAAC,EAAjC,EAAqC;AACnC,WAAKuB,UAAL,CAAgBoB,GAAG,CAACC,UAAJ,CAAe5C,CAAf,CAAhB;AACD;;AACD,WAAO,IAAP;AACD;;AAMM8C,EAAAA,SAAS,CAACH,GAAD,EAAoB;AAClC,UAAM5C,KAAK,GAAG,KAAKgD,WAAL,CAAiBC,MAAjB,CAAwBL,GAAxB,CAAd;AACA,WAAO,KAAKd,UAAL,CAAgB9B,KAAhB,CAAP;AACD;;AAOMkD,EAAAA,OAAO,GAAe;AAC3B,WAAO,IAAI3D,UAAJ,CAAe,KAAK7B,MAApB,EAA4B,KAAKC,UAAjC,EAA6C,KAAKN,eAAlD,CAAP;AACD;;AAMOsE,EAAAA,sBAAsB,GAAS;AACrC,QAAI,KAAKpE,MAAL,GAAc,KAAKF,eAAvB,EAAwC;AACtC,WAAKA,eAAL,GAAuB,KAAKE,MAA5B;AACD;AACF;;AA/emB","sourcesContent":["const DEFAULT_BYTE_LENGTH = 1024 * 8;\n\ntype InputData = number | ArrayBufferLike | ArrayBufferView | IOBuffer | Buffer;\n\ninterface IOBufferOptions {\n /**\n * Ignore the first n bytes of the ArrayBuffer.\n */\n offset?: number;\n}\n\nexport class IOBuffer {\n /**\n * Reference to the internal ArrayBuffer object.\n */\n public buffer: ArrayBufferLike;\n\n /**\n * Byte length of the internal ArrayBuffer.\n */\n public byteLength: number;\n\n /**\n * Byte offset of the internal ArrayBuffer.\n */\n public byteOffset: number;\n\n /**\n * Byte length of the internal ArrayBuffer.\n */\n public length: number;\n\n /**\n * The current offset of the buffer's pointer.\n */\n public offset: number;\n\n private lastWrittenByte: number;\n private littleEndian: boolean;\n\n private _data: DataView;\n private _mark: number;\n private _marks: number[];\n\n private textDecoder = new TextDecoder();\n private textEncoder = new TextEncoder();\n\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 public constructor(data: InputData = DEFAULT_BYTE_LENGTH, options: IOBufferOptions = {}) {\n let dataIsGiven = false;\n if (typeof data === 'number') {\n data = new ArrayBuffer(data);\n } else {\n dataIsGiven = true;\n this.lastWrittenByte = data.byteLength;\n }\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 } 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 /**\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 public available(byteLength = 1): boolean {\n return this.offset + byteLength <= this.length;\n }\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 public isLittleEndian(): boolean {\n return this.littleEndian;\n }\n\n /**\n * Set little-endian mode for reading and writing multi-byte values.\n */\n public setLittleEndian(): this {\n this.littleEndian = true;\n return this;\n }\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 public isBigEndian(): boolean {\n return !this.littleEndian;\n }\n\n /**\n * Switches to big-endian mode for reading and writing multi-byte values.\n */\n public setBigEndian(): this {\n this.littleEndian = false;\n return this;\n }\n\n /**\n * Move the pointer n bytes forward.\n * @param n - Number of bytes to skip.\n */\n public skip(n = 1): this {\n this.offset += n;\n return this;\n }\n\n /**\n * Move the pointer to the given offset.\n * @param offset\n */\n public seek(offset: number): this {\n this.offset = offset;\n return this;\n }\n\n /**\n * Store the current pointer offset.\n * @see {@link IOBuffer#reset}\n */\n public mark(): this {\n this._mark = this.offset;\n return this;\n }\n\n /**\n * Move the pointer back to the last pointer offset set by mark.\n * @see {@link IOBuffer#mark}\n */\n public reset(): this {\n this.offset = this._mark;\n return this;\n }\n\n /**\n * Push the current pointer offset to the mark stack.\n * @see {@link IOBuffer#popMark}\n */\n public pushMark(): this {\n this._marks.push(this.offset);\n return this;\n }\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 public popMark(): this {\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 /**\n * Move the pointer offset back to 0.\n */\n public rewind(): this {\n this.offset = 0;\n return this;\n }\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 public ensureAvailable(byteLength = 1): this {\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 /**\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 public readBoolean(): boolean {\n return this.readUint8() !== 0;\n }\n\n /**\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\n */\n public readInt8(): number {\n return this._data.getInt8(this.offset++);\n }\n\n /**\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n */\n public readUint8(): number {\n return this._data.getUint8(this.offset++);\n }\n\n /**\n * Alias for {@link IOBuffer#readUint8}.\n */\n public readByte(): number {\n return this.readUint8();\n }\n\n /**\n * Read `n` bytes and move pointer forward by `n` bytes.\n */\n public readBytes(n = 1): Uint8Array {\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 /**\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n */\n public readInt16(): number {\n const value = this._data.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n\n /**\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n */\n public readUint16(): number {\n const value = this._data.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n\n /**\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n */\n public readInt32(): number {\n const value = this._data.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n\n /**\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n */\n public readUint32(): number {\n const value = this._data.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n\n /**\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\n */\n public readFloat32(): number {\n const value = this._data.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n\n /**\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\n */\n public readFloat64(): number {\n const value = this._data.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n\n /**\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n */\n public readChar(): string {\n return String.fromCharCode(this.readInt8());\n }\n\n /**\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n */\n public readChars(n = 1): string {\n let result = '';\n for (let i = 0; i < n; i++) {\n result += this.readChar();\n }\n return result;\n }\n\n /**\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n * forward by `n` bytes.\n */\n public readUtf8(n = 1): string {\n return this.textDecoder.decode(this.readBytes(n));\n }\n\n /**\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n * forward by 1 byte.\n */\n public writeBoolean(value: unknown): this {\n this.writeUint8(value ? 0xff : 0x00);\n return this;\n }\n\n /**\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n */\n public writeInt8(value: number): this {\n this.ensureAvailable(1);\n this._data.setInt8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n\n /**\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n * byte.\n */\n public writeUint8(value: number): this {\n this.ensureAvailable(1);\n this._data.setUint8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n\n /**\n * An alias for {@link IOBuffer#writeUint8}.\n */\n public writeByte(value: number): this {\n return this.writeUint8(value);\n }\n\n /**\n * Write all elements of `bytes` as uint8 values and move pointer forward by\n * `bytes.length` bytes.\n */\n public writeBytes(bytes: ArrayLike<number>): this {\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 /**\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\n * bytes.\n */\n public writeInt16(value: number): this {\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 /**\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n * bytes.\n */\n public writeUint16(value: number): this {\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 /**\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\n * bytes.\n */\n public writeInt32(value: number): this {\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 /**\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n * bytes.\n */\n public writeUint32(value: number): this {\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 /**\n * Write `value` as a 32-bit floating number and move pointer forward by 4\n * bytes.\n */\n public writeFloat32(value: number): this {\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 /**\n * Write `value` as a 64-bit floating number and move pointer forward by 8\n * bytes.\n */\n public writeFloat64(value: number): this {\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 /**\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 public writeChar(str: string): this {\n return this.writeUint8(str.charCodeAt(0));\n }\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 public writeChars(str: string): this {\n for (let i = 0; i < str.length; i++) {\n this.writeUint8(str.charCodeAt(i));\n }\n return this;\n }\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 public writeUtf8(str: string): this {\n const bytes = this.textEncoder.encode(str);\n return this.writeBytes(bytes);\n }\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 public toArray(): Uint8Array {\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n }\n\n /**\n * Update the last written byte offset\n * @private\n */\n private _updateLastWrittenByte(): void {\n if (this.offset > this.lastWrittenByte) {\n this.lastWrittenByte = this.offset;\n }\n }\n}\n"],"file":"iobuffer.js"}
1
+ {"version":3,"file":"iobuffer.js","names":["DEFAULT_BYTE_LENGTH","IOBuffer","constructor","data","options","TextDecoder","TextEncoder","dataIsGiven","ArrayBuffer","lastWrittenByte","byteLength","offset","dvOffset","isView","buffer","byteOffset","length","littleEndian","_data","DataView","_mark","_marks","available","isLittleEndian","setLittleEndian","isBigEndian","setBigEndian","skip","n","seek","mark","reset","pushMark","push","popMark","pop","undefined","Error","rewind","ensureAvailable","lengthNeeded","newLength","newArray","Uint8Array","set","readBoolean","readUint8","readInt8","getInt8","getUint8","readByte","readBytes","bytes","i","readInt16","value","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readFloat32","getFloat32","readFloat64","getFloat64","readChar","String","fromCharCode","readChars","result","readUtf8","textDecoder","decode","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeChar","str","charCodeAt","writeChars","writeUtf8","textEncoder","encode","toArray"],"sources":["../../../src/iobuffer/iobuffer.ts"],"sourcesContent":["const DEFAULT_BYTE_LENGTH = 1024 * 8;\n\ntype InputData = number | ArrayBufferLike | ArrayBufferView | IOBuffer | Buffer;\n\ninterface IOBufferOptions {\n /**\n * Ignore the first n bytes of the ArrayBuffer.\n */\n offset?: number;\n}\n\nexport class IOBuffer {\n /**\n * Reference to the internal ArrayBuffer object.\n */\n public buffer: ArrayBufferLike;\n\n /**\n * Byte length of the internal ArrayBuffer.\n */\n public byteLength: number;\n\n /**\n * Byte offset of the internal ArrayBuffer.\n */\n public byteOffset: number;\n\n /**\n * Byte length of the internal ArrayBuffer.\n */\n public length: number;\n\n /**\n * The current offset of the buffer's pointer.\n */\n public offset: number;\n\n private lastWrittenByte: number;\n private littleEndian: boolean;\n\n private _data: DataView;\n private _mark: number;\n private _marks: number[];\n\n private textDecoder = new TextDecoder();\n private textEncoder = new TextEncoder();\n\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 public constructor(data: InputData = DEFAULT_BYTE_LENGTH, options: IOBufferOptions = {}) {\n let dataIsGiven = false;\n if (typeof data === 'number') {\n data = new ArrayBuffer(data);\n } else {\n dataIsGiven = true;\n this.lastWrittenByte = data.byteLength;\n }\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 } 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 /**\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 public available(byteLength = 1): boolean {\n return this.offset + byteLength <= this.length;\n }\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 public isLittleEndian(): boolean {\n return this.littleEndian;\n }\n\n /**\n * Set little-endian mode for reading and writing multi-byte values.\n */\n public setLittleEndian(): this {\n this.littleEndian = true;\n return this;\n }\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 public isBigEndian(): boolean {\n return !this.littleEndian;\n }\n\n /**\n * Switches to big-endian mode for reading and writing multi-byte values.\n */\n public setBigEndian(): this {\n this.littleEndian = false;\n return this;\n }\n\n /**\n * Move the pointer n bytes forward.\n * @param n - Number of bytes to skip.\n */\n public skip(n = 1): this {\n this.offset += n;\n return this;\n }\n\n /**\n * Move the pointer to the given offset.\n * @param offset\n */\n public seek(offset: number): this {\n this.offset = offset;\n return this;\n }\n\n /**\n * Store the current pointer offset.\n * @see {@link IOBuffer#reset}\n */\n public mark(): this {\n this._mark = this.offset;\n return this;\n }\n\n /**\n * Move the pointer back to the last pointer offset set by mark.\n * @see {@link IOBuffer#mark}\n */\n public reset(): this {\n this.offset = this._mark;\n return this;\n }\n\n /**\n * Push the current pointer offset to the mark stack.\n * @see {@link IOBuffer#popMark}\n */\n public pushMark(): this {\n this._marks.push(this.offset);\n return this;\n }\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 public popMark(): this {\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 /**\n * Move the pointer offset back to 0.\n */\n public rewind(): this {\n this.offset = 0;\n return this;\n }\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 public ensureAvailable(byteLength = 1): this {\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 /**\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 public readBoolean(): boolean {\n return this.readUint8() !== 0;\n }\n\n /**\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\n */\n public readInt8(): number {\n return this._data.getInt8(this.offset++);\n }\n\n /**\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n */\n public readUint8(): number {\n return this._data.getUint8(this.offset++);\n }\n\n /**\n * Alias for {@link IOBuffer#readUint8}.\n */\n public readByte(): number {\n return this.readUint8();\n }\n\n /**\n * Read `n` bytes and move pointer forward by `n` bytes.\n */\n public readBytes(n = 1): Uint8Array {\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 /**\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n */\n public readInt16(): number {\n const value = this._data.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n\n /**\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n */\n public readUint16(): number {\n const value = this._data.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n\n /**\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n */\n public readInt32(): number {\n const value = this._data.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n\n /**\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n */\n public readUint32(): number {\n const value = this._data.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n\n /**\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\n */\n public readFloat32(): number {\n const value = this._data.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n\n /**\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\n */\n public readFloat64(): number {\n const value = this._data.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n\n /**\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n */\n public readChar(): string {\n return String.fromCharCode(this.readInt8());\n }\n\n /**\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n */\n public readChars(n = 1): string {\n let result = '';\n for (let i = 0; i < n; i++) {\n result += this.readChar();\n }\n return result;\n }\n\n /**\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n * forward by `n` bytes.\n */\n public readUtf8(n = 1): string {\n return this.textDecoder.decode(this.readBytes(n));\n }\n\n /**\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n * forward by 1 byte.\n */\n public writeBoolean(value: unknown): this {\n this.writeUint8(value ? 0xff : 0x00);\n return this;\n }\n\n /**\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n */\n public writeInt8(value: number): this {\n this.ensureAvailable(1);\n this._data.setInt8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n\n /**\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n * byte.\n */\n public writeUint8(value: number): this {\n this.ensureAvailable(1);\n this._data.setUint8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n\n /**\n * An alias for {@link IOBuffer#writeUint8}.\n */\n public writeByte(value: number): this {\n return this.writeUint8(value);\n }\n\n /**\n * Write all elements of `bytes` as uint8 values and move pointer forward by\n * `bytes.length` bytes.\n */\n public writeBytes(bytes: ArrayLike<number>): this {\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 /**\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\n * bytes.\n */\n public writeInt16(value: number): this {\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 /**\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n * bytes.\n */\n public writeUint16(value: number): this {\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 /**\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\n * bytes.\n */\n public writeInt32(value: number): this {\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 /**\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n * bytes.\n */\n public writeUint32(value: number): this {\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 /**\n * Write `value` as a 32-bit floating number and move pointer forward by 4\n * bytes.\n */\n public writeFloat32(value: number): this {\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 /**\n * Write `value` as a 64-bit floating number and move pointer forward by 8\n * bytes.\n */\n public writeFloat64(value: number): this {\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 /**\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 public writeChar(str: string): this {\n return this.writeUint8(str.charCodeAt(0));\n }\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 public writeChars(str: string): this {\n for (let i = 0; i < str.length; i++) {\n this.writeUint8(str.charCodeAt(i));\n }\n return this;\n }\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 public writeUtf8(str: string): this {\n const bytes = this.textEncoder.encode(str);\n return this.writeBytes(bytes);\n }\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 public toArray(): Uint8Array {\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n }\n\n /**\n * Update the last written byte offset\n * @private\n */\n private _updateLastWrittenByte(): void {\n if (this.offset > this.lastWrittenByte) {\n this.lastWrittenByte = this.offset;\n }\n }\n}\n"],"mappings":"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"}