{"_id":"@apislash/ip","_rev":"2-85ee06b7873ae4604179117b1a7acb57","name":"@apislash/ip","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@apislash/ip","version":"1.0.0","keywords":["apislash","ip","ipv4","ipv6","cidr","subnet","address","typescript"],"author":{"name":"jantheon","email":"vonhara@gmail.com"},"license":"MIT","_id":"@apislash/ip@1.0.0","maintainers":[{"name":"jantheon","email":"vonhara@gmail.com"}],"homepage":"https://gitlab.com/apislash/libs/client/ip/ts#readme","bugs":{"url":"https://gitlab.com/apislash/libs/client/ip/ts/-/issues"},"dist":{"shasum":"8aaff2f3951324952e28ddd86159c16c2ae39c82","tarball":"https://registry.npmjs.org/@apislash/ip/-/ip-1.0.0.tgz","fileCount":9,"integrity":"sha512-H8Ah8NS9FT3V5EvfDB/zA0eJ6wqNnLr22BVcPP3FPmWD89IWGLsx+mk43dJObqx48v7bP8aP3OXX9uNmMy0/YQ==","signatures":[{"sig":"MEUCIAgW91C6jR/yZbFu44vW4OqLZd9ej0XYzUBdygo9Xv3aAiEArLT/rz5XrFPli49uBX59WPkRMgGqpUcPVFqU8S+T+dI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128354},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8f7fa41e1fcd393d060035a79e1e17961d91f324","scripts":{"test":"pnpm exec vitest run --passWithNoTests","build":"pnpm exec tsup src/index.ts --format esm,cjs --dts --sourcemap --clean --out-dir dist","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"pnpm exec vitest"},"_npmUser":{"name":"jantheon","email":"vonhara@gmail.com"},"repository":{"url":"git+https://gitlab.com/apislash/libs/client/ip/ts.git","type":"git"},"_npmVersion":"11.14.1","description":"Dependency-free IPv4/IPv6 address utilities for any TypeScript project — parse, validate, compare, range/CIDR, subnet, bytes. Exact BigInt-backed v6, strict parsing (no SSRF mis-classification). Published by Apislash.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"main":"dist/index.cjs","types":"dist/index.d.ts","access":"public","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^20.17.30"},"_npmOperationalInternal":{"tmp":"tmp/ip_1.0.0_1781967620648_0.4858554157375796","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@apislash/ip","version":"1.0.1","description":"Dependency-free IPv4/IPv6 address utilities for any TypeScript project — parse, validate, compare, range/CIDR, subnet, bytes. Exact BigInt-backed v6, strict parsing (no SSRF mis-classification). Published by Apislash.","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"publishConfig":{"access":"public","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}}},"sideEffects":false,"scripts":{"build":"pnpm exec tsup src/index.ts --format esm,cjs --dts --sourcemap --clean --out-dir dist","typecheck":"tsc -p tsconfig.json --noEmit","test":"pnpm exec vitest run --passWithNoTests","test:watch":"pnpm exec vitest"},"devDependencies":{"@types/node":"^20.17.30","tsup":"^8.5.0","typescript":"^5.9.2","vitest":"^3.2.4"},"license":"MIT","repository":{"type":"git","url":"git+https://gitlab.com/apislash/libs/client/ip/ts.git"},"homepage":"https://gitlab.com/apislash/libs/client/ip/ts#readme","bugs":{"url":"https://gitlab.com/apislash/libs/client/ip/ts/-/issues"},"author":{"name":"jantheon","email":"vonhara@gmail.com"},"keywords":["apislash","ip","ipv4","ipv6","cidr","subnet","address","typescript"],"gitHead":"812e0bfe34bc09526ddea3171095996c3c44d0a4","_id":"@apislash/ip@1.0.1","_nodeVersion":"20.20.2","_npmVersion":"11.17.0","dist":{"integrity":"sha512-2q0BMtqnENS9giXGsLfcqXLCd7xclNXYxmUssuh16VnaVRSd0Zg+uzXlr4zKV4KrB+UxNK2/LA+CpiJOrf8PDA==","shasum":"37d4baa7b0f45ce2663f207642a5ead6db782daa","tarball":"https://registry.npmjs.org/@apislash/ip/-/ip-1.0.1.tgz","fileCount":9,"unpackedSize":128354,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apislash%2fip@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDyZdnW08iLhvGyiHxhh0G9oQPjneDVIfFw5KgkQd9hHAiEA2xf3YLXwSeS+RexH3G7nIbjPdZHuwwkG44yRK3WOOoo="}]},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:ed8d5778-5204-4402-a7bc-6eee4d9f032c"}},"directories":{},"maintainers":[{"name":"jantheon","email":"vonhara@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ip_1.0.1_1781968747292_0.6101324203008469"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-20T15:00:20.419Z","modified":"2026-06-20T15:19:07.749Z","1.0.0":"2026-06-20T15:00:20.794Z","1.0.1":"2026-06-20T15:19:07.448Z"},"bugs":{"url":"https://gitlab.com/apislash/libs/client/ip/ts/-/issues"},"author":{"name":"jantheon","email":"vonhara@gmail.com"},"license":"MIT","homepage":"https://gitlab.com/apislash/libs/client/ip/ts#readme","keywords":["apislash","ip","ipv4","ipv6","cidr","subnet","address","typescript"],"repository":{"type":"git","url":"git+https://gitlab.com/apislash/libs/client/ip/ts.git"},"description":"Dependency-free IPv4/IPv6 address utilities for any TypeScript project — parse, validate, compare, range/CIDR, subnet, bytes. Exact BigInt-backed v6, strict parsing (no SSRF mis-classification). Published by Apislash.","maintainers":[{"name":"jantheon","email":"vonhara@gmail.com"}],"readme":"# @apislash/ip\n\nDependency-free IPv4 / IPv6 address utilities for any TypeScript project.\n\n- **Exact.** IPv4 is a 32-bit integer, IPv6 a single **128-bit `BigInt`** — comparison,\n  ranges and subnetting are arithmetic, never string games.\n- **Strict & safe.** Only canonical addresses parse. Ambiguous legacy forms\n  (`127.1`, `012.0.0.1`, `0x7f.0.0.1`, `2130706433`) are **rejected**, and\n  IPv4-mapped IPv6 (`::ffff:127.0.0.1`) classifies by its embedded IPv4 — so the\n  SSRF mis-classification class of looser libraries simply cannot occur.\n- **Zero dependencies.** Pure TypeScript, ESM + CJS, full types.\n\n## Install\n\n```sh\nnpm install @apislash/ip\n```\n\n## Quick start\n\n```ts\nimport { parse, isPublic, cidrContains, compare } from \"@apislash/ip\";\n\nparse(\"2001:db8::1\").toString();        // \"2001:db8::1\"  (canonical RFC 5952)\nisPublic(\"10.0.0.1\");                   // false (private)\nisPublic(\"::ffff:127.0.0.1\");           // false (loopback — embedded v4)\ncidrContains(\"192.168.0.0/16\", \"192.168.5.5\"); // true\ncompare(\"1.2.3.4\", \"1.2.3.5\");          // -1\n```\n\n## API\n\n### Parse / validate / get\n- `parse(str)` / `tryParse(str)` → `Ip` (throws / null)\n- `isValid(str)`, `version(str)` → `4 | 6 | null`\n- `fromBytes(bytes)`, `fromValue(bigint, version)`\n\n### The `Ip` object\n- `.version`, `.value` (bigint), `.bitLength`\n- `.toString()` (canonical), `.toBytes()`, `.toBigInt()`\n- `.toV6()` / `.toV4()` (IPv4-mapped conversions)\n- `.equals(other)`, `.compare(other)` → `-1 | 0 | 1`\n- `.kind()` → IANA classification; `.isPublic()`, `.isPrivate()`, `.isLoopback()`,\n  `.isLinkLocal()`, `.isMulticast()`, `.isUnspecified()`\n\n### Compare\n- `compare(a, b)`, `isEqual(a, b)` — accept strings or `Ip`\n\n### Range / CIDR / subnet\n- `parseCidr(str)` / `tryParseCidr(str)` → `Cidr`\n- `Cidr`: `.network()`, `.broadcast()`, `.size()`, `.contains(ip)`, `.toString()`, `.info()`\n- `cidrContains(cidr, ip)`, `within(ip, start, end)`\n\n### Classification shortcuts\n- `isPublic(x)`, `isPrivate(x)`, `isLoopback(x)` — string or `Ip`\n\n## License\n\nMIT © Apislash\n","readmeFilename":"README.md"}