@overcrow/mcp 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +91 -1
- package/dist/audit/index.js +103 -0
- package/dist/audit/lexer.js +417 -0
- package/dist/audit/project.js +200 -0
- package/dist/audit/rules.js +661 -0
- package/dist/bootstrap/download.js +229 -0
- package/dist/bootstrap/install.js +280 -0
- package/dist/bootstrap/pin.js +85 -0
- package/dist/bootstrap/pin.json +119 -0
- package/dist/bootstrap/zip.js +258 -0
- package/dist/cli.js +200 -0
- package/dist/confine.js +244 -0
- package/dist/content/docs/en/cli.md +353 -0
- package/dist/content/docs/en/dev-channel.md +130 -0
- package/dist/content/docs/en/elements.md +469 -0
- package/dist/content/docs/en/forms.md +328 -0
- package/dist/content/docs/en/guide.md +253 -0
- package/dist/content/docs/en/index.md +85 -0
- package/dist/content/docs/en/limits.md +241 -0
- package/dist/content/docs/en/logic.md +446 -0
- package/dist/content/docs/en/manifest.md +381 -0
- package/dist/content/docs/en/mcp.md +165 -0
- package/dist/content/docs/en/package.md +131 -0
- package/dist/content/docs/en/publishing.md +162 -0
- package/dist/content/docs/en/reference.md +55 -0
- package/dist/content/docs/en/result-shapes.md +332 -0
- package/dist/content/docs/en/sdk.md +295 -0
- package/dist/content/docs/en/security.md +115 -0
- package/dist/content/docs/en/service-reference.md +344 -0
- package/dist/content/docs/en/services.md +517 -0
- package/dist/content/docs/en/style-properties.md +270 -0
- package/dist/content/docs/en/style.md +266 -0
- package/dist/content/docs/en/testing.md +400 -0
- package/dist/content/docs/en/view.md +338 -0
- package/dist/content/docs/en/widgets.md +76 -0
- package/dist/content/docs/fr/cli.md +367 -0
- package/dist/content/docs/fr/dev-channel.md +140 -0
- package/dist/content/docs/fr/elements.md +475 -0
- package/dist/content/docs/fr/forms.md +341 -0
- package/dist/content/docs/fr/guide.md +264 -0
- package/dist/content/docs/fr/index.md +90 -0
- package/dist/content/docs/fr/limits.md +244 -0
- package/dist/content/docs/fr/logic.md +461 -0
- package/dist/content/docs/fr/manifest.md +392 -0
- package/dist/content/docs/fr/mcp.md +173 -0
- package/dist/content/docs/fr/package.md +139 -0
- package/dist/content/docs/fr/publishing.md +172 -0
- package/dist/content/docs/fr/reference.md +59 -0
- package/dist/content/docs/fr/result-shapes.md +333 -0
- package/dist/content/docs/fr/sdk.md +301 -0
- package/dist/content/docs/fr/security.md +129 -0
- package/dist/content/docs/fr/service-reference.md +346 -0
- package/dist/content/docs/fr/services.md +540 -0
- package/dist/content/docs/fr/style-properties.md +272 -0
- package/dist/content/docs/fr/style.md +281 -0
- package/dist/content/docs/fr/testing.md +417 -0
- package/dist/content/docs/fr/view.md +352 -0
- package/dist/content/docs/fr/widgets.md +81 -0
- package/dist/content/examples/clock/LICENSE +21 -0
- package/dist/content/examples/clock/README.md +75 -0
- package/dist/content/examples/clock/listing.json +19 -0
- package/dist/content/examples/clock/locales/en.json +4 -0
- package/dist/content/examples/clock/locales/fr.json +4 -0
- package/dist/content/examples/clock/logic.ts +85 -0
- package/dist/content/examples/clock/manifest.json +44 -0
- package/dist/content/examples/clock/package.json +16 -0
- package/dist/content/examples/clock/style.ocss +26 -0
- package/dist/content/examples/clock/tests/hidden.scenario.json +68 -0
- package/dist/content/examples/clock/tests/load-logic.mjs +22 -0
- package/dist/content/examples/clock/tests/logic.test.mjs +89 -0
- package/dist/content/examples/clock/tests/options.scenario.json +108 -0
- package/dist/content/examples/clock/tests/preview.scenario.json +25 -0
- package/dist/content/examples/clock/tests/render.scenario.json +94 -0
- package/dist/content/examples/clock/tests/summer-time.scenario.json +74 -0
- package/dist/content/examples/clock/tests/ticks.scenario.json +120 -0
- package/dist/content/examples/clock/tsconfig.json +16 -0
- package/dist/content/examples/clock/view.ocml +8 -0
- package/dist/content/examples/countdown/LICENSE +20 -0
- package/dist/content/examples/countdown/listing.json +10 -0
- package/dist/content/examples/countdown/locales/en.json +15 -0
- package/dist/content/examples/countdown/locales/fr.json +15 -0
- package/dist/content/examples/countdown/logic.ts +179 -0
- package/dist/content/examples/countdown/manifest.json +34 -0
- package/dist/content/examples/countdown/package.json +15 -0
- package/dist/content/examples/countdown/style.ocss +94 -0
- package/dist/content/examples/countdown/tsconfig.json +16 -0
- package/dist/content/examples/countdown/view.ocml +42 -0
- package/dist/content/examples/fps/LICENSE +21 -0
- package/dist/content/examples/fps/README.md +64 -0
- package/dist/content/examples/fps/listing.json +19 -0
- package/dist/content/examples/fps/locales/en.json +11 -0
- package/dist/content/examples/fps/locales/fr.json +11 -0
- package/dist/content/examples/fps/logic.ts +64 -0
- package/dist/content/examples/fps/manifest.json +30 -0
- package/dist/content/examples/fps/package.json +16 -0
- package/dist/content/examples/fps/style.ocss +31 -0
- package/dist/content/examples/fps/tests/label.scenario.json +63 -0
- package/dist/content/examples/fps/tests/load-logic.mjs +22 -0
- package/dist/content/examples/fps/tests/logic.test.mjs +60 -0
- package/dist/content/examples/fps/tests/preview.scenario.json +29 -0
- package/dist/content/examples/fps/tests/refused.scenario.json +20 -0
- package/dist/content/examples/fps/tests/render.scenario.json +96 -0
- package/dist/content/examples/fps/tests/stale.scenario.json +91 -0
- package/dist/content/examples/fps/tests/unavailable.scenario.json +111 -0
- package/dist/content/examples/fps/tsconfig.json +16 -0
- package/dist/content/examples/fps/view.ocml +11 -0
- package/dist/content/examples/media/LICENSE +21 -0
- package/dist/content/examples/media/README.md +147 -0
- package/dist/content/examples/media/listing.json +19 -0
- package/dist/content/examples/media/locales/en.json +11 -0
- package/dist/content/examples/media/locales/fr.json +11 -0
- package/dist/content/examples/media/logic.ts +191 -0
- package/dist/content/examples/media/manifest.json +35 -0
- package/dist/content/examples/media/package.json +16 -0
- package/dist/content/examples/media/style.ocss +148 -0
- package/dist/content/examples/media/tests/covers.scenario.json +144 -0
- package/dist/content/examples/media/tests/gesture.scenario.json +173 -0
- package/dist/content/examples/media/tests/load-logic.mjs +22 -0
- package/dist/content/examples/media/tests/logic.test.mjs +176 -0
- package/dist/content/examples/media/tests/marquee.scenario.json +127 -0
- package/dist/content/examples/media/tests/preview.scenario.json +52 -0
- package/dist/content/examples/media/tests/read-only.scenario.json +53 -0
- package/dist/content/examples/media/tests/refused.scenario.json +22 -0
- package/dist/content/examples/media/tests/refused.test.mjs +31 -0
- package/dist/content/examples/media/tests/render.scenario.json +136 -0
- package/dist/content/examples/media/tests/states.scenario.json +257 -0
- package/dist/content/examples/media/tests/unavailable.scenario.json +120 -0
- package/dist/content/examples/media/tsconfig.json +16 -0
- package/dist/content/examples/media/view.ocml +41 -0
- package/dist/content/examples/notes/LICENSE +21 -0
- package/dist/content/examples/notes/README.md +219 -0
- package/dist/content/examples/notes/listing.json +19 -0
- package/dist/content/examples/notes/locales/en.json +25 -0
- package/dist/content/examples/notes/locales/fr.json +25 -0
- package/dist/content/examples/notes/logic.ts +799 -0
- package/dist/content/examples/notes/manifest.json +40 -0
- package/dist/content/examples/notes/package.json +16 -0
- package/dist/content/examples/notes/style.ocss +469 -0
- package/dist/content/examples/notes/tests/checks.scenario.json +237 -0
- package/dist/content/examples/notes/tests/create.scenario.json +260 -0
- package/dist/content/examples/notes/tests/delete.scenario.json +342 -0
- package/dist/content/examples/notes/tests/drafts.scenario.json +714 -0
- package/dist/content/examples/notes/tests/editor.scenario.json +232 -0
- package/dist/content/examples/notes/tests/frame.scenario.json +93 -0
- package/dist/content/examples/notes/tests/interactive.scenario.json +344 -0
- package/dist/content/examples/notes/tests/limits.scenario.json +1351 -0
- package/dist/content/examples/notes/tests/load-logic.mjs +22 -0
- package/dist/content/examples/notes/tests/logic.test.mjs +514 -0
- package/dist/content/examples/notes/tests/preview.scenario.json +99 -0
- package/dist/content/examples/notes/tests/read-only.scenario.json +105 -0
- package/dist/content/examples/notes/tests/refused.scenario.json +33 -0
- package/dist/content/examples/notes/tests/save.scenario.json +378 -0
- package/dist/content/examples/notes/tests/states.scenario.json +640 -0
- package/dist/content/examples/notes/tests/typing.scenario.json +562 -0
- package/dist/content/examples/notes/tests/unavailable.scenario.json +246 -0
- package/dist/content/examples/notes/tsconfig.json +16 -0
- package/dist/content/examples/notes/view.ocml +154 -0
- package/dist/content/examples/performance/LICENSE +21 -0
- package/dist/content/examples/performance/README.md +134 -0
- package/dist/content/examples/performance/listing.json +19 -0
- package/dist/content/examples/performance/locales/en.json +20 -0
- package/dist/content/examples/performance/locales/fr.json +20 -0
- package/dist/content/examples/performance/logic.ts +210 -0
- package/dist/content/examples/performance/manifest.json +83 -0
- package/dist/content/examples/performance/package.json +16 -0
- package/dist/content/examples/performance/style.ocss +75 -0
- package/dist/content/examples/performance/tests/fahrenheit.scenario.json +110 -0
- package/dist/content/examples/performance/tests/horizontal.scenario.json +96 -0
- package/dist/content/examples/performance/tests/load-logic.mjs +22 -0
- package/dist/content/examples/performance/tests/logic.test.mjs +226 -0
- package/dist/content/examples/performance/tests/menu.scenario.json +170 -0
- package/dist/content/examples/performance/tests/no-fps-source.scenario.json +47 -0
- package/dist/content/examples/performance/tests/preview.scenario.json +45 -0
- package/dist/content/examples/performance/tests/refused.scenario.json +20 -0
- package/dist/content/examples/performance/tests/refused.test.mjs +19 -0
- package/dist/content/examples/performance/tests/region.scenario.json +89 -0
- package/dist/content/examples/performance/tests/render.scenario.json +112 -0
- package/dist/content/examples/performance/tests/sources.scenario.json +151 -0
- package/dist/content/examples/performance/tests/stale.scenario.json +111 -0
- package/dist/content/examples/performance/tests/telemetry-only.scenario.json +44 -0
- package/dist/content/examples/performance/tests/thresholds.scenario.json +147 -0
- package/dist/content/examples/performance/tests/waiting.scenario.json +105 -0
- package/dist/content/examples/performance/tsconfig.json +16 -0
- package/dist/content/examples/performance/view.ocml +18 -0
- package/dist/content/examples/playervox-journal/LICENSE +21 -0
- package/dist/content/examples/playervox-journal/README.md +150 -0
- package/dist/content/examples/playervox-journal/listing.json +19 -0
- package/dist/content/examples/playervox-journal/locales/en.json +25 -0
- package/dist/content/examples/playervox-journal/locales/fr.json +25 -0
- package/dist/content/examples/playervox-journal/logic.ts +556 -0
- package/dist/content/examples/playervox-journal/manifest.json +19 -0
- package/dist/content/examples/playervox-journal/package.json +16 -0
- package/dist/content/examples/playervox-journal/style.ocss +142 -0
- package/dist/content/examples/playervox-journal/tests/changes.scenario.json +482 -0
- package/dist/content/examples/playervox-journal/tests/delete.scenario.json +432 -0
- package/dist/content/examples/playervox-journal/tests/frame.scenario.json +169 -0
- package/dist/content/examples/playervox-journal/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-journal/tests/logic.test.mjs +349 -0
- package/dist/content/examples/playervox-journal/tests/paging.scenario.json +428 -0
- package/dist/content/examples/playervox-journal/tests/preview.scenario.json +184 -0
- package/dist/content/examples/playervox-journal/tests/read-only.scenario.json +157 -0
- package/dist/content/examples/playervox-journal/tests/refused.scenario.json +39 -0
- package/dist/content/examples/playervox-journal/tests/scale.scenario.json +286 -0
- package/dist/content/examples/playervox-journal/tests/signed-out.scenario.json +134 -0
- package/dist/content/examples/playervox-journal/tests/states.scenario.json +741 -0
- package/dist/content/examples/playervox-journal/tests/unavailable.scenario.json +183 -0
- package/dist/content/examples/playervox-journal/tsconfig.json +16 -0
- package/dist/content/examples/playervox-journal/view.ocml +52 -0
- package/dist/content/examples/playervox-rating/LICENSE +21 -0
- package/dist/content/examples/playervox-rating/README.md +166 -0
- package/dist/content/examples/playervox-rating/listing.json +19 -0
- package/dist/content/examples/playervox-rating/locales/en.json +35 -0
- package/dist/content/examples/playervox-rating/locales/fr.json +35 -0
- package/dist/content/examples/playervox-rating/logic.ts +581 -0
- package/dist/content/examples/playervox-rating/manifest.json +19 -0
- package/dist/content/examples/playervox-rating/package.json +16 -0
- package/dist/content/examples/playervox-rating/style.ocss +333 -0
- package/dist/content/examples/playervox-rating/tests/account.scenario.json +125 -0
- package/dist/content/examples/playervox-rating/tests/bounds.scenario.json +73 -0
- package/dist/content/examples/playervox-rating/tests/draft.scenario.json +199 -0
- package/dist/content/examples/playervox-rating/tests/form.scenario.json +142 -0
- package/dist/content/examples/playervox-rating/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-rating/tests/logic.test.mjs +346 -0
- package/dist/content/examples/playervox-rating/tests/offline.scenario.json +142 -0
- package/dist/content/examples/playervox-rating/tests/preview.scenario.json +44 -0
- package/dist/content/examples/playervox-rating/tests/publish-keyboard.scenario.json +221 -0
- package/dist/content/examples/playervox-rating/tests/publish-pointer.scenario.json +314 -0
- package/dist/content/examples/playervox-rating/tests/read-only.scenario.json +70 -0
- package/dist/content/examples/playervox-rating/tests/refused.scenario.json +45 -0
- package/dist/content/examples/playervox-rating/tests/states.scenario.json +362 -0
- package/dist/content/examples/playervox-rating/tsconfig.json +16 -0
- package/dist/content/examples/playervox-rating/view.ocml +62 -0
- package/dist/content/examples/playervox-reviews/LICENSE +21 -0
- package/dist/content/examples/playervox-reviews/README.md +194 -0
- package/dist/content/examples/playervox-reviews/listing.json +19 -0
- package/dist/content/examples/playervox-reviews/locales/en.json +32 -0
- package/dist/content/examples/playervox-reviews/locales/fr.json +32 -0
- package/dist/content/examples/playervox-reviews/logic.ts +822 -0
- package/dist/content/examples/playervox-reviews/manifest.json +30 -0
- package/dist/content/examples/playervox-reviews/package.json +16 -0
- package/dist/content/examples/playervox-reviews/style.ocss +260 -0
- package/dist/content/examples/playervox-reviews/tests/account.scenario.json +249 -0
- package/dist/content/examples/playervox-reviews/tests/bounds.scenario.json +336 -0
- package/dist/content/examples/playervox-reviews/tests/changes.scenario.json +515 -0
- package/dist/content/examples/playervox-reviews/tests/filter.scenario.json +400 -0
- package/dist/content/examples/playervox-reviews/tests/frame.scenario.json +185 -0
- package/dist/content/examples/playervox-reviews/tests/keyboard.scenario.json +188 -0
- package/dist/content/examples/playervox-reviews/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-reviews/tests/logic.test.mjs +559 -0
- package/dist/content/examples/playervox-reviews/tests/offline-start.scenario.json +152 -0
- package/dist/content/examples/playervox-reviews/tests/offline.scenario.json +311 -0
- package/dist/content/examples/playervox-reviews/tests/paging.scenario.json +497 -0
- package/dist/content/examples/playervox-reviews/tests/preview.scenario.json +286 -0
- package/dist/content/examples/playervox-reviews/tests/reading.scenario.json +591 -0
- package/dist/content/examples/playervox-reviews/tests/refused.scenario.json +54 -0
- package/dist/content/examples/playervox-reviews/tests/scale.scenario.json +303 -0
- package/dist/content/examples/playervox-reviews/tests/states.scenario.json +700 -0
- package/dist/content/examples/playervox-reviews/tests/unavailable.scenario.json +192 -0
- package/dist/content/examples/playervox-reviews/tsconfig.json +16 -0
- package/dist/content/examples/playervox-reviews/view.ocml +110 -0
- package/dist/content/examples/playervox-score/LICENSE +21 -0
- package/dist/content/examples/playervox-score/README.md +131 -0
- package/dist/content/examples/playervox-score/listing.json +19 -0
- package/dist/content/examples/playervox-score/locales/en.json +23 -0
- package/dist/content/examples/playervox-score/locales/fr.json +23 -0
- package/dist/content/examples/playervox-score/logic.ts +430 -0
- package/dist/content/examples/playervox-score/manifest.json +47 -0
- package/dist/content/examples/playervox-score/package.json +16 -0
- package/dist/content/examples/playervox-score/style.ocss +247 -0
- package/dist/content/examples/playervox-score/tests/grades.scenario.json +279 -0
- package/dist/content/examples/playervox-score/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-score/tests/logic.test.mjs +229 -0
- package/dist/content/examples/playervox-score/tests/options.scenario.json +302 -0
- package/dist/content/examples/playervox-score/tests/preview.scenario.json +68 -0
- package/dist/content/examples/playervox-score/tests/pulse.scenario.json +157 -0
- package/dist/content/examples/playervox-score/tests/refused.scenario.json +21 -0
- package/dist/content/examples/playervox-score/tests/signed-out.scenario.json +46 -0
- package/dist/content/examples/playervox-score/tests/states.scenario.json +450 -0
- package/dist/content/examples/playervox-score/tests/unavailable.scenario.json +84 -0
- package/dist/content/examples/playervox-score/tsconfig.json +16 -0
- package/dist/content/examples/playervox-score/view.ocml +51 -0
- package/dist/content/examples/session/LICENSE +21 -0
- package/dist/content/examples/session/README.md +57 -0
- package/dist/content/examples/session/listing.json +19 -0
- package/dist/content/examples/session/locales/en.json +3 -0
- package/dist/content/examples/session/locales/fr.json +3 -0
- package/dist/content/examples/session/logic.ts +26 -0
- package/dist/content/examples/session/manifest.json +19 -0
- package/dist/content/examples/session/package.json +16 -0
- package/dist/content/examples/session/style.ocss +16 -0
- package/dist/content/examples/session/tests/hidden.scenario.json +45 -0
- package/dist/content/examples/session/tests/load-logic.mjs +22 -0
- package/dist/content/examples/session/tests/logic.test.mjs +37 -0
- package/dist/content/examples/session/tests/preview.scenario.json +28 -0
- package/dist/content/examples/session/tests/refused.scenario.json +20 -0
- package/dist/content/examples/session/tests/refused.test.mjs +16 -0
- package/dist/content/examples/session/tests/render.scenario.json +95 -0
- package/dist/content/examples/session/tests/ticks.scenario.json +139 -0
- package/dist/content/examples/session/tests/unknown.scenario.json +37 -0
- package/dist/content/examples/session/tsconfig.json +16 -0
- package/dist/content/examples/session/view.ocml +11 -0
- package/dist/content/examples/stopwatch/LICENSE +21 -0
- package/dist/content/examples/stopwatch/README.md +99 -0
- package/dist/content/examples/stopwatch/listing.json +19 -0
- package/dist/content/examples/stopwatch/locales/en.json +8 -0
- package/dist/content/examples/stopwatch/locales/fr.json +8 -0
- package/dist/content/examples/stopwatch/logic.ts +93 -0
- package/dist/content/examples/stopwatch/manifest.json +19 -0
- package/dist/content/examples/stopwatch/package.json +16 -0
- package/dist/content/examples/stopwatch/style.ocss +54 -0
- package/dist/content/examples/stopwatch/tests/errors.scenario.json +121 -0
- package/dist/content/examples/stopwatch/tests/gesture.scenario.json +154 -0
- package/dist/content/examples/stopwatch/tests/hidden.scenario.json +57 -0
- package/dist/content/examples/stopwatch/tests/hundredths.scenario.json +173 -0
- package/dist/content/examples/stopwatch/tests/load-logic.mjs +22 -0
- package/dist/content/examples/stopwatch/tests/logic.test.mjs +99 -0
- package/dist/content/examples/stopwatch/tests/preview.scenario.json +36 -0
- package/dist/content/examples/stopwatch/tests/read-only.scenario.json +42 -0
- package/dist/content/examples/stopwatch/tests/read-only.test.mjs +18 -0
- package/dist/content/examples/stopwatch/tests/refused.scenario.json +22 -0
- package/dist/content/examples/stopwatch/tests/refused.test.mjs +18 -0
- package/dist/content/examples/stopwatch/tests/render.scenario.json +105 -0
- package/dist/content/examples/stopwatch/tests/states.scenario.json +246 -0
- package/dist/content/examples/stopwatch/tests/unknown.scenario.json +40 -0
- package/dist/content/examples/stopwatch/tsconfig.json +16 -0
- package/dist/content/examples/stopwatch/view.ocml +29 -0
- package/dist/content/examples/twitch-chat/LICENSE +21 -0
- package/dist/content/examples/twitch-chat/README.md +283 -0
- package/dist/content/examples/twitch-chat/listing.json +19 -0
- package/dist/content/examples/twitch-chat/locales/en.json +52 -0
- package/dist/content/examples/twitch-chat/locales/fr.json +52 -0
- package/dist/content/examples/twitch-chat/logic.ts +887 -0
- package/dist/content/examples/twitch-chat/manifest.json +33 -0
- package/dist/content/examples/twitch-chat/package.json +16 -0
- package/dist/content/examples/twitch-chat/style.ocss +544 -0
- package/dist/content/examples/twitch-chat/tests/account.scenario.json +325 -0
- package/dist/content/examples/twitch-chat/tests/burst.scenario.json +1866 -0
- package/dist/content/examples/twitch-chat/tests/channel-refused.scenario.json +372 -0
- package/dist/content/examples/twitch-chat/tests/channel.scenario.json +480 -0
- package/dist/content/examples/twitch-chat/tests/draft.scenario.json +279 -0
- package/dist/content/examples/twitch-chat/tests/fade.scenario.json +269 -0
- package/dist/content/examples/twitch-chat/tests/failures.scenario.json +420 -0
- package/dist/content/examples/twitch-chat/tests/favorites.scenario.json +376 -0
- package/dist/content/examples/twitch-chat/tests/frame.scenario.json +152 -0
- package/dist/content/examples/twitch-chat/tests/lifetime.scenario.json +186 -0
- package/dist/content/examples/twitch-chat/tests/load-logic.mjs +22 -0
- package/dist/content/examples/twitch-chat/tests/logic.test.mjs +1053 -0
- package/dist/content/examples/twitch-chat/tests/passive.scenario.json +536 -0
- package/dist/content/examples/twitch-chat/tests/preview.scenario.json +147 -0
- package/dist/content/examples/twitch-chat/tests/read-only.scenario.json +202 -0
- package/dist/content/examples/twitch-chat/tests/read-only.test.mjs +63 -0
- package/dist/content/examples/twitch-chat/tests/refused.scenario.json +65 -0
- package/dist/content/examples/twitch-chat/tests/refused.test.mjs +43 -0
- package/dist/content/examples/twitch-chat/tests/render.scenario.json +347 -0
- package/dist/content/examples/twitch-chat/tests/reply.scenario.json +384 -0
- package/dist/content/examples/twitch-chat/tests/send-refused.scenario.json +383 -0
- package/dist/content/examples/twitch-chat/tests/send.scenario.json +300 -0
- package/dist/content/examples/twitch-chat/tests/states.scenario.json +455 -0
- package/dist/content/examples/twitch-chat/tests/unavailable.scenario.json +256 -0
- package/dist/content/examples/twitch-chat/tests/unread.scenario.json +997 -0
- package/dist/content/examples/twitch-chat/tsconfig.json +16 -0
- package/dist/content/examples/twitch-chat/view.ocml +141 -0
- package/dist/content/examples/warframe-market/LICENSE +21 -0
- package/dist/content/examples/warframe-market/README.md +176 -0
- package/dist/content/examples/warframe-market/listing.json +19 -0
- package/dist/content/examples/warframe-market/locales/en.json +44 -0
- package/dist/content/examples/warframe-market/locales/fr.json +44 -0
- package/dist/content/examples/warframe-market/logic.ts +1265 -0
- package/dist/content/examples/warframe-market/manifest.json +92 -0
- package/dist/content/examples/warframe-market/package.json +16 -0
- package/dist/content/examples/warframe-market/style.ocss +422 -0
- package/dist/content/examples/warframe-market/tests/bounds.scenario.json +60 -0
- package/dist/content/examples/warframe-market/tests/cached.scenario.json +70 -0
- package/dist/content/examples/warframe-market/tests/detail.scenario.json +251 -0
- package/dist/content/examples/warframe-market/tests/errors.scenario.json +105 -0
- package/dist/content/examples/warframe-market/tests/fixtures.json +295 -0
- package/dist/content/examples/warframe-market/tests/load-logic.mjs +22 -0
- package/dist/content/examples/warframe-market/tests/logic.test.mjs +505 -0
- package/dist/content/examples/warframe-market/tests/no-clipboard.scenario.json +104 -0
- package/dist/content/examples/warframe-market/tests/passive.scenario.json +87 -0
- package/dist/content/examples/warframe-market/tests/preview.scenario.json +146 -0
- package/dist/content/examples/warframe-market/tests/refresh.scenario.json +56 -0
- package/dist/content/examples/warframe-market/tests/refused.scenario.json +74 -0
- package/dist/content/examples/warframe-market/tests/render.scenario.json +210 -0
- package/dist/content/examples/warframe-market/tests/search.scenario.json +189 -0
- package/dist/content/examples/warframe-market/tests/unavailable.scenario.json +54 -0
- package/dist/content/examples/warframe-market/tsconfig.json +16 -0
- package/dist/content/examples/warframe-market/view.ocml +116 -0
- package/dist/content/examples/weather/LICENSE +20 -0
- package/dist/content/examples/weather/listing.json +10 -0
- package/dist/content/examples/weather/locales/en.json +9 -0
- package/dist/content/examples/weather/locales/fr.json +9 -0
- package/dist/content/examples/weather/logic.ts +62 -0
- package/dist/content/examples/weather/manifest.json +51 -0
- package/dist/content/examples/weather/package.json +15 -0
- package/dist/content/examples/weather/style.ocss +29 -0
- package/dist/content/examples/weather/tsconfig.json +16 -0
- package/dist/content/examples/weather/view.ocml +12 -0
- package/dist/content/index.json +3601 -0
- package/dist/content/reference/errors.json +1712 -0
- package/dist/content/reference/limits.json +1154 -0
- package/dist/content/reference/manifest.md +223 -0
- package/dist/content/reference/permissions.json +413 -0
- package/dist/content/templates/blank/locales/en.json +3 -0
- package/dist/content/templates/blank/locales/fr.json +3 -0
- package/dist/content/templates/blank/logic.ts +7 -0
- package/dist/content/templates/blank/manifest.json +16 -0
- package/dist/content/templates/blank/style.ocss +10 -0
- package/dist/content/templates/blank/tests/example.scenario.json +10 -0
- package/dist/content/templates/blank/view.ocml +6 -0
- package/dist/content/templates/chart/locales/en.json +3 -0
- package/dist/content/templates/chart/locales/fr.json +3 -0
- package/dist/content/templates/chart/logic.ts +27 -0
- package/dist/content/templates/chart/manifest.json +16 -0
- package/dist/content/templates/chart/style.ocss +27 -0
- package/dist/content/templates/chart/tests/example.scenario.json +10 -0
- package/dist/content/templates/chart/view.ocml +10 -0
- package/dist/content/templates/counter/locales/en.json +4 -0
- package/dist/content/templates/counter/locales/fr.json +4 -0
- package/dist/content/templates/counter/logic.ts +20 -0
- package/dist/content/templates/counter/manifest.json +16 -0
- package/dist/content/templates/counter/style.ocss +26 -0
- package/dist/content/templates/counter/tests/example.scenario.json +11 -0
- package/dist/content/templates/counter/view.ocml +13 -0
- package/dist/content/templates/list/locales/en.json +8 -0
- package/dist/content/templates/list/locales/fr.json +8 -0
- package/dist/content/templates/list/logic.ts +35 -0
- package/dist/content/templates/list/manifest.json +16 -0
- package/dist/content/templates/list/style.ocss +42 -0
- package/dist/content/templates/list/tests/example.scenario.json +10 -0
- package/dist/content/templates/list/view.ocml +17 -0
- package/dist/content/templates/shared/LICENSE +20 -0
- package/dist/content/templates/shared/package.json +14 -0
- package/dist/content/templates/shared/tsconfig.json +16 -0
- package/dist/content.js +68 -0
- package/dist/env.js +156 -0
- package/dist/fingerprint.js +32 -0
- package/dist/ids.js +27 -0
- package/dist/index.js +82 -0
- package/dist/knowledge.js +222 -0
- package/dist/npm.js +149 -0
- package/dist/prompts.js +47 -0
- package/dist/resources.js +82 -0
- package/dist/run.js +120 -0
- package/dist/server.js +43 -0
- package/dist/session.js +205 -0
- package/dist/sources.js +218 -0
- package/dist/text.js +80 -0
- package/dist/texts.js +44 -0
- package/dist/tools/audit.js +105 -0
- package/dist/tools/build.js +453 -0
- package/dist/tools/common.js +122 -0
- package/dist/tools/docs.js +196 -0
- package/dist/tools/preview.js +87 -0
- package/dist/tools/project.js +178 -0
- package/dist/tools/setup.js +146 -0
- package/dist/tools/submission.js +369 -0
- package/dist/version.js +3 -0
- package/npm-shrinkwrap.json +402 -0
- package/package.json +50 -4
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scenarioVersion": 1,
|
|
3
|
+
"name": "example",
|
|
4
|
+
"description": "The widget starts and shows its greeting. `overcrow-widget test` plays it (https://overcrow.playervox.com/docs/en/testing/); add an `image` to an `expect` step and run `overcrow-widget test --update` to record a reference image.",
|
|
5
|
+
"steps": [
|
|
6
|
+
{ "expect": { "state": "running", "text": ["Hello from {{name}}"], "fault": "none" } },
|
|
7
|
+
{ "host": { "locale": "fr" } },
|
|
8
|
+
{ "expect": { "state": "running" } }
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// A live chart. A host timer adds a sample every second and keeps the last
|
|
2
|
+
// POINTS values; the host draws the series.
|
|
3
|
+
import { formatNumber, initState, timers } from "@overcrow/sdk";
|
|
4
|
+
|
|
5
|
+
const POINTS = 30;
|
|
6
|
+
|
|
7
|
+
declare module "@overcrow/sdk" {
|
|
8
|
+
interface WidgetState {
|
|
9
|
+
values: number[];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const state = initState({ values: [50] as number[] });
|
|
14
|
+
|
|
15
|
+
export function latest(values: readonly number[]): string {
|
|
16
|
+
const last = values.at(-1);
|
|
17
|
+
return last === undefined ? "" : formatNumber(last, { maximumFractionDigits: 0 });
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function sample(previous: number): number {
|
|
21
|
+
return Math.min(100, Math.max(0, previous + (Math.random() - 0.5) * 20));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
timers.every(1000, () => {
|
|
25
|
+
const previous = state.values.at(-1) ?? 50;
|
|
26
|
+
state.values = [...state.values.slice(1 - POINTS), sample(previous)];
|
|
27
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"id": "{{id}}",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"name": {
|
|
7
|
+
"en": "{{name}}",
|
|
8
|
+
"fr": "{{name}}"
|
|
9
|
+
},
|
|
10
|
+
"sizing": {
|
|
11
|
+
"fit": "none",
|
|
12
|
+
"preferred": { "width": 280, "height": 160 },
|
|
13
|
+
"min": { "width": 200, "height": 100 },
|
|
14
|
+
"max": { "width": 640, "height": 640 }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.panel {
|
|
2
|
+
flex-direction: column;
|
|
3
|
+
gap: var(--space-2);
|
|
4
|
+
padding: var(--space-3);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.header {
|
|
8
|
+
justify-content: space-between;
|
|
9
|
+
align-items: center;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.title {
|
|
13
|
+
font-size: var(--font-size-title);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.value {
|
|
17
|
+
font-size: var(--font-size-value);
|
|
18
|
+
font-variant-numeric: tabular-nums;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.plot {
|
|
22
|
+
flex-grow: 1;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.series {
|
|
26
|
+
color: var(--color-accent);
|
|
27
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scenarioVersion": 1,
|
|
3
|
+
"name": "example",
|
|
4
|
+
"description": "The chart after ten seconds of one-second ticks, on virtual time (Math.random is seeded in tests). `overcrow-widget test` plays it and compares the images with tests/reference/example/; `--update` records them again (https://overcrow.playervox.com/docs/en/testing/).",
|
|
5
|
+
"steps": [
|
|
6
|
+
{ "expect": { "state": "running", "text": ["Activity", "50"], "image": "initial" } },
|
|
7
|
+
{ "advance": { "ms": 10000 } },
|
|
8
|
+
{ "expect": { "noText": ["50"], "image": "ten-seconds", "fault": "none" } }
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- A live chart drawn by the host: the logic only updates the values. -->
|
|
2
|
+
<box class="panel">
|
|
3
|
+
<box class="header">
|
|
4
|
+
<text class="title">{t("title")}</text>
|
|
5
|
+
<text class="value">{latest(state.values)}</text>
|
|
6
|
+
</box>
|
|
7
|
+
<chart class="plot" kind="area" min="0" max="100">
|
|
8
|
+
<series class="series" values={state.values}/>
|
|
9
|
+
</chart>
|
|
10
|
+
</box>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// A counter. The view reads `state.count` and calls `increment` and
|
|
2
|
+
// `decrement` on activation; after each handler the VM renders the view
|
|
3
|
+
// again and sends only what changed.
|
|
4
|
+
import { initState } from "@overcrow/sdk";
|
|
5
|
+
|
|
6
|
+
declare module "@overcrow/sdk" {
|
|
7
|
+
interface WidgetState {
|
|
8
|
+
count: number;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const state = initState({ count: 0 });
|
|
13
|
+
|
|
14
|
+
export function increment(): void {
|
|
15
|
+
state.count += 1;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function decrement(): void {
|
|
19
|
+
state.count -= 1;
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"id": "{{id}}",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"name": {
|
|
7
|
+
"en": "{{name}}",
|
|
8
|
+
"fr": "{{name}}"
|
|
9
|
+
},
|
|
10
|
+
"sizing": {
|
|
11
|
+
"fit": "none",
|
|
12
|
+
"preferred": { "width": 200, "height": 96 },
|
|
13
|
+
"min": { "width": 140, "height": 72 },
|
|
14
|
+
"max": { "width": 640, "height": 640 }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.counter {
|
|
2
|
+
flex-direction: column;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: var(--space-2);
|
|
5
|
+
padding: var(--space-3);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.value {
|
|
9
|
+
font-size: var(--font-size-value);
|
|
10
|
+
font-variant-numeric: tabular-nums;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.actions {
|
|
14
|
+
gap: var(--space-2);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.step {
|
|
18
|
+
width: var(--icon-button-size);
|
|
19
|
+
height: var(--icon-button-size);
|
|
20
|
+
border-radius: var(--radius-md);
|
|
21
|
+
background: var(--color-surface-raised);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.step:hover {
|
|
25
|
+
background: var(--color-surface-hover);
|
|
26
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scenarioVersion": 1,
|
|
3
|
+
"name": "example",
|
|
4
|
+
"description": "The counter starts at 0 and Increase adds one. `overcrow-widget test` plays it and compares the images with tests/reference/example/; `--update` records them again (https://overcrow.playervox.com/docs/en/testing/).",
|
|
5
|
+
"host": { "mode": "interactive" },
|
|
6
|
+
"steps": [
|
|
7
|
+
{ "expect": { "state": "running", "text": ["0"], "image": "initial" } },
|
|
8
|
+
{ "pointer": { "click": { "label": "Increase" } } },
|
|
9
|
+
{ "expect": { "text": ["1"], "noText": ["0"], "image": "increased", "fault": "none" } }
|
|
10
|
+
]
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!-- A counter: the value, and two buttons whose handlers are exported by
|
|
2
|
+
logic.ts. -->
|
|
3
|
+
<box class="counter">
|
|
4
|
+
<text class="value">{state.count}</text>
|
|
5
|
+
<box class="actions">
|
|
6
|
+
<button class="step" label={t("decrement")} on:activate={decrement}>
|
|
7
|
+
<icon name="minus"/>
|
|
8
|
+
</button>
|
|
9
|
+
<button class="step" label={t("increment")} on:activate={increment}>
|
|
10
|
+
<icon name="plus"/>
|
|
11
|
+
</button>
|
|
12
|
+
</box>
|
|
13
|
+
</box>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// A checklist. Items live in the state; the view repeats a row per item
|
|
2
|
+
// and calls `setDone` and `remove` with the item's ID.
|
|
3
|
+
import { initState, t } from "@overcrow/sdk";
|
|
4
|
+
|
|
5
|
+
interface Item {
|
|
6
|
+
id: number;
|
|
7
|
+
text: string;
|
|
8
|
+
done: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare module "@overcrow/sdk" {
|
|
12
|
+
interface WidgetState {
|
|
13
|
+
items: Item[];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const state = initState({
|
|
18
|
+
items: [
|
|
19
|
+
{ id: 1, text: t("first"), done: false },
|
|
20
|
+
{ id: 2, text: t("second"), done: false },
|
|
21
|
+
{ id: 3, text: t("third"), done: true },
|
|
22
|
+
] as Item[],
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export function setDone(id: number, done: unknown): void {
|
|
26
|
+
state.items = state.items.map((item) => (item.id === id ? { ...item, done: done === true } : item));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function remove(id: number): void {
|
|
30
|
+
state.items = state.items.filter((item) => item.id !== id);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function remaining(items: readonly Item[]): number {
|
|
34
|
+
return items.filter((item) => !item.done).length;
|
|
35
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"id": "{{id}}",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"name": {
|
|
7
|
+
"en": "{{name}}",
|
|
8
|
+
"fr": "{{name}}"
|
|
9
|
+
},
|
|
10
|
+
"sizing": {
|
|
11
|
+
"fit": "none",
|
|
12
|
+
"preferred": { "width": 260, "height": 220 },
|
|
13
|
+
"min": { "width": 200, "height": 120 },
|
|
14
|
+
"max": { "width": 640, "height": 640 }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
.checklist {
|
|
2
|
+
flex-direction: column;
|
|
3
|
+
gap: var(--space-2);
|
|
4
|
+
padding: var(--space-3);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.title {
|
|
8
|
+
font-size: var(--font-size-title);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.items {
|
|
12
|
+
flex-grow: 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.row {
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: var(--space-2);
|
|
18
|
+
padding: var(--space-1) 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.text {
|
|
22
|
+
flex-grow: 1;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.done {
|
|
26
|
+
color: var(--color-text-muted);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.remove {
|
|
30
|
+
width: var(--icon-button-size);
|
|
31
|
+
height: var(--icon-button-size);
|
|
32
|
+
border-radius: var(--radius-sm);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.remove:hover {
|
|
36
|
+
background: var(--color-surface-hover);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.summary {
|
|
40
|
+
font-size: var(--font-size-caption);
|
|
41
|
+
color: var(--color-text-secondary);
|
|
42
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scenarioVersion": 1,
|
|
3
|
+
"name": "example",
|
|
4
|
+
"description": "The checklist in English, then in French with the light theme. `overcrow-widget test` plays it and compares the images with tests/reference/example/; `--update` records them again (https://overcrow.playervox.com/docs/en/testing/).",
|
|
5
|
+
"steps": [
|
|
6
|
+
{ "expect": { "state": "running", "text": ["Today", "2 left"], "image": "initial" } },
|
|
7
|
+
{ "host": { "locale": "fr", "theme": "light" } },
|
|
8
|
+
{ "expect": { "image": "french-light", "fault": "none" } }
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- A checklist: <for> repeats a row per item, keyed by its ID; handlers
|
|
2
|
+
that take arguments are written as calls. -->
|
|
3
|
+
<box class="checklist">
|
|
4
|
+
<text class="title">{t("title")}</text>
|
|
5
|
+
<list class="items" item-height="32">
|
|
6
|
+
<for each={state.items} as="item" key={item.id}>
|
|
7
|
+
<box class="row">
|
|
8
|
+
<checkbox label={item.text} checked={item.done} on:change={setDone(item.id, event.value)}/>
|
|
9
|
+
<text class={item.done ? "text done" : "text"}>{item.text}</text>
|
|
10
|
+
<button class="remove" label={t("remove")} on:activate={remove(item.id)}>
|
|
11
|
+
<icon name="x"/>
|
|
12
|
+
</button>
|
|
13
|
+
</box>
|
|
14
|
+
</for>
|
|
15
|
+
</list>
|
|
16
|
+
<text class="summary">{t("remaining", { count: remaining(state.items) })}</text>
|
|
17
|
+
</box>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) the authors of {{name}}
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{package}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"check": "overcrow-widget check",
|
|
8
|
+
"package": "overcrow-widget package"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@overcrow/sdk": "{{sdk}}",
|
|
12
|
+
"typescript": "6.0.3"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2023",
|
|
4
|
+
"lib": ["ES2023"],
|
|
5
|
+
"types": [],
|
|
6
|
+
"module": "ES2022",
|
|
7
|
+
"moduleResolution": "bundler",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"noEmit": true,
|
|
10
|
+
"isolatedModules": true,
|
|
11
|
+
"verbatimModuleSyntax": true,
|
|
12
|
+
"noUncheckedIndexedAccess": true,
|
|
13
|
+
"exactOptionalPropertyTypes": true
|
|
14
|
+
},
|
|
15
|
+
"include": ["logic.ts"]
|
|
16
|
+
}
|
package/dist/content.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// The content shipped in the package (dist/content/, written by
|
|
2
|
+
// scripts/build.mjs): documentation pages, templates, reference widgets and
|
|
3
|
+
// reference tables. Only files named by the index can be read, so no
|
|
4
|
+
// request can reach another file.
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
const base = new URL("./content/", import.meta.url);
|
|
7
|
+
const cache = new Map();
|
|
8
|
+
function load(path, parse) {
|
|
9
|
+
if (!cache.has(path))
|
|
10
|
+
cache.set(path, parse(readFileSync(new URL(path, base), "utf8")));
|
|
11
|
+
return cache.get(path);
|
|
12
|
+
}
|
|
13
|
+
export function index() {
|
|
14
|
+
return load("index.json", JSON.parse);
|
|
15
|
+
}
|
|
16
|
+
export function docPages() {
|
|
17
|
+
return index().docs.pages;
|
|
18
|
+
}
|
|
19
|
+
/** The Markdown of a page, or undefined for an unknown slug or locale. */
|
|
20
|
+
export function docMarkdown(slug, locale) {
|
|
21
|
+
const page = docPages().find((candidate) => candidate.slug === slug);
|
|
22
|
+
if (!page)
|
|
23
|
+
return undefined;
|
|
24
|
+
return load(`docs/${locale}/${page.file}`, (text) => text);
|
|
25
|
+
}
|
|
26
|
+
export function projects(kind) {
|
|
27
|
+
return index().projects.filter((project) => kind === undefined || project.kind === kind);
|
|
28
|
+
}
|
|
29
|
+
/** A text file of an embedded project, or undefined when the index does not list it. */
|
|
30
|
+
export function projectFile(kind, name, file) {
|
|
31
|
+
const project = projects(kind).find((candidate) => candidate.name === name);
|
|
32
|
+
if (!project?.files.includes(file))
|
|
33
|
+
return undefined;
|
|
34
|
+
return load(`${kind}/${name}/${file}`, (text) => text);
|
|
35
|
+
}
|
|
36
|
+
export function permissionsTable() {
|
|
37
|
+
return load("reference/permissions.json", JSON.parse);
|
|
38
|
+
}
|
|
39
|
+
export function errorsTable() {
|
|
40
|
+
return load("reference/errors.json", JSON.parse);
|
|
41
|
+
}
|
|
42
|
+
export function limits() {
|
|
43
|
+
return load("reference/limits.json", JSON.parse);
|
|
44
|
+
}
|
|
45
|
+
/** A limit's value by its SDK name; throws if the SDK no longer has it. */
|
|
46
|
+
export function limit(name) {
|
|
47
|
+
const found = limits().find((candidate) => candidate.name === name);
|
|
48
|
+
if (!found)
|
|
49
|
+
throw new Error(`unknown limit ${name}`);
|
|
50
|
+
return found.value;
|
|
51
|
+
}
|
|
52
|
+
export function manifestReference() {
|
|
53
|
+
return load("reference/manifest.md", (text) => text);
|
|
54
|
+
}
|
|
55
|
+
/** The website address of a documentation page. */
|
|
56
|
+
export function docUrl(slug, locale = "en", anchor) {
|
|
57
|
+
const path = locale === "en" ? `/docs/en/${slug ? `${slug}/` : ""}` : `/docs/${slug ? `${slug}/` : ""}`;
|
|
58
|
+
return `https://overcrow.playervox.com${path}${anchor ? `#${anchor}` : ""}`;
|
|
59
|
+
}
|
|
60
|
+
/** GitHub-style anchor of a heading, as the website builds it. */
|
|
61
|
+
export function anchorOf(heading) {
|
|
62
|
+
return heading
|
|
63
|
+
.toLowerCase()
|
|
64
|
+
.replace(/`/g, "")
|
|
65
|
+
.replace(/[^\p{L}\p{N}\s_-]/gu, "")
|
|
66
|
+
.trim()
|
|
67
|
+
.replace(/\s+/g, "-");
|
|
68
|
+
}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// The only module that reads the environment: the platform, the cache
|
|
2
|
+
// directory, the proxy, and the small environment handed to child
|
|
3
|
+
// processes. Nothing secret (tokens, keys, npm credentials) is ever passed
|
|
4
|
+
// on.
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import { isAbsolute, join } from "node:path";
|
|
7
|
+
/** The platform of the creator tools, or why there are none for this machine. */
|
|
8
|
+
export function toolsPlatform(platform = process.platform, arch = process.arch) {
|
|
9
|
+
if (arch === "x64" && platform === "linux")
|
|
10
|
+
return { platform: "linux-x86_64" };
|
|
11
|
+
if (arch === "x64" && platform === "win32")
|
|
12
|
+
return { platform: "windows-x86_64" };
|
|
13
|
+
const system = platform === "darwin"
|
|
14
|
+
? "macOS"
|
|
15
|
+
: platform === "win32"
|
|
16
|
+
? "Windows"
|
|
17
|
+
: platform === "linux"
|
|
18
|
+
? "Linux"
|
|
19
|
+
: platform;
|
|
20
|
+
return {
|
|
21
|
+
unsupported: `The OverCrow creator tools run on Windows x64 and Linux x86-64; this computer is ${system} ${arch}. You can still read the documentation and audit a widget here; checking, testing and packaging need a Windows or Linux x64 computer.`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Reads one variable; on Windows the names are case-insensitive already. */
|
|
25
|
+
function variable(name) {
|
|
26
|
+
const value = process.env[name];
|
|
27
|
+
return value === undefined || value === "" ? undefined : value;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The directory where the creator tools are kept:
|
|
31
|
+
* `$XDG_CACHE_HOME/overcrow-mcp` (absolute only) or `~/.cache/overcrow-mcp`,
|
|
32
|
+
* and `%LOCALAPPDATA%\overcrow-mcp` on Windows.
|
|
33
|
+
*/
|
|
34
|
+
export function cacheRoot(platform = process.platform) {
|
|
35
|
+
if (platform === "win32") {
|
|
36
|
+
const local = variable("LOCALAPPDATA");
|
|
37
|
+
return local && isAbsolute(local) ? join(local, "overcrow-mcp") : undefined;
|
|
38
|
+
}
|
|
39
|
+
const xdg = variable("XDG_CACHE_HOME");
|
|
40
|
+
if (xdg && isAbsolute(xdg))
|
|
41
|
+
return join(xdg, "overcrow-mcp");
|
|
42
|
+
const home = variable("HOME") ?? homedir();
|
|
43
|
+
return home && isAbsolute(home) ? join(home, ".cache", "overcrow-mcp") : undefined;
|
|
44
|
+
}
|
|
45
|
+
/** The proxy for HTTPS requests to `host`, if the environment names one. */
|
|
46
|
+
export function httpsProxy(host) {
|
|
47
|
+
const proxy = variable("HTTPS_PROXY") ??
|
|
48
|
+
variable("https_proxy") ??
|
|
49
|
+
variable("ALL_PROXY") ??
|
|
50
|
+
variable("all_proxy");
|
|
51
|
+
if (!proxy)
|
|
52
|
+
return undefined;
|
|
53
|
+
const noProxy = variable("NO_PROXY") ?? variable("no_proxy");
|
|
54
|
+
if (noProxy && bypassesProxy(host, noProxy))
|
|
55
|
+
return undefined;
|
|
56
|
+
return proxy;
|
|
57
|
+
}
|
|
58
|
+
/** `NO_PROXY` rules: `*`, exact names and domain suffixes (`.example.com` or `example.com`). */
|
|
59
|
+
export function bypassesProxy(host, noProxy) {
|
|
60
|
+
const name = host.toLowerCase();
|
|
61
|
+
return noProxy
|
|
62
|
+
.split(/[\s,]+/)
|
|
63
|
+
.map((entry) => entry.trim().toLowerCase().replace(/:\d+$/, ""))
|
|
64
|
+
.filter((entry) => entry.length > 0)
|
|
65
|
+
.some((entry) => {
|
|
66
|
+
if (entry === "*")
|
|
67
|
+
return true;
|
|
68
|
+
const domain = entry.startsWith(".") ? entry.slice(1) : entry;
|
|
69
|
+
return name === domain || name.endsWith(`.${domain}`);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const COMMON = [
|
|
73
|
+
"PATH",
|
|
74
|
+
"HOME",
|
|
75
|
+
"USERPROFILE",
|
|
76
|
+
"TMPDIR",
|
|
77
|
+
"TEMP",
|
|
78
|
+
"TMP",
|
|
79
|
+
"SystemRoot",
|
|
80
|
+
"SYSTEMROOT",
|
|
81
|
+
"windir",
|
|
82
|
+
"SystemDrive",
|
|
83
|
+
"ComSpec",
|
|
84
|
+
"PATHEXT",
|
|
85
|
+
"LOCALAPPDATA",
|
|
86
|
+
"APPDATA",
|
|
87
|
+
"HOMEDRIVE",
|
|
88
|
+
"HOMEPATH",
|
|
89
|
+
"LANG",
|
|
90
|
+
"LC_ALL",
|
|
91
|
+
];
|
|
92
|
+
const NETWORK = [
|
|
93
|
+
"HTTPS_PROXY",
|
|
94
|
+
"https_proxy",
|
|
95
|
+
"HTTP_PROXY",
|
|
96
|
+
"http_proxy",
|
|
97
|
+
"NO_PROXY",
|
|
98
|
+
"no_proxy",
|
|
99
|
+
"NODE_EXTRA_CA_CERTS",
|
|
100
|
+
"npm_config_registry",
|
|
101
|
+
"NPM_CONFIG_REGISTRY",
|
|
102
|
+
];
|
|
103
|
+
/**
|
|
104
|
+
* The environment of a child process: what a program needs to find its
|
|
105
|
+
* files and temporary directory, and, for npm only, the proxy and registry
|
|
106
|
+
* settings. Tokens and other variables of the user's session stay out.
|
|
107
|
+
*/
|
|
108
|
+
export function childEnvironment(options) {
|
|
109
|
+
const names = options.network ? [...COMMON, ...NETWORK] : COMMON;
|
|
110
|
+
const env = {};
|
|
111
|
+
for (const name of names) {
|
|
112
|
+
const value = variable(name);
|
|
113
|
+
if (value !== undefined)
|
|
114
|
+
env[name] = value;
|
|
115
|
+
}
|
|
116
|
+
// The CLI never colors its output; npm would.
|
|
117
|
+
env.NO_COLOR = "1";
|
|
118
|
+
if (options.network) {
|
|
119
|
+
env.npm_config_update_notifier = "false";
|
|
120
|
+
env.npm_config_fund = "false";
|
|
121
|
+
env.npm_config_audit = "false";
|
|
122
|
+
}
|
|
123
|
+
return env;
|
|
124
|
+
}
|
|
125
|
+
/** Folders shown by name rather than by path in results. */
|
|
126
|
+
export function namedLocations() {
|
|
127
|
+
const out = [];
|
|
128
|
+
const xdg = variable("XDG_CACHE_HOME");
|
|
129
|
+
if (xdg && isAbsolute(xdg))
|
|
130
|
+
out.push({ path: xdg, label: "$XDG_CACHE_HOME" });
|
|
131
|
+
const local = variable("LOCALAPPDATA");
|
|
132
|
+
if (local && isAbsolute(local))
|
|
133
|
+
out.push({ path: local, label: "%LOCALAPPDATA%" });
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
/** The user's home directory, for redaction and the root checks. */
|
|
137
|
+
export function homeDirectory() {
|
|
138
|
+
return variable("HOME") ?? variable("USERPROFILE") ?? homedir();
|
|
139
|
+
}
|
|
140
|
+
/** Windows directories that are never a project. */
|
|
141
|
+
export function windowsSystemDirectories() {
|
|
142
|
+
return [
|
|
143
|
+
"SystemRoot",
|
|
144
|
+
"ProgramFiles",
|
|
145
|
+
"ProgramFiles(x86)",
|
|
146
|
+
"ProgramW6432",
|
|
147
|
+
"ProgramData",
|
|
148
|
+
"windir",
|
|
149
|
+
]
|
|
150
|
+
.map(variable)
|
|
151
|
+
.filter((value) => value !== undefined);
|
|
152
|
+
}
|
|
153
|
+
/** `%SystemRoot%`, for the full path of Windows' own programs. */
|
|
154
|
+
export function windowsSystemRoot() {
|
|
155
|
+
return variable("SystemRoot") ?? variable("windir") ?? "C:\\Windows";
|
|
156
|
+
}
|