{"_id":"@alex6357/rustyjs","_rev":"2-03379834016231742e11756c4b999ba6","name":"@alex6357/rustyjs","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@alex6357/rustyjs","version":"1.0.0","keywords":["rust","trait","impl","implimentation","composition"],"author":{"name":"Alex6357"},"license":"(Apache-2.0 OR MIT)","_id":"@alex6357/rustyjs@1.0.0","maintainers":[{"name":"alex6357","email":"1746907849@qq.com"}],"homepage":"https://github.com/alex6357/rustyjs#readme","bugs":{"url":"https://github.com/alex6357/rustyjs/issues"},"dist":{"shasum":"27d60bd1c1a495b2a1c8079742fe4758c7a332e2","tarball":"https://registry.npmjs.org/@alex6357/rustyjs/-/rustyjs-1.0.0.tgz","fileCount":6,"integrity":"sha512-onxEr1dTVCwixJdeDBBiV+jOOrLKZGS9zEQiDIcfpdTBcoweJ/7WM5+Fhori8vU8AShGe+jwpRnZAC1HEg6Q9w==","signatures":[{"sig":"MEQCIFgqbmytio4nDzzoNsfI2ksgymUUlxKj5tqjBB6W7i2TAiAseriw8VMPVncw6TAT33fXi7+FJgv2QVstPZf538wlFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27068},"main":"dist/index.js","type":"module","_from":"file:alex6357-rustyjs-1.0.0.tgz","types":"./dist/index.d.ts","scripts":{"test":"node ./tests/dist/all-tests.js","build":"tsc","clean":"rimraf dist","test:build":"esbuild tests/index.ts --bundle --outfile=tests/dist/all-tests.js --format=esm","test:clean":"rimraf tests/dist"},"_npmUser":{"name":"alex6357","email":"1746907849@qq.com"},"_resolved":"C:\\Users\\Alex11\\AppData\\Local\\Temp\\6d774865092db5984b9d3c5297407e03\\alex6357-rustyjs-1.0.0.tgz","_integrity":"sha512-onxEr1dTVCwixJdeDBBiV+jOOrLKZGS9zEQiDIcfpdTBcoweJ/7WM5+Fhori8vU8AShGe+jwpRnZAC1HEg6Q9w==","repository":{"url":"git+https://github.com/alex6357/rustyjs.git","type":"git"},"_npmVersion":"11.6.2","description":"Introduce Rust traits to JavaScript","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","esbuild":"^0.27.3","typescript":"^5.9.3","@types/node":"^25.3.1"},"_npmOperationalInternal":{"tmp":"tmp/rustyjs_1.0.0_1772110395902_0.06001024132273436","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@alex6357/rustyjs","version":"2.0.0","description":"Introduce Rust traits to JavaScript","keywords":["composition","impl","implimentation","option","result","rust","trait"],"repository":{"type":"git","url":"git+https://github.com/alex6357/rustyjs.git"},"license":"(Apache-2.0 OR MIT)","author":{"name":"Alex6357"},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./impl":{"types":"./dist/impl.d.mts","import":"./dist/impl.mjs"},"./option":{"types":"./dist/option.d.mts","import":"./dist/option.mjs"},"./option/core":{"types":"./dist/option-core.d.mts","import":"./dist/option-core.mjs"},"./option/core/newable":{"types":"./dist/option-core-newable.d.mts","import":"./dist/option-core-newable.mjs"},"./option/core/option":{"types":"./dist/option/core/option.d.mts","import":null},"./option/extensions":{"types":"./dist/option-extensions.d.mts","import":"./dist/option-extensions.mjs"},"./option/extensions/all":{"types":"./dist/option-extensions-all.d.mts","import":"./dist/option-extensions-all.mjs"},"./option/extensions/register":null,"./option/extensions/*":{"types":"./dist/option/extensions/*.d.mts","import":"./dist/option/extensions/*.mjs"},"./result":{"types":"./dist/result.d.mts","import":"./dist/result.mjs"},"./result/core":{"types":"./dist/result-core.d.mts","import":"./dist/result-core.mjs"},"./result/core/newable":{"types":"./dist/result-core-newable.d.mts","import":"./dist/result-core-newable.mjs"},"./result/core/result":{"types":"./dist/result/core/result.d.mts","import":null},"./result/extensions":{"types":"./dist/result-extensions.d.mts","import":"./dist/result-extensions.mjs"},"./result/extensions/all":{"types":"./dist/result-extensions-all.d.mts","import":"./dist/result-extensions-all.mjs"},"./result/extensions/register":null,"./result/extensions/*":{"types":"./dist/result/extensions/*.d.mts","import":"./dist/result/extensions/*.mjs"}},"main":"dist/index.mjs","scripts":{"build":"tsdown","check":"tsc","clean":"rimraf dist","format":"oxfmt .","lint":"oxlint .","prepublishOnly":"pnpm clean && pnpm build","test":"vitest run","test:watch":"vitest"},"devDependencies":{"@types/node":"^25.3.1","oxfmt":"^0.65.0","oxlint":"^1.80.0","rimraf":"^6.1.3","tsdown":"^0.22.14","typescript":"^7.0.2","vitest":"^4.1.11"},"packageManager":"pnpm@11.24.0+sha512.bd27e345e976dcb0be0b7a1228217b049a817e21b1f355c90dbe7dc46671895a8bc1e6d06c24554505ea93ea0b45f489a27ec1bfbc8de6a9659fca0f16fa0000","devEngines":{"runtime":[{"name":"node","version":"^24.0.0","onFail":"download"}]},"publishConfig":{"access":"public"},"gitHead":"4456cf5a40e2ea16b32f76992c00b03b001e8fa5","_id":"@alex6357/rustyjs@2.0.0","bugs":{"url":"https://github.com/alex6357/rustyjs/issues"},"homepage":"https://github.com/alex6357/rustyjs#readme","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-/1JECuWzOtAXCiObEWN8yv8TgAmS5N4Asw+fmy63UgVvlHKwkjdauS902Z50lp/aL9qi8O3WUPRJsZ28YNOQ7g==","shasum":"a67c5e8121e94defa70cce774dff624ebb944427","tarball":"https://registry.npmjs.org/@alex6357/rustyjs/-/rustyjs-2.0.0.tgz","fileCount":54,"unpackedSize":40836,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGggR6uV9NfNdVc60QBdf97iMSfIEeH5HpNkaFyvxiRKAiEAhP5186BMcUXcARRKDvIdSwJunD55yNfklAPviVvREkU="}]},"_npmUser":{"name":"alex6357","email":"1746907849@qq.com"},"directories":{},"maintainers":[{"name":"alex6357","email":"1746907849@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rustyjs_2.0.0_1787898124218_0.7533191301431743"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-26T12:53:15.798Z","modified":"2026-08-28T06:22:04.494Z","1.0.0":"2026-02-26T12:53:16.062Z","2.0.0":"2026-08-28T06:22:04.354Z"},"bugs":{"url":"https://github.com/alex6357/rustyjs/issues"},"author":{"name":"Alex6357"},"license":"(Apache-2.0 OR MIT)","homepage":"https://github.com/alex6357/rustyjs#readme","keywords":["composition","impl","implimentation","option","result","rust","trait"],"repository":{"type":"git","url":"git+https://github.com/alex6357/rustyjs.git"},"description":"Introduce Rust traits to JavaScript","maintainers":[{"name":"alex6357","email":"1746907849@qq.com"}],"readme":"# RustyJS\n\nWrite JavaScript with Rust's mental model.\n\n## What's inside\n\n- **Impl** — Rust-style traits. `Struct` (data) is separated from `Impl` (behavior), and implementations are stamped onto classes at load time. No prototype chain crawling.\n- **Result / Option** — `std::result::Result` and `std::option::Option` in JavaScript. Use the core only, or opt into extensions one by one.\n\n## Install\n\n```bash\npnpm add @alex6357/rustyjs\n```\n\n## Entry points\n\n```typescript\n// The root entry has everything: impl, result, option, and all builtin\n// extensions. Use it if you want all of rustyjs.\nimport { err, initImpl, none, ok, some } from \"@alex6357/rustyjs\";\n\n// If you only need one part, import it on demand.\nimport { initImpl } from \"@alex6357/rustyjs/impl\";\nimport { ok } from \"@alex6357/rustyjs/result\";\nimport { some } from \"@alex6357/rustyjs/option\";\n```\n\n## Quick look\n\nTraits:\n\n```typescript\nimport { initImpl } from \"@alex6357/rustyjs/impl\";\n\nconst { STATE, ImplFor } = initImpl();\n\n// Trait\ninterface TraitHasName {\n  readonly name: string;\n}\n\n// Class is still the entry point.\n// The interface mixin lets the language server know what methods are available.\ninterface Dog extends TraitHasName {}\nclass Dog {\n  constructor(name: string) {\n    STATE.init(this, { name });\n  }\n}\n\n// Implementation block, i.e. `impl TraitHasName for Dog`\n@ImplFor(Dog)\nclass ImplHasNameForDog implements TraitHasName {\n  get name() {\n    return STATE.get(this).name;\n  }\n}\n\nnew Dog(\"Buddy\").name; // \"Buddy\"\n```\n\nResult and Option:\n\n```typescript\nimport { err, ok, wrap } from \"@alex6357/rustyjs/result\";\nimport { none, some } from \"@alex6357/rustyjs/option\";\n\nok(21)\n  .map((x) => x * 2)\n  .unwrap(); // 42\nerr(\"boom\").unwrapOr(0); // 0\nwrap(() => JSON.parse(\"nope\")).isErr(); // true\nsome(21)\n  .map((x) => x * 2)\n  .unwrap(); // 42\n```\n\n## Documentation\n\n- [Impl - traits, state, inheritance and performance](docs/impl.md)\n- [Result and Option - full import, core only, extensions and writing your own](docs/result-and-option.md)\n\n## Build and test\n\n```bash\n# Build\npnpm build\n# Test\npnpm test\n```\n\n## License\n\nLicensed under either of Apache License, Version 2.0 or MIT license at your option.\n","readmeFilename":"README.md"}