{"_id":"@arcpx-org/sad","_rev":"5-8d7243feb7cbb424c5bc757a09dc0924","name":"@arcpx-org/sad","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@arcpx-org/sad","version":"0.1.0","keywords":["diff","json-diff","csv-diff","text-diff","pdf-diff","merkle-tree","myers-diff"],"author":{"name":"Jeff Ong"},"license":"MIT","_id":"@arcpx-org/sad@0.1.0","maintainers":[{"name":"arcpx","email":"jeffong@arcpx.com"}],"homepage":"https://github.com/arcpx-eng/sad#readme","bugs":{"url":"https://github.com/arcpx-eng/sad/issues"},"dist":{"shasum":"8122067a2ac0e6a196013a96883bc99d4783f085","tarball":"https://registry.npmjs.org/@arcpx-org/sad/-/sad-0.1.0.tgz","fileCount":33,"integrity":"sha512-uh8QOpTNnnTYwKY9k+zXMtbbKOrGfpcz5GAMr77FlFYQHGpPsZWaURyERYDNnWmgqdFCW3RA5SyMr12LT3yumQ==","signatures":[{"sig":"MEUCIHOyWHTBitIGPRW76KIdeQBSoMY5qFD2d5vvuaw9I1Q6AiEA4Vh9uapBvk4jEV6j1hAwUJEaaEFYDHi8PlSuswA0s08=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49298},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5577f7f8f243ef3c27748758579f2fc32b9a1d75","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","start":"npm run build && node dist/index.js","dev:site":"vite","build:site":"vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"arcpx","email":"jeffong@arcpx.com"},"repository":{"url":"git+https://github.com/arcpx-eng/sad.git","type":"git"},"_npmVersion":"11.17.0","description":"Compares two files (JSON, CSV, TXT, PDF) and reports what changed, using a Merkle tree filter plus Myers diff for word-level detail.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.0","vitest":"~4.1.10","typescript":"~7.0.2","@types/node":"~26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sad_0.1.0_1785514333451_0.2117562446698542","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@arcpx-org/sad","version":"0.1.1","keywords":["diff","json-diff","csv-diff","text-diff","pdf-diff","merkle-tree","myers-diff"],"author":{"name":"Jeff Ong"},"license":"MIT","_id":"@arcpx-org/sad@0.1.1","maintainers":[{"name":"arcpx","email":"jeffong@arcpx.com"}],"homepage":"https://github.com/arcpx-eng/sad#readme","bugs":{"url":"https://github.com/arcpx-eng/sad/issues"},"dist":{"shasum":"8b1a5b4e37137d15f8ae9d5c6570e5f8c9858a2f","tarball":"https://registry.npmjs.org/@arcpx-org/sad/-/sad-0.1.1.tgz","fileCount":33,"integrity":"sha512-n1G0nB3FL+vfQDMuKad7I+HMWJ+fLfdmxOqGZTel7iWpToBniYXpJKBk3I/pDAbKXsG0BRd5MApQZ4gSkIR+OQ==","signatures":[{"sig":"MEUCIFwQnOuM7m2jwhdsqp/FO+EjTyF6XwEvc7c7vq0yiR59AiEA1CrRd4EOqL3vKdW8+etX+PyirBS1Bq89jNv2SMss1SA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51584},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"3ca486cfc697349f3901594b790316041c538a85","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","start":"npm run build && node dist/index.js","dev:site":"vite","build:site":"vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"arcpx","email":"jeffong@arcpx.com"},"repository":{"url":"git+https://github.com/arcpx-eng/sad.git","type":"git"},"_npmVersion":"11.17.0","description":"Compares two files (JSON, CSV, TXT, PDF) and reports what changed, using a Merkle tree filter plus Myers diff for word-level detail.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.0","vitest":"~4.1.10","typescript":"~7.0.2","@types/node":"~26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sad_0.1.1_1785516307550_0.7018576962631884","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@arcpx-org/sad","version":"0.1.2","keywords":["diff","json-diff","csv-diff","text-diff","pdf-diff","merkle-tree","myers-diff"],"author":{"name":"Jeff Ong"},"license":"MIT","_id":"@arcpx-org/sad@0.1.2","maintainers":[{"name":"arcpx","email":"jeffong@arcpx.com"}],"homepage":"https://github.com/arcpx-eng/sad#readme","bugs":{"url":"https://github.com/arcpx-eng/sad/issues"},"dist":{"shasum":"1c6586d864136ad7360bc4f23f18581bad874a0f","tarball":"https://registry.npmjs.org/@arcpx-org/sad/-/sad-0.1.2.tgz","fileCount":45,"integrity":"sha512-yQ+OgIt8c+yo4MErtM6IQK2T7P1nNrQxfoahHDaRrKEnqEr5hXyG0EUxdN72ttf5D9nzcJjVdKMmfXUwLABiVw==","signatures":[{"sig":"MEUCIEdKwAt9VgNQ/9H5oyzBjRuE0/tMM7+TcV1fGWebUh2iAiEAqDEA4NkKZaPVUH0QvFUDiLTZWKkWXLMXb9jPnUHNhu4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57495},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","browser":{"fs":"./dist/shims/browserFs.js","crypto":"./dist/shims/browserCrypto.js","readline":"./dist/shims/browserReadline.js","child_process":"./dist/shims/browserChildProcess.js"},"engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0bc24364ca679c10876b82b2438efef66af4170b","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","start":"npm run build && node dist/index.js","dev:site":"vite","build:site":"vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"arcpx","email":"jeffong@arcpx.com"},"repository":{"url":"git+https://github.com/arcpx-eng/sad.git","type":"git"},"_npmVersion":"11.17.0","description":"Compares two files (JSON, CSV, TXT, PDF) and reports what changed, using a Merkle tree filter plus Myers diff for word-level detail.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.0","vitest":"~4.1.10","typescript":"~7.0.2","@types/node":"~26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sad_0.1.2_1785518654792_0.9710877817981816","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@arcpx-org/sad","version":"0.1.3","keywords":["diff","json-diff","csv-diff","text-diff","pdf-diff","merkle-tree","myers-diff"],"author":{"name":"Jeff Ong"},"license":"MIT","_id":"@arcpx-org/sad@0.1.3","maintainers":[{"name":"arcpx","email":"jeffong@arcpx.com"}],"homepage":"https://github.com/arcpx-eng/sad#readme","bugs":{"url":"https://github.com/arcpx-eng/sad/issues"},"dist":{"shasum":"1cfe189498c0410cc88bbf418bf5fdab85e9e54d","tarball":"https://registry.npmjs.org/@arcpx-org/sad/-/sad-0.1.3.tgz","fileCount":45,"integrity":"sha512-RT9tLyo9VP8shUhEIM31RBHqf3USGyMxgCCBDSxaWDT4pRIVni8m4vQ67olN+bDGWaReknHTkdcEsifLLz7pKQ==","signatures":[{"sig":"MEQCIFKWCv3XL2Jk3qr8Eq3vNjBFlVd8yAaMnUhM8T0O3thhAiASWQjnhdKJaNh4cGFDUGRWOMlzbsVRo51UU3IIGktheg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57551},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","browser":{"fs":"./dist/shims/browserFs.js","crypto":"./dist/shims/browserCrypto.js","readline":"./dist/shims/browserReadline.js","child_process":"./dist/shims/browserChildProcess.js"},"engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8e4ac852b180a2e66c95c4b6d971f21ac33cba87","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","start":"npm run build && node dist/index.js","dev:site":"vite","build:site":"vite build","prepublishOnly":"npm run build"},"_npmUser":{"name":"arcpx","email":"jeffong@arcpx.com"},"repository":{"url":"git+https://github.com/arcpx-eng/sad.git","type":"git"},"_npmVersion":"11.17.0","description":"Compares two files (JSON, CSV, TXT, PDF) and reports what changed, using a Merkle tree filter plus Myers diff for word-level detail.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.0","vitest":"~4.1.10","typescript":"~7.0.2","@types/node":"~26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sad_0.1.3_1785518875933_0.495971486191664","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@arcpx-org/sad","version":"0.1.4","description":"Compares two files (JSON, CSV, TXT, PDF) and reports what changed, using a Merkle tree filter plus Myers diff for word-level detail.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"browser":{"crypto":"./dist/shims/browserCrypto.js","fs":"./dist/shims/browserFs.js","child_process":"./dist/shims/browserChildProcess.js","readline":"./dist/shims/browserReadline.js"},"sideEffects":false,"engines":{"node":">=18.18.0"},"scripts":{"build":"tsc -p tsconfig.build.json","start":"npm run build && node dist/index.js","test":"vitest run","dev:site":"vite","build:site":"vite build","prepublishOnly":"npm run build"},"keywords":["diff","json-diff","csv-diff","text-diff","pdf-diff","merkle-tree","myers-diff"],"author":{"name":"Jeff Ong"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arcpx-eng/sad.git"},"homepage":"https://github.com/arcpx-eng/sad#readme","bugs":{"url":"https://github.com/arcpx-eng/sad/issues"},"publishConfig":{"access":"public"},"devDependencies":{"@types/node":"~26.1.2","typescript":"~7.0.2","vite":"^8.2.0","vitest":"~4.1.10"},"gitHead":"de87880320c8983ac39acb3c290fc87feb8ca8cb","_id":"@arcpx-org/sad@0.1.4","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-sypz1zNqA+MijymqY5WXX8s4mDjxlncu0BdYr30fXEeasVBEkSgxr4G2HK6KSp5RE9MxGPybzvQYUeQYCcrIXw==","shasum":"311271c2c796c525b30a5d771914f3e3fc84e377","tarball":"https://registry.npmjs.org/@arcpx-org/sad/-/sad-0.1.4.tgz","fileCount":45,"unpackedSize":57766,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC96l8ff7ASULxAw4H7uftKtAGgb1XniGB73MoT+wRDNwIgbR5rmYG455178Dkntv6IVIpPpgGyZfmlBy1E1/ag91o="}]},"_npmUser":{"name":"arcpx","email":"jeffong@arcpx.com"},"directories":{},"maintainers":[{"name":"arcpx","email":"jeffong@arcpx.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sad_0.1.4_1785523819036_0.9466412846965451"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-31T16:12:13.268Z","modified":"2026-07-31T18:50:19.355Z","0.1.0":"2026-07-31T16:12:13.623Z","0.1.1":"2026-07-31T16:45:07.727Z","0.1.2":"2026-07-31T17:24:14.937Z","0.1.3":"2026-07-31T17:27:56.111Z","0.1.4":"2026-07-31T18:50:19.182Z"},"bugs":{"url":"https://github.com/arcpx-eng/sad/issues"},"author":{"name":"Jeff Ong"},"license":"MIT","homepage":"https://github.com/arcpx-eng/sad#readme","keywords":["diff","json-diff","csv-diff","text-diff","pdf-diff","merkle-tree","myers-diff"],"repository":{"type":"git","url":"git+https://github.com/arcpx-eng/sad.git"},"description":"Compares two files (JSON, CSV, TXT, PDF) and reports what changed, using a Merkle tree filter plus Myers diff for word-level detail.","maintainers":[{"name":"arcpx","email":"jeffong@arcpx.com"}],"readme":"# 😢 SAD (Same and Different)\n\nCompares two files and shows what changed. Works with JSON, CSV, TXT, and PDF.\n\n**[Try the live demo →](https://arcpx-eng.github.io/sad/)**\n\n## How it works\n\nIt does all the standard Diff comparison and hash tree to execute fast comparison.\n\n## Get Started\n\n```bash\nnpm install @arcpx-org/sad\n```\n\n```ts\nimport { diffJson } from \"@arcpx-org/sad\";\n\nconst diffs = diffJson(oldObject, newObject);\n```\n\nOther file types work the same way:\n\n- `diffCsvFiles(oldPath, newPath)`\n- `diffTextCorpus(oldText, newText)`\n- `diffPdfFiles(oldPath, newPath)` — needs `poppler-utils` installed\n\nPrint a readable report:\n\n```ts\nimport { printDiffReport } from \"@arcpx-org/sad\";\n\nprintDiffReport(diffs);\n```\n\n## Scripts\n\n```bash\nnpm run build   # compile\nnpm start       # build and run\nnpm test        # run tests\n```\n\n## Live Demo\n\n**[arcpx-eng.github.io/sad](https://arcpx-eng.github.io/sad/)** — a browser demo under [`site/`](site/) that runs JSON, text, and CSV diffs entirely client-side (PDF isn't included — it relies on a system binary that only works in Node).\n\n```bash\nnpm run dev:site     # local dev server\nnpm run build:site   # build static files into site-dist/\n```\n\nPushes to `main` auto-deploy the demo to GitHub Pages via `.github/workflows/deploy-site.yml`. First time only: in the repo's Settings → Pages, set the source to \"GitHub Actions\".\n","readmeFilename":"README.md"}