@cloudhal/cli 0.0.0-stage → 0.1.1
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 +202 -0
- package/README.md +191 -2
- package/dist/assets/skills/comment-triage/SKILL.md +34 -0
- package/dist/assets/skills/comment-triage/evals/nightly-queue.json +13 -0
- package/dist/assets/skills/publish-article/SKILL.md +44 -0
- package/dist/assets/skills/publish-article/evals/file-under-category.json +10 -0
- package/dist/assets/skills/publish-article/evals/publish-draft.json +8 -0
- package/dist/assets/skills/publish-article/evals/schedule-draft.json +10 -0
- package/dist/assets/skills/publish-article/references/editorial-checklist.md +9 -0
- package/dist/assets/skills/rollback/SKILL.md +23 -0
- package/dist/assets/skills/rollback/evals/revert-last.json +4 -0
- package/dist/assets/skills/safe-edit/SKILL.md +29 -0
- package/dist/assets/skills/safe-edit/evals/retitle.json +4 -0
- package/dist/assets/skills/safe-edit/references/retagging.md +8 -0
- package/dist/assets/skills/site-bootstrap/SKILL.md +29 -0
- package/dist/assets/skills/site-bootstrap/evals/empty-site.json +9 -0
- package/dist/assets/skills/site-bootstrap/references/content-guidelines.md +6 -0
- package/dist/assets/skills/site-design/SKILL.md +31 -0
- package/dist/assets/skills/site-design/evals/landing-page.json +12 -0
- package/dist/assets/skills/site-design/references/checklist.md +10 -0
- package/dist/assets/skills/site-design/references/guidance.md +13 -0
- package/dist/assets/skills/site-design/references/page-recipes.md +34 -0
- package/dist/assets/skills/site-design/references/tokens.md +40 -0
- package/dist/assets/skills/stale-review/SKILL.md +40 -0
- package/dist/assets/skills/stale-review/evals/weekly-review.json +13 -0
- package/dist/assets/starters/blog/.yarnrc.yml +2 -0
- package/dist/assets/starters/blog/README.md +46 -0
- package/dist/assets/starters/blog/_gitignore +5 -0
- package/dist/assets/starters/blog/astro.config.mjs +40 -0
- package/dist/assets/starters/blog/package.json +35 -0
- package/dist/assets/starters/blog/public/favicon.ico +0 -0
- package/dist/assets/starters/blog/public/favicon.svg +1 -0
- package/dist/assets/starters/blog/public/fonts/fraunces-OFL.txt +93 -0
- package/dist/assets/starters/blog/public/fonts/fraunces-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/fraunces-latin-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/inter-OFL.txt +93 -0
- package/dist/assets/starters/blog/public/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/inter-latin-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/jetbrains-mono-OFL.txt +93 -0
- package/dist/assets/starters/blog/public/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/source-sans-3-OFL.txt +93 -0
- package/dist/assets/starters/blog/public/fonts/source-sans-3-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/source-sans-3-latin-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/source-serif-4-OFL.txt +93 -0
- package/dist/assets/starters/blog/public/fonts/source-serif-4-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/source-serif-4-latin-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/space-grotesk-OFL.txt +93 -0
- package/dist/assets/starters/blog/public/fonts/space-grotesk-latin-ext-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/public/fonts/space-grotesk-latin-wght-normal.woff2 +0 -0
- package/dist/assets/starters/blog/src/DESIGN.md +42 -0
- package/dist/assets/starters/blog/src/blocks.ts +45 -0
- package/dist/assets/starters/blog/src/components/Archive.astro +108 -0
- package/dist/assets/starters/blog/src/components/Article.astro +105 -0
- package/dist/assets/starters/blog/src/components/Breadcrumbs.astro +25 -0
- package/dist/assets/starters/blog/src/components/EntryList.astro +54 -0
- package/dist/assets/starters/blog/src/components/LatestPosts.astro +30 -0
- package/dist/assets/starters/blog/src/components/MenuPanel.astro +46 -0
- package/dist/assets/starters/blog/src/components/NavLink.astro +27 -0
- package/dist/assets/starters/blog/src/components/NavMenu.astro +95 -0
- package/dist/assets/starters/blog/src/components/NotFound.astro +27 -0
- package/dist/assets/starters/blog/src/components/PostTerms.astro +33 -0
- package/dist/assets/starters/blog/src/components/RelatedPosts.astro +20 -0
- package/dist/assets/starters/blog/src/components/Search.astro +57 -0
- package/dist/assets/starters/blog/src/components/SearchDialog.astro +46 -0
- package/dist/assets/starters/blog/src/components/blocks/Testimonial.astro +18 -0
- package/dist/assets/starters/blog/src/env.d.ts +5 -0
- package/dist/assets/starters/blog/src/fonts.ts +15 -0
- package/dist/assets/starters/blog/src/icons.ts +12 -0
- package/dist/assets/starters/blog/src/layouts/Base.astro +426 -0
- package/dist/assets/starters/blog/src/middleware.ts +2 -0
- package/dist/assets/starters/blog/src/pages/[...path]/llms.txt.ts +40 -0
- package/dist/assets/starters/blog/src/pages/[...path]/rss.xml.ts +93 -0
- package/dist/assets/starters/blog/src/pages/[...path]/search.json.ts +23 -0
- package/dist/assets/starters/blog/src/pages/[...path].astro +449 -0
- package/dist/assets/starters/blog/src/pages/llms.txt.ts +21 -0
- package/dist/assets/starters/blog/src/pages/robots.txt.ts +13 -0
- package/dist/assets/starters/blog/src/pages/rss.xml.ts +25 -0
- package/dist/assets/starters/blog/src/pages/search.json.ts +21 -0
- package/dist/assets/starters/blog/src/pages/sitemap.xml.ts +23 -0
- package/dist/assets/starters/blog/src/settings.ts +312 -0
- package/dist/assets/starters/blog/src/strings.ts +269 -0
- package/dist/assets/starters/blog/src/styles/features/ambient.css +185 -0
- package/dist/assets/starters/blog/src/styles/features/article.css +215 -0
- package/dist/assets/starters/blog/src/styles/features/blocks.css +93 -0
- package/dist/assets/starters/blog/src/styles/features/carousel.css +266 -0
- package/dist/assets/starters/blog/src/styles/features/chrome-menus.css +264 -0
- package/dist/assets/starters/blog/src/styles/features/chrome.css +193 -0
- package/dist/assets/starters/blog/src/styles/features/comments.css +75 -0
- package/dist/assets/starters/blog/src/styles/features/icons.css +70 -0
- package/dist/assets/starters/blog/src/styles/features/languages.css +34 -0
- package/dist/assets/starters/blog/src/styles/features/live-surfaces.css +235 -0
- package/dist/assets/starters/blog/src/styles/features/motion-effects.css +217 -0
- package/dist/assets/starters/blog/src/styles/features/motion-scroll.css +309 -0
- package/dist/assets/starters/blog/src/styles/features/motion.css +254 -0
- package/dist/assets/starters/blog/src/styles/features/overlays.css +324 -0
- package/dist/assets/starters/blog/src/styles/features/prose.css +140 -0
- package/dist/assets/starters/blog/src/styles/features/search-dialog.css +144 -0
- package/dist/assets/starters/blog/src/styles/features/search.css +59 -0
- package/dist/assets/starters/blog/src/styles/features/surface-media.css +123 -0
- package/dist/assets/starters/blog/src/styles/features/surfaces.css +309 -0
- package/dist/assets/starters/blog/src/styles/features/tokens.css +100 -0
- package/dist/assets/starters/blog/src/styles/fonts.css +113 -0
- package/dist/assets/starters/blog/src/styles/global.css +30 -0
- package/dist/assets/starters/blog/src/theme.ts +48 -0
- package/dist/assets/starters/blog/tsconfig.json +5 -0
- package/dist/assets/studio/.assetsignore +2 -0
- package/dist/assets/studio/_headers +14 -0
- package/dist/assets/studio/assets/AccountPage-Dzr5d8sk.js +2 -0
- package/dist/assets/studio/assets/ActivityPage-C0HlgSI5.js +2 -0
- package/dist/assets/studio/assets/AgentModes-B81a2nUo.js +2 -0
- package/dist/assets/studio/assets/AgentsPage-BzCOyX4g.js +2 -0
- package/dist/assets/studio/assets/AnalyticsPage-7yb7DBOH.js +3 -0
- package/dist/assets/studio/assets/ApprovalsPage-_tqc02mk.js +3 -0
- package/dist/assets/studio/assets/Archive.es-C0uhxndN.js +2 -0
- package/dist/assets/studio/assets/ArrowClockwise.es-BA0pzb0Y.js +2 -0
- package/dist/assets/studio/assets/ArrowCounterClockwise.es-Bn2jikgp.js +2 -0
- package/dist/assets/studio/assets/ArrowSquareOut.es-BWeH9CSw.js +2 -0
- package/dist/assets/studio/assets/ArrowUp.es-Bh0pVk-S.js +2 -0
- package/dist/assets/studio/assets/ArrowsMerge.es-gfKOrxGd.js +2 -0
- package/dist/assets/studio/assets/ArticleEditorPage-Bcb81dXC.js +2 -0
- package/dist/assets/studio/assets/ArticlesPage-152INxny.js +2 -0
- package/dist/assets/studio/assets/AssetPage-ddWJt0hs.js +2 -0
- package/dist/assets/studio/assets/Audit-BCzf5vBq.js +2 -0
- package/dist/assets/studio/assets/AuditBadges-C4sNtzf9.js +2 -0
- package/dist/assets/studio/assets/AuthLayout-Cidy_2Lu.js +2 -0
- package/dist/assets/studio/assets/AutocompleteItem-drxau0wm3735nihq-C-iAptWL.js +2 -0
- package/dist/assets/studio/assets/AutomationsPage-Dc6g5v_v.js +2 -0
- package/dist/assets/studio/assets/BlockPropsForm-fj5gMAa0.js +2 -0
- package/dist/assets/studio/assets/BlockSection-CnUXl5Sg.js +2 -0
- package/dist/assets/studio/assets/BodyChanges-M0zcsivC.js +4 -0
- package/dist/assets/studio/assets/BookOpenText.es-BfXzf_Vn.js +2 -0
- package/dist/assets/studio/assets/BuildPage-C1Nwy4dt.js +2 -0
- package/dist/assets/studio/assets/CSPContext-ctyrgg64girv38ls-2UvfJ5m0.js +2 -0
- package/dist/assets/studio/assets/CalendarCheck.es-DWymuVqi.js +2 -0
- package/dist/assets/studio/assets/CalendarPlus.es-YGFiosIm.js +2 -0
- package/dist/assets/studio/assets/CaretLeft.es-BUnHcaxq.js +2 -0
- package/dist/assets/studio/assets/CaretRight.es-D_coqYai.js +2 -0
- package/dist/assets/studio/assets/CaretUp.es-DBg3pdpL.js +2 -0
- package/dist/assets/studio/assets/CheckCircle.es-XJ9Tr9Tu.js +2 -0
- package/dist/assets/studio/assets/ClockClockwise.es-1egHMnBk.js +2 -0
- package/dist/assets/studio/assets/ClockCountdown.es-BR_zz6vi.js +2 -0
- package/dist/assets/studio/assets/Columns-DGrju-Ia.js +2 -0
- package/dist/assets/studio/assets/ComboboxEmpty-o0q20j2l2syar9kx-Bf-42bzQ.js +2 -0
- package/dist/assets/studio/assets/CommandMenu-CH5CJ8Kg.js +2 -0
- package/dist/assets/studio/assets/CommentThreadControls-D04pICZT.js +2 -0
- package/dist/assets/studio/assets/CommentThreadPage-BP0N9T4z.js +2 -0
- package/dist/assets/studio/assets/CommenterPage-CeFR4pn4.js +2 -0
- package/dist/assets/studio/assets/Comments-CnfKPS2z.js +2 -0
- package/dist/assets/studio/assets/CommentsPage-BlP_knlf.js +2 -0
- package/dist/assets/studio/assets/CompositeItem-hzuk5x3e5zsfgnyj-XaSr50DG.js +2 -0
- package/dist/assets/studio/assets/CompositeRoot-g72lchaerolf5dc9-B2BokDIY.js +2 -0
- package/dist/assets/studio/assets/ConfirmDialog-DEHkMoTj.js +2 -0
- package/dist/assets/studio/assets/Crumbs-Ci_RdgHU.js +2 -0
- package/dist/assets/studio/assets/DeviceMobile.es-B4PwJ85Q.js +2 -0
- package/dist/assets/studio/assets/DeviceTablet.es-BpxIF5z6.js +2 -0
- package/dist/assets/studio/assets/DialogRoot-hl3genvzl9h8ridm-BRUDLjaw.js +2 -0
- package/dist/assets/studio/assets/DialogTrigger-g44cuem7n4wez533-B5K8lQD3.js +2 -0
- package/dist/assets/studio/assets/DirectionalIcon-BKKMj3KT.js +2 -0
- package/dist/assets/studio/assets/DotsThree.es-C-pT5SgE.js +2 -0
- package/dist/assets/studio/assets/DownloadSimple.es-Cq4-UK-k.js +2 -0
- package/dist/assets/studio/assets/EditorLayout-DVegYcZT.js +2 -0
- package/dist/assets/studio/assets/EditorPreview-DsZG4-oJ.js +2 -0
- package/dist/assets/studio/assets/Elevation-Ca3Q8sk-.js +2 -0
- package/dist/assets/studio/assets/ElevationRequest-B0_Q_gVT.js +2 -0
- package/dist/assets/studio/assets/EnvelopeSimple.es-g-hlqV74.js +2 -0
- package/dist/assets/studio/assets/Eye.es-DqovdtPt.js +2 -0
- package/dist/assets/studio/assets/EyeSlash.es-YoqigHIr.js +2 -0
- package/dist/assets/studio/assets/File.es-VYp_u8mn.js +2 -0
- package/dist/assets/studio/assets/FolderSimple.es-CbGWmBJc.js +2 -0
- package/dist/assets/studio/assets/FolderSimplePlus.es-C9Fl6ewY.js +2 -0
- package/dist/assets/studio/assets/ForgotPasswordPage-LNtBXfC8.js +2 -0
- package/dist/assets/studio/assets/Funnel.es-L1Sdi8-A.js +2 -0
- package/dist/assets/studio/assets/Gating-BdY3KxOv.js +2 -0
- package/dist/assets/studio/assets/Gauge.es-D0Pz39Z0.js +2 -0
- package/dist/assets/studio/assets/GitDiff.es-fB1csyEF.js +2 -0
- package/dist/assets/studio/assets/GlobeHemisphereWest.es-C34XiLRk.js +2 -0
- package/dist/assets/studio/assets/GovernanceDialog-DR0m4Bhp.js +2 -0
- package/dist/assets/studio/assets/HandPalm.es-CB5OlkOg.js +2 -0
- package/dist/assets/studio/assets/Heartbeat.es-DZziz772.js +2 -0
- package/dist/assets/studio/assets/Hourglass.es-aqS22q0y.js +2 -0
- package/dist/assets/studio/assets/House.es-BQyZgbwu.js +2 -0
- package/dist/assets/studio/assets/IconBase.es-BZDpYMnj.js +2 -0
- package/dist/assets/studio/assets/Image.es-BcOUS77O.js +2 -0
- package/dist/assets/studio/assets/InsetPanel-CHSg953_.js +2 -0
- package/dist/assets/studio/assets/InvitePage-CZ-4Clg6.js +2 -0
- package/dist/assets/studio/assets/Key.es-DE551dL3.js +2 -0
- package/dist/assets/studio/assets/Lightning.es-D0IF-5OW.js +2 -0
- package/dist/assets/studio/assets/LinkBreak.es-BvGThatb.js +2 -0
- package/dist/assets/studio/assets/LinkSimple.es-BB_3GfFO.js +2 -0
- package/dist/assets/studio/assets/ListBullets.es-DzSyoNA1.js +2 -0
- package/dist/assets/studio/assets/ListToolbar-CE70usqf.js +2 -0
- package/dist/assets/studio/assets/LockSimple.es-D3HQqnoN.js +2 -0
- package/dist/assets/studio/assets/LoginPage-BfUjD7n3.js +2 -0
- package/dist/assets/studio/assets/MediaPage-D7h4RBbB.js +2 -0
- package/dist/assets/studio/assets/MediaPicker-DlJLkaGR.js +2 -0
- package/dist/assets/studio/assets/MediaUpload-BpTyBTHG.js +2 -0
- package/dist/assets/studio/assets/MembersPage-BNu1FOBL.js +2 -0
- package/dist/assets/studio/assets/Menus-ChmyHrPc.js +2 -0
- package/dist/assets/studio/assets/Monitor.es-CeaPWdET.js +2 -0
- package/dist/assets/studio/assets/NavigationPage-C10U827y.js +2 -0
- package/dist/assets/studio/assets/NewSiteDialog-D7SUMMY3.js +2 -0
- package/dist/assets/studio/assets/PageEditorPage-DBJUAqjk.js +5 -0
- package/dist/assets/studio/assets/PagesPage-Bwm8b58m.js +2 -0
- package/dist/assets/studio/assets/PasswordField-Cn0g88_l.js +2 -0
- package/dist/assets/studio/assets/PencilSimple.es-CsZ-k9wK.js +2 -0
- package/dist/assets/studio/assets/Plus.es-XNm1OB5Q.js +2 -0
- package/dist/assets/studio/assets/PreviewPanel-ChFoJD1H.js +2 -0
- package/dist/assets/studio/assets/Prohibit.es-CAvPLn3v.js +2 -0
- package/dist/assets/studio/assets/ProhibitInset.es-DsnL02EX.js +2 -0
- package/dist/assets/studio/assets/ProjectPage-e5BSkkda.js +2 -0
- package/dist/assets/studio/assets/Question.es-BqQtQle2.js +2 -0
- package/dist/assets/studio/assets/Readers-CvhU7wCy.js +3 -0
- package/dist/assets/studio/assets/RedirectDialog-DCNKLV43.js +2 -0
- package/dist/assets/studio/assets/RedirectsPage-CR1Di-T6.js +2 -0
- package/dist/assets/studio/assets/ReleaseApproval-gkciKrWx.js +2 -0
- package/dist/assets/studio/assets/ReleasePage-BRa167d9.js +2 -0
- package/dist/assets/studio/assets/ReleaseParts-BEMf510p.js +2 -0
- package/dist/assets/studio/assets/ResetPasswordPage-DLpZlh7i.js +2 -0
- package/dist/assets/studio/assets/RowMenu-BTHdea9k.js +2 -0
- package/dist/assets/studio/assets/ScheduleCard-BQWUIwPX.js +2 -0
- package/dist/assets/studio/assets/ScheduleDialog-B-QQ_Z3F.js +2 -0
- package/dist/assets/studio/assets/ScheduleHistoryPage-wv3pKfaZ.js +2 -0
- package/dist/assets/studio/assets/ScheduleStatusBadge-DHGmEyDv.js +2 -0
- package/dist/assets/studio/assets/SchedulerStalled-DUmZxbV4.js +2 -0
- package/dist/assets/studio/assets/Schedules-R6HfROIM.js +3 -0
- package/dist/assets/studio/assets/SchedulesPage-CIbzmMag.js +2 -0
- package/dist/assets/studio/assets/ScopeBadge-DM2PO5Xk.js +2 -0
- package/dist/assets/studio/assets/SectionCard-SzT8t6oM.js +2 -0
- package/dist/assets/studio/assets/Seo-CYyFHl3G.js +2 -0
- package/dist/assets/studio/assets/SeoPreview-tarmyT2Y.js +2 -0
- package/dist/assets/studio/assets/Settings-C407Vxml.js +2 -0
- package/dist/assets/studio/assets/ShieldCheck.es-BOXTHH7h.js +2 -0
- package/dist/assets/studio/assets/ShieldWarning.es-DPxoDMpT.js +2 -0
- package/dist/assets/studio/assets/SignIn.es-jAzHZG6b.js +2 -0
- package/dist/assets/studio/assets/SiteAccessField-D34vIaAo.js +2 -0
- package/dist/assets/studio/assets/SiteOverviewPage-Bm0-f1bp.js +4 -0
- package/dist/assets/studio/assets/SiteSettingsPage-tq4SzyMQ.js +3 -0
- package/dist/assets/studio/assets/SitesPage-B2QS2zaq.js +4 -0
- package/dist/assets/studio/assets/SkillsPage-BtFk0bBw.js +3 -0
- package/dist/assets/studio/assets/SlidersHorizontal.es-Bg-14CTG.js +2 -0
- package/dist/assets/studio/assets/SnapshotsPage-cltqpJLv.js +2 -0
- package/dist/assets/studio/assets/SourceEditor-UA14mu6Q.js +16 -0
- package/dist/assets/studio/assets/Sparkle.es-OfyfGCDe.js +2 -0
- package/dist/assets/studio/assets/Star.es-DhrrAurR.js +2 -0
- package/dist/assets/studio/assets/StatTile-DyU32i8V.js +2 -0
- package/dist/assets/studio/assets/Status-BgB2wP8j.js +2 -0
- package/dist/assets/studio/assets/StatusActions-tY-DY4Wa.js +3 -0
- package/dist/assets/studio/assets/StopCircle.es-a6tRK2fc.js +2 -0
- package/dist/assets/studio/assets/Table.es-6S52tmK7.js +2 -0
- package/dist/assets/studio/assets/TableSkeleton-CbqPrk-p.js +2 -0
- package/dist/assets/studio/assets/TagsMigration-BggsWH7A.js +2 -0
- package/dist/assets/studio/assets/Taxonomy-CeQUBEeZ.js +2 -0
- package/dist/assets/studio/assets/TaxonomyPage-hm0h5Ug5.js +2 -0
- package/dist/assets/studio/assets/TermEditorPage-tRUgbC0f.js +2 -0
- package/dist/assets/studio/assets/TermPickers-cZIwRG5t.js +2 -0
- package/dist/assets/studio/assets/TerminalWindow.es-DRFBT_Ie.js +2 -0
- package/dist/assets/studio/assets/TextAa.es-CuNv62rI.js +2 -0
- package/dist/assets/studio/assets/Toast-BHyBhGXI.js +2 -0
- package/dist/assets/studio/assets/ToolbarRootContext-eqk40r8uh4h6r211-DBIMpkd1.js +2 -0
- package/dist/assets/studio/assets/TranslationList-Cc4K8uy_.js +2 -0
- package/dist/assets/studio/assets/TranslationsPage-MFJsWMgX.js +2 -0
- package/dist/assets/studio/assets/Trash.es-CxKLVMOQ.js +2 -0
- package/dist/assets/studio/assets/User.es-BLqDj7XT.js +2 -0
- package/dist/assets/studio/assets/UserCircle.es-D4ZFhshn.js +2 -0
- package/dist/assets/studio/assets/Warning.es-LZXqwHRF.js +2 -0
- package/dist/assets/studio/assets/XCircle.es-3fJHkmwA.js +2 -0
- package/dist/assets/studio/assets/account-BXWuYNDB.js +2 -0
- package/dist/assets/studio/assets/activity-C0we9-m8.js +2 -0
- package/dist/assets/studio/assets/agents-BBsojpg9.js +4 -0
- package/dist/assets/studio/assets/aiSettings.ar-BhZdR6qG.js +2 -0
- package/dist/assets/studio/assets/aiSettings.de-CXaCGWio.js +2 -0
- package/dist/assets/studio/assets/aiSettings.en-C8dj9xkg.js +2 -0
- package/dist/assets/studio/assets/aiSettings.es-avCBqU5-.js +2 -0
- package/dist/assets/studio/assets/aiSettings.fa-CKFnDB0Q.js +2 -0
- package/dist/assets/studio/assets/aiSettings.fr-35_A52Su.js +2 -0
- package/dist/assets/studio/assets/aiSettings.he-CbsdxPL1.js +2 -0
- package/dist/assets/studio/assets/aiSettings.hi-y4QpRZgC.js +2 -0
- package/dist/assets/studio/assets/aiSettings.id-CO4I-Nr1.js +2 -0
- package/dist/assets/studio/assets/aiSettings.it-B-OytWUY.js +2 -0
- package/dist/assets/studio/assets/aiSettings.ja-ClLGRpLX.js +2 -0
- package/dist/assets/studio/assets/aiSettings.ko-CedNf6wA.js +2 -0
- package/dist/assets/studio/assets/aiSettings.nl-DuEVpMb_.js +2 -0
- package/dist/assets/studio/assets/aiSettings.pl-wXUoviqN.js +2 -0
- package/dist/assets/studio/assets/aiSettings.pt-BR-Dm3HTskY.js +2 -0
- package/dist/assets/studio/assets/aiSettings.ru-DOWh4XHX.js +2 -0
- package/dist/assets/studio/assets/aiSettings.tr-xC2kyYK8.js +2 -0
- package/dist/assets/studio/assets/aiSettings.uk-DrE0ioQJ.js +2 -0
- package/dist/assets/studio/assets/aiSettings.zh-Hans-CBZ7ePsr.js +2 -0
- package/dist/assets/studio/assets/analytics-range-BqKm9TTo.js +2 -0
- package/dist/assets/studio/assets/analytics.ar-DFKPNZOf.js +2 -0
- package/dist/assets/studio/assets/analytics.de-CE2_NGRB.js +2 -0
- package/dist/assets/studio/assets/analytics.en-BjRe9VE9.js +2 -0
- package/dist/assets/studio/assets/analytics.es-DmWAl1lg.js +2 -0
- package/dist/assets/studio/assets/analytics.fa-YJ3Xk-rc.js +2 -0
- package/dist/assets/studio/assets/analytics.fr-BDyCguOG.js +2 -0
- package/dist/assets/studio/assets/analytics.he-BJ5kfLvV.js +2 -0
- package/dist/assets/studio/assets/analytics.hi-Cc9ZxzNg.js +2 -0
- package/dist/assets/studio/assets/analytics.id-CyUlDO82.js +2 -0
- package/dist/assets/studio/assets/analytics.it-NlLzAH3s.js +2 -0
- package/dist/assets/studio/assets/analytics.ja-DWrGTLXw.js +2 -0
- package/dist/assets/studio/assets/analytics.ko-BtZwKyZk.js +2 -0
- package/dist/assets/studio/assets/analytics.nl-CAny5E3q.js +2 -0
- package/dist/assets/studio/assets/analytics.pl-CpcS7l9b.js +2 -0
- package/dist/assets/studio/assets/analytics.pt-BR-BAK_LNqi.js +2 -0
- package/dist/assets/studio/assets/analytics.ru-BhvbWlC_.js +2 -0
- package/dist/assets/studio/assets/analytics.tr-aCP2FxF6.js +2 -0
- package/dist/assets/studio/assets/analytics.uk-CAGnu8AX.js +2 -0
- package/dist/assets/studio/assets/analytics.zh-Hans-NF-Le9KQ.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.ar-C5r58XUn.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.de-DVXtSeKl.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.en-Dn_QYKbo.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.es-BdkgtxLM.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.fa-CPuBleHO.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.fr-BSq7kZAb.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.he-Bt4A9H0D.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.hi-ii2QSWPw.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.id-CIZyEXYS.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.it-Sevpe-t4.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.ja-C_52hTsO.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.ko-Bpr2STd6.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.nl-DYfP6Uld.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.pl-BuJZVVIi.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.pt-BR-C4BNIRKw.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.ru-CiMbwjeg.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.tr-Csuqe5q9.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.uk-DVRqhoqA.js +2 -0
- package/dist/assets/studio/assets/analyticsSettings.zh-Hans-Y3Ei4xGe.js +2 -0
- package/dist/assets/studio/assets/api-Sbz4Rbu7.js +4 -0
- package/dist/assets/studio/assets/api-errors-FBnZYqCy.js +2 -0
- package/dist/assets/studio/assets/appearance.ar-CjHmVq1_.js +2 -0
- package/dist/assets/studio/assets/appearance.de-RD44SQgd.js +2 -0
- package/dist/assets/studio/assets/appearance.en-mFJuOtIH.js +2 -0
- package/dist/assets/studio/assets/appearance.es-Dn1vcVTZ.js +2 -0
- package/dist/assets/studio/assets/appearance.fa-DclMXXrQ.js +2 -0
- package/dist/assets/studio/assets/appearance.fr-CRqH6-pt.js +2 -0
- package/dist/assets/studio/assets/appearance.he-COP1zzas.js +2 -0
- package/dist/assets/studio/assets/appearance.hi-CnnlhSEx.js +2 -0
- package/dist/assets/studio/assets/appearance.id-aSp7eOOW.js +2 -0
- package/dist/assets/studio/assets/appearance.it-D4AXypSF.js +2 -0
- package/dist/assets/studio/assets/appearance.ja-BoMHIaWB.js +2 -0
- package/dist/assets/studio/assets/appearance.ko-BqysekcN.js +2 -0
- package/dist/assets/studio/assets/appearance.nl-DkQd7NMN.js +2 -0
- package/dist/assets/studio/assets/appearance.pl-YvYqfbPP.js +2 -0
- package/dist/assets/studio/assets/appearance.pt-BR-8R80D9mc.js +2 -0
- package/dist/assets/studio/assets/appearance.ru-CLiGYIyF.js +2 -0
- package/dist/assets/studio/assets/appearance.tr-T9TtsGiz.js +2 -0
- package/dist/assets/studio/assets/appearance.uk-C-AHWC43.js +2 -0
- package/dist/assets/studio/assets/appearance.zh-Hans-0HyzAidT.js +2 -0
- package/dist/assets/studio/assets/approvals-BB74ogKx.js +2 -0
- package/dist/assets/studio/assets/ar-6o5tS7uI.js +6 -0
- package/dist/assets/studio/assets/ar-CS6h3U7d.js +2 -0
- package/dist/assets/studio/assets/areArraysEqual-bcx201k1x9ziizym-DpJhDMgE.js +2 -0
- package/dist/assets/studio/assets/auth-BXDbnIpO.js +4 -0
- package/dist/assets/studio/assets/badge-dq8bx752b9dp7dst-D1xrG37q.js +2 -0
- package/dist/assets/studio/assets/banner-msnmqm7of2lck01x-DRzQHuca.js +2 -0
- package/dist/assets/studio/assets/bash-jpzh6zbf5237424t-bmc95DGl.js +1 -0
- package/dist/assets/studio/assets/blockIcon-DmMm6cQr.js +2 -0
- package/dist/assets/studio/assets/blocks-CvH3xqPj.js +3 -0
- package/dist/assets/studio/assets/body-blocks-D3YZCH_O.js +6 -0
- package/dist/assets/studio/assets/bodyEditor.ar-DIDA9Sn4.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.de-qfipY5HQ.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.en-B8FW4NF8.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.es-t2G9FCJv.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.fa-C4B5tIHm.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.fr-B93u2T8B.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.he-AjBYzDbH.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.hi-BL4B8EIK.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.id-DaiRImPk.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.it-COSRU27e.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.ja-4ELaS2Vi.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.ko-DzXpHAYj.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.nl-7a_XD53a.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.pl-o2L5fJfH.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.pt-BR-CRnn6BFL.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.ru-BS2txhVI.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.tr-DXm3ACCU.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.uk-D32F3Hv3.js +2 -0
- package/dist/assets/studio/assets/bodyEditor.zh-Hans-DzWUdSMX.js +2 -0
- package/dist/assets/studio/assets/build.ar-CvCBBGmP.js +2 -0
- package/dist/assets/studio/assets/build.de-Dh25xQiI.js +2 -0
- package/dist/assets/studio/assets/build.en-Byn4-h2I.js +2 -0
- package/dist/assets/studio/assets/build.es-ClTjZJkv.js +2 -0
- package/dist/assets/studio/assets/build.fa-BKTGFm97.js +2 -0
- package/dist/assets/studio/assets/build.fr-DWmKJ0b2.js +2 -0
- package/dist/assets/studio/assets/build.he-CMkIxK5A.js +2 -0
- package/dist/assets/studio/assets/build.hi-bSlyuwEN.js +2 -0
- package/dist/assets/studio/assets/build.id-DYXKpcM4.js +2 -0
- package/dist/assets/studio/assets/build.it-DshuVK4I.js +2 -0
- package/dist/assets/studio/assets/build.ja-DUQGeTAB.js +2 -0
- package/dist/assets/studio/assets/build.ko-BgOecD0b.js +2 -0
- package/dist/assets/studio/assets/build.nl-CqcFxeNS.js +2 -0
- package/dist/assets/studio/assets/build.pl-DOh2FAZL.js +2 -0
- package/dist/assets/studio/assets/build.pt-BR-DIS1WMA1.js +2 -0
- package/dist/assets/studio/assets/build.ru-CT93GG0h.js +2 -0
- package/dist/assets/studio/assets/build.tr-BJ066yTf.js +2 -0
- package/dist/assets/studio/assets/build.uk-foNFYsBE.js +2 -0
- package/dist/assets/studio/assets/build.zh-Hans-D0aEdiJR.js +2 -0
- package/dist/assets/studio/assets/button-pa1bq9b85hawg41a-BcGpLLER.js +2 -0
- package/dist/assets/studio/assets/calendar-locale-D4aJYygH.js +2 -0
- package/dist/assets/studio/assets/charts-DL9SbRU8.js +39 -0
- package/dist/assets/studio/assets/checkbox-lbo436duy7krxcsk-BmusNS83.js +6 -0
- package/dist/assets/studio/assets/clamp-jcjhzx71s6wt1rnc-D0kAXd-u.js +2 -0
- package/dist/assets/studio/assets/clipboard-text-gd6s3n1bqse9zgt8-DXnAaY6R.js +2 -0
- package/dist/assets/studio/assets/code-eu8kzwqnlhoyin24-_5wcX_Lj.js +2 -0
- package/dist/assets/studio/assets/collapsible-l8g94on4w7qfosmn-udgP1bfF.js +2 -0
- package/dist/assets/studio/assets/combobox-hdxtsm2gqcxxgfju-BzzDlvd3.js +2 -0
- package/dist/assets/studio/assets/comment-model-CArtcrfg.js +4 -0
- package/dist/assets/studio/assets/comment-settings-M6JXROM1.js +2 -0
- package/dist/assets/studio/assets/comments-B1PIozwq.js +2 -0
- package/dist/assets/studio/assets/comments.ar-7NPLRbXL.js +2 -0
- package/dist/assets/studio/assets/comments.de-BML9h-8i.js +2 -0
- package/dist/assets/studio/assets/comments.en-DXe1aP-J.js +2 -0
- package/dist/assets/studio/assets/comments.es-B9qnqc6H.js +2 -0
- package/dist/assets/studio/assets/comments.fa-q5l6LTXH.js +2 -0
- package/dist/assets/studio/assets/comments.fr-7tNmTLTd.js +2 -0
- package/dist/assets/studio/assets/comments.he-C6eZFBr_.js +2 -0
- package/dist/assets/studio/assets/comments.hi-BBW7jI8Z.js +2 -0
- package/dist/assets/studio/assets/comments.id-XxjsE0p0.js +2 -0
- package/dist/assets/studio/assets/comments.it-3QvytToA.js +2 -0
- package/dist/assets/studio/assets/comments.ja-SEFPl5By.js +2 -0
- package/dist/assets/studio/assets/comments.ko-B_laV8JW.js +2 -0
- package/dist/assets/studio/assets/comments.nl-sc5X58Ly.js +2 -0
- package/dist/assets/studio/assets/comments.pl-DF090zb0.js +2 -0
- package/dist/assets/studio/assets/comments.pt-BR-DItdiBpU.js +2 -0
- package/dist/assets/studio/assets/comments.ru-BQjNpLAH.js +2 -0
- package/dist/assets/studio/assets/comments.tr-B22wAK59.js +2 -0
- package/dist/assets/studio/assets/comments.uk-D7MXty4-.js +2 -0
- package/dist/assets/studio/assets/comments.zh-Hans-Cuxj9eiV.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.ar-CFEC5U3P.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.de-B7jRspXp.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.en-CjQdkMZH.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.es-hozx4ts0.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.fa-Idlvxfyt.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.fr-CUYc20e7.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.he-DXrfjejv.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.hi-Bc2QmPb_.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.id-BlqU87IM.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.it-BxURj-49.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.ja--0JkaZKL.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.ko-Bc51E0cW.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.nl-BAfV9gzf.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.pl-CqCY2bHr.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.pt-BR-C1W1xEAM.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.ru-BNldyy_U.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.tr-DoM2JLr_.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.uk-B07IS9-u.js +2 -0
- package/dist/assets/studio/assets/commentsSettings.zh-Hans-iQA7XsFn.js +2 -0
- package/dist/assets/studio/assets/composite-ab8dmdfoj6tmhcn1-DBTnwEaq.js +2 -0
- package/dist/assets/studio/assets/core-n0de50o00ej2ecfe-gtt67pEc.js +13 -0
- package/dist/assets/studio/assets/countries-110m-CmKPZPcB.json +1 -0
- package/dist/assets/studio/assets/createToastManager-onmoqrmr8zo02rif-DtEv4lxV.js +2 -0
- package/dist/assets/studio/assets/css-j501gxq1am2gnikh-BsVw1vtW.js +2 -0
- package/dist/assets/studio/assets/date-picker-BSgojKR2.js +1 -0
- package/dist/assets/studio/assets/date-picker-cotkexrpqu5tjikv-C9Knj8LQ.js +2 -0
- package/dist/assets/studio/assets/de-BN-GS_nX.js +6 -0
- package/dist/assets/studio/assets/de-COZWf0tz.js +2 -0
- package/dist/assets/studio/assets/deleteLabels-DwQes2_M.js +2 -0
- package/dist/assets/studio/assets/dialog-glpnivujociqs9lh-BefDeRGC.js +2 -0
- package/dist/assets/studio/assets/diff-g2re0kj6fh27rgg5-woXpYk--.js +2 -0
- package/dist/assets/studio/assets/editor-C9MhZu7g.js +218 -0
- package/dist/assets/studio/assets/empty-hkvg3is3uc6dj1at-BGNUzomN.js +2 -0
- package/dist/assets/studio/assets/engine-javascript-e9xj8hhz9xfqhpnu-CaOb2Rd2.js +142 -0
- package/dist/assets/studio/assets/engine-oniguruma-ias56ildu01gf939-BO8SA_1o.js +2 -0
- package/dist/assets/studio/assets/errors-svQ83Q62.js +2 -0
- package/dist/assets/studio/assets/es-C1E3agwU.js +6 -0
- package/dist/assets/studio/assets/es-Cpr7u5Cz.js +2 -0
- package/dist/assets/studio/assets/fa-8y3tvKw6.js +2 -0
- package/dist/assets/studio/assets/fa-VZyv0VcS.js +6 -0
- package/dist/assets/studio/assets/format-DGE2c-4V.js +2 -0
- package/dist/assets/studio/assets/fr-IaaUvy1z.js +6 -0
- package/dist/assets/studio/assets/fr-IvKa5dhW.js +2 -0
- package/dist/assets/studio/assets/getElementTransform-cuiqmjglkrz4db6c-CjP1vzKy.js +2 -0
- package/dist/assets/studio/assets/github-light-hir7yctc38258pwt-EUqPIrTm.js +2 -0
- package/dist/assets/studio/assets/graphql-n9vlzkvcp2j19p7a-qc8EicCw.js +2 -0
- package/dist/assets/studio/assets/hcl-ohpfnrffs96hzyj5-Dh228itO.js +2 -0
- package/dist/assets/studio/assets/he-Ca3dnXtb.js +6 -0
- package/dist/assets/studio/assets/he-DG-oJz8N.js +2 -0
- package/dist/assets/studio/assets/hi-BXkaH5dy.js +6 -0
- package/dist/assets/studio/assets/hi-CngsNxV4.js +2 -0
- package/dist/assets/studio/assets/html-nimj6ljkkifnc9ni-_gDbiBIU.js +2 -0
- package/dist/assets/studio/assets/i18n-Cjiv6Esx.js +7 -0
- package/dist/assets/studio/assets/id-BuNEmn7g.js +6 -0
- package/dist/assets/studio/assets/id-CrWAlC6J.js +2 -0
- package/dist/assets/studio/assets/index-Boved2Nz.js +4 -0
- package/dist/assets/studio/assets/index-DaI1wvdp.css +2 -0
- package/dist/assets/studio/assets/inertValue-e0o6qvuef83v78fk-DAETOorM.js +2 -0
- package/dist/assets/studio/assets/inline-copy-text-gbd7jhwpor27l4rq-PUCnUeNZ.js +2 -0
- package/dist/assets/studio/assets/input-c8lv9ulv0kortliq-Cum0c7P1.js +5 -0
- package/dist/assets/studio/assets/input-group-fjr4r5ax0x78ppax-e-s-YUWj.js +2 -0
- package/dist/assets/studio/assets/input-h5ox92gf13ge04hp-jfy1uD8s.js +2 -0
- package/dist/assets/studio/assets/intl-C22KAx_l.js +2 -0
- package/dist/assets/studio/assets/it-BbkGji4q.js +2 -0
- package/dist/assets/studio/assets/it-DEB0m7yM.js +6 -0
- package/dist/assets/studio/assets/ja-BJv09PXI.js +6 -0
- package/dist/assets/studio/assets/ja-CLpIeite.js +2 -0
- package/dist/assets/studio/assets/javascript-b6fq9bl50fdj6813-BgS3c2Ky.js +2 -0
- package/dist/assets/studio/assets/json-h2g0z143t3cs13d7-qhed-kSA.js +2 -0
- package/dist/assets/studio/assets/jsonc-jxlzvingck161eej-CYpm1nAK.js +2 -0
- package/dist/assets/studio/assets/jsx-jp7a33937sef92sn-Bz0zcwM4.js +2 -0
- package/dist/assets/studio/assets/ko-Cikp2ojH.js +6 -0
- package/dist/assets/studio/assets/ko-u0y0T6iL.js +2 -0
- package/dist/assets/studio/assets/languages-CbQ722uB.js +2 -0
- package/dist/assets/studio/assets/layer-dialog-j5ywmzs46ccg6oqy-DyWF5y24.js +2 -0
- package/dist/assets/studio/assets/link-cqyfjezntvr53rh7-CwZJ95XT.js +10 -0
- package/dist/assets/studio/assets/markdown-eybeqjr58vfygtz1-BYOwaDjH.js +2 -0
- package/dist/assets/studio/assets/marked.esm-DCShygCS.js +68 -0
- package/dist/assets/studio/assets/media-DqHiLqTz.js +21 -0
- package/dist/assets/studio/assets/media.ar-Dx9z7Ceu.js +2 -0
- package/dist/assets/studio/assets/media.de-D6vlydhW.js +2 -0
- package/dist/assets/studio/assets/media.en-BT47PRGz.js +2 -0
- package/dist/assets/studio/assets/media.es-CDRleryS.js +2 -0
- package/dist/assets/studio/assets/media.fa-DXam9tY_.js +2 -0
- package/dist/assets/studio/assets/media.fr-DKfkWH0D.js +2 -0
- package/dist/assets/studio/assets/media.he-COj2GX3h.js +2 -0
- package/dist/assets/studio/assets/media.hi-1a0-Fk6b.js +2 -0
- package/dist/assets/studio/assets/media.id-CAgR7je9.js +2 -0
- package/dist/assets/studio/assets/media.it-huMn4qfV.js +2 -0
- package/dist/assets/studio/assets/media.ja-DIiDhxEt.js +2 -0
- package/dist/assets/studio/assets/media.ko-CEzTT9w2.js +2 -0
- package/dist/assets/studio/assets/media.nl-DAcAkgwj.js +2 -0
- package/dist/assets/studio/assets/media.pl-BIZYXHQa.js +2 -0
- package/dist/assets/studio/assets/media.pt-BR-C1Xda0__.js +2 -0
- package/dist/assets/studio/assets/media.ru-DQzNvBXO.js +2 -0
- package/dist/assets/studio/assets/media.tr-BaqtqqOw.js +2 -0
- package/dist/assets/studio/assets/media.uk-DGk-oYWc.js +2 -0
- package/dist/assets/studio/assets/media.zh-Hans-CrLAn2xd.js +2 -0
- package/dist/assets/studio/assets/menus.ar-BABqU-We.js +2 -0
- package/dist/assets/studio/assets/menus.de-Ba8EWf-g.js +2 -0
- package/dist/assets/studio/assets/menus.en-CJ5d7ms0.js +2 -0
- package/dist/assets/studio/assets/menus.es-CA6YLxuk.js +2 -0
- package/dist/assets/studio/assets/menus.fa-C7O8Jr5Z.js +2 -0
- package/dist/assets/studio/assets/menus.fr-Bq5ukcBM.js +2 -0
- package/dist/assets/studio/assets/menus.he-BiYUZo7X.js +2 -0
- package/dist/assets/studio/assets/menus.hi-CPYsx5YL.js +2 -0
- package/dist/assets/studio/assets/menus.id-B5JAh3Kk.js +2 -0
- package/dist/assets/studio/assets/menus.it-DpdTqaL4.js +2 -0
- package/dist/assets/studio/assets/menus.ja-NH9k2gC3.js +2 -0
- package/dist/assets/studio/assets/menus.ko-C_MCO4Mp.js +2 -0
- package/dist/assets/studio/assets/menus.nl-CLflbcbY.js +2 -0
- package/dist/assets/studio/assets/menus.pl-DLXN0-US.js +2 -0
- package/dist/assets/studio/assets/menus.pt-BR-Djh61S7r.js +2 -0
- package/dist/assets/studio/assets/menus.ru-Dn7rmQ8H.js +2 -0
- package/dist/assets/studio/assets/menus.tr-BOeLMbHv.js +2 -0
- package/dist/assets/studio/assets/menus.uk-BVwLEGId.js +2 -0
- package/dist/assets/studio/assets/menus.zh-Hans-X7QVgirl.js +2 -0
- package/dist/assets/studio/assets/meter-majprsslwmpbmkzg-DBo7nISC.js +2 -0
- package/dist/assets/studio/assets/names-R-Dypr9Y.js +2 -0
- package/dist/assets/studio/assets/nl-BiYEXj4B.js +6 -0
- package/dist/assets/studio/assets/nl-CraQgOQ0.js +2 -0
- package/dist/assets/studio/assets/pagination-oaenm9t7ou3lmcgw-DjC4Zsp5.js +2 -0
- package/dist/assets/studio/assets/pl-Iaem81Jv.js +6 -0
- package/dist/assets/studio/assets/pl-Z99ZIGWL.js +2 -0
- package/dist/assets/studio/assets/preload-helper-DjzSQ1t3.js +1 -0
- package/dist/assets/studio/assets/pt-BR-CM8N0OoK.js +6 -0
- package/dist/assets/studio/assets/pt-BR-CjvH9SeS.js +2 -0
- package/dist/assets/studio/assets/python-nrpnmxq4r6yp6fcd-gzcpVVnB.js +2 -0
- package/dist/assets/studio/assets/radio-35dx7y6rjrezbjsp-DY9M1ouC.js +2 -0
- package/dist/assets/studio/assets/react-CDCuUAOg.js +10 -0
- package/dist/assets/studio/assets/readers.ar-YaMfL_Lj.js +2 -0
- package/dist/assets/studio/assets/readers.de-wAkjNmXo.js +2 -0
- package/dist/assets/studio/assets/readers.en-CbmwKSip.js +2 -0
- package/dist/assets/studio/assets/readers.es-Clx8q_tO.js +2 -0
- package/dist/assets/studio/assets/readers.fa-8cssg4YZ.js +2 -0
- package/dist/assets/studio/assets/readers.fr-JJ3OFBav.js +2 -0
- package/dist/assets/studio/assets/readers.he-B0yqdtyq.js +2 -0
- package/dist/assets/studio/assets/readers.hi-i7cAeleO.js +2 -0
- package/dist/assets/studio/assets/readers.id-BdaxiKFf.js +2 -0
- package/dist/assets/studio/assets/readers.it-DXf3Um9S.js +2 -0
- package/dist/assets/studio/assets/readers.ja-B2eb6ZUO.js +2 -0
- package/dist/assets/studio/assets/readers.ko-BX4g0Q7l.js +2 -0
- package/dist/assets/studio/assets/readers.nl-cWSL2Ylr.js +2 -0
- package/dist/assets/studio/assets/readers.pl-C4WdmkML.js +2 -0
- package/dist/assets/studio/assets/readers.pt-BR-x4dMCgC9.js +2 -0
- package/dist/assets/studio/assets/readers.ru-BukUgT1q.js +2 -0
- package/dist/assets/studio/assets/readers.tr-nYS49xYR.js +2 -0
- package/dist/assets/studio/assets/readers.uk-DbcRoxdR.js +2 -0
- package/dist/assets/studio/assets/readers.zh-Hans-DcGU8fSg.js +2 -0
- package/dist/assets/studio/assets/reading-keys-CBjq-Jc-.js +2 -0
- package/dist/assets/studio/assets/resolveAriaLabelledBy-nc8mdie5shy87nsb-asx42i8W.js +2 -0
- package/dist/assets/studio/assets/resolveValueLabel-hpmsash3ektitvnb-X_gYut6U.js +2 -0
- package/dist/assets/studio/assets/roles-B7USahqW.js +2 -0
- package/dist/assets/studio/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/assets/studio/assets/rolldown-runtime-hi7ti5xiuxsegr96-DK3Fl9T5.js +2 -0
- package/dist/assets/studio/assets/ru-2qsjd_Gm.js +6 -0
- package/dist/assets/studio/assets/ru-CwyHst7f.js +2 -0
- package/dist/assets/studio/assets/schedule-notices-DSgNUP07.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.ar-DjCN-gPq.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.de-CkLy189g.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.en-Ke9GgFqw.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.es-DMlXyS4t.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.fa-B8pDw0e4.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.fr-D93CiYDm.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.he-Ce8vr2xp.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.hi-ClQTAEIx.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.id-TZ0m_tpl.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.it-v63UBHwg.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.ja-DjNw2QpF.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.ko-D-tIgkq1.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.nl-CQM8NRDu.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.pl-CUY8YZhH.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.pt-BR-2YkyZTua.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.ru-D-XI8CtL.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.tr-ChWn742p.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.uk-Czj_lfWV.js +2 -0
- package/dist/assets/studio/assets/scheduleSettings.zh-Hans-B1hytO83.js +2 -0
- package/dist/assets/studio/assets/schedules-BHug03zB.js +2 -0
- package/dist/assets/studio/assets/schedules-api-B7c4AXSw.js +2 -0
- package/dist/assets/studio/assets/schedules-search-B-7SpriY.js +2 -0
- package/dist/assets/studio/assets/schedules.ar-fkzR2RAY.js +2 -0
- package/dist/assets/studio/assets/schedules.de-DbgcJ6cl.js +2 -0
- package/dist/assets/studio/assets/schedules.en-D7O8u4iy.js +2 -0
- package/dist/assets/studio/assets/schedules.es-C3AvgW6g.js +2 -0
- package/dist/assets/studio/assets/schedules.fa-1UfcjmAY.js +2 -0
- package/dist/assets/studio/assets/schedules.fr-KDBHjGVO.js +2 -0
- package/dist/assets/studio/assets/schedules.he-D8Pds1dL.js +2 -0
- package/dist/assets/studio/assets/schedules.hi-DNpu7GlX.js +2 -0
- package/dist/assets/studio/assets/schedules.id-FewyiLfv.js +2 -0
- package/dist/assets/studio/assets/schedules.it-CY96E2q3.js +2 -0
- package/dist/assets/studio/assets/schedules.ja-CN3N8MH6.js +2 -0
- package/dist/assets/studio/assets/schedules.ko-B9ah4ZVM.js +2 -0
- package/dist/assets/studio/assets/schedules.nl-u3tZ7Ckd.js +2 -0
- package/dist/assets/studio/assets/schedules.pl-Bofx1Ubo.js +2 -0
- package/dist/assets/studio/assets/schedules.pt-BR-BFxLBiyp.js +2 -0
- package/dist/assets/studio/assets/schedules.ru-C5ZnKmGt.js +2 -0
- package/dist/assets/studio/assets/schedules.tr-Bfi96rHj.js +2 -0
- package/dist/assets/studio/assets/schedules.uk-BU4Kj6Az.js +2 -0
- package/dist/assets/studio/assets/schedules.zh-Hans-DDsu_SeS.js +2 -0
- package/dist/assets/studio/assets/scrollable-b6m9ze1u7ps0q1qn-BDQyLiel.js +2 -0
- package/dist/assets/studio/assets/select-futox5zqr3r80y9a-5U5PtwHa.js +2 -0
- package/dist/assets/studio/assets/seo-C-YSZ4mD.js +2 -0
- package/dist/assets/studio/assets/serializeValue-ipcakiw32jb7kany-B_EucO5O.js +2 -0
- package/dist/assets/studio/assets/shellscript-i4m7lo8wi0f5bl8b-CLZ0U2zV.js +2 -0
- package/dist/assets/studio/assets/site-settings-Cmq0DkaT.js +2 -0
- package/dist/assets/studio/assets/skeleton-line-m9dyh126t9k07jvg-CHsT8Hs3.js +4 -0
- package/dist/assets/studio/assets/sql-hqp2eekl7qhmxe92-BsFa4tDR.js +2 -0
- package/dist/assets/studio/assets/stringifyLocale-bxsgxdnzaef2vcar-CkHjdQTJ.js +2 -0
- package/dist/assets/studio/assets/styles-kl02oyrlnld7arja-BX5Ypy0Y.js +2 -0
- package/dist/assets/studio/assets/switch-cqsvolm7h69z7vgg-sFG02Szv.js +2 -0
- package/dist/assets/studio/assets/table-yf8ul2e5nbemioi1-DNq9jhfh.js +2 -0
- package/dist/assets/studio/assets/tabs-gf57qqf1wcclaejq-Cay-6qhK.js +2 -0
- package/dist/assets/studio/assets/tag-input-ohfybx5dbxy3houy-DhZt3VBi.js +2 -0
- package/dist/assets/studio/assets/tanstack-BiJ_7SEB.js +3 -0
- package/dist/assets/studio/assets/taxonomy-S-y5xbUa.js +2 -0
- package/dist/assets/studio/assets/toml-oyqrgosuct25x413-CcmNWLt0.js +2 -0
- package/dist/assets/studio/assets/toolbar-h213d8e22yjh5cwq-CipG_KSA.js +2 -0
- package/dist/assets/studio/assets/tr-BK-gVqHj.js +6 -0
- package/dist/assets/studio/assets/tr-DOAJHdbH.js +2 -0
- package/dist/assets/studio/assets/tsx-pem8x69upvmibv6l-udAQXfEw.js +2 -0
- package/dist/assets/studio/assets/typescript-pe5y016phdwbgws7-bsJCZSQ-.js +2 -0
- package/dist/assets/studio/assets/uk-9ZV1-TPI.js +2 -0
- package/dist/assets/studio/assets/uk-PoqqfkaM.js +6 -0
- package/dist/assets/studio/assets/useAnalyticsCard-MXajmsui.js +2 -0
- package/dist/assets/studio/assets/useAriaLabelledBy-ox8dum59shmgypq1-gkARNgzh.js +2 -0
- package/dist/assets/studio/assets/useBaseUiId-lg1teubxudgin0w2-CrAc3DRu.js +3 -0
- package/dist/assets/studio/assets/useButton-h7s9aq1sfw6arawe-BbWTOEat.js +4 -0
- package/dist/assets/studio/assets/useChartPalette-DXG2lo2x.js +2 -0
- package/dist/assets/studio/assets/useClick-l0p0endoxrlp0ae5-Bbq8u-IC.js +2 -0
- package/dist/assets/studio/assets/useCompositeItem-p7090ga00dpqcg5j-CiGYXm-8.js +2 -0
- package/dist/assets/studio/assets/useDebounced-DmPVYKCM.js +2 -0
- package/dist/assets/studio/assets/useListNavigation-3nyjs362qcau34in-DAKhz5rq.js +2 -0
- package/dist/assets/studio/assets/useMe-z-wff5FW.js +2 -0
- package/dist/assets/studio/assets/usePaging-BiNrjkE2.js +2 -0
- package/dist/assets/studio/assets/usePendingApprovals-BRHKM3-1.js +2 -0
- package/dist/assets/studio/assets/useRender-onwjigxa00uch2ip-DueSv9wh.js +2 -0
- package/dist/assets/studio/assets/useRenderDialogRoot-lddunc01twftravv-CpXvIQfS.js +2 -0
- package/dist/assets/studio/assets/useSettled-C0sKy_Gd.js +2 -0
- package/dist/assets/studio/assets/useTriggerFocusGuards-lz7wt484xltizro4-Dd4azd_G.js +2 -0
- package/dist/assets/studio/assets/util-B4GkKYcU.js +2 -0
- package/dist/assets/studio/assets/vesper-g839e590k3dxnwh3-DdrHHSXu.js +2 -0
- package/dist/assets/studio/assets/w3c-keyname-BOAvb0qz.js +2 -0
- package/dist/assets/studio/assets/wasm-cpasy0o9lsjrm39j-BnjxR4X6.js +2 -0
- package/dist/assets/studio/assets/workflow-D1TOv5ea.js +2 -0
- package/dist/assets/studio/assets/yaml-kzk5ddyekbyha04v-rwi0_p6S.js +2 -0
- package/dist/assets/studio/assets/zh-Hans-BYiQm8Cr.js +6 -0
- package/dist/assets/studio/assets/zh-Hans-D57DCm9K.js +2 -0
- package/dist/assets/studio/index.html +111 -0
- package/dist/bin/cloudhal.d.ts +2 -0
- package/dist/bin/cloudhal.js +10 -0
- package/dist/src/assets.d.ts +37 -0
- package/dist/src/assets.js +189 -0
- package/dist/src/blocks.d.ts +26 -0
- package/dist/src/blocks.js +102 -0
- package/dist/src/cli/commands-content.d.ts +7 -0
- package/dist/src/cli/commands-content.js +145 -0
- package/dist/src/cli/commands-local.d.ts +13 -0
- package/dist/src/cli/commands-local.js +167 -0
- package/dist/src/cli/commands-ops.d.ts +6 -0
- package/dist/src/cli/commands-ops.js +175 -0
- package/dist/src/cli/commands-remote.d.ts +8 -0
- package/dist/src/cli/commands-remote.js +131 -0
- package/dist/src/cli/commands-site.d.ts +4 -0
- package/dist/src/cli/commands-site.js +52 -0
- package/dist/src/cli/help.d.ts +2 -0
- package/dist/src/cli/help.js +83 -0
- package/dist/src/cli/prompts.d.ts +7 -0
- package/dist/src/cli/prompts.js +35 -0
- package/dist/src/cli/types.d.ts +26 -0
- package/dist/src/cli/types.js +42 -0
- package/dist/src/cli.d.ts +174 -0
- package/dist/src/cli.js +95 -0
- package/dist/src/cloudflare/admin.d.ts +54 -0
- package/dist/src/cloudflare/admin.js +156 -0
- package/dist/src/cloudflare/build.d.ts +5 -0
- package/dist/src/cloudflare/build.js +36 -0
- package/dist/src/cloudflare/config.d.ts +1082 -0
- package/dist/src/cloudflare/config.js +458 -0
- package/dist/src/cloudflare/search.d.ts +37 -0
- package/dist/src/cloudflare/search.js +47 -0
- package/dist/src/cloudflare/wrangler.d.ts +27 -0
- package/dist/src/cloudflare/wrangler.js +133 -0
- package/dist/src/commands/ai.d.ts +39 -0
- package/dist/src/commands/ai.js +264 -0
- package/dist/src/commands/analytics.d.ts +94 -0
- package/dist/src/commands/analytics.js +347 -0
- package/dist/src/commands/astro.d.ts +22 -0
- package/dist/src/commands/astro.js +87 -0
- package/dist/src/commands/chrome.d.ts +22 -0
- package/dist/src/commands/chrome.js +90 -0
- package/dist/src/commands/comments-local.d.ts +40 -0
- package/dist/src/commands/comments-local.js +114 -0
- package/dist/src/commands/comments.d.ts +45 -0
- package/dist/src/commands/comments.js +285 -0
- package/dist/src/commands/deploy/attach.d.ts +2 -0
- package/dist/src/commands/deploy/attach.js +190 -0
- package/dist/src/commands/deploy/context.d.ts +21 -0
- package/dist/src/commands/deploy/context.js +22 -0
- package/dist/src/commands/deploy/options.d.ts +98 -0
- package/dist/src/commands/deploy/options.js +106 -0
- package/dist/src/commands/deploy/prepare.d.ts +55 -0
- package/dist/src/commands/deploy/prepare.js +298 -0
- package/dist/src/commands/deploy/resources.d.ts +26 -0
- package/dist/src/commands/deploy/resources.js +157 -0
- package/dist/src/commands/deploy/schedules-guard.d.ts +24 -0
- package/dist/src/commands/deploy/schedules-guard.js +95 -0
- package/dist/src/commands/deploy/served-sites.d.ts +28 -0
- package/dist/src/commands/deploy/served-sites.js +86 -0
- package/dist/src/commands/deploy/settings.d.ts +24 -0
- package/dist/src/commands/deploy/settings.js +115 -0
- package/dist/src/commands/deploy/ship.d.ts +46 -0
- package/dist/src/commands/deploy/ship.js +174 -0
- package/dist/src/commands/deploy/state.d.ts +30 -0
- package/dist/src/commands/deploy/state.js +102 -0
- package/dist/src/commands/deploy.d.ts +52 -0
- package/dist/src/commands/deploy.js +223 -0
- package/dist/src/commands/domain.d.ts +15 -0
- package/dist/src/commands/domain.js +44 -0
- package/dist/src/commands/init.d.ts +18 -0
- package/dist/src/commands/init.js +142 -0
- package/dist/src/commands/mail-local.d.ts +7 -0
- package/dist/src/commands/mail-local.js +30 -0
- package/dist/src/commands/mcp.d.ts +22 -0
- package/dist/src/commands/mcp.js +113 -0
- package/dist/src/commands/media-placeholders.d.ts +29 -0
- package/dist/src/commands/media-placeholders.js +239 -0
- package/dist/src/commands/media.d.ts +32 -0
- package/dist/src/commands/media.js +182 -0
- package/dist/src/commands/migrate.d.ts +16 -0
- package/dist/src/commands/migrate.js +63 -0
- package/dist/src/commands/motion.d.ts +29 -0
- package/dist/src/commands/motion.js +118 -0
- package/dist/src/commands/owner.d.ts +18 -0
- package/dist/src/commands/owner.js +39 -0
- package/dist/src/commands/render.d.ts +26 -0
- package/dist/src/commands/render.js +94 -0
- package/dist/src/commands/scheduler-local.d.ts +55 -0
- package/dist/src/commands/scheduler-local.js +237 -0
- package/dist/src/commands/schedules.d.ts +32 -0
- package/dist/src/commands/schedules.js +170 -0
- package/dist/src/commands/search.d.ts +14 -0
- package/dist/src/commands/search.js +53 -0
- package/dist/src/commands/site.d.ts +46 -0
- package/dist/src/commands/site.js +151 -0
- package/dist/src/commands/snapshot.d.ts +10 -0
- package/dist/src/commands/snapshot.js +50 -0
- package/dist/src/commands/studio.d.ts +29 -0
- package/dist/src/commands/studio.js +172 -0
- package/dist/src/commands/sync.d.ts +42 -0
- package/dist/src/commands/sync.js +211 -0
- package/dist/src/commands/tokens.d.ts +12 -0
- package/dist/src/commands/tokens.js +45 -0
- package/dist/src/config-search.d.ts +24 -0
- package/dist/src/config-search.js +41 -0
- package/dist/src/config.d.ts +168 -0
- package/dist/src/config.js +348 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/index.js +82 -0
- package/dist/src/project-setup.d.ts +21 -0
- package/dist/src/project-setup.js +50 -0
- package/dist/src/render-chrome.d.ts +9 -0
- package/dist/src/render-chrome.js +140 -0
- package/dist/src/starter-files.d.ts +4 -0
- package/dist/src/starter-files.js +51 -0
- package/dist/src/studio-build.d.ts +43 -0
- package/dist/src/studio-build.js +138 -0
- package/package.json +63 -3
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { openLocalStore } from "@cloudhal/core-ts/local";
|
|
4
|
+
import { designTokensDtcg } from "@cloudhal/core-ts/tokens";
|
|
5
|
+
import { loadThemeSettings } from "../blocks.js";
|
|
6
|
+
import { readProjectConfig } from "../config.js";
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* `cloudhal tokens export` (RFC-0023 §5): the site's design tokens, as the renderer expands them,
|
|
17
|
+
* in the W3C Design Tokens format (DTCG 2025.10), for Figma (Tokens Studio) and Style Dictionary.
|
|
18
|
+
* Returns the JSON written.
|
|
19
|
+
*/
|
|
20
|
+
export async function tokensExport(options ) {
|
|
21
|
+
const format = options.format ?? "dtcg";
|
|
22
|
+
if (format !== "dtcg") throw new Error(`--format: only dtcg is supported (got ${format})`);
|
|
23
|
+
const cfg = await readProjectConfig(options.projectDir);
|
|
24
|
+
const settings = await loadThemeSettings(options.projectDir);
|
|
25
|
+
if (!settings)
|
|
26
|
+
throw new Error("this project's theme declares no design settings (src/settings.ts)");
|
|
27
|
+
const local = await openLocalStore(path.join(options.projectDir, cfg.dataDir));
|
|
28
|
+
try {
|
|
29
|
+
const site = await local.store.getSite(cfg.siteId);
|
|
30
|
+
if (!site) throw new Error(`site ${cfg.siteId} not found`);
|
|
31
|
+
const json = `${JSON.stringify(
|
|
32
|
+
designTokensDtcg(
|
|
33
|
+
site.theme.config ?? {},
|
|
34
|
+
settings.properties ,
|
|
35
|
+
{ name: site.name },
|
|
36
|
+
),
|
|
37
|
+
null,
|
|
38
|
+
2,
|
|
39
|
+
)}\n`;
|
|
40
|
+
if (options.out) await writeFile(path.resolve(options.projectDir, options.out), json);
|
|
41
|
+
return json;
|
|
42
|
+
} finally {
|
|
43
|
+
await local.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cloudhal.json` `search` (RFC-0029 §3): the deployment's search provider. Absent, FTS5 alone.
|
|
3
|
+
*
|
|
4
|
+
* ```json
|
|
5
|
+
* "search": { "provider": "cloudflare-ai-search", "instance": "newsroom-search", "monthlyLimit": 1000 }
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* - `instance`: the AI Search instance (it must exist before the deploy, its data source the R2
|
|
9
|
+
* bucket below, with the text custom metadata fields `locale` and `kind`).
|
|
10
|
+
* - `bucket`: the R2 bucket the deployment mirrors published content into (default
|
|
11
|
+
* `<name>-search`; `cloudhal deploy` creates it).
|
|
12
|
+
* - `monthlyLimit`: semantic calls per UTC month for the whole deployment, then FTS5 alone until
|
|
13
|
+
* the month ends. Default 1000: the semantic queries Cloudflare includes per account and month,
|
|
14
|
+
* so Workers Free and the $5 Workers Paid plan pay nothing for search. Large sites raise it;
|
|
15
|
+
* deployments sharing one Cloudflare account share the 1,000 and should split it.
|
|
16
|
+
*/
|
|
17
|
+
export interface SearchConfig {
|
|
18
|
+
readonly provider: "cloudflare-ai-search";
|
|
19
|
+
readonly instance: string;
|
|
20
|
+
readonly bucket?: string;
|
|
21
|
+
readonly monthlyLimit?: number;
|
|
22
|
+
}
|
|
23
|
+
/** Leniently parsed: without a known provider and a valid instance name, nothing (FTS5 alone). */
|
|
24
|
+
export declare function parseSearchConfig(input: unknown): SearchConfig | undefined;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cloudhal.json` `search` (RFC-0029 §3): the deployment's search provider. Absent, FTS5 alone.
|
|
3
|
+
*
|
|
4
|
+
* ```json
|
|
5
|
+
* "search": { "provider": "cloudflare-ai-search", "instance": "newsroom-search", "monthlyLimit": 1000 }
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* - `instance`: the AI Search instance (it must exist before the deploy, its data source the R2
|
|
9
|
+
* bucket below, with the text custom metadata fields `locale` and `kind`).
|
|
10
|
+
* - `bucket`: the R2 bucket the deployment mirrors published content into (default
|
|
11
|
+
* `<name>-search`; `cloudhal deploy` creates it).
|
|
12
|
+
* - `monthlyLimit`: semantic calls per UTC month for the whole deployment, then FTS5 alone until
|
|
13
|
+
* the month ends. Default 1000: the semantic queries Cloudflare includes per account and month,
|
|
14
|
+
* so Workers Free and the $5 Workers Paid plan pay nothing for search. Large sites raise it;
|
|
15
|
+
* deployments sharing one Cloudflare account share the 1,000 and should split it.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
/** AI Search instance and R2 bucket names: lower-case letters, digits and hyphens. */
|
|
25
|
+
const RESOURCE_NAME = /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/;
|
|
26
|
+
|
|
27
|
+
/** Leniently parsed: without a known provider and a valid instance name, nothing (FTS5 alone). */
|
|
28
|
+
export function parseSearchConfig(input ) {
|
|
29
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
|
|
30
|
+
const o = input ;
|
|
31
|
+
if (o.provider !== "cloudflare-ai-search") return undefined;
|
|
32
|
+
if (typeof o.instance !== "string" || !RESOURCE_NAME.test(o.instance)) return undefined;
|
|
33
|
+
return {
|
|
34
|
+
provider: "cloudflare-ai-search",
|
|
35
|
+
instance: o.instance,
|
|
36
|
+
...(typeof o.bucket === "string" && RESOURCE_NAME.test(o.bucket) ? { bucket: o.bucket } : {}),
|
|
37
|
+
...(Number.isInteger(o.monthlyLimit) && (o.monthlyLimit ) >= 0
|
|
38
|
+
? { monthlyLimit: o.monthlyLimit }
|
|
39
|
+
: {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { type SearchConfig } from "./config-search.js";
|
|
2
|
+
/**
|
|
3
|
+
* `cloudhal.json` → `analytics` (RFC-0006 §8): deployment defaults for site analytics. Absent means
|
|
4
|
+
* off (existing projects are asked on their next interactive deploy); present, `enabled` defaults
|
|
5
|
+
* to `true`, as the Site Worker reads it.
|
|
6
|
+
*/
|
|
7
|
+
export interface AnalyticsConfig {
|
|
8
|
+
readonly enabled?: boolean;
|
|
9
|
+
/** Default for sites without a settings row: daily-salted unique visitors (opt-in). */
|
|
10
|
+
readonly uniqueVisitors?: boolean;
|
|
11
|
+
/** Vitals sampling, one page view in N: 0 (off), 1, 2, 5, 10 or 20. */
|
|
12
|
+
readonly vitalsOneIn?: number;
|
|
13
|
+
/** Uncached live (WAE) queries per UTC day (default 8000). */
|
|
14
|
+
readonly queryBudget?: number;
|
|
15
|
+
/** Days of raw events kept in SQLite locally and on Node (default 90). */
|
|
16
|
+
readonly rawRetentionDays?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Workers Rate Limiting binding for the beacon (RFC-0006 §5.5): `true` for the defaults, or
|
|
19
|
+
* `{ limit, namespaceId }`. A cross-isolate limit on top of the per-isolate one; off when absent.
|
|
20
|
+
*/
|
|
21
|
+
readonly rateLimit?: boolean | AnalyticsRateLimitConfig;
|
|
22
|
+
/** Record `cloudhal dev` traffic locally (default off: it is the author's own). */
|
|
23
|
+
readonly dev?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** `cloudhal.json` → `analytics.rateLimit` as an object. */
|
|
26
|
+
export interface AnalyticsRateLimitConfig {
|
|
27
|
+
/** Beacons per client per 60 s across isolates (default 120; 1–10,000). */
|
|
28
|
+
readonly limit?: number;
|
|
29
|
+
/**
|
|
30
|
+
* The binding's `namespace_id`: a positive integer, unique in the Cloudflare account. Default:
|
|
31
|
+
* derived from the deployment name, so two deployments in one account do not share counters.
|
|
32
|
+
*/
|
|
33
|
+
readonly namespaceId?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `cloudhal.json` → `comments` (RFC-0007 §4.5, §15.4): deployment defaults for reader comments.
|
|
37
|
+
* Absent means available (`cloudhal init` writes `{ "available": true }`); comments still stay
|
|
38
|
+
* **off for every site** until someone turns them on in Studio (owner decision D4), so a deploy
|
|
39
|
+
* never surprises a site with a comment form.
|
|
40
|
+
*/
|
|
41
|
+
export interface CommentsConfig {
|
|
42
|
+
/** `false` removes comments from the deployment: no endpoints, no module, no cron work. */
|
|
43
|
+
readonly available?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Workers Rate Limiting binding for submissions (RFC-0007 §6.5, `COMMENTS_RL`): `true` for the
|
|
46
|
+
* defaults (10 a minute per client per Cloudflare location), or `{ limit, namespaceId }`. On top
|
|
47
|
+
* of the per-isolate and D1 limits, which work without it; off when absent.
|
|
48
|
+
*/
|
|
49
|
+
readonly rateLimit?: boolean | AnalyticsRateLimitConfig;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `cloudhal.json` → `schedules` (RFC-0008 §8.2, §11.6): what `cloudhal deploy` writes for the
|
|
53
|
+
* scheduler. Absent means automations on and the Workers Free tick budget (unless `--plan paid`
|
|
54
|
+
* was deployed before: `state.json` remembers it).
|
|
55
|
+
*/
|
|
56
|
+
export interface SchedulesConfig {
|
|
57
|
+
/** `false` turns automations off for the deployment (`CLOUDHAL_AUTOMATIONS=off`). */
|
|
58
|
+
readonly automations?: boolean;
|
|
59
|
+
/** The account's Workers plan, which sizes each tick (`CLOUDHAL_TICK_BUDGET`). */
|
|
60
|
+
readonly plan?: "free" | "paid";
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* `cloudhal.json` `mail` (RFC-0011): the sender of invites and reset links. Its domain must be
|
|
64
|
+
* onboarded to Cloudflare Email Service; `cloudhal deploy` binds `send_email` locked to `from`.
|
|
65
|
+
*/
|
|
66
|
+
export interface MailConfig {
|
|
67
|
+
/** A plain `local@domain` address. */
|
|
68
|
+
readonly from: string;
|
|
69
|
+
/** Display name (default: none). */
|
|
70
|
+
readonly fromName?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* `cloudhal.json` `observability` (RFC-0013): what both Workers send to Workers Logs and Traces. Logs are on
|
|
74
|
+
* for every request unless sampled down; traces are opt-in (stored traces are billed from
|
|
75
|
+
* 2026-12-01). Query strings are always redacted: preview links carry their token there.
|
|
76
|
+
*/
|
|
77
|
+
export interface ObservabilityConfig {
|
|
78
|
+
/** Share of requests whose logs are kept, 0–1 (default 1). */
|
|
79
|
+
readonly logs?: number;
|
|
80
|
+
/** Workers Traces: `true` traces every request, a number samples that share (0–1). */
|
|
81
|
+
readonly traces?: boolean | number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* `cloudhal.json` `ai` (RFC-0016): `{}` binds Workers AI (`AI`) to the admin Worker, so each site's
|
|
85
|
+
* owner can turn in-editor AI on in Studio. No keys: the binding bills to the account.
|
|
86
|
+
*/
|
|
87
|
+
export type AiConfig = Record<string, never>;
|
|
88
|
+
/** `cloudhal.json` at the project root. Kept tiny; everything else lives in the store. */
|
|
89
|
+
export interface ProjectConfig {
|
|
90
|
+
/** The project's own site: what `dev`, `push`, `pull` and the other site commands work on. */
|
|
91
|
+
readonly siteId: string;
|
|
92
|
+
/**
|
|
93
|
+
* RFC-0034 §4: every site the deployment's site Worker serves, picked by hostname. `siteId`
|
|
94
|
+
* always comes first. Absent: the Worker serves `siteId` alone, on every host.
|
|
95
|
+
*/
|
|
96
|
+
readonly sites?: readonly string[];
|
|
97
|
+
/**
|
|
98
|
+
* RFC-0034 §4: the folder of the installation this project's site Worker joins (relative to
|
|
99
|
+
* this project): `cloudhal deploy` then deploys only a site Worker, on that installation's
|
|
100
|
+
* database, bucket and secrets, and registers it there. Used for a theme of its own.
|
|
101
|
+
*/
|
|
102
|
+
readonly installation?: string;
|
|
103
|
+
/** Relative to the project root. */
|
|
104
|
+
readonly dataDir: string;
|
|
105
|
+
/**
|
|
106
|
+
* Custom domains `cloudhal deploy` routes to the Workers (Cloudflare Custom Domains; the zone
|
|
107
|
+
* must be in the same account). The workers.dev addresses keep working.
|
|
108
|
+
*/
|
|
109
|
+
readonly domains?: {
|
|
110
|
+
readonly site?: string;
|
|
111
|
+
readonly studio?: string;
|
|
112
|
+
};
|
|
113
|
+
/** Site analytics (RFC-0006); absent = off. */
|
|
114
|
+
readonly analytics?: AnalyticsConfig;
|
|
115
|
+
/** Reader comments (RFC-0007); absent = available, off per site. */
|
|
116
|
+
readonly comments?: CommentsConfig;
|
|
117
|
+
/** Schedules (RFC-0008); absent = automations on, the Free tick budget. */
|
|
118
|
+
readonly schedules?: SchedulesConfig;
|
|
119
|
+
/** Email delivery (RFC-0011); absent = invites and resets by link only. */
|
|
120
|
+
readonly mail?: MailConfig;
|
|
121
|
+
/** In-editor AI through Workers AI (RFC-0016); absent = no `AI` binding. */
|
|
122
|
+
readonly ai?: AiConfig;
|
|
123
|
+
/**
|
|
124
|
+
* `false` (RFC-0021 §4): no Browser Rendering binding, so `render_page` is unavailable on the
|
|
125
|
+
* deployment. Absent = bound (agents render pages to check them; billed per browser time).
|
|
126
|
+
*/
|
|
127
|
+
readonly render?: false;
|
|
128
|
+
/** Workers Logs sampling and opt-in Traces for both Workers; absent = every log, no traces. */
|
|
129
|
+
readonly observability?: ObservabilityConfig;
|
|
130
|
+
/**
|
|
131
|
+
* `"smart"` (RFC-0013): Smart Placement for the admin Worker, which runs next to D1 instead of next to the
|
|
132
|
+
* visitor (it makes several database round trips per request). Absent = default placement.
|
|
133
|
+
*/
|
|
134
|
+
readonly placement?: "smart";
|
|
135
|
+
/** The search provider (RFC-0029 §3, `config-search.ts`); absent = FTS5 alone. */
|
|
136
|
+
readonly search?: SearchConfig;
|
|
137
|
+
}
|
|
138
|
+
export declare const CONFIG_FILE = "cloudhal.json";
|
|
139
|
+
/** Leniently parsed, like `domains`: values of the wrong type are left out. */
|
|
140
|
+
export declare function parseAnalyticsConfig(input: unknown): AnalyticsConfig | undefined;
|
|
141
|
+
/** Leniently parsed, like `analytics`: values of the wrong type are left out. */
|
|
142
|
+
export declare function parseCommentsConfig(input: unknown): CommentsConfig | undefined;
|
|
143
|
+
/** Leniently parsed, like `comments`: values of the wrong type are left out. */
|
|
144
|
+
export declare function parseSchedulesConfig(input: unknown): SchedulesConfig | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* `mail` (RFC-0011). Unlike the lenient blocks above, a `from` that is there but is not a plain
|
|
147
|
+
* address is an error: mail silently off would hide a typo until the first invite.
|
|
148
|
+
*/
|
|
149
|
+
export declare function parseMailConfig(input: unknown): MailConfig | undefined;
|
|
150
|
+
/** Leniently parsed, like `schedules`: rates outside 0–1 and values of the wrong type are left out. */
|
|
151
|
+
export declare function parseObservabilityConfig(input: unknown): ObservabilityConfig | undefined;
|
|
152
|
+
/** Whether the deployment offers reader comments: on unless `comments.available` is `false`. */
|
|
153
|
+
export declare function commentsAvailable(cfg: Pick<ProjectConfig, "comments">): boolean;
|
|
154
|
+
/** Whether the deployment records analytics: the block is there and not switched off. */
|
|
155
|
+
export declare function analyticsEnabled(cfg: Pick<ProjectConfig, "analytics">): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* The defaults the Workers read (`CLOUDHAL_ANALYTICS_DEFAULTS`), `parseAnalyticsDefaults` shape:
|
|
158
|
+
* only what applies per site.
|
|
159
|
+
*/
|
|
160
|
+
export declare function analyticsDefaultsOf(cfg: Pick<ProjectConfig, "analytics">): {
|
|
161
|
+
enabled: boolean;
|
|
162
|
+
uniqueVisitors: boolean;
|
|
163
|
+
vitalsOneIn: number;
|
|
164
|
+
};
|
|
165
|
+
/** `sites`: valid ids, each once, the project's site first; undefined unless it adds a site. */
|
|
166
|
+
export declare function parseSites(siteId: string, input: unknown): string[] | undefined;
|
|
167
|
+
export declare function readProjectConfig(projectDir: string): Promise<ProjectConfig>;
|
|
168
|
+
export declare function writeProjectConfig(projectDir: string, cfg: ProjectConfig): Promise<void>;
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { parseSearchConfig, } from "./config-search.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `cloudhal.json` → `analytics` (RFC-0006 §8): deployment defaults for site analytics. Absent means
|
|
7
|
+
* off (existing projects are asked on their next interactive deploy); present, `enabled` defaults
|
|
8
|
+
* to `true`, as the Site Worker reads it.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
/** `cloudhal.json` → `analytics.rateLimit` as an object. */
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* `cloudhal.json` → `comments` (RFC-0007 §4.5, §15.4): deployment defaults for reader comments.
|
|
42
|
+
* Absent means available (`cloudhal init` writes `{ "available": true }`); comments still stay
|
|
43
|
+
* **off for every site** until someone turns them on in Studio (owner decision D4), so a deploy
|
|
44
|
+
* never surprises a site with a comment form.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* `cloudhal.json` → `schedules` (RFC-0008 §8.2, §11.6): what `cloudhal deploy` writes for the
|
|
59
|
+
* scheduler. Absent means automations on and the Workers Free tick budget (unless `--plan paid`
|
|
60
|
+
* was deployed before: `state.json` remembers it).
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* `cloudhal.json` `mail` (RFC-0011): the sender of invites and reset links. Its domain must be
|
|
71
|
+
* onboarded to Cloudflare Email Service; `cloudhal deploy` binds `send_email` locked to `from`.
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* `cloudhal.json` `observability` (RFC-0013): what both Workers send to Workers Logs and Traces. Logs are on
|
|
82
|
+
* for every request unless sampled down; traces are opt-in (stored traces are billed from
|
|
83
|
+
* 2026-12-01). Query strings are always redacted: preview links carry their token there.
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* `cloudhal.json` `ai` (RFC-0016): `{}` binds Workers AI (`AI`) to the admin Worker, so each site's
|
|
94
|
+
* owner can turn in-editor AI on in Studio. No keys: the binding bills to the account.
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/** A plain `local@domain` address: no display name, no spaces or line breaks. */
|
|
99
|
+
const MAIL_ADDRESS = /^[^\s@<>"]+@[^\s@<>"]+\.[^\s@<>"]+$/;
|
|
100
|
+
|
|
101
|
+
/** `cloudhal.json` at the project root. Kept tiny; everything else lives in the store. */
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
export const CONFIG_FILE = "cloudhal.json";
|
|
150
|
+
|
|
151
|
+
/** The keys `ProjectConfig` owns; others (e.g. `media`, read by the starter) are kept on write. */
|
|
152
|
+
const OWN_KEYS = new Set([
|
|
153
|
+
"siteId",
|
|
154
|
+
"sites",
|
|
155
|
+
"installation",
|
|
156
|
+
"dataDir",
|
|
157
|
+
"domains",
|
|
158
|
+
"analytics",
|
|
159
|
+
"comments",
|
|
160
|
+
"schedules",
|
|
161
|
+
"mail",
|
|
162
|
+
"ai",
|
|
163
|
+
"observability",
|
|
164
|
+
"placement",
|
|
165
|
+
"search",
|
|
166
|
+
]);
|
|
167
|
+
|
|
168
|
+
const VITALS = [0, 1, 2, 5, 10, 20];
|
|
169
|
+
|
|
170
|
+
/** Leniently parsed, like `domains`: values of the wrong type are left out. */
|
|
171
|
+
export function parseAnalyticsConfig(input ) {
|
|
172
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
|
|
173
|
+
const o = input ;
|
|
174
|
+
const bool = (k ) => (typeof o[k] === "boolean" ? { [k]: o[k] } : {});
|
|
175
|
+
const int = (k , ok ) =>
|
|
176
|
+
Number.isInteger(o[k]) && ok(o[k] ) ? { [k]: o[k] } : {};
|
|
177
|
+
return {
|
|
178
|
+
...bool("enabled"),
|
|
179
|
+
...bool("uniqueVisitors"),
|
|
180
|
+
...int("vitalsOneIn", (n) => VITALS.includes(n)),
|
|
181
|
+
...int("queryBudget", (n) => n >= 0),
|
|
182
|
+
...int("rawRetentionDays", (n) => n >= 1),
|
|
183
|
+
...rateLimitOf(o.rateLimit),
|
|
184
|
+
...bool("dev"),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Leniently parsed, like `analytics`: values of the wrong type are left out. */
|
|
189
|
+
export function parseCommentsConfig(input ) {
|
|
190
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
|
|
191
|
+
const o = input ;
|
|
192
|
+
return {
|
|
193
|
+
...(typeof o.available === "boolean" ? { available: o.available } : {}),
|
|
194
|
+
...rateLimitOf(o.rateLimit),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Leniently parsed, like `comments`: values of the wrong type are left out. */
|
|
199
|
+
export function parseSchedulesConfig(input ) {
|
|
200
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
|
|
201
|
+
const o = input ;
|
|
202
|
+
return {
|
|
203
|
+
...(typeof o.automations === "boolean" ? { automations: o.automations } : {}),
|
|
204
|
+
...(o.plan === "free" || o.plan === "paid" ? { plan: o.plan } : {}),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* `mail` (RFC-0011). Unlike the lenient blocks above, a `from` that is there but is not a plain
|
|
210
|
+
* address is an error: mail silently off would hide a typo until the first invite.
|
|
211
|
+
*/
|
|
212
|
+
export function parseMailConfig(input ) {
|
|
213
|
+
if (input === undefined || input === null) return undefined;
|
|
214
|
+
if (typeof input !== "object" || Array.isArray(input))
|
|
215
|
+
throw new Error(`${CONFIG_FILE}: mail must be an object like {"from": "studio@example.com"}`);
|
|
216
|
+
const o = input ;
|
|
217
|
+
const from = typeof o.from === "string" ? o.from.trim() : "";
|
|
218
|
+
if (!MAIL_ADDRESS.test(from) || from.length > 254)
|
|
219
|
+
throw new Error(
|
|
220
|
+
`${CONFIG_FILE}: mail.from must be a plain address like "studio@example.com" (no display name; use mail.fromName)`,
|
|
221
|
+
);
|
|
222
|
+
const name = typeof o.fromName === "string" ? o.fromName.replace(/[\r\n]+/g, " ").trim() : "";
|
|
223
|
+
return { from, ...(name ? { fromName: name.slice(0, 100) } : {}) };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** Leniently parsed, like `schedules`: rates outside 0–1 and values of the wrong type are left out. */
|
|
227
|
+
export function parseObservabilityConfig(input ) {
|
|
228
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
|
|
229
|
+
const o = input ;
|
|
230
|
+
const rate = (v ) => typeof v === "number" && Number.isFinite(v) && v >= 0 && v <= 1;
|
|
231
|
+
return {
|
|
232
|
+
...(rate(o.logs) ? { logs: o.logs } : {}),
|
|
233
|
+
...(typeof o.traces === "boolean" || rate(o.traces)
|
|
234
|
+
? { traces: o.traces }
|
|
235
|
+
: {}),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** Whether the deployment offers reader comments: on unless `comments.available` is `false`. */
|
|
240
|
+
export function commentsAvailable(cfg ) {
|
|
241
|
+
return cfg.comments?.available !== false;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function rateLimitOf(v ) {
|
|
245
|
+
if (typeof v === "boolean") return { rateLimit: v };
|
|
246
|
+
if (!v || typeof v !== "object" || Array.isArray(v)) return {};
|
|
247
|
+
const o = v ;
|
|
248
|
+
const limit =
|
|
249
|
+
Number.isInteger(o.limit) && (o.limit ) >= 1 && (o.limit ) <= 10_000
|
|
250
|
+
? { limit: o.limit }
|
|
251
|
+
: {};
|
|
252
|
+
const id = typeof o.namespaceId === "number" ? String(o.namespaceId) : o.namespaceId;
|
|
253
|
+
const namespaceId =
|
|
254
|
+
typeof id === "string" && /^[1-9]\d{0,17}$/.test(id) ? { namespaceId: id } : {};
|
|
255
|
+
return { rateLimit: { ...limit, ...namespaceId } };
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/** Whether the deployment records analytics: the block is there and not switched off. */
|
|
259
|
+
export function analyticsEnabled(cfg ) {
|
|
260
|
+
return cfg.analytics !== undefined && cfg.analytics.enabled !== false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* The defaults the Workers read (`CLOUDHAL_ANALYTICS_DEFAULTS`), `parseAnalyticsDefaults` shape:
|
|
265
|
+
* only what applies per site.
|
|
266
|
+
*/
|
|
267
|
+
export function analyticsDefaultsOf(cfg )
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
{
|
|
272
|
+
return {
|
|
273
|
+
enabled: analyticsEnabled(cfg),
|
|
274
|
+
uniqueVisitors: cfg.analytics?.uniqueVisitors ?? false,
|
|
275
|
+
vitalsOneIn: cfg.analytics?.vitalsOneIn ?? 5,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const SITE_ID = /^site_[A-Za-z0-9]{6,32}$/;
|
|
280
|
+
|
|
281
|
+
/** `sites`: valid ids, each once, the project's site first; undefined unless it adds a site. */
|
|
282
|
+
export function parseSites(siteId , input ) {
|
|
283
|
+
if (input === undefined) return undefined;
|
|
284
|
+
if (!Array.isArray(input) || !input.every((s) => typeof s === "string" && SITE_ID.test(s)))
|
|
285
|
+
throw new Error(`${CONFIG_FILE}: sites must be a list of site ids (site_…)`);
|
|
286
|
+
const sites = [...new Set([siteId, ...(input )])];
|
|
287
|
+
return sites.length > 1 ? sites : undefined;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export async function readProjectConfig(projectDir ) {
|
|
291
|
+
const file = path.join(projectDir, CONFIG_FILE);
|
|
292
|
+
let raw ;
|
|
293
|
+
try {
|
|
294
|
+
raw = await readFile(file, "utf8");
|
|
295
|
+
} catch {
|
|
296
|
+
throw new Error(`${CONFIG_FILE} not found in ${projectDir}. Run \`cloudhal init\` first.`);
|
|
297
|
+
}
|
|
298
|
+
const cfg = JSON.parse(raw) ;
|
|
299
|
+
if (typeof cfg.siteId !== "string") throw new Error(`${CONFIG_FILE}: missing siteId`);
|
|
300
|
+
const domains = cfg.domains && typeof cfg.domains === "object" ? cfg.domains : undefined;
|
|
301
|
+
const analytics = parseAnalyticsConfig(cfg.analytics);
|
|
302
|
+
const comments = parseCommentsConfig(cfg.comments);
|
|
303
|
+
const schedules = parseSchedulesConfig(cfg.schedules);
|
|
304
|
+
const mail = parseMailConfig(cfg.mail);
|
|
305
|
+
// RFC-0016: `{}` or `true` binds Workers AI; anything else leaves it off.
|
|
306
|
+
const ai = cfg.ai === (true ) || (cfg.ai && typeof cfg.ai === "object");
|
|
307
|
+
const observability = parseObservabilityConfig(cfg.observability);
|
|
308
|
+
const search = parseSearchConfig(cfg.search);
|
|
309
|
+
const sites = parseSites(cfg.siteId, cfg.sites);
|
|
310
|
+
return {
|
|
311
|
+
siteId: cfg.siteId,
|
|
312
|
+
...(sites ? { sites } : {}),
|
|
313
|
+
...(typeof cfg.installation === "string" && cfg.installation
|
|
314
|
+
? { installation: cfg.installation }
|
|
315
|
+
: {}),
|
|
316
|
+
dataDir: cfg.dataDir ?? ".cloudhal",
|
|
317
|
+
...(domains && (domains.site || domains.studio)
|
|
318
|
+
? {
|
|
319
|
+
domains: {
|
|
320
|
+
...(typeof domains.site === "string" ? { site: domains.site } : {}),
|
|
321
|
+
...(typeof domains.studio === "string" ? { studio: domains.studio } : {}),
|
|
322
|
+
},
|
|
323
|
+
}
|
|
324
|
+
: {}),
|
|
325
|
+
...(analytics ? { analytics } : {}),
|
|
326
|
+
...(comments ? { comments } : {}),
|
|
327
|
+
...(schedules ? { schedules } : {}),
|
|
328
|
+
...(mail ? { mail } : {}),
|
|
329
|
+
...(ai ? { ai: {} } : {}),
|
|
330
|
+
...(cfg.render === false ? { render: false } : {}),
|
|
331
|
+
...(observability ? { observability } : {}),
|
|
332
|
+
...(cfg.placement === "smart" ? { placement: "smart" } : {}),
|
|
333
|
+
...(search ? { search } : {}),
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
export async function writeProjectConfig(projectDir , cfg ) {
|
|
338
|
+
const file = path.join(projectDir, CONFIG_FILE);
|
|
339
|
+
// Keys this type does not own (e.g. the starter's `media`) stay as they were.
|
|
340
|
+
let kept = {};
|
|
341
|
+
try {
|
|
342
|
+
const raw = JSON.parse(await readFile(file, "utf8")) ;
|
|
343
|
+
kept = Object.fromEntries(Object.entries(raw).filter(([k]) => !OWN_KEYS.has(k)));
|
|
344
|
+
} catch {
|
|
345
|
+
// a new project
|
|
346
|
+
}
|
|
347
|
+
await writeFile(file, `${JSON.stringify({ ...cfg, ...kept }, null, 2)}\n`);
|
|
348
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { type AnalyticsCliOptions, analyticsExport, analyticsRollup, analyticsSeed, analyticsStatus, describeStatus, type ExportCliOptions, localAnalytics, type RollupCliOptions, runLocalRollups, type SeedCliOptions, } from "./commands/analytics.js";
|
|
2
|
+
export { type BuildOptions, build, type DevOptions, dev } from "./commands/astro.js";
|
|
3
|
+
export { type CommentsCliOptions, type CommentsExportCliOptions, type CommentsImportCliOptions, type CommentsImportResult, type CommentsStatusResult, commentsExportCli, commentsImportCli, commentsStatusCli, describeCommentsStatus, } from "./commands/comments.js";
|
|
4
|
+
export { runLocalCommentsJob, startLocalCommentsJob } from "./commands/comments-local.js";
|
|
5
|
+
export { type DeployOptions, type DeployResult, deploy, loadOrCreateSecrets, readDeployState, } from "./commands/deploy.js";
|
|
6
|
+
export { findWorkspaceRoot, type InitOptions, type InitResult, init } from "./commands/init.js";
|
|
7
|
+
export { describeMediaImport, type MediaImportCliOptions, mediaGc, mediaImportUrls, mediaVerify, type VerifyResult, } from "./commands/media.js";
|
|
8
|
+
export { describeMigration, type MigrateTagsOptions, migrateTags } from "./commands/migrate.js";
|
|
9
|
+
export { type OwnerTransferOptions, type OwnerTransferResult, transferOwner, } from "./commands/owner.js";
|
|
10
|
+
export { automationsEnabled, type LocalScheduler, type LocalSchedulerOptions, runLocalTick, startLocalScheduler, } from "./commands/scheduler-local.js";
|
|
11
|
+
export { describeSchedulesStatus, type SchedulesCliOptions, type SchedulesStatusReport, schedulesList, schedulesRunDue, schedulesStatus, } from "./commands/schedules.js";
|
|
12
|
+
export { resolveBuildSnapshot, type SnapshotOptions, snapshot } from "./commands/snapshot.js";
|
|
13
|
+
export { type StudioOptions, studio } from "./commands/studio.js";
|
|
14
|
+
export { pullSite, pushSite, type SyncOptions } from "./commands/sync.js";
|
|
15
|
+
export { type AnalyticsConfig, CONFIG_FILE, type CommentsConfig, commentsAvailable, type ProjectConfig, readProjectConfig, writeProjectConfig, } from "./config.js";
|
|
16
|
+
export { BUILD_DEPENDENCIES, detectPackageManager, nextSteps, type PackageManager, pnpmWorkspaceYaml, } from "./project-setup.js";
|