{"_id":"@codefrite/design-patterns","_rev":"18-647c89942bc91bf31108d72c9f948974","name":"@codefrite/design-patterns","dist-tags":{"latest":"1.1.10"},"versions":{"1.0.0":{"name":"@codefrite/design-patterns","version":"1.0.0","description":"NPM TS library for common design-patterns","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"@types/uuid":"^9.0.2","uuid":"^9.0.0"},"devDependencies":{"@types/chai":"^4.3.5","@types/mocha":"^10.0.1","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.0","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-QI9Gx9i6qFRjpqYI+7wi8DYs6KAftSZSceIwEePMoTxqz7wa/L8d2e1uLTXQBE5iUg96TcRvq7Kau6DiFug8Tw==","shasum":"f40ba6047cf12aad5791faba73db0c2d171f1249","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.0.tgz","fileCount":44,"unpackedSize":86883,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyqJIffapS/2vdOamk2hnW4AXuk5ZqxUjHd951m3zgdwIhAN6PmtbPN/NdWb7nYyQrgO7ed3TSrQ16ghVIhuS/7INo"}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.0_1686945287197_0.5442332633675306"},"_hasShrinkwrap":false},"1.0.1":{"name":"@codefrite/design-patterns","version":"1.0.1","description":"NPM TS library for common design-patterns","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"@types/uuid":"^9.0.2","uuid":"^9.0.0"},"devDependencies":{"@types/chai":"^4.3.5","@types/mocha":"^10.0.1","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.1","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-ezeOAHij2lw0zqXblomhhbFK6FnN5SrZYsO1HD9FdOlECPkZsXDztXs22nIpa5X2XQNTTeaTkBIQt1WIH2YqDw==","shasum":"3c6f357352d9ab661c94b071568cad35b8f1ee60","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.1.tgz","fileCount":46,"unpackedSize":88045,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpK94cvCEjs2VCax3K29+K0rPufVNTMFXWYpBYZ2KFowIhAPOVkACAM8GLKvhibRVWYk5J3O85rf5Agfnol/1PnG9P"}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.1_1686946573061_0.7152200045397079"},"_hasShrinkwrap":false},"1.0.2":{"name":"@codefrite/design-patterns","version":"1.0.2","description":"NPM TS library for common design-patterns","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"@types/uuid":"^9.0.2","uuid":"^9.0.0"},"devDependencies":{"@types/chai":"^4.3.5","@types/mocha":"^10.0.1","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.2","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-sQ16Zpm0kq939uVdeN+tcD5elI6a6Kwz4U9Od3M6hY1l3zasOAdmAmAI7dEIm3sZjRUQEUobM+O5PnyFKcJVhg==","shasum":"b5912d157ef27a5bb8d4cd887d78112f7a3ab46a","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.2.tgz","fileCount":22,"unpackedSize":33677,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSKUD4Oe2IJPfIU+4Rrtgg1eFh/XFZ1m+etTAEkLFROQIgPIjmSoHz7PwGKZNw49+L8Xr1EVbL+LDYqS/9V940Uwg="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.2_1686947785392_0.3179080402260497"},"_hasShrinkwrap":false},"1.0.3":{"name":"@codefrite/design-patterns","version":"1.0.3","description":"NPM TS library for common design-patterns","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"@types/uuid":"^9.0.2","uuid":"^9.0.0"},"devDependencies":{"@types/chai":"^4.3.5","@types/mocha":"^10.0.1","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.3","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-q11ow3WpqA/qcCMxuaOx3H69zSGu9IMHYaL+yXoAM46ovJ8LUuAnSbzFmCnNBon2ORY+63yNS3kiVsfqg+Mdiw==","shasum":"91c3ada449f711b5d15a5bb74604ab0fd0a0dddd","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.3.tgz","fileCount":40,"unpackedSize":52631,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICU3Mq7/4xgRnx5p3XfwEukMdewQV5o4unkdjPreZTL/AiEA6NbcKIX7hQ9F1q6/hleTsmHIhthM9vQ3V/cyPJjU50g="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.3_1686950770620_0.3488043599484403"},"_hasShrinkwrap":false},"1.0.4":{"name":"@codefrite/design-patterns","version":"1.0.4","description":"NPM TS library for common design-patterns","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"@types/uuid":"^9.0.2","uuid":"^9.0.0"},"devDependencies":{"@types/chai":"^4.3.5","@types/mocha":"^10.0.1","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.4","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-jxQ5keFJMO84jH3VD/CMaMhyD4CbTIfRL28h7HeY+v5AE4APb9MyQ60Mbo2zTHz78FNgkFp1uDXjbWabyhm6vw==","shasum":"b6a96130558015971bc61b0ccfb7f0ce9f065ffe","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.4.tgz","fileCount":40,"unpackedSize":52941,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWtrkBF9BGFrwD1tJk4mU37b9ZQGfialq6stlG8xHdrgIhAJ9kTZb7W6NP9excgmfq1rvZPXuhNCrUEq4imqZQ9umd"}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.4_1686951638678_0.40902736872399004"},"_hasShrinkwrap":false},"1.0.6":{"name":"@codefrite/design-patterns","version":"1.0.6","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.6","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-jvNGMIEmbBo7Z4G03CyU3g6lNeR5NQaC0yj6kozCWiqE5XgVz/SgjnJKF/v/91GwtoqEdkODvAKzz9M5vhfIzg==","shasum":"74662764b31f7f4c0e3244ed69315056b63852dd","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.6.tgz","fileCount":14,"unpackedSize":23829,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZSk0aDCHV9TVfSlDW/5r6rU4C31MRwWnzCHTFfYX6LAiAaeu1kxVfIf8sf9j1k8f83i86kH/QmkCakJefQMTWUsA=="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.6_1686978860862_0.5913903011954602"},"_hasShrinkwrap":false},"1.0.7":{"name":"@codefrite/design-patterns","version":"1.0.7","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"_id":"@codefrite/design-patterns@1.0.7","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-QlZXcwBMzj+rCxls33hhJyJBj5IWg9VmO60q+5r3Xpye+/N5EP9tvChpvJ5dPaU920KFYO1I6zEY5+QKcpG0lQ==","shasum":"ce612d806108132bb4133beb0a8b930b840e75bb","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.7.tgz","fileCount":14,"unpackedSize":23497,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7DeZXHP+Q54QyRnvG9njUWnnUzPTL1ql0HTjGQqDdIAIge8VhZCGGSndXcv4xkMau8gC5fy3vhQnzXN0qV37z9Ik="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.7_1686981300604_0.6386467503146338"},"_hasShrinkwrap":false},"1.0.8":{"name":"@codefrite/design-patterns","version":"1.0.8","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"gitHead":"9e3222381a1ac37e5eaeaa24b869211d91504e7a","_id":"@codefrite/design-patterns@1.0.8","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-tc6dC7MorhabaD/QxK5RVInL+8W/UXP1WLQ2Z/YRDMR6tG6OIcPcpyuZkm48KQ/1bpBQ/hKFYaZNWzwt45yAUw==","shasum":"ae6c909e0b9d85fb03ec94d57cfe080539f89c7f","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.0.8.tgz","fileCount":14,"unpackedSize":26522,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2O+BkP3CKCpYEGWSft1jtkDre/M/PZec6FlkpCxkLjAiEAwoqaZ3KR2Wk/Cx4kuneAw9hDQ6QeAgzGWefYTG013uA="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.0.8_1687198839440_0.908017867960077"},"_hasShrinkwrap":false},"1.1.0":{"name":"@codefrite/design-patterns","version":"1.1.0","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"gitHead":"7c1d4bb094db5164d18b1ea1891e750752447771","_id":"@codefrite/design-patterns@1.1.0","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-3ThGlvfRZ3QCNR4bHRJKn+M0t2J/w4g9kqHcmbFkK9dD65OJUF3mRL7ROtciTSrOUSgqBjUFsccBdbToihYNxw==","shasum":"fd2e75c96876e46b8ef40b30d81b8bbb9deb0e11","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.0.tgz","fileCount":15,"unpackedSize":27582,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnWPHNin0wsKn6sPTYdVJIXssuKJd41ygolUE2sTrfcQIhAJO86TkFqVtPKOAKU42q8w53yPTW9/SzCaSNueyWKlsx"}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.0_1689077358052_0.4199166841796851"},"_hasShrinkwrap":false},"1.1.1":{"name":"@codefrite/design-patterns","version":"1.1.1","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"gitHead":"3626f9476aa520dc74505dcbd77fe92feed5634d","_id":"@codefrite/design-patterns@1.1.1","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-qurd0pm1b1hXg8TimQJXz+AzDyL8PJtJw7C/xiqCgXuxclDVkwf2yHQbVfQWuSbNKOu+/0ojwM6kczWGJiiS0A==","shasum":"76f2e2b8bb1956ccad77172c06fb60ce3b3fc17a","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.1.tgz","fileCount":15,"unpackedSize":27179,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCzNCE+YDfWWrsJY0cI8E2z/wpwOjxJ4xpBi6NJyhWpQIgSPobqDCj9DQkU8koO4hkRSjZ72lrqQ2OzxNhljFt+P8="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.1_1689878111577_0.006634658681271111"},"_hasShrinkwrap":false},"1.1.2":{"name":"@codefrite/design-patterns","version":"1.1.2","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"gitHead":"ffc5f7369adbcf9bd59ce7bbdae573f8b74a1b75","_id":"@codefrite/design-patterns@1.1.2","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-2k8SHM9nopwJCXFX9mEUAMMXpkovw8xvepfxZ2QcLsk1cWA2EMT067Moc5SVctOt+64E/zY122D7FXq0E+2/yg==","shasum":"f879216d07a42c46d7c9ef6ba540c4079dc601eb","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.2.tgz","fileCount":15,"unpackedSize":27279,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICxGnSSYeGoUTyzqtWLLGtAj7tmH2Y4XNNCJaq00wVkQAiBwcJaph0SSZVJbkVeZyn6GMhao0o57Qqhbld1TPiU8tw=="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.2_1689879526002_0.1588048289492494"},"_hasShrinkwrap":false},"1.1.3":{"name":"@codefrite/design-patterns","version":"1.1.3","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"dependencies":{"uuid":"^9.0.0"},"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"gitHead":"e6d2474e353a9d50fedec62a65f86213644144a3","_id":"@codefrite/design-patterns@1.1.3","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-otzOoe5JFBdYV79fMA/TW5uP0V2RON7T7PGIZlWSyriMnzZ6q/bw9xpfRyv1L6DLJGDqk9JIuS9muQoM0Fwu6w==","shasum":"84aa6c2007299a0f75d80553ac13c0dd35a812b5","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.3.tgz","fileCount":15,"unpackedSize":31918,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDq09p+mgTgh9uvghd6IDqW7Dtmg7+vdwkcHS8C/i5c+wIgSs30cCbncElgBqdjnlQHqH4UkpvfObZUB0BwoLQztqk="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.3_1690218676505_0.8447609766020121"},"_hasShrinkwrap":false},"1.1.4":{"name":"@codefrite/design-patterns","version":"1.1.4","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"58bdecce0cc53dd2dab4e19b40f7f8039052294a","_id":"@codefrite/design-patterns@1.1.4","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-dZ4d5jaJ2gB4daYqK4npv/MyEm/gRs2JmL6MUzo5+t/2RKzQiVpozHdeV7SFU3Y4Y37SgMWqycHYKMAj7ItR7A==","shasum":"92f91498f2475ad7553a027a17e89d26d6f82fb2","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.4.tgz","fileCount":15,"unpackedSize":131428,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHt/sPCqDecLWFZyU4zcnW2ufH6pRrjDTuiyE8VfwClBAiB7pNCvNyjh2rXGSPednZrebHW7BzscsBWykkMotrPLVg=="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.4_1696978725845_0.5349461650539153"},"_hasShrinkwrap":false},"1.1.5":{"name":"@codefrite/design-patterns","version":"1.1.5","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"21d87737d3c1fc67915f62decdc70c573cbde097","_id":"@codefrite/design-patterns@1.1.5","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-JbMYhsP9CR17WfY2ANSTqYO80ultOKp33OPE5jKz1EyAANsFk6OBQ+EJDISb8mwunwsnTlq1ocgKzls4zapTFQ==","shasum":"2185d7fc10d84d5b44cea482861fc0f1808fbec2","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.5.tgz","fileCount":15,"unpackedSize":131885,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsogJudnhvCS298IAqH2vEseAxub410HR4g+QZ7Gl8lgIhANHiOYzJPa5cV4dKxN8mMzsdbmDSJ3mGMQdXKeU1zwLP"}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.5_1697181435271_0.6461405587349791"},"_hasShrinkwrap":false},"1.1.6":{"name":"@codefrite/design-patterns","version":"1.1.6","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","prepublish":"tsc","publish":"npm publish --access public"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"21d87737d3c1fc67915f62decdc70c573cbde097","_id":"@codefrite/design-patterns@1.1.6","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-8lqlVNoNh3kjmjj4BeRVUuM9nKYNJUfvQ9LT7BBphBmc1VyvT39HSOTq5xCVouVhY+sPO5TAhPXGIWacOfo+lg==","shasum":"1b06df3b829b502747081babb05fccea6580f47b","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.6.tgz","fileCount":15,"unpackedSize":132278,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZfAnupB0ax6EMHelCAXtIJ4+F4oemVciIPbe+KVJg3QIhALFQfTbRM1EqmJQiUMMP2oZf6LfiQEsq/3/YZ+dR7e3d"}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.6_1699647202616_0.8457288170640533"},"_hasShrinkwrap":false},"1.1.7":{"name":"@codefrite/design-patterns","version":"1.1.7","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","unit-testing-file":"tsc -p tsconfig.tst.json && mocha --require ts-node/register $0","prepublish":"tsc","publish":"npm publish --access public"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"1503ebbc0d033c2bdc2b8a0942c442854596cf95","_id":"@codefrite/design-patterns@1.1.7","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-hejxPP5Tw78dyEupytFlT+xrzL1tcJDCoTO1PAEcLDq3sFDeKNiTsU/2Tl6cbNu15GZ0cejLwjA2hwixJIq8BA==","shasum":"cc3f0061f64db391ef2129b7588eb0bacfbc7672","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.7.tgz","fileCount":15,"unpackedSize":138060,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXmKlNN2qnV8vwuqrJu8Fu26lGxmpUbd78BSXjlAhvHgIgS5AZYPcecRvuNF290WeBESPBVhy3Fvrv47tNpBInACY="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.7_1703306222440_0.25734684091685467"},"_hasShrinkwrap":false},"1.1.8":{"name":"@codefrite/design-patterns","version":"1.1.8","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","unit-testing-file":"tsc -p tsconfig.tst.json && mocha --require ts-node/register $0","prepublish":"tsc","publish":"npm publish --access public"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"1503ebbc0d033c2bdc2b8a0942c442854596cf95","_id":"@codefrite/design-patterns@1.1.8","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-z4N/FMTmV4iYo9S0/UEalb6MxuWb66CHXBOsO/VQDJBp9JddWkxBdNHwjO/8jxrCaXNbGNDIz751Ovgpt7BRow==","shasum":"51e1231849eeb531af97a5bf0c7e0d95e3507bea","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.8.tgz","fileCount":15,"unpackedSize":138060,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBOPpln2eMS6whC4KCZpyLdu7Ecv/KEQnzMtVcZmJtjTAiBGq6tv+ui7OUqP6q3Mb0WvkLPo4q+whWDn4c8nepKvIQ=="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.8_1703306340122_0.023879771357809165"},"_hasShrinkwrap":false},"1.1.9":{"name":"@codefrite/design-patterns","version":"1.1.9","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","unit-testing-file":"tsc -p tsconfig.tst.json && mocha --require ts-node/register $0","prepublish":"tsc","publish":"npm publish --access public"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"a48ca7a48731bbfbc33b53c9018bd781c5f687b2","_id":"@codefrite/design-patterns@1.1.9","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-rP7BlA6ErK826KcW2F7JYevdkxNhqdsLtJ6QZ1ujfaJq0ve4d2x+BIwUxTLOKkrGrZYHT2V1zgOMPlfZm4/1Jg==","shasum":"2825704f7549035c4c7d57870f247d7514f02d9d","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.9.tgz","fileCount":15,"unpackedSize":137087,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtu22tE9CNOb8pGsyne+biU1t3+dbI1VlxHzLfMcafMgIgHs7HprSxafMKrXOaKrVaFlLkBOPv658y0xdfmcwMa5M="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.9_1703353896440_0.08823713200340233"},"_hasShrinkwrap":false},"1.1.10":{"name":"@codefrite/design-patterns","version":"1.1.10","description":"Common design-patterns in TypeScript","author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","declaration":true,"scripts":{"unit-testing":"tsc -p tsconfig.tst.json && mocha --recursive --require ts-node/register test/**/*.test.ts","unit-testing-file":"tsc -p tsconfig.tst.json && mocha --require ts-node/register $0","prepublish":"tsc","publish":"npm publish --access public"},"keywords":["design","patterns","typescript"],"devDependencies":{"@codefrite/data-structure":"^1.0.0","@types/chai":"^4.3.5","@types/mocha":"^10.0.1","@types/uuid":"^9.0.2","chai":"^4.3.7","mocha":"^10.2.0","ts-node":"^10.9.1","typescript":"^5.1.3"},"peerDependencies":{"uuid":"^9.0.0"},"gitHead":"e1fc5f7c1a58c9fe75ee4930b95494b41d969180","_id":"@codefrite/design-patterns@1.1.10","_nodeVersion":"20.3.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-+73B95wBNqfnafQeLDcyeS/mVkp8JZSgRADkfLY61LyVsT5jQTYJF1XrOTabV3/VvRNxOls8QZZMtR2FssCwrQ==","shasum":"5276766662d2cba66f005919bec83204a21c7048","tarball":"https://registry.npmjs.org/@codefrite/design-patterns/-/design-patterns-1.1.10.tgz","fileCount":15,"unpackedSize":137482,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDPaH4znFZ45JkqEAoSOZIAwAWYuGpFFjdXVDqyD94fiAiAqKLCOHbZtaqTqN0yLurrW42hW8qfBngs9kl4bz4wBYQ=="}]},"_npmUser":{"name":"codefrite","email":"codefrite@gmail.com"},"directories":{},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/design-patterns_1.1.10_1703359947642_0.9249141298586268"},"_hasShrinkwrap":false}},"time":{"created":"2023-06-16T19:54:47.107Z","1.0.0":"2023-06-16T19:54:47.353Z","modified":"2023-12-23T19:32:28.076Z","1.0.1":"2023-06-16T20:16:13.235Z","1.0.2":"2023-06-16T20:36:25.580Z","1.0.3":"2023-06-16T21:26:10.837Z","1.0.4":"2023-06-16T21:40:38.848Z","1.0.6":"2023-06-17T05:14:21.016Z","1.0.7":"2023-06-17T05:55:00.750Z","1.0.8":"2023-06-19T18:20:39.674Z","1.1.0":"2023-07-11T12:09:18.238Z","1.1.1":"2023-07-20T18:35:11.762Z","1.1.2":"2023-07-20T18:58:46.210Z","1.1.3":"2023-07-24T17:11:16.710Z","1.1.4":"2023-10-10T22:58:46.114Z","1.1.5":"2023-10-13T07:17:15.641Z","1.1.6":"2023-11-10T20:13:22.802Z","1.1.7":"2023-12-23T04:37:02.609Z","1.1.8":"2023-12-23T04:39:00.344Z","1.1.9":"2023-12-23T17:51:36.662Z","1.1.10":"2023-12-23T19:32:27.922Z"},"maintainers":[{"name":"codefrite","email":"codefrite@gmail.com"}],"description":"Common design-patterns in TypeScript","keywords":["design","patterns","typescript"],"author":{"name":"codefrite","email":"codefrite@gmail.com"},"license":"ISC","readme":"# Design Patterns\r\n\r\nTypescript implementation of design patterns:\r\n\r\n- Singleton\r\n- Channel\r\n- Subscriber\r\n- EventHandler\r\n\r\n## Class Diagram\r\n\r\nThe diagram below shows the relation between the different classes and interfaces.\r\n\r\n![Event Handler](image.png)\r\n\r\n<details>\r\n<summary>plantuml</summary>\r\n\r\n@startuml\r\n\r\nskin rose\r\n\r\ntitle Event Handler\r\n\r\nclass Singleton {\r\n\r\n- private static instance: object;\r\n- protected constructor() {}\r\n\r\n* public static getInstance = () => object;\r\n  }\r\n\r\ninterface IChannel<MessageType, ReturnType> <<interface>> { + name: string; + subscribers: ISubscriber<MessageType, ReturnType>[]; + subscribe: (sub: ISubscriber<MessageType, ReturnType>) => void; + unsubscribe: (sub: ISubscriber<MessageType, ReturnType>) => void; + notify: (msg: MessageType) => Promise<PromiseSettledResult<Awaited<ReturnType>>[]>;\r\n}\r\n\r\ninterface IEventHandler<MessageType, ReturnType> <<interface>> {\r\n\r\n- channels: Array<IChannel<MessageType, ReturnType>>;\r\n- createChannel: (name: string) => void;\r\n- getChannel: (name: string) => IChannel<MessageType, ReturnType> | undefined;\r\n- getChannels: () => Array<IChannel<MessageType, ReturnType>>;\r\n- subscribe: (chName: string, o: ISubscriber<MessageType, ReturnType>) => void;\r\n- unsubscribe: (chName: string, o: ISubscriber<MessageType, ReturnType>) => void;\r\n- notify: (chName: string, msg: MessageType) => Promise<PromiseSettledResult<Awaited<ReturnType>>[]>;\r\n  }\r\n\r\ninterface ISubscriber<MessageType, ReturnType> <<interface>> {\r\n\r\n- readonly id: string;\r\n- update: SubscriberCallback<MessageType, ReturnType>;\r\n- cb: SubscriberCallback<MessageType, ReturnType>;\r\n  }\r\n\r\nIChannel _-- ISubscriber\r\nIEventHandler _-- Singleton\r\nIEventHandler \\*-- IChannel\r\n\r\n@enduml\r\n\r\n</details>\r\n\r\n## Usage\r\n\r\n### Instantiating the Event Handler\r\n\r\nTo get a reference to the Singleton Event Handler, we can use the static getInstance() class method:\r\n\r\n```\r\nconst eventHandler = EventHandler.getInstance<MessageType, ReturnType>();\r\n```\r\n\r\nIndeed, the constructor is declared protected and cannot (in TS at least) and shouldn't be invoked:\r\n\r\n```\r\nexport default class EventHandler<MessageType, ReturnType> implements IEventHandler<MessageType, ReturnType> {\r\n  ...\r\n\r\n  private static instance: object;\r\n\r\n  ...\r\n\r\n  /**\r\n   * constructor: Declared protected to defeat instantiation outside of class or child class (Singleton pattern)\r\n   */\r\n  protected constructor() {}\r\n\r\n  /**\r\n   * Returns the instance of the EventHandler class (Singleton pattern)\r\n   * @returns the instance of the EventHandler class\r\n   */\r\n  public static getInstance = <MessageType, ReturnType>(): EventHandler<MessageType, ReturnType> =>\r\n    !EventHandler.instance\r\n      ? (EventHandler.instance = new EventHandler<MessageType, ReturnType>())\r\n      : (EventHandler.instance as EventHandler<MessageType, ReturnType>);\r\n\r\n  ...\r\n};\r\n```\r\n\r\n### Creating Channels\r\n\r\n```\r\neventHandler.createChannel(\"keyboard-inputs\");\r\neventHandler.createChannel(\"mouse-inputs\");\r\n```\r\n\r\n### Instantiating Subscriber and setting callback\r\n\r\n```\r\nconst cb = () => {}\r\nconst sub = new Subscriber<MessageType, ReturnType>();\r\nsub.setCallBack(cb)\r\n```\r\n\r\n### Subscribing/Unsubscribing to Channel\r\n\r\n```\r\neventHandler.subscribe(\"keyboard-inputs\", sub);\r\neventHandler.unsubscribe(\"keyboard-inputs\", sub);\r\n```\r\n\r\n### Notifying the Event Handler\r\n\r\n```\r\neventHandler.notify(\"keyboard-inputs\", message)\r\n```\r\n","readmeFilename":"readme.md"}