a collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky
atproto bluesky typescript npm
101
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(time-ms): use zig to prebuild for all platforms

Mary ae335f99 5edbb3e7

+119 -328
+5
.changeset/public-symbols-cry.md
··· 1 + --- 2 + '@atcute/time-ms': minor 3 + --- 4 + 5 + use zig to prebuild for all platforms
-18
packages/misc/time-ms/binding.gyp
··· 1 - { 2 - "targets": [ 3 - { 4 - "target_name": "time_ms", 5 - "sources": ["src/time_ms.c"], 6 - "cflags": ["-Wall", "-Wextra", "-O3"], 7 - "xcode_settings": { 8 - "OTHER_CFLAGS": ["-Wall", "-Wextra", "-O3"] 9 - }, 10 - "msvs_settings": { 11 - "VCCLCompilerTool": { 12 - "Optimization": 2, 13 - "WarnAsError": "false" 14 - } 15 - } 16 - } 17 - ] 18 - }
+75
packages/misc/time-ms/build.native.js
··· 1 + import { execSync } from 'node:child_process'; 2 + import { existsSync, mkdirSync } from 'node:fs'; 3 + import { join } from 'node:path'; 4 + 5 + import { build } from 'zig-build'; 6 + 7 + const nodeVersion = process.version.slice(1); 8 + const zigBuildDir = join(process.env.HOME || process.env.USERPROFILE, '.zig-build'); 9 + 10 + // zig-build only downloads headers, but Windows linking requires node.lib 11 + const nodeLibDir = join(zigBuildDir, 'node', `v${nodeVersion}`, 'lib'); 12 + if (!existsSync(join(nodeLibDir, 'node.lib'))) { 13 + mkdirSync(nodeLibDir, { recursive: true }); 14 + 15 + const url = `https://nodejs.org/download/release/v${nodeVersion}/win-x64/node.lib`; 16 + execSync(`curl -sL "${url}" -o "${join(nodeLibDir, 'node.lib')}"`); 17 + } 18 + 19 + const shared = { 20 + sources: ['src/time_ms.c'], 21 + napiVersion: 1, 22 + cflags: ['-Wall', '-Wextra'], 23 + mode: 'fast', 24 + }; 25 + 26 + // ensure output directories exist 27 + for (const dir of [ 28 + 'linux-x64-glibc', 29 + 'linux-x64-musl', 30 + 'linux-arm64-glibc', 31 + 'linux-arm64-musl', 32 + 'darwin-arm64', 33 + 'win32-x64', 34 + ]) { 35 + mkdirSync(join('prebuilds', dir), { recursive: true }); 36 + } 37 + 38 + await build({ 39 + 'linux-x64-glibc': { 40 + ...shared, 41 + target: 'x86_64-linux-gnu', 42 + output: 'prebuilds/linux-x64-glibc/time-ms.node', 43 + glibc: '2.17', 44 + }, 45 + 'linux-x64-musl': { 46 + ...shared, 47 + target: 'x86_64-linux-musl', 48 + output: 'prebuilds/linux-x64-musl/time-ms.node', 49 + }, 50 + 'linux-arm64-glibc': { 51 + ...shared, 52 + target: 'aarch64-linux-gnu', 53 + output: 'prebuilds/linux-arm64-glibc/time-ms.node', 54 + glibc: '2.17', 55 + }, 56 + 'linux-arm64-musl': { 57 + ...shared, 58 + target: 'aarch64-linux-musl', 59 + output: 'prebuilds/linux-arm64-musl/time-ms.node', 60 + }, 61 + 'darwin-arm64': { 62 + ...shared, 63 + target: 'aarch64-macos', 64 + output: 'prebuilds/darwin-arm64/time-ms.node', 65 + // NAPI symbols are resolved at load time by the Node.js runtime 66 + cflags: [...shared.cflags, '-Wl,-undefined,dynamic_lookup'], 67 + }, 68 + 'win32-x64': { 69 + ...shared, 70 + target: 'x86_64-windows', 71 + output: 'prebuilds/win32-x64/time-ms.node', 72 + libraries: ['node'], 73 + librariesSearch: [nodeLibDir], 74 + }, 75 + });
-35
packages/misc/time-ms/lib/deno.d.ts
··· 1 - declare namespace Deno { 2 - export const build: { 3 - os: 'darwin' | 'linux' | 'windows' | 'freebsd' | 'netbsd' | 'aix' | 'solaris' | 'illumos'; 4 - }; 5 - 6 - export type PointerValue = null | NonNullable<unknown>; 7 - 8 - export const UnsafePointer: { 9 - of(value: Deno.BufferSource): PointerValue; 10 - }; 11 - 12 - type NativeNumberType = 'u8' | 'i8' | 'u16' | 'i16' | 'u32' | 'i32' | 'f32' | 'f64'; 13 - type NativeBigIntType = 'u64' | 'i64' | 'usize' | 'isize'; 14 - type NativePointerType = 'pointer' | 'buffer'; 15 - type NativeVoidType = 'void'; 16 - type NativeType = NativeNumberType | NativeBigIntType | NativePointerType | NativeVoidType; 17 - 18 - interface ForeignFunction { 19 - parameters: readonly NativeType[]; 20 - result: NativeType; 21 - } 22 - 23 - type ForeignFunctionRecord = Record<string, ForeignFunction>; 24 - 25 - type StaticForeignSymbol<T extends ForeignFunction> = { 26 - (...args: unknown[]): T['result'] extends NativeVoidType ? void : unknown; 27 - }; 28 - 29 - type DynamicLibrary<S extends ForeignFunctionRecord> = { 30 - symbols: { [K in keyof S]: StaticForeignSymbol<S[K]> }; 31 - close(): void; 32 - }; 33 - 34 - export function dlopen<S extends ForeignFunctionRecord>(path: string, symbols: S): DynamicLibrary<S>; 35 - }
-71
packages/misc/time-ms/lib/index.bun.ts
··· 1 - import { dlopen, ptr } from 'bun:ffi'; 2 - 3 - const CLOCK_REALTIME = 0; 4 - 5 - // 100-nanosecond intervals between 1601-01-01 and 1970-01-01 6 - const EPOCH_OFFSET = 116444736000000000n; 7 - 8 - /** 9 - * whether the native module is available for the current runtime. 10 - */ 11 - export let hasNative = false; 12 - 13 - /** 14 - * returns the current time in microseconds since unix epoch. 15 - * @returns timestamp in microseconds 16 - */ 17 - export let now = (): number => { 18 - return Date.now() * 1_000; 19 - }; 20 - 21 - try { 22 - if (process.platform === 'win32') { 23 - const lib = dlopen('kernel32.dll', { 24 - GetSystemTimePreciseAsFileTime: { args: ['pointer'], returns: 'void' }, 25 - }); 26 - 27 - // FILETIME: { dwLowDateTime: u32, dwHighDateTime: u32 } = 8 bytes 28 - const buf = new Uint32Array(2); 29 - const bufPtr = ptr(buf); 30 - 31 - now = (): number => { 32 - if (Date.isFake) { 33 - return Date.now() * 1_000; 34 - } 35 - 36 - lib.symbols.GetSystemTimePreciseAsFileTime(bufPtr); 37 - const low = BigInt(buf[0]); 38 - const high = BigInt(buf[1]); 39 - const filetime = (high << 32n) | low; 40 - // convert from 100-nanosecond intervals since 1601 to microseconds since 1970 41 - return Number((filetime - EPOCH_OFFSET) / 10n); 42 - }; 43 - 44 - hasNative = true; 45 - } else { 46 - const libPath = process.platform === 'darwin' ? 'libSystem.B.dylib' : 'libc.so.6'; 47 - 48 - const lib = dlopen(libPath, { 49 - clock_gettime: { args: ['i32', 'pointer'], returns: 'i32' }, 50 - }); 51 - 52 - // timespec: { tv_sec: i64, tv_nsec: i64 } = 16 bytes on 64-bit 53 - const buf = new BigInt64Array(2); 54 - const bufPtr = ptr(buf); 55 - 56 - now = (): number => { 57 - if (Date.isFake) { 58 - return Date.now() * 1_000; 59 - } 60 - 61 - lib.symbols.clock_gettime(CLOCK_REALTIME, bufPtr); 62 - const sec = buf[0]; 63 - const nsec = buf[1]; 64 - return Number(sec * 1_000_000n + nsec / 1_000n); 65 - }; 66 - 67 - hasNative = true; 68 - } 69 - } catch { 70 - // ffi unavailable, keep fallback 71 - }
-69
packages/misc/time-ms/lib/index.deno.ts
··· 1 - const CLOCK_REALTIME = 0; 2 - 3 - // 100-nanosecond intervals between 1601-01-01 and 1970-01-01 4 - const EPOCH_OFFSET = 116444736000000000n; 5 - 6 - /** 7 - * whether the native module is available for the current runtime. 8 - */ 9 - export let hasNative = false; 10 - 11 - /** 12 - * returns the current time in microseconds since unix epoch. 13 - * @returns timestamp in microseconds 14 - */ 15 - export let now = (): number => { 16 - return Date.now() * 1_000; 17 - }; 18 - 19 - try { 20 - if (Deno.build.os === 'windows') { 21 - const lib = Deno.dlopen('kernel32.dll', { 22 - GetSystemTimePreciseAsFileTime: { parameters: ['pointer'], result: 'void' }, 23 - }); 24 - 25 - // FILETIME: { dwLowDateTime: u32, dwHighDateTime: u32 } = 8 bytes 26 - const buf = new Uint32Array(2); 27 - const ptr = Deno.UnsafePointer.of(buf); 28 - 29 - now = (): number => { 30 - if (Date.isFake) { 31 - return Date.now() * 1_000; 32 - } 33 - 34 - lib.symbols.GetSystemTimePreciseAsFileTime(ptr); 35 - const low = BigInt(buf[0]); 36 - const high = BigInt(buf[1]); 37 - const filetime = (high << 32n) | low; 38 - // convert from 100-nanosecond intervals since 1601 to microseconds since 1970 39 - return Number((filetime - EPOCH_OFFSET) / 10n); 40 - }; 41 - 42 - hasNative = true; 43 - } else { 44 - const libPath = Deno.build.os === 'darwin' ? 'libSystem.B.dylib' : 'libc.so.6'; 45 - 46 - const lib = Deno.dlopen(libPath, { 47 - clock_gettime: { parameters: ['i32', 'pointer'], result: 'i32' }, 48 - }); 49 - 50 - // timespec: { tv_sec: i64, tv_nsec: i64 } = 16 bytes on 64-bit 51 - const buf = new BigInt64Array(2); 52 - const ptr = Deno.UnsafePointer.of(buf); 53 - 54 - now = (): number => { 55 - if (Date.isFake) { 56 - return Date.now() * 1_000; 57 - } 58 - 59 - lib.symbols.clock_gettime(CLOCK_REALTIME, ptr); 60 - const sec = buf[0]; 61 - const nsec = buf[1]; 62 - return Number(sec * 1_000_000n + nsec / 1_000n); 63 - }; 64 - 65 - hasNative = true; 66 - } 67 - } catch { 68 - // ffi unavailable, keep fallback 69 - }
+11 -2
packages/misc/time-ms/lib/index.node.ts
··· 1 1 import { createRequire } from 'node:module'; 2 - import { join } from 'node:path'; 2 + import { arch, platform, report } from 'node:process'; 3 3 4 4 type TimeBinding = { 5 5 now: () => number; ··· 19 19 }; 20 20 21 21 try { 22 + const getPrebuildDir = (): string => { 23 + if (platform === 'linux') { 24 + const header = (report.getReport() as Record<string, any>).header; 25 + const libc = header.glibcVersionRuntime ? 'glibc' : 'musl'; 26 + return `${platform}-${arch}-${libc}`; 27 + } 28 + return `${platform}-${arch}`; 29 + }; 30 + 22 31 const require = createRequire(import.meta.url); 23 - const binding: TimeBinding = require('node-gyp-build')(join(import.meta.dirname, '..')); 32 + const binding: TimeBinding = require(`../prebuilds/${getPrebuildDir()}/time-ms.node`); 24 33 25 34 now = (): number => { 26 35 if (Date.isFake) {
+3 -11
packages/misc/time-ms/package.json
··· 8 8 "directory": "packages/utilities/time-ms" 9 9 }, 10 10 "files": [ 11 - "binding.gyp", 12 11 "dist/", 13 12 "lib/", 14 - "prebuilds/", 13 + "prebuilds/**/*.node", 15 14 "src/", 16 15 "!lib/**/*.bench.ts", 17 16 "!lib/**/*.test.ts" ··· 20 19 "sideEffects": false, 21 20 "exports": { 22 21 ".": { 23 - "deno": "./dist/index.deno.js", 24 - "bun": "./dist/index.bun.js", 25 22 "node": "./dist/index.node.js", 26 23 "default": "./dist/index.js" 27 24 } ··· 30 27 "access": "public" 31 28 }, 32 29 "scripts": { 33 - "install": "node-gyp-build || exit 0", 34 - "build:native": "prebuildify --napi --strip", 30 + "build:native": "node build.native.js", 35 31 "build": "tsgo --project tsconfig.build.json", 36 32 "prepublish": "rm -rf dist; pnpm run build:native; pnpm run build" 37 33 }, 38 - "dependencies": { 39 - "@types/bun": "^1.3.10", 40 - "node-gyp-build": "^4.8.4" 41 - }, 42 34 "devDependencies": { 43 - "prebuildify": "^6.0.1" 35 + "zig-build": "^0.3.0" 44 36 } 45 37 }
+25 -122
pnpm-lock.yaml
··· 753 753 '@types/bun': 754 754 specifier: ^1.3.10 755 755 version: 1.3.10 756 - node-gyp-build: 757 - specifier: ^4.8.4 758 - version: 4.8.4 759 756 devDependencies: 760 - prebuildify: 761 - specifier: ^6.0.1 762 - version: 6.0.1 757 + zig-build: 758 + specifier: ^0.3.0 759 + version: 0.3.0 763 760 764 761 packages/misc/uint8array: 765 762 devDependencies: ··· 3141 3138 resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} 3142 3139 engines: {node: '>=0.6'} 3143 3140 3144 - bl@4.1.0: 3145 - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 3146 - 3147 3141 bn.js@4.12.3: 3148 3142 resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} 3149 3143 ··· 3166 3160 3167 3161 buffer@5.6.0: 3168 3162 resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} 3169 - 3170 - buffer@5.7.1: 3171 - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 3172 3163 3173 3164 buffer@6.0.3: 3174 3165 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} ··· 3207 3198 resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} 3208 3199 engines: {node: '>=18'} 3209 3200 3201 + chalk@4.1.2: 3202 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 3203 + engines: {node: '>=10'} 3204 + 3210 3205 chardet@2.1.1: 3211 3206 resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} 3212 - 3213 - chownr@1.1.4: 3214 - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 3215 3207 3216 3208 cluster-key-slot@1.1.2: 3217 3209 resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} ··· 3354 3346 resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 3355 3347 engines: {node: '>= 0.8'} 3356 3348 3357 - end-of-stream@1.4.5: 3358 - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} 3359 - 3360 3349 enquirer@2.4.1: 3361 3350 resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 3362 3351 engines: {node: '>=8.6'} ··· 3516 3505 fresh@0.5.2: 3517 3506 resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 3518 3507 engines: {node: '>= 0.6'} 3519 - 3520 - fs-constants@1.0.0: 3521 - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 3522 3508 3523 3509 fs-extra@7.0.1: 3524 3510 resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} ··· 3831 3817 mitata@1.0.34: 3832 3818 resolution: {integrity: sha512-Mc3zrtNBKIMeHSCQ0XqRLo1vbdIx1wvFV9c8NJAiyho6AjNfMY8bVhbS12bwciUdd1t4rj8099CH3N3NFahaUA==} 3833 3819 3834 - mkdirp-classic@0.5.3: 3835 - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 3836 - 3837 3820 mri@1.2.0: 3838 3821 resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 3839 3822 engines: {node: '>=4'} ··· 3875 3858 neo-async@2.6.2: 3876 3859 resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 3877 3860 3878 - node-abi@3.87.0: 3879 - resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} 3880 - engines: {node: '>=10'} 3881 - 3882 3861 node-gyp-build-optional-packages@5.1.1: 3883 3862 resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} 3884 3863 hasBin: true 3885 3864 3886 - node-gyp-build@4.8.4: 3887 - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} 3888 - hasBin: true 3889 - 3890 3865 nodemailer-html-to-text@3.2.0: 3891 3866 resolution: {integrity: sha512-RJUC6640QV1PzTHHapOrc6IzrAJUZtk2BdVdINZ9VTLm+mcQNyBO9LYyhrnufkzqiD9l8hPLJ97rSyK4WanPNg==} 3892 3867 engines: {node: '>= 10.23.0'} ··· 3894 3869 nodemailer@6.10.1: 3895 3870 resolution: {integrity: sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==} 3896 3871 engines: {node: '>=6.0.0'} 3897 - 3898 - npm-run-path@3.1.0: 3899 - resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==} 3900 - engines: {node: '>=8'} 3901 3872 3902 3873 object-assign@4.1.1: 3903 3874 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} ··· 3921 3892 on-headers@1.1.0: 3922 3893 resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} 3923 3894 engines: {node: '>= 0.8'} 3924 - 3925 - once@1.4.0: 3926 - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 3927 3895 3928 3896 one-webcrypto@1.0.3: 3929 3897 resolution: {integrity: sha512-fu9ywBVBPx0gS9K0etIROTiCkvI5S1TDjFsYFb3rC1ewFxeOqsbzq7aIMBHsYfrTHBcGXJaONXXjTl8B01cW1Q==} ··· 4134 4102 resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} 4135 4103 engines: {node: '>=0.10.0'} 4136 4104 4137 - prebuildify@6.0.1: 4138 - resolution: {integrity: sha512-8Y2oOOateom/s8dNBsGIcnm6AxPmLH4/nanQzL5lQMU+sC0CMhzARZHizwr36pUPLdvBnOkCNQzxg4djuFSgIw==} 4139 - hasBin: true 4140 - 4141 4105 prettier@2.8.8: 4142 4106 resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 4143 4107 engines: {node: '>=10.13.0'} ··· 4161 4125 4162 4126 proxy-from-env@1.1.0: 4163 4127 resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 4164 - 4165 - pump@3.0.4: 4166 - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} 4167 4128 4168 4129 pure-rand@8.0.0: 4169 4130 resolution: {integrity: sha512-7rgWlxG2gAvFPIQfUreo1XYlNvrQ9VnQPFWdncPkdl3icucLK0InOxsaafbvxGTnI6Bk/Rxmslg0lQlRCuzOXw==} ··· 4385 4346 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 4386 4347 engines: {node: '>=8'} 4387 4348 4388 - tar-fs@2.1.4: 4389 - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} 4390 - 4391 - tar-stream@2.2.0: 4392 - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 4393 - engines: {node: '>=6'} 4394 - 4395 4349 term-size@2.2.1: 4396 4350 resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 4397 4351 engines: {node: '>=8'} ··· 4616 4570 resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 4617 4571 engines: {node: '>=12'} 4618 4572 4619 - wrappy@1.0.2: 4620 - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 4621 - 4622 4573 ws@8.19.0: 4623 4574 resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} 4624 4575 engines: {node: '>=10.0.0'} ··· 4643 4594 yocto-queue@1.2.2: 4644 4595 resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} 4645 4596 engines: {node: '>=12.20'} 4597 + 4598 + zig-build@0.3.0: 4599 + resolution: {integrity: sha512-1QAROkf1rJjLkkwCz9+DEuF6U4Yy3nu6oX772mGd7os96E/2AdL50xjd7PuVsGpHIYmtBKG4EPCki6mzBwUtxw==} 4600 + engines: {node: '>= 16.0.0'} 4601 + peerDependencies: 4602 + node-addon-api: '*' 4603 + peerDependenciesMeta: 4604 + node-addon-api: 4605 + optional: true 4646 4606 4647 4607 zod@3.25.76: 4648 4608 resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} ··· 6959 6919 6960 6920 big-integer@1.6.52: {} 6961 6921 6962 - bl@4.1.0: 6963 - dependencies: 6964 - buffer: 5.7.1 6965 - inherits: 2.0.4 6966 - readable-stream: 3.6.2 6967 - 6968 6922 bn.js@4.12.3: {} 6969 6923 6970 6924 body-parser@1.20.4: ··· 6997 6951 brorand@1.1.0: {} 6998 6952 6999 6953 buffer@5.6.0: 7000 - dependencies: 7001 - base64-js: 1.5.1 7002 - ieee754: 1.2.1 7003 - 7004 - buffer@5.7.1: 7005 6954 dependencies: 7006 6955 base64-js: 1.5.1 7007 6956 ieee754: 1.2.1 ··· 7049 6998 7050 6999 chai@6.2.2: {} 7051 7000 7052 - chardet@2.1.1: {} 7001 + chalk@4.1.2: 7002 + dependencies: 7003 + ansi-styles: 4.3.0 7004 + supports-color: 7.2.0 7053 7005 7054 - chownr@1.1.4: {} 7006 + chardet@2.1.1: {} 7055 7007 7056 7008 cluster-key-slot@1.1.2: {} 7057 7009 ··· 7179 7131 7180 7132 encodeurl@2.0.0: {} 7181 7133 7182 - end-of-stream@1.4.5: 7183 - dependencies: 7184 - once: 1.4.0 7185 - 7186 7134 enquirer@2.4.1: 7187 7135 dependencies: 7188 7136 ansi-colors: 4.1.3 ··· 7406 7354 forwarded@0.2.0: {} 7407 7355 7408 7356 fresh@0.5.2: {} 7409 - 7410 - fs-constants@1.0.0: {} 7411 7357 7412 7358 fs-extra@7.0.1: 7413 7359 dependencies: ··· 7718 7664 7719 7665 mitata@1.0.34: {} 7720 7666 7721 - mkdirp-classic@0.5.3: {} 7722 - 7723 7667 mri@1.2.0: {} 7724 7668 7725 7669 mrmime@2.0.1: {} ··· 7742 7686 7743 7687 neo-async@2.6.2: {} 7744 7688 7745 - node-abi@3.87.0: 7746 - dependencies: 7747 - semver: 7.7.4 7748 - 7749 7689 node-gyp-build-optional-packages@5.1.1: 7750 7690 dependencies: 7751 7691 detect-libc: 2.1.2 7752 7692 optional: true 7753 - 7754 - node-gyp-build@4.8.4: {} 7755 7693 7756 7694 nodemailer-html-to-text@3.2.0: 7757 7695 dependencies: ··· 7759 7697 7760 7698 nodemailer@6.10.1: {} 7761 7699 7762 - npm-run-path@3.1.0: 7763 - dependencies: 7764 - path-key: 3.1.1 7765 - 7766 7700 object-assign@4.1.1: {} 7767 7701 7768 7702 object-inspect@1.13.4: {} ··· 7777 7711 7778 7712 on-headers@1.1.0: {} 7779 7713 7780 - once@1.4.0: 7781 - dependencies: 7782 - wrappy: 1.0.2 7783 - 7784 7714 one-webcrypto@1.0.3: {} 7785 7715 7786 7716 outdent@0.5.0: {} ··· 8022 7952 dependencies: 8023 7953 xtend: 4.0.2 8024 7954 8025 - prebuildify@6.0.1: 8026 - dependencies: 8027 - minimist: 1.2.8 8028 - mkdirp-classic: 0.5.3 8029 - node-abi: 3.87.0 8030 - npm-run-path: 3.1.0 8031 - pump: 3.0.4 8032 - tar-fs: 2.1.4 8033 - 8034 7955 prettier@2.8.8: {} 8035 7956 8036 7957 prettier@3.8.1: {} ··· 8045 7966 ipaddr.js: 1.9.1 8046 7967 8047 7968 proxy-from-env@1.1.0: {} 8048 - 8049 - pump@3.0.4: 8050 - dependencies: 8051 - end-of-stream: 1.4.5 8052 - once: 1.4.0 8053 7969 8054 7970 pure-rand@8.0.0: {} 8055 7971 ··· 8312 8228 dependencies: 8313 8229 has-flag: 4.0.0 8314 8230 8315 - tar-fs@2.1.4: 8316 - dependencies: 8317 - chownr: 1.1.4 8318 - mkdirp-classic: 0.5.3 8319 - pump: 3.0.4 8320 - tar-stream: 2.2.0 8321 - 8322 - tar-stream@2.2.0: 8323 - dependencies: 8324 - bl: 4.1.0 8325 - end-of-stream: 1.4.5 8326 - fs-constants: 1.0.0 8327 - inherits: 2.0.4 8328 - readable-stream: 3.6.2 8329 - 8330 8231 term-size@2.2.1: {} 8331 8232 8332 8233 thread-stream@2.7.0: ··· 8497 8398 string-width: 5.1.2 8498 8399 strip-ansi: 7.2.0 8499 8400 8500 - wrappy@1.0.2: {} 8501 - 8502 8401 ws@8.19.0: {} 8503 8402 8504 8403 xtend@4.0.2: {} ··· 8507 8406 optional: true 8508 8407 8509 8408 yocto-queue@1.2.2: {} 8409 + 8410 + zig-build@0.3.0: 8411 + dependencies: 8412 + chalk: 4.1.2 8510 8413 8511 8414 zod@3.25.76: {}