@loaders.gl/netcdf 3.3.0-alpha.4 → 3.3.0-alpha.6

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,12 +1,15 @@
1
1
  import { NetCDFReader } from './netcdfjs/netcdf-reader';
2
- const VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
2
+
3
+ const VERSION = typeof "3.3.0-alpha.6" !== 'undefined' ? "3.3.0-alpha.6" : 'latest';
3
4
  export const NetCDFWorkerLoader = {
4
5
  name: 'NetCDF',
5
6
  id: 'mvt',
6
7
  module: 'mvt',
7
8
  version: VERSION,
8
9
  extensions: ['cdf', 'nc'],
9
- mimeTypes: ['application/netcdf', 'application/x-netcdf'],
10
+ mimeTypes: ['application/netcdf', 'application/x-netcdf'
11
+ ],
12
+
10
13
  category: 'image',
11
14
  options: {
12
15
  netcdf: {
@@ -14,23 +17,21 @@ export const NetCDFWorkerLoader = {
14
17
  }
15
18
  }
16
19
  };
17
- export const NetCDFLoader = { ...NetCDFWorkerLoader,
20
+
21
+ export const NetCDFLoader = {
22
+ ...NetCDFWorkerLoader,
18
23
  parse: async (arrayBuffer, options) => parseNetCDF(arrayBuffer, options),
19
24
  binary: true
20
25
  };
21
-
22
26
  function parseNetCDF(arrayBuffer, options) {
23
27
  var _options$netcdf;
24
-
25
28
  const reader = new NetCDFReader(arrayBuffer);
26
29
  const variables = {};
27
-
28
30
  if (options !== null && options !== void 0 && (_options$netcdf = options.netcdf) !== null && _options$netcdf !== void 0 && _options$netcdf.loadData) {
29
31
  for (const variable of reader.variables) {
30
32
  variables[variable.name] = reader.getDataVariable(variable);
31
33
  }
32
34
  }
33
-
34
35
  return {
35
36
  loaderData: reader.header,
36
37
  data: variables
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/netcdf-loader.ts"],"names":["NetCDFReader","VERSION","NetCDFWorkerLoader","name","id","module","version","extensions","mimeTypes","category","options","netcdf","loadVariables","NetCDFLoader","parse","arrayBuffer","parseNetCDF","binary","reader","variables","loadData","variable","getDataVariable","loaderData","header","data","_typecheckNetCDFWorkerLoader","_typecheckNetCDFLoader"],"mappings":"AAEA,SAAQA,YAAR,QAA2B,0BAA3B;AAIA,MAAMC,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAgBA,OAAO,MAAMC,kBAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE,QAD0B;AAEhCC,EAAAA,EAAE,EAAE,KAF4B;AAGhCC,EAAAA,MAAM,EAAE,KAHwB;AAIhCC,EAAAA,OAAO,EAAEL,OAJuB;AAKhCM,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,IAAR,CALoB;AAMhCC,EAAAA,SAAS,EAAE,CACT,oBADS,EAET,sBAFS,CANqB;AAWhCC,EAAAA,QAAQ,EAAE,OAXsB;AAYhCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,MAAM,EAAE;AACNC,MAAAA,aAAa,EAAE;AADT;AADD;AAZuB,CAA3B;AAsBP,OAAO,MAAMC,YAAY,GAAG,EAC1B,GAAGX,kBADuB;AAE1BY,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBL,OAApB,KAAgCM,WAAW,CAACD,WAAD,EAAcL,OAAd,CAFxB;AAG1BO,EAAAA,MAAM,EAAE;AAHkB,CAArB;;AAMP,SAASD,WAAT,CAAqBD,WAArB,EAA+CL,OAA/C,EAAsF;AAAA;;AACpF,QAAMQ,MAAM,GAAG,IAAIlB,YAAJ,CAAiBe,WAAjB,CAAf;AACA,QAAMI,SAA4C,GAAG,EAArD;;AACA,MAAIT,OAAJ,aAAIA,OAAJ,kCAAIA,OAAO,CAAEC,MAAb,4CAAI,gBAAiBS,QAArB,EAA+B;AAC7B,SAAK,MAAMC,QAAX,IAAuBH,MAAM,CAACC,SAA9B,EAAyC;AACvCA,MAAAA,SAAS,CAACE,QAAQ,CAAClB,IAAV,CAAT,GAA2Be,MAAM,CAACI,eAAP,CAAuBD,QAAvB,CAA3B;AACD;AACF;;AACD,SAAO;AACLE,IAAAA,UAAU,EAAEL,MAAM,CAACM,MADd;AAELC,IAAAA,IAAI,EAAEN;AAFD,GAAP;AAID;;AAGD,OAAO,MAAMO,4BAAoC,GAAGxB,kBAA7C;AACP,OAAO,MAAMyB,sBAAwC,GAAGd,YAAjD","sourcesContent":["import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {NetCDFHeader} from './netcdfjs/netcdf-types';\nimport {NetCDFReader} from './netcdfjs/netcdf-reader';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type NetCDF = {\n loaderData: NetCDFHeader;\n data: {[variableName: string]: any[][]};\n};\n\nexport type NetCDFLoaderOptions = LoaderOptions & {\n netcdf?: {\n loadData?: boolean;\n };\n};\n\n/**\n * Worker loader for NETCDF\n */\nexport const NetCDFWorkerLoader = {\n name: 'NetCDF',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n extensions: ['cdf', 'nc'],\n mimeTypes: [\n 'application/netcdf',\n 'application/x-netcdf'\n // 'application/octet-stream'\n ],\n category: 'image',\n options: {\n netcdf: {\n loadVariables: false\n }\n }\n};\n\n/**\n * Loader for the NetCDF format\n */\nexport const NetCDFLoader = {\n ...NetCDFWorkerLoader,\n parse: async (arrayBuffer, options) => parseNetCDF(arrayBuffer, options),\n binary: true\n};\n\nfunction parseNetCDF(arrayBuffer: ArrayBuffer, options?: NetCDFLoaderOptions): NetCDF {\n const reader = new NetCDFReader(arrayBuffer);\n const variables: {[variableName: string]: any[][]} = {};\n if (options?.netcdf?.loadData) {\n for (const variable of reader.variables) {\n variables[variable.name] = reader.getDataVariable(variable);\n }\n }\n return {\n loaderData: reader.header,\n data: variables\n };\n}\n\n// Type tests\nexport const _typecheckNetCDFWorkerLoader: Loader = NetCDFWorkerLoader;\nexport const _typecheckNetCDFLoader: LoaderWithParser = NetCDFLoader;\n"],"file":"netcdf-loader.js"}
1
+ {"version":3,"file":"netcdf-loader.js","names":["NetCDFReader","VERSION","NetCDFWorkerLoader","name","id","module","version","extensions","mimeTypes","category","options","netcdf","loadVariables","NetCDFLoader","parse","arrayBuffer","parseNetCDF","binary","reader","variables","loadData","variable","getDataVariable","loaderData","header","data","_typecheckNetCDFWorkerLoader","_typecheckNetCDFLoader"],"sources":["../../src/netcdf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {NetCDFHeader} from './netcdfjs/netcdf-types';\nimport {NetCDFReader} from './netcdfjs/netcdf-reader';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type NetCDF = {\n loaderData: NetCDFHeader;\n data: {[variableName: string]: any[][]};\n};\n\nexport type NetCDFLoaderOptions = LoaderOptions & {\n netcdf?: {\n loadData?: boolean;\n };\n};\n\n/**\n * Worker loader for NETCDF\n */\nexport const NetCDFWorkerLoader = {\n name: 'NetCDF',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n extensions: ['cdf', 'nc'],\n mimeTypes: [\n 'application/netcdf',\n 'application/x-netcdf'\n // 'application/octet-stream'\n ],\n category: 'image',\n options: {\n netcdf: {\n loadVariables: false\n }\n }\n};\n\n/**\n * Loader for the NetCDF format\n */\nexport const NetCDFLoader = {\n ...NetCDFWorkerLoader,\n parse: async (arrayBuffer, options) => parseNetCDF(arrayBuffer, options),\n binary: true\n};\n\nfunction parseNetCDF(arrayBuffer: ArrayBuffer, options?: NetCDFLoaderOptions): NetCDF {\n const reader = new NetCDFReader(arrayBuffer);\n const variables: {[variableName: string]: any[][]} = {};\n if (options?.netcdf?.loadData) {\n for (const variable of reader.variables) {\n variables[variable.name] = reader.getDataVariable(variable);\n }\n }\n return {\n loaderData: reader.header,\n data: variables\n };\n}\n\n// Type tests\nexport const _typecheckNetCDFWorkerLoader: Loader = NetCDFWorkerLoader;\nexport const _typecheckNetCDFLoader: LoaderWithParser = NetCDFLoader;\n"],"mappings":"AAEA,SAAQA,YAAY,QAAO,0BAA0B;;AAIrD,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAgB3E,OAAO,MAAMC,kBAAkB,GAAG;EAChCC,IAAI,EAAE,QAAQ;EACdC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;EACzBC,SAAS,EAAE,CACT,oBAAoB,EACpB;EAAsB,CAEvB;;EACDC,QAAQ,EAAE,OAAO;EACjBC,OAAO,EAAE;IACPC,MAAM,EAAE;MACNC,aAAa,EAAE;IACjB;EACF;AACF,CAAC;;AAKD,OAAO,MAAMC,YAAY,GAAG;EAC1B,GAAGX,kBAAkB;EACrBY,KAAK,EAAE,OAAOC,WAAW,EAAEL,OAAO,KAAKM,WAAW,CAACD,WAAW,EAAEL,OAAO,CAAC;EACxEO,MAAM,EAAE;AACV,CAAC;AAED,SAASD,WAAW,CAACD,WAAwB,EAAEL,OAA6B,EAAU;EAAA;EACpF,MAAMQ,MAAM,GAAG,IAAIlB,YAAY,CAACe,WAAW,CAAC;EAC5C,MAAMI,SAA4C,GAAG,CAAC,CAAC;EACvD,IAAIT,OAAO,aAAPA,OAAO,kCAAPA,OAAO,CAAEC,MAAM,4CAAf,gBAAiBS,QAAQ,EAAE;IAC7B,KAAK,MAAMC,QAAQ,IAAIH,MAAM,CAACC,SAAS,EAAE;MACvCA,SAAS,CAACE,QAAQ,CAAClB,IAAI,CAAC,GAAGe,MAAM,CAACI,eAAe,CAACD,QAAQ,CAAC;IAC7D;EACF;EACA,OAAO;IACLE,UAAU,EAAEL,MAAM,CAACM,MAAM;IACzBC,IAAI,EAAEN;EACR,CAAC;AACH;;AAGA,OAAO,MAAMO,4BAAoC,GAAGxB,kBAAkB;AACtE,OAAO,MAAMyB,sBAAwC,GAAGd,YAAY"}
@@ -2,22 +2,20 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import { IOBuffer } from '../iobuffer/iobuffer';
3
3
  import { readNetCDFHeader } from './read-header';
4
4
  import { readRecord, readNonRecord } from './read-data';
5
+
5
6
  export class NetCDFReader {
6
7
  constructor(data) {
7
8
  _defineProperty(this, "header", void 0);
8
-
9
9
  _defineProperty(this, "buffer", void 0);
10
-
11
10
  const buffer = new IOBuffer(data);
12
11
  buffer.setBigEndian();
13
- const magic = buffer.readChars(3);
14
12
 
13
+ const magic = buffer.readChars(3);
15
14
  if (magic !== 'CDF') {
16
15
  throw new Error("NetCDF: file should start with 'CDF', found ".concat(magic));
17
16
  }
18
17
 
19
18
  const version = buffer.readByte();
20
-
21
19
  if (version > 2) {
22
20
  throw new Error("NetCDF: unsupported version ".concat(version));
23
21
  }
@@ -30,7 +28,6 @@ export class NetCDFReader {
30
28
  if (this.header.version === 1) {
31
29
  return 'classic format';
32
30
  }
33
-
34
31
  return '64-bit offset format';
35
32
  }
36
33
 
@@ -76,7 +73,6 @@ export class NetCDFReader {
76
73
 
77
74
  getDataVariable(variableName) {
78
75
  let variable;
79
-
80
76
  if (typeof variableName === 'string') {
81
77
  variable = this.header.variables.find(function (val) {
82
78
  return val.name === variableName;
@@ -90,47 +86,35 @@ export class NetCDFReader {
90
86
  }
91
87
 
92
88
  this.buffer.seek(variable.offset);
93
-
94
89
  if (variable.record) {
95
90
  return readRecord(this.buffer, variable, this.header.recordDimension);
96
91
  }
97
-
98
92
  return readNonRecord(this.buffer, variable);
99
93
  }
100
-
101
94
  toString() {
102
95
  const result = [];
103
96
  result.push('DIMENSIONS');
104
-
105
97
  for (const dimension of this.dimensions) {
106
98
  result.push(" ".concat(dimension.name.padEnd(30), " = size: ").concat(dimension.size));
107
99
  }
108
-
109
100
  result.push('');
110
101
  result.push('GLOBAL ATTRIBUTES');
111
-
112
102
  for (const attribute of this.attributes) {
113
103
  result.push(" ".concat(attribute.name.padEnd(30), " = ").concat(attribute.value));
114
104
  }
115
-
116
105
  const variables = JSON.parse(JSON.stringify(this.variables));
117
106
  result.push('');
118
107
  result.push('VARIABLES:');
119
-
120
108
  for (const variable of variables) {
121
109
  variable.value = this.getDataVariable(variable);
122
110
  let stringify = JSON.stringify(variable.value);
123
111
  if (stringify.length > 50) stringify = stringify.substring(0, 50);
124
-
125
112
  if (!isNaN(variable.value.length)) {
126
113
  stringify += " (length: ".concat(variable.value.length, ")");
127
114
  }
128
-
129
115
  result.push(" ".concat(variable.name.padEnd(30), " = ").concat(stringify));
130
116
  }
131
-
132
117
  return result.join('\n');
133
118
  }
134
-
135
119
  }
136
120
  //# sourceMappingURL=netcdf-reader.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/netcdfjs/netcdf-reader.ts"],"names":["IOBuffer","readNetCDFHeader","readRecord","readNonRecord","NetCDFReader","constructor","data","buffer","setBigEndian","magic","readChars","Error","version","readByte","header","recordDimension","dimensions","attributes","variables","attributeExists","attributeName","attribute","find","val","name","undefined","getAttribute","value","dataVariableExists","variableName","variable","getDataVariableAsString","getDataVariable","join","seek","offset","record","toString","result","push","dimension","padEnd","size","JSON","parse","stringify","length","substring","isNaN"],"mappings":"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","sourcesContent":["import {IOBuffer} from '../iobuffer/iobuffer';\nimport type {\n NetCDFHeader,\n NetCDFDimension,\n NetCDFRecordDimension,\n NetCDFAttribute,\n NetCDFVariable\n} from './netcdf-types';\nimport {readNetCDFHeader} from './read-header';\nimport {readRecord, readNonRecord} from './read-data';\n\n/**\n * Reads a NetCDF v3.x file\n * https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications.html\n * @param {ArrayBuffer} data - ArrayBuffer or any Typed Array (including Node.js' Buffer from v4) with the data\n * @constructor\n */\nexport class NetCDFReader {\n public header: NetCDFHeader;\n public buffer: IOBuffer;\n\n constructor(data) {\n const buffer = new IOBuffer(data);\n buffer.setBigEndian();\n\n // Validate that it's a NetCDF file\n const magic = buffer.readChars(3);\n if (magic !== 'CDF') {\n throw new Error(`NetCDF: file should start with 'CDF', found ${magic}`);\n }\n\n // Check the NetCDF format\n const version = buffer.readByte();\n if (version > 2) {\n throw new Error(`NetCDF: unsupported version ${version}`);\n }\n\n // Read the header\n this.header = readNetCDFHeader(buffer, version);\n this.buffer = buffer;\n }\n\n /**\n * @return {string} - Version for the NetCDF format\n */\n get version() {\n if (this.header.version === 1) {\n return 'classic format';\n }\n return '64-bit offset format';\n }\n\n /**\n * Get metadata for the record dimension\n */\n get recordDimension(): NetCDFRecordDimension {\n return this.header.recordDimension;\n }\n\n /**\n * Get list of dimensions (each with `name` and `size`)\n */\n get dimensions(): NetCDFDimension[] {\n return this.header.dimensions;\n }\n\n /**\n * Get list of global attributes with:\n * * `name`: String with the name of the attribute\n * * `type`: String with the type of the attribute\n * * `value`: A number or string with the value of the attribute\n */\n get attributes(): NetCDFAttribute[] {\n return this.header.attributes;\n }\n\n /**\n * Get list of variables\n */\n get variables(): NetCDFVariable[] {\n return this.header.variables;\n }\n\n /**\n * Check if an attribute exists\n * @param attributeName - Name of the attribute to find\n * @return\n */\n attributeExists(attributeName: string): boolean {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n return attribute !== undefined;\n }\n\n /**\n * Returns the value of an attribute\n * @param attributeName\n * @return Value of the attributeName or null\n */\n getAttribute(attributeName: string): string | null {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n if (attribute) return attribute.value;\n return null;\n }\n\n /**\n * Check if a dataVariable exists\n * @param variableName - Name of the variable to find\n * @return\n */\n dataVariableExists(variableName: string): boolean {\n const variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n return variable !== undefined;\n }\n\n /**\n * Returns the value of a variable as a string\n * @param variableName\n * @return Value of the variable as a string or null\n */\n getDataVariableAsString(variableName: string): string | null {\n const variable = this.getDataVariable(variableName);\n if (variable) return variable.join('');\n return null;\n }\n\n /**\n * Retrieves the data for a given variable\n * @param variableName - Name of the variable to search or variable object\n * @return List with the variable values\n */\n getDataVariable(variableName: string | object): any[] {\n let variable;\n if (typeof variableName === 'string') {\n // search the variable\n variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n } else {\n variable = variableName;\n }\n\n // throws if variable not found\n if (variable === undefined) {\n throw new Error(`NetCDF: variable not found: ${variableName}`);\n }\n\n // go to the offset position\n this.buffer.seek(variable.offset);\n\n if (variable.record) {\n // record variable case\n return readRecord(this.buffer, variable, this.header.recordDimension);\n }\n // non-record variable case\n return readNonRecord(this.buffer, variable);\n }\n\n toString(): string {\n const result: string[] = [];\n\n result.push('DIMENSIONS');\n for (const dimension of this.dimensions) {\n result.push(` ${dimension.name.padEnd(30)} = size: ${dimension.size}`);\n }\n\n result.push('');\n result.push('GLOBAL ATTRIBUTES');\n for (const attribute of this.attributes) {\n result.push(` ${attribute.name.padEnd(30)} = ${attribute.value}`);\n }\n\n const variables = JSON.parse(JSON.stringify(this.variables));\n result.push('');\n result.push('VARIABLES:');\n for (const variable of variables) {\n variable.value = this.getDataVariable(variable);\n let stringify = JSON.stringify(variable.value);\n if (stringify.length > 50) stringify = stringify.substring(0, 50);\n if (!isNaN(variable.value.length)) {\n stringify += ` (length: ${variable.value.length})`;\n }\n result.push(` ${variable.name.padEnd(30)} = ${stringify}`);\n }\n return result.join('\\n');\n }\n}\n"],"file":"netcdf-reader.js"}
1
+ {"version":3,"file":"netcdf-reader.js","names":["IOBuffer","readNetCDFHeader","readRecord","readNonRecord","NetCDFReader","constructor","data","buffer","setBigEndian","magic","readChars","Error","version","readByte","header","recordDimension","dimensions","attributes","variables","attributeExists","attributeName","attribute","find","val","name","undefined","getAttribute","value","dataVariableExists","variableName","variable","getDataVariableAsString","getDataVariable","join","seek","offset","record","toString","result","push","dimension","padEnd","size","JSON","parse","stringify","length","substring","isNaN"],"sources":["../../../src/netcdfjs/netcdf-reader.ts"],"sourcesContent":["import {IOBuffer} from '../iobuffer/iobuffer';\nimport type {\n NetCDFHeader,\n NetCDFDimension,\n NetCDFRecordDimension,\n NetCDFAttribute,\n NetCDFVariable\n} from './netcdf-types';\nimport {readNetCDFHeader} from './read-header';\nimport {readRecord, readNonRecord} from './read-data';\n\n/**\n * Reads a NetCDF v3.x file\n * https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications.html\n * @param {ArrayBuffer} data - ArrayBuffer or any Typed Array (including Node.js' Buffer from v4) with the data\n * @constructor\n */\nexport class NetCDFReader {\n public header: NetCDFHeader;\n public buffer: IOBuffer;\n\n constructor(data) {\n const buffer = new IOBuffer(data);\n buffer.setBigEndian();\n\n // Validate that it's a NetCDF file\n const magic = buffer.readChars(3);\n if (magic !== 'CDF') {\n throw new Error(`NetCDF: file should start with 'CDF', found ${magic}`);\n }\n\n // Check the NetCDF format\n const version = buffer.readByte();\n if (version > 2) {\n throw new Error(`NetCDF: unsupported version ${version}`);\n }\n\n // Read the header\n this.header = readNetCDFHeader(buffer, version);\n this.buffer = buffer;\n }\n\n /**\n * @return {string} - Version for the NetCDF format\n */\n get version() {\n if (this.header.version === 1) {\n return 'classic format';\n }\n return '64-bit offset format';\n }\n\n /**\n * Get metadata for the record dimension\n */\n get recordDimension(): NetCDFRecordDimension {\n return this.header.recordDimension;\n }\n\n /**\n * Get list of dimensions (each with `name` and `size`)\n */\n get dimensions(): NetCDFDimension[] {\n return this.header.dimensions;\n }\n\n /**\n * Get list of global attributes with:\n * * `name`: String with the name of the attribute\n * * `type`: String with the type of the attribute\n * * `value`: A number or string with the value of the attribute\n */\n get attributes(): NetCDFAttribute[] {\n return this.header.attributes;\n }\n\n /**\n * Get list of variables\n */\n get variables(): NetCDFVariable[] {\n return this.header.variables;\n }\n\n /**\n * Check if an attribute exists\n * @param attributeName - Name of the attribute to find\n * @return\n */\n attributeExists(attributeName: string): boolean {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n return attribute !== undefined;\n }\n\n /**\n * Returns the value of an attribute\n * @param attributeName\n * @return Value of the attributeName or null\n */\n getAttribute(attributeName: string): string | null {\n const attribute = this.attributes.find((val) => val.name === attributeName);\n if (attribute) return attribute.value;\n return null;\n }\n\n /**\n * Check if a dataVariable exists\n * @param variableName - Name of the variable to find\n * @return\n */\n dataVariableExists(variableName: string): boolean {\n const variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n return variable !== undefined;\n }\n\n /**\n * Returns the value of a variable as a string\n * @param variableName\n * @return Value of the variable as a string or null\n */\n getDataVariableAsString(variableName: string): string | null {\n const variable = this.getDataVariable(variableName);\n if (variable) return variable.join('');\n return null;\n }\n\n /**\n * Retrieves the data for a given variable\n * @param variableName - Name of the variable to search or variable object\n * @return List with the variable values\n */\n getDataVariable(variableName: string | object): any[] {\n let variable;\n if (typeof variableName === 'string') {\n // search the variable\n variable = this.header.variables.find(function (val) {\n return val.name === variableName;\n });\n } else {\n variable = variableName;\n }\n\n // throws if variable not found\n if (variable === undefined) {\n throw new Error(`NetCDF: variable not found: ${variableName}`);\n }\n\n // go to the offset position\n this.buffer.seek(variable.offset);\n\n if (variable.record) {\n // record variable case\n return readRecord(this.buffer, variable, this.header.recordDimension);\n }\n // non-record variable case\n return readNonRecord(this.buffer, variable);\n }\n\n toString(): string {\n const result: string[] = [];\n\n result.push('DIMENSIONS');\n for (const dimension of this.dimensions) {\n result.push(` ${dimension.name.padEnd(30)} = size: ${dimension.size}`);\n }\n\n result.push('');\n result.push('GLOBAL ATTRIBUTES');\n for (const attribute of this.attributes) {\n result.push(` ${attribute.name.padEnd(30)} = ${attribute.value}`);\n }\n\n const variables = JSON.parse(JSON.stringify(this.variables));\n result.push('');\n result.push('VARIABLES:');\n for (const variable of variables) {\n variable.value = this.getDataVariable(variable);\n let stringify = JSON.stringify(variable.value);\n if (stringify.length > 50) stringify = stringify.substring(0, 50);\n if (!isNaN(variable.value.length)) {\n stringify += ` (length: ${variable.value.length})`;\n }\n result.push(` ${variable.name.padEnd(30)} = ${stringify}`);\n }\n return result.join('\\n');\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"netcdf-types.js"}
1
+ {"version":3,"file":"netcdf-types.js","names":[],"sources":["../../../src/netcdfjs/netcdf-types.ts"],"sourcesContent":["/**\n * Header describing a NetDCF file\n * @param recordDimension: Number with the length of record dimension\n * @param dimensions: List of dimensions\n * @param attributes: List of global attributes\n * @param variables: List of variables\n */\nexport type NetCDFHeader = {\n version: number;\n recordDimension: NetCDFRecordDimension;\n dimensions: NetCDFDimension[];\n attributes: NetCDFAttribute[];\n variables: NetCDFVariable[];\n};\n\n/**\n * Metadata for the record dimension\n * @param length Number of elements in the record dimension\n * @param id Id in the list of dimensions for the record dimension\n * @param name name of the record dimension\n * @param recordStep the record variables step size\n */\nexport type NetCDFRecordDimension = {\n length: number;\n id: number; // id of the unlimited dimension\n name: string; // name of the unlimited dimension\n recordStep: number;\n};\n\n/**\n * `dimensions` is an array of dimension objects:\n * @param name name of the dimension\n * @param size size of the dimension\n * @param recordId: id of the dimension that has unlimited size or undefined,\n * @param recordName: name of the dimension that has unlimited size\n */\nexport type NetCDFDimension = {\n name: string;\n size: number;\n recordId: number;\n recordName: string;\n};\n\n/**\n * Number of recordStep and list of variables with:\n * @param name String with the name of the variable\n * @param dimensions Array with the dimension IDs of the variable\n * @param attributes Array with the attributes of the variable\n * @param type String with the type of the variable\n * @param size Number with the size of the variable\n * @param offset Number with the offset where of the variable begins\n * @param record True if is a record variable, false otherwise (unlimited size)\n */\nexport type NetCDFVariable = {\n name: string;\n dimensions: [];\n attributes: [];\n type: string;\n size: number;\n offset: number;\n record: boolean;\n};\n\n/**\n * @param name name of the attribute\n * @param type type of the attribute\n * @param value number or string with the value of the attribute\n */\nexport type NetCDFAttribute = {\n name: string;\n type: string;\n value: string;\n};\n"],"mappings":""}
@@ -1,28 +1,30 @@
1
1
  import { readType, str2num, num2bytes } from './read-type';
2
+
2
3
  export function readNonRecord(buffer, variable) {
3
4
  const type = str2num(variable.type);
5
+
4
6
  const size = variable.size / num2bytes(type);
5
- const data = new Array(size);
6
7
 
8
+ const data = new Array(size);
7
9
  for (let i = 0; i < size; i++) {
8
10
  data[i] = readType(buffer, type, 1);
9
11
  }
10
-
11
12
  return data;
12
13
  }
14
+
13
15
  export function readRecord(buffer, variable, recordDimension) {
14
16
  const type = str2num(variable.type);
15
17
  const width = variable.size ? variable.size / num2bytes(type) : 1;
18
+
16
19
  const size = recordDimension.length;
20
+
17
21
  const data = new Array(size);
18
22
  const step = recordDimension.recordStep;
19
-
20
23
  for (let i = 0; i < size; i++) {
21
24
  const currentOffset = buffer.offset;
22
25
  data[i] = readType(buffer, type, width);
23
26
  buffer.seek(currentOffset + step);
24
27
  }
25
-
26
28
  return data;
27
29
  }
28
30
  //# sourceMappingURL=read-data.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/netcdfjs/read-data.ts"],"names":["readType","str2num","num2bytes","readNonRecord","buffer","variable","type","size","data","Array","i","readRecord","recordDimension","width","length","step","recordStep","currentOffset","offset","seek"],"mappings":"AAEA,SAAQA,QAAR,EAAkBC,OAAlB,EAA2BC,SAA3B,QAA2C,aAA3C;AAUA,OAAO,SAASC,aAAT,CACLC,MADK,EAELC,QAFK,EAGwC;AAE7C,QAAMC,IAAI,GAAGL,OAAO,CAACI,QAAQ,CAACC,IAAV,CAApB;AAGA,QAAMC,IAAI,GAAGF,QAAQ,CAACE,IAAT,GAAgBL,SAAS,CAACI,IAAD,CAAtC;AAGA,QAAME,IAAI,GAAG,IAAIC,KAAJ,CAAUF,IAAV,CAAb;;AACA,OAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,IAApB,EAA0BG,CAAC,EAA3B,EAA+B;AAC7BF,IAAAA,IAAI,CAACE,CAAD,CAAJ,GAAUV,QAAQ,CAACI,MAAD,EAASE,IAAT,EAAe,CAAf,CAAlB;AACD;;AAED,SAAOE,IAAP;AACD;AASD,OAAO,SAASG,UAAT,CACLP,MADK,EAELC,QAFK,EAGLO,eAHK,EAIwC;AAE7C,QAAMN,IAAI,GAAGL,OAAO,CAACI,QAAQ,CAACC,IAAV,CAApB;AACA,QAAMO,KAAK,GAAGR,QAAQ,CAACE,IAAT,GAAgBF,QAAQ,CAACE,IAAT,GAAgBL,SAAS,CAACI,IAAD,CAAzC,GAAkD,CAAhE;AAIA,QAAMC,IAAI,GAAGK,eAAe,CAACE,MAA7B;AAGA,QAAMN,IAAI,GAAG,IAAIC,KAAJ,CAAUF,IAAV,CAAb;AACA,QAAMQ,IAAI,GAAGH,eAAe,CAACI,UAA7B;;AAEA,OAAK,IAAIN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,IAApB,EAA0BG,CAAC,EAA3B,EAA+B;AAC7B,UAAMO,aAAa,GAAGb,MAAM,CAACc,MAA7B;AACAV,IAAAA,IAAI,CAACE,CAAD,CAAJ,GAAUV,QAAQ,CAACI,MAAD,EAASE,IAAT,EAAeO,KAAf,CAAlB;AACAT,IAAAA,MAAM,CAACe,IAAP,CAAYF,aAAa,GAAGF,IAA5B;AACD;;AAED,SAAOP,IAAP;AACD","sourcesContent":["import type {IOBuffer} from '../iobuffer/iobuffer';\nimport type {NetCDFRecordDimension, NetCDFVariable} from './netcdf-types';\nimport {readType, str2num, num2bytes} from './read-type';\n\n// const STREAMING = 4294967295;\n\n/**\n * Read data for the given non-record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @return Data of the element\n */\nexport function readNonRecord(\n buffer: IOBuffer,\n variable: NetCDFVariable\n): (string | number | number[] | Uint8Array)[] {\n // variable type\n const type = str2num(variable.type);\n\n // size of the data\n const size = variable.size / num2bytes(type);\n\n // iterates over the data\n const data = new Array(size);\n for (let i = 0; i < size; i++) {\n data[i] = readType(buffer, type, 1);\n }\n\n return data;\n}\n\n/**\n * Read data for the given record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @param recordDimension - Record dimension metadata\n * @return - Data of the element\n */\nexport function readRecord(\n buffer: IOBuffer,\n variable: NetCDFVariable,\n recordDimension: NetCDFRecordDimension\n): (string | number | number[] | Uint8Array)[] {\n // variable type\n const type = str2num(variable.type);\n const width = variable.size ? variable.size / num2bytes(type) : 1;\n\n // size of the data\n // TODO streaming data\n const size = recordDimension.length;\n\n // iterates over the data\n const data = new Array(size);\n const step = recordDimension.recordStep;\n\n for (let i = 0; i < size; i++) {\n const currentOffset = buffer.offset;\n data[i] = readType(buffer, type, width);\n buffer.seek(currentOffset + step);\n }\n\n return data;\n}\n"],"file":"read-data.js"}
1
+ {"version":3,"file":"read-data.js","names":["readType","str2num","num2bytes","readNonRecord","buffer","variable","type","size","data","Array","i","readRecord","recordDimension","width","length","step","recordStep","currentOffset","offset","seek"],"sources":["../../../src/netcdfjs/read-data.ts"],"sourcesContent":["import type {IOBuffer} from '../iobuffer/iobuffer';\nimport type {NetCDFRecordDimension, NetCDFVariable} from './netcdf-types';\nimport {readType, str2num, num2bytes} from './read-type';\n\n// const STREAMING = 4294967295;\n\n/**\n * Read data for the given non-record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @return Data of the element\n */\nexport function readNonRecord(\n buffer: IOBuffer,\n variable: NetCDFVariable\n): (string | number | number[] | Uint8Array)[] {\n // variable type\n const type = str2num(variable.type);\n\n // size of the data\n const size = variable.size / num2bytes(type);\n\n // iterates over the data\n const data = new Array(size);\n for (let i = 0; i < size; i++) {\n data[i] = readType(buffer, type, 1);\n }\n\n return data;\n}\n\n/**\n * Read data for the given record variable\n * @param buffer - Buffer for the file data\n * @param variable - Variable metadata\n * @param recordDimension - Record dimension metadata\n * @return - Data of the element\n */\nexport function readRecord(\n buffer: IOBuffer,\n variable: NetCDFVariable,\n recordDimension: NetCDFRecordDimension\n): (string | number | number[] | Uint8Array)[] {\n // variable type\n const type = str2num(variable.type);\n const width = variable.size ? variable.size / num2bytes(type) : 1;\n\n // size of the data\n // TODO streaming data\n const size = recordDimension.length;\n\n // iterates over the data\n const data = new Array(size);\n const step = recordDimension.recordStep;\n\n for (let i = 0; i < size; i++) {\n const currentOffset = buffer.offset;\n data[i] = readType(buffer, type, width);\n buffer.seek(currentOffset + step);\n }\n\n return data;\n}\n"],"mappings":"AAEA,SAAQA,QAAQ,EAAEC,OAAO,EAAEC,SAAS,QAAO,aAAa;;AAUxD,OAAO,SAASC,aAAa,CAC3BC,MAAgB,EAChBC,QAAwB,EACqB;EAE7C,MAAMC,IAAI,GAAGL,OAAO,CAACI,QAAQ,CAACC,IAAI,CAAC;;EAGnC,MAAMC,IAAI,GAAGF,QAAQ,CAACE,IAAI,GAAGL,SAAS,CAACI,IAAI,CAAC;;EAG5C,MAAME,IAAI,GAAG,IAAIC,KAAK,CAACF,IAAI,CAAC;EAC5B,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,EAAEG,CAAC,EAAE,EAAE;IAC7BF,IAAI,CAACE,CAAC,CAAC,GAAGV,QAAQ,CAACI,MAAM,EAAEE,IAAI,EAAE,CAAC,CAAC;EACrC;EAEA,OAAOE,IAAI;AACb;;AASA,OAAO,SAASG,UAAU,CACxBP,MAAgB,EAChBC,QAAwB,EACxBO,eAAsC,EACO;EAE7C,MAAMN,IAAI,GAAGL,OAAO,CAACI,QAAQ,CAACC,IAAI,CAAC;EACnC,MAAMO,KAAK,GAAGR,QAAQ,CAACE,IAAI,GAAGF,QAAQ,CAACE,IAAI,GAAGL,SAAS,CAACI,IAAI,CAAC,GAAG,CAAC;;EAIjE,MAAMC,IAAI,GAAGK,eAAe,CAACE,MAAM;;EAGnC,MAAMN,IAAI,GAAG,IAAIC,KAAK,CAACF,IAAI,CAAC;EAC5B,MAAMQ,IAAI,GAAGH,eAAe,CAACI,UAAU;EAEvC,KAAK,IAAIN,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,EAAEG,CAAC,EAAE,EAAE;IAC7B,MAAMO,aAAa,GAAGb,MAAM,CAACc,MAAM;IACnCV,IAAI,CAACE,CAAC,CAAC,GAAGV,QAAQ,CAACI,MAAM,EAAEE,IAAI,EAAEO,KAAK,CAAC;IACvCT,MAAM,CAACe,IAAI,CAACF,aAAa,GAAGF,IAAI,CAAC;EACnC;EAEA,OAAOP,IAAI;AACb"}
@@ -1,13 +1,18 @@
1
1
  import { readType, num2str } from './read-type';
2
+
2
3
  const ZERO = 0;
3
4
  const NC_DIMENSION = 10;
4
5
  const NC_VARIABLE = 11;
5
6
  const NC_ATTRIBUTE = 12;
6
7
  const NC_UNLIMITED = 0;
8
+
7
9
  export function readNetCDFHeader(buffer, version) {
8
10
  const recordDimensionLength = buffer.readUint32();
11
+
9
12
  const dimList = readDimensionsList(buffer);
13
+
10
14
  const attributes = readAttributesList(buffer);
15
+
11
16
  const variableList = readVariablesList(buffer, dimList.recordId, version);
12
17
  const header = {
13
18
  version,
@@ -26,19 +31,16 @@ export function readNetCDFHeader(buffer, version) {
26
31
 
27
32
  function readDimensionsList(buffer) {
28
33
  const dimList = buffer.readUint32();
29
-
30
34
  if (dimList === ZERO) {
31
35
  if (buffer.readUint32() !== ZERO) {
32
36
  throw new Error('NetCDF: wrong empty tag for list of dimensions');
33
37
  }
34
-
35
38
  return {
36
39
  recordId: 0,
37
40
  recordName: '',
38
41
  dimensions: []
39
42
  };
40
43
  }
41
-
42
44
  if (dimList !== NC_DIMENSION) {
43
45
  throw new Error('NetCDF: wrong tag for list of dimensions');
44
46
  }
@@ -47,22 +49,19 @@ function readDimensionsList(buffer) {
47
49
  const dimensions = new Array(dimensionSize);
48
50
  let recordId;
49
51
  let recordName;
50
-
51
52
  for (let dim = 0; dim < dimensionSize; dim++) {
52
53
  const name = readName(buffer);
53
- const size = buffer.readUint32();
54
54
 
55
+ const size = buffer.readUint32();
55
56
  if (size === NC_UNLIMITED) {
56
57
  recordId = dim;
57
58
  recordName = name;
58
59
  }
59
-
60
60
  dimensions[dim] = {
61
61
  name,
62
62
  size
63
63
  };
64
64
  }
65
-
66
65
  return {
67
66
  dimensions,
68
67
  recordId,
@@ -72,32 +71,29 @@ function readDimensionsList(buffer) {
72
71
 
73
72
  function readAttributesList(buffer) {
74
73
  const gAttList = buffer.readUint32();
75
-
76
74
  if (gAttList === ZERO) {
77
75
  if (buffer.readUint32() !== ZERO) {
78
76
  throw new Error('NetCDF: wrong empty tag for list of attributes');
79
77
  }
80
-
81
78
  return [];
82
79
  }
83
-
84
80
  if (gAttList !== NC_ATTRIBUTE) {
85
81
  throw new Error('NetCDF: wrong tag for list of attributes');
86
82
  }
87
83
 
88
84
  const attributeSize = buffer.readUint32();
89
85
  const attributes = new Array(attributeSize);
90
-
91
86
  for (let gAtt = 0; gAtt < attributeSize; gAtt++) {
92
87
  const name = readName(buffer);
93
- const type = buffer.readUint32();
94
88
 
89
+ const type = buffer.readUint32();
95
90
  if (type < 1 || type > 6) {
96
91
  throw new Error("NetCDF: non valid type ".concat(type));
97
92
  }
98
93
 
99
94
  const size = buffer.readUint32();
100
95
  const value = readType(buffer, type, size);
96
+
101
97
  padding(buffer);
102
98
  attributes[gAtt] = {
103
99
  name,
@@ -105,66 +101,58 @@ function readAttributesList(buffer) {
105
101
  value
106
102
  };
107
103
  }
108
-
109
104
  return attributes;
110
105
  }
111
106
 
112
107
  function readVariablesList(buffer, recordId, version) {
113
108
  const varList = buffer.readUint32();
114
109
  let recordStep = 0;
115
-
116
110
  if (varList === ZERO) {
117
111
  if (buffer.readUint32() !== ZERO) {
118
112
  throw new Error('NetCDF: wrong empty tag for list of variables');
119
113
  }
120
-
121
114
  return {
122
115
  recordStep,
123
116
  variables: []
124
117
  };
125
118
  }
126
-
127
119
  if (varList !== NC_VARIABLE) {
128
120
  throw new Error('NetCDF: wrong tag for list of variables');
129
121
  }
130
122
 
131
123
  const variableSize = buffer.readUint32();
132
124
  const variables = new Array(variableSize);
133
-
134
125
  for (let v = 0; v < variableSize; v++) {
135
126
  const name = readName(buffer);
127
+
136
128
  const dimensionality = buffer.readUint32();
137
- const dimensionsIds = new Array(dimensionality);
138
129
 
130
+ const dimensionsIds = new Array(dimensionality);
139
131
  for (let dim = 0; dim < dimensionality; dim++) {
140
132
  dimensionsIds[dim] = buffer.readUint32();
141
133
  }
142
134
 
143
135
  const attributes = readAttributesList(buffer);
144
- const type = buffer.readUint32();
145
136
 
137
+ const type = buffer.readUint32();
146
138
  if (type < 1 && type > 6) {
147
139
  throw new Error("NetCDF: non valid type ".concat(type));
148
140
  }
149
141
 
150
142
  const varSize = buffer.readUint32();
151
- let offset = buffer.readUint32();
152
143
 
144
+ let offset = buffer.readUint32();
153
145
  if (version === 2) {
154
146
  if (offset > 0) {
155
147
  throw new Error('NetCDF: offsets larger than 4GB not supported');
156
148
  }
157
-
158
149
  offset = buffer.readUint32();
159
150
  }
160
-
161
151
  let record = false;
162
-
163
152
  if (typeof recordId !== 'undefined' && dimensionsIds[0] === recordId) {
164
153
  recordStep += varSize;
165
154
  record = true;
166
155
  }
167
-
168
156
  variables[v] = {
169
157
  name,
170
158
  dimensions: dimensionsIds,
@@ -175,7 +163,6 @@ function readVariablesList(buffer, recordId, version) {
175
163
  record
176
164
  };
177
165
  }
178
-
179
166
  return {
180
167
  variables,
181
168
  recordStep
@@ -185,6 +172,7 @@ function readVariablesList(buffer, recordId, version) {
185
172
  export function readName(buffer) {
186
173
  const nameLength = buffer.readUint32();
187
174
  const name = buffer.readChars(nameLength);
175
+
188
176
  padding(buffer);
189
177
  return name;
190
178
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/netcdfjs/read-header.ts"],"names":["readType","num2str","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":["readType","num2str","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"],"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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"}
@@ -6,98 +6,78 @@ export const TYPES = {
6
6
  FLOAT: 5,
7
7
  DOUBLE: 6
8
8
  };
9
+
9
10
  export function readType(buffer, type, size) {
10
11
  switch (type) {
11
12
  case TYPES.BYTE:
12
13
  return buffer.readBytes(size);
13
-
14
14
  case TYPES.CHAR:
15
15
  return trimNull(buffer.readChars(size));
16
-
17
16
  case TYPES.SHORT:
18
17
  return readNumber(size, buffer.readInt16.bind(buffer));
19
-
20
18
  case TYPES.INT:
21
19
  return readNumber(size, buffer.readInt32.bind(buffer));
22
-
23
20
  case TYPES.FLOAT:
24
21
  return readNumber(size, buffer.readFloat32.bind(buffer));
25
-
26
22
  case TYPES.DOUBLE:
27
23
  return readNumber(size, buffer.readFloat64.bind(buffer));
28
-
29
24
  default:
30
25
  throw new Error("NetCDF: non valid type ".concat(type));
31
26
  }
32
27
  }
28
+
33
29
  export function num2str(type) {
34
30
  switch (Number(type)) {
35
31
  case TYPES.BYTE:
36
32
  return 'byte';
37
-
38
33
  case TYPES.CHAR:
39
34
  return 'char';
40
-
41
35
  case TYPES.SHORT:
42
36
  return 'short';
43
-
44
37
  case TYPES.INT:
45
38
  return 'int';
46
-
47
39
  case TYPES.FLOAT:
48
40
  return 'float';
49
-
50
41
  case TYPES.DOUBLE:
51
42
  return 'double';
52
-
53
43
  default:
54
44
  return 'undefined';
55
45
  }
56
46
  }
47
+
57
48
  export function num2bytes(type) {
58
49
  switch (Number(type)) {
59
50
  case TYPES.BYTE:
60
51
  return 1;
61
-
62
52
  case TYPES.CHAR:
63
53
  return 1;
64
-
65
54
  case TYPES.SHORT:
66
55
  return 2;
67
-
68
56
  case TYPES.INT:
69
57
  return 4;
70
-
71
58
  case TYPES.FLOAT:
72
59
  return 4;
73
-
74
60
  case TYPES.DOUBLE:
75
61
  return 8;
76
-
77
62
  default:
78
63
  return -1;
79
64
  }
80
65
  }
66
+
81
67
  export function str2num(type) {
82
68
  switch (String(type)) {
83
69
  case 'byte':
84
70
  return TYPES.BYTE;
85
-
86
71
  case 'char':
87
72
  return TYPES.CHAR;
88
-
89
73
  case 'short':
90
74
  return TYPES.SHORT;
91
-
92
75
  case 'int':
93
76
  return TYPES.INT;
94
-
95
77
  case 'float':
96
78
  return TYPES.FLOAT;
97
-
98
79
  case 'double':
99
80
  return TYPES.DOUBLE;
100
-
101
81
  default:
102
82
  return -1;
103
83
  }
@@ -106,14 +86,11 @@ export function str2num(type) {
106
86
  function readNumber(size, bufferReader) {
107
87
  if (size !== 1) {
108
88
  const numbers = new Array(size);
109
-
110
89
  for (let i = 0; i < size; i++) {
111
90
  numbers[i] = bufferReader();
112
91
  }
113
-
114
92
  return numbers;
115
93
  }
116
-
117
94
  return bufferReader();
118
95
  }
119
96
 
@@ -121,7 +98,6 @@ function trimNull(value) {
121
98
  if (value.charCodeAt(value.length - 1) === 0) {
122
99
  return value.substring(0, value.length - 1);
123
100
  }
124
-
125
101
  return value;
126
102
  }
127
103
  //# sourceMappingURL=read-type.js.map