mirror of
https://github.com/denoland/deno.git
synced 2024-11-23 15:16:54 -05:00
feat: add readJson/readJsonSync for fs modules (denoland/deno_std#269)
Original: e4485d722a
This commit is contained in:
parent
511dbdde73
commit
a391660d2d
7 changed files with 148 additions and 0 deletions
42
fs/read_json.ts
Normal file
42
fs/read_json.ts
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||||
|
import * as path from "./path/mod.ts";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a JSON file and then parses it into an object
|
||||||
|
* @export
|
||||||
|
* @param {string} filePath
|
||||||
|
* @returns {Promise<any>}
|
||||||
|
*/
|
||||||
|
export async function readJson(filePath: string): Promise<any> {
|
||||||
|
filePath = path.resolve(filePath);
|
||||||
|
const decoder = new TextDecoder("utf-8");
|
||||||
|
|
||||||
|
const content = decoder.decode(await Deno.readFile(filePath));
|
||||||
|
|
||||||
|
try {
|
||||||
|
return JSON.parse(content);
|
||||||
|
} catch (err) {
|
||||||
|
err.message = `${filePath}: ${err.message}`;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a JSON file and then parses it into an object
|
||||||
|
* @export
|
||||||
|
* @param {string} filePath
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
export function readJsonSync(filePath: string): any {
|
||||||
|
filePath = path.resolve(filePath);
|
||||||
|
const decoder = new TextDecoder("utf-8");
|
||||||
|
|
||||||
|
const content = decoder.decode(Deno.readFileSync(filePath));
|
||||||
|
|
||||||
|
try {
|
||||||
|
return JSON.parse(content);
|
||||||
|
} catch (err) {
|
||||||
|
err.message = `${filePath}: ${err.message}`;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
91
fs/read_json_test.ts
Normal file
91
fs/read_json_test.ts
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||||
|
import { test } from "../testing/mod.ts";
|
||||||
|
import {
|
||||||
|
assertEquals,
|
||||||
|
assertThrowsAsync,
|
||||||
|
assertThrows
|
||||||
|
} from "../testing/asserts.ts";
|
||||||
|
import { readJson, readJsonSync } from "./read_json.ts";
|
||||||
|
import * as path from "./path/mod.ts";
|
||||||
|
|
||||||
|
const testdataDir = path.resolve("fs", "testdata");
|
||||||
|
|
||||||
|
test(async function readJsonFileNotExists() {
|
||||||
|
const emptyJsonFile = path.join(testdataDir, "json_not_exists.json");
|
||||||
|
|
||||||
|
await assertThrowsAsync(async () => {
|
||||||
|
await readJson(emptyJsonFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(async function readEmptyJsonFile() {
|
||||||
|
const emptyJsonFile = path.join(testdataDir, "json_empty.json");
|
||||||
|
|
||||||
|
await assertThrowsAsync(async () => {
|
||||||
|
await readJson(emptyJsonFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(async function readInvalidJsonFile() {
|
||||||
|
const invalidJsonFile = path.join(testdataDir, "json_invalid.json");
|
||||||
|
|
||||||
|
await assertThrowsAsync(async () => {
|
||||||
|
await readJson(invalidJsonFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(async function readValidJsonFile() {
|
||||||
|
const invalidJsonFile = path.join(testdataDir, "json_valid_array.json");
|
||||||
|
|
||||||
|
const json = await readJson(invalidJsonFile);
|
||||||
|
|
||||||
|
assertEquals(json, ["1", "2", "3"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(async function readValidJsonFile() {
|
||||||
|
const invalidJsonFile = path.join(testdataDir, "json_valid_obj.json");
|
||||||
|
|
||||||
|
const json = await readJson(invalidJsonFile);
|
||||||
|
|
||||||
|
assertEquals(json, { key1: "value1", key2: "value2" });
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function readJsonFileNotExistsSync() {
|
||||||
|
const emptyJsonFile = path.join(testdataDir, "json_not_exists.json");
|
||||||
|
|
||||||
|
assertThrows(() => {
|
||||||
|
readJsonSync(emptyJsonFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function readEmptyJsonFileSync() {
|
||||||
|
const emptyJsonFile = path.join(testdataDir, "json_empty.json");
|
||||||
|
|
||||||
|
assertThrows(() => {
|
||||||
|
readJsonSync(emptyJsonFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function readInvalidJsonFile() {
|
||||||
|
const invalidJsonFile = path.join(testdataDir, "json_invalid.json");
|
||||||
|
|
||||||
|
assertThrows(() => {
|
||||||
|
readJsonSync(invalidJsonFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function readValidJsonFile() {
|
||||||
|
const invalidJsonFile = path.join(testdataDir, "json_valid_array.json");
|
||||||
|
|
||||||
|
const json = readJsonSync(invalidJsonFile);
|
||||||
|
|
||||||
|
assertEquals(json, ["1", "2", "3"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function readValidJsonFile() {
|
||||||
|
const invalidJsonFile = path.join(testdataDir, "json_valid_obj.json");
|
||||||
|
|
||||||
|
const json = readJsonSync(invalidJsonFile);
|
||||||
|
|
||||||
|
assertEquals(json, { key1: "value1", key2: "value2" });
|
||||||
|
});
|
0
fs/testdata/json_empty.json
vendored
Normal file
0
fs/testdata/json_empty.json
vendored
Normal file
5
fs/testdata/json_invalid.json
vendored
Normal file
5
fs/testdata/json_invalid.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
[
|
||||||
|
"here is a invalid json file"
|
||||||
|
]
|
||||||
|
}
|
5
fs/testdata/json_valid_array.json
vendored
Normal file
5
fs/testdata/json_valid_array.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3"
|
||||||
|
]
|
4
fs/testdata/json_valid_obj.json
vendored
Normal file
4
fs/testdata/json_valid_obj.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2"
|
||||||
|
}
|
1
test.ts
1
test.ts
|
@ -18,6 +18,7 @@ import "./fs/empty_dir_test.ts";
|
||||||
import "./fs/ensure_dir_test.ts";
|
import "./fs/ensure_dir_test.ts";
|
||||||
import "./fs/ensure_file_test.ts";
|
import "./fs/ensure_file_test.ts";
|
||||||
import "./fs/move_test.ts";
|
import "./fs/move_test.ts";
|
||||||
|
import "./fs/read_json_test.ts";
|
||||||
import "./io/test.ts";
|
import "./io/test.ts";
|
||||||
import "./http/server_test.ts";
|
import "./http/server_test.ts";
|
||||||
import "./http/file_server_test.ts";
|
import "./http/file_server_test.ts";
|
||||||
|
|
Loading…
Reference in a new issue