dropley 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.

Potentially problematic release.


This version of dropley might be problematic. Click here for more details.

Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -0
  3. package/dist/api.d.ts +55 -0
  4. package/dist/api.js +126 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/args.d.ts +21 -0
  7. package/dist/args.js +83 -0
  8. package/dist/args.js.map +1 -0
  9. package/dist/bin/dropley.d.ts +2 -0
  10. package/dist/bin/dropley.js +4 -0
  11. package/dist/bin/dropley.js.map +1 -0
  12. package/dist/cli.d.ts +2 -0
  13. package/dist/cli.js +112 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/collect.d.ts +15 -0
  16. package/dist/collect.js +59 -0
  17. package/dist/collect.js.map +1 -0
  18. package/dist/commands/context.d.ts +14 -0
  19. package/dist/commands/context.js +28 -0
  20. package/dist/commands/context.js.map +1 -0
  21. package/dist/commands/delete.d.ts +3 -0
  22. package/dist/commands/delete.js +14 -0
  23. package/dist/commands/delete.js.map +1 -0
  24. package/dist/commands/pack.d.ts +10 -0
  25. package/dist/commands/pack.js +45 -0
  26. package/dist/commands/pack.js.map +1 -0
  27. package/dist/commands/publish.d.ts +4 -0
  28. package/dist/commands/publish.js +94 -0
  29. package/dist/commands/publish.js.map +1 -0
  30. package/dist/commands/status.d.ts +3 -0
  31. package/dist/commands/status.js +27 -0
  32. package/dist/commands/status.js.map +1 -0
  33. package/dist/commands/update.d.ts +3 -0
  34. package/dist/commands/update.js +23 -0
  35. package/dist/commands/update.js.map +1 -0
  36. package/dist/config.d.ts +8 -0
  37. package/dist/config.js +68 -0
  38. package/dist/config.js.map +1 -0
  39. package/dist/errors.d.ts +12 -0
  40. package/dist/errors.js +19 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/mime.d.ts +1 -0
  43. package/dist/mime.js +47 -0
  44. package/dist/mime.js.map +1 -0
  45. package/dist/output.d.ts +9 -0
  46. package/dist/output.js +24 -0
  47. package/dist/output.js.map +1 -0
  48. package/dist/target.d.ts +5 -0
  49. package/dist/target.js +29 -0
  50. package/dist/target.js.map +1 -0
  51. package/dist/zip.d.ts +14 -0
  52. package/dist/zip.js +136 -0
  53. package/dist/zip.js.map +1 -0
  54. package/package.json +54 -0
package/dist/zip.js ADDED
@@ -0,0 +1,136 @@
1
+ import { deflateRawSync } from 'node:zlib';
2
+ const FIXED_DOS_TIME = 0;
3
+ // 1980-01-01 → day=1 | month=1<<5 | (year-1980)<<9 = 0x21
4
+ const FIXED_DOS_DATE = 0x21;
5
+ const UTF8_FLAG = 0x0800;
6
+ const METHOD_STORE = 0;
7
+ const METHOD_DEFLATE = 8;
8
+ let CRC_TABLE;
9
+ function crcTable() {
10
+ if (CRC_TABLE)
11
+ return CRC_TABLE;
12
+ const table = new Int32Array(256);
13
+ for (let n = 0; n < 256; n++) {
14
+ let c = n;
15
+ for (let k = 0; k < 8; k++) {
16
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
17
+ }
18
+ table[n] = c;
19
+ }
20
+ CRC_TABLE = table;
21
+ return table;
22
+ }
23
+ function crc32(data) {
24
+ const table = crcTable();
25
+ let crc = -1;
26
+ for (const byte of data) {
27
+ crc = (crc >>> 8) ^ (table[(crc ^ byte) & 0xff] ?? 0);
28
+ }
29
+ return (crc ^ -1) >>> 0;
30
+ }
31
+ function normalizeName(name) {
32
+ const normalized = name.split('\\').join('/').replace(/^\.?\//, '').replace(/^\/+/, '');
33
+ if (normalized.length === 0)
34
+ throw new Error(`Invalid zip entry name: ${JSON.stringify(name)}`);
35
+ return normalized;
36
+ }
37
+ class ByteWriter {
38
+ chunks = [];
39
+ len = 0;
40
+ u16(v) {
41
+ const b = Buffer.allocUnsafe(2);
42
+ b.writeUInt16LE(v >>> 0, 0);
43
+ return this.push(b);
44
+ }
45
+ u32(v) {
46
+ const b = Buffer.allocUnsafe(4);
47
+ b.writeUInt32LE(v >>> 0, 0);
48
+ return this.push(b);
49
+ }
50
+ bytes(b) {
51
+ return this.push(Buffer.from(b.buffer, b.byteOffset, b.byteLength));
52
+ }
53
+ push(b) {
54
+ this.chunks.push(b);
55
+ this.len += b.length;
56
+ return this;
57
+ }
58
+ get length() {
59
+ return this.len;
60
+ }
61
+ toBuffer() {
62
+ return Buffer.concat(this.chunks, this.len);
63
+ }
64
+ }
65
+ export function createZip(inputEntries) {
66
+ if (inputEntries.length > 65534) {
67
+ throw new Error(`Too many zip entries (${inputEntries.length}); max 65534.`);
68
+ }
69
+ const seen = new Set();
70
+ const entries = inputEntries
71
+ .map((e) => ({ ...e, name: normalizeName(e.name) }))
72
+ .sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
73
+ for (const e of entries) {
74
+ if (seen.has(e.name))
75
+ throw new Error(`Duplicate zip entry name: ${e.name}`);
76
+ seen.add(e.name);
77
+ if (e.data.length > 0xffffffff)
78
+ throw new Error(`Zip entry too large: ${e.name}`);
79
+ }
80
+ const out = new ByteWriter();
81
+ const central = new ByteWriter();
82
+ for (const e of entries) {
83
+ const nameBuf = Buffer.from(e.name, 'utf8');
84
+ const crc = crc32(e.data);
85
+ const stored = Buffer.from(e.data.buffer, e.data.byteOffset, e.data.byteLength);
86
+ const deflated = deflateRawSync(stored, { level: 6 });
87
+ const useDeflate = deflated.length < stored.length;
88
+ const method = useDeflate ? METHOD_DEFLATE : METHOD_STORE;
89
+ const payload = useDeflate ? deflated : stored;
90
+ const offset = out.length;
91
+ out.u32(0x04034b50); // local file header signature
92
+ out.u16(20); // version needed
93
+ out.u16(UTF8_FLAG); // general purpose flags
94
+ out.u16(method);
95
+ out.u16(FIXED_DOS_TIME);
96
+ out.u16(FIXED_DOS_DATE);
97
+ out.u32(crc);
98
+ out.u32(payload.length); // compressed size
99
+ out.u32(stored.length); // uncompressed size
100
+ out.u16(nameBuf.length);
101
+ out.u16(0); // extra field length
102
+ out.bytes(nameBuf);
103
+ out.bytes(payload);
104
+ central.u32(0x02014b50); // central directory header signature
105
+ central.u16(20); // version made by
106
+ central.u16(20); // version needed
107
+ central.u16(UTF8_FLAG);
108
+ central.u16(method);
109
+ central.u16(FIXED_DOS_TIME);
110
+ central.u16(FIXED_DOS_DATE);
111
+ central.u32(crc);
112
+ central.u32(payload.length);
113
+ central.u32(stored.length);
114
+ central.u16(nameBuf.length);
115
+ central.u16(0); // extra length
116
+ central.u16(0); // comment length
117
+ central.u16(0); // disk number start
118
+ central.u16(0); // internal attributes
119
+ central.u32(0); // external attributes
120
+ central.u32(offset); // relative offset of local header
121
+ central.bytes(nameBuf);
122
+ }
123
+ const cdOffset = out.length;
124
+ const cdSize = central.length;
125
+ out.bytes(central.toBuffer());
126
+ out.u32(0x06054b50); // end of central directory signature
127
+ out.u16(0); // disk number
128
+ out.u16(0); // disk with central directory
129
+ out.u16(entries.length);
130
+ out.u16(entries.length);
131
+ out.u32(cdSize);
132
+ out.u32(cdOffset);
133
+ out.u16(0); // comment length
134
+ return out.toBuffer();
135
+ }
136
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiB3C,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,0DAA0D;AAC1D,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,IAAI,SAAiC,CAAC;AAEtC,SAAS,QAAQ;IACf,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,IAAgB;IAC7B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU;IACN,MAAM,GAAa,EAAE,CAAC;IACtB,GAAG,GAAG,CAAC,CAAC;IAEhB,GAAG,CAAC,CAAS;QACX,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,CAAS;QACX,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,CAAa;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC,CAAS;QACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,YAAiC;IACzD,IAAI,YAAY,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,YAAY;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IAEjC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,CAAC,CAAC,IAAI,CAAC,MAAM,EACb,CAAC,CAAC,IAAI,CAAC,UAAU,EACjB,CAAC,CAAC,IAAI,CAAC,UAAU,CAClB,CAAC;QACF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,8BAA8B;QACnD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB;QAC5C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB;QAC3C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB;QAC5C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;QACjC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;QAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;QAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB;QACjC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;QACpC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC;QACvD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;IAC1D,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;IAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;IAC1C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB;IAE7B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "dropley",
3
+ "version": "0.1.0",
4
+ "description": "Publish files and static sites to Dropley from your terminal.",
5
+ "license": "MIT",
6
+ "author": "Dropley <hello@dropley.app> (https://dropley.app)",
7
+ "homepage": "https://github.com/dropley/cli#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/dropley/cli.git"
11
+ },
12
+ "bugs": "https://github.com/dropley/cli/issues",
13
+ "keywords": [
14
+ "cli",
15
+ "dropley",
16
+ "publish",
17
+ "static-site",
18
+ "hosting",
19
+ "share",
20
+ "upload"
21
+ ],
22
+ "type": "module",
23
+ "engines": {
24
+ "node": ">=20"
25
+ },
26
+ "bin": {
27
+ "dropley": "./dist/bin/dropley.js"
28
+ },
29
+ "main": "./dist/cli.js",
30
+ "types": "./dist/cli.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/cli.d.ts",
34
+ "default": "./dist/cli.js"
35
+ }
36
+ },
37
+ "files": [
38
+ "dist"
39
+ ],
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.build.json",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit",
43
+ "lint": "eslint .",
44
+ "test": "vitest run",
45
+ "prepublishOnly": "npm run build"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^24.10.1",
49
+ "eslint": "^9.39.2",
50
+ "typescript": "^5.9.3",
51
+ "typescript-eslint": "^8.50.0",
52
+ "vitest": "^4.0.18"
53
+ }
54
+ }