plevinjs 0.2.1 → 0.2.2

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.
Files changed (63) hide show
  1. package/README.md +78 -13
  2. package/dist/cli.d.ts +4 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +16 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/compress.d.ts +5 -0
  7. package/dist/compress.d.ts.map +1 -0
  8. package/dist/compress.js +954 -0
  9. package/dist/compress.js.map +1 -0
  10. package/dist/countries.d.ts +1 -1
  11. package/dist/countries.d.ts.map +1 -1
  12. package/dist/countries.js +251 -250
  13. package/dist/countries.js.map +1 -1
  14. package/dist/derive.d.ts +1 -0
  15. package/dist/derive.d.ts.map +1 -1
  16. package/dist/derive.js +12 -6
  17. package/dist/derive.js.map +1 -1
  18. package/dist/estimate.d.ts +38 -0
  19. package/dist/estimate.d.ts.map +1 -0
  20. package/dist/estimate.js +263 -0
  21. package/dist/estimate.js.map +1 -0
  22. package/dist/extra.d.ts.map +1 -1
  23. package/dist/extra.js +12 -12
  24. package/dist/extra.js.map +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +51 -6
  27. package/dist/index.js.map +1 -1
  28. package/dist/leaves.d.ts +30 -0
  29. package/dist/leaves.d.ts.map +1 -0
  30. package/dist/leaves.js +183 -0
  31. package/dist/leaves.js.map +1 -0
  32. package/dist/lzma.d.ts +18 -0
  33. package/dist/lzma.d.ts.map +1 -1
  34. package/dist/lzma.js +18 -18
  35. package/dist/lzma.js.map +1 -1
  36. package/dist/matcher.d.ts +25 -0
  37. package/dist/matcher.d.ts.map +1 -0
  38. package/dist/matcher.js +198 -0
  39. package/dist/matcher.js.map +1 -0
  40. package/dist/models.d.ts +7 -0
  41. package/dist/models.d.ts.map +1 -1
  42. package/dist/plevin.min.js +258 -257
  43. package/dist/reader.d.ts.map +1 -1
  44. package/dist/reader.js +12 -1
  45. package/dist/reader.js.map +1 -1
  46. package/dist/selection.d.ts +34 -0
  47. package/dist/selection.d.ts.map +1 -0
  48. package/dist/selection.js +338 -0
  49. package/dist/selection.js.map +1 -0
  50. package/dist/slim.d.ts +21 -0
  51. package/dist/slim.d.ts.map +1 -0
  52. package/dist/slim.js +639 -0
  53. package/dist/slim.js.map +1 -0
  54. package/dist/slim.min.js +1 -0
  55. package/dist/stats.d.ts +61 -0
  56. package/dist/stats.d.ts.map +1 -0
  57. package/dist/stats.js +368 -0
  58. package/dist/stats.js.map +1 -0
  59. package/dist/writer.d.ts +32 -0
  60. package/dist/writer.d.ts.map +1 -0
  61. package/dist/writer.js +325 -0
  62. package/dist/writer.js.map +1 -0
  63. package/package.json +7 -2
package/dist/writer.js ADDED
@@ -0,0 +1,325 @@
1
+ /** The file: fixed blocks, one codec, and a header that says how to read them all. */
2
+ import { compress } from "./compress.js";
3
+ const MAGIC = new TextEncoder().encode("PLEVIN\0");
4
+ const FORMAT = 2;
5
+ const PREAMBLE = MAGIC.length + 5;
6
+ const WIDTHS = [1, 2, 4, 8];
7
+ const VALUES = 16384;
8
+ const KEYS = 32768;
9
+ const GROUP = 128;
10
+ const NAMES = 4096;
11
+ const RUN = 64;
12
+ const PROBE = 16;
13
+ const SAMPLED = 3;
14
+ const QUICK_SHRINK = 0.93;
15
+ const TUNINGS = [
16
+ [3, 0, 0],
17
+ [0, 0, 0],
18
+ [0, 1, 1],
19
+ [0, 2, 2],
20
+ [0, 3, 3],
21
+ ];
22
+ const encoder = new TextEncoder();
23
+ class Bytes {
24
+ data = new Uint8Array(1 << 10);
25
+ length = 0;
26
+ reserve(extra) {
27
+ if (this.length + extra <= this.data.length)
28
+ return;
29
+ const grown = new Uint8Array(Math.max(this.data.length * 2, this.length + extra));
30
+ grown.set(this.data);
31
+ this.data = grown;
32
+ }
33
+ push(byte) {
34
+ this.reserve(1);
35
+ this.data[this.length++] = byte;
36
+ }
37
+ add(bytes) {
38
+ this.reserve(bytes.length);
39
+ this.data.set(bytes, this.length);
40
+ this.length += bytes.length;
41
+ }
42
+ word(value) {
43
+ for (let step = 0; step < 4; step += 1)
44
+ this.push((value >>> (step * 8)) & 0xff);
45
+ }
46
+ varint(value) {
47
+ if (typeof value === "bigint") {
48
+ let left = value;
49
+ for (; left >= 0x80n; left >>= 7n)
50
+ this.push(Number(left & 0x7fn) | 0x80);
51
+ this.push(Number(left));
52
+ return;
53
+ }
54
+ let left = value;
55
+ for (; left >= 0x80; left = Math.floor(left / 128))
56
+ this.push((left % 128) | 0x80);
57
+ this.push(left);
58
+ }
59
+ take() {
60
+ return this.data.slice(0, this.length);
61
+ }
62
+ }
63
+ const fitsIn = (value, width, signed) => {
64
+ const limit = 2 ** (width * 8 - (signed ? 1 : 0));
65
+ return signed ? value >= -limit && value < limit : value >= 0 && value < limit;
66
+ };
67
+ const widthFor = (value, signed) => WIDTHS.find((width) => fitsIn(value, width, signed)) ?? 8;
68
+ const fixedBlock = (chunk, signed) => {
69
+ let width = 1;
70
+ for (let at = 0; at < chunk.length; at += 1) {
71
+ width = Math.max(width, widthFor(chunk[at], signed));
72
+ }
73
+ const block = new Uint8Array(1 + chunk.length * width);
74
+ const view = new DataView(block.buffer);
75
+ block[0] = width;
76
+ for (let at = 0; at < chunk.length; at += 1) {
77
+ const spot = 1 + at * width;
78
+ if (width === 8) {
79
+ view.setBigUint64(spot, BigInt.asUintN(64, BigInt(chunk[at])), true);
80
+ continue;
81
+ }
82
+ let value = chunk[at] < 0 ? chunk[at] + 2 ** (width * 8) : chunk[at];
83
+ for (let step = 0; step < width; step += 1) {
84
+ block[spot + step] = value % 256;
85
+ value = Math.floor(value / 256);
86
+ }
87
+ }
88
+ return block;
89
+ };
90
+ const chunks = (values, size) => {
91
+ const out = [];
92
+ for (let at = 0; at < values.length; at += size) {
93
+ out.push(Array.prototype.slice.call(values, at, at + size));
94
+ }
95
+ return out;
96
+ };
97
+ const tuned = (blocks, probe) => {
98
+ const step = Math.max(Math.floor(blocks.length / probe), 1);
99
+ const sample = blocks.filter((_, at) => at % step === 0);
100
+ let best = [TUNINGS[0], Number.POSITIVE_INFINITY];
101
+ for (const tuning of TUNINGS) {
102
+ let stored = 0;
103
+ for (const block of sample)
104
+ stored += compress(block, tuning).length;
105
+ if (stored * step < best[1])
106
+ best = [tuning, stored * step];
107
+ }
108
+ return best;
109
+ };
110
+ const plainBlocks = (values, signed) => chunks(values, VALUES).map((chunk) => fixedBlock(chunk, signed));
111
+ const deltaBlocks = (values) => chunks(values, VALUES).map((chunk) => {
112
+ let last = 0;
113
+ const steps = chunk.map((value) => {
114
+ const step = value - last;
115
+ last = value;
116
+ return step;
117
+ });
118
+ return fixedBlock(steps, true);
119
+ });
120
+ const prepareValues = (sheet, probe) => {
121
+ const plain = plainBlocks(sheet.values, sheet.encoding === "signed");
122
+ const stepped = deltaBlocks(sheet.values);
123
+ const plainFit = tuned(plain, probe);
124
+ const steppedFit = tuned(stepped, probe);
125
+ const isDelta = steppedFit[1] < plainFit[1];
126
+ const shape = {
127
+ count: sheet.values.length,
128
+ encoding: isDelta ? "delta" : sheet.encoding,
129
+ block: VALUES,
130
+ group: VALUES,
131
+ read: sheet.read,
132
+ };
133
+ const blocks = isDelta ? stepped : plain;
134
+ const fit = isDelta ? steppedFit : plainFit;
135
+ return { name: sheet.name, shape, blocks, heads: [], width: 0, fit };
136
+ };
137
+ const indexed = (out, groups) => {
138
+ for (const held of groups.slice(0, -1))
139
+ out.varint(held.length);
140
+ for (const held of groups)
141
+ out.add(held);
142
+ };
143
+ const boundary = (bytes, at) => {
144
+ let spot = Math.min(at, bytes.length);
145
+ while (spot > 0 && spot < bytes.length && (bytes[spot] & 0xc0) === 0x80)
146
+ spot -= 1;
147
+ return spot;
148
+ };
149
+ const frontCoded = (names) => {
150
+ const out = new Bytes();
151
+ let last = new Uint8Array(0);
152
+ for (const name of names) {
153
+ let shared = 0;
154
+ const most = Math.min(last.length, name.length, 255);
155
+ while (shared < most && last[shared] === name[shared])
156
+ shared += 1;
157
+ shared = boundary(name, shared);
158
+ out.push(shared);
159
+ out.varint(name.length - shared);
160
+ out.add(name.subarray(shared));
161
+ last = name;
162
+ }
163
+ return out.take();
164
+ };
165
+ const prepareStrings = (pool, probe) => {
166
+ const blocks = chunks(pool.map((name) => encoder.encode(name)), NAMES).map((names) => {
167
+ const out = new Bytes();
168
+ indexed(out, chunks(names, RUN).map(frontCoded));
169
+ return out.take();
170
+ });
171
+ const shape = {
172
+ count: pool.length,
173
+ encoding: "front",
174
+ block: NAMES,
175
+ group: RUN,
176
+ read: "",
177
+ };
178
+ return {
179
+ name: "strings",
180
+ shape,
181
+ blocks,
182
+ heads: [],
183
+ width: 0,
184
+ fit: tuned(blocks, probe),
185
+ };
186
+ };
187
+ const narrowRun = (keys) => {
188
+ const out = new Bytes();
189
+ for (let at = 1; at < keys.length; at += 1)
190
+ out.varint(keys[at] - keys[at - 1]);
191
+ return out.take();
192
+ };
193
+ const wideRun = (keys) => {
194
+ const out = new Bytes();
195
+ for (let at = 1; at < keys.length; at += 1)
196
+ out.varint((keys[at] >> 64n) - (keys[at - 1] >> 64n));
197
+ for (const key of keys)
198
+ out.varint(key & 0xffffffffffffffffn);
199
+ return out.take();
200
+ };
201
+ const gap = (high, low) => typeof high === "bigint" ? high - BigInt(low) : high - Number(low);
202
+ const indexBlock = (chunk, wide) => {
203
+ const groups = chunks(chunk, GROUP);
204
+ const body = new Bytes();
205
+ body.varint(chunk.length);
206
+ for (let at = 1; at < groups.length; at += 1) {
207
+ body.varint(gap(groups[at][0], groups[at - 1][0]));
208
+ }
209
+ const runs = groups.map((held) => wide ? wideRun(held) : narrowRun(held));
210
+ indexed(body, runs);
211
+ return body.take();
212
+ };
213
+ const prepareIndex = (part, probe) => {
214
+ const pieces = chunks(part.keys, KEYS);
215
+ const blocks = pieces.map((piece) => indexBlock(piece, part.wide));
216
+ const shape = {
217
+ count: part.keys.length,
218
+ encoding: "index",
219
+ block: KEYS,
220
+ group: GROUP,
221
+ read: "",
222
+ };
223
+ const heads = pieces.map((piece) => piece[0]);
224
+ const width = part.wide ? 16 : 4;
225
+ return { name: part.name, shape, blocks, heads, width, fit: tuned(blocks, probe) };
226
+ };
227
+ const prepare = (part, probe) => {
228
+ if (part.kind === "values")
229
+ return prepareValues(part, probe);
230
+ if (part.kind === "index")
231
+ return prepareIndex(part, probe);
232
+ return prepareStrings(part.pool, probe);
233
+ };
234
+ const container = ({ blocks, heads, width }, stored) => {
235
+ const body = new Bytes();
236
+ body.word(blocks.length);
237
+ body.word(width);
238
+ let offset = 0;
239
+ body.word(offset);
240
+ for (const held of stored) {
241
+ offset += held.length;
242
+ body.word(offset);
243
+ }
244
+ for (const head of heads) {
245
+ for (let step = width - 1; step >= 0; step -= 1) {
246
+ body.push(Number((BigInt(head) >> BigInt(step * 8)) & 0xffn));
247
+ }
248
+ }
249
+ for (const held of stored)
250
+ body.add(held);
251
+ return body.take();
252
+ };
253
+ const pack = (part, quick) => {
254
+ const prepared = prepare(part, quick ? SAMPLED : PROBE);
255
+ const [tuning, weight] = prepared.fit;
256
+ const { name, shape, blocks, width } = prepared;
257
+ const entry = { ...shape, lzma: tuning };
258
+ if (quick) {
259
+ const table = 8 + 4 * (blocks.length + 1) + width * blocks.length;
260
+ return { name, entry, size: table + Math.round(weight * QUICK_SHRINK), body: null };
261
+ }
262
+ const stored = blocks.map((block) => compress(block, tuning));
263
+ const body = container(prepared, stored);
264
+ return { name, entry, size: body.length, body };
265
+ };
266
+ const packAll = (written, quick, progress) => written.parts.map((part, at) => {
267
+ progress?.(quick ? "measuring" : "compressing", at, written.parts.length);
268
+ return pack(part, quick);
269
+ });
270
+ const sorted = (value) => {
271
+ if (Array.isArray(value) || typeof value !== "object" || value === null)
272
+ return value;
273
+ return Object.fromEntries(Object.entries(value)
274
+ .sort(([one], [two]) => (one < two ? -1 : 1))
275
+ .map(([key, inner]) => [key, sorted(inner)]));
276
+ };
277
+ const header = (written, built, selection, sections, length) => encoder.encode(JSON.stringify(sorted({
278
+ format: FORMAT,
279
+ built,
280
+ selection,
281
+ fields: written.fields,
282
+ carries: written.carries,
283
+ vocabularies: written.books,
284
+ sections,
285
+ length,
286
+ })));
287
+ const laid = (written, built, selection, packed) => {
288
+ const sections = {};
289
+ let body = 0;
290
+ for (const one of packed) {
291
+ sections[one.name] = { ...one.entry, offset: body, bytes: one.size };
292
+ body += one.size;
293
+ }
294
+ let head = new Uint8Array(0);
295
+ for (let round = 0; round < 8; round += 1) {
296
+ const total = PREAMBLE + head.length + body;
297
+ const again = header(written, built, selection, sections, total);
298
+ const settled = again.length === head.length;
299
+ head = again;
300
+ if (settled)
301
+ break;
302
+ }
303
+ return [head, body];
304
+ };
305
+ /** The bytes of one database, each block compressed under the tuning that shrinks it most. */
306
+ export const write = (written, built, selection, progress) => {
307
+ const packed = packAll(written, false, progress);
308
+ const [head, body] = laid(written, built, selection, packed);
309
+ const out = new Uint8Array(PREAMBLE + head.length + body);
310
+ out.set(MAGIC);
311
+ out[MAGIC.length] = FORMAT;
312
+ new DataView(out.buffer).setUint32(MAGIC.length + 1, head.length, true);
313
+ out.set(head, PREAMBLE);
314
+ let at = PREAMBLE + head.length;
315
+ for (const one of packed) {
316
+ if (one.body)
317
+ out.set(one.body, at);
318
+ at += one.size;
319
+ }
320
+ progress?.("compressing", written.parts.length, written.parts.length);
321
+ return out;
322
+ };
323
+ /** What a sorted run of addresses would take as an index section, sampled, not packed. */
324
+ export const indexSize = (keys, wide) => pack({ kind: "index", name: "keys", keys, wide }, true).size;
325
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plevinjs",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Location, network and abuse information for any IP address in one offline file.",
5
5
  "keywords": [
6
6
  "ip",
@@ -42,9 +42,14 @@
42
42
  ".": "./dist/index.js",
43
43
  "./node": "./dist/node.js",
44
44
  "./lzma": "./dist/lzma.js",
45
+ "./slim": "./dist/slim.js",
46
+ "./estimate": "./dist/estimate.js",
45
47
  "./package.json": "./package.json"
46
48
  },
47
49
  "types": "./dist/index.d.ts",
50
+ "bin": {
51
+ "plevinjs": "./dist/cli.js"
52
+ },
48
53
  "jsdelivr": "./dist/plevin.min.js",
49
54
  "unpkg": "./dist/plevin.min.js",
50
55
  "files": [
@@ -57,7 +62,7 @@
57
62
  },
58
63
  "scripts": {
59
64
  "build": "tsc && npm run bundle",
60
- "bundle": "esbuild src/index.ts --bundle --format=esm --minify --target=es2022 --outfile=dist/plevin.min.js",
65
+ "bundle": "esbuild src/index.ts --bundle --format=esm --minify --target=es2022 --outfile=dist/plevin.min.js && esbuild src/slim.ts --bundle --format=esm --minify --target=es2022 --outfile=dist/slim.min.js",
61
66
  "typecheck": "tsc --noEmit",
62
67
  "lint": "biome check .",
63
68
  "format": "biome check --write .",