mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 15:49:44 -05:00
parent
08087e921e
commit
878a9a29e7
37 changed files with 775 additions and 711 deletions
|
@ -384,27 +384,25 @@ export class Tar {
|
|||
*/
|
||||
getReader(): Deno.Reader {
|
||||
const readers: Deno.Reader[] = [];
|
||||
this.data.forEach(
|
||||
(tarData): void => {
|
||||
let { filePath, reader } = tarData,
|
||||
headerArr = formatHeader(tarData);
|
||||
readers.push(new Deno.Buffer(headerArr));
|
||||
if (!reader) {
|
||||
reader = new FileReader(filePath!);
|
||||
}
|
||||
readers.push(reader);
|
||||
|
||||
// to the nearest multiple of recordSize
|
||||
readers.push(
|
||||
new Deno.Buffer(
|
||||
clean(
|
||||
recordSize -
|
||||
(parseInt(tarData.fileSize!, 8) % recordSize || recordSize)
|
||||
)
|
||||
)
|
||||
);
|
||||
this.data.forEach((tarData): void => {
|
||||
let { filePath, reader } = tarData,
|
||||
headerArr = formatHeader(tarData);
|
||||
readers.push(new Deno.Buffer(headerArr));
|
||||
if (!reader) {
|
||||
reader = new FileReader(filePath!);
|
||||
}
|
||||
);
|
||||
readers.push(reader);
|
||||
|
||||
// to the nearest multiple of recordSize
|
||||
readers.push(
|
||||
new Deno.Buffer(
|
||||
clean(
|
||||
recordSize -
|
||||
(parseInt(tarData.fileSize!, 8) % recordSize || recordSize)
|
||||
)
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
// append 2 empty records
|
||||
readers.push(new Deno.Buffer(clean(recordSize * 2)));
|
||||
|
@ -461,22 +459,18 @@ export class Untar {
|
|||
"mtime",
|
||||
"uid",
|
||||
"gid"
|
||||
]).forEach(
|
||||
(key): void => {
|
||||
const arr = trim(header[key]);
|
||||
if (arr.byteLength > 0) {
|
||||
meta[key] = parseInt(decoder.decode(arr), 8);
|
||||
}
|
||||
]).forEach((key): void => {
|
||||
const arr = trim(header[key]);
|
||||
if (arr.byteLength > 0) {
|
||||
meta[key] = parseInt(decoder.decode(arr), 8);
|
||||
}
|
||||
);
|
||||
(["owner", "group"] as ["owner", "group"]).forEach(
|
||||
(key): void => {
|
||||
const arr = trim(header[key]);
|
||||
if (arr.byteLength > 0) {
|
||||
meta[key] = decoder.decode(arr);
|
||||
}
|
||||
});
|
||||
(["owner", "group"] as ["owner", "group"]).forEach((key): void => {
|
||||
const arr = trim(header[key]);
|
||||
if (arr.byteLength > 0) {
|
||||
meta[key] = decoder.decode(arr);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// read the file content
|
||||
const len = parseInt(decoder.decode(header.fileSize), 8);
|
||||
|
|
|
@ -69,20 +69,18 @@ export function instantiate(
|
|||
assert(module != null);
|
||||
assert(module.factory != null);
|
||||
|
||||
const dependencies = module.dependencies.map(
|
||||
(id): object => {
|
||||
if (id === "require") {
|
||||
// TODO(kitsonk) support dynamic import by passing a `require()` that
|
||||
// can return a local module or dynamically import one.
|
||||
return (): void => {};
|
||||
} else if (id === "exports") {
|
||||
return module.exports;
|
||||
}
|
||||
const dep = modules.get(id)!;
|
||||
assert(dep != null);
|
||||
return dep.exports;
|
||||
const dependencies = module.dependencies.map((id): object => {
|
||||
if (id === "require") {
|
||||
// TODO(kitsonk) support dynamic import by passing a `require()` that
|
||||
// can return a local module or dynamically import one.
|
||||
return (): void => {};
|
||||
} else if (id === "exports") {
|
||||
return module.exports;
|
||||
}
|
||||
);
|
||||
const dep = modules.get(id)!;
|
||||
assert(dep != null);
|
||||
return dep.exports;
|
||||
});
|
||||
|
||||
if (typeof module.factory === "function") {
|
||||
module.factory!(...dependencies);
|
||||
|
|
|
@ -84,25 +84,23 @@ async function read(
|
|||
result = line.split(opt.comma!);
|
||||
|
||||
let quoteError = false;
|
||||
result = result.map(
|
||||
(r): string => {
|
||||
if (opt.trimLeadingSpace) {
|
||||
r = r.trimLeft();
|
||||
}
|
||||
if (r[0] === '"' && r[r.length - 1] === '"') {
|
||||
r = r.substring(1, r.length - 1);
|
||||
} else if (r[0] === '"') {
|
||||
r = r.substring(1, r.length);
|
||||
}
|
||||
|
||||
if (!opt.lazyQuotes) {
|
||||
if (r[0] !== '"' && r.indexOf('"') !== -1) {
|
||||
quoteError = true;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
result = result.map((r): string => {
|
||||
if (opt.trimLeadingSpace) {
|
||||
r = r.trimLeft();
|
||||
}
|
||||
);
|
||||
if (r[0] === '"' && r[r.length - 1] === '"') {
|
||||
r = r.substring(1, r.length - 1);
|
||||
} else if (r[0] === '"') {
|
||||
r = r.substring(1, r.length);
|
||||
}
|
||||
|
||||
if (!opt.lazyQuotes) {
|
||||
if (r[0] !== '"' && r.indexOf('"') !== -1) {
|
||||
quoteError = true;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
});
|
||||
if (quoteError) {
|
||||
throw new ParseError(Startline, lineIndex, 'bare " in non-quoted-field');
|
||||
}
|
||||
|
@ -226,27 +224,25 @@ export async function parse(
|
|||
);
|
||||
i++;
|
||||
}
|
||||
return r.map(
|
||||
(e): unknown => {
|
||||
if (e.length !== headers.length) {
|
||||
throw `Error number of fields line:${i}`;
|
||||
}
|
||||
i++;
|
||||
let out: Record<string, unknown> = {};
|
||||
for (let j = 0; j < e.length; j++) {
|
||||
const h = headers[j];
|
||||
if (h.parse) {
|
||||
out[h.name] = h.parse(e[j]);
|
||||
} else {
|
||||
out[h.name] = e[j];
|
||||
}
|
||||
}
|
||||
if (opt.parse) {
|
||||
return opt.parse(out);
|
||||
}
|
||||
return out;
|
||||
return r.map((e): unknown => {
|
||||
if (e.length !== headers.length) {
|
||||
throw `Error number of fields line:${i}`;
|
||||
}
|
||||
);
|
||||
i++;
|
||||
let out: Record<string, unknown> = {};
|
||||
for (let j = 0; j < e.length; j++) {
|
||||
const h = headers[j];
|
||||
if (h.parse) {
|
||||
out[h.name] = h.parse(e[j]);
|
||||
} else {
|
||||
out[h.name] = e[j];
|
||||
}
|
||||
}
|
||||
if (opt.parse) {
|
||||
return opt.parse(out);
|
||||
}
|
||||
return out;
|
||||
});
|
||||
}
|
||||
if (opt.parse) {
|
||||
return r.map((e: string[]): unknown => opt.parse!(e));
|
||||
|
|
|
@ -403,24 +403,20 @@ class Dumper {
|
|||
_parse(obj: Record<string, unknown>, path: string = ""): string[] {
|
||||
const out = [];
|
||||
const props = Object.keys(obj);
|
||||
const propObj = props.filter(
|
||||
(e: string): boolean => {
|
||||
if (obj[e] instanceof Array) {
|
||||
const d: unknown[] = obj[e] as unknown[];
|
||||
return !this._isSimplySerializable(d[0]);
|
||||
}
|
||||
return !this._isSimplySerializable(obj[e]);
|
||||
const propObj = props.filter((e: string): boolean => {
|
||||
if (obj[e] instanceof Array) {
|
||||
const d: unknown[] = obj[e] as unknown[];
|
||||
return !this._isSimplySerializable(d[0]);
|
||||
}
|
||||
);
|
||||
const propPrim = props.filter(
|
||||
(e: string): boolean => {
|
||||
if (obj[e] instanceof Array) {
|
||||
const d: unknown[] = obj[e] as unknown[];
|
||||
return this._isSimplySerializable(d[0]);
|
||||
}
|
||||
return this._isSimplySerializable(obj[e]);
|
||||
return !this._isSimplySerializable(obj[e]);
|
||||
});
|
||||
const propPrim = props.filter((e: string): boolean => {
|
||||
if (obj[e] instanceof Array) {
|
||||
const d: unknown[] = obj[e] as unknown[];
|
||||
return this._isSimplySerializable(d[0]);
|
||||
}
|
||||
);
|
||||
return this._isSimplySerializable(obj[e]);
|
||||
});
|
||||
const k = propPrim.concat(propObj);
|
||||
for (let i = 0; i < k.length; i++) {
|
||||
const prop = k[i];
|
||||
|
|
16
flags/mod.ts
16
flags/mod.ts
|
@ -79,11 +79,9 @@ export function parse(
|
|||
? [options.boolean]
|
||||
: options.boolean;
|
||||
|
||||
booleanArgs.filter(Boolean).forEach(
|
||||
(key: string): void => {
|
||||
flags.bools[key] = true;
|
||||
}
|
||||
);
|
||||
booleanArgs.filter(Boolean).forEach((key: string): void => {
|
||||
flags.bools[key] = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -114,11 +112,9 @@ export function parse(
|
|||
flags.strings[key] = true;
|
||||
const alias = get(aliases, key);
|
||||
if (alias) {
|
||||
alias.forEach(
|
||||
(alias: string): void => {
|
||||
flags.strings[alias] = true;
|
||||
}
|
||||
);
|
||||
alias.forEach((alias: string): void => {
|
||||
flags.strings[alias] = true;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -587,18 +587,16 @@ const tests: Array<[string, any, string]> = [
|
|||
];
|
||||
|
||||
test(function testThorough(): void {
|
||||
tests.forEach(
|
||||
(t, i): void => {
|
||||
// p(t)
|
||||
let is = S(t[0], t[1]);
|
||||
let should = t[2];
|
||||
assertEquals(
|
||||
is,
|
||||
should,
|
||||
`failed case[${i}] : is >${is}< should >${should}<`
|
||||
);
|
||||
}
|
||||
);
|
||||
tests.forEach((t, i): void => {
|
||||
// p(t)
|
||||
let is = S(t[0], t[1]);
|
||||
let should = t[2];
|
||||
assertEquals(
|
||||
is,
|
||||
should,
|
||||
`failed case[${i}] : is >${is}< should >${should}<`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
test(function testWeirdos(): void {
|
||||
|
|
156
fs/copy_test.ts
156
fs/copy_test.ts
|
@ -317,11 +317,9 @@ testCopySync(
|
|||
(tempDir: string): void => {
|
||||
const srcFile = path.join(testdataDir, "copy_file_not_exists_sync.txt");
|
||||
const destFile = path.join(tempDir, "copy_file_not_exists_1_sync.txt");
|
||||
assertThrows(
|
||||
(): void => {
|
||||
copySync(srcFile, destFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
copySync(srcFile, destFile);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -367,50 +365,47 @@ testCopySync(
|
|||
}
|
||||
);
|
||||
|
||||
testCopySync(
|
||||
"[fs] copy file synchronously",
|
||||
(tempDir: string): void => {
|
||||
const srcFile = path.join(testdataDir, "copy_file.txt");
|
||||
const destFile = path.join(tempDir, "copy_file_copy_sync.txt");
|
||||
testCopySync("[fs] copy file synchronously", (tempDir: string): void => {
|
||||
const srcFile = path.join(testdataDir, "copy_file.txt");
|
||||
const destFile = path.join(tempDir, "copy_file_copy_sync.txt");
|
||||
|
||||
const srcContent = new TextDecoder().decode(Deno.readFileSync(srcFile));
|
||||
const srcContent = new TextDecoder().decode(Deno.readFileSync(srcFile));
|
||||
|
||||
assertEquals(existsSync(srcFile), true);
|
||||
assertEquals(existsSync(destFile), false);
|
||||
assertEquals(existsSync(srcFile), true);
|
||||
assertEquals(existsSync(destFile), false);
|
||||
|
||||
copySync(srcFile, destFile);
|
||||
copySync(srcFile, destFile);
|
||||
|
||||
assertEquals(existsSync(srcFile), true);
|
||||
assertEquals(existsSync(destFile), true);
|
||||
assertEquals(existsSync(srcFile), true);
|
||||
assertEquals(existsSync(destFile), true);
|
||||
|
||||
const destContent = new TextDecoder().decode(Deno.readFileSync(destFile));
|
||||
const destContent = new TextDecoder().decode(Deno.readFileSync(destFile));
|
||||
|
||||
assertEquals(srcContent, destContent);
|
||||
assertEquals(srcContent, destContent);
|
||||
|
||||
// Copy again without overwrite option and it should throw an error.
|
||||
assertThrows(
|
||||
(): void => {
|
||||
copySync(srcFile, destFile);
|
||||
},
|
||||
Error,
|
||||
`'${destFile}' already exists.`
|
||||
);
|
||||
// Copy again without overwrite option and it should throw an error.
|
||||
assertThrows(
|
||||
(): void => {
|
||||
copySync(srcFile, destFile);
|
||||
},
|
||||
Error,
|
||||
`'${destFile}' already exists.`
|
||||
);
|
||||
|
||||
// Modify destination file.
|
||||
Deno.writeFileSync(destFile, new TextEncoder().encode("txt copy"));
|
||||
// Modify destination file.
|
||||
Deno.writeFileSync(destFile, new TextEncoder().encode("txt copy"));
|
||||
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(destFile)),
|
||||
"txt copy"
|
||||
);
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(destFile)),
|
||||
"txt copy"
|
||||
);
|
||||
|
||||
// Copy again with overwrite option.
|
||||
copySync(srcFile, destFile, { overwrite: true });
|
||||
// Copy again with overwrite option.
|
||||
copySync(srcFile, destFile, { overwrite: true });
|
||||
|
||||
// Make sure the file has been overwritten.
|
||||
assertEquals(new TextDecoder().decode(Deno.readFileSync(destFile)), "txt");
|
||||
}
|
||||
);
|
||||
// Make sure the file has been overwritten.
|
||||
assertEquals(new TextDecoder().decode(Deno.readFileSync(destFile)), "txt");
|
||||
});
|
||||
|
||||
testCopySync(
|
||||
"[fs] copy directory synchronously to its subdirectory",
|
||||
|
@ -450,57 +445,54 @@ testCopySync(
|
|||
}
|
||||
);
|
||||
|
||||
testCopySync(
|
||||
"[fs] copy directory synchronously",
|
||||
(tempDir: string): void => {
|
||||
const srcDir = path.join(testdataDir, "copy_dir");
|
||||
const destDir = path.join(tempDir, "copy_dir_copy_sync");
|
||||
const srcFile = path.join(srcDir, "0.txt");
|
||||
const destFile = path.join(destDir, "0.txt");
|
||||
const srcNestFile = path.join(srcDir, "nest", "0.txt");
|
||||
const destNestFile = path.join(destDir, "nest", "0.txt");
|
||||
testCopySync("[fs] copy directory synchronously", (tempDir: string): void => {
|
||||
const srcDir = path.join(testdataDir, "copy_dir");
|
||||
const destDir = path.join(tempDir, "copy_dir_copy_sync");
|
||||
const srcFile = path.join(srcDir, "0.txt");
|
||||
const destFile = path.join(destDir, "0.txt");
|
||||
const srcNestFile = path.join(srcDir, "nest", "0.txt");
|
||||
const destNestFile = path.join(destDir, "nest", "0.txt");
|
||||
|
||||
copySync(srcDir, destDir);
|
||||
copySync(srcDir, destDir);
|
||||
|
||||
assertEquals(existsSync(destFile), true);
|
||||
assertEquals(existsSync(destNestFile), true);
|
||||
assertEquals(existsSync(destFile), true);
|
||||
assertEquals(existsSync(destNestFile), true);
|
||||
|
||||
// After copy. The source and destination should have the same content.
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(srcFile)),
|
||||
new TextDecoder().decode(Deno.readFileSync(destFile))
|
||||
);
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(srcNestFile)),
|
||||
new TextDecoder().decode(Deno.readFileSync(destNestFile))
|
||||
);
|
||||
// After copy. The source and destination should have the same content.
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(srcFile)),
|
||||
new TextDecoder().decode(Deno.readFileSync(destFile))
|
||||
);
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(srcNestFile)),
|
||||
new TextDecoder().decode(Deno.readFileSync(destNestFile))
|
||||
);
|
||||
|
||||
// Copy again without overwrite option and it should throw an error.
|
||||
assertThrows(
|
||||
(): void => {
|
||||
copySync(srcDir, destDir);
|
||||
},
|
||||
Error,
|
||||
`'${destDir}' already exists.`
|
||||
);
|
||||
// Copy again without overwrite option and it should throw an error.
|
||||
assertThrows(
|
||||
(): void => {
|
||||
copySync(srcDir, destDir);
|
||||
},
|
||||
Error,
|
||||
`'${destDir}' already exists.`
|
||||
);
|
||||
|
||||
// Modify the file in the destination directory.
|
||||
Deno.writeFileSync(destNestFile, new TextEncoder().encode("nest copy"));
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(destNestFile)),
|
||||
"nest copy"
|
||||
);
|
||||
// Modify the file in the destination directory.
|
||||
Deno.writeFileSync(destNestFile, new TextEncoder().encode("nest copy"));
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(destNestFile)),
|
||||
"nest copy"
|
||||
);
|
||||
|
||||
// Copy again with overwrite option.
|
||||
copySync(srcDir, destDir, { overwrite: true });
|
||||
// Copy again with overwrite option.
|
||||
copySync(srcDir, destDir, { overwrite: true });
|
||||
|
||||
// Make sure the file has been overwritten.
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(destNestFile)),
|
||||
"nest"
|
||||
);
|
||||
}
|
||||
);
|
||||
// Make sure the file has been overwritten.
|
||||
assertEquals(
|
||||
new TextDecoder().decode(Deno.readFileSync(destNestFile)),
|
||||
"nest"
|
||||
);
|
||||
});
|
||||
|
||||
testCopySync(
|
||||
"[fs] copy symlink file synchronously",
|
||||
|
|
|
@ -110,18 +110,14 @@ test(function emptyDirSyncIfItExist(): void {
|
|||
assertEquals(stat.isDirectory(), true);
|
||||
|
||||
// nest directory have been remove
|
||||
assertThrows(
|
||||
(): void => {
|
||||
Deno.statSync(testNestDir);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
Deno.statSync(testNestDir);
|
||||
});
|
||||
|
||||
// test file have been remove
|
||||
assertThrows(
|
||||
(): void => {
|
||||
Deno.statSync(testDirFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
Deno.statSync(testDirFile);
|
||||
});
|
||||
} finally {
|
||||
// remote test dir
|
||||
Deno.removeSync(testDir, { recursive: true });
|
||||
|
|
|
@ -15,11 +15,9 @@ test(async function ensureDirIfItNotExist(): Promise<void> {
|
|||
|
||||
await assertThrowsAsync(
|
||||
async (): Promise<void> => {
|
||||
await Deno.stat(testDir).then(
|
||||
(): void => {
|
||||
throw new Error("test dir should exists.");
|
||||
}
|
||||
);
|
||||
await Deno.stat(testDir).then((): void => {
|
||||
throw new Error("test dir should exists.");
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -48,11 +46,9 @@ test(async function ensureDirIfItExist(): Promise<void> {
|
|||
|
||||
await assertThrowsAsync(
|
||||
async (): Promise<void> => {
|
||||
await Deno.stat(testDir).then(
|
||||
(): void => {
|
||||
throw new Error("test dir should still exists.");
|
||||
}
|
||||
);
|
||||
await Deno.stat(testDir).then((): void => {
|
||||
throw new Error("test dir should still exists.");
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -68,12 +64,10 @@ test(function ensureDirSyncIfItExist(): void {
|
|||
|
||||
ensureDirSync(testDir);
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
Deno.statSync(testDir);
|
||||
throw new Error("test dir should still exists.");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
Deno.statSync(testDir);
|
||||
throw new Error("test dir should still exists.");
|
||||
});
|
||||
|
||||
Deno.removeSync(baseDir, { recursive: true });
|
||||
});
|
||||
|
|
|
@ -14,11 +14,9 @@ test(async function ensureFileIfItNotExist(): Promise<void> {
|
|||
|
||||
await assertThrowsAsync(
|
||||
async (): Promise<void> => {
|
||||
await Deno.stat(testFile).then(
|
||||
(): void => {
|
||||
throw new Error("test file should exists.");
|
||||
}
|
||||
);
|
||||
await Deno.stat(testFile).then((): void => {
|
||||
throw new Error("test file should exists.");
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -31,12 +29,10 @@ test(function ensureFileSyncIfItNotExist(): void {
|
|||
|
||||
ensureFileSync(testFile);
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
Deno.statSync(testFile);
|
||||
throw new Error("test file should exists.");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
Deno.statSync(testFile);
|
||||
throw new Error("test file should exists.");
|
||||
});
|
||||
|
||||
Deno.removeSync(testDir, { recursive: true });
|
||||
});
|
||||
|
@ -52,11 +48,9 @@ test(async function ensureFileIfItExist(): Promise<void> {
|
|||
|
||||
await assertThrowsAsync(
|
||||
async (): Promise<void> => {
|
||||
await Deno.stat(testFile).then(
|
||||
(): void => {
|
||||
throw new Error("test file should exists.");
|
||||
}
|
||||
);
|
||||
await Deno.stat(testFile).then((): void => {
|
||||
throw new Error("test file should exists.");
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -72,12 +66,10 @@ test(function ensureFileSyncIfItExist(): void {
|
|||
|
||||
ensureFileSync(testFile);
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
Deno.statSync(testFile);
|
||||
throw new Error("test file should exists.");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
Deno.statSync(testFile);
|
||||
throw new Error("test file should exists.");
|
||||
});
|
||||
|
||||
Deno.removeSync(testDir, { recursive: true });
|
||||
});
|
||||
|
|
|
@ -31,11 +31,9 @@ test(function ensureLinkSyncIfItNotExist(): void {
|
|||
const testFile = path.join(testDir, "test.txt");
|
||||
const linkFile = path.join(testDir, "link.txt");
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
ensureLinkSync(testFile, linkFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
ensureLinkSync(testFile, linkFile);
|
||||
});
|
||||
|
||||
Deno.removeSync(testDir, { recursive: true });
|
||||
});
|
||||
|
|
|
@ -24,11 +24,9 @@ test(async function ensureSymlinkIfItNotExist(): Promise<void> {
|
|||
|
||||
assertThrowsAsync(
|
||||
async (): Promise<void> => {
|
||||
await Deno.stat(testFile).then(
|
||||
(): void => {
|
||||
throw new Error("test file should exists.");
|
||||
}
|
||||
);
|
||||
await Deno.stat(testFile).then((): void => {
|
||||
throw new Error("test file should exists.");
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
@ -37,18 +35,14 @@ test(function ensureSymlinkSyncIfItNotExist(): void {
|
|||
const testDir = path.join(testdataDir, "link_file_2");
|
||||
const testFile = path.join(testDir, "test.txt");
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
ensureSymlinkSync(testFile, path.join(testDir, "test1.txt"));
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
ensureSymlinkSync(testFile, path.join(testDir, "test1.txt"));
|
||||
});
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
Deno.statSync(testFile);
|
||||
throw new Error("test file should exists.");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
Deno.statSync(testFile);
|
||||
throw new Error("test file should exists.");
|
||||
});
|
||||
});
|
||||
|
||||
test(async function ensureSymlinkIfItExist(): Promise<void> {
|
||||
|
|
|
@ -182,11 +182,9 @@ test(function moveSyncDirectoryIfSrcNotExists(): void {
|
|||
const srcDir = path.join(testdataDir, "move_sync_test_src_1");
|
||||
const destDir = path.join(testdataDir, "move_sync_test_dest_1");
|
||||
// if src directory not exist
|
||||
assertThrows(
|
||||
(): void => {
|
||||
moveSync(srcDir, destDir);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
moveSync(srcDir, destDir);
|
||||
});
|
||||
});
|
||||
|
||||
test(function moveSyncDirectoryIfDestNotExists(): void {
|
||||
|
@ -213,11 +211,9 @@ test(function moveSyncFileIfSrcNotExists(): void {
|
|||
const destFile = path.join(testdataDir, "move_sync_test_dest_3", "test.txt");
|
||||
|
||||
// if src directory not exist
|
||||
assertThrows(
|
||||
(): void => {
|
||||
moveSync(srcFile, destFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
moveSync(srcFile, destFile);
|
||||
});
|
||||
});
|
||||
|
||||
test(function moveSyncFileIfDestExists(): void {
|
||||
|
|
|
@ -65,31 +65,25 @@ test(async function readValidObjJsonFileWithRelativePath(): Promise<void> {
|
|||
test(function readJsonFileNotExistsSync(): void {
|
||||
const emptyJsonFile = path.join(testdataDir, "json_not_exists.json");
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
readJsonSync(emptyJsonFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
readJsonSync(emptyJsonFile);
|
||||
});
|
||||
});
|
||||
|
||||
test(function readEmptyJsonFileSync(): void {
|
||||
const emptyJsonFile = path.join(testdataDir, "json_empty.json");
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
readJsonSync(emptyJsonFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
readJsonSync(emptyJsonFile);
|
||||
});
|
||||
});
|
||||
|
||||
test(function readInvalidJsonFile(): void {
|
||||
const invalidJsonFile = path.join(testdataDir, "json_invalid.json");
|
||||
|
||||
assertThrows(
|
||||
(): void => {
|
||||
readJsonSync(invalidJsonFile);
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
readJsonSync(invalidJsonFile);
|
||||
});
|
||||
});
|
||||
|
||||
test(function readValidArrayJsonFileSync(): void {
|
||||
|
|
12
fs/walk.ts
12
fs/walk.ts
|
@ -19,13 +19,11 @@ function patternTest(patterns: RegExp[], path: string): boolean {
|
|||
// Forced to reset last index on regex while iterating for have
|
||||
// consistent results.
|
||||
// See: https://stackoverflow.com/a/1520853
|
||||
return patterns.some(
|
||||
(pattern): boolean => {
|
||||
let r = pattern.test(path);
|
||||
pattern.lastIndex = 0;
|
||||
return r;
|
||||
}
|
||||
);
|
||||
return patterns.some((pattern): boolean => {
|
||||
let r = pattern.test(path);
|
||||
pattern.lastIndex = 0;
|
||||
return r;
|
||||
});
|
||||
}
|
||||
|
||||
function include(filename: string, options: WalkOptions): boolean {
|
||||
|
|
|
@ -75,11 +75,9 @@ function modeToString(isDir: boolean, maybeMode: number | null): string {
|
|||
.split("")
|
||||
.reverse()
|
||||
.slice(0, 3)
|
||||
.forEach(
|
||||
(v): void => {
|
||||
output = modeMap[+v] + output;
|
||||
}
|
||||
);
|
||||
.forEach((v): void => {
|
||||
output = modeMap[+v] + output;
|
||||
});
|
||||
output = `(${isDir ? "d" : "-"}${output})`;
|
||||
return output;
|
||||
}
|
||||
|
@ -179,9 +177,8 @@ async function serveDir(
|
|||
dirViewerTemplate.replace("<%DIRNAME%>", formattedDirUrl).replace(
|
||||
"<%CONTENTS%>",
|
||||
listEntry
|
||||
.sort(
|
||||
(a, b): number =>
|
||||
a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1
|
||||
.sort((a, b): number =>
|
||||
a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1
|
||||
)
|
||||
.map((v): string => v.template)
|
||||
.join("")
|
||||
|
|
|
@ -504,11 +504,9 @@ test({
|
|||
|
||||
let serverIsRunning = true;
|
||||
p.status()
|
||||
.then(
|
||||
(): void => {
|
||||
serverIsRunning = false;
|
||||
}
|
||||
)
|
||||
.then((): void => {
|
||||
serverIsRunning = false;
|
||||
})
|
||||
.catch((_): void => {}); // Ignores the error when closing the process.
|
||||
|
||||
await delay(100);
|
||||
|
|
|
@ -37,19 +37,16 @@ export class BaseHandler {
|
|||
return this.formatter(logRecord);
|
||||
}
|
||||
|
||||
return this.formatter.replace(
|
||||
/{(\S+)}/g,
|
||||
(match, p1): string => {
|
||||
const value = logRecord[p1 as keyof LogRecord];
|
||||
return this.formatter.replace(/{(\S+)}/g, (match, p1): string => {
|
||||
const value = logRecord[p1 as keyof LogRecord];
|
||||
|
||||
// do not interpolate missing values
|
||||
if (!value) {
|
||||
return match;
|
||||
}
|
||||
|
||||
return String(value);
|
||||
// do not interpolate missing values
|
||||
if (!value) {
|
||||
return match;
|
||||
}
|
||||
);
|
||||
|
||||
return String(value);
|
||||
});
|
||||
}
|
||||
|
||||
log(_msg: string): void {}
|
||||
|
|
|
@ -36,11 +36,9 @@ export class Logger {
|
|||
level: level,
|
||||
levelName: getLevelName(level)
|
||||
};
|
||||
this.handlers.forEach(
|
||||
(handler): void => {
|
||||
handler.handle(record);
|
||||
}
|
||||
);
|
||||
this.handlers.forEach((handler): void => {
|
||||
handler.handle(record);
|
||||
});
|
||||
}
|
||||
|
||||
debug(msg: string, ...args: unknown[]): void {
|
||||
|
|
18
log/mod.ts
18
log/mod.ts
|
@ -80,11 +80,9 @@ export async function setup(config: LogConfig): Promise<void> {
|
|||
};
|
||||
|
||||
// tear down existing handlers
|
||||
state.handlers.forEach(
|
||||
(handler): void => {
|
||||
handler.destroy();
|
||||
}
|
||||
);
|
||||
state.handlers.forEach((handler): void => {
|
||||
handler.destroy();
|
||||
});
|
||||
state.handlers.clear();
|
||||
|
||||
// setup handlers
|
||||
|
@ -106,13 +104,11 @@ export async function setup(config: LogConfig): Promise<void> {
|
|||
const handlerNames = loggerConfig.handlers || [];
|
||||
const handlers: BaseHandler[] = [];
|
||||
|
||||
handlerNames.forEach(
|
||||
(handlerName): void => {
|
||||
if (state.handlers.has(handlerName)) {
|
||||
handlers.push(state.handlers.get(handlerName)!);
|
||||
}
|
||||
handlerNames.forEach((handlerName): void => {
|
||||
if (state.handlers.has(handlerName)) {
|
||||
handlers.push(state.handlers.get(handlerName)!);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
const levelName = loggerConfig.level || DEFAULT_LEVEL;
|
||||
const logger = new Logger(levelName, handlers);
|
||||
|
|
|
@ -188,20 +188,18 @@ class PartReader implements Reader, Closer {
|
|||
comps
|
||||
.slice(1)
|
||||
.map((v: string): string => v.trim())
|
||||
.map(
|
||||
(kv: string): void => {
|
||||
const [k, v] = kv.split("=");
|
||||
if (v) {
|
||||
const s = v.charAt(0);
|
||||
const e = v.charAt(v.length - 1);
|
||||
if ((s === e && s === '"') || s === "'") {
|
||||
params[k] = v.substr(1, v.length - 2);
|
||||
} else {
|
||||
params[k] = v;
|
||||
}
|
||||
.map((kv: string): void => {
|
||||
const [k, v] = kv.split("=");
|
||||
if (v) {
|
||||
const s = v.charAt(0);
|
||||
const e = v.charAt(v.length - 1);
|
||||
if ((s === e && s === '"') || s === "'") {
|
||||
params[k] = v.substr(1, v.length - 2);
|
||||
} else {
|
||||
params[k] = v;
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
return (this.contentDispositionParams = params);
|
||||
}
|
||||
|
||||
|
|
4
prettier/vendor/parser_babylon.js
vendored
4
prettier/vendor/parser_babylon.js
vendored
File diff suppressed because one or more lines are too long
2
prettier/vendor/parser_markdown.js
vendored
2
prettier/vendor/parser_markdown.js
vendored
|
@ -1,4 +1,4 @@
|
|||
// This file is copied from prettier@1.17.1
|
||||
// This file is copied from prettier@1.18.2
|
||||
/**
|
||||
* Copyright © James Long and contributors
|
||||
*
|
||||
|
|
4
prettier/vendor/parser_typescript.js
vendored
4
prettier/vendor/parser_typescript.js
vendored
File diff suppressed because one or more lines are too long
643
prettier/vendor/standalone.js
vendored
643
prettier/vendor/standalone.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -89,11 +89,9 @@ Using `assertThrows()`:
|
|||
|
||||
```ts
|
||||
test(function doesThrow(): void {
|
||||
assertThrows(
|
||||
(): void => {
|
||||
throw new TypeError("hello world!");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
throw new TypeError("hello world!");
|
||||
});
|
||||
assertThrows((): void => {
|
||||
throw new TypeError("hello world!");
|
||||
}, TypeError);
|
||||
|
@ -108,11 +106,9 @@ test(function doesThrow(): void {
|
|||
|
||||
// This test will not pass
|
||||
test(function fails(): void {
|
||||
assertThrows(
|
||||
(): void => {
|
||||
console.log("Hello world");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
console.log("Hello world");
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
|
|
|
@ -56,12 +56,10 @@ function buildMessage(diffResult: ReadonlyArray<DiffResult<string>>): string[] {
|
|||
);
|
||||
messages.push("");
|
||||
messages.push("");
|
||||
diffResult.forEach(
|
||||
(result: DiffResult<string>): void => {
|
||||
const c = createColor(result.type);
|
||||
messages.push(c(`${createSign(result.type)}${result.value}`));
|
||||
}
|
||||
);
|
||||
diffResult.forEach((result: DiffResult<string>): void => {
|
||||
const c = createColor(result.type);
|
||||
messages.push(c(`${createSign(result.type)}${result.value}`));
|
||||
});
|
||||
messages.push("");
|
||||
|
||||
return messages;
|
||||
|
|
|
@ -360,13 +360,11 @@ const getKeysOfEnumerableProperties = (object: {}): Array<string | symbol> => {
|
|||
const keys: Array<string | symbol> = Object.keys(object).sort();
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
Object.getOwnPropertySymbols(object).forEach(
|
||||
(symbol): void => {
|
||||
if (Object.getOwnPropertyDescriptor(object, symbol)!.enumerable) {
|
||||
keys.push(symbol);
|
||||
}
|
||||
Object.getOwnPropertySymbols(object).forEach((symbol): void => {
|
||||
if (Object.getOwnPropertyDescriptor(object, symbol)!.enumerable) {
|
||||
keys.push(symbol);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
return keys;
|
||||
|
|
|
@ -203,14 +203,12 @@ function report(result: TestResult): void {
|
|||
}
|
||||
|
||||
function printFailedSummary(results: TestResults): void {
|
||||
results.cases.forEach(
|
||||
(v): void => {
|
||||
if (!v.ok) {
|
||||
console.error(`${RED_BG_FAIL} ${red(v.name)}`);
|
||||
console.error(v.error);
|
||||
}
|
||||
results.cases.forEach((v): void => {
|
||||
if (!v.ok) {
|
||||
console.error(`${RED_BG_FAIL} ${red(v.name)}`);
|
||||
console.error(v.error);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function printResults(
|
||||
|
@ -322,14 +320,12 @@ async function runTestsSerial(
|
|||
print(
|
||||
GREEN_OK + " " + name + " " + promptTestTime(end - start, true)
|
||||
);
|
||||
results.cases.forEach(
|
||||
(v): void => {
|
||||
if (v.name === name) {
|
||||
v.ok = true;
|
||||
v.printed = true;
|
||||
}
|
||||
results.cases.forEach((v): void => {
|
||||
if (v.name === name) {
|
||||
v.ok = true;
|
||||
v.printed = true;
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (err) {
|
||||
if (disableLog) {
|
||||
print(CLEAR_LINE, false);
|
||||
|
@ -337,15 +333,13 @@ async function runTestsSerial(
|
|||
print(`${RED_FAILED} ${name}`);
|
||||
print(err.stack);
|
||||
stats.failed++;
|
||||
results.cases.forEach(
|
||||
(v): void => {
|
||||
if (v.name === name) {
|
||||
v.error = err;
|
||||
v.ok = false;
|
||||
v.printed = true;
|
||||
}
|
||||
results.cases.forEach((v): void => {
|
||||
if (v.name === name) {
|
||||
v.error = err;
|
||||
v.ok = false;
|
||||
v.printed = true;
|
||||
}
|
||||
);
|
||||
});
|
||||
if (exitOnFail) {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -85,13 +85,11 @@ export async function getMatchingUrls(
|
|||
);
|
||||
const matchingRemoteUrls = includeRemote.filter(
|
||||
(candidateUrl: string): boolean => {
|
||||
return !excludeRemotePatterns.some(
|
||||
(pattern: RegExp): boolean => {
|
||||
const r = pattern.test(candidateUrl);
|
||||
pattern.lastIndex = 0;
|
||||
return r;
|
||||
}
|
||||
);
|
||||
return !excludeRemotePatterns.some((pattern: RegExp): boolean => {
|
||||
const r = pattern.test(candidateUrl);
|
||||
pattern.lastIndex = 0;
|
||||
return r;
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -135,11 +133,9 @@ export async function main(root: string = cwd()): Promise<void> {
|
|||
|
||||
if (parsedArgs._.length) {
|
||||
includeFiles = (parsedArgs._ as string[])
|
||||
.map(
|
||||
(fileGlob: string): string[] => {
|
||||
return fileGlob.split(",");
|
||||
}
|
||||
)
|
||||
.map((fileGlob: string): string[] => {
|
||||
return fileGlob.split(",");
|
||||
})
|
||||
.flat();
|
||||
} else {
|
||||
includeFiles = DEFAULT_GLOBS;
|
||||
|
|
|
@ -51,12 +51,10 @@ test(function testingAssertNotStrictEqual(): void {
|
|||
|
||||
test(function testingDoesThrow(): void {
|
||||
let count = 0;
|
||||
assertThrows(
|
||||
(): void => {
|
||||
count++;
|
||||
throw new Error();
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
count++;
|
||||
throw new Error();
|
||||
});
|
||||
assert(count === 1);
|
||||
});
|
||||
|
||||
|
@ -64,12 +62,10 @@ test(function testingDoesNotThrow(): void {
|
|||
let count = 0;
|
||||
let didThrow = false;
|
||||
try {
|
||||
assertThrows(
|
||||
(): void => {
|
||||
count++;
|
||||
console.log("Hello world");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
count++;
|
||||
console.log("Hello world");
|
||||
});
|
||||
} catch (e) {
|
||||
assert(e.message === "Expected function to throw.");
|
||||
didThrow = true;
|
||||
|
|
|
@ -114,11 +114,9 @@ test({
|
|||
assertEquals(m.get("SID"), "0");
|
||||
assertEquals(m.get("Privilege"), "127");
|
||||
// Not a legal http header
|
||||
assertThrows(
|
||||
(): void => {
|
||||
assertEquals(m.get("Audio Mode"), "None");
|
||||
}
|
||||
);
|
||||
assertThrows((): void => {
|
||||
assertEquals(m.get("Audio Mode"), "None");
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -20,11 +20,9 @@ export interface Deferred<T> extends Promise<T> {
|
|||
*/
|
||||
export function deferred<T>(): Deferred<T> {
|
||||
let methods;
|
||||
const promise = new Promise<T>(
|
||||
(resolve, reject): void => {
|
||||
methods = { resolve, reject };
|
||||
}
|
||||
);
|
||||
const promise = new Promise<T>((resolve, reject): void => {
|
||||
methods = { resolve, reject };
|
||||
});
|
||||
return Object.assign(promise, methods)! as Deferred<T>;
|
||||
}
|
||||
|
||||
|
@ -111,10 +109,9 @@ export async function collectUint8Arrays(
|
|||
|
||||
// Delays the given milliseconds and resolves.
|
||||
export function delay(ms: number): Promise<void> {
|
||||
return new Promise(
|
||||
(res): number =>
|
||||
setTimeout((): void => {
|
||||
res();
|
||||
}, ms)
|
||||
return new Promise((res): number =>
|
||||
setTimeout((): void => {
|
||||
res();
|
||||
}, ms)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -8,26 +8,24 @@ export function deepAssign(
|
|||
if (!source || typeof source !== `object`) {
|
||||
return;
|
||||
}
|
||||
Object.entries(source).forEach(
|
||||
([key, value]: [string, unknown]): void => {
|
||||
if (value instanceof Date) {
|
||||
target[key] = new Date(value);
|
||||
return;
|
||||
}
|
||||
if (!value || typeof value !== `object`) {
|
||||
target[key] = value;
|
||||
return;
|
||||
}
|
||||
if (Array.isArray(value)) {
|
||||
target[key] = [];
|
||||
}
|
||||
// value is an Object
|
||||
if (typeof target[key] !== `object` || !target[key]) {
|
||||
target[key] = {};
|
||||
}
|
||||
deepAssign(target[key] as Record<string, unknown>, value!);
|
||||
Object.entries(source).forEach(([key, value]: [string, unknown]): void => {
|
||||
if (value instanceof Date) {
|
||||
target[key] = new Date(value);
|
||||
return;
|
||||
}
|
||||
);
|
||||
if (!value || typeof value !== `object`) {
|
||||
target[key] = value;
|
||||
return;
|
||||
}
|
||||
if (Array.isArray(value)) {
|
||||
target[key] = [];
|
||||
}
|
||||
// value is an Object
|
||||
if (typeof target[key] !== `object` || !target[key]) {
|
||||
target[key] = {};
|
||||
}
|
||||
deepAssign(target[key] as Record<string, unknown>, value!);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
|
10
uuid/v4.ts
10
uuid/v4.ts
|
@ -15,12 +15,10 @@ export default function generate(): string {
|
|||
rnds[6] = (rnds[6] & 0x0f) | 0x40; // Version 4
|
||||
rnds[8] = (rnds[8] & 0x3f) | 0x80; // Variant 10
|
||||
|
||||
const bits: string[] = [...rnds].map(
|
||||
(bit): string => {
|
||||
const s: string = bit.toString(16);
|
||||
return bit < 0x10 ? "0" + s : s;
|
||||
}
|
||||
);
|
||||
const bits: string[] = [...rnds].map((bit): string => {
|
||||
const s: string = bit.toString(16);
|
||||
return bit < 0x10 ? "0" + s : s;
|
||||
});
|
||||
return [
|
||||
...bits.slice(0, 4),
|
||||
"-",
|
||||
|
|
|
@ -60,11 +60,9 @@ async function main(): Promise<void> {
|
|||
}
|
||||
}
|
||||
)
|
||||
.catch(
|
||||
(err: Error): void => {
|
||||
console.error(`failed to accept websocket: ${err}`);
|
||||
}
|
||||
);
|
||||
.catch((err: Error): void => {
|
||||
console.error(`failed to accept websocket: ${err}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -53,11 +53,9 @@ async function main(): Promise<void> {
|
|||
}
|
||||
}
|
||||
)
|
||||
.catch(
|
||||
(err: Error): void => {
|
||||
console.error(`failed to accept websocket: ${err}`);
|
||||
}
|
||||
);
|
||||
.catch((err: Error): void => {
|
||||
console.error(`failed to accept websocket: ${err}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue