sheetjs-clone/packages/dta/dist/dta.min.js.map
2023-12-05 03:19:42 -05:00

8 lines
32 KiB
Plaintext

{
"version": 3,
"sources": ["../dta.ts"],
"sourcesContent": ["import { CellObject, DenseWorkSheet, WorkBook, type utils } from 'xlsx';\nexport { parse, set_utils, version };\n\nconst version = \"0.0.1\";\n\nlet _utils: typeof utils;\n/** Set internal instance of `utils`\n *\n * Usage:\n *\n * ```js\n * const XLSX = require(\"xlsx\");\n * const DTA = require(\"dta\");\n * DTA.set_utils(XLSX.utils);\n * ```\n *\n * @param utils utils object\n */\nfunction set_utils(utils: any): void {\n _utils = utils;\n}\n\nfunction u8_to_str(u8: Uint8Array): string {\n return new TextDecoder().decode(u8);\n}\n\n/* sadly the web zealots decided to abandon binary strings */\nfunction u8_to_latin1(u8: Uint8Array): string {\n return new TextDecoder(\"latin1\").decode(u8);\n}\n\n\n/* TODO: generalize and map to SSF */\nfunction format_number_dta(value: number, format: string, t: number): CellObject {\n if(value < 0) { const res = format_number_dta(-value, format, t); res.w = \"-\" + res.w; return res; }\n const o: CellObject = { t: \"n\", v: value };\n /* NOTE: The Stata CSV exporter appears to ignore the column formats, instead using these defaults */\n switch(t) {\n case 251: case 0x62: case 65530: format = \"%8.0g\"; break; // byte\n case 252: case 0x69: case 65529: format = \"%8.0g\"; break; // int\n case 253: case 0x6c: case 65528: format = \"%12.0g\"; break; // long\n case 254: case 0x66: case 65527: format = \"%9.0g\"; break; // float\n case 255: case 0x64: case 65526: format = \"%10.0g\"; break; // double\n default: throw t;\n }\n try {\n let w = +((format.match(/%(\\d+)/)||[])[1]) || 8;\n let k = 0;\n if(value < 1) ++k;\n if(value < 0.1) ++k;\n if(value < 0.01) ++k;\n if(value < 0.001) ++k;\n const e = value.toExponential();\n const exp = e.indexOf(\"e\") == -1 ? 0 : +e.slice(e.indexOf(\"e\")+1);\n let h = w - 2 - exp;\n if(h < 0) h = 0;\n var m = format.match(/%\\d+\\.(\\d+)/);\n if(m && +m[1]) h = +m[1];\n o.w = (Math.round(value * 10**(h))/10**(h)).toFixed(h).replace(/^([-]?)0\\./,\"$1.\");\n o.w = o.w.slice(0, w + k);\n if(o.w.indexOf(\".\") > -1) o.w = o.w.replace(/0+$/,\"\");\n o.w = o.w.replace(/\\.$/,\"\");\n if(o.w == \"\") o.w = \"0\";\n } catch(e) {}\n return o;\n}\n\ninterface Payload {\n /** Offset */\n ptr: number;\n\n /** Raw data */\n raw: Uint8Array;\n\n /** DataView */\n dv: DataView;\n}\n\nfunction u8_to_dataview(array: Uint8Array): DataView { return new DataView(array.buffer, array.byteOffset, array.byteLength); }\nfunction valid_inc(p: Payload, n: string): boolean {\n if(u8_to_str(p.raw.slice(p.ptr, p.ptr + n.length)) != n) return false;\n p.ptr += n.length;\n return true;\n}\n\nfunction read_f64(p: Payload, LE: boolean): number | null {\n p.ptr += 8;\n const d = p.dv.getFloat64(p.ptr - 8, LE);\n return d > 8.988e+307 ? null : d;\n}\nfunction read_f32(p: Payload, LE: boolean): number | null {\n p.ptr += 4;\n const d = p.dv.getFloat32(p.ptr - 4, LE);\n return d > 1.701e+38 ? null : d;\n\n}\nfunction read_u32(p: Payload, LE: boolean) {\n p.ptr += 4;\n return p.dv.getUint32(p.ptr - 4, LE);\n}\nfunction read_i32(p: Payload, LE: boolean): number | null {\n p.ptr += 4;\n const u = p.dv.getInt32(p.ptr - 4, LE);\n return u > 0x7fffffe4 ? null : u;\n}\nfunction read_u16(p: Payload, LE: boolean) {\n p.ptr += 2;\n return p.dv.getUint16(p.ptr - 2, LE);\n}\nfunction read_i16(p: Payload, LE: boolean): number | null {\n p.ptr += 2;\n const u = p.dv.getInt16(p.ptr - 2, LE);\n return u > 32740 ? null : u;\n}\nfunction read_u8(p: Payload) {\n return p.raw[p.ptr++];\n}\nfunction read_i8(p: Payload): number | null {\n let u = p.raw[p.ptr++];\n u = u < 128 ? u : u - 256;\n return u > 100 ? null : u;\n}\n\n/* the annotations are from `dtaversion` */\nconst SUPPORTED_VERSIONS_TAGGED = [\n \"117\", // stata 13\n \"118\", // stata 14-18\n \"119\", // stata 15-18 (> 32767 variables)\n \"120\", // stata 18 (<= 32767, with aliases)\n \"121\", // stata 18 (> 32767, with aliases)\n];\nconst SUPPORTED_VERSIONS_LEGACY = [\n 102, // stata 1\n 103, // stata 2/3\n 104, // stata 4\n 105, // stata 5\n 108, // stata 6\n 110, // stata 7\n 111, // stata 7\n 112, // stata 8/9\n 113, // stata 8/9\n 114, // stata 10/11\n 115, // stata 12\n];\n\nfunction parse_tagged(raw: Uint8Array): WorkBook {\n const err = (\"Not a DTA file\");\n\n const d: Payload = {\n ptr: 0,\n raw,\n dv: u8_to_dataview(raw)\n }\n\n let vers: number = 118;\n let LE: boolean = true;\n let nvar: number = 0, nobs: number = 0, nobs_lo = 0, nobs_hi = 0;\n let label: string = \"\", timestamp: string = \"\";\n const var_types: number[] = [];\n const var_names: string[] = [];\n const formats: string[] = [];\n\n /* 5. Dataset format definition */\n if(!valid_inc(d, \"<stata_dta>\")) throw err;\n\n /* 5.1 Header <header> */\n {\n if(!valid_inc(d, \"<header>\")) throw err;\n\n /* <release> */\n {\n if(!valid_inc(d, \"<release>\")) throw err;\n /* NOTE: this assumes the version is 3 characters wide */\n const res = u8_to_latin1(d.raw.slice(d.ptr, d.ptr+3));\n d.ptr += 3;\n if(!valid_inc(d, \"</release>\")) throw err;\n if(SUPPORTED_VERSIONS_TAGGED.indexOf(res) == -1) throw (`Unsupported DTA ${res} file`);\n vers = +res;\n }\n\n /* <byteorder> */\n {\n if(!valid_inc(d, \"<byteorder>\")) throw err;\n /* NOTE: this assumes the byte order is 3 characters wide */\n const res = u8_to_latin1(d.raw.slice(d.ptr, d.ptr+3));\n d.ptr += 3;\n if(!valid_inc(d, \"</byteorder>\")) throw err;\n switch(res) {\n case \"MSF\": LE = false; break;\n case \"LSF\": LE = true; break;\n default: throw (`Unsupported byteorder ${res}`);\n }\n }\n\n /* <K> */\n {\n if(!valid_inc(d, \"<K>\")) throw err;\n nvar = (vers === 119 || vers >= 121) ? read_u32(d, LE) : read_u16(d, LE);\n if(!valid_inc(d, \"</K>\")) throw err;\n }\n\n /* <N> */\n {\n if(!valid_inc(d, \"<N>\")) throw err;\n if(vers == 117) nobs = nobs_lo = read_u32(d, LE);\n else {\n const lo = read_u32(d, LE), hi = read_u32(d, LE);\n nobs = LE ? ((nobs_lo = lo) + (nobs_hi = hi) * Math.pow(2,32)) : ((nobs_lo = hi) + (nobs_hi = lo) * Math.pow(2,32));\n }\n if(nobs > 1e6) console.error(`More than 1 million observations -- extra rows will be dropped`);\n if(!valid_inc(d, \"</N>\")) throw err;\n }\n\n /* <label> */\n {\n if(!valid_inc(d, \"<label>\")) throw err;\n const w = vers >= 118 ? 2 : 1;\n const strlen = w == 1 ? read_u8(d) : read_u16(d, LE);\n if(strlen > 0) label = u8_to_str(d.raw.slice(d.ptr, d.ptr + w));\n d.ptr += strlen;\n if(!valid_inc(d, \"</label>\")) throw err;\n }\n\n /* <timestamp> */\n {\n if(!valid_inc(d, \"<timestamp>\")) throw err;\n const strlen = read_u8(d);\n timestamp = u8_to_latin1(d.raw.slice(d.ptr, d.ptr + strlen));\n d.ptr += strlen;\n if(!valid_inc(d, \"</timestamp>\")) throw err;\n }\n\n if(!valid_inc(d, \"</header>\")) throw err;\n }\n\n /* 5.2 Map <map> */\n {\n /* TODO: validate map? */\n if(!valid_inc(d, \"<map>\")) throw err;\n /* 14 8-byte offsets for:\n <stata_data>\n <map>\n <variable_types>\n <varnames>\n <sortlist>\n <formats>\n <value_label_names>\n <variable_labels>\n <characteristics>\n <data>\n <strls>\n <value_labels>\n </stata_data>\n EOF\n */\n d.ptr += 8 * 14;\n if(!valid_inc(d, \"</map>\")) throw err;\n }\n\n let stride = 0;\n /* 5.3 Variable types <variable_types> */\n {\n if(!valid_inc(d, \"<variable_types>\")) throw err;\n for(var i = 0; i < nvar; ++i) {\n const type = read_u16(d, LE);\n var_types.push(type);\n if(type >= 1 && type <= 2045) stride += type;\n else switch(type) {\n case 32768: stride += 8; break;\n case 65525: stride += 0; break; // alias\n case 65526: stride += 8; break;\n case 65527: stride += 4; break;\n case 65528: stride += 4; break;\n case 65529: stride += 2; break;\n case 65530: stride += 1; break;\n default: throw (`Unsupported field type ${type}`);\n }\n }\n if(!valid_inc(d, \"</variable_types>\")) throw err;\n }\n\n /* 5.4 Variable names <varnames> */\n {\n if(!valid_inc(d, \"<varnames>\")) throw err;\n const w = vers >= 118 ? 129 : 33;\n for(let i = 0; i < nvar; ++i) {\n const name = u8_to_str(d.raw.slice(d.ptr, d.ptr + w));\n d.ptr += w;\n var_names.push(name.replace(/\\x00[\\s\\S]*/,\"\"));\n }\n if(!valid_inc(d, \"</varnames>\")) throw err;\n }\n\n /* 5.5 Sort order of observations <sortlist> */\n {\n /* TODO: check sort list? */\n if(!valid_inc(d, \"<sortlist>\")) throw err;\n d.ptr += (2 * nvar + 2) * ((vers == 119 || vers == 121) ? 2 : 1);\n if(!valid_inc(d, \"</sortlist>\")) throw err;\n }\n\n /* 5.6 Display formats <formats> */\n {\n if(!valid_inc(d, \"<formats>\")) throw err;\n const w = vers >= 118 ? 57 : 49;\n for(let i = 0; i < nvar; ++i) {\n const name = u8_to_str(d.raw.slice(d.ptr, d.ptr + w));\n d.ptr += w;\n formats.push(name.replace(/\\x00[\\s\\S]*/,\"\"));\n }\n if(!valid_inc(d, \"</formats>\")) throw err;\n }\n\n const value_label_names: string[] = [];\n /* TODO: <value_label_names> */\n {\n if(!valid_inc(d, \"<value_label_names>\")) throw err;\n const w = vers >= 118 ? 129 : 33;\n for(let i = 0; i < nvar; ++i, d.ptr += w) value_label_names[i] = u8_to_latin1(d.raw.slice(d.ptr, d.ptr + w)).replace(/\\x00.*$/,\"\");\n if(!valid_inc(d, \"</value_label_names>\")) throw err;\n }\n\n /* TODO: <variable_labels> */\n {\n if(!valid_inc(d, \"<variable_labels>\")) throw err;\n const w = vers >= 118 ? 321 : 81;\n d.ptr += w * nvar;\n if(!valid_inc(d, \"</variable_labels>\")) throw err;\n }\n\n /* 5.9 Characteristics <characteristics> */\n {\n if(!valid_inc(d, \"<characteristics>\")) throw err;\n while(valid_inc(d, \"<ch>\")) {\n const len = read_u32(d, LE);\n d.ptr += len;\n if(!valid_inc(d, \"</ch>\")) throw err;\n }\n if(!valid_inc(d, \"</characteristics>\")) throw err;\n }\n\n const ws: DenseWorkSheet = (_utils.aoa_to_sheet([var_names], {dense: true} as any) as DenseWorkSheet);\n\n var ptrs: Array<[number, number, Uint8Array]> = []\n /* 5.10 Data <data> */\n {\n if(!valid_inc(d, \"<data>\")) throw err;\n for(let R = 0; R < nobs; ++R) {\n const row: any[] = [];\n for(let C = 0; C < nvar; ++C) {\n let t = var_types[C];\n // TODO: formats, dta_12{0,1} aliases?\n if(t >= 1 && t <= 2045) {\n /* NOTE: dta_117 restricts strf to ASCII */\n let s = u8_to_str(d.raw.slice(d.ptr, d.ptr + t));\n s = s.replace(/\\x00[\\s\\S]*/,\"\");\n row[C] = s;\n d.ptr += t;\n } else switch(t) {\n case 65525: d.ptr += 0; break; // alias\n case 65530: row[C] = read_i8(d); break; // byte\n case 65529: row[C] = read_i16(d, LE); break; // int\n case 65528: row[C] = read_i32(d, LE); break; // long\n case 65527: row[C] = read_f32(d, LE); break; // float\n case 65526: row[C] = read_f64(d, LE); break; // double\n case 32768: {\n row[C] = \"##SheetJStrL##\";\n ptrs.push([R+1,C, d.raw.slice(d.ptr, d.ptr + 8)]);\n d.ptr += 8;\n } break;\n default: throw (`Unsupported field type ${t} for ${var_names[C]}`);\n }\n if(typeof row[C] == \"number\" && formats[C]) row[C] = format_number_dta(row[C], formats[C], t);\n }\n _utils.sheet_add_aoa(ws, [row], {origin: -1, sheetStubs: true});\n }\n if(!valid_inc(d, \"</data>\")) throw err;\n }\n\n /* 5.11 StrLs <strls> */\n {\n if(!valid_inc(d, \"<strls>\")) throw err;\n\n const strl_tbl: string[][] = [];\n while(d.raw[d.ptr] == 71 /* G */) {\n if(!valid_inc(d, \"GSO\")) throw err;\n const v = read_u32(d, LE);\n let o = 0;\n if(vers == 117) o = read_u32(d, LE);\n else {\n const lo = read_u32(d, LE), hi = read_u32(d, LE);\n o = LE ? (lo + hi * Math.pow(2,32)) : (hi + lo * Math.pow(2,32));\n if(o > 1e6) console.error(`More than 1 million observations -- data will be dropped`);\n }\n const t = read_u8(d);\n const len = read_u32(d, LE);\n if(!strl_tbl[o]) strl_tbl[o] = [];\n let str = \"\";\n if(t == 129) {\n // TODO: dta_117 codepage\n str = new TextDecoder(vers >= 118 ? \"utf8\" : \"latin1\").decode(d.raw.slice(d.ptr, d.ptr + len));\n d.ptr += len;\n } else {\n str = new TextDecoder(vers >= 118 ? \"utf8\" : \"latin1\").decode(d.raw.slice(d.ptr, d.ptr + len)).replace(/\\x00$/,\"\");\n d.ptr += len;\n }\n strl_tbl[o][v] = str;\n }\n if(!valid_inc(d, \"</strls>\")) throw err;\n\n ptrs.forEach(([R,C,buf]) => {\n const dv = u8_to_dataview(buf);\n let v = 0, o = 0;\n switch(vers) {\n case 117: { // v(4) o(4)\n v = dv.getUint32(0, LE);\n o = dv.getUint32(4, LE);\n } break;\n\n case 118: case 120: { // v(2) o(6)\n v = dv.getUint16(0, LE);\n const o1 = dv.getUint16(2, LE), o2 = dv.getUint32(4, LE);\n o = LE ? o1 + o2 * 65536 : o2 + o1 * (2**32);\n } break;\n\n case 119: case 121: { // v(3) o(5)\n const v1 = dv.getUint16(0, LE), v2 = buf[2];\n v = LE ? v1 + (v2 << 16) : v2 + (v1 << 8);\n const o1 = buf[3], o2 = dv.getUint32(4, LE);\n o = LE ? o1 + o2 * 256 : o2 + o1 * (2**32);\n }\n }\n ws[\"!data\"][R][C].v = strl_tbl[o][v];\n });\n }\n\n /* 5.12 Value labels <value_labels> */\n {\n const w = vers >= 118 ? 129 : 33;\n if(!valid_inc(d, \"<value_labels>\")) throw err;\n while(valid_inc(d, \"<lbl>\")) {\n let len = read_u32(d, LE);\n const labname = u8_to_latin1(d.raw.slice(d.ptr, d.ptr + w)).replace(/\\x00.*$/,\"\");\n d.ptr += w;\n d.ptr += 3; // padding\n const labels: string[] = [];\n {\n const n = read_u32(d, LE);\n const txtlen = read_u32(d, LE);\n const off: number[] = [], val: number[] = [];\n for(let i = 0; i < n; ++i) off.push(read_u32(d, LE));\n for(let i = 0; i < n; ++i) val.push(read_u32(d, LE));\n const str = u8_to_str(d.raw.slice(d.ptr, d.ptr + txtlen));\n d.ptr += txtlen;\n for(let i = 0; i < n; ++i) labels[val[i]] = str.slice(off[i], str.indexOf(\"\\x00\", off[i]));\n }\n const C = value_label_names.indexOf(labname);\n if(C == -1) throw new Error(`unexpected value label |${labname}|`);\n for(let R = 1; R < ws[\"!data\"].length; ++R) {\n const cell = ws[\"!data\"][R][C];\n cell.t = \"s\"; cell.v = cell.w = labels[(cell.v as number)||0];\n }\n //d.ptr += len; // value_label_table\n if(!valid_inc(d, \"</lbl>\")) throw err;\n }\n if(!valid_inc(d, \"</value_labels>\")) throw err;\n }\n\n if(!valid_inc(d, \"</stata_dta>\")) throw err;\n const wb = _utils.book_new();\n _utils.book_append_sheet(wb, ws, \"Sheet1\");\n return wb;\n}\n\nfunction parse_legacy(raw: Uint8Array): WorkBook {\n let vers: number = raw[0];\n if(SUPPORTED_VERSIONS_LEGACY.indexOf(vers) == -1) throw new Error(\"Not a DTA file\");\n\n const d: Payload = {\n ptr: 1,\n raw,\n dv: u8_to_dataview(raw)\n }\n\n let LE: boolean = true;\n let nvar: number = 0, nobs: number = 0;\n let label: string = \"\", timestamp: string = \"\";\n const var_types: number[] = [];\n const var_names: string[] = [];\n const formats: string[] = [];\n\n /* 5.1 Header */\n {\n const byteorder = read_u8(d);\n switch(byteorder) {\n case 1: LE = false; break;\n case 2: LE = true; break;\n default: throw (`DTA ${vers} Unexpected byteorder ${byteorder}`);\n }\n\n let byte = read_u8(d);\n if(byte != 1) throw (`DTA ${vers} Unexpected filetype ${byte}`);\n // NOTE: dta_105 technically supports filetype 2\n\n d.ptr++; // \"unused\"\n nvar = read_u16(d, LE);\n nobs = read_u32(d, LE);\n d.ptr += (vers >= 108 ? 81 : vers >= 103 ? 32 : 30); // TODO: data_label\n if(vers >= 105) d.ptr += 18; // TODO: time_stamp\n }\n\n /* 5.2 Descriptors */\n const value_label_names: string[] = [];\n {\n let C = 0;\n\n // typlist\n for(C = 0; C < nvar; ++C) var_types.push(read_u8(d));\n\n // varlist\n const w = vers >= 110 ? 33 : 9;\n for(C = 0; C < nvar; ++C) {\n var_names.push(u8_to_str(d.raw.slice(d.ptr, d.ptr + w)).replace(/\\x00[\\s\\S]*$/,\"\"));\n d.ptr += w;\n }\n\n // srtlist\n d.ptr += 2*(nvar + 1);\n\n // fmtlist\n const fw = (vers >= 114 ? 49 : vers >= 105 ? 12 : 7);\n for(C = 0; C < nvar; ++C) {\n formats.push(u8_to_str(d.raw.slice(d.ptr, d.ptr + fw)).replace(/\\x00[\\s\\S]*$/,\"\"));\n d.ptr += fw;\n }\n // lbllist\n const lw = vers >= 110 ? 33 : 9;\n for(let i = 0; i < nvar; ++i, d.ptr += lw) value_label_names[i] = u8_to_latin1(d.raw.slice(d.ptr, d.ptr + lw)).replace(/\\x00.*$/,\"\");\n }\n\n /* 5.3 Variable labels */\n // TODO: should these names be used in the worksheet?\n d.ptr += (vers >= 106 ? 81 : 32) * nvar;\n\n /* 5.4 Expansion fields */\n if(vers >= 105) while(d.ptr < d.raw.length) {\n const dt = read_u8(d), len = (vers >= 110 ? read_u32 : read_u16)(d, LE);\n if(dt == 0 && len == 0) break;\n d.ptr += len;\n }\n\n const ws: DenseWorkSheet = (_utils.aoa_to_sheet([var_names], {dense: true} as any) as DenseWorkSheet);\n\n /* 5.5 Data */\n for(let R = 0; R < nobs; ++R) {\n const row: any[] = [];\n for(let C = 0; C < nvar; ++C) {\n let t = var_types[C];\n // TODO: data type processing\n if((vers == 111 || vers >= 113) && t >= 1 && t <= 244) {\n /* NOTE: dta_117 restricts strf to ASCII */\n let s = u8_to_str(d.raw.slice(d.ptr, d.ptr + t));\n s = s.replace(/\\x00[\\s\\S]*/,\"\");\n row[C] = s;\n d.ptr += t;\n } else if((vers == 112 || vers <= 110) && t >= 0x80) {\n /* NOTE: dta_105 restricts strf to ASCII */\n let s = u8_to_str(d.raw.slice(d.ptr, d.ptr + t - 0x7F));\n s = s.replace(/\\x00[\\s\\S]*/,\"\");\n row[C] = s;\n d.ptr += t - 0x7F;\n } else switch(t) {\n case 251: case 0x62: row[C] = read_i8(d); break; // byte\n case 252: case 0x69: row[C] = read_i16(d, LE); break; // int\n case 253: case 0x6c: row[C] = read_i32(d, LE); break; // long\n case 254: case 0x66: row[C] = read_f32(d, LE); break; // float\n case 255: case 0x64: row[C] = read_f64(d, LE); break; // double\n default: throw (`Unsupported field type ${t} for ${var_names[C]}`);\n }\n if(typeof row[C] == \"number\" && formats[C]) row[C] = format_number_dta(row[C], formats[C], t);\n }\n _utils.sheet_add_aoa(ws, [row], {origin: -1, sheetStubs: true});\n }\n\n /* 5.6 Value labels */\n // TODO: < 115\n if(vers >= 115) while(d.ptr < d.raw.length) {\n const w = 33;\n let len = read_u32(d, LE);\n const labname = u8_to_latin1(d.raw.slice(d.ptr, d.ptr + w)).replace(/\\x00.*$/,\"\");\n d.ptr += w;\n d.ptr += 3; // padding\n const labels: string[] = [];\n {\n const n = read_u32(d, LE);\n const txtlen = read_u32(d, LE);\n const off: number[] = [], val: number[] = [];\n for(let i = 0; i < n; ++i) off.push(read_u32(d, LE));\n for(let i = 0; i < n; ++i) val.push(read_u32(d, LE));\n const str = u8_to_latin1(d.raw.slice(d.ptr, d.ptr + txtlen));\n d.ptr += txtlen;\n for(let i = 0; i < n; ++i) labels[val[i]] = str.slice(off[i], str.indexOf(\"\\x00\", off[i]));\n }\n const C = value_label_names.indexOf(labname);\n if(C == -1) throw new Error(`unexpected value label |${labname}|`);\n for(let R = 1; R < ws[\"!data\"].length; ++R) {\n const cell = ws[\"!data\"][R][C];\n cell.t = \"s\"; cell.v = cell.w = labels[(cell.v as number)||0];\n }\n\n }\n\n const wb: WorkBook = _utils.book_new();\n _utils.book_append_sheet(wb, ws, \"Sheet1\");\n return wb;\n}\n\n/** Parse DTA file\n *\n * NOTE: In NodeJS, `Buffer` extends `Uint8Array`\n *\n * @param {Uint8Array} data File data\n */\nfunction parse(data: Uint8Array): WorkBook {\n if(data[0] >= 102 && data[0] <= 115) return parse_legacy(data);\n if(data[0] === 60) return parse_tagged(data);\n throw new Error(\"Not a DTA file\");\n}\n"],
"mappings": "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",
"names": []
}