{"_id":"@aliaksandarpratashchyk/suspenders","_rev":"2-ad786c03ca4412debb9bedf5455c02be","name":"@aliaksandarpratashchyk/suspenders","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@aliaksandarpratashchyk/suspenders","version":"1.0.0","keywords":["assert","assertion","type-guard","typeguard","type-predicate","typescript","runtime","validation","type-narrowing"],"author":{"name":"Aliaksandar Pratashchyk","email":"aliaksandarpratashchyk@gmail.com"},"license":"MIT","_id":"@aliaksandarpratashchyk/suspenders@1.0.0","maintainers":[{"name":"aliaksandarpratashchyk","email":"aliaksandarpratashchyk@gmail.com"}],"homepage":"https://github.com/aliaksandarpratashchyk/suspenders#readme","bugs":{"url":"https://github.com/aliaksandarpratashchyk/suspenders/issues"},"dist":{"shasum":"79080556eb24903607c7cfbaac9ac2fc218d789b","tarball":"https://registry.npmjs.org/@aliaksandarpratashchyk/suspenders/-/suspenders-1.0.0.tgz","fileCount":7,"integrity":"sha512-985UH9XjgDZ9x4QPVhTJSviy2acSHraws9DxXqMl37N9JSVsrJafSAAx1EPHProj0WQprhsaFQOgstVMWW0zcA==","signatures":[{"sig":"MEUCIQD6VYeAcmX0zD3Cw58/3wpqC5oT48DYqjE/l/Hk1x5A6gIgTruHjIFY2kO/OmXGZZGLjy/9pTzBgVF3FLTTa9eQQaU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37821},"main":"./dist/bundle.js","types":"./dist/bundle.d.ts","module":"./dist/bundle.js","gitHead":"d602ba5e619464c0119e07d43d5cf836473fdb82","scripts":{"lint":"cross-env ESLINT_ENV=cli npx eslint . --fix","test":"jest > COVERAGE.md && coverage-badges-cli -s ./coverage/coverage-summary.json -o ./coverage.svg --label Coverage","build":"webpack && api-extractor run --local && api-documenter markdown -i ./dist/temp -o ./docs && rimraf ./dist/temp","format":"npx prettier . --write"},"_npmUser":{"name":"aliaksandarpratashchyk","email":"aliaksandarpratashchyk@gmail.com"},"repository":{"url":"git+https://github.com/aliaksandarpratashchyk/suspenders.git","type":"git"},"_npmVersion":"10.8.2","description":"TypeScript assertion and type-guard toolkit for runtime validation and type narrowing.","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"cpx":"^1.2.1","jest":"^30.1.3","eslint":"^9.39.0","rimraf":"^6.1.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","webpack":"^5.102.1","prettier":"3.6.2","cross-env":"^10.1.0","ts-loader":"^9.5.4","@eslint/js":"^9.39.0","css-loader":"^7.1.2","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.6.2","webpack-cli":"^6.0.1","typescript-eslint":"^8.46.2","eslint-plugin-jest":"^29.0.1","coverage-badges-cli":"^2.2.0","html-webpack-plugin":"^5.6.4","terser-webpack-plugin":"^5.3.14","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.16.1","@microsoft/api-extractor":"^7.54.0","@microsoft/api-documenter":"^7.28.2","eslint-plugin-perfectionist":"^4.15.1","fork-ts-checker-webpack-plugin":"^9.1.0","@aliaksandarpratashchyk/kickcat":"^0.5.0","eslint-import-resolver-typescript":"^4.4.4"},"_npmOperationalInternal":{"tmp":"tmp/suspenders_1.0.0_1769218343593_0.2529800507640507","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aliaksandarpratashchyk/suspenders","version":"1.1.0","description":"TypeScript assertion and type-guard toolkit for runtime validation and type narrowing.","main":"./dist/bundle.js","module":"./dist/bundle.js","types":"./dist/bundle.d.ts","author":{"name":"Aliaksandar Pratashchyk","email":"aliaksandarpratashchyk@gmail.com"},"license":"MIT","keywords":["assert","assertion","type-guard","typeguard","type-predicate","typescript","runtime","validation","type-narrowing"],"repository":{"type":"git","url":"git+https://github.com/aliaksandarpratashchyk/suspenders.git"},"bugs":{"url":"https://github.com/aliaksandarpratashchyk/suspenders/issues"},"homepage":"https://github.com/aliaksandarpratashchyk/suspenders#readme","scripts":{"build":"webpack && api-extractor run --local && api-documenter markdown -i ./dist/temp -o ./docs && rimraf ./dist/temp","test":"jest > COVERAGE.md && coverage-badges-cli -s ./coverage/coverage-summary.json -o ./coverage.svg --label Coverage","format":"npx prettier . --write","lint":"cross-env ESLINT_ENV=cli npx eslint . --fix"},"devDependencies":{"@aliaksandarpratashchyk/kickcat":"^0.5.7","@eslint/js":"^9.39.0","@microsoft/api-documenter":"^7.28.2","@microsoft/api-extractor":"^7.54.0","@types/jest":"^30.0.0","@types/node":"^24.6.2","coverage-badges-cli":"^2.2.0","cpx":"^1.2.1","cross-env":"^10.1.0","css-loader":"^7.1.2","eslint":"^9.39.0","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jest":"^29.0.1","eslint-plugin-perfectionist":"^4.15.1","fork-ts-checker-webpack-plugin":"^9.1.0","html-webpack-plugin":"^5.6.4","jest":"^30.1.3","prettier":"3.6.2","rimraf":"^6.1.0","terser-webpack-plugin":"^5.3.14","ts-jest":"^29.4.4","ts-loader":"^9.5.4","ts-node":"^10.9.2","typescript":"^5.9.2","typescript-eslint":"^8.46.2","webpack":"^5.102.1","webpack-cli":"^6.0.1"},"_id":"@aliaksandarpratashchyk/suspenders@1.1.0","gitHead":"97bbc1b635175bfd70af00d07e3b5283a9f0f03f","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-C8xxwduxSTq5nh6zST66ALuk3tvjvD1WCFo70pUf7JgtrEp3moX7QMEvDSx8XWAbULqI4r3lC8R8B+LsarynlA==","shasum":"bc0231b3a33bcde030cf6ca24da7745362a6e377","tarball":"https://registry.npmjs.org/@aliaksandarpratashchyk/suspenders/-/suspenders-1.1.0.tgz","fileCount":7,"unpackedSize":41834,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFpnzKboM4RNChWsTjF3J49p2CwqhR8kMwYKfzW85bBhAiEAzycEVqNCsF5HhpOEbw5l5WjUlSvNNUzZbFSAVislD1E="}]},"_npmUser":{"name":"aliaksandarpratashchyk","email":"aliaksandarpratashchyk@gmail.com"},"directories":{},"maintainers":[{"name":"aliaksandarpratashchyk","email":"aliaksandarpratashchyk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/suspenders_1.1.0_1770319839609_0.24954300832965837"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-24T01:32:23.511Z","modified":"2026-02-05T19:30:39.917Z","1.0.0":"2026-01-24T01:32:23.741Z","1.1.0":"2026-02-05T19:30:39.801Z"},"bugs":{"url":"https://github.com/aliaksandarpratashchyk/suspenders/issues"},"author":{"name":"Aliaksandar Pratashchyk","email":"aliaksandarpratashchyk@gmail.com"},"license":"MIT","homepage":"https://github.com/aliaksandarpratashchyk/suspenders#readme","keywords":["assert","assertion","type-guard","typeguard","type-predicate","typescript","runtime","validation","type-narrowing"],"repository":{"type":"git","url":"git+https://github.com/aliaksandarpratashchyk/suspenders.git"},"description":"TypeScript assertion and type-guard toolkit for runtime validation and type narrowing.","maintainers":[{"name":"aliaksandarpratashchyk","email":"aliaksandarpratashchyk@gmail.com"}],"readme":"# Suspenders\n\n![CI](https://github.com/aliaksandarpratashchyk/suspenders/actions/workflows/test.yml/badge.svg)\n[![Coverage](./coverage.svg)](./COVERAGE.md)\n\nSuspenders is a small TypeScript-first assertion and type-guard toolkit for runtime validation and type narrowing.\n\n## Installation\n\n```bash\nnpm i @aliaksandarpratashchyk/suspenders\n```\n\n## Usage\n\n```ts\nimport { assert, isNumber, safe, unsafe } from \"@aliaksandarpratashchyk/suspenders\";\n\nconst value: unknown = \"123\";\n\n// Type guard: narrow in an if-statement\nif (isNumber(value)) {\n  value.toFixed(2);\n}\n\n// Assertion: throws and narrows the type (via `asserts`)\nassert(typeof value === \"string\");\nassert.string(value);\n\n// Safe cast: returns a typed value or throws a TypeError\nconst asNumber = safe.number;\nconst n = asNumber(123);\n\n// Unsafe cast: no runtime checks\nconst definitelyNumber = unsafe<number>(value);\n```\n\n## API Reference\n\n- Run `npm run build` to regenerate API docs into `docs/`.\n\n## Scripts\n\n- `npm test` — run the Jest suite, regenerate `COVERAGE.md`, and update `coverage.svg`.\n- `npm run build` — bundle the library and regenerate API docs (`docs/`).\n- `npm run lint` / `npm run format` — lint and format the codebase.\n\n## Publishing\n\nGitHub Actions runs tests on pushes/PRs and publishes to npm when the version in `package.json` changes on `main`. Set `NPM_TOKEN` in repository secrets to enable publishing.\n","readmeFilename":"README.md"}