{"_id":"@cube-drone/marquee-turbolink","_rev":"13-ee6ee353e8a0697f2151ee1ca57b0465","name":"@cube-drone/marquee-turbolink","dist-tags":{"latest":"0.8.0"},"versions":{"0.1.0":{"name":"@cube-drone/marquee-turbolink","version":"0.1.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.1.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"b6f2d57cc1bd750db021fa7bf0d26794849b6eef","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.1.0.tgz","fileCount":18,"integrity":"sha512-jiOe2utrCBv2Dzfgqul3ImImvs/5AxbGTQ8yyvPaBSrOuIckv/CZS44uAdLoZmH8cmjTPk1N3U1LgkQ37CmdFQ==","signatures":[{"sig":"MEYCIQCrkmbPH5ZmHs+w72U7d1g6jOKcnr2rQT2MnjkRYmK2cAIhAPK0WdOsBB8tsGpPjepi20XM845hNO+eF1nnCM9kDR/D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"0107b271b4ef46287448ceb12687c3d56f036c64","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"cube-drone","email":"cubedrone@gooble.email"},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.11.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@cube-drone/marquee-parser":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.1.0_1783821133575_0.6325776406163517","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cube-drone/marquee-turbolink","version":"0.1.1","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.1.1","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"e2bdcca234d8d63d969add58b565bcfb9e5f216e","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.1.1.tgz","fileCount":18,"integrity":"sha512-CHSEAibwaMa91Pn8EKh9PU7Lkaysx+qnICtfef5YM4TSUGk42ZtF182mu34muCi5x3cdBFfgRZ10NtIJ5Jjh0Q==","signatures":[{"sig":"MEQCIGzu/pPgDGsPFoZE/BHHlfm4XnFNGNTN7R6WPudtVGDYAiBkdaxjoZPTlhmPEgy7aWNwnj0IlSxHj2umSpTG2UdbxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"fbba57eeb20088e23839c091d440c238d50d4154","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.16.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@cube-drone/marquee-parser":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.1.1_1783823227312_0.24228716238380144","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cube-drone/marquee-turbolink","version":"0.2.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.2.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"99e09358f7a384f7a6e4e7609c13217ffb1ce3ff","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.2.0.tgz","fileCount":18,"integrity":"sha512-QlCFvZN8tKsOEM2r1j/G8Vm/lrlAxRkt3YpIerEMDifoAYuSSGLaLSp9Nsm4j0aaoqhy2OQb66YklzWxIKyZNA==","signatures":[{"sig":"MEYCIQCqGVzvwVsCUWO83QQ7FHdnleK9YiyViuH7yWWrX49xRwIhAMD5Djq5N0NDzaWA+Mk91lmBQmOw2CBtAc5Hpp9qqNCm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"4f8d76973e72dd1cef0bf97d04aa3875bf16b64b","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.16.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@cube-drone/marquee-parser":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.2.0_1783843954704_0.23087117705279248","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cube-drone/marquee-turbolink","version":"0.3.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.3.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"ef811506eca69ae303b5b331fa443bdec56dd98c","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.3.0.tgz","fileCount":18,"integrity":"sha512-4YxQbVswyUzuu1qFYbyiCXeDK7Xp8YBlZCUIiKECSnMWvXTGmIy/PCqJ5mUqbX+H9Al7Y+PT6EYLRwodbzDzIQ==","signatures":[{"sig":"MEUCIAGCrx9+1YwZRb/AA/vU/NlxVuc2Tf7YxwZT/5MIe6VLAiEA8mbAMPwmYIdChFMPeOMB7GZzz7Cosm/6+336GET+h0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"8858c23f490788db17717e2d7472bb75eb6c7ea1","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.16.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@cube-drone/marquee-parser":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.3.0_1783902313032_0.7859255023758045","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cube-drone/marquee-turbolink","version":"0.4.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.4.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"67aa1710d2196ab44968460b567ccd455793bf45","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.4.0.tgz","fileCount":18,"integrity":"sha512-QRENQGpZoy2CNVm4tsNoejGYGtQRlh3gJbw9uyaTKMTDHPfIBRM+GBUwWsMLrBBgmQhqZWG4DsIVCUv3PwsHIw==","signatures":[{"sig":"MEUCIQDCfYuJ552KdPEzGNZUR3OtNjswTmgLBh7XQY5mdFEI6wIgFdCnxJQ0GcdrQVXUo5aHtKYCp9p5E8GsxmZyKN6r1ew=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"e8be99c74fce4f6ca685dec9df4eab190a7720aa","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"cube-drone","email":"cubedrone@gooble.email"},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.11.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@cube-drone/marquee-parser":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.4.0_1784060107595_0.006769819526872611","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@cube-drone/marquee-turbolink","version":"0.5.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.5.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"88a24827e300fee0ff5d285bb8859ac612840c33","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.5.0.tgz","fileCount":18,"integrity":"sha512-B2h3fONRAv4OaCU3JehsjYBOswZdKWhJuNbleJ3F9rmG3QxWjNUBIfIcEiMMZcgwIJ+CO+zN3GxLaTJ4BAbREg==","signatures":[{"sig":"MEYCIQCXFheS2xK/9YqT11QOjuPF1ppCZjNlhNdmx4mlq1NSUAIhAKzq08M3vTNK3S2DT9/MsXYuAQkIpQj3E4wb4YLwtCbs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"225bc607c66d7c8ce1b06192e51b7956082cee6e","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.16.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@cube-drone/marquee-parser":"^0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.5.0_1784325031483_0.34369871762044735","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@cube-drone/marquee-turbolink","version":"0.6.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.6.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"e662941ac8157ceb8252cf10f3496234fe4b7ec9","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.6.0.tgz","fileCount":18,"integrity":"sha512-CMPANi/qo6xDyvHy1MGaUxP41ZZZjzaHyXV02SQSxRqh5/BFraRblQfWdnypEU9NThgFotJtaT+e4WefyLRnuQ==","signatures":[{"sig":"MEUCIQDjmUk/Lu8il4QlnDMpXFeghscE3t/wks32hrXcBuBmRQIgJ7N3eCRlveleBT4602TbRpAYsn/pxbiRm44FKDtXzDY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59828},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"61925c209106d7b5c92c30eba6caed560b69a28b","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.16.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@cube-drone/marquee-parser":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.6.0_1784330704237_0.09982083613270065","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@cube-drone/marquee-turbolink","version":"0.6.1","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.6.1","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"abfdd63bf7d648c297b9cfc9aa228453394c8172","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.6.1.tgz","fileCount":18,"integrity":"sha512-/ktTLwt50vypgjIzLC1WLNZCxxI0tiEHPHsJHZ+UcMg9hNxo3frUkVhMx8ENFiYghpc5go2vIwTALFXOUZq1/g==","signatures":[{"sig":"MEUCIGaF0UJU6G9VVr5FM2vJLslumEZFMSm9jRJUaqzw3K8gAiEAvs7v3jGvtt/0pYYxE4WvM0O7EbvLnHtrH8ynAadcerQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65543},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"a1a15d4978c628aeec2637cf535c35a68a63e2f5","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.16.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@cube-drone/marquee-parser":"^0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.6.1_1784591718668_0.15984947419282558","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@cube-drone/marquee-turbolink","version":"0.6.2","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.6.2","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"99afe8ab749d740a6c0f255b76793eb25e4321e8","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.6.2.tgz","fileCount":18,"integrity":"sha512-3k5PdMPoGQGs3stLnyCCG6vsXLMcR/twZkj88vYWfXNE4gosIe10xjDfwLiwNMgZeOvozLM6kEkmzjNrSC4S4w==","signatures":[{"sig":"MEUCIQDg84t/H6d6h4zFMpsNq8Yv1axzUh36chVERymDZLquUQIgNCjcDhSsxfLTeQa3e1bcS9hILW0xJB5Zhp6q+9c4RM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65543},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"770e3d44726c4d3f391454348ba1f8919587b185","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"cube-drone","email":"cubedrone@gooble.email"},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.11.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@cube-drone/marquee-parser":"^0.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.6.2_1785363613315_0.20583103168766237","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@cube-drone/marquee-turbolink","version":"0.7.0","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.7.0","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"76cd37719d05bc067aa468d370f3f2479157c7d6","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.7.0.tgz","fileCount":18,"integrity":"sha512-LoozBl0qvITmXBP3q1lTgpTHKBI+wJQPl6N5GrUn54IUImepbbtFctUhAOjV8Vh6Dtmn4bpRT2j9aKHbAj9eyg==","signatures":[{"sig":"MEQCIDC4bfpoPQhMw/7ZFV3Bx2Hu0sQ6USEqi0jdhsWGiBB2AiAWVfftkHmhreHBYdXbDwAwjtpaU0bLAxXlWJg9NcHk0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":68209},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"dd07438a1ebd6043de970f76e2c4c261194b55cf","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.17.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@cube-drone/marquee-parser":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.7.0_1788336244182_0.9322662603951537","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@cube-drone/marquee-turbolink","version":"0.7.1","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.7.1","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"7cdd579fb18e693ab19b4381fac3cc1fbc69aeb6","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.7.1.tgz","fileCount":18,"integrity":"sha512-yUoyu5GXSSMu7j1CNYTbIuHIpY0pn44oOqfOfFQ1VtK2DRk7jUVxFF161oG0PkT0i1Pe+Y6r6R3O/rqis6cMhg==","signatures":[{"sig":"MEUCIC6UauBt4qc8EawN/B7Xi6oVEKG3R+Vi+QQaEX92pgdqAiEA7YfDEsoUyQs9xFROIjktxv760hxm6bH0MO5+r/uikzY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":68401},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"803737fc90b85c2c975eea7cd71ed568b447993e","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.17.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@cube-drone/marquee-parser":"^0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.7.1_1788429188321_0.41632702984055925","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@cube-drone/marquee-turbolink","version":"0.7.2","license":"MPL-2.0","_id":"@cube-drone/marquee-turbolink@0.7.2","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"homepage":"https://github.com/cube-drone/marqueemarkup#readme","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"dist":{"shasum":"588e534bf63096ae0cc50eca74b0462bcff2e5fc","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.7.2.tgz","fileCount":18,"integrity":"sha512-90boEpMZVVXoVE6ZY1/3mWfYIL3Q6JljkNcw0qF+XT91Cyu5yaa3+cpTQkQyfNJD/mfK+3djwWZ/ID0GXTPThw==","signatures":[{"sig":"MEUCIQDI8zz5I7EvPCYao0TiITb3RjgMKEgo6S0J4boE/hFlKAIgZpZ54xz7eeDNtmICa0VT8Pcx3PWciThn9CVRpwcWFhU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":68401},"type":"module","engines":{"node":">=22.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","marquee-src":"./src/index.ts"}},"gitHead":"f05dcff51ae3d74ed16cd4419859fbd15c70fe67","scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","build":"tsc -p tsconfig.build.json","check":"tsc --noEmit","prepack":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"repository":{"url":"git+https://github.com/cube-drone/marqueemarkup.git","type":"git","directory":"ts/marquee-turbolink"},"_npmVersion":"11.19.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@cube-drone/marquee-parser":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/marquee-turbolink_0.7.2_1788466577260_0.10614249672646037","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@cube-drone/marquee-turbolink","version":"0.8.0","description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","license":"MPL-2.0","repository":{"type":"git","url":"git+https://github.com/cube-drone/marqueemarkup.git","directory":"ts/marquee-turbolink"},"type":"module","engines":{"node":">=22.6.0"},"publishConfig":{"access":"public"},"exports":{".":{"marquee-src":"./src/index.ts","types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"node --conditions=marquee-src --test test/*.test.ts","check":"tsc --noEmit","build":"tsc -p tsconfig.build.json","prepack":"npm run build"},"dependencies":{"@cube-drone/marquee-parser":"^0.8.0"},"devDependencies":{"@types/node":"^24.0.0","typescript":"^5.9.0"},"gitHead":"010d8261d68ec7d4abafdcd0fdcd3a0267207f50","_id":"@cube-drone/marquee-turbolink@0.8.0","bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"homepage":"https://github.com/cube-drone/marqueemarkup#readme","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-BpAV/mmlsMfs3Mv4jm97RfwDOod+mLb19fUc+D+yAPbmf18lAIXyuwHahm3+/gE1TIPlVZAbzfJUMpHZK5k7+g==","shasum":"ec41a7a7cc03a5c977258c3efeabdfc109e2d2c0","tarball":"https://registry.npmjs.org/@cube-drone/marquee-turbolink/-/marquee-turbolink-0.8.0.tgz","fileCount":18,"unpackedSize":68401,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cube-drone%2fmarquee-turbolink@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCj+tMP2vjpAZnjJqKmL7JgvSJZ9b+Us7jogKdlAwhBTwIhAP+iC13yxP5OCbF7zI7lpmewlWTWn/1n58GBsQAxeM2a"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:70da75ea-6ee9-4c7f-8b41-17fd934966de"}},"directories":{},"maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/marquee-turbolink_0.8.0_1788738941053_0.2112496620277604"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-12T01:52:13.405Z","modified":"2026-09-06T23:55:41.471Z","0.1.0":"2026-07-12T01:52:13.756Z","0.1.1":"2026-07-12T02:27:07.463Z","0.2.0":"2026-07-12T08:12:34.830Z","0.3.0":"2026-07-13T00:25:13.161Z","0.4.0":"2026-07-14T20:15:07.749Z","0.5.0":"2026-07-17T21:50:31.622Z","0.6.0":"2026-07-17T23:25:04.380Z","0.6.1":"2026-07-20T23:55:18.800Z","0.6.2":"2026-07-29T22:20:13.464Z","0.7.0":"2026-09-02T08:04:04.333Z","0.7.1":"2026-09-03T09:53:08.448Z","0.7.2":"2026-09-03T20:16:17.421Z","0.8.0":"2026-09-06T23:55:41.199Z"},"bugs":{"url":"https://github.com/cube-drone/marqueemarkup/issues"},"license":"MPL-2.0","homepage":"https://github.com/cube-drone/marqueemarkup#readme","repository":{"type":"git","url":"git+https://github.com/cube-drone/marqueemarkup.git","directory":"ts/marquee-turbolink"},"description":"Pluggable turbolink rendering for Marquee: link expanders as plugins, plain link as the floor","maintainers":[{"name":"cube-drone","email":"cubedrone@gooble.email"}],"readme":"# marquee-turbolink\n\nLink expanders as plugins. The Marquee renderer owns the floor (a plain link, always) and the\nsocket (`Profile.turbolink`); this library is what embedders plug into it — an image link\nunfurls into a picture, an mp3 into play controls, YouTube into a playable embed, and whatever\nlink kinds 2035 brings into whatever they deserve.\n\n## The plugin contract\n\n```ts\ninterface TurbolinkPlugin {\n  name: string;\n  match(target: string): boolean;             // cheap recognition\n  resolve?(target: string): Promise<unknown>; // async; the ONLY place network is allowed\n  render(target, { level, data }): string | null; // sync, pure; null = decline\n}\n```\n\nTwo phases on purpose: `resolve()` gathers (OpenGraph fetches live here — run\n`resolveTargets()` as a fetch-ahead pass for static builds, or on mount in interactive\nrenderers); `render()` is synchronous and deterministic, which is all the Marquee renderer\never calls. Nothing can fetch mid-render.\n\nWiring it up:\n\n```ts\nimport { composeTurbolinks, defaultPlugins } from \"marquee-turbolink\";\n\nconst profile = {\n  ...bareWebProfile,\n  turbolink: composeTurbolinks([myPlatformPlugin, ...defaultPlugins]),\n};\n```\n\nFirst plugin that matches *and* renders wins; a declined or unmatched target falls to the\nrenderer's plain-link floor. And whatever a plugin renders, the renderer's wrapper appends\nthe original link beside it — enrichment augments, never replaces, and that guarantee is\nstructural: plugins don't need to remember it, and can't forget it. `defaultPlugins` is entirely fetchless (YouTube and Spotify embed\nURLs are derivable; media kinds are extensions); `opengraphPlugin` fetches and is exported\nseparately — opting into network is a deliberate act.\n\n## Your markup, your styles — declared, not distributed\n\nPlugins own their presentation, so they own its skin — as a `css` string field on the plugin\nitself. `turbolinkStyles(plugins)` collects the skins of exactly the chain you composed\n(deduplicating shared chunks, always including the standard card's baseline) into one\nartifact: emit it in a `<style>` block, or write it to a bundle file at build time. Importing\na plugin imports its style; there is no per-plugin file scavenger hunt to get wrong.\n\n```ts\nconst plugins = [myPlatformPlugin, ...defaultPlugins];\nconst profile = { ...bareWebProfile, turbolink: composeTurbolinks(plugins) };\nconst styles = turbolinkStyles(plugins); // one string, same list, nothing forgotten\n```\n\n(Why not inline `style=` attributes on the markup instead? Inline styles can't express\n`@media (prefers-reduced-motion)`, hover, or breakpoints — and they defeat embedder theming,\nsince inline beats every stylesheet rule. Classes + collected CSS keep plugins themeable and\nmotion-respectful.)\n\n## Safety\n\nPlugins are embedder-trusted code, exactly like `Profile.directive`. Author bytes only ever\nenter as the `target` string: escape everything you interpolate (`escapeText` / `escapeAttr`\nare exported for exactly that), and `renderCard` handles it for you on the common path.\n\nTests are this package's own (`npm test`) — renderer goldens never depend on plugin behavior.\n\n## Writing a plugin\n\nThe complete worked example lives in\n[`ts/marquee-turbolink-example-plugin`](../turbolink-example-plugin/): a plugin that recognizes\n`https://marquee.click/...` links, performs a ritual HTTP request in its resolve phase and\nthrows the answer away, then renders the link's path in `<strong>`. It does almost nothing —\ncorrectly — so every part of the contract is legible. The walkthrough:\n\n**1. `match()` is cheap recognition.** It runs against every turbolink target in a document,\nso keep it to a prefix or regex test — no parsing, no allocation drama, definitely no I/O:\n\n```ts\nmatch: (target) => target.startsWith(\"https://marquee.click/\"),\n```\n\n**2. `css` is your skin, declared on the plugin.** The example mints one class, so it\ndeclares one rule — collected by `turbolinkStyles()` along with every other composed plugin's,\nso it travels wherever the plugin goes. Namespace classes to your plugin (`marquee-click-*`);\nthe `mq-*` prefix belongs to Marquee's own vocabulary.\n\n```ts\ncss: `.marquee-click-path { color: rebeccapurple; font-size: 1.5em; }`,\n```\n\n**3. `resolve()` is where network lives — and nowhere else.** It's async, it may fetch, and\nit runs *ahead of rendering* (a fetch-ahead pass over `turbolinkTargets(doc)` for static\nbuilds; on mount for interactive renderers). Whatever it returns arrives in `render()` as\n`ctx.data`. Return `null` to say \"nothing gathered.\" If your plugin needs no network — most\ndon't — omit `resolve` entirely.\n\n```ts\nasync resolve(target) {\n  await fetch(\"https://example.org/\"); // the example discards this, honestly\n  return { ritualComplete: true };\n},\n```\n\n**4. `render()` is sync, pure, and deterministic.** Given the same target, level, and data,\nit returns the same string forever — no clocks, no randomness, no fetching. Two pieces of\netiquette:\n\n- **Decline with `null`** when you have nothing appropriate — the chain continues and the\n  renderer's plain-link floor catches everything. The default plugins all decline below\n  `level=full`; a player is not a \"title.\"\n- **Escape everything you interpolate.** The target (and anything derived from it) is author\n  bytes. Use the exported `escapeText`/`escapeAttr`, or hand your facts to `renderCard` and\n  let the standard card do it.\n\n```ts\nrender(target, { level }) {\n  if (level !== \"full\") return null;\n  const path = target.slice(\"https://marquee.click\".length).split(/[?#]/, 1)[0]!;\n  return `<strong class=\"marquee-click-path\">${escapeText(path)}</strong>`;\n},\n```\n\n**5. Test the pure parts.** `match()` and `render()` need no network by construction, so a\nplugin's test suite is fetchless: recognition, escaping (feed it a `<b>` in the path),\ndecline behavior, and a `composeTurbolinks([yours, ...defaultPlugins])` integration check.\nSee the example's `test/plugin.test.ts`.\n\nThen hand it to the chain, ahead of anything it should outrank:\n\n```ts\nturbolink: composeTurbolinks([marqueeClickPlugin, ...defaultPlugins]);\n```\n","readmeFilename":"README.md"}