{"_id":"tincants","_rev":"26-030ab68c75b4d665f782d57c24a33b26","name":"tincants","dist-tags":{"latest":"1.1.10"},"versions":{"1.0.0":{"devDependencies":{"@types/crypto-js":"^4.2.2","typescript":"^5.3.3"},"name":"tincants","version":"1.0.0","description":"A typed version of TinCanJs","types":"dist/index.d.ts","main":"dist/index.js","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","prepublish":"yarn run build"},"_id":"tincants@1.0.0","gitHead":"f50b0a257d134a4e3663a6cf8d7a4eb528adf2d4","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-TatFUt7Dj0lnX+ylLeI8Ml21V/kA8LVTDfkdSG8k2f/sSP1Q9dkqTN06ixV1GNSBrKos4waXHRKt50c4AceRyQ==","shasum":"de1c60c723ad9a2df839750c7aac1b77889d9539","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.0.tgz","fileCount":58,"unpackedSize":345867,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0RXWmXpf1zi3Gsym1KWSv8Ahn4lrdyqNtJQ93DGunAAiBfsaTIsbKz4ctlf8YTpCqvDyrS4vzFWfGLzd2/O3lYvQ=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.0_1706637111249_0.041069815022013456"},"_hasShrinkwrap":false},"1.0.1":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.1","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","prepublish":"yarn run build","build-npm-pkg":"tsup"},"_id":"tincants@1.0.1","gitHead":"f50b0a257d134a4e3663a6cf8d7a4eb528adf2d4","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-ZrjvilKzxM9m5dNpZxvd062yJoPcudVISE1vOGjRPzNzVoCvku/+36FOBhsm4T54+fwkwBk6K6BB9PZ/KexPOQ==","shasum":"487e1baa666032922ae1b64489d060d29d1980de","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.1.tgz","fileCount":8,"unpackedSize":647278,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDekWXoEbGqmJBFMI/ntNKRvtIwfF4YS/0ITlNno07mIAIhANHv4sDN9rtJlxHZq0DlvrrkP3fCQ+j6uIbh9EH4+BWl"}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.1_1706638631312_0.5143870370536956"},"_hasShrinkwrap":false},"1.0.2":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.2","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup","publish":"yarn run build-npm-pkg && npm publish"},"_id":"tincants@1.0.2","dist":{"shasum":"4126d56304d987402d067549111e6790574cf216","integrity":"sha512-0C5WM8TfmWPVJNEvtej5JfwlWQPwqpovxZNzUSEKsgWOQniYtRl0gECWeXE0N70pa/Tz4RY/THFM+Piu5pgwPw==","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.2.tgz","fileCount":10,"unpackedSize":670041,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAuDp4Xb/RnbBuQYFXEs6w18ozj7Ub28sFVuu3fNVyrFAiBrwU7wafre10YziZwKGKJle9R4cuO4dFb5U5JFFlT61g=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.2_1706664047657_0.03169405263180636"},"_hasShrinkwrap":false},"1.0.3":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.3","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup","publish":"yarn run build-npm-pkg && npm publish"},"_id":"tincants@1.0.3","dist":{"shasum":"bb3e5c6915c81e3618d44291f516843cda47d993","integrity":"sha512-FiEHkzV139Jw4LKFtT5p/tKcA3UFRuxvgaRe0/TWR2NblQwtRobHJlHJBx1JKM2Bn4nOtXohogVO+XCWlrIXyA==","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.3.tgz","fileCount":10,"unpackedSize":670041,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZsGG9mxodUvSp7J5/Umph03myUFtJxadcJ9RnboeuWQIgSqG8CH97Oo55sRn9P8s4WfvL9Wuz6a+CGqMIGQbBL7Q="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.3_1706675157911_0.09178394650984312"},"_hasShrinkwrap":false},"1.0.4":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.4","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup","publish":"yarn run build-npm-pkg && npm publish"},"_id":"tincants@1.0.4","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-uFgoR24SnuvqgEh7C/b0+U7lTkJzS5c2T3qgLCXecIQR6XHRBZhv+QEsDNGS+yqrS07kqEIOsm+kS364i632Ag==","shasum":"b0b7cab8b1866a87ed54005d4fc660449b9e2ac9","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.4.tgz","fileCount":8,"unpackedSize":668517,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkFhb2spO+yTOvoio5JoDswKcz3+DZiI3pXCT/NmWQ7AiEAs+tjyjaKojjPaBWOl4oqLm5yf5OCql7nsAzKXyTgcQw="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.4_1706675491719_0.6978663571132993"},"_hasShrinkwrap":false},"1.0.5":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.5","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup","publish":"yarn run build-npm-pkg && npm publish"},"_id":"tincants@1.0.5","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-x/7jEGy6o5BJ+GCxebawmGUFGWJKrWJok38+RO4iNBEhinAKc5p5eEc4lXdQNv0coUGDZEpZPEg4OL02BXoQgA==","shasum":"0b387fe1cef2a7bb76cc834a6caa5fab46c7eae7","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.5.tgz","fileCount":8,"unpackedSize":668923,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEft1R5rcRqvQaORsIcCPAsHNh5+xpH93AJF4CbV6OBJAiEAuuUfS4HIhmxtr5Cl746cC91FuGH4eeFOuln/DH3ksBg="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.5_1706677970552_0.34451161612297887"},"_hasShrinkwrap":false},"1.0.6":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.6","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.6","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-dOj5k0V3rznyFiG+5DAL8X0HY5oZ5i6EcEe7SENsUiDkuHKiVoPFTVdAfRM/s5tQz/lUeWEJcPRG4qw6jPFixw==","shasum":"9279c0544b02d12b405b4fac4945da4b424d4328","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.6.tgz","fileCount":8,"unpackedSize":671787,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCtvw//40V2Nb92qvkRHMq7GpdWCQX+2DUX/8si1KYYgIhAKzZNJegWkTdoupI+E0hyTWDljZKfjX9NrvVqHMLFuZy"}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.6_1706718265108_0.7688895985746813"},"_hasShrinkwrap":false},"1.0.7":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.7","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.7","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-453jKkRpcb5fUSDUBp5XNkqornm4tbS1trNwUFE/PEKz+IP830JOj2d0Z4km2bmVr4dzFBO/DD/pzEGuS71E3w==","shasum":"17d73533e5e4d3ef95fc601b943d4a956f052192","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.7.tgz","fileCount":8,"unpackedSize":671947,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEisDyj+uYg6nluxA+dEfvWq5JqG9VV/j/vQWghN8r7GAiBb46YfYp8a2qEjI6UmLJvyjVpbLISc0AUJgdSwWkxFEw=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.7_1706745545327_0.9706356955356408"},"_hasShrinkwrap":false},"1.0.8":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.8","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.8","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-cioqMpzrwXAs7IZ3XtITgDYkzzXKhsL4u0SBbqxDsq0/Jsfe332BfX68p3TvoQb1YiQBzq/Zb44JrOgVY8CWpw==","shasum":"26902663d492bab43a600757388f0301b13eb5b5","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.8.tgz","fileCount":8,"unpackedSize":679333,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ6LdqFsCT6uVMlBlkozEp1F6AoEIPFZaDQC/eVP859AIgC4jd1nA4tqDB1pK30m71FhWQjF6EVGyFL3tY6CEjJ3w="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.8_1706753333442_0.4655921306811266"},"_hasShrinkwrap":false},"1.0.9":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.9","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.9","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-m1oib8MZ17edxUJ8t0ahAuLE/2BgkneZxcnk1LhjP1qSlYvc8qX/SVSTKBRgMFzUZ+Q/ORzST4wBDZieqH/E5w==","shasum":"4adc0972c8911e85445884d18f99fba0a222b496","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.9.tgz","fileCount":8,"unpackedSize":679369,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfvNKtVkNVpmzKUZQllPHRwmJ0n8nJnIK9iwg3SZnZ9AIhAIfhL8awfErhy16/F8xdwGaFu5UKxsOKlqRuBPesjnnp"}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.9_1706754095053_0.6418096142688732"},"_hasShrinkwrap":false},"1.0.10":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.10","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.10","gitHead":"ea39f99ba1aeff6fddf0a2262808fc0ce5e8a723","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-CbJQuvII3ZhPqCuFkKYZAp+RBdtoordFYCKIhBbnfyujwqfn5lYOnaSxBqAKmJ863KqCcE1qntoqQ3OoULwF2w==","shasum":"b5c3e99e85e5445c74df229d4a5cdc748270221e","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.10.tgz","fileCount":8,"unpackedSize":679328,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsGs3w28p0I527CsqEuTUB9wyvneAS82HOniZSMz/kCQIgVwiVQtS/eKVKCN+wQ5p/xQH9TkvVsR4N+cT23kvXGT4="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.10_1707132620113_0.7506906662067745"},"_hasShrinkwrap":false},"1.0.11":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.11","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.11","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-XOkHEg6AmYvKzGgFHG1PYAuci2yR4mrljE1HEN5p9g4Pde68vliBPy+HNTv9MhURSUlJcF07ttlKZqVWT3i2VQ==","shasum":"6b5053c5dceea97c680123c2d70685775ce93396","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.11.tgz","fileCount":8,"unpackedSize":684030,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEscoj+V8KCt9QQ7ClRnuizXCYVRcpuFiMm2Yxkxk1FAAiAW8pt2aEUznUOItW7fwHQ9oUgBl2rWm7xiq8fkVutpDw=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.11_1708338475645_0.40459363766226897"},"_hasShrinkwrap":false},"1.0.12":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.12","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.12","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-23eKsA2nG79KcZ8hOTCa8bqUteS2e0ou5piHZcAuZij86pPEObgbLM0mb8w12Xe7paeaRlTmzB+yqy/ZS4l39A==","shasum":"da7f8c2859833d678af934ca40325cec95f339d0","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.12.tgz","fileCount":8,"unpackedSize":685800,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB7HRdcQEe2IOELGo6cku5FdP6Oc6Vu+XaE1nA74poKoAiAiH83IdeGwyzbU7Q4vIIZwr4L+i3z53+l7U5ROrqtsIA=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.12_1708344346249_0.3436436843064692"},"_hasShrinkwrap":false},"1.0.13":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.13","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.13","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-5NtIGyWYn42wbInsHeODrSXvPw+gfAbOYUs4AD97w5zjGuJ6afDtT0DCkZJrXOIjw4sKzD4tErYJKx4Rmym4DA==","shasum":"7ff79a8e7e969dcd704700919a9cac78be8626a8","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.13.tgz","fileCount":8,"unpackedSize":687836,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDV8Wjs5I1tGSievelebAJ+KcRdAjfsVyrjGAEcBzZk6AIhAPd7KUvGasY63O7qznEKSmvEORt/Z9OtiXuM97ttUSC/"}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.13_1708352407562_0.8557063743411664"},"_hasShrinkwrap":false},"1.0.14":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.14","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.14","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-rbfiZdMgFRABkmhA9su9c1xw54L3m2A8hvliE1ax7cS4xkuEoN30ilbAgagWitV+Dn8zhaiTsZQS36QfBj0H/g==","shasum":"de239a9c18da24b94e4656070c8de99b4d5e6c62","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.14.tgz","fileCount":8,"unpackedSize":688230,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEMh/OYb5ENM6tlKlAc2lLkj4NOth5i84OKy/H+ka7IoAiBv0m0+IIZeCBF3kWMHJfKBzDrBdaGv3vOaXbnM6scgcA=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.14_1708353934126_0.05626626285650649"},"_hasShrinkwrap":false},"1.0.15":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.0.15","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.0.15","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-jEsDvZMVHgg1shSPaVbPHoy8LbRn49BLYDqixU0eqbf7+gLULbV13juc3tYqi+ne1jEOq6IMrNDRqb9AuFWQlA==","shasum":"7b93e3e804088c5f1c4238a0bb1a98e9b4022d02","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.0.15.tgz","fileCount":8,"unpackedSize":694728,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwWcoCc9RPL+XishPcad+/Qb789jw/2CJmbzjdLEr1pAIhAI3BLHj4VI67eOPtFpK/LHkWln3qR3uaqkpng+jyGpmA"}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.0.15_1708390600109_0.09857235252711383"},"_hasShrinkwrap":false},"1.1.0":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.0","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.0","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-PI246hZPAR/qup3FUZUE7hKpEsP4h8FFLOh5c4LVxapg1DiZxdF4dDBzkDvrwJ2SU0jwpc42qczAz9rF66W1Yg==","shasum":"61ec260098e3d7a1afd31e79f7cdf0ec5848bc74","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.0.tgz","fileCount":8,"unpackedSize":745067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDuH/xGV8GNwZuURP2/OlwNppLTUn1+XbUGafbrCJ5ZsAiEArandWKzgAyk0IU8pjO2vHypaMIudfuJQn/m6aeHjnyg="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.0_1708650054506_0.22513744697562021"},"_hasShrinkwrap":false},"1.1.1":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.1","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.1","gitHead":"0ca7df4daf7b9cc1f0b42938141eee4be9411d1c","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-RAj4q04WMpcnSZIE/+G8Cj3s9QKjEKZhUDPs7EVojeNyduIfmzFvPxi+SuXdXWqlZYsm5gFoeSXoVXU/6ulDlA==","shasum":"e29cb7b25e5e5cc814a21ba9f1aa6f849aa4acbb","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.1.tgz","fileCount":8,"unpackedSize":787917,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGHefRxWqhyyyfgu4qnY7zYpxB1wopg6xV9jnG2pD/iAiEAnkjrxDe0Gfe/OuhMYYU/ZB25vUjNvrApeVpm9CEDU/w="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.1_1708651463229_0.7467863282425904"},"_hasShrinkwrap":false},"1.1.2":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.2","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.2","gitHead":"a520d6caaec82e242814e1f1d9de9879be82e4d2","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-RjtTNB9aWsUFJMJLz+K6h+gSOtA03R9tQgpfmZQul7jwy5RumOqpjii+fFCG6gQlt2/WEtAkM9AgQNR+dknTVw==","shasum":"aafac35850c1d39d84e3ae51284cc544ed7b31d4","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.2.tgz","fileCount":8,"unpackedSize":789797,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFz4OfDW4juHbwtDnpgeEqbg8RhWBhhcFkxNItMR0bhAiEA2bWt98ZDTILr5K+LAZz82iew+zy1qQvpUrSd/MYodDY="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.2_1708773396369_0.4454810932581501"},"_hasShrinkwrap":false},"1.1.3":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.3","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.3","gitHead":"a520d6caaec82e242814e1f1d9de9879be82e4d2","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-IxSTzOx15nmaVjs5Ui/IPp0Ri0ymfpViD7neTq38yi3tIL69T/WkP7Twy/FPeFCy4j5ADSekkku4DrXHpjQl5Q==","shasum":"85d5ad64129945403a3510aa8ac3bdfc0e928846","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.3.tgz","fileCount":8,"unpackedSize":805955,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCzCipSjqubOAbIDkxKac8ZuwE9s3b+/J3Jiz06nxLegIgMABVmccsSs3Fac6R/SVR2SAL1ZiRIFDY6Rehtx9r0Tw="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.3_1709169240806_0.5065430414373016"},"_hasShrinkwrap":false},"1.1.4":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.4","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.4","gitHead":"a520d6caaec82e242814e1f1d9de9879be82e4d2","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-JmBftVe2LhcEw0fR8YNv1Qs3XIMxFQL86/wofEVz+A6ZtproWHKrSmRp8C5RYzAtbC2yZ8hH/Bx2Gu16FDN2Yg==","shasum":"4ea1ed1bc5537dbb90bf69bdbaa70e1b84abff6b","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.4.tgz","fileCount":8,"unpackedSize":815233,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4faTUplz1Icdxpf8U92+0NIgFxQkGMezeTDh5inj9nAiEAuv4ct4kkqhHR609xFqcvDQf+yI5ubpIrybXA+JKQbag="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.4_1709178819742_0.26019943053338235"},"_hasShrinkwrap":false},"1.1.5":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.5","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.5","gitHead":"a520d6caaec82e242814e1f1d9de9879be82e4d2","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-3rhBlat9iL1zZgucCFdUXN3+/EsJbWQdf1DWNXiqDM0V7QxZIFaH7eecqdQqZWXheVI4whPVuTBenjY1v/es9w==","shasum":"3d1526961c232f5503cd23abdf34819111014ef9","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.5.tgz","fileCount":8,"unpackedSize":814983,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICEYQgz46ta2o2bdXODTpTL/jmXCkrccTw62DX5YWy6gAiBghzSe4p+2ETm9vwF6Y0MSzUKwh0OWDR2DfiYIkgh3oQ=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.5_1709210593808_0.22324036557486493"},"_hasShrinkwrap":false},"1.1.6":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.6","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.6","gitHead":"a520d6caaec82e242814e1f1d9de9879be82e4d2","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-RJ1Qd7TeOUfuAQSkrJ6KFuEyFTv62EGem8adQpP3xAQK1b3hePjz5DzqV9kLM28jQIRdGESqnvZIQ9bektimrw==","shasum":"a976b32db4d726ab6db6adfa96fe42b38d0d7a83","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.6.tgz","fileCount":8,"unpackedSize":812615,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqC6YjgsqEyAuQo76Hqj22/3ui2dCoNeHdQJAwia7ekAiEA3zs5dbiKdRple25KCH/rAvVdwNL8RNrCahvQoD0mvmQ="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.6_1710872445338_0.005979742427755896"},"_hasShrinkwrap":false},"1.1.7":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.7","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.7","gitHead":"db3c912f77abb78daed2aa995511ba58ce17e709","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-SaXlwV9QX4kOp9LZ/SQkgS/iX1olBJJwyRLrHZ6FRzhxjajQhK2ghdI1qjzw5LNyIQdJMpMhjWn8dpbgv+bXqQ==","shasum":"8fcc025f7baf164a0105ac6ec44d6404c3682cc6","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.7.tgz","fileCount":8,"unpackedSize":818000,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9EKcrt6k51Vth5FM1v0CWzjlrgRumYNnSftN49DlsCAiANOHa33F1vkNa1/TbB+wEZSK7DZeKNeiLuRBZm17dWXg=="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.7_1712063019465_0.6769390647042086"},"_hasShrinkwrap":false},"1.1.8":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.8","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.8","gitHead":"dea47317920156fbb7be1e79e841eb51b4a20c8a","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-phe7IEKSKn8IRO72ZugoOJpGdFc8aRtnnZCoIJIGQVF3Oj73dNI7Zf/qWR9g1XZzpu5V7Ak6Dxyb6AOGUsFdOA==","shasum":"c3da2d5c8f7f5e9b3f0921614e081c4d44a21bfc","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.8.tgz","fileCount":8,"unpackedSize":818672,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTkTadK78EEoGZjbrhIvGiLZRwu2zkZ9wnrk7BVPPbiwIhAMc8TWk0EIwJxxM3cNoLJ2cxACCmEneyQRiOkRdGEvd8"}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.8_1713917107921_0.2644701452661766"},"_hasShrinkwrap":false},"1.1.9":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.9","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.9","gitHead":"dea47317920156fbb7be1e79e841eb51b4a20c8a","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-0qVpF8IMMl6xymsPt/QDw9fRZ9q7UglPL2E+QBn0lcClVlb7aos4w7CtZbwf+Nj8aOJ2MANcnXJa9iEvEtCtUQ==","shasum":"1d7db461ef0b060445eeb620b68ed0afae26474d","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.9.tgz","fileCount":8,"unpackedSize":818860,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjYGiFKYmjlNLtO1cmQK2ziAoTfeV55KIWnG5nF+WVvQIgVUlu05rOjjM4MTb/0PEnL1uRLJ6zM3azSITSstU0UbU="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.9_1713918622149_0.32726671646506644"},"_hasShrinkwrap":false},"1.1.10":{"devDependencies":{"@types/crypto-js":"^4.2.2","tsup":"^8.0.1","typescript":"^5.3.3"},"name":"tincants","version":"1.1.10","description":"A typed version of TinCanJs","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","author":{"name":"IvanYingX"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0"},"scripts":{"compile":"tsc src/*ts --outDir dist --target es2020 --module commonjs --moduleResolution node","clean":"rm -rf dist/* && rm -rf src/*.js","build":"yarn run clean && yarn run compile","build-npm-pkg":"tsup"},"_id":"tincants@1.1.10","gitHead":"dea47317920156fbb7be1e79e841eb51b4a20c8a","_nodeVersion":"21.0.0","_npmVersion":"10.2.5","dist":{"integrity":"sha512-MXEoAW8VEz4OqYfxzw3MekC4JNqPSwqRlnflCHiQThzplXjH3nVizVKdpLt9HRyHm35J5W03OQi4WYaNuTd6lg==","shasum":"8495b57dbed5fcabdbee1dc24ab0e55e3577a45b","tarball":"https://registry.npmjs.org/tincants/-/tincants-1.1.10.tgz","fileCount":8,"unpackedSize":825133,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqszf31a6ZUeAOT+oBnz37QTv9/bqmGHeEQOG4KZaMAQIgcgptEOaA5T02BVH8saXL3Dlj8jRPCWmQSs6WMO92f3E="}]},"_npmUser":{"name":"ivanyingx","email":"ivan@theaicore.com"},"directories":{},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tincants_1.1.10_1713959387200_0.13600889593250054"},"_hasShrinkwrap":false}},"time":{"created":"2024-01-30T17:51:51.248Z","1.0.0":"2024-01-30T17:51:51.577Z","modified":"2024-04-24T11:49:47.577Z","1.0.1":"2024-01-30T18:17:12.492Z","1.0.2":"2024-01-31T01:20:47.916Z","1.0.3":"2024-01-31T04:25:58.109Z","1.0.4":"2024-01-31T04:31:31.945Z","1.0.5":"2024-01-31T05:12:50.781Z","1.0.6":"2024-01-31T16:24:25.310Z","1.0.7":"2024-01-31T23:59:05.538Z","1.0.8":"2024-02-01T02:08:53.693Z","1.0.9":"2024-02-01T02:21:35.370Z","1.0.10":"2024-02-05T11:30:20.289Z","1.0.11":"2024-02-19T10:27:55.824Z","1.0.12":"2024-02-19T12:05:46.414Z","1.0.13":"2024-02-19T14:20:07.734Z","1.0.14":"2024-02-19T14:45:34.330Z","1.0.15":"2024-02-20T00:56:40.315Z","1.1.0":"2024-02-23T01:00:54.719Z","1.1.1":"2024-02-23T01:24:23.458Z","1.1.2":"2024-02-24T11:16:36.516Z","1.1.3":"2024-02-29T01:14:00.958Z","1.1.4":"2024-02-29T03:53:39.938Z","1.1.5":"2024-02-29T12:43:13.977Z","1.1.6":"2024-03-19T18:20:45.524Z","1.1.7":"2024-04-02T13:03:39.784Z","1.1.8":"2024-04-24T00:05:08.086Z","1.1.9":"2024-04-24T00:30:22.373Z","1.1.10":"2024-04-24T11:49:47.396Z"},"maintainers":[{"name":"ivanyingx","email":"ivan@theaicore.com"}],"description":"A typed version of TinCanJs","author":{"name":"IvanYingX"},"license":"MIT","readme":"# TinCanTS\n\nA typescript library for implementing TinCan functionalities. It is based on the TinCanJS library.\n\n## Introduction\n\nThe existing TinCanJS library hasn't been maintained for more than 8 years, so it is prone to throw errors. This repository serves as an update of the old library, changing the behaviour of some components, or simply removing deprecated functions and methods.\n\n## Main changes\n\nThe main changes with respect to TinCanJS are:\n\n### XMLHttpRequest\n\nThe TinCanJS library was using XMLHttpRequests, which can be now deprecated in favour of `fetch` to make things simpler and more organized.\n\n### Asynchronous Methods\n\nMany methods for the TinCan and LRS objects relied on XMLHttpRequests calls, and therefore the response had to be handled through a callback function. \n\nWe replaced all these synchronous calls for asynchronous ones using `async` and `await` to simplify things and ensure that all calls go through. \n\nMethods can still include callbacks in case the user wants to process the response or the possible error obtained from the call.\n\n## How to use\n\nIf you are here, we assume you know what TinCan is, but just to give some context, TinCan or xAPI is an IEEE approved standard for learning technology that makes it possible to collect data about the wide range of experiences a person has. You can read more about it [here](https://xapi.com/).\n\nThe way the user interacts with the library is through the `TinCan` object. This object sends statements to the LRS, which is the one that stores the data. An LRS is a Learning Record Store, which is a system that stores learning records and uses the xAPI to retrieve and store data. In short, the LRS is the database where the user's interactions are stored. \n\nYou might be wondering \"But I am using an LMS, why do I need to store the data in an LRS?\". The answer is that most LMSs have their own LRS, and when the TinCan library is created, it gets the LRS data from the window provided by the LMS. LMSs that support TinCan will have the information about the user (or `Actor`) and the `Activity` that the user is interacting with. To access this data, you can simply check the `window.location.href` and parse the information from there. Don't worry, everything has been abstracted in the library.\n\n### Installation\n\nTo install the library, you can use npm:\n\n```bash\nnpm install tincants\n```\n\n### Usage\n\nIf you are using the library from an LMS, we recommend you to use the `LMS` object. This way, you can access the methods that abstract the main interactions that the user will have with the library. _Note: This library is mainly used by AiCore, so the methods are tailored to the AiCore content. If you want to use it for your own content, you can use the `TinCan` object directly._\n\nWhen you initialize the `LMS` object, it will automatically create a `TinCan` object with the LRS information provided by the LMS (Actor, Activity, LRS URL, etc.). This way, you don't have to worry about setting up the LRS information.\n\n```typescript\nimport { LMS } from 'tincants';\n\nconst lms = new LMS();\n\n// From here, you are already connected to the LRS and can start sending statements\n// For example, you can tell that the user has watched a video\nlms.setVideoCompleted()\n    .then(() => {\n        console.log('Video completed statement sent');\n    })\n    .catch((error) => {\n        console.error('Error sending video completed statement', error);\n    });\n\n// Or you can check if the user has completed the video\n\nconst isVideoCompleted = lms.checkVideoCompletion()\n```\n\nIf you want to be more specific about the statements you are sending and are still using an LMS, you can use the `tincan` property of the `LMS` object. This property is an instance of the `TinCan` object, but with the benefit of having the LRS information already set up.\n\n```typescript\nimport { LMS } from 'tincants';\n\nconst lms = new LMS();\nconst tincan = lms.tincan;\n\n// Now you can use the tincan object to send statements\n\ntincan.sendStatement({\n    actor: {\n        name: 'John Doe',\n        mbox: 'mailto: jd@hotmail.com'\n    },\n    verb: {\n        id: 'http://adlnet.gov/expapi/verbs/completed',\n        display: {\n            'en-US': 'completed'\n        }\n    },\n    object: {\n        id: 'http://example.com/activities/video',\n        definition: {\n            name: {\n                'en-US': 'Video'\n            }\n        }\n    }\n}).then(() => {\n    console.log('Statement sent');\n}).catch((error) => {\n    console.error('Error sending statement', error);\n});\n```\n\nIf you are not using an LMS, you can use the `TinCan` object directly. However, you will need to provide the LRS information when creating the object. You need to set up the `Actor`, `Activity`, and LRS information. If you don't have any LRS, and you want to quickly test the library, you can create a free account in [Veracity](https://lrs.io/).\n\n```typescript\nimport { TinCan } from 'tincants';\n\nconst actor = {\n    name: 'John Doe',\n    mbox: 'mailto:jd@hotmail.com' // The email preceded by mailto: (RFC 2368)\n};\nconst activity = {\n    id: 'http://example.com/activities/video', // You don't need to publish the activity, but still, many LRSs require the ID to be a valid URL (so you can write the ID preceded by http://)\n    definition: {\n        name: {\n            'en-US': 'Example Video' // The name that will be displayed in the LRS\n        }\n    }\n};\nconst lrs = {\n    endpoint: 'https://lrs.io/xapi/',\n    username: 'your_username',\n    password: 'your_password'\n};\nconst tincan = new TinCan({\n  actor: new Agent(actor),\n  activity: new Activity(activity),\n});\ntincan.addRecordStore(lrs);\n```\n\nAs you can see, the `TinCan` object requires an `Actor` and an `Activity` object. The `Actor` object is the user that is interacting with the content, and the `Activity` object is the content itself. The `LRS` object is the Learning Record Store where the data will be stored.\n\n### Debugging\n\nIf you want to see the requests that are being sent to the LRS, you can import the `Logger` object and set the `debug` property to `true`. This way, you will see the requests and responses in the console.\n\n```typescript\nimport { Logger } from 'tincants';\nimport { LMS } from 'tincants';\n\nLogger.debug = true;\n\nconst lms = new LMS();\n```\n\nThis will show all the steps that are taking place through the console in the following format:\n\n```\n[TinCan] init\n[TinCan] addRecordStore\n[TinCan] sendStatement\n...\n```\n\n### LMS Object\n\nThe `LMS` object in this library is tailored to the AiCore content. It has methods to send statements that are specific to the AiCore content. If you are using this library for your own content, you can use the `TinCan` object directly.\n\nWith that said, the `LMS` object has methods for:\n\n- Setting content as completed (`set___Completed`)\n- Checking content completion  (`check___Completion`)\n- Setting content as launched (`set___Launched`)\n\nThe interface follows the same pattern for each component. So, for example, if you want to set a video as completed, you can use the `setVideoCompleted` method. If you want to check if the video is completed, you can use the `checkVideoCompletion` method.\n\nThen, for specific components, it has methods for:\n\n- Setting the video progress (`setVideoProgress`)\n- Getting the video progress (`getVideoProgress`)\n- Getting the assessment state (`getAssessmentState` - whether it is passed, failed)\n- Setting an assessment as failed or passed (`setAssessmentCompleted` will call the `setAssessmentPassed` or `setAssessmentFailed` methods depending on the score)\n- Setting the user's score in an assessment (`setAssessmentScore`)\n- Getting the user's score in an assessment (`getAssessmentScore`)\n- Setting the user's responses in an assessment (`setAssessmentResponses`)\n- Getting the user's responses in an assessment (`getAssessmentResponses`)\n\nA final note is that all the methods return promises, make sure to take this into account when using them.\n\n### Sending Statements\n\nWhether you are using the `LMS` object or the `TinCan` object directly, you can send statements using the `sendStatement` method. This method receives an object with the statement information and returns a promise. The object should have the following structure `Actor - Verb - Object` or in other words `Who - Did - What`\n\n```typescript\n{\n    // Who\n    actor: {\n        name: 'John Doe',\n        mbox: 'mailto:jd@hotmail.com'\n    },\n    // Did\n    verb: {\n        id: 'http://adlnet.gov/expapi/verbs/completed',\n        display: {\n            'en-US': 'completed'\n        }\n    },\n    // What\n    object: {\n        id: 'http://example.com/activities/video',\n        definition: {\n            name: {\n                'en-US': 'Video'\n            }\n        }\n    }\n}\n```\n\nThe `object` property is the content that the user is interacting with. If you are using the `LMS` object, the `object` property is already set up and you can access it though `lms.activity`.\n\nA few important notes:\n\n- You can use any `Verb` to define what the user did. However, it is recommended to use the [official verbs](https://registry.tincanapi.com/#home/verbs) to ensure that the LRS can interpret the statement correctly.\n- The `Verb` id should be a valid URL. You can use the official verbs URL or create your own.\n- The `Object` id should be a valid URL. You can use the official activities URL or create your own.\n- Some LMSs will mark the content as completed as soon as they receive a statement with the `completed` verb with the `object` being the content that the user is interacting with.\n    - For example, let's say that you have an activity whose id is `http://example.com/activities/video`.\n    - If you send a statement with the `completed` verb and the `object` being `http://example.com/activities/video`, the LMS will mark the video as completed.\n    - But if you send a statement with the `completed` verb and the `object` being `http://example.com/activities/video/1`, the LMS will not mark the video as completed.\n    - __This is not the same for all LMSs__\n    - Some LMSs will mark the content as completed as soon as they receive a statement with the `completed` verb, regardless of the `object`. Make sure to check or test this behaviour with your LMS.\n\n### Getting Statements\n\nGetting statements is more complicated than sending them. The `LRS` object has a `retrieveStatements` method that can be used to get statements from the LRS. The method will retrieve the statements that match the query provided. The query should be an object with the properties that you want to filter the statements by.\n\n```typescript\nimport { TinCan } from 'tincants';\n\nconst tincan = new TinCan(); // Initialize the TinCan object with the LRS information. Check the Usage section for more information.\n\nconst query = {\n    agent: {\n        mbox: 'mailto:example@hotmail.com'\n    },\n    verb: {\n        id: 'http://adlnet.gov/expapi/verbs/completed'\n    },\n    activity: {\n        id: 'http://example.com/activities/video'\n    }\n};\nconst statements = await tincan.retrieveStatements(query);\n```\n\nThis will return an array of statements that match the query provided. If that's enough, you can skip the rest of this section. _BUT_ there are some drawbacks to this method:\n\n- The LMSs we have tested don't allow you to retrieve statements from the LRS. This is because the LMSs don't have the necessary permissions to do so.\n- For the reason above, you need to make a call to your LRS directly. This means that you need to have the LRS information and make a call to the LRS endpoint, which consumes more time and resources.\n- You might want to filter even further, and might be difficult to know all the types withing the `query` object.\n\nWhat's the solution for storing and getting the statements? We need to send the statements so they are stored in the LRS, so the `set___` methods are needed. But in order to get the statements, we need to use the `setState` method. This method allows us to store keys and values in the tincan instance that can be accessed when opening the content. It's actually a nice trick that adds the state as a number at the end of the `window.location.href`. \n\n```typescript\nimport { TinCan } from 'tincants';\n\nconst tincan = new TinCan(); // Initialize the TinCan object with the LRS information. Check the Usage section for more information.\n\n// Set the state\ntincan.setState('video', 'completed');\n\n// Get the state\n\nconst videoState = tincan.getState('video');\n```\n\nThat's it! When you send statements through the `LMS` object, the method is abstracted so that it sends the statement and sets the state. When you want to get the statements, you can use the `getState` method to get the state of the content.\n\nThe following is an example of how you can use the `setState` and `getState` using React:\n\n```typescript\n  const [isVideoCompleted, setIsVideoCompleted] = React.useState(false);\n  const videoRef = useRef<HTMLVideoElement>(null);\n  useEffect(() => {\n    const video = videoRef.current;\n    if (!video) return;\n    const getVideoProgress = async () => {\n      const progress = await lms.getVideoProgress();\n      if (progress) {\n        video.currentTime = progress;\n      }\n    };\n    const checkVideoProgress = () => {\n      if (!video.duration) return;\n      const percentageWatched = (video.currentTime / video.duration) * 100;\n      if (percentageWatched > 90) {\n        setIsVideoCompleted(true);\n      }\n    };\n\n    const setVideoProgress = async () => {\n      await lms.setVideoProgress(video.currentTime);\n    };\n\n    const interval = setInterval(setVideoProgress, 10000); // Save the video progress every 10 seconds\n\n    getVideoProgress();\n    video.addEventListener('timeupdate', checkVideoProgress);\n\n    // Cleanup function to remove event listener\n    return () => {\n      video.removeEventListener('timeupdate', checkVideoProgress);\n      clearInterval(interval);\n      unsubscribe();\n    }\n  }, [videoRef]);\n```\n\nIn this example, we are setting the video progress every 10 seconds. When the video is completed, we set the video as completed. This is just an example, you can set the video as completed when the user has watched 90% of the video, or when the video has finished playing.\n\n## Support\n\nIf you have any questions or need help with the library, you can contact [Ivan](www.github.com/IvanYingX)\n\n","readmeFilename":"README.md"}