ascii-grid
Advanced tools
Comparing version 0.0.1 to 0.1.0
{ | ||
"name": "ascii-grid", | ||
"version": "0.0.1", | ||
"version": "0.1.0", | ||
"description": "Identify and Read an ARC/INFO ASCII Grid", | ||
"main": "src", | ||
"scripts": { | ||
"format": "npx prettier --write test.js src/*.js", | ||
"test": "ava" | ||
@@ -8,0 +9,0 @@ }, |
const NEWLINE_CHARCODE = "\n".charCodeAt(0); | ||
module.exports = (input, options={}) => { | ||
const debug = options.debug || false; | ||
module.exports = (input, options = {}) => { | ||
const debug = options.debug || false; | ||
const result = {}; | ||
if (typeof Buffer !== 'undefined' && Buffer.isBuffer(input)) { | ||
let i = 0; | ||
const result = {}; | ||
if (typeof Buffer !== "undefined" && Buffer.isBuffer(input)) { | ||
let i = 0; | ||
// parse metadata | ||
let line = null; | ||
// parse metadata | ||
let line = null; | ||
const read_length = Math.min(input.length, max_read_length); | ||
for (i = 0; i < read_length; i++) { | ||
const char = String.fromCharCode(input[i]); | ||
if (char === "\n") { | ||
const [param, value] = line.split(" "); | ||
result[param] = Number.parseFloat(value); | ||
line = null; | ||
} else if (line === null) { | ||
if (['-','0','1','2','3','4','5','6','7','8','9'].includes(char)) { | ||
break; | ||
} else { | ||
line = char; | ||
} | ||
} else { | ||
line += char; | ||
} | ||
const read_length = Math.min(input.length, max_read_length); | ||
for (i = 0; i < read_length; i++) { | ||
const char = String.fromCharCode(input[i]); | ||
if (char === "\n") { | ||
const [param, value] = line.split(" "); | ||
result[param] = Number.parseFloat(value); | ||
line = null; | ||
} else if (line === null) { | ||
if ( | ||
["-", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(char) | ||
) { | ||
break; | ||
} else { | ||
line = char; | ||
} | ||
} else { | ||
line += char; | ||
} | ||
} | ||
} | ||
if (input instanceof ArrayBuffer) input = new DataView(input); | ||
if (input instanceof ArrayBuffer) input = new DataView(input); | ||
if (input instanceof DataView) { | ||
const decoded = ""; | ||
input = decoded; | ||
} | ||
if (debug) console.log("result:", result); | ||
return result; | ||
if (input instanceof DataView) { | ||
const decoded = ""; | ||
input = decoded; | ||
} | ||
if (debug) console.log("result:", result); | ||
return result; | ||
}; |
const MAX_READ_LENGTH = 500; | ||
module.exports = (input, options={}) => { | ||
const debug = options.debug || false; | ||
if (typeof Buffer !== 'undefined' && Buffer.isBuffer(input)) { | ||
if (input.toString) { | ||
input = input.toString('utf8', 0, MAX_READ_LENGTH); | ||
if (debug) console.log("converted input to a string"); | ||
} else { | ||
return false; | ||
} | ||
module.exports = (input, options = {}) => { | ||
const debug = options.debug || false; | ||
if (typeof Buffer !== "undefined" && Buffer.isBuffer(input)) { | ||
if (input.toString) { | ||
input = input.toString("utf8", 0, MAX_READ_LENGTH); | ||
if (debug) console.log("converted input to a string"); | ||
} else { | ||
return false; | ||
} | ||
} | ||
if (debug) console.log("input is:", input); | ||
if (debug) console.log("input is:", input); | ||
if (input instanceof ArrayBuffer) input = new DataView(input); | ||
if (input instanceof ArrayBuffer) input = new DataView(input); | ||
if (input instanceof DataView) { | ||
const decoded = ""; | ||
const length = Math.min(MAX_READ_LENGTH, input.byteLength); | ||
for (let i = 0; i < length; i++) { | ||
decoded += String.fromCharCode(input.getUint8(i)); | ||
} | ||
input = decoded; | ||
if (input instanceof DataView) { | ||
const decoded = ""; | ||
const length = Math.min(MAX_READ_LENGTH, input.byteLength); | ||
for (let i = 0; i < length; i++) { | ||
decoded += String.fromCharCode(input.getUint8(i)); | ||
} | ||
input = decoded; | ||
} | ||
if (input instanceof Uint8Array) { | ||
const decoded = ""; | ||
for (let i = 0; i < Math.min(MAX_READ_LENGTH, input.length); i++) { | ||
decoded += String.fromCharCode(input[i]); | ||
} | ||
input = decoded; | ||
if (input instanceof Uint8Array) { | ||
const decoded = ""; | ||
for (let i = 0; i < Math.min(MAX_READ_LENGTH, input.length); i++) { | ||
decoded += String.fromCharCode(input[i]); | ||
} | ||
input = decoded; | ||
} | ||
if (typeof input === 'string') { | ||
if (debug) console.log("input is a string"); | ||
return ( | ||
input.endsWith(".asc") | ||
|| input.endsWith(".ASC") | ||
|| (input.includes('ncols') && input.includes('nrows')) | ||
); | ||
} else { | ||
return false; | ||
} | ||
if (typeof input === "string") { | ||
if (debug) console.log("input is a string"); | ||
return ( | ||
Boolean(input.match(/.asc(.gz|.tar|.tar.gz|.tgz|.zip)?$/i)) || | ||
(input.includes("ncols") && input.includes("nrows")) | ||
); | ||
} else { | ||
return false; | ||
} | ||
}; | ||
const NEWLINE_CHARCODE = "\n".charCodeAt(0); | ||
module.exports = (input, options={}) => { | ||
const debug = options.debug || false; | ||
const max_read_length = options.max_read_length || 500; | ||
module.exports = (input, options = {}) => { | ||
const debug = options.debug || false; | ||
const max_read_length = options.max_read_length || 500; | ||
const result = {}; | ||
if (typeof Buffer !== 'undefined' && Buffer.isBuffer(input)) { | ||
let i = 0; | ||
const result = {}; | ||
if (typeof Buffer !== "undefined" && Buffer.isBuffer(input)) { | ||
let i = 0; | ||
// parse metadata | ||
let line = null; | ||
// parse metadata | ||
let line = null; | ||
const read_length = Math.min(input.length, max_read_length); | ||
for (i = 0; i < read_length; i++) { | ||
const char = String.fromCharCode(input[i]); | ||
if (char === "\n") { | ||
const [param, value] = line.split(" "); | ||
result[param] = Number.parseFloat(value); | ||
line = null; | ||
} else if (line === null) { | ||
if (['-','0','1','2','3','4','5','6','7','8','9'].includes(char)) { | ||
break; | ||
} else { | ||
line = char; | ||
} | ||
} else { | ||
line += char; | ||
} | ||
const read_length = Math.min(input.length, max_read_length); | ||
for (i = 0; i < read_length; i++) { | ||
const char = String.fromCharCode(input[i]); | ||
if (char === "\n") { | ||
const [param, value] = line.split(" "); | ||
result[param] = Number.parseFloat(value); | ||
line = null; | ||
} else if (line === null) { | ||
if ( | ||
["-", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(char) | ||
) { | ||
break; | ||
} else { | ||
line = char; | ||
} | ||
} else { | ||
line += char; | ||
} | ||
} | ||
} | ||
if (input instanceof ArrayBuffer) input = new DataView(input); | ||
if (input instanceof ArrayBuffer) input = new DataView(input); | ||
if (input instanceof DataView) { | ||
const decoded = ""; | ||
input = decoded; | ||
} | ||
if (debug) console.log("result:", result); | ||
return result; | ||
if (input instanceof DataView) { | ||
const decoded = ""; | ||
input = decoded; | ||
} | ||
if (debug) console.log("result:", result); | ||
return result; | ||
}; |
46
test.js
@@ -1,27 +0,33 @@ | ||
const { readFileSync } = require('fs'); | ||
const test = require('ava'); | ||
const { readFileSync } = require("fs"); | ||
const test = require("ava"); | ||
const isAsciiGrid = require('./src/is-ascii-grid'); | ||
const parseAsciiGridMetaData = require('./src/parse-ascii-grid-meta'); | ||
const isAsciiGrid = require("./src/is-ascii-grid"); | ||
const parseAsciiGridMetaData = require("./src/parse-ascii-grid-meta"); | ||
test('identifying ascii grid file', async t => { | ||
const buffer = readFileSync('./test_data/michigan_lld/michigan_lld.asc'); | ||
const bufferIsAsciiGrid = isAsciiGrid(buffer, { debug: false }); | ||
t.is(bufferIsAsciiGrid, true); | ||
test("identifying ascii grid file extensions", async (t) => { | ||
t.true(isAsciiGrid("michigan_lld.asc")); | ||
t.true(isAsciiGrid("michigan_lld.asc.tar")); | ||
t.true(isAsciiGrid("michigan_lld.asc.tar.gz")); | ||
t.true(isAsciiGrid("michigan_lld.asc.zip")); | ||
t.false(isAsciiGrid("michigan_lld.asc.json")); | ||
}); | ||
test("identifying ascii grid file", async (t) => { | ||
const buffer = readFileSync("./test_data/michigan_lld/michigan_lld.asc"); | ||
const bufferIsAsciiGrid = isAsciiGrid(buffer, { debug: false }); | ||
t.is(bufferIsAsciiGrid, true); | ||
}); | ||
test('reading ascii metadata', async t => { | ||
const buffer = readFileSync('./test_data/michigan_lld/michigan_lld.asc'); | ||
const meta = parseAsciiGridMetaData(buffer, { debug: false }); | ||
test("reading ascii metadata", async (t) => { | ||
const buffer = readFileSync("./test_data/michigan_lld/michigan_lld.asc"); | ||
const meta = parseAsciiGridMetaData(buffer, { debug: false }); | ||
// check metadata | ||
t.is(meta.ncols, 4201); | ||
t.is(meta.nrows, 5365); | ||
t.is(meta.xllcenter, -88); | ||
t.is(meta.yllcenter, 41.62); | ||
t.is(meta.cellsize, 0.0008333333333); | ||
t.is(meta.nodata_value, -9999); | ||
// check metadata | ||
t.is(meta.ncols, 4201); | ||
t.is(meta.nrows, 5365); | ||
t.is(meta.xllcenter, -88); | ||
t.is(meta.yllcenter, 41.62); | ||
t.is(meta.cellsize, 0.0008333333333); | ||
t.is(meta.nodata_value, -9999); | ||
}); | ||
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
138
13183