deno.land / std@0.166.0 / node / _fs / _fs_dir.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.import Dirent from "./_fs_dirent.ts";import { assert } from "../../_util/asserts.ts";import { ERR_MISSING_ARGS } from "../internal/errors.ts";
export default class Dir { #dirPath: string | Uint8Array; #syncIterator!: Iterator<Deno.DirEntry, undefined> | null; #asyncIterator!: AsyncIterator<Deno.DirEntry, undefined> | null;
constructor(path: string | Uint8Array) { if (!path) { throw new ERR_MISSING_ARGS("path"); } this.#dirPath = path; }
get path(): string { if (this.#dirPath instanceof Uint8Array) { return new TextDecoder().decode(this.#dirPath); } return this.#dirPath; }
// deno-lint-ignore no-explicit-any read(callback?: (...args: any[]) => void): Promise<Dirent | null> { return new Promise((resolve, reject) => { if (!this.#asyncIterator) { this.#asyncIterator = Deno.readDir(this.path)[Symbol.asyncIterator](); } assert(this.#asyncIterator); this.#asyncIterator .next() .then((iteratorResult) => { resolve( iteratorResult.done ? null : new Dirent(iteratorResult.value), ); if (callback) { callback( null, iteratorResult.done ? null : new Dirent(iteratorResult.value), ); } }, (err) => { if (callback) { callback(err); } reject(err); }); }); }
readSync(): Dirent | null { if (!this.#syncIterator) { this.#syncIterator = Deno.readDirSync(this.path)![Symbol.iterator](); }
const iteratorResult = this.#syncIterator.next(); if (iteratorResult.done) { return null; } else { return new Dirent(iteratorResult.value); } }
/** * Unlike Node, Deno does not require managing resource ids for reading * directories, and therefore does not need to close directories when * finished reading. */ // deno-lint-ignore no-explicit-any close(callback?: (...args: any[]) => void): Promise<void> { return new Promise((resolve) => { if (callback) { callback(null); } resolve(); }); }
/** * Unlike Node, Deno does not require managing resource ids for reading * directories, and therefore does not need to close directories when * finished reading */ closeSync() { //No op }
async *[Symbol.asyncIterator](): AsyncIterableIterator<Dirent> { try { while (true) { const dirent: Dirent | null = await this.read(); if (dirent === null) { break; } yield dirent; } } finally { await this.close(); } }}
std

Version Info

Tagged at
a year ago