nbtify
Version:
A library to read and write NBT files on the web!
87 lines • 2.93 kB
JavaScript
const NBT_PATTERN = /^--nbt$/;
const SNBT_PATTERN = /^--snbt$/;
const JSON_PATTERN = /^--json$/;
const ROOT_NAME_PATTERN = /^--root-name=/;
const ENDIAN_PATTERN = /^--endian=/;
const COMPRESSION_PATTERN = /^--compression=/;
const BEDROCK_LEVEL_PATTERN = /^(?:--bedrock-level$|--bedrock-level=)/;
const SPACE_PATTERN = /^--space=/;
const args = process.argv.slice(2);
process.on("uncaughtException", error => {
console.error(`${error}`);
process.exit(1);
});
export const file = !process.stdin.isTTY
? process.stdin.fd
: args.shift() ?? (() => {
throw new TypeError("Missing argument 'input'");
})();
for (const arg of args) {
switch (true) {
case NBT_PATTERN.test(arg):
case SNBT_PATTERN.test(arg):
case JSON_PATTERN.test(arg):
case ROOT_NAME_PATTERN.test(arg):
case ENDIAN_PATTERN.test(arg):
case COMPRESSION_PATTERN.test(arg):
case BEDROCK_LEVEL_PATTERN.test(arg):
case SPACE_PATTERN.test(arg):
break;
default:
throw new TypeError(`Unexpected argument '${arg}'`);
}
}
export const nbt = args
.some(arg => NBT_PATTERN.test(arg));
export const snbt = args
.some(arg => SNBT_PATTERN.test(arg));
export const json = args
.some(arg => JSON_PATTERN.test(arg));
const rootName = args
.find(arg => ROOT_NAME_PATTERN.test(arg))
?.replace(ROOT_NAME_PATTERN, "");
const endian = (() => {
const value = args
.find(arg => ENDIAN_PATTERN.test(arg))
?.replace(ENDIAN_PATTERN, "");
if (value !== undefined && value !== "big" && value !== "little" && value !== "little-varint") {
value;
throw new TypeError("Endian option must be a valid endian type");
}
return value;
})();
const compression = (() => {
const value = args
.find(arg => COMPRESSION_PATTERN.test(arg))
?.replace(COMPRESSION_PATTERN, "");
if (value !== undefined && value !== "deflate" && value !== "deflate-raw" && value !== "gzip" && value !== "null") {
value;
throw new TypeError("Compression option must be a valid compression type");
}
return value === "null" ? null : value;
})();
const bedrockLevel = (() => {
const value = args
.find(arg => BEDROCK_LEVEL_PATTERN.test(arg))
?.replace(BEDROCK_LEVEL_PATTERN, "");
switch (value) {
case undefined: return value;
case "true":
case "": return true;
case "false": return false;
default: throw new TypeError("Bedrock Level must be a boolean");
}
})();
export const format = { rootName, endian, compression, bedrockLevel };
export const space = (() => {
const space = args
.find(arg => SPACE_PATTERN.test(arg))
?.replace(SPACE_PATTERN, "");
if (Number.isNaN(Number(space))) {
return space;
}
else {
return Number(space);
}
})();
//# sourceMappingURL=args.js.map