{"_id":"@bakerface/ts-mixin","_rev":"1-06f2f9b906f07b71678f4ffe2cac2f1c","name":"@bakerface/ts-mixin","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.2":{"name":"@bakerface/ts-mixin","version":"1.0.2","description":"A type-only package for creating mixins in TypeScript","homepage":"https://github.com/bakerface/ts-mixin","license":"MIT","main":"","types":"index.d.ts","scripts":{},"dependencies":{},"gitHead":"de31dbea2616a125c640ee7d125c26e3ebcdb618","_id":"@bakerface/ts-mixin@1.0.2","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-DJNFhK9jq429hBUdzQruiiMNv8FCpTOqOxD6WqAYbu2JAdMw7v2nUs2cbWC3FjigVrIoIR0K0LGm8CbzlbcMKQ==","shasum":"f406981a00bb4f8227564d72f1b21755b13f0ad7","tarball":"https://registry.npmjs.org/@bakerface/ts-mixin/-/ts-mixin-1.0.2.tgz","fileCount":3,"unpackedSize":1549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaeiRCRA9TVsSAnZWagAAaj0P/RUGqMiKNhpVZKSXeMhB\nkr6pyvE0Cwhv2blz5ATku5FSywSQA7H4Zy9OFPtAlN+Uan/Di8gOAB3mGmGj\nmJ+LwQYKkBQzu0k4hZ4NE6FqjsOzPpADZojqBCKd+eYMzeP/uKiva4Xq6uOY\nquMfjJkB0KYLlZo9Zz5J50cc2zJ/oTiRSiQ7UkSUL+/k+32bOVgC5J8vUHpy\nju0GC7qu3r4fP6hapANGPE7yjmGzzs5BwFlGvLaJ5CyBqbUu2wV8ZH+Z9RJs\n+GnYnG2bpUA9hAb+9hz8eoswVNE2snJE5IvyT/sIGPJJLHLkqQTCArLowGBx\nzyktmqeprabDMTchr9gVct7z9R+5FIIlRw4Zo9ux0lDEd7TDYKobigXLd1hD\nChwhPkb+IDHqq/OkNo10qKnaalAozcKpqGD33wVAfY4C/vpxh+1o3tlMKcwf\nkt8o64Y5X0syHSyiwRBfKJ+y6FbikmEaS8ak9gzFXMJXzth9MAnZGq1ISvEl\nDLxCN7YHdhT5/kMwoQQHN2nrZ0YOs7d7IphloineiUDWWdwycI8DBvr/4Q4/\nWu0Jlr8HJuSjooMFyuKImFWgGYYvNWeKitKtJ1mMHY1ef4woDCkmya3vmqyP\nZ/xlwnAIC3DaMGiHP9nZpykN3SSbzR9S2OL1UZj/R9M1FjLV86pVquoYxjZ4\nY1fS\r\n=N911\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDtQ8XIhXM5+W8QKeoYT21wqJK5PDK+WwTGbY4Nx6fLPAiEAkVaaiINP7jy5foC9WhSbnFbZX7HQ9cfeLyZ3Ay5z23Q="}]},"_npmUser":{"name":"bakerface","email":"mail.chris.baker@gmail.com"},"directories":{},"maintainers":[{"name":"bakerface","email":"mail.chris.baker@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-mixin_1.0.2_1617553553056_0.003840435059132563"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-04T16:25:52.987Z","1.0.2":"2021-04-04T16:25:53.227Z","modified":"2022-04-04T17:32:06.045Z"},"maintainers":[{"name":"bakerface","email":"mail.chris.baker@gmail.com"}],"description":"A type-only package for creating mixins in TypeScript","homepage":"https://github.com/bakerface/ts-mixin","license":"MIT","readme":"# ts-mixin\n**A type-only package for creating mixins in TypeScript**\n\n``` typescript\nimport type { Mixin } from \"@bakerface/ts-mixin\";\n\ninterface AmountFeatures {\n  getAmount(): number;\n  setAmount(n: number): void;\n}\n\ninterface AddFeatures {\n  add(a: number): void;\n}\n\nconst withAdd: Mixin<AddFeatures, AmountFeatures> = (Base) =>\n  class extends Base implements AddFeatures {\n    add(n: number): void {\n      this.setAmount(this.getAmount() + n);\n    }\n  };\n\ninterface SubtractFeatures {\n  subtract(n: number): void;\n}\n\nconst withSubtract: Mixin<SubtractFeatures, AddFeatures> = (Base) =>\n  class extends Base implements SubtractFeatures {\n    subtract(n: number): void {\n      return this.add(-n);\n    }\n  };\n\nclass Amount implements AmountFeatures {\n  constructor(private amount: number) {}\n\n  getAmount(): number {\n    return this.amount;\n  }\n\n  setAmount(n: number): void {\n    this.amount = n;\n  }\n}\n\nconst Calculator = withSubtract(withAdd(Amount));\n\nconst calculator = new Calculator(0);\ncalculator.add(5);\ncalculator.subtract(3);\ncalculator.getAmount(); // 2\n```\n","readmeFilename":"README.md"}