@isopodlabs/binary_libs 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,26 +1,43 @@
1
1
  import * as bin from '@isopodlabs/binary';
2
- declare class FAT {
2
+ export interface Backing {
3
+ readAt(offset: number, data: Uint8Array): Promise<number>;
4
+ writeAt(offset: number, data: Uint8Array): Promise<void>;
5
+ }
6
+ export declare class Sectors {
3
7
  shift: number;
4
- sectors: Uint8Array;
5
- fat: Int32Array;
8
+ private offset;
9
+ private backing?;
10
+ sectors: Uint8Array[];
11
+ dirty: Set<number>;
12
+ constructor(shift: number, offset?: number, backing?: Backing | undefined);
13
+ size(): number;
14
+ sector(id: number): Promise<Uint8Array>;
15
+ dirty_sector(id: number): Promise<Uint8Array>;
16
+ writeHeader(data: Uint8Array): Promise<void>;
17
+ flush(): Promise<void>;
18
+ }
19
+ declare class FAT {
20
+ fat: TypedArray<number>;
21
+ fat_shift: number;
22
+ data: Sectors;
6
23
  freed: number[];
7
- dirty_fat: Set<number>;
8
- dirty_sec: Set<number>;
9
- constructor(size: number, shift: number, sectors: Uint8Array);
24
+ dirty: Set<number>;
25
+ constructor(fat: bin.utils.TypedArray<number>, fat_shift: number, data: Sectors);
10
26
  private free;
11
- private alloc;
27
+ alloc(type: number): number;
12
28
  get_chain(id: number): number[];
13
29
  resize_chain(chain: number[], data_size: number): void;
14
30
  clear_dirty(): void;
15
- read_chain(chain: number[], dest: Uint8Array): void;
16
- read_chain_alloc(chain: number[]): Uint8Array;
17
- read(id: number, dest: Uint8Array): void;
18
- write_chain(chain: number[], source: Uint8Array): void;
19
- dirty_chain_part(chain: number[], offset: number): Uint8Array;
31
+ sector(id: number): Promise<Uint8Array | null>;
32
+ chain_part(chain: number[], offset: number): Promise<Uint8Array | undefined>;
33
+ dirty_sector(id: number): Promise<Uint8Array | null>;
34
+ dirty_chain_part(chain: number[], offset: number): Promise<Uint8Array | undefined>;
35
+ read_chain(chain: number[], dest: Uint8Array): Promise<void>;
36
+ write_chain(chain: number[], source: Uint8Array): Promise<void>;
37
+ write(id: number, source: Uint8Array): Promise<number>;
20
38
  }
21
- declare const Header_base: (new (s: bin._stream) => {
22
- magic: bigint;
23
- id: Uint8Array;
39
+ declare const Header_base: (new (s: bin._stream | {
40
+ id: any;
24
41
  revision: number;
25
42
  version: number;
26
43
  byteorder: number;
@@ -30,29 +47,77 @@ declare const Header_base: (new (s: bin._stream) => {
30
47
  num_directory: number;
31
48
  num_fat: number;
32
49
  first_directory: number;
33
- transaction: void;
34
50
  mini_cutoff: number;
35
51
  first_mini: number;
36
52
  num_mini: number;
37
53
  first_difat: number;
38
54
  num_difat: number;
39
- difat: Uint8Array;
55
+ difat: Int32Array;
56
+ }) => {
57
+ id: any;
58
+ revision: number;
59
+ version: number;
60
+ byteorder: number;
61
+ sector_shift: number;
62
+ mini_shift: number;
63
+ unused1: void;
64
+ num_directory: number;
65
+ num_fat: number;
66
+ first_directory: number;
67
+ mini_cutoff: number;
68
+ first_mini: number;
69
+ num_mini: number;
70
+ first_difat: number;
71
+ num_difat: number;
72
+ difat: Int32Array;
40
73
  } & {
41
74
  write(w: bin._stream): void;
42
- }) & {
43
- get: <X extends abstract new (...args: any) => any>(this: X, s: bin._stream) => InstanceType<X>;
44
- put: (s: bin._stream, v: any) => void;
45
- };
75
+ }) & bin.WithStaticGet & bin.WithStaticPut;
46
76
  export declare class Header extends Header_base {
47
77
  sector_size(): number;
48
78
  use_mini(size: number): boolean;
49
- valid(): boolean;
50
79
  }
51
- declare const DirEntry_base: (new (s: bin._stream) => {
80
+ declare class Master {
81
+ header: Header;
82
+ fat: FAT;
83
+ mini_fat: FAT;
84
+ fat_chain: number[];
85
+ difat_chain: number[];
86
+ static load<T extends Master>(this: new (...args: any[]) => T, header: Header, sectors: Sectors): Promise<T>;
87
+ constructor(header: Header, fat: FAT, mini_fat: FAT, fat_chain: number[], difat_chain: number[]);
88
+ get_fat(mini: boolean): FAT;
89
+ flush(dirty_header?: boolean): Promise<void>;
90
+ }
91
+ export declare const TYPE: {
92
+ readonly Empty: 0;
93
+ readonly UserStorage: 1;
94
+ readonly UserStream: 2;
95
+ readonly LockBytes: 3;
96
+ readonly Property: 4;
97
+ readonly RootStorage: 5;
98
+ };
99
+ type TYPE = 0 | 1 | 2 | 3 | 4 | 5;
100
+ type COLOUR = 0 | 1;
101
+ declare const DirEntry_base: new (contents: {
52
102
  name: string;
53
103
  name_size: number;
54
- type: number;
55
- colour: number;
104
+ type: TYPE;
105
+ colour: COLOUR;
106
+ left: number;
107
+ right: number;
108
+ root: number;
109
+ guid: Uint8Array;
110
+ flags: number;
111
+ creation: bigint;
112
+ modification: bigint;
113
+ sec_id: number;
114
+ size: number;
115
+ unused: number;
116
+ }) => {
117
+ name: string;
118
+ name_size: number;
119
+ type: TYPE;
120
+ colour: COLOUR;
56
121
  left: number;
57
122
  right: number;
58
123
  root: number;
@@ -63,33 +128,76 @@ declare const DirEntry_base: (new (s: bin._stream) => {
63
128
  sec_id: number;
64
129
  size: number;
65
130
  unused: number;
66
- } & {
67
- write(w: bin._stream): void;
68
- }) & {
69
- get: <X extends abstract new (...args: any) => any>(this: X, s: bin._stream) => InstanceType<X>;
70
- put: (s: bin._stream, v: any) => void;
71
131
  };
72
- declare class DirEntry extends DirEntry_base {
73
- index: number;
74
- constructor(index: number, r: bin.stream);
75
- load(fat: FAT): Uint8Array;
132
+ export declare class DirEntry extends DirEntry_base {
133
+ reader: Reader;
134
+ dir?: Directory;
135
+ constructor(reader: Reader, contents: {
136
+ name: string;
137
+ name_size: number;
138
+ type: TYPE;
139
+ colour: COLOUR;
140
+ left: number;
141
+ right: number;
142
+ root: number;
143
+ guid: Uint8Array;
144
+ flags: number;
145
+ creation: bigint;
146
+ modification: bigint;
147
+ sec_id: number;
148
+ size: number;
149
+ unused: number;
150
+ });
151
+ static reader(reader: Reader): {
152
+ get: (s: bin._stream) => DirEntry;
153
+ put: (s: bin._stream, entry: DirEntry) => void;
154
+ };
155
+ is(type: 0): this is DirEntry;
156
+ is(type: 1): this is Directory;
157
+ is(type: 2): this is Stream;
158
+ is(type: 3): this is DirEntry;
159
+ is(type: 4): this is DirEntry;
160
+ is(type: 5): this is Directory;
161
+ is_directory(): this is Directory;
162
+ is_data(): this is Stream;
163
+ rename(name: string): void;
164
+ remove(): void;
76
165
  }
77
- declare class Master {
78
- header: Header;
79
- difat: Int32Array;
80
- fat: FAT;
81
- mini_fat: FAT;
82
- mini_chain: number[];
83
- constructor(sectors: Uint8Array, header: Header);
84
- get_fat(mini: boolean): FAT;
85
- flush(filename: string): Promise<void>;
166
+ export declare class Directory extends DirEntry {
167
+ find(name: string): DirEntry | undefined;
168
+ entries(): Generator<DirEntry, any, unknown>;
169
+ private _addEntry;
170
+ addEntry(name: string, type: 0): DirEntry;
171
+ addEntry(name: string, type: 1): Directory;
172
+ addEntry(name: string, type: 2): Stream;
173
+ addEntry(name: string, type: 3): DirEntry;
174
+ addEntry(name: string, type: 4): DirEntry;
175
+ addEntry(name: string, type: 5): Directory;
176
+ addStream(name: string, data: Uint8Array): Promise<void>;
177
+ }
178
+ export declare class Stream extends DirEntry {
179
+ read(): Promise<Uint8Array>;
180
+ write(data: Uint8Array): Promise<void>;
86
181
  }
87
182
  export declare class Reader extends Master {
88
183
  entries: DirEntry[];
89
- private entry_chain;
90
- constructor(sectors: Uint8Array, header: Header);
91
- find(name: string, i?: number): DirEntry | undefined;
92
- read(e: DirEntry): Uint8Array;
93
- write(e: DirEntry, data: Uint8Array): void;
184
+ chain: number[];
185
+ pending: Promise<void>;
186
+ free: number;
187
+ static loadBacking(backing: Backing): Promise<Reader>;
188
+ static loadBuffer(buffer: Buffer): Promise<Reader>;
189
+ static load1(me: Reader): Promise<Reader>;
190
+ get root(): Directory;
191
+ updateIndex(index: number): Promise<void>;
192
+ updateEntry(entry: DirEntry): Promise<void>;
193
+ clearEntry(index: number): Promise<void>;
194
+ addEntry(entry: DirEntry): number;
195
+ rbFind(root: number, name: string): readonly [number, number];
196
+ rbInsert(root: DirEntry, entry: DirEntry): number;
197
+ rbRemove(root: DirEntry, entry: DirEntry): void;
198
+ find(name: string, create?: boolean): DirEntry | undefined;
199
+ read(entry: DirEntry): Promise<Uint8Array>;
200
+ write(entry: DirEntry, data: Uint8Array): Promise<void>;
201
+ flush(): Promise<void>;
94
202
  }
95
203
  export {};