@loaders.gl/netcdf 3.4.13 → 3.4.15

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.
@@ -6,18 +6,18 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.readName = readName;
7
7
  exports.readNetCDFHeader = readNetCDFHeader;
8
8
  var _readType = require("./read-type");
9
- var ZERO = 0;
10
- var NC_DIMENSION = 10;
11
- var NC_VARIABLE = 11;
12
- var NC_ATTRIBUTE = 12;
13
- var NC_UNLIMITED = 0;
9
+ const ZERO = 0;
10
+ const NC_DIMENSION = 10;
11
+ const NC_VARIABLE = 11;
12
+ const NC_ATTRIBUTE = 12;
13
+ const NC_UNLIMITED = 0;
14
14
  function readNetCDFHeader(buffer, version) {
15
- var recordDimensionLength = buffer.readUint32();
16
- var dimList = readDimensionsList(buffer);
17
- var attributes = readAttributesList(buffer);
18
- var variableList = readVariablesList(buffer, dimList.recordId, version);
19
- var header = {
20
- version: version,
15
+ const recordDimensionLength = buffer.readUint32();
16
+ const dimList = readDimensionsList(buffer);
17
+ const attributes = readAttributesList(buffer);
18
+ const variableList = readVariablesList(buffer, dimList.recordId, version);
19
+ const header = {
20
+ version,
21
21
  recordDimension: {
22
22
  length: recordDimensionLength,
23
23
  id: dimList.recordId,
@@ -26,12 +26,12 @@ function readNetCDFHeader(buffer, version) {
26
26
  },
27
27
  dimensions: dimList.dimensions,
28
28
  variables: variableList.variables,
29
- attributes: attributes
29
+ attributes
30
30
  };
31
31
  return header;
32
32
  }
33
33
  function readDimensionsList(buffer) {
34
- var dimList = buffer.readUint32();
34
+ const dimList = buffer.readUint32();
35
35
  if (dimList === ZERO) {
36
36
  if (buffer.readUint32() !== ZERO) {
37
37
  throw new Error('NetCDF: wrong empty tag for list of dimensions');
@@ -45,30 +45,30 @@ function readDimensionsList(buffer) {
45
45
  if (dimList !== NC_DIMENSION) {
46
46
  throw new Error('NetCDF: wrong tag for list of dimensions');
47
47
  }
48
- var dimensionSize = buffer.readUint32();
49
- var dimensions = new Array(dimensionSize);
50
- var recordId;
51
- var recordName;
52
- for (var dim = 0; dim < dimensionSize; dim++) {
53
- var name = readName(buffer);
54
- var size = buffer.readUint32();
48
+ const dimensionSize = buffer.readUint32();
49
+ const dimensions = new Array(dimensionSize);
50
+ let recordId;
51
+ let recordName;
52
+ for (let dim = 0; dim < dimensionSize; dim++) {
53
+ const name = readName(buffer);
54
+ const size = buffer.readUint32();
55
55
  if (size === NC_UNLIMITED) {
56
56
  recordId = dim;
57
57
  recordName = name;
58
58
  }
59
59
  dimensions[dim] = {
60
- name: name,
61
- size: size
60
+ name,
61
+ size
62
62
  };
63
63
  }
64
64
  return {
65
- dimensions: dimensions,
66
- recordId: recordId,
67
- recordName: recordName
65
+ dimensions,
66
+ recordId,
67
+ recordName
68
68
  };
69
69
  }
70
70
  function readAttributesList(buffer) {
71
- var gAttList = buffer.readUint32();
71
+ const gAttList = buffer.readUint32();
72
72
  if (gAttList === ZERO) {
73
73
  if (buffer.readUint32() !== ZERO) {
74
74
  throw new Error('NetCDF: wrong empty tag for list of attributes');
@@ -78,85 +78,85 @@ function readAttributesList(buffer) {
78
78
  if (gAttList !== NC_ATTRIBUTE) {
79
79
  throw new Error('NetCDF: wrong tag for list of attributes');
80
80
  }
81
- var attributeSize = buffer.readUint32();
82
- var attributes = new Array(attributeSize);
83
- for (var gAtt = 0; gAtt < attributeSize; gAtt++) {
84
- var name = readName(buffer);
85
- var type = buffer.readUint32();
81
+ const attributeSize = buffer.readUint32();
82
+ const attributes = new Array(attributeSize);
83
+ for (let gAtt = 0; gAtt < attributeSize; gAtt++) {
84
+ const name = readName(buffer);
85
+ const type = buffer.readUint32();
86
86
  if (type < 1 || type > 6) {
87
87
  throw new Error("NetCDF: non valid type ".concat(type));
88
88
  }
89
- var size = buffer.readUint32();
90
- var value = (0, _readType.readType)(buffer, type, size);
89
+ const size = buffer.readUint32();
90
+ const value = (0, _readType.readType)(buffer, type, size);
91
91
  padding(buffer);
92
92
  attributes[gAtt] = {
93
- name: name,
93
+ name,
94
94
  type: (0, _readType.num2str)(type),
95
- value: value
95
+ value
96
96
  };
97
97
  }
98
98
  return attributes;
99
99
  }
100
100
  function readVariablesList(buffer, recordId, version) {
101
- var varList = buffer.readUint32();
102
- var recordStep = 0;
101
+ const varList = buffer.readUint32();
102
+ let recordStep = 0;
103
103
  if (varList === ZERO) {
104
104
  if (buffer.readUint32() !== ZERO) {
105
105
  throw new Error('NetCDF: wrong empty tag for list of variables');
106
106
  }
107
107
  return {
108
- recordStep: recordStep,
108
+ recordStep,
109
109
  variables: []
110
110
  };
111
111
  }
112
112
  if (varList !== NC_VARIABLE) {
113
113
  throw new Error('NetCDF: wrong tag for list of variables');
114
114
  }
115
- var variableSize = buffer.readUint32();
116
- var variables = new Array(variableSize);
117
- for (var v = 0; v < variableSize; v++) {
118
- var name = readName(buffer);
119
- var dimensionality = buffer.readUint32();
120
- var dimensionsIds = new Array(dimensionality);
121
- for (var dim = 0; dim < dimensionality; dim++) {
115
+ const variableSize = buffer.readUint32();
116
+ const variables = new Array(variableSize);
117
+ for (let v = 0; v < variableSize; v++) {
118
+ const name = readName(buffer);
119
+ const dimensionality = buffer.readUint32();
120
+ const dimensionsIds = new Array(dimensionality);
121
+ for (let dim = 0; dim < dimensionality; dim++) {
122
122
  dimensionsIds[dim] = buffer.readUint32();
123
123
  }
124
- var attributes = readAttributesList(buffer);
125
- var type = buffer.readUint32();
124
+ const attributes = readAttributesList(buffer);
125
+ const type = buffer.readUint32();
126
126
  if (type < 1 && type > 6) {
127
127
  throw new Error("NetCDF: non valid type ".concat(type));
128
128
  }
129
- var varSize = buffer.readUint32();
130
- var offset = buffer.readUint32();
129
+ const varSize = buffer.readUint32();
130
+ let offset = buffer.readUint32();
131
131
  if (version === 2) {
132
132
  if (offset > 0) {
133
133
  throw new Error('NetCDF: offsets larger than 4GB not supported');
134
134
  }
135
135
  offset = buffer.readUint32();
136
136
  }
137
- var record = false;
137
+ let record = false;
138
138
  if (typeof recordId !== 'undefined' && dimensionsIds[0] === recordId) {
139
139
  recordStep += varSize;
140
140
  record = true;
141
141
  }
142
142
  variables[v] = {
143
- name: name,
143
+ name,
144
144
  dimensions: dimensionsIds,
145
- attributes: attributes,
145
+ attributes,
146
146
  type: (0, _readType.num2str)(type),
147
147
  size: varSize,
148
- offset: offset,
149
- record: record
148
+ offset,
149
+ record
150
150
  };
151
151
  }
152
152
  return {
153
- variables: variables,
154
- recordStep: recordStep
153
+ variables,
154
+ recordStep
155
155
  };
156
156
  }
157
157
  function readName(buffer) {
158
- var nameLength = buffer.readUint32();
159
- var name = buffer.readChars(nameLength);
158
+ const nameLength = buffer.readUint32();
159
+ const name = buffer.readChars(nameLength);
160
160
  padding(buffer);
161
161
  return name;
162
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"read-header.js","names":["_readType","require","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","concat","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":";;;;;;;AAEA,IAAAA,SAAA,GAAAC,OAAA;AAGA,IAAMC,IAAI,GAAG,CAAC;AACd,IAAMC,YAAY,GAAG,EAAE;AACvB,IAAMC,WAAW,GAAG,EAAE;AACtB,IAAMC,YAAY,GAAG,EAAE;AAEvB,IAAMC,YAAY,GAAG,CAAC;AAQf,SAASC,gBAAgBA,CAACC,MAAgB,EAAEC,OAAe,EAAgB;EAGhF,IAAMC,qBAAqB,GAAGF,MAAM,CAACG,UAAU,CAAC,CAAC;EAGjD,IAAMC,OAAO,GAAGC,kBAAkB,CAACL,MAAM,CAAC;EAG1C,IAAMM,UAAU,GAAGC,kBAAkB,CAACP,MAAM,CAAC;EAG7C,IAAMQ,YAAY,GAAGC,iBAAiB,CAACT,MAAM,EAAEI,OAAO,CAACM,QAAQ,EAAET,OAAO,CAAC;EAEzE,IAAMU,MAAoB,GAAG;IAC3BV,OAAO,EAAPA,OAAO;IACPW,eAAe,EAAE;MACfC,MAAM,EAAEX,qBAAqB;MAC7BY,EAAE,EAAEV,OAAO,CAACM,QAAQ;MACpBK,IAAI,EAAEX,OAAO,CAACY,UAAU;MACxBC,UAAU,EAAET,YAAY,CAACS;IAC3B,CAAC;IACDC,UAAU,EAAEd,OAAO,CAACc,UAAU;IAC9BC,SAAS,EAAEX,YAAY,CAACW,SAAS;IACjCb,UAAU,EAAVA;EACF,CAAC;EAED,OAAOK,MAAM;AACf;AAOA,SAASN,kBAAkBA,CAACL,MAAgB,EAI1C;EACA,IAAMI,OAAO,GAAGJ,MAAM,CAACG,UAAU,CAAC,CAAC;EACnC,IAAIC,OAAO,KAAKV,IAAI,EAAE;IACpB,IAAIM,MAAM,CAACG,UAAU,CAAC,CAAC,KAAKT,IAAI,EAAE;MAChC,MAAM,IAAI0B,KAAK,CAAC,gDAAgD,CAAC;IACnE;IAEA,OAAO;MACLV,QAAQ,EAAE,CAAC;MACXM,UAAU,EAAE,EAAE;MACdE,UAAU,EAAE;IACd,CAAC;EACH;EAEA,IAAId,OAAO,KAAKT,YAAY,EAAE;IAC5B,MAAM,IAAIyB,KAAK,CAAC,0CAA0C,CAAC;EAC7D;EAGA,IAAMC,aAAa,GAAGrB,MAAM,CAACG,UAAU,CAAC,CAAC;EACzC,IAAMe,UAAU,GAAG,IAAII,KAAK,CAACD,aAAa,CAAC;EAC3C,IAAIX,QAAQ;EACZ,IAAIM,UAAU;EACd,KAAK,IAAIO,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGF,aAAa,EAAEE,GAAG,EAAE,EAAE;IAE5C,IAAMR,IAAI,GAAGS,QAAQ,CAACxB,MAAM,CAAC;IAG7B,IAAMyB,IAAI,GAAGzB,MAAM,CAACG,UAAU,CAAC,CAAC;IAChC,IAAIsB,IAAI,KAAK3B,YAAY,EAAE;MAEzBY,QAAQ,GAAGa,GAAG;MACdP,UAAU,GAAGD,IAAI;IACnB;IAEAG,UAAU,CAACK,GAAG,CAAC,GAAG;MAChBR,IAAI,EAAJA,IAAI;MACJU,IAAI,EAAJA;IACF,CAAC;EACH;EAEA,OAAO;IACLP,UAAU,EAAVA,UAAU;IACVR,QAAQ,EAARA,QAAQ;IACRM,UAAU,EAAVA;EACF,CAAC;AACH;AAQA,SAAST,kBAAkBA,CAACP,MAAgB,EAAqB;EAC/D,IAAM0B,QAAQ,GAAG1B,MAAM,CAACG,UAAU,CAAC,CAAC;EACpC,IAAIuB,QAAQ,KAAKhC,IAAI,EAAE;IACrB,IAAIM,MAAM,CAACG,UAAU,CAAC,CAAC,KAAKT,IAAI,EAAE;MAChC,MAAM,IAAI0B,KAAK,CAAC,gDAAgD,CAAC;IACnE;IACA,OAAO,EAAE;EACX;EAEA,IAAIM,QAAQ,KAAK7B,YAAY,EAAE;IAC7B,MAAM,IAAIuB,KAAK,CAAC,0CAA0C,CAAC;EAC7D;EAGA,IAAMO,aAAa,GAAG3B,MAAM,CAACG,UAAU,CAAC,CAAC;EACzC,IAAMG,UAAU,GAAG,IAAIgB,KAAK,CAACK,aAAa,CAAC;EAC3C,KAAK,IAAIC,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGD,aAAa,EAAEC,IAAI,EAAE,EAAE;IAE/C,IAAMb,IAAI,GAAGS,QAAQ,CAACxB,MAAM,CAAC;IAG7B,IAAM6B,IAAI,GAAG7B,MAAM,CAACG,UAAU,CAAC,CAAC;IAChC,IAAI0B,IAAI,GAAG,CAAC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACxB,MAAM,IAAIT,KAAK,2BAAAU,MAAA,CAA2BD,IAAI,CAAE,CAAC;IACnD;IAGA,IAAMJ,IAAI,GAAGzB,MAAM,CAACG,UAAU,CAAC,CAAC;IAChC,IAAM4B,KAAK,GAAG,IAAAC,kBAAQ,EAAChC,MAAM,EAAE6B,IAAI,EAAEJ,IAAI,CAAC;IAG1CQ,OAAO,CAACjC,MAAM,CAAC;IAEfM,UAAU,CAACsB,IAAI,CAAC,GAAG;MACjBb,IAAI,EAAJA,IAAI;MACJc,IAAI,EAAE,IAAAK,iBAAO,EAACL,IAAI,CAAC;MACnBE,KAAK,EAALA;IACF,CAAC;EACH;EACA,OAAOzB,UAAU;AACnB;AAUA,SAASG,iBAAiBA,CACxBT,MAAgB,EAChBU,QAAgB,EAChBT,OAAe,EAIf;EACA,IAAMkC,OAAO,GAAGnC,MAAM,CAACG,UAAU,CAAC,CAAC;EACnC,IAAIc,UAAU,GAAG,CAAC;EAClB,IAAIkB,OAAO,KAAKzC,IAAI,EAAE;IACpB,IAAIM,MAAM,CAACG,UAAU,CAAC,CAAC,KAAKT,IAAI,EAAE;MAChC,MAAM,IAAI0B,KAAK,CAAC,+CAA+C,CAAC;IAClE;IACA,OAAO;MACLH,UAAU,EAAVA,UAAU;MACVE,SAAS,EAAE;IACb,CAAC;EACH;EAEA,IAAIgB,OAAO,KAAKvC,WAAW,EAAE;IAC3B,MAAM,IAAIwB,KAAK,CAAC,yCAAyC,CAAC;EAC5D;EAGA,IAAMgB,YAAY,GAAGpC,MAAM,CAACG,UAAU,CAAC,CAAC;EACxC,IAAMgB,SAAS,GAAG,IAAIG,KAAK,CAACc,YAAY,CAAC;EACzC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,YAAY,EAAEC,CAAC,EAAE,EAAE;IAErC,IAAMtB,IAAI,GAAGS,QAAQ,CAACxB,MAAM,CAAC;IAG7B,IAAMsC,cAAc,GAAGtC,MAAM,CAACG,UAAU,CAAC,CAAC;IAG1C,IAAMoC,aAAa,GAAG,IAAIjB,KAAK,CAACgB,cAAc,CAAC;IAC/C,KAAK,IAAIf,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGe,cAAc,EAAEf,GAAG,EAAE,EAAE;MAC7CgB,aAAa,CAAChB,GAAG,CAAC,GAAGvB,MAAM,CAACG,UAAU,CAAC,CAAC;IAC1C;IAGA,IAAMG,UAAU,GAAGC,kBAAkB,CAACP,MAAM,CAAC;IAG7C,IAAM6B,IAAI,GAAG7B,MAAM,CAACG,UAAU,CAAC,CAAC;IAChC,IAAI0B,IAAI,GAAG,CAAC,IAAIA,IAAI,GAAG,CAAC,EAAE;MACxB,MAAM,IAAIT,KAAK,2BAAAU,MAAA,CAA2BD,IAAI,CAAE,CAAC;IACnD;IAKA,IAAMW,OAAO,GAAGxC,MAAM,CAACG,UAAU,CAAC,CAAC;IAGnC,IAAIsC,MAAM,GAAGzC,MAAM,CAACG,UAAU,CAAC,CAAC;IAChC,IAAIF,OAAO,KAAK,CAAC,EAAE;MACjB,IAAIwC,MAAM,GAAG,CAAC,EAAE;QACd,MAAM,IAAIrB,KAAK,CAAC,+CAA+C,CAAC;MAClE;MACAqB,MAAM,GAAGzC,MAAM,CAACG,UAAU,CAAC,CAAC;IAC9B;IAEA,IAAIuC,MAAM,GAAG,KAAK;IAElB,IAAI,OAAOhC,QAAQ,KAAK,WAAW,IAAI6B,aAAa,CAAC,CAAC,CAAC,KAAK7B,QAAQ,EAAE;MACpEO,UAAU,IAAIuB,OAAO;MACrBE,MAAM,GAAG,IAAI;IACf;IACAvB,SAAS,CAACkB,CAAC,CAAC,GAAG;MACbtB,IAAI,EAAJA,IAAI;MACJG,UAAU,EAAEqB,aAAa;MACzBjC,UAAU,EAAVA,UAAU;MACVuB,IAAI,EAAE,IAAAK,iBAAO,EAACL,IAAI,CAAC;MACnBJ,IAAI,EAAEe,OAAO;MACbC,MAAM,EAANA,MAAM;MACNC,MAAM,EAANA;IACF,CAAC;EACH;EAEA,OAAO;IACLvB,SAAS,EAATA,SAAS;IACTF,UAAU,EAAVA;EACF,CAAC;AACH;AASO,SAASO,QAAQA,CAACxB,MAAgB,EAAU;EAEjD,IAAM2C,UAAU,GAAG3C,MAAM,CAACG,UAAU,CAAC,CAAC;EACtC,IAAMY,IAAI,GAAGf,MAAM,CAAC4C,SAAS,CAACD,UAAU,CAAC;EAMzCV,OAAO,CAACjC,MAAM,CAAC;EACf,OAAOe,IAAI;AACb;AAKA,SAASkB,OAAOA,CAACjC,MAAgB,EAAE;EACjC,IAAIA,MAAM,CAACyC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;IAC3BzC,MAAM,CAAC6C,IAAI,CAAC,CAAC,GAAI7C,MAAM,CAACyC,MAAM,GAAG,CAAE,CAAC;EACtC;AACF"}
1
+ {"version":3,"file":"read-header.js","names":["_readType","require","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","concat","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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"}
@@ -8,7 +8,7 @@ exports.num2bytes = num2bytes;
8
8
  exports.num2str = num2str;
9
9
  exports.readType = readType;
10
10
  exports.str2num = str2num;
11
- var TYPES = {
11
+ const TYPES = {
12
12
  BYTE: 1,
13
13
  CHAR: 2,
14
14
  SHORT: 3,
@@ -91,8 +91,8 @@ function str2num(type) {
91
91
  }
92
92
  function readNumber(size, bufferReader) {
93
93
  if (size !== 1) {
94
- var numbers = new Array(size);
95
- for (var i = 0; i < size; i++) {
94
+ const numbers = new Array(size);
95
+ for (let i = 0; i < size; i++) {
96
96
  numbers[i] = bufferReader();
97
97
  }
98
98
  return numbers;
@@ -1 +1 @@
1
- {"version":3,"file":"read-type.js","names":["TYPES","BYTE","CHAR","SHORT","INT","FLOAT","DOUBLE","exports","readType","buffer","type","size","readBytes","trimNull","readChars","readNumber","readInt16","bind","readInt32","readFloat32","readFloat64","Error","concat","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
+ {"version":3,"file":"read-type.js","names":["TYPES","BYTE","CHAR","SHORT","INT","FLOAT","DOUBLE","exports","readType","buffer","type","size","readBytes","trimNull","readChars","readNumber","readInt16","bind","readInt32","readFloat32","readFloat64","Error","concat","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,5 +1,5 @@
1
1
  import { NetCDFReader } from './netcdfjs/netcdf-reader';
2
- const VERSION = typeof "3.4.13" !== 'undefined' ? "3.4.13" : 'latest';
2
+ const VERSION = typeof "3.4.15" !== 'undefined' ? "3.4.15" : 'latest';
3
3
  export const NetCDFWorkerLoader = {
4
4
  name: 'NetCDF',
5
5
  id: 'mvt',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/netcdf",
3
3
  "description": "Loader for NetCDF",
4
- "version": "3.4.13",
4
+ "version": "3.4.15",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -30,7 +30,7 @@
30
30
  "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
31
31
  },
32
32
  "dependencies": {
33
- "@loaders.gl/loader-utils": "3.4.13"
33
+ "@loaders.gl/loader-utils": "3.4.15"
34
34
  },
35
- "gitHead": "be8849c02972ce541e01720d29b976f830d6af92"
35
+ "gitHead": "19e941d5805568e449ef9092490d6568a4853298"
36
36
  }