@stacksjs/defaults 0.70.206 → 0.70.208
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/TODO.md +21 -0
- package/ai/AGENTS.md +79 -0
- package/ai/README.md +45 -0
- package/ai/claude/launch.json +12 -0
- package/ai/skills/stacks-actions/SKILL.md +128 -0
- package/ai/skills/stacks-ai/SKILL.md +276 -0
- package/ai/skills/stacks-alias/SKILL.md +94 -0
- package/ai/skills/stacks-analytics/SKILL.md +91 -0
- package/ai/skills/stacks-api/SKILL.md +738 -0
- package/ai/skills/stacks-arrays/SKILL.md +277 -0
- package/ai/skills/stacks-auth/SKILL.md +422 -0
- package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
- package/ai/skills/stacks-brandkit/SKILL.md +811 -0
- package/ai/skills/stacks-browse/SKILL.md +127 -0
- package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
- package/ai/skills/stacks-browser/SKILL.md +145 -0
- package/ai/skills/stacks-buddy/SKILL.md +676 -0
- package/ai/skills/stacks-build/SKILL.md +163 -0
- package/ai/skills/stacks-cache/SKILL.md +125 -0
- package/ai/skills/stacks-calendar/SKILL.md +113 -0
- package/ai/skills/stacks-chat/SKILL.md +371 -0
- package/ai/skills/stacks-cli/SKILL.md +112 -0
- package/ai/skills/stacks-cloud/SKILL.md +192 -0
- package/ai/skills/stacks-cms/SKILL.md +217 -0
- package/ai/skills/stacks-collections/SKILL.md +82 -0
- package/ai/skills/stacks-commerce/SKILL.md +114 -0
- package/ai/skills/stacks-composables/SKILL.md +161 -0
- package/ai/skills/stacks-config/SKILL.md +144 -0
- package/ai/skills/stacks-configuration/SKILL.md +154 -0
- package/ai/skills/stacks-cron/SKILL.md +123 -0
- package/ai/skills/stacks-crosswind/SKILL.md +190 -0
- package/ai/skills/stacks-dashboard/SKILL.md +173 -0
- package/ai/skills/stacks-database/SKILL.md +286 -0
- package/ai/skills/stacks-datetime/SKILL.md +269 -0
- package/ai/skills/stacks-dependencies/SKILL.md +111 -0
- package/ai/skills/stacks-deploy/SKILL.md +102 -0
- package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
- package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
- package/ai/skills/stacks-design-output/SKILL.md +55 -0
- package/ai/skills/stacks-design-soft/SKILL.md +156 -0
- package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
- package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
- package/ai/skills/stacks-desktop/SKILL.md +78 -0
- package/ai/skills/stacks-development/SKILL.md +298 -0
- package/ai/skills/stacks-dns/SKILL.md +149 -0
- package/ai/skills/stacks-docs/SKILL.md +109 -0
- package/ai/skills/stacks-email/SKILL.md +236 -0
- package/ai/skills/stacks-enums/SKILL.md +100 -0
- package/ai/skills/stacks-env/SKILL.md +181 -0
- package/ai/skills/stacks-error-handling/SKILL.md +137 -0
- package/ai/skills/stacks-events/SKILL.md +228 -0
- package/ai/skills/stacks-faker/SKILL.md +158 -0
- package/ai/skills/stacks-git/SKILL.md +158 -0
- package/ai/skills/stacks-guard/SKILL.md +98 -0
- package/ai/skills/stacks-health/SKILL.md +75 -0
- package/ai/skills/stacks-http/SKILL.md +316 -0
- package/ai/skills/stacks-i18n/SKILL.md +198 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
- package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
- package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
- package/ai/skills/stacks-investigate/SKILL.md +119 -0
- package/ai/skills/stacks-jobs/SKILL.md +136 -0
- package/ai/skills/stacks-lint/SKILL.md +184 -0
- package/ai/skills/stacks-listeners/SKILL.md +99 -0
- package/ai/skills/stacks-logging/SKILL.md +78 -0
- package/ai/skills/stacks-mail/SKILL.md +120 -0
- package/ai/skills/stacks-middleware/SKILL.md +249 -0
- package/ai/skills/stacks-migrations/SKILL.md +105 -0
- package/ai/skills/stacks-models/SKILL.md +267 -0
- package/ai/skills/stacks-new-feature/SKILL.md +206 -0
- package/ai/skills/stacks-notifications/SKILL.md +210 -0
- package/ai/skills/stacks-objects/SKILL.md +205 -0
- package/ai/skills/stacks-office-hours/SKILL.md +134 -0
- package/ai/skills/stacks-orm/SKILL.md +342 -0
- package/ai/skills/stacks-path/SKILL.md +118 -0
- package/ai/skills/stacks-payments/SKILL.md +373 -0
- package/ai/skills/stacks-plan-review/SKILL.md +152 -0
- package/ai/skills/stacks-plugins/SKILL.md +149 -0
- package/ai/skills/stacks-push/SKILL.md +376 -0
- package/ai/skills/stacks-query-builder/SKILL.md +128 -0
- package/ai/skills/stacks-queue/SKILL.md +559 -0
- package/ai/skills/stacks-realtime/SKILL.md +442 -0
- package/ai/skills/stacks-redesign/SKILL.md +182 -0
- package/ai/skills/stacks-registry/SKILL.md +58 -0
- package/ai/skills/stacks-repl/SKILL.md +80 -0
- package/ai/skills/stacks-retro/SKILL.md +122 -0
- package/ai/skills/stacks-review/SKILL.md +135 -0
- package/ai/skills/stacks-router/SKILL.md +231 -0
- package/ai/skills/stacks-routes/SKILL.md +105 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
- package/ai/skills/stacks-scheduler/SKILL.md +363 -0
- package/ai/skills/stacks-search-engine/SKILL.md +112 -0
- package/ai/skills/stacks-security/SKILL.md +129 -0
- package/ai/skills/stacks-security-audit/SKILL.md +128 -0
- package/ai/skills/stacks-server/SKILL.md +458 -0
- package/ai/skills/stacks-shell/SKILL.md +62 -0
- package/ai/skills/stacks-slug/SKILL.md +87 -0
- package/ai/skills/stacks-sms/SKILL.md +385 -0
- package/ai/skills/stacks-socials/SKILL.md +303 -0
- package/ai/skills/stacks-storage/SKILL.md +576 -0
- package/ai/skills/stacks-strings/SKILL.md +416 -0
- package/ai/skills/stacks-stx/SKILL.md +176 -0
- package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
- package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
- package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
- package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
- package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
- package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
- package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
- package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
- package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
- package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
- package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
- package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
- package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
- package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
- package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
- package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
- package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
- package/ai/skills/stacks-testing/SKILL.md +129 -0
- package/ai/skills/stacks-tunnel/SKILL.md +125 -0
- package/ai/skills/stacks-types/SKILL.md +178 -0
- package/ai/skills/stacks-ui/SKILL.md +246 -0
- package/ai/skills/stacks-utils/SKILL.md +444 -0
- package/ai/skills/stacks-validation/SKILL.md +371 -0
- package/ai/skills/stacks-whois/SKILL.md +315 -0
- package/assets/world-map-data.ts +121 -0
- package/bootstrap.ts +114 -0
- package/docs/api-examples.md +46 -0
- package/docs/index.md +24 -0
- package/docs/markdown-examples.md +87 -0
- package/functions/analytics.ts +97 -0
- package/functions/api.ts +143 -0
- package/functions/auth.ts +208 -0
- package/functions/billing/payments.ts +149 -0
- package/functions/blog.ts +120 -0
- package/functions/cms/categorizables.ts +107 -0
- package/functions/cms/pages.ts +108 -0
- package/functions/cms/posts.ts +100 -0
- package/functions/cms/taggables.ts +102 -0
- package/functions/commerce/coupons.ts +128 -0
- package/functions/commerce/customers.ts +128 -0
- package/functions/commerce/gift-cards.ts +119 -0
- package/functions/commerce/orders.ts +112 -0
- package/functions/commerce/payments.ts +119 -0
- package/functions/commerce/products/categories.ts +123 -0
- package/functions/commerce/products/manufacturers.ts +123 -0
- package/functions/commerce/products/products.ts +123 -0
- package/functions/commerce/products/reviews.ts +123 -0
- package/functions/commerce/products/units.ts +123 -0
- package/functions/commerce/products/variants.ts +123 -0
- package/functions/commerce/shippings/delivery-routes.ts +123 -0
- package/functions/commerce/shippings/digital-deliveries.ts +119 -0
- package/functions/commerce/shippings/drivers.ts +123 -0
- package/functions/commerce/shippings/license-keys.ts +123 -0
- package/functions/commerce/shippings/shipping-methods.ts +123 -0
- package/functions/commerce/shippings/shipping-rates.ts +119 -0
- package/functions/commerce/shippings/shipping-zones.ts +119 -0
- package/functions/commerce/taxes.ts +119 -0
- package/functions/commerce/waitlist/products.ts +123 -0
- package/functions/commerce/waitlist/restaurants.ts +123 -0
- package/functions/craft.ts +107 -0
- package/functions/dashboard.ts +153 -0
- package/functions/inbox.ts +95 -0
- package/functions/jobs.ts +86 -0
- package/functions/monitoring/errors.ts +295 -0
- package/functions/queue.ts +111 -0
- package/functions/realtime/websockets.ts +96 -0
- package/functions/realtime.ts +52 -0
- package/functions/releases.ts +49 -0
- package/functions/search.ts +126 -0
- package/functions/toasts.ts +95 -0
- package/functions/uploads.ts +216 -0
- package/ide/.gitignore +4 -0
- package/ide/cursor/rules/auto-imports.mdc +574 -0
- package/ide/cursor/rules/code-style.mdc +12 -0
- package/ide/cursor/rules/documentation.mdc +9 -0
- package/ide/cursor/rules/error-handling-validation.mdc +11 -0
- package/ide/cursor/rules/key-conventions.mdc +11 -0
- package/ide/cursor/rules/project-structure.mdc +169 -0
- package/ide/cursor/rules/readme.mdc +318 -0
- package/ide/cursor/rules/syntax-formatting.mdc +9 -0
- package/ide/cursor/rules/testing.mdc +10 -0
- package/ide/cursor/rules/typescript.mdc +9 -0
- package/ide/cursor/rules/ui-styling.mdc +0 -0
- package/ide/dictionary.txt +397 -0
- package/ide/jetbrains/.fleet/settings.json +4 -0
- package/ide/jetbrains/.idea/.gitignore +5 -0
- package/ide/jetbrains/.idea/.name +1 -0
- package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
- package/ide/jetbrains/.idea/modules.xml +8 -0
- package/ide/jetbrains/.idea/stacks.iml +22 -0
- package/ide/jetbrains/.idea/vcs.xml +6 -0
- package/ide/jetbrains/.idea/webResources.xml +14 -0
- package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
- package/ide/jetbrains/installed.txt +4 -0
- package/ide/jetbrains/options/github-copilot.xml +5 -0
- package/ide/jetbrains/options/nodejs.xml +7 -0
- package/ide/jetbrains/options/templates.xml +124 -0
- package/ide/jetbrains/templates/JavaScript.xml +6 -0
- package/ide/jetbrains/templates/Stacks.xml +8 -0
- package/ide/vscode/.vscode/README.md +23 -0
- package/ide/vscode/.vscode/extensions.json +5 -0
- package/ide/vscode/.vscode/settings.json +176 -0
- package/ide/vscode/.vscode/stacks.code-snippets +181 -0
- package/ide/vscode/LICENSE.md +21 -0
- package/ide/vscode/README.md +36 -0
- package/ide/vscode/logo.png +0 -0
- package/ide/vscode/package.json +79 -0
- package/ide/zed/.zed/settings.json +139 -0
- package/lang/README.md +28 -0
- package/lang/de.yml +14 -0
- package/lang/en.yml +15 -0
- package/package.json +19 -3
- package/project/bootstrap +161 -0
- package/project/buddy +175 -0
- package/project/storage/framework/tsconfig.app.json +50 -0
- package/project/storage/framework/tsconfig.base.json +58 -0
- package/routes/core.ts +78 -0
- package/routes/dashboard-api.ts +233 -0
- package/routes/dashboard.ts +739 -0
- package/routes/email.ts +129 -0
- package/stores/[name].stx +16 -0
- package/stores/git.ts +71 -0
- package/stores/payment.ts +474 -0
- package/stores/queue.ts +43 -0
- package/stores/user.ts +29 -0
- package/stx-components-plugin.ts +25 -0
- package/styles/design-tokens.css +597 -0
- package/types/dashboard.ts +70 -0
- package/types/defaults.ts +438 -0
- package/vcs/github/CODE_OF_CONDUCT.md +83 -0
- package/vcs/github/CONTRIBUTING.md +187 -0
- package/vcs/github/EXPLANATIONS.md +41 -0
- package/vcs/github/FUNDING.yml +1 -0
- package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
- package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
- package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
- package/vcs/github/SECURITY.md +70 -0
- package/vcs/github/renovate.json +5 -0
- package/vcs/github/stale.yml +14 -0
- package/vcs/github/workflows/README.md +16 -0
- package/vcs/github/workflows/ci.yml +114 -0
- package/vcs/github/workflows/export-size.yml +25 -0
- package/vcs/github/workflows/labeler.yml +13 -0
- package/vcs/github/workflows/release.yml +219 -0
- package/views/[...all].stx +8 -0
- package/views/about.md +3 -0
- package/views/auth/login.stx +1 -0
- package/views/auth/signup.stx +85 -0
- package/views/dashboard/.discovered-models.json +542 -0
- package/views/dashboard/AUDIT.md +904 -0
- package/views/dashboard/[...all].stx +89 -0
- package/views/dashboard/access-tokens/index.stx +177 -0
- package/views/dashboard/actions/index.stx +129 -0
- package/views/dashboard/analytics/blog/index.stx +356 -0
- package/views/dashboard/analytics/browsers/index.stx +263 -0
- package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
- package/views/dashboard/analytics/commerce/web/index.stx +379 -0
- package/views/dashboard/analytics/countries/index.stx +289 -0
- package/views/dashboard/analytics/devices/index.stx +305 -0
- package/views/dashboard/analytics/events/index.stx +536 -0
- package/views/dashboard/analytics/index.stx +88 -0
- package/views/dashboard/analytics/marketing/index.stx +315 -0
- package/views/dashboard/analytics/pages/index.stx +271 -0
- package/views/dashboard/analytics/referrers/index.stx +319 -0
- package/views/dashboard/analytics/web/index.stx +356 -0
- package/views/dashboard/buddy/index.stx +198 -0
- package/views/dashboard/ci/index.stx +462 -0
- package/views/dashboard/cloud/index.stx +452 -0
- package/views/dashboard/commands/index.stx +295 -0
- package/views/dashboard/commerce/categories/index.stx +406 -0
- package/views/dashboard/commerce/coupons/index.stx +485 -0
- package/views/dashboard/commerce/customers/index.stx +410 -0
- package/views/dashboard/commerce/dashboard/index.stx +287 -0
- package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
- package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
- package/views/dashboard/commerce/delivery/drivers.stx +397 -0
- package/views/dashboard/commerce/delivery/index.stx +18 -0
- package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
- package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
- package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
- package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
- package/views/dashboard/commerce/delivery/tabs.ts +25 -0
- package/views/dashboard/commerce/gift-cards/index.stx +561 -0
- package/views/dashboard/commerce/manufacturers/index.stx +308 -0
- package/views/dashboard/commerce/orders/index.stx +247 -0
- package/views/dashboard/commerce/payments/index.stx +535 -0
- package/views/dashboard/commerce/pos/index.stx +653 -0
- package/views/dashboard/commerce/printers/devices/index.stx +273 -0
- package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
- package/views/dashboard/commerce/products/detail.stx +563 -0
- package/views/dashboard/commerce/products/index.stx +370 -0
- package/views/dashboard/commerce/reviews/index.stx +656 -0
- package/views/dashboard/commerce/reviews/index.ts +0 -0
- package/views/dashboard/commerce/taxes/index.stx +377 -0
- package/views/dashboard/commerce/units/index.stx +317 -0
- package/views/dashboard/commerce/variants/index.stx +319 -0
- package/views/dashboard/commerce/waitlist/products.stx +942 -0
- package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
- package/views/dashboard/components/index.stx +330 -0
- package/views/dashboard/composables/index.ts +19 -0
- package/views/dashboard/composables/useChart.ts +77 -0
- package/views/dashboard/composables/useNavigation.ts +99 -0
- package/views/dashboard/composables/useRole.ts +58 -0
- package/views/dashboard/composables/useTheme.ts +74 -0
- package/views/dashboard/content/authors/index.stx +171 -0
- package/views/dashboard/content/blog/index.stx +493 -0
- package/views/dashboard/content/categories/index.stx +169 -0
- package/views/dashboard/content/comments/index.stx +189 -0
- package/views/dashboard/content/dashboard.stx +383 -0
- package/views/dashboard/content/files/index.stx +706 -0
- package/views/dashboard/content/pages/index.stx +174 -0
- package/views/dashboard/content/posts/index.stx +269 -0
- package/views/dashboard/content/seo/index.stx +240 -0
- package/views/dashboard/content/tags/index.stx +167 -0
- package/views/dashboard/data/activity/index.stx +261 -0
- package/views/dashboard/data/dashboard/index.stx +116 -0
- package/views/dashboard/data/subscribers.stx +270 -0
- package/views/dashboard/data/teams.stx +275 -0
- package/views/dashboard/data/users.stx +279 -0
- package/views/dashboard/dependencies/index.stx +178 -0
- package/views/dashboard/deployments/[id].stx +234 -0
- package/views/dashboard/deployments/index.stx +9 -0
- package/views/dashboard/dns/index.stx +163 -0
- package/views/dashboard/environment/index.stx +283 -0
- package/views/dashboard/errors/index.stx +274 -0
- package/views/dashboard/forgot-password.stx +57 -0
- package/views/dashboard/functions/index.stx +159 -0
- package/views/dashboard/health/index.stx +248 -0
- package/views/dashboard/inbox/activity.stx +350 -0
- package/views/dashboard/inbox/index.stx +452 -0
- package/views/dashboard/inbox/settings.stx +290 -0
- package/views/dashboard/index.stx +252 -0
- package/views/dashboard/insights/index.stx +529 -0
- package/views/dashboard/jobs/[id].stx +430 -0
- package/views/dashboard/jobs/history.stx +222 -0
- package/views/dashboard/jobs/index.stx +214 -0
- package/views/dashboard/kanban/[id].stx +899 -0
- package/views/dashboard/kanban/index.stx +260 -0
- package/views/dashboard/layouts/default.stx +565 -0
- package/views/dashboard/layouts/guest.stx +10 -0
- package/views/dashboard/login.stx +48 -0
- package/views/dashboard/logs/index.stx +540 -0
- package/views/dashboard/mailboxes/index.stx +149 -0
- package/views/dashboard/management/permissions/index.stx +490 -0
- package/views/dashboard/marketing/campaigns/index.stx +604 -0
- package/views/dashboard/marketing/lists/index.stx +514 -0
- package/views/dashboard/marketing/reviews/index.stx +475 -0
- package/views/dashboard/marketing/social-posts/index.stx +560 -0
- package/views/dashboard/models/[model].stx +195 -0
- package/views/dashboard/models/index.stx +159 -0
- package/views/dashboard/monitoring/errors/index.stx +415 -0
- package/views/dashboard/notifications/dashboard.stx +383 -0
- package/views/dashboard/notifications/email.stx +336 -0
- package/views/dashboard/notifications/history.stx +373 -0
- package/views/dashboard/notifications/sms.stx +332 -0
- package/views/dashboard/packages/index.stx +195 -0
- package/views/dashboard/queries/[id].stx +381 -0
- package/views/dashboard/queries/history.stx +227 -0
- package/views/dashboard/queries/index.stx +335 -0
- package/views/dashboard/queries/slow.stx +318 -0
- package/views/dashboard/queue/index.stx +427 -0
- package/views/dashboard/realtime/index.stx +429 -0
- package/views/dashboard/register.stx +46 -0
- package/views/dashboard/releases/index.stx +389 -0
- package/views/dashboard/requests/index.stx +462 -0
- package/views/dashboard/serverless/index.stx +475 -0
- package/views/dashboard/servers/[id].stx +299 -0
- package/views/dashboard/servers/index.stx +483 -0
- package/views/dashboard/settings/billing.stx +50 -0
- package/views/dashboard/settings/index.stx +256 -0
- package/views/dashboard/settings/mail.stx +252 -0
- package/views/dashboard/stores/auth.ts +123 -0
- package/views/dashboard/stores/ci.ts +342 -0
- package/views/dashboard/stores/index.ts +129 -0
- package/views/dashboard/stores/kanban.ts +723 -0
- package/views/dashboard/stores/rbac.ts +350 -0
- package/views/dashboard/stx.config.ts +34 -0
- package/views/dashboard/teams/[id].stx +170 -0
- package/views/forum/category.stx +92 -0
- package/views/forum/index.stx +209 -0
- package/views/forum/new-topic.stx +113 -0
- package/views/forum/profile.stx +1 -0
- package/views/forum/topic.stx +143 -0
- package/views/hello-world/[name].stx +47 -0
- package/views/index.stx +21 -0
- package/views/system-tray/index.stx +147 -0
package/package.json
CHANGED
|
@@ -2,15 +2,31 @@
|
|
|
2
2
|
"name": "@stacksjs/defaults",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.70.
|
|
6
|
-
"description": "
|
|
5
|
+
"version": "0.70.208",
|
|
6
|
+
"description": "The complete managed Stacks application scaffold, including runtime defaults, AI guidance, editor metadata, and npm-backed project support files.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"homepage": "https://github.com/stacksjs/stacks/tree/main/storage/framework/defaults",
|
|
10
10
|
"files": [
|
|
11
11
|
"README.md",
|
|
12
|
+
"TODO.md",
|
|
13
|
+
"ai",
|
|
12
14
|
"resources",
|
|
13
|
-
"app"
|
|
15
|
+
"app",
|
|
16
|
+
"assets",
|
|
17
|
+
"docs",
|
|
18
|
+
"functions",
|
|
19
|
+
"ide",
|
|
20
|
+
"lang",
|
|
21
|
+
"routes",
|
|
22
|
+
"stores",
|
|
23
|
+
"styles",
|
|
24
|
+
"types",
|
|
25
|
+
"vcs",
|
|
26
|
+
"views",
|
|
27
|
+
"bootstrap.ts",
|
|
28
|
+
"stx-components-plugin.ts",
|
|
29
|
+
"project"
|
|
14
30
|
],
|
|
15
31
|
"exports": {
|
|
16
32
|
"./*": "./*",
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
## To learn more, visit https://stacksjs.com/docs/guide/bootstrap
|
|
5
|
+
## Usage:
|
|
6
|
+
## ./bootstrap
|
|
7
|
+
## curl -fsSL https://stacksjs.com/install | sh
|
|
8
|
+
## curl -fsSL https://stacksjs.com/install | sh -s -- my-project
|
|
9
|
+
|
|
10
|
+
ASSUME_YES=0
|
|
11
|
+
PROJECT_NAME=""
|
|
12
|
+
|
|
13
|
+
while [ "$#" -gt 0 ]; do
|
|
14
|
+
case "$1" in
|
|
15
|
+
-y|--yes) ASSUME_YES=1 ;;
|
|
16
|
+
-h|--help)
|
|
17
|
+
echo "Usage: ./bootstrap [--yes] [project-name]"
|
|
18
|
+
exit 0
|
|
19
|
+
;;
|
|
20
|
+
-*)
|
|
21
|
+
echo "Unknown option: $1"
|
|
22
|
+
exit 1
|
|
23
|
+
;;
|
|
24
|
+
*)
|
|
25
|
+
if [ -n "$PROJECT_NAME" ]; then
|
|
26
|
+
echo "Only one project name may be supplied."
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
PROJECT_NAME="$1"
|
|
30
|
+
;;
|
|
31
|
+
esac
|
|
32
|
+
shift
|
|
33
|
+
done
|
|
34
|
+
|
|
35
|
+
TEMP_DIR=""
|
|
36
|
+
cleanup() {
|
|
37
|
+
if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then
|
|
38
|
+
rm -rf "$TEMP_DIR"
|
|
39
|
+
fi
|
|
40
|
+
}
|
|
41
|
+
trap cleanup EXIT INT TERM
|
|
42
|
+
|
|
43
|
+
confirm_install() {
|
|
44
|
+
if [ "$ASSUME_YES" -eq 1 ]; then
|
|
45
|
+
return 0
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
if [ ! -r /dev/tty ]; then
|
|
49
|
+
echo "Pantry is required to provision Bun and the local toolchain."
|
|
50
|
+
echo "Run again with --yes to approve its installation."
|
|
51
|
+
return 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
printf "Pantry will install Bun and the local development toolchain. Continue? [Y/n] " > /dev/tty
|
|
55
|
+
IFS= read -r answer < /dev/tty || answer=""
|
|
56
|
+
case "$answer" in
|
|
57
|
+
""|y|Y|yes|YES|Yes) return 0 ;;
|
|
58
|
+
*) echo "Installation cancelled."; return 1 ;;
|
|
59
|
+
esac
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# --- Pantry installer (inlined so it works via curl-pipe-bash before clone) ---
|
|
63
|
+
ensure_pantry() {
|
|
64
|
+
if command -v pantry >/dev/null 2>&1; then
|
|
65
|
+
return
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
confirm_install || exit 1
|
|
69
|
+
|
|
70
|
+
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
71
|
+
ARCH=$(uname -m)
|
|
72
|
+
case "$ARCH" in
|
|
73
|
+
x86_64|amd64) ARCH="x64" ;;
|
|
74
|
+
arm64|aarch64) ARCH="arm64" ;;
|
|
75
|
+
esac
|
|
76
|
+
|
|
77
|
+
INSTALL_DIR="${HOME}/.local/bin"
|
|
78
|
+
mkdir -p "$INSTALL_DIR"
|
|
79
|
+
|
|
80
|
+
ZIP="pantry-${OS}-${ARCH}.zip"
|
|
81
|
+
URL="https://github.com/home-lang/pantry/releases/latest/download/${ZIP}"
|
|
82
|
+
|
|
83
|
+
echo "Downloading Pantry from ${URL}..."
|
|
84
|
+
TEMP_DIR=$(mktemp -d)
|
|
85
|
+
curl -fsSL -o "${TEMP_DIR}/${ZIP}" "$URL"
|
|
86
|
+
unzip -oq "${TEMP_DIR}/${ZIP}" -d "$INSTALL_DIR"
|
|
87
|
+
chmod +x "${INSTALL_DIR}/pantry"
|
|
88
|
+
rm -rf "$TEMP_DIR"
|
|
89
|
+
TEMP_DIR=""
|
|
90
|
+
|
|
91
|
+
export PATH="${INSTALL_DIR}:${PATH}"
|
|
92
|
+
echo "Pantry installed to ${INSTALL_DIR}/pantry"
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
# --- Main ---
|
|
96
|
+
|
|
97
|
+
# If we are outside a project, create one from the latest stable release.
|
|
98
|
+
if [ ! -d "storage/framework/core" ]; then
|
|
99
|
+
if [ -z "$PROJECT_NAME" ]; then
|
|
100
|
+
PROJECT_NAME="${STACKS_PROJECT:-stacks}"
|
|
101
|
+
|
|
102
|
+
if [ -r /dev/tty ]; then
|
|
103
|
+
printf "Project directory [%s]: " "$PROJECT_NAME" > /dev/tty
|
|
104
|
+
IFS= read -r requested_name < /dev/tty || requested_name=""
|
|
105
|
+
if [ -n "$requested_name" ]; then
|
|
106
|
+
PROJECT_NAME="$requested_name"
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
if [ -e "$PROJECT_NAME" ]; then
|
|
112
|
+
echo "Path '$PROJECT_NAME' already exists. Please use a different name."
|
|
113
|
+
exit 1
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
RELEASE_TAG="${STACKS_VERSION:-}"
|
|
117
|
+
if [ -z "$RELEASE_TAG" ]; then
|
|
118
|
+
RELEASE_URL=$(curl -fsSL -o /dev/null -w '%{url_effective}' "https://github.com/stacksjs/stacks/releases/latest")
|
|
119
|
+
RELEASE_TAG=${RELEASE_URL##*/}
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
case "$RELEASE_TAG" in
|
|
123
|
+
v*) ;;
|
|
124
|
+
*) RELEASE_TAG="v${RELEASE_TAG}" ;;
|
|
125
|
+
esac
|
|
126
|
+
|
|
127
|
+
echo "Downloading Stacks ${RELEASE_TAG}..."
|
|
128
|
+
TEMP_DIR=$(mktemp -d)
|
|
129
|
+
curl -fsSL -o "${TEMP_DIR}/stacks.zip" "https://github.com/stacksjs/stacks/archive/refs/tags/${RELEASE_TAG}.zip"
|
|
130
|
+
unzip -q "${TEMP_DIR}/stacks.zip" -d "$TEMP_DIR"
|
|
131
|
+
ARCHIVE_DIR="${TEMP_DIR}/stacks-${RELEASE_TAG#v}"
|
|
132
|
+
|
|
133
|
+
if [ ! -d "$ARCHIVE_DIR" ]; then
|
|
134
|
+
echo "The Stacks release archive had an unexpected layout."
|
|
135
|
+
exit 1
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
mv "$ARCHIVE_DIR" "$PROJECT_NAME"
|
|
139
|
+
rm -rf "$TEMP_DIR"
|
|
140
|
+
TEMP_DIR=""
|
|
141
|
+
cd "$PROJECT_NAME"
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
# Detect if we're in a Stacks project
|
|
145
|
+
if [ ! -d "storage/framework/core" ]; then
|
|
146
|
+
echo "Error: not inside a Stacks project."
|
|
147
|
+
exit 1
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
PROJECT_ROOT=$(pwd)
|
|
151
|
+
|
|
152
|
+
ensure_pantry
|
|
153
|
+
|
|
154
|
+
echo "Bootstrapping Stacks project..."
|
|
155
|
+
"${PROJECT_ROOT}/buddy" setup --skip-aws
|
|
156
|
+
|
|
157
|
+
echo ""
|
|
158
|
+
echo "Project bootstrapped successfully!"
|
|
159
|
+
if [ -n "$PROJECT_NAME" ]; then
|
|
160
|
+
echo "Run 'cd $PROJECT_NAME && ./buddy dev' to start the dev server."
|
|
161
|
+
fi
|
package/project/buddy
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
ROOT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd)
|
|
5
|
+
PANTRY_LOCAL_BIN="${ROOT_DIR}/pantry/.bin"
|
|
6
|
+
PANTRY_DIR="${ROOT_DIR}/pantry"
|
|
7
|
+
USER_LOCAL_BIN="${HOME}/.local/bin"
|
|
8
|
+
PANTRY_INSTALLER="${ROOT_DIR}/storage/framework/scripts/pantry-install"
|
|
9
|
+
PANTRY_SETUP_DONE="${PANTRY_DIR}/.postsetup-done"
|
|
10
|
+
PANTRY_BOOTSTRAP_TIMEOUT_SECONDS="${PANTRY_BOOTSTRAP_TIMEOUT_SECONDS:-600}"
|
|
11
|
+
PANTRY_DEPENDENCIES_TIMEOUT_SECONDS="${PANTRY_DEPENDENCIES_TIMEOUT_SECONDS:-1200}"
|
|
12
|
+
|
|
13
|
+
# Resolve which CLI entrypoint to invoke. Resolution order matches the
|
|
14
|
+
# action-runner fallback chain in `@stacksjs/actions`:
|
|
15
|
+
#
|
|
16
|
+
# 1. `storage/framework/core/buddy/src/cli.ts` — userland override (legacy
|
|
17
|
+
# "framework lives in the project" layout). Kept FIRST so projects that
|
|
18
|
+
# have published buddy via `buddy publish:core buddy` still win.
|
|
19
|
+
# 2. `node_modules/@stacksjs/buddy/src/cli.ts` — installed package, TS source
|
|
20
|
+
# (workspace symlink or a real npm install with `src/` shipped).
|
|
21
|
+
# 3. `node_modules/@stacksjs/buddy/dist/cli.js` — published JS-only build.
|
|
22
|
+
#
|
|
23
|
+
# If none of these are present the script bails with a clear message instead
|
|
24
|
+
# of `bun` exploding on a missing file.
|
|
25
|
+
resolve_buddy_entry() {
|
|
26
|
+
for candidate in \
|
|
27
|
+
"${ROOT_DIR}/storage/framework/core/buddy/src/cli.ts" \
|
|
28
|
+
"${ROOT_DIR}/node_modules/@stacksjs/buddy/src/cli.ts" \
|
|
29
|
+
"${ROOT_DIR}/node_modules/@stacksjs/buddy/dist/cli.js" \
|
|
30
|
+
; do
|
|
31
|
+
if [ -f "${candidate}" ]; then
|
|
32
|
+
echo "${candidate}"
|
|
33
|
+
return 0
|
|
34
|
+
fi
|
|
35
|
+
done
|
|
36
|
+
return 1
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if ! BUDDY_ENTRY=$(resolve_buddy_entry); then
|
|
40
|
+
echo "buddy: could not locate CLI entrypoint." >&2
|
|
41
|
+
echo " Tried: storage/framework/core/buddy/src/cli.ts, node_modules/@stacksjs/buddy/{src/cli.ts,dist/cli.js}." >&2
|
|
42
|
+
echo " Run \`bun install\` or \`buddy publish:core buddy\` to make the CLI available." >&2
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
run_with_timeout() {
|
|
47
|
+
timeout_seconds="$1"
|
|
48
|
+
shift
|
|
49
|
+
timeout_flag="${TMPDIR:-/tmp}/buddy-timeout-$$"
|
|
50
|
+
rm -f "${timeout_flag}"
|
|
51
|
+
|
|
52
|
+
"$@" &
|
|
53
|
+
cmd_pid=$!
|
|
54
|
+
|
|
55
|
+
(
|
|
56
|
+
sleep "${timeout_seconds}"
|
|
57
|
+
|
|
58
|
+
if kill -0 "${cmd_pid}" 2>/dev/null; then
|
|
59
|
+
echo "Command timed out after ${timeout_seconds}s: $*" >&2
|
|
60
|
+
: > "${timeout_flag}"
|
|
61
|
+
kill "${cmd_pid}" 2>/dev/null || true
|
|
62
|
+
sleep 2
|
|
63
|
+
kill -9 "${cmd_pid}" 2>/dev/null || true
|
|
64
|
+
fi
|
|
65
|
+
) &
|
|
66
|
+
watchdog_pid=$!
|
|
67
|
+
|
|
68
|
+
wait "${cmd_pid}"
|
|
69
|
+
status=$?
|
|
70
|
+
|
|
71
|
+
kill "${watchdog_pid}" 2>/dev/null || true
|
|
72
|
+
wait "${watchdog_pid}" 2>/dev/null || true
|
|
73
|
+
|
|
74
|
+
if [ -f "${timeout_flag}" ]; then
|
|
75
|
+
rm -f "${timeout_flag}"
|
|
76
|
+
return 124
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
rm -f "${timeout_flag}"
|
|
80
|
+
return "${status}"
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
is_usable_bun() {
|
|
84
|
+
[ -x "$1" ] && sh -c '"$1" --version >/dev/null 2>&1' sh "$1" 2>/dev/null
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Run buddy with the correct PATH and NODE_PATH for pantry resolution.
|
|
88
|
+
run_buddy() {
|
|
89
|
+
BUN_CMD="$1"
|
|
90
|
+
shift
|
|
91
|
+
|
|
92
|
+
# When the framework SOURCE is vendored here (storage/framework/core) AND the
|
|
93
|
+
# installed @stacksjs/* packages actually ship src (a workspace/source-linked
|
|
94
|
+
# checkout), resolve them from src via the `development` export condition so the
|
|
95
|
+
# monorepo runs build-free (a fresh checkout has no dist yet).
|
|
96
|
+
#
|
|
97
|
+
# Guard on a representative package having src: an app that vendors the core but
|
|
98
|
+
# installs the PUBLISHED (dist-only) packages has no src, so the `development`
|
|
99
|
+
# condition would resolve to ./src/* files that were never shipped (`error:
|
|
100
|
+
# preload not found "@stacksjs/env/plugin.js"`, then Cannot-find-module for
|
|
101
|
+
# every other import). In that case omit the flag and let bun/import/default
|
|
102
|
+
# resolve the dist.
|
|
103
|
+
CONDITIONS=""
|
|
104
|
+
if [ -d "${ROOT_DIR}/storage/framework/core" ] && [ -f "${ROOT_DIR}/node_modules/@stacksjs/env/src/index.ts" ]; then
|
|
105
|
+
CONDITIONS="--conditions development"
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# Only prepend the pantry dir to NODE_PATH when the setup completed: for a
|
|
109
|
+
# node_modules app there is no ./pantry, and pointing NODE_PATH at a missing
|
|
110
|
+
# (or half-installed, after a failed bootstrap) dir makes bun miss
|
|
111
|
+
# node_modules (e.g. `Cannot find module '@stacksjs/env'` from a preload).
|
|
112
|
+
if [ -f "${PANTRY_SETUP_DONE}" ]; then
|
|
113
|
+
exec env PATH="${PANTRY_LOCAL_BIN}:${USER_LOCAL_BIN}:${PATH}" NODE_PATH="${PANTRY_DIR}:${NODE_PATH:-}" "${BUN_CMD}" ${CONDITIONS} "${BUDDY_ENTRY}" "$@"
|
|
114
|
+
fi
|
|
115
|
+
exec env PATH="${PANTRY_LOCAL_BIN}:${USER_LOCAL_BIN}:${PATH}" "${BUN_CMD}" ${CONDITIONS} "${BUDDY_ENTRY}" "$@"
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
# Fast path: if pantry is already set up, run immediately. We deliberately
|
|
119
|
+
# DO NOT run `pantry install` here — re-installing on every invocation
|
|
120
|
+
# burned ~1s of `buddy --help` startup time (and made shell completion
|
|
121
|
+
# unusable). Once the pantry directory exists and a bun is on PATH, we
|
|
122
|
+
# trust that state until the user explicitly runs `bun install` or
|
|
123
|
+
# `buddy install`. To force a refresh, set STACKS_FORCE_PANTRY=1.
|
|
124
|
+
if is_usable_bun "${PANTRY_LOCAL_BIN}/bun" && [ "${STACKS_FORCE_PANTRY:-}" != "1" ]; then
|
|
125
|
+
run_buddy "${PANTRY_LOCAL_BIN}/bun" "$@"
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
if [ -d "${PANTRY_DIR}" ] && command -v bun >/dev/null 2>&1 && [ "${STACKS_FORCE_PANTRY:-}" != "1" ]; then
|
|
129
|
+
run_buddy "$(command -v bun)" "$@"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
# node_modules layout (framework from npm, not vendored): there is no per-project
|
|
133
|
+
# pantry to bootstrap and none is needed to run the CLI — if a bun runtime is on
|
|
134
|
+
# PATH and the pantry installer is absent, just use it.
|
|
135
|
+
if command -v bun >/dev/null 2>&1 && [ "${STACKS_FORCE_PANTRY:-}" != "1" ] && [ ! -x "${PANTRY_INSTALLER}" ]; then
|
|
136
|
+
run_buddy "$(command -v bun)" "$@"
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Pantry not set up (or an earlier bootstrap died halfway) - bootstrap it.
|
|
140
|
+
# Every step is failure-tolerant on purpose: a pantry download/install hiccup
|
|
141
|
+
# (a registry outage, or an unpublished release winning the race against CI)
|
|
142
|
+
# must not abort this script under `set -e` before the bun fallbacks below
|
|
143
|
+
# run. With a bun on PATH and node_modules present, the CLI runs identically
|
|
144
|
+
# without pantry.
|
|
145
|
+
pantry_bootstrap_failed=0
|
|
146
|
+
if ! command -v pantry >/dev/null 2>&1; then
|
|
147
|
+
if [ -x "${PANTRY_INSTALLER}" ]; then
|
|
148
|
+
run_with_timeout "${PANTRY_BOOTSTRAP_TIMEOUT_SECONDS}" "${PANTRY_INSTALLER}" || pantry_bootstrap_failed=1
|
|
149
|
+
export PATH="${USER_LOCAL_BIN}:${PATH}"
|
|
150
|
+
else
|
|
151
|
+
echo "Pantry installer not found at ${PANTRY_INSTALLER}" >&2
|
|
152
|
+
pantry_bootstrap_failed=1
|
|
153
|
+
fi
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
if command -v pantry >/dev/null 2>&1; then
|
|
157
|
+
run_with_timeout "${PANTRY_DEPENDENCIES_TIMEOUT_SECONDS}" pantry install || pantry_bootstrap_failed=1
|
|
158
|
+
else
|
|
159
|
+
pantry_bootstrap_failed=1
|
|
160
|
+
fi
|
|
161
|
+
|
|
162
|
+
# After install, try again
|
|
163
|
+
if is_usable_bun "${PANTRY_LOCAL_BIN}/bun"; then
|
|
164
|
+
run_buddy "${PANTRY_LOCAL_BIN}/bun" "$@"
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
if command -v bun >/dev/null 2>&1; then
|
|
168
|
+
if [ "${pantry_bootstrap_failed}" = "1" ]; then
|
|
169
|
+
echo "buddy: pantry bootstrap incomplete; falling back to the bun on PATH." >&2
|
|
170
|
+
fi
|
|
171
|
+
run_buddy "$(command -v bun)" "$@"
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
echo "Pantry did not provide a local bun runtime." >&2
|
|
175
|
+
exit 1
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Framework-provided defaults for YOUR application code: `app/`, `config/`,
|
|
3
|
+
// `resources/` and `routes/`. The project's root `tsconfig.json` extends this
|
|
4
|
+
// file, so everything set here applies unless the root overrides it.
|
|
5
|
+
//
|
|
6
|
+
// Framework internals are checked separately, by `tsconfig.framework.json`.
|
|
7
|
+
"extends": "./tsconfig.base.json",
|
|
8
|
+
"compilerOptions": {
|
|
9
|
+
// App code runs on both the server and in the browser (stx templates,
|
|
10
|
+
// stores, composables), so DOM types sit on top of the base `esnext` lib.
|
|
11
|
+
"lib": ["esnext", "dom"],
|
|
12
|
+
"rootDir": "../..",
|
|
13
|
+
// Kept inside the framework's own cache rather than `node_modules/.cache`,
|
|
14
|
+
// so the incremental build survives a `bun install` and never lands in a
|
|
15
|
+
// hoisted or symlinked `node_modules` shared with another project.
|
|
16
|
+
"tsBuildInfoFile": "./.cache/typescript/app.tsbuildinfo",
|
|
17
|
+
"paths": {
|
|
18
|
+
"@stacksjs/actions/*": ["./core/actions/src/*"],
|
|
19
|
+
"@stacksjs/*": ["./core/*/src"],
|
|
20
|
+
"stacks/*": ["./core/*/src"],
|
|
21
|
+
"buddy": ["./core/buddy/src/index.ts"],
|
|
22
|
+
"buddy/*": ["./core/buddy/src/*"],
|
|
23
|
+
"Actions/*": ["../../app/Actions/*"],
|
|
24
|
+
"Commands/*": ["../../app/Commands/*"],
|
|
25
|
+
"Jobs/*": ["../../app/Jobs/*"],
|
|
26
|
+
"Middleware/*": ["../../app/Middleware/*"],
|
|
27
|
+
"Models/*": ["../../app/Models/*"],
|
|
28
|
+
"Notifications/*": ["../../app/Notifications/*"],
|
|
29
|
+
"~/*": ["../../*"],
|
|
30
|
+
"@/*": ["../../resources/*"]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
// Only the four directories you author, plus the generated framework
|
|
34
|
+
// declarations (auto-imports, ORM globals, model attributes) they rely on.
|
|
35
|
+
// Keeping this list tight is the single biggest lever on check time.
|
|
36
|
+
"include": [
|
|
37
|
+
"./types/**/*.d.ts",
|
|
38
|
+
"../../app/**/*.ts",
|
|
39
|
+
"../../config/**/*.ts",
|
|
40
|
+
"../../resources/**/*.ts",
|
|
41
|
+
"../../routes/**/*.ts"
|
|
42
|
+
],
|
|
43
|
+
"exclude": [
|
|
44
|
+
"../../cloud/**",
|
|
45
|
+
"../../dist/**",
|
|
46
|
+
"../../node_modules/**",
|
|
47
|
+
"../../pantry/**",
|
|
48
|
+
"../../resources/assets/**"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
// The single source of truth for TypeScript defaults across a Stacks project.
|
|
3
|
+
//
|
|
4
|
+
// Nothing extends this file by accident: editors only auto-discover
|
|
5
|
+
// `tsconfig.json`, so this base is loaded exclusively through `extends`. It
|
|
6
|
+
// deliberately carries compiler options ONLY - `include`, `exclude` and
|
|
7
|
+
// `paths` are per-project concerns and live in the configs that extend it
|
|
8
|
+
// (`tsconfig.app.json`, `tsconfig.framework.json`, `core/tsconfig.json`).
|
|
9
|
+
//
|
|
10
|
+
// Every option below is written out explicitly rather than inherited, so the
|
|
11
|
+
// full default set is readable in one place and a project can override any
|
|
12
|
+
// single line without having to rediscover what the rest of them were.
|
|
13
|
+
//
|
|
14
|
+
// Type checking runs on TypeScript 7 (`tsc`, the native Go compiler). Options
|
|
15
|
+
// dropped in 7.0 - `baseUrl`, `importsNotUsedAsValues`, `preserveValueImports`,
|
|
16
|
+
// `suppressImplicitAnyIndexErrors`, `out`, `charset` - are intentionally absent.
|
|
17
|
+
// Path mappings resolve relative to the config file that declares them, which
|
|
18
|
+
// is why no `baseUrl` is needed.
|
|
19
|
+
"compilerOptions": {
|
|
20
|
+
/* Language and environment */
|
|
21
|
+
"target": "esnext",
|
|
22
|
+
"lib": ["esnext"],
|
|
23
|
+
"jsx": "preserve",
|
|
24
|
+
|
|
25
|
+
/* Modules */
|
|
26
|
+
"module": "esnext",
|
|
27
|
+
"moduleDetection": "force",
|
|
28
|
+
"moduleResolution": "bundler",
|
|
29
|
+
"resolveJsonModule": true,
|
|
30
|
+
"allowImportingTsExtensions": true,
|
|
31
|
+
// Only Bun's ambient types are loaded automatically. Anything else has to
|
|
32
|
+
// be imported explicitly, which keeps tsgo from scanning every @types
|
|
33
|
+
// package it can reach.
|
|
34
|
+
"types": ["bun"],
|
|
35
|
+
|
|
36
|
+
/* Interop */
|
|
37
|
+
"allowSyntheticDefaultImports": true,
|
|
38
|
+
"esModuleInterop": true,
|
|
39
|
+
"forceConsistentCasingInFileNames": true,
|
|
40
|
+
"isolatedModules": true,
|
|
41
|
+
|
|
42
|
+
/* Type checking */
|
|
43
|
+
"strict": true,
|
|
44
|
+
"strictNullChecks": true,
|
|
45
|
+
"noUncheckedIndexedAccess": true,
|
|
46
|
+
"noUncheckedSideEffectImports": true,
|
|
47
|
+
// Left off because pickier already reports unused locals, and it can
|
|
48
|
+
// auto-fix them. Two tools flagging the same thing is just noise.
|
|
49
|
+
"noUnusedLocals": false,
|
|
50
|
+
|
|
51
|
+
/* Emit - Bun does the bundling, tsc only ever type checks */
|
|
52
|
+
"noEmit": true,
|
|
53
|
+
|
|
54
|
+
/* Performance */
|
|
55
|
+
"incremental": true,
|
|
56
|
+
"skipLibCheck": true
|
|
57
|
+
}
|
|
58
|
+
}
|
package/routes/core.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import process from 'node:process'
|
|
2
|
+
import { route } from '@stacksjs/router'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Framework routes shared by every Stacks app.
|
|
6
|
+
*
|
|
7
|
+
* User routes load first — defining the same path in `routes/web.ts` or
|
|
8
|
+
* `routes/api.ts` overrides these defaults.
|
|
9
|
+
*/
|
|
10
|
+
route.get('/locale/{locale}', 'Actions/Locale/SetLocaleAction')
|
|
11
|
+
|
|
12
|
+
// robots.txt — block crawler indexing on non-production envs so staging /
|
|
13
|
+
// preview deploys don't end up in search results (stacksjs/stacks#1077).
|
|
14
|
+
// APP_ENV wins over NODE_ENV because Stacks apps key everything off APP_ENV.
|
|
15
|
+
// Define a `/robots.txt` route in your own routes to override.
|
|
16
|
+
route.get('/robots.txt', () => {
|
|
17
|
+
const env = (process.env.APP_ENV ?? process.env.NODE_ENV ?? '').toLowerCase()
|
|
18
|
+
const body = env === 'production'
|
|
19
|
+
? 'User-agent: *\nAllow: /\n'
|
|
20
|
+
: 'User-agent: *\nDisallow: /\n'
|
|
21
|
+
return new Response(body, {
|
|
22
|
+
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
|
|
23
|
+
})
|
|
24
|
+
}).skipCsrf()
|
|
25
|
+
|
|
26
|
+
// Mailable preview routes (stacksjs/stacks#1900 A3) — dev-only HTML
|
|
27
|
+
// pages that render every Mailable in `app/Mail/` with sample props
|
|
28
|
+
// from `resources/emails/_previews/<slug>.ts`. Production deployments
|
|
29
|
+
// short-circuit to 404 so even an accidental route registration in
|
|
30
|
+
// prod can't leak the preview surface.
|
|
31
|
+
function isProduction(): boolean {
|
|
32
|
+
const env = (process.env.APP_ENV ?? process.env.NODE_ENV ?? '').toLowerCase()
|
|
33
|
+
return env === 'production'
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function notFound(): Response {
|
|
37
|
+
return new Response('Not Found', { status: 404 })
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
route.get('/_stacks/mail/preview', async () => {
|
|
41
|
+
if (isProduction()) return notFound()
|
|
42
|
+
const { discoverMailables, renderIndexHtml } = await import('@stacksjs/email')
|
|
43
|
+
return new Response(renderIndexHtml(discoverMailables()), {
|
|
44
|
+
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
45
|
+
})
|
|
46
|
+
}).skipCsrf()
|
|
47
|
+
|
|
48
|
+
route.get('/_stacks/mail/preview/{name}', async (req: any) => {
|
|
49
|
+
if (isProduction()) return notFound()
|
|
50
|
+
const { discoverMailables, renderMailablePreview, renderPreviewHtml } = await import('@stacksjs/email')
|
|
51
|
+
const slug = String(req?.params?.name ?? '')
|
|
52
|
+
const mailable = discoverMailables().find(m => m.slug === slug)
|
|
53
|
+
if (!mailable) return notFound()
|
|
54
|
+
const preview = await renderMailablePreview(mailable)
|
|
55
|
+
const url = new URL(req.url)
|
|
56
|
+
const view = url.searchParams.get('view')
|
|
57
|
+
const variant: 'desktop' | 'mobile' | 'text'
|
|
58
|
+
= view === 'mobile' ? 'mobile' : view === 'text' ? 'text' : 'desktop'
|
|
59
|
+
return new Response(renderPreviewHtml(mailable, preview, variant), {
|
|
60
|
+
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
61
|
+
})
|
|
62
|
+
}).skipCsrf()
|
|
63
|
+
|
|
64
|
+
// Raw rendered body for the preview-page iframe — same handler shape
|
|
65
|
+
// but skips the surrounding UI chrome so the iframe renders only the
|
|
66
|
+
// email body itself. Returning text/html lets the browser style it
|
|
67
|
+
// natively without our outer stylesheet leaking in.
|
|
68
|
+
route.get('/_stacks/mail/preview/{name}/raw', async (req: any) => {
|
|
69
|
+
if (isProduction()) return notFound()
|
|
70
|
+
const { discoverMailables, renderMailablePreview } = await import('@stacksjs/email')
|
|
71
|
+
const slug = String(req?.params?.name ?? '')
|
|
72
|
+
const mailable = discoverMailables().find(m => m.slug === slug)
|
|
73
|
+
if (!mailable) return notFound()
|
|
74
|
+
const preview = await renderMailablePreview(mailable)
|
|
75
|
+
return new Response(preview.html || '<!DOCTYPE html><html><body><p style="font-family:sans-serif;color:#6b7280;padding:40px;text-align:center">No HTML body — try the Text tab.</p></body></html>', {
|
|
76
|
+
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
77
|
+
})
|
|
78
|
+
}).skipCsrf()
|