plevinjs 0.1.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.
@@ -0,0 +1,27 @@
1
+ /** Location, network and abuse information for any IP address in one offline file. */
2
+ import { type Value } from "./address.ts";
3
+ import type { Result } from "./models.ts";
4
+ import { File, type Row } from "./reader.ts";
5
+ export type { Value } from "./address.ts";
6
+ export * from "./models.ts";
7
+ export { File } from "./reader.ts";
8
+ export { decompress, loadDictionary } from "./zstd.ts";
9
+ /** One database, opened once and asked as often as a log has addresses. */
10
+ export declare class Plevin {
11
+ readonly file: File;
12
+ private readonly kept;
13
+ private readonly results;
14
+ private second;
15
+ constructor(bytes: Uint8Array);
16
+ get built(): string;
17
+ get selection(): string;
18
+ get fields(): string[];
19
+ private storedFor;
20
+ /** One address, however it is written, as everything the file answers. */
21
+ lookup(value: Value, moment?: Date | null): Result;
22
+ /** The stored rows without any shaping, or null where the file covers nothing. */
23
+ row(value: Value): Row | null;
24
+ }
25
+ /** A database read over the network, in a browser, a worker or on a server. */
26
+ export declare const open: (source: string | URL | Request | Response | ArrayBuffer | Uint8Array) => Promise<Plevin>;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAkBL,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAUV,MAAM,EACP,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAc,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAEzD,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA+OvD,2EAA2E;AAC3E,qBAAa,MAAM;IACjB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,MAAM,CAAK;IAEnB,YAAY,KAAK,EAAE,UAAU,EAE5B;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED,OAAO,CAAC,SAAS;IAUjB,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAmBjD;IAED,kFAAkF;IAClF,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI,CAG5B;CACF;AAED,+EAA+E;AAC/E,eAAO,MAAM,IAAI,WACP,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,KACnE,OAAO,CAAC,MAAM,CAMhB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,282 @@
1
+ /** Location, network and abuse information for any IP address in one offline file. */
2
+ import { BENCHMARK, DOCUMENTATION, LINK_LOCAL, LOOPBACK, MAPPED, MULTICAST, PRIVATE, parse, purpose, RESERVED, SHARED, SIXTOFOUR, span, spelled, TEREDO, tunnel, UNIQUE_LOCAL, } from "./address.js";
3
+ import * as derive from "./derive.js";
4
+ import { clock, country } from "./extra.js";
5
+ import { File } from "./reader.js";
6
+ export * from "./models.js";
7
+ export { File } from "./reader.js";
8
+ export { decompress, loadDictionary } from "./zstd.js";
9
+ const ANSWERED = 1 << 10;
10
+ const WIDE = 1n << 128n;
11
+ const text = (value) => (value ? String(value) : null);
12
+ const count = (value) => (value ? Number(value) : null);
13
+ const number = (value) => value === undefined || value === null ? null : Number(value);
14
+ const held = (row, field) => row?.[field];
15
+ const metro = (row) => row ? { code: count(row.code), label: text(row.label) } : null;
16
+ const district = (row) => row ? { id: count(row.id), code: text(row.code), name: text(row.name) } : null;
17
+ const region = (row) => row
18
+ ? {
19
+ id: count(row.id),
20
+ code: text(row.code),
21
+ iso: text(row.iso),
22
+ name: text(row.name),
23
+ type: text(row.type),
24
+ }
25
+ : null;
26
+ /** One model per row object the file hands back, and the file hands back one. */
27
+ const shaped = (build) => {
28
+ const kept = new WeakMap();
29
+ return (row, ...rest) => {
30
+ if (!row)
31
+ return null;
32
+ const key = rest.join("\n");
33
+ let held = kept.get(row);
34
+ if (!held) {
35
+ held = new Map();
36
+ kept.set(row, held);
37
+ }
38
+ const found = held.get(key);
39
+ if (found !== undefined)
40
+ return found;
41
+ const built = build(row, ...rest);
42
+ held.set(key, built);
43
+ return built;
44
+ };
45
+ };
46
+ const city = shaped((row) => {
47
+ const kind = String(row.type ?? "");
48
+ return {
49
+ id: count(row.id),
50
+ name: text(row.name),
51
+ ascii: text(row.ascii),
52
+ country: text(row.country),
53
+ population: count(row.population),
54
+ elevation: count(row.elevation),
55
+ postal: text(row.postal),
56
+ postal_partial: text(row.postal_partial),
57
+ timezone: text(row.timezone),
58
+ type: text(kind),
59
+ capital: text(derive.capital(kind)),
60
+ region: region(held(row, "region")),
61
+ district: district(held(row, "district")),
62
+ metro: metro(held(row, "metro")),
63
+ };
64
+ });
65
+ const operator = shaped((row, handle) => {
66
+ const company = String(row.company ?? "");
67
+ const website = String(row.website ?? "");
68
+ const mailbox = String(row.abuse_email ?? "");
69
+ return {
70
+ company: text(company),
71
+ brand: text(derive.brand(handle, company)),
72
+ domain: text(derive.domain(website, mailbox)),
73
+ website: text(website),
74
+ category: text(row.category),
75
+ tier: count(row.tier),
76
+ peering: count(row.peering),
77
+ scope: text(row.scope),
78
+ rir: text(row.rir),
79
+ since: count(row.since),
80
+ street: text(row.street),
81
+ state: text(row.state),
82
+ postal: text(row.postal),
83
+ country: text(row.country),
84
+ abuse_email: text(mailbox),
85
+ city: city(held(row, "city")),
86
+ };
87
+ });
88
+ const carrier = (row, userType) => {
89
+ if (!row && !userType)
90
+ return null;
91
+ const found = row ?? {};
92
+ return {
93
+ user_type: text(userType),
94
+ user_count: count(found.user_count),
95
+ mcc: count(found.mcc),
96
+ mnc: count(found.mnc),
97
+ is_mobile: userType === "cellular",
98
+ };
99
+ };
100
+ const abuseOf = (record, system, userType) => {
101
+ if (!record && !system)
102
+ return null;
103
+ const found = record ?? {};
104
+ const [named, inferred] = derive.service(String(found.service ?? ""), userType);
105
+ return {
106
+ name: text(found.name),
107
+ service: text(named),
108
+ evidence: text(String(found.evidence ?? "") || inferred),
109
+ risk: number(found.risk),
110
+ network_risk: system ? number(system.risk) : null,
111
+ last_seen_days: count(found.last_seen_days),
112
+ is_anycast: Boolean(found.is_anycast),
113
+ is_satellite: Boolean(found.is_satellite),
114
+ is_hosting_provider: derive.SERVERS.has(userType),
115
+ is_proxy: derive.PROXIES.has(named),
116
+ is_public_proxy: named === "public_proxy",
117
+ is_residential_proxy: named === "residential_proxy",
118
+ is_anonymous_vpn: named === "anonymous_vpn",
119
+ is_tor_exit_node: named === "tor_exit_node",
120
+ is_private_relay: named === "private_relay",
121
+ is_anonymous: Boolean(named),
122
+ };
123
+ };
124
+ /** The place without its clock, which is the one part an address does not fix. */
125
+ const place = (row) => {
126
+ if (!row)
127
+ return null;
128
+ const found = city(held(row, "city"));
129
+ const code = found?.country ?? "";
130
+ const zone = found?.timezone ?? "";
131
+ return [
132
+ {
133
+ lat: number(row.lat),
134
+ lon: number(row.lon),
135
+ accuracy: count(row.accuracy),
136
+ confidence: count(row.confidence),
137
+ granularity: text(row.granularity),
138
+ city: found,
139
+ country: country(code),
140
+ },
141
+ zone,
142
+ ];
143
+ };
144
+ /** The network without its span, which the address the lookup asked about fixes. */
145
+ const network = (row, userType) => {
146
+ if (!row)
147
+ return null;
148
+ const handle = String(row.handle ?? "");
149
+ return [
150
+ {
151
+ asn: count(row.asn),
152
+ handle: text(handle),
153
+ rpki: text(row.rpki),
154
+ roas: number(row.roas),
155
+ operator: operator(held(row, "operator"), handle),
156
+ carrier: carrier(held(row, "carrier"), userType),
157
+ },
158
+ count(row.prefix),
159
+ ];
160
+ };
161
+ /** The ASN's type sits on the system row; the record carries only an override. */
162
+ const userTypeOf = (record, system) => String(record?.user_type || system?.user_type || "");
163
+ /** Everything a boundary answers that no address of it changes, built once. */
164
+ const stored = (row) => {
165
+ const wires = held(row, "network");
166
+ const system = held(wires, "abuse");
167
+ const userType = userTypeOf(held(row, "abuse"), system);
168
+ return [
169
+ place(held(row, "place")),
170
+ network(wires, userType),
171
+ abuseOf(held(row, "abuse"), system, userType),
172
+ ];
173
+ };
174
+ const spanned = (wires, value, wide) => {
175
+ const [held, prefix] = wires;
176
+ const [cidr, start, end] = prefix === null ? [null, null, null] : span(value, wide, prefix);
177
+ return { ...held, prefix, cidr, start, end };
178
+ };
179
+ const result = (value, wide, found, moment) => {
180
+ const [compressed, expanded, arpa] = spelled(value, wide);
181
+ const marks = purpose(value, wide);
182
+ const [through, embedded] = tunnel(value, wide);
183
+ const [ground, wires, abuse] = found ?? [null, null, null];
184
+ return {
185
+ ip: compressed,
186
+ version: wide ? 6 : 4,
187
+ number: value,
188
+ compressed,
189
+ expanded,
190
+ arpa,
191
+ is_global: marks === 0,
192
+ is_bogon: marks !== 0,
193
+ is_private: (marks & PRIVATE) !== 0,
194
+ is_loopback: (marks & LOOPBACK) !== 0,
195
+ is_multicast: (marks & MULTICAST) !== 0,
196
+ is_reserved: (marks & RESERVED) !== 0,
197
+ is_link_local: (marks & LINK_LOCAL) !== 0,
198
+ is_unique_local: (marks & UNIQUE_LOCAL) !== 0,
199
+ is_documentation: (marks & DOCUMENTATION) !== 0,
200
+ is_shared: (marks & SHARED) !== 0,
201
+ is_benchmark: (marks & BENCHMARK) !== 0,
202
+ is_ipv4_mapped: through === MAPPED,
203
+ is_6to4: through === SIXTOFOUR,
204
+ is_teredo: through === TEREDO,
205
+ tunnel: through,
206
+ embedded_ipv4: embedded,
207
+ found: found !== null,
208
+ place: ground === null ? null : { ...ground[0], time: clock(ground[1], moment) },
209
+ network: wires === null ? null : spanned(wires, value, wide),
210
+ abuse,
211
+ };
212
+ };
213
+ /** One database, opened once and asked as often as a log has addresses. */
214
+ export class Plevin {
215
+ file;
216
+ kept = new Map();
217
+ results = new Map();
218
+ second = 0;
219
+ constructor(bytes) {
220
+ this.file = new File(bytes);
221
+ }
222
+ get built() {
223
+ return this.file.built;
224
+ }
225
+ get selection() {
226
+ return this.file.selection;
227
+ }
228
+ get fields() {
229
+ return this.file.fields;
230
+ }
231
+ storedFor(found) {
232
+ const key = found.join(",");
233
+ const held = this.kept.get(key);
234
+ if (held !== undefined)
235
+ return held;
236
+ if (this.kept.size >= ANSWERED * 16)
237
+ this.kept.clear();
238
+ const built = stored(this.file.answerFor(found));
239
+ this.kept.set(key, built);
240
+ return built;
241
+ }
242
+ /** One address, however it is written, as everything the file answers. */
243
+ lookup(value, moment) {
244
+ const [held, wide] = parse(value);
245
+ if (moment) {
246
+ const found = this.file.locate(held, wide);
247
+ return result(held, wide, found && this.storedFor(found), moment);
248
+ }
249
+ const second = Math.floor(Date.now() / 1000);
250
+ if (second !== this.second) {
251
+ this.second = second;
252
+ this.results.clear();
253
+ }
254
+ const key = wide ? held + WIDE : BigInt(held);
255
+ const answered = this.results.get(key);
256
+ if (answered !== undefined)
257
+ return answered;
258
+ if (this.results.size >= ANSWERED)
259
+ this.results.clear();
260
+ const found = this.file.locate(held, wide);
261
+ const built = result(held, wide, found && this.storedFor(found));
262
+ this.results.set(key, built);
263
+ return built;
264
+ }
265
+ /** The stored rows without any shaping, or null where the file covers nothing. */
266
+ row(value) {
267
+ const [held, wide] = parse(value);
268
+ return this.file.rowFor(held, wide);
269
+ }
270
+ }
271
+ /** A database read over the network, in a browser, a worker or on a server. */
272
+ export const open = async (source) => {
273
+ if (source instanceof Uint8Array)
274
+ return new Plevin(source);
275
+ if (source instanceof ArrayBuffer)
276
+ return new Plevin(new Uint8Array(source));
277
+ const response = source instanceof Response ? source : await fetch(source);
278
+ if (!response.ok)
279
+ throw new Error(`${response.status} reading the database`);
280
+ return new Plevin(new Uint8Array(await response.arrayBuffer()));
281
+ };
282
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /** The shapes a lookup answers with; one is shared by every read of a row. */
2
+ export type Metro = {
3
+ code: number | null;
4
+ label: string | null;
5
+ };
6
+ export type District = {
7
+ id: number | null;
8
+ code: string | null;
9
+ name: string | null;
10
+ };
11
+ export type Region = {
12
+ id: number | null;
13
+ code: string | null;
14
+ iso: string | null;
15
+ name: string | null;
16
+ type: string | null;
17
+ };
18
+ export type City = {
19
+ id: number | null;
20
+ name: string | null;
21
+ ascii: string | null;
22
+ country: string | null;
23
+ population: number | null;
24
+ elevation: number | null;
25
+ postal: string | null;
26
+ postal_partial: string | null;
27
+ timezone: string | null;
28
+ type: string | null;
29
+ capital: string | null;
30
+ region: Region | null;
31
+ district: District | null;
32
+ metro: Metro | null;
33
+ };
34
+ export type Country = {
35
+ code: string | null;
36
+ name: string | null;
37
+ official: string | null;
38
+ common: string | null;
39
+ iso3: string | null;
40
+ numeric: string | null;
41
+ flag: string | null;
42
+ european_union: boolean;
43
+ driving_side: string | null;
44
+ };
45
+ export type Time = {
46
+ timezone: string | null;
47
+ abbreviation: string | null;
48
+ local: string | null;
49
+ utc_offset: string | null;
50
+ is_dst: boolean;
51
+ dst_start: string | null;
52
+ dst_end: string | null;
53
+ };
54
+ export type Place = {
55
+ lat: number | null;
56
+ lon: number | null;
57
+ accuracy: number | null;
58
+ confidence: number | null;
59
+ granularity: string | null;
60
+ city: City | null;
61
+ country: Country | null;
62
+ time: Time | null;
63
+ };
64
+ export type Operator = {
65
+ company: string | null;
66
+ brand: string | null;
67
+ domain: string | null;
68
+ website: string | null;
69
+ category: string | null;
70
+ tier: number | null;
71
+ peering: number | null;
72
+ scope: string | null;
73
+ rir: string | null;
74
+ since: number | null;
75
+ street: string | null;
76
+ state: string | null;
77
+ postal: string | null;
78
+ country: string | null;
79
+ abuse_email: string | null;
80
+ city: City | null;
81
+ };
82
+ export type Carrier = {
83
+ user_type: string | null;
84
+ user_count: number | null;
85
+ mcc: number | null;
86
+ mnc: number | null;
87
+ is_mobile: boolean;
88
+ };
89
+ export type Abuse = {
90
+ name: string | null;
91
+ service: string | null;
92
+ evidence: string | null;
93
+ risk: number | null;
94
+ network_risk: number | null;
95
+ last_seen_days: number | null;
96
+ is_anycast: boolean;
97
+ is_satellite: boolean;
98
+ is_hosting_provider: boolean;
99
+ is_proxy: boolean;
100
+ is_public_proxy: boolean;
101
+ is_residential_proxy: boolean;
102
+ is_anonymous_vpn: boolean;
103
+ is_tor_exit_node: boolean;
104
+ is_private_relay: boolean;
105
+ is_anonymous: boolean;
106
+ };
107
+ export type Network = {
108
+ asn: number | null;
109
+ handle: string | null;
110
+ prefix: number | null;
111
+ cidr: string | null;
112
+ start: string | null;
113
+ end: string | null;
114
+ rpki: string | null;
115
+ roas: number | null;
116
+ operator: Operator | null;
117
+ carrier: Carrier | null;
118
+ };
119
+ /** One address: what it says on its own, and what the database stores for it. */
120
+ export type Result = {
121
+ ip: string;
122
+ version: number;
123
+ number: number | bigint;
124
+ compressed: string;
125
+ expanded: string;
126
+ arpa: string;
127
+ is_global: boolean;
128
+ is_bogon: boolean;
129
+ is_private: boolean;
130
+ is_loopback: boolean;
131
+ is_multicast: boolean;
132
+ is_reserved: boolean;
133
+ is_link_local: boolean;
134
+ is_unique_local: boolean;
135
+ is_documentation: boolean;
136
+ is_shared: boolean;
137
+ is_benchmark: boolean;
138
+ is_ipv4_mapped: boolean;
139
+ is_6to4: boolean;
140
+ is_teredo: boolean;
141
+ tunnel: string | null;
142
+ embedded_ipv4: string | null;
143
+ found: boolean;
144
+ place: Place | null;
145
+ network: Network | null;
146
+ abuse: Abuse | null;
147
+ };
148
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/models.js ADDED
@@ -0,0 +1,3 @@
1
+ /** The shapes a lookup answers with; one is shared by every read of a row. */
2
+ export {};
3
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,8EAA8E"}
package/dist/node.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /** Opening a database from disk, for Node, Deno and Bun. */
2
+ import { Plevin } from "./index.ts";
3
+ export * from "./index.ts";
4
+ /** One database read off disk, or from PLEVIN_DB where no path is given. */
5
+ export declare const openFile: (path?: string) => Promise<Plevin>;
6
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,cAAc,YAAY,CAAC;AAE3B,4EAA4E;AAC5E,eAAO,MAAM,QAAQ,UAAiB,MAAM,KAAG,OAAO,CAAC,MAAM,CAI5D,CAAC"}
package/dist/node.js ADDED
@@ -0,0 +1,12 @@
1
+ /** Opening a database from disk, for Node, Deno and Bun. */
2
+ import { readFile } from "node:fs/promises";
3
+ import { Plevin } from "./index.js";
4
+ export * from "./index.js";
5
+ /** One database read off disk, or from PLEVIN_DB where no path is given. */
6
+ export const openFile = async (path) => {
7
+ const found = path ?? process.env.PLEVIN_DB;
8
+ if (!found)
9
+ throw new Error("no database given: pass a path or set PLEVIN_DB");
10
+ return new Plevin(new Uint8Array(await readFile(found)));
11
+ };
12
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,cAAc,YAAY,CAAC;AAE3B,4EAA4E;AAC5E,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAa,EAAmB,EAAE;IAC/D,MAAM,KAAK,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/E,OAAO,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC"}
@@ -0,0 +1,85 @@
1
+ /** The file format: one address in, the stored rows out, codes as words. */
2
+ import { type Dictionary } from "./zstd.ts";
3
+ export type Row = Record<string, unknown>;
4
+ export type Found = [number, number, number];
5
+ type Entry = {
6
+ count: number;
7
+ read: string;
8
+ block: number;
9
+ group: number;
10
+ offset: number;
11
+ bytes: number;
12
+ encoding: string;
13
+ };
14
+ type Head = {
15
+ built: string;
16
+ selection: string;
17
+ fields: string[];
18
+ sections: Record<string, Entry>;
19
+ vocabularies: Record<string, string[]>;
20
+ };
21
+ type Read = (value: number) => unknown;
22
+ declare class Cache<Key, Held> {
23
+ private held;
24
+ private build;
25
+ private limit;
26
+ constructor(build: (key: Key) => Held, limit?: number);
27
+ get(key: Key): Held;
28
+ clear(): void;
29
+ }
30
+ /** A block is what the codec packed; a group is all of one a lookup decodes. */
31
+ declare class Section {
32
+ readonly count: number;
33
+ readonly read: string;
34
+ readonly perBlock: number;
35
+ readonly perGroup: number;
36
+ readonly fanout: number;
37
+ readonly width: number;
38
+ readonly blocks: number;
39
+ readonly keys: bigint[];
40
+ protected readonly offsets: Uint32Array;
41
+ protected readonly data: Uint8Array;
42
+ protected readonly dictionary: Dictionary | null;
43
+ protected readonly cache: Cache<number, never>;
44
+ protected readonly groups: Cache<number, never>;
45
+ constructor(view: Uint8Array, entry: Entry);
46
+ protected raw(index: number): Uint8Array;
47
+ protected held(group: number): number;
48
+ protected block(index: number): unknown;
49
+ protected values(group: number): unknown;
50
+ at(row: number): unknown;
51
+ }
52
+ /** The database in memory, read a group at a time. */
53
+ export declare class File {
54
+ readonly head: Head;
55
+ readonly sections: Record<string, Section>;
56
+ readonly reads: Record<string, Read>;
57
+ private readonly tables;
58
+ private readonly families;
59
+ private readonly rows;
60
+ private readonly located;
61
+ private readonly answers;
62
+ constructor(bytes: Uint8Array);
63
+ /** A row of a table, kept: a city is read once however many link to it. */
64
+ private linked;
65
+ get built(): string;
66
+ get selection(): string;
67
+ get fields(): string[];
68
+ /** Each table's columns split by how they decode, so a read never branches. */
69
+ private plan;
70
+ /** The index a lookup bisects, the columns read at that row, and the hosts. */
71
+ private family;
72
+ private row;
73
+ /** The columns the boundary reads, cached by the row rather than its values. */
74
+ private answer;
75
+ /** Which boundary answers, and the record a host overrides it with. */
76
+ private locateIn;
77
+ /** Which boundary and host record answer, kept so a repeat never bisects. */
78
+ locate(value: number | bigint, wide: boolean): Found | null;
79
+ /** The stored answer, or null where the file covers nothing; do not edit it. */
80
+ rowFor(value: number | bigint, wide: boolean): Row | null;
81
+ /** One boundary as the file stores it, shared by every address it covers. */
82
+ answerFor(found: Found): Row;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,KAAK,UAAU,EAA8B,MAAM,WAAW,CAAC;AAExE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1C,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC,CAAC;AAsBF,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAcvC,cAAM,KAAK,CAAC,GAAG,EAAE,IAAI;IACnB,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,KAAK,CAAS;IAEtB,YAAY,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK,SAAS,EAGpD;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAOlB;IAED,KAAK,IAAI,IAAI,CAEZ;CACF;AAyCD,gFAAgF;AAChF,cAAM,OAAO;IACX,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhD,YAAY,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EA6BzC;IAED,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAGvC;IAED,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpC;IAED,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtC;IAED,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvC;IAED,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvB;CACF;AAuMD,sDAAsD;AACtD,qBAAa,IAAI;IACf,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0C;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuD;IAC/E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IAExE,YAAY,KAAK,EAAE,UAAU,EAmC5B;IAED,2EAA2E;IAC3E,OAAO,CAAC,MAAM;IAKd,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED,+EAA+E;IAC/E,OAAO,CAAC,IAAI;IAiBZ,+EAA+E;IAC/E,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,GAAG;IAuBX,gFAAgF;IAChF,OAAO,CAAC,MAAM;IAkBd,uEAAuE;IACvE,OAAO,CAAC,QAAQ;IAShB,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAE1D;IAED,gFAAgF;IAChF,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI,CAGxD;IAED,6EAA6E;IAC7E,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAG3B;CACF"}