@podosoft/podokit 0.17.4 → 1.0.2
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/README.md +70 -114
- package/dist/add.d.ts +3 -2
- package/dist/add.js +18 -8
- package/dist/assemble.d.ts +2 -0
- package/dist/assemble.js +18 -5
- package/dist/create.d.ts +8 -4
- package/dist/create.js +16 -6
- package/dist/deploy-compose-profile.js +1 -0
- package/dist/deploy-compose-render.d.ts +2 -2
- package/dist/deploy-compose-render.js +9 -6
- package/dist/deploy-compose-sync.d.ts +10 -14
- package/dist/deploy-compose-sync.js +21 -22
- package/dist/deploy-compose.js +4 -1
- package/dist/deploy-profile.d.ts +1 -0
- package/dist/deploy-profile.js +9 -1
- package/dist/deploy-render.js +28 -13
- package/dist/deploy-schema.js +6 -1
- package/dist/dev.d.ts +1 -0
- package/dist/dev.js +63 -14
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -9
- package/dist/inspect.d.ts +3 -1
- package/dist/inspect.js +6 -4
- package/dist/lockfile.d.ts +8 -3
- package/dist/lockfile.js +18 -4
- package/dist/prompt.d.ts +5 -12
- package/dist/prompt.js +5 -22
- package/dist/remove.js +10 -5
- package/dist/templates/base/AGENTS.md +8 -6
- package/dist/templates/base/README.md +2 -2
- package/dist/templates/base/apps/api/src/main.ts +1 -1
- package/dist/templates/base/bunfig.toml +3 -0
- package/dist/templates/base/package.json +5 -4
- package/dist/templates/{fullstack-nest-svelte → fullstack}/AGENTS.md +19 -12
- package/dist/templates/fullstack/Dockerfile.dev +31 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/README.md +35 -18
- package/dist/templates/fullstack/apps/api/Dockerfile +47 -0
- package/dist/templates/fullstack/apps/api/package.json +35 -0
- package/dist/templates/fullstack/apps/api/scripts/build.mjs +38 -0
- package/dist/templates/fullstack/apps/api/scripts/verify-api-contract.ts +37 -0
- package/dist/templates/fullstack/apps/api/src/app.extensions.ts +10 -0
- package/dist/templates/fullstack/apps/api/src/app.ts +162 -0
- package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.spec.ts +20 -2
- package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.ts +16 -0
- package/dist/templates/fullstack/apps/api/src/core/api-contract.spec.ts +59 -0
- package/dist/templates/fullstack/apps/api/src/core/api-contract.ts +169 -0
- package/dist/templates/fullstack/apps/api/src/core/services.spec.ts +90 -0
- package/dist/templates/fullstack/apps/api/src/core/services.ts +208 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/data-source.ts +8 -3
- package/dist/templates/fullstack/apps/api/src/database/database.ts +25 -0
- package/dist/templates/fullstack/apps/api/src/health/health.plugin.ts +28 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/health/readiness.service.spec.ts +1 -1
- package/dist/templates/{todo → fullstack}/apps/api/src/health/readiness.service.ts +0 -3
- package/dist/templates/fullstack/apps/api/src/main.ts +30 -0
- package/dist/templates/{todo → fullstack}/apps/api/tsconfig.json +1 -2
- package/dist/templates/fullstack/apps/web/Dockerfile +41 -0
- package/dist/templates/{todo → fullstack}/apps/web/components.json +3 -3
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/package.json +13 -10
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.html +0 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-action.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/alert/alert-description.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-title.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/badge.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/button.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-action.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-content.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-description.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-footer.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-header.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-title.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/input.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/label.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-content.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-group-heading.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-group.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-item.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-label.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-separator.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-trigger.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/separator/separator.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/switch.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-body.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-caption.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-cell.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/table/table-footer.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-head.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-header.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-row.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/api.ts +9 -6
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.test.ts +25 -0
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.ts +8 -1
- package/dist/templates/fullstack/apps/web/src/routes/+layout.svelte +14 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/+page.svelte +5 -5
- package/dist/templates/{todo → fullstack}/apps/web/src/routes/api/[...path]/+server.ts +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/api/auth/[...all]/+server.ts +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/tsconfig.json +3 -2
- package/dist/templates/fullstack/apps/web/vite.config.ts +25 -0
- package/dist/templates/fullstack/bunfig.toml +3 -0
- package/dist/templates/{todo → fullstack}/compose.dev.yaml +8 -38
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/SKILL.md +5 -5
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/profile.md +5 -3
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/rollback.md +2 -2
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy-fast/SKILL.md +3 -3
- package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-add-module/SKILL.md +2 -2
- package/dist/templates/fullstack/dot-claude/skills/podokit-elysia-endpoint/SKILL.md +27 -0
- package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-sveltekit-route/SKILL.md +4 -4
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-update/SKILL.md +3 -1
- package/dist/templates/{todo → fullstack}/dot-devcontainer/devcontainer.json +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.example +1 -7
- package/dist/templates/{todo → fullstack}/dot-github/workflows/release.yml +5 -8
- package/dist/templates/fullstack/dot-mcp.json +8 -0
- package/dist/templates/fullstack/dot-podokit/dev.json +5 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/docker-compose.yml +2 -2
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/sms-sink.mjs +2 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/README.md +5 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/configmap.yaml +2 -0
- package/dist/templates/fullstack/package.json +27 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/README.md +6 -6
- package/dist/templates/fullstack/tests/package.json +15 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/ui/smoke.ui.spec.ts +2 -1
- package/dist/templates/modules/admin-dashboard/files/apps/api/scripts/bootstrap-admin.mjs +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/admin.module.ts +153 -0
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.spec.ts +13 -13
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.ts +34 -22
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.spec.ts +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.ts +5 -6
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.service.ts +31 -29
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.spec.ts +22 -0
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.ts +73 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/app.d.ts +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/hooks.server.ts +7 -6
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/admin/registry.svelte.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/auth-redirect.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-menu.svelte +6 -6
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-page.svelte +16 -13
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/admin-sidebar.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/data-table.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/impersonation-banner.svelte +24 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/language-switch.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/session-idle-timeout.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/settings/appearance-card.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/sidebar-user-menu.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-footer.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-runtime.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-pagination.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-toolbar.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/theme-toggle.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-content.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-item.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-link.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next-button.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-prev-button.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-previous.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-content.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-description.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-header.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-title.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/context.svelte.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-content.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-footer.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-action.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-content.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-label.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-header.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-input.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-inset.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-action.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-item.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-provider.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-rail.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-separator.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-trigger.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/user-avatar.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/index.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.server.ts +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.svelte +8 -20
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/+page.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/account/+page.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.svelte +5 -5
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.svelte +9 -9
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.svelte +13 -13
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/general-settings.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.svelte +18 -17
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/+layout.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/accept-invitation/[id]/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/+layout.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/forgot-password/+page.svelte +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/login/+page.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/pending-approval/+page.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/reset-password/+page.svelte +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/signup/+page.svelte +9 -9
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/verify-email/+page.svelte +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+layout.server.ts +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+page.svelte +6 -6
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.server.ts +6 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.svelte +12 -8
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/maintenance/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/oauth2/consent/+page.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.svelte +13 -9
- package/dist/templates/modules/admin-dashboard/files/dot-claude/skills/podokit-data-table/SKILL.md +3 -3
- package/dist/templates/modules/admin-dashboard/files/tests/helpers/accounts.ts +17 -2
- package/dist/templates/modules/admin-dashboard/files/tests/helpers/disposable-users.ts +29 -12
- package/dist/templates/modules/admin-dashboard/files/tests/helpers/hydration.ts +4 -4
- package/dist/templates/modules/admin-dashboard/files/tests/ui/account.ui.spec.ts +51 -0
- package/dist/templates/modules/admin-dashboard/files/tests/ui/auth.ui.spec.ts +2 -2
- package/dist/templates/modules/admin-dashboard/files/tests/ui/impersonation.ui.spec.ts +4 -2
- package/dist/templates/modules/admin-dashboard/files/tests/ui/oidc.ui.spec.ts +26 -13
- package/dist/templates/modules/admin-dashboard/files/tests/ui/passkey.ui.spec.ts +3 -2
- package/dist/templates/modules/admin-dashboard/module.manifest.json +14 -24
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.spec.ts +1 -1
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.ts +0 -2
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.spec.ts +21 -0
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.ts +36 -9
- package/dist/templates/modules/api-key-auth/module.manifest.json +4 -4
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/README.md +17 -16
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-events.ts +8 -6
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-hook.ts +2 -2
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.module.ts +31 -12
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.spec.ts +48 -0
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.ts +76 -25
- package/dist/templates/modules/audit-log/module.manifest.json +12 -16
- package/dist/templates/modules/auth/files/apps/api/scripts/configure-auth.mjs +5 -5
- package/dist/templates/modules/auth/files/apps/api/scripts/run-migrations.mjs +14 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth-provider.ts +3 -6
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.module.ts +176 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.spec.ts +20 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.ts +22 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.runtime.spec.ts +3 -3
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.spec.ts +52 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.ts +78 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.ts +4 -1
- package/dist/templates/modules/auth/files/apps/api/src/auth/user-delete-handlers.spec.ts +6 -6
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.service.ts +214 -100
- package/dist/templates/modules/auth/files/apps/api/src/migrations/1720400000000-InitAppSettings.ts +2 -1
- package/dist/templates/modules/auth/files/apps/api/src/settings/app-settings.migration.spec.ts +34 -0
- package/dist/templates/modules/auth/files/apps/api/src/settings/flag-defaults.ts +3 -3
- package/dist/templates/modules/auth/files/apps/api/src/settings/settings.service.ts +26 -30
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/SKILL.md +7 -7
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/bootstrap-admin.md +3 -3
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/google.md +3 -3
- package/dist/templates/modules/auth/module.manifest.json +24 -77
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.spec.ts +10 -0
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.ts +3 -9
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.module.ts +35 -13
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/worker.module.ts +18 -19
- package/dist/templates/modules/bullmq/files/apps/api/src/main-worker.ts +12 -10
- package/dist/templates/modules/bullmq/files/infra/docker/worker.compose.example.yml +1 -1
- package/dist/templates/modules/bullmq/files/infra/k3s/worker-deployment.yaml +1 -1
- package/dist/templates/modules/bullmq/module.manifest.json +8 -9
- package/dist/templates/modules/file-upload/files/apps/api/src/files/files.module.ts +28 -8
- package/dist/templates/modules/file-upload/files/tests/api/files.api.spec.ts +9 -4
- package/dist/templates/modules/file-upload/module.manifest.json +2 -5
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/job-progress.module.ts +33 -11
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.spec.ts +6 -6
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.ts +5 -13
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.processor.ts +11 -18
- package/dist/templates/modules/job-progress/module.manifest.json +5 -8
- package/dist/templates/modules/logging/files/apps/api/src/logging/logging.module.ts +15 -28
- package/dist/templates/modules/logging/module.manifest.json +5 -6
- package/dist/templates/modules/mailer/module.manifest.json +2 -2
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.spec.ts +20 -0
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.ts +17 -21
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.module.ts +43 -9
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.ts +26 -35
- package/dist/templates/modules/object-storage-s3/module.manifest.json +3 -7
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.spec.ts +10 -4
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.ts +13 -0
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.spec.ts +43 -103
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.ts +19 -56
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.spec.ts +124 -212
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.ts +123 -87
- package/dist/templates/modules/rate-limit/files/tests/api/rate-limit.api.spec.ts +17 -1
- package/dist/templates/modules/rate-limit/module.manifest.json +17 -11
- package/dist/templates/modules/redis/files/apps/api/src/redis/redis.module.ts +41 -10
- package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.spec.ts +3 -3
- package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.ts +29 -51
- package/dist/templates/modules/redis/module.manifest.json +3 -12
- package/dist/templates/modules/sse/files/apps/api/src/events/events.module.ts +46 -17
- package/dist/templates/modules/sse/files/apps/api/src/events/events.service.spec.ts +19 -50
- package/dist/templates/modules/sse/files/apps/api/src/events/events.service.ts +40 -25
- package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.ts +25 -79
- package/dist/templates/modules/sse/module.manifest.json +2 -5
- package/dist/templates/todo/AGENTS.md +15 -12
- package/dist/templates/todo/README.md +19 -13
- package/dist/templates/todo/apps/api/src/todos/todo.plugin.ts +59 -0
- package/dist/templates/todo/apps/api/src/todos/todo.repository.ts +69 -0
- package/dist/templates/todo/apps/web/src/routes/+page.svelte +7 -7
- package/dist/templates.js +4 -4
- package/dist/toolchain.d.ts +14 -0
- package/dist/toolchain.js +48 -0
- package/dist/update.d.ts +18 -1
- package/dist/update.js +50 -12
- package/dist/websocket-paths.d.ts +1 -0
- package/dist/websocket-paths.js +32 -0
- package/package.json +5 -4
- package/dist/templates/fullstack-nest-svelte/Dockerfile.dev +0 -58
- package/dist/templates/fullstack-nest-svelte/apps/api/Dockerfile +0 -88
- package/dist/templates/fullstack-nest-svelte/apps/api/nest-cli.json +0 -5
- package/dist/templates/fullstack-nest-svelte/apps/api/package.json +0 -66
- package/dist/templates/fullstack-nest-svelte/apps/api/src/app.extensions.ts +0 -21
- package/dist/templates/fullstack-nest-svelte/apps/api/src/app.module.ts +0 -26
- package/dist/templates/fullstack-nest-svelte/apps/api/src/common/all-exceptions.filter.ts +0 -43
- package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.spec.ts +0 -53
- package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.ts +0 -69
- package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.controller.ts +0 -38
- package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.module.ts +0 -11
- package/dist/templates/fullstack-nest-svelte/apps/api/src/health/readiness.service.ts +0 -33
- package/dist/templates/fullstack-nest-svelte/apps/api/src/main.ts +0 -29
- package/dist/templates/fullstack-nest-svelte/apps/api/tsconfig.json +0 -30
- package/dist/templates/fullstack-nest-svelte/apps/web/Dockerfile +0 -81
- package/dist/templates/fullstack-nest-svelte/apps/web/components.json +0 -15
- package/dist/templates/fullstack-nest-svelte/apps/web/server.js +0 -31
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-description.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +0 -26
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar.svelte +0 -26
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-description.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-footer.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-title.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -44
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -31
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -27
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -29
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-group-heading.svelte +0 -21
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-label.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-trigger.svelte +0 -29
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/separator/separator.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-footer.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/api.ts +0 -21
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.test.ts +0 -79
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.ts +0 -80
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.js +0 -267
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
- package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/+layout.svelte +0 -9
- package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/api/[...path]/+server.ts +0 -16
- package/dist/templates/fullstack-nest-svelte/apps/web/svelte.config.js +0 -15
- package/dist/templates/fullstack-nest-svelte/apps/web/tsconfig.json +0 -9
- package/dist/templates/fullstack-nest-svelte/apps/web/vite.config.ts +0 -29
- package/dist/templates/fullstack-nest-svelte/compose.dev.yaml +0 -162
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-module/SKILL.md +0 -27
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-sveltekit-route/SKILL.md +0 -23
- package/dist/templates/fullstack-nest-svelte/dot-devcontainer/devcontainer.json +0 -20
- package/dist/templates/fullstack-nest-svelte/dot-github/workflows/release.yml +0 -142
- package/dist/templates/fullstack-nest-svelte/dot-mcp.json +0 -8
- package/dist/templates/fullstack-nest-svelte/dot-podokit/dev.json +0 -4
- package/dist/templates/fullstack-nest-svelte/package.json +0 -21
- package/dist/templates/fullstack-nest-svelte/tests/package.json +0 -15
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image-upload.interceptor.ts +0 -39
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.controller.ts +0 -73
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.module.ts +0 -9
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.controller.ts +0 -155
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.module.ts +0 -14
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.decorator.ts +0 -9
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.spec.ts +0 -49
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.ts +0 -21
- package/dist/templates/modules/api-key-auth/files/apps/api/src/machine/machine.controller.ts +0 -14
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-log.entity.ts +0 -46
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.controller.ts +0 -21
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.decorator.ts +0 -23
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.interceptor.ts +0 -56
- package/dist/templates/modules/auth/files/apps/api/src/account/account.controller.ts +0 -101
- package/dist/templates/modules/auth/files/apps/api/src/account/account.module.ts +0 -6
- package/dist/templates/modules/auth/files/apps/api/src/auth/two-factor-required.guard.ts +0 -68
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.controller.ts +0 -33
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.entity.ts +0 -26
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.module.ts +0 -12
- package/dist/templates/modules/auth/files/apps/api/src/health/health.controller.ts +0 -41
- package/dist/templates/modules/auth/files/apps/api/src/settings/app-setting.entity.ts +0 -16
- package/dist/templates/modules/auth/files/apps/api/src/settings/settings.module.ts +0 -11
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/dto/create-job.dto.ts +0 -9
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.controller.ts +0 -29
- package/dist/templates/modules/file-upload/files/apps/api/src/files/files.controller.ts +0 -32
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/dto/start-job.dto.ts +0 -11
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.controller.ts +0 -17
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/dto/put-object.dto.ts +0 -8
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.controller.ts +0 -29
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.spec.ts +0 -35
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.integration.spec.ts +0 -91
- package/dist/templates/modules/redis/files/apps/api/src/redis/cache.controller.ts +0 -21
- package/dist/templates/modules/redis/files/apps/api/src/redis/dto/set-cache.dto.ts +0 -14
- package/dist/templates/modules/sse/files/apps/api/src/events/dto/publish-event.dto.ts +0 -8
- package/dist/templates/modules/sse/files/apps/api/src/events/events.controller.ts +0 -39
- package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.redis.spec.ts +0 -42
- package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.spec.ts +0 -97
- package/dist/templates/todo/CLAUDE.md +0 -6
- package/dist/templates/todo/Dockerfile.dev +0 -58
- package/dist/templates/todo/apps/api/Dockerfile +0 -88
- package/dist/templates/todo/apps/api/nest-cli.json +0 -5
- package/dist/templates/todo/apps/api/package.json +0 -66
- package/dist/templates/todo/apps/api/scripts/.keep +0 -1
- package/dist/templates/todo/apps/api/src/app.extensions.ts +0 -21
- package/dist/templates/todo/apps/api/src/app.module.ts +0 -28
- package/dist/templates/todo/apps/api/src/common/all-exceptions.filter.ts +0 -43
- package/dist/templates/todo/apps/api/src/common/app-exception.ts +0 -4
- package/dist/templates/todo/apps/api/src/config/env.validation.ts +0 -23
- package/dist/templates/todo/apps/api/src/database/data-source.ts +0 -19
- package/dist/templates/todo/apps/api/src/database/migrate.ts +0 -16
- package/dist/templates/todo/apps/api/src/health/health.controller.ts +0 -38
- package/dist/templates/todo/apps/api/src/health/health.module.ts +0 -11
- package/dist/templates/todo/apps/api/src/health/readiness.service.spec.ts +0 -22
- package/dist/templates/todo/apps/api/src/main.ts +0 -29
- package/dist/templates/todo/apps/api/src/todos/dto/create-todo.dto.ts +0 -10
- package/dist/templates/todo/apps/api/src/todos/dto/update-todo.dto.ts +0 -10
- package/dist/templates/todo/apps/api/src/todos/todo.entity.ts +0 -16
- package/dist/templates/todo/apps/api/src/todos/todos.controller.ts +0 -38
- package/dist/templates/todo/apps/api/src/todos/todos.module.ts +0 -12
- package/dist/templates/todo/apps/api/src/todos/todos.service.ts +0 -41
- package/dist/templates/todo/apps/web/Dockerfile +0 -78
- package/dist/templates/todo/apps/web/package.json +0 -38
- package/dist/templates/todo/apps/web/server.js +0 -31
- package/dist/templates/todo/apps/web/src/app.css +0 -81
- package/dist/templates/todo/apps/web/src/app.d.ts +0 -11
- package/dist/templates/todo/apps/web/src/app.html +0 -13
- package/dist/templates/todo/apps/web/src/lib/api.ts +0 -5
- package/dist/templates/todo/apps/web/src/lib/components/site-runtime.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-action.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-title.svelte +0 -23
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert.svelte +0 -43
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/index.ts +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/index.ts +0 -22
- package/dist/templates/todo/apps/web/src/lib/components/ui/badge/badge.svelte +0 -49
- package/dist/templates/todo/apps/web/src/lib/components/ui/badge/index.ts +0 -2
- package/dist/templates/todo/apps/web/src/lib/components/ui/button/button.svelte +0 -82
- package/dist/templates/todo/apps/web/src/lib/components/ui/button/index.ts +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-action.svelte +0 -23
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-content.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-header.svelte +0 -23
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card.svelte +0 -22
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/index.ts +0 -25
- package/dist/templates/todo/apps/web/src/lib/components/ui/checkbox/index.ts +0 -6
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -11
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +0 -48
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +0 -32
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -11
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/index.ts +0 -34
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -16
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -22
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -24
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -34
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -54
- package/dist/templates/todo/apps/web/src/lib/components/ui/input/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/input/input.svelte +0 -48
- package/dist/templates/todo/apps/web/src/lib/components/ui/label/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/label/label.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/index.ts +0 -37
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-content.svelte +0 -45
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-group.svelte +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-item.svelte +0 -40
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-separator.svelte +0 -18
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select.svelte +0 -11
- package/dist/templates/todo/apps/web/src/lib/components/ui/separator/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/skeleton/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/index.ts +0 -1
- package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -34
- package/dist/templates/todo/apps/web/src/lib/components/ui/switch/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/switch/switch.svelte +0 -29
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/index.ts +0 -28
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-body.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-caption.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-cell.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-head.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-header.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-row.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table.svelte +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/index.ts +0 -16
- package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs.svelte +0 -19
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/index.ts +0 -19
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +0 -52
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/i18n/README.md +0 -9
- package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/en.json +0 -1
- package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -1
- package/dist/templates/todo/apps/web/src/lib/i18n/locales/en.json +0 -6
- package/dist/templates/todo/apps/web/src/lib/i18n/locales/ko.json +0 -6
- package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.js +0 -267
- package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
- package/dist/templates/todo/apps/web/src/lib/utils.ts +0 -11
- package/dist/templates/todo/apps/web/src/routes/+layout.svelte +0 -9
- package/dist/templates/todo/apps/web/src/routes/api/auth/[...all]/+server.ts +0 -16
- package/dist/templates/todo/apps/web/static/.gitkeep +0 -0
- package/dist/templates/todo/apps/web/static/favicon.svg +0 -13
- package/dist/templates/todo/apps/web/svelte.config.js +0 -15
- package/dist/templates/todo/apps/web/vite.config.ts +0 -29
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/SKILL.md +0 -65
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -4
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/profile.md +0 -75
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/release.md +0 -64
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/rollback.md +0 -5
- package/dist/templates/todo/dot-agents/skills/podokit-deploy-fast/SKILL.md +0 -92
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/SKILL.md +0 -63
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -4
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -49
- package/dist/templates/todo/dot-claude/skills/podokit-deploy/SKILL.md +0 -8
- package/dist/templates/todo/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -8
- package/dist/templates/todo/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
- package/dist/templates/todo/dot-claude/skills/podokit-update/SKILL.md +0 -26
- package/dist/templates/todo/dot-cursor/rules/podokit.mdc +0 -11
- package/dist/templates/todo/dot-dockerignore +0 -15
- package/dist/templates/todo/dot-env.docker +0 -26
- package/dist/templates/todo/dot-env.example +0 -34
- package/dist/templates/todo/dot-github/copilot-instructions.md +0 -6
- package/dist/templates/todo/dot-gitignore +0 -23
- package/dist/templates/todo/dot-mcp.json +0 -8
- package/dist/templates/todo/dot-podokit/dev.json +0 -4
- package/dist/templates/todo/infra/docker/docker-compose.yml +0 -33
- package/dist/templates/todo/infra/k3s/README.md +0 -18
- package/dist/templates/todo/infra/k3s/api-deployment.yaml +0 -29
- package/dist/templates/todo/infra/k3s/configmap.yaml +0 -12
- package/dist/templates/todo/infra/k3s/ingress.yaml +0 -32
- package/dist/templates/todo/infra/k3s/namespace.yaml +0 -4
- package/dist/templates/todo/infra/k3s/secret.example.yaml +0 -10
- package/dist/templates/todo/infra/k3s/services.yaml +0 -21
- package/dist/templates/todo/infra/k3s/web-deployment.yaml +0 -30
- package/dist/templates/todo/infra/traefik/dynamic.yml +0 -17
- package/dist/templates/todo/package.json +0 -21
- package/dist/templates/todo/tests/README.md +0 -21
- package/dist/templates/todo/tests/api/health.api.spec.ts +0 -14
- package/dist/templates/todo/tests/package.json +0 -15
- package/dist/templates/todo/tests/playwright.config.ts +0 -27
- package/dist/templates/todo/tests/playwright.extensions.ts +0 -44
- package/dist/templates/todo/tests/ui/smoke.ui.spec.ts +0 -8
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/CLAUDE.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/scripts/.keep +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/common/app-exception.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/config/env.validation.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/migrate.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.css +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.d.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/api.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/site-runtime.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/avatar/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/checkbox/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/separator/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/skeleton/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/README.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/en.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/en.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/ko.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/utils.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/.gitkeep +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/favicon.svg +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/release.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/SKILL.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy/SKILL.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-cursor/rules/podokit.mdc +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-dockerignore +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.docker +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-github/copilot-instructions.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-gitignore +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/api-deployment.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/ingress.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/namespace.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/secret.example.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/services.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/web-deployment.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/traefik/dynamic.yml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/api/health.api.spec.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.config.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.extensions.ts +0 -0
package/README.md
CHANGED
|
@@ -1,158 +1,114 @@
|
|
|
1
1
|
# @podosoft/podokit
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
PodoKit is an opinionated Bun 1.4.0 full-stack starter and CLI. It generates an
|
|
4
|
+
Elysia API, a SvelteKit web application, PostgreSQL integration through native
|
|
5
|
+
`Bun.SQL`, Tailwind CSS v4, shadcn-svelte, Docker, and k3s assets.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
The CLI itself remains Node-compatible, so either `npx` or `bunx` can create and
|
|
8
|
+
maintain projects. Generated PodoKit v1 applications are Bun-only.
|
|
6
9
|
|
|
7
10
|
## Quick start
|
|
8
11
|
|
|
9
12
|
```bash
|
|
10
13
|
npx @podosoft/podokit create my-app
|
|
14
|
+
# or: bunx @podosoft/podokit create my-app
|
|
15
|
+
|
|
11
16
|
cd my-app
|
|
12
|
-
|
|
17
|
+
bun install
|
|
13
18
|
cp .env.example .env
|
|
14
19
|
npx @podosoft/podokit dev watch
|
|
15
20
|
```
|
|
16
21
|
|
|
17
|
-
Open
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
`npm run dev` loop remains available on web port 5001 and API port 5002.
|
|
21
|
-
|
|
22
|
-
When run in a terminal, `podo create` lists the templates with descriptions and asks which one (and which package manager) to use. Pass flags (or `--yes`) to skip the prompts.
|
|
22
|
+
Open `http://my-app.localhost`. The first project starts a user-level Traefik
|
|
23
|
+
gateway on loopback port 80; later projects reuse it and route by hostname. Stop
|
|
24
|
+
the project with `podo dev down`.
|
|
23
25
|
|
|
24
|
-
The `todo` template
|
|
26
|
+
The `todo` template generates a working SvelteKit UI, Elysia CRUD API, and
|
|
27
|
+
PostgreSQL persistence:
|
|
25
28
|
|
|
26
29
|

|
|
27
30
|
|
|
28
31
|
## Commands
|
|
29
32
|
|
|
30
|
-
| Command |
|
|
31
|
-
|
|
32
|
-
| `podo create <name>` |
|
|
33
|
-
| `podo add <module>` | Add a feature module
|
|
34
|
-
| `podo
|
|
35
|
-
| `podo
|
|
36
|
-
| `podo
|
|
37
|
-
| `podo
|
|
38
|
-
| `podo
|
|
39
|
-
| `podo
|
|
40
|
-
| `podo
|
|
41
|
-
| `podo
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```
|
|
33
|
+
| Command | Purpose |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| `podo create <name>` | Create a Bun project from `fullstack`, `todo`, or `base`. |
|
|
36
|
+
| `podo add <module>` | Add a composable feature module. |
|
|
37
|
+
| `podo remove <module>` | Remove a module conservatively. |
|
|
38
|
+
| `podo status` | Show the PodoKit version, modules, ownership tiers, and local edits. |
|
|
39
|
+
| `podo diff` | List edited or deleted managed files. |
|
|
40
|
+
| `podo doctor` | Check Bun and framework versions. |
|
|
41
|
+
| `podo locale <command>` | Manage JSON locales. |
|
|
42
|
+
| `podo update [--apply]` | Preview or apply managed template and module updates. |
|
|
43
|
+
| `podo eject <path...>` | Transfer managed files to application ownership. |
|
|
44
|
+
| `podo dev <action>` | Manage the generated development containers. |
|
|
45
|
+
| `podo deploy <action>` | Plan, apply, verify, or roll back an immutable Helm release. |
|
|
46
|
+
|
|
47
|
+
```text
|
|
46
48
|
podo create <name> [options]
|
|
47
49
|
|
|
48
50
|
Options:
|
|
49
|
-
--template <
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
--
|
|
54
|
-
--pm <name> Package manager: npm | pnpm | yarn (default: npm)
|
|
55
|
-
--no-ai Skip AI agent guidance (AGENTS.md, CLAUDE.md, editor rules)
|
|
56
|
-
-y, --yes Skip prompts and accept defaults
|
|
57
|
-
-h, --help Show help
|
|
51
|
+
--template <name> fullstack (default), todo, or base
|
|
52
|
+
--dir <path> Target directory (default: ./<name>)
|
|
53
|
+
--no-ai Omit generated AI-agent guidance
|
|
54
|
+
-y, --yes Accept defaults without prompts
|
|
55
|
+
-h, --help Show help
|
|
58
56
|
```
|
|
59
57
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Modules extend `AGENTS.md` as you add them. Use `--no-ai` to skip.
|
|
58
|
+
`--runtime bun` remains an optional explicit selection. Node runtime values,
|
|
59
|
+
`--pm`, and `podo runtime set` are not part of PodoKit v1. Version 1 projects
|
|
60
|
+
deliberately use Bun-specific APIs on the request and data paths.
|
|
64
61
|
|
|
65
|
-
|
|
66
|
-
with a Claude pointer under `.claude/skills/`.
|
|
67
|
-
|
|
68
|
-
Examples:
|
|
62
|
+
## Modules and updates
|
|
69
63
|
|
|
70
64
|
```bash
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# Non-interactive, explicit choices
|
|
75
|
-
npx @podosoft/podokit create my-app --template fullstack-nest-svelte --pm pnpm --yes
|
|
65
|
+
podo add auth
|
|
66
|
+
bun install
|
|
67
|
+
bun run --cwd apps/api migrate:all
|
|
76
68
|
|
|
77
|
-
|
|
78
|
-
|
|
69
|
+
podo status
|
|
70
|
+
podo update
|
|
71
|
+
podo update --apply
|
|
79
72
|
```
|
|
80
73
|
|
|
81
|
-
|
|
74
|
+
Modules overlay files, merge dependencies and environment examples, then wire
|
|
75
|
+
Elysia plugins into `apps/api/src/app.ts`. Generated projects record their
|
|
76
|
+
assembly in `.podokit/`, allowing clean managed files to update and edited files
|
|
77
|
+
to be three-way merged. Application-owned routes, components, and ejected files
|
|
78
|
+
remain untouched.
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
npx @podosoft/podokit add auth # full auth (better-auth): email/password, sessions, OAuth, 2FA
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
`podo add <module>` overlays files, merges dependencies, appends env vars, and wires the module into the NestJS app. Run `podo add` with no argument to list available modules.
|
|
80
|
+
See the [module guide](https://github.com/podosoft-dev/podokit/blob/main/docs/modules.md)
|
|
81
|
+
and [updating guide](https://github.com/podosoft-dev/podokit/blob/main/docs/updating.md).
|
|
89
82
|
|
|
90
|
-
|
|
83
|
+
## Compatibility boundary
|
|
91
84
|
|
|
92
|
-
|
|
85
|
+
PodoKit v1 does not convert projects generated by PodoKit 0.x. Existing projects
|
|
86
|
+
must pin `@podosoft/podokit@0.17.4` for maintenance. Start a new v1 project when
|
|
87
|
+
adopting the Bun and Elysia architecture.
|
|
93
88
|
|
|
94
|
-
|
|
89
|
+
The generated application runtime, builds, migrations, and unit tests all use
|
|
90
|
+
Bun 1.4.0. Playwright remains a Node-based test-tool exception because its
|
|
91
|
+
officially supported runtime is Node; `bunx playwright` respects the package's
|
|
92
|
+
Node shebang.
|
|
95
93
|
|
|
96
|
-
|
|
97
|
-
directory, so it can receive template and module improvements later without
|
|
98
|
-
losing your work:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
podo status # version, modules, and which managed files you've edited
|
|
102
|
-
podo update # preview what a newer PodoKit version would change
|
|
103
|
-
podo update --apply # apply it: clean updates are written, your edits are 3-way merged
|
|
104
|
-
```
|
|
94
|
+
## Generated architecture
|
|
105
95
|
|
|
106
|
-
|
|
107
|
-
[updating guide](https://github.com/podosoft-dev/podokit/blob/main/docs/updating.md).
|
|
108
|
-
An exact path handed over with `podo eject` remains owned even if a module also
|
|
109
|
-
declares it managed; if you later move or delete that file, update reports the
|
|
110
|
-
missing owned path instead of recreating it.
|
|
111
|
-
|
|
112
|
-
## Deploy an immutable release
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
podo deploy init --profile production --context production --host app.example.com
|
|
116
|
-
podo deploy doctor --profile production
|
|
117
|
-
podo deploy plan --profile production --release v1.2.3 --json
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Apply and rollback require the exact confirmation hash from a fresh plan.
|
|
121
|
-
PodoKit consumes an existing namespace and Secrets, runs migrations before the
|
|
122
|
-
application rollout, and exposes only the SvelteKit web proxy. See the
|
|
123
|
-
[deployment guide](https://github.com/podosoft-dev/podokit/blob/main/docs/deployment.md).
|
|
124
|
-
|
|
125
|
-
## What you get (`fullstack-nest-svelte`)
|
|
126
|
-
|
|
127
|
-
```
|
|
96
|
+
```text
|
|
128
97
|
my-app/
|
|
129
98
|
├── apps/
|
|
130
|
-
│ ├── api/
|
|
131
|
-
│
|
|
132
|
-
│ └── web/ # SvelteKit: Tailwind v4, shadcn-svelte,
|
|
133
|
-
│ └── src/ # typesafe-i18n, server-side API proxy
|
|
99
|
+
│ ├── api/ # Bun + Elysia + native Bun.SQL
|
|
100
|
+
│ └── web/ # SvelteKit + Tailwind CSS v4 + shadcn-svelte
|
|
134
101
|
├── infra/
|
|
135
|
-
│ ├── docker/
|
|
136
|
-
│ └── k3s/
|
|
137
|
-
├──
|
|
138
|
-
├──
|
|
139
|
-
└──
|
|
102
|
+
│ ├── docker/ # PostgreSQL, Redis, and optional services
|
|
103
|
+
│ └── k3s/ # deployments, services, ingress, and examples
|
|
104
|
+
├── tests/ # Playwright API and browser tests
|
|
105
|
+
├── .podokit/ # assembly and managed-file metadata
|
|
106
|
+
└── package.json # Bun workspace pinned to Bun 1.4.0
|
|
140
107
|
```
|
|
141
108
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- **Frontend (SvelteKit)** — TailwindCSS v4 (config-less), **shadcn-svelte components preinstalled** (button, input, card, checkbox, label), a typesafe-i18n scaffold, and a **server-side proxy** so the browser never calls the API directly.
|
|
146
|
-
- **Infra** — Docker Compose for local PostgreSQL and Redis, plus example k3s manifests (standard `Ingress`, `secret.example.yaml`).
|
|
147
|
-
|
|
148
|
-
## Status
|
|
149
|
-
|
|
150
|
-
PodoKit is early (`0.x`). The CLI and templates work end-to-end, but APIs and templates may change before `1.0`. Feedback and issues are welcome.
|
|
151
|
-
|
|
152
|
-
## Links
|
|
153
|
-
|
|
154
|
-
- Repository & issues: https://github.com/podosoft-dev/podokit
|
|
155
|
-
- Changelog: https://github.com/podosoft-dev/podokit/blob/main/CHANGELOG.md
|
|
109
|
+
The API provides typed Elysia validation, a stable error envelope, liveness and
|
|
110
|
+
readiness endpoints, merged OpenAPI documentation, and an executable route
|
|
111
|
+
contract check. Production API and worker images use `oven/bun:1.4.0-alpine`.
|
|
156
112
|
|
|
157
113
|
## License
|
|
158
114
|
|
package/dist/add.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type TemplateVars } from "@podosoft/podokit-template-engine";
|
|
1
2
|
interface Injection {
|
|
2
3
|
file: string;
|
|
3
4
|
marker: string;
|
|
@@ -51,7 +52,7 @@ export interface ModuleManifest {
|
|
|
51
52
|
/** App-relative globs this module's files should own (durably user-editable,
|
|
52
53
|
* never touched by `podo update`). Merged into the project's ownedGlobs so
|
|
53
54
|
* they survive lock recompute. Use for public presentation pages a consumer
|
|
54
|
-
* restyles, while keeping the module's
|
|
55
|
+
* restyles, while keeping the module's `#lib` logic managed. */
|
|
55
56
|
ownedGlobs?: string[];
|
|
56
57
|
/** Paths that an existing app may explicitly hand back to this module with
|
|
57
58
|
* `podo add --adopt`. Broad app-owned route globs are never removed. */
|
|
@@ -120,7 +121,7 @@ export declare function listModules(modulesDir: string, projectRoot?: string): {
|
|
|
120
121
|
name: string;
|
|
121
122
|
description: string;
|
|
122
123
|
}[];
|
|
123
|
-
export declare function readModuleManifest(moduleDir: string): ModuleManifest;
|
|
124
|
+
export declare function readModuleManifest(moduleDir: string, vars?: TemplateVars): ModuleManifest;
|
|
124
125
|
/**
|
|
125
126
|
* Apply a module to an existing generated project: overlay files, merge the
|
|
126
127
|
* target app's package.json dependencies and scripts, append env example lines,
|
package/dist/add.js
CHANGED
|
@@ -12,6 +12,7 @@ const node_path_1 = require("node:path");
|
|
|
12
12
|
const node_module_1 = require("node:module");
|
|
13
13
|
const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
|
|
14
14
|
const lockfile_1 = require("./lockfile");
|
|
15
|
+
const toolchain_1 = require("./toolchain");
|
|
15
16
|
/** Highest `module.manifest.json` schema version this CLI understands. A package
|
|
16
17
|
* module declaring a higher version is rejected rather than mis-applied. */
|
|
17
18
|
exports.SUPPORTED_MANIFEST_VERSION = 2;
|
|
@@ -168,8 +169,9 @@ function listModules(modulesDir, projectRoot) {
|
|
|
168
169
|
}
|
|
169
170
|
return [...out].map(([name, description]) => ({ name, description }));
|
|
170
171
|
}
|
|
171
|
-
function readModuleManifest(moduleDir) {
|
|
172
|
-
|
|
172
|
+
function readModuleManifest(moduleDir, vars) {
|
|
173
|
+
const source = (0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8");
|
|
174
|
+
return JSON.parse(vars ? (0, podokit_template_engine_1.renderTokens)(source, vars) : source);
|
|
173
175
|
}
|
|
174
176
|
function readJson(path) {
|
|
175
177
|
return JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
|
|
@@ -250,14 +252,24 @@ function applyModule(projectRoot, module, modulesDir, applied, adopt) {
|
|
|
250
252
|
throw new Error(`Unknown module "${module}".${available.length ? ` Available: ${available.join(", ")}.` : ""}`);
|
|
251
253
|
}
|
|
252
254
|
const moduleDir = resolved.dir;
|
|
253
|
-
const
|
|
254
|
-
assertManifestVersion(module,
|
|
255
|
-
assertRequiredProjectFiles(projectRoot, module,
|
|
256
|
-
const requiredApps = new Set([
|
|
255
|
+
const rawManifest = readModuleManifest(moduleDir);
|
|
256
|
+
assertManifestVersion(module, rawManifest);
|
|
257
|
+
assertRequiredProjectFiles(projectRoot, module, rawManifest);
|
|
258
|
+
const requiredApps = new Set([
|
|
259
|
+
rawManifest.targetApp,
|
|
260
|
+
...Object.keys(rawManifest.packageOverlays ?? {}),
|
|
261
|
+
]);
|
|
257
262
|
const missingApp = [...requiredApps].find((app) => !(0, node_fs_1.existsSync)((0, node_path_1.join)(projectRoot, "apps", app, "package.json")));
|
|
258
263
|
if (missingApp) {
|
|
259
264
|
throw new Error(`This does not look like a PodoKit project: ${(0, node_path_1.join)("apps", missingApp, "package.json")} not found. Run inside a generated project.`);
|
|
260
265
|
}
|
|
266
|
+
const appName = projectName(projectRoot);
|
|
267
|
+
const projectManifest = (0, lockfile_1.readManifest)(projectRoot);
|
|
268
|
+
const vars = {
|
|
269
|
+
projectName: appName,
|
|
270
|
+
...(projectManifest ? (0, toolchain_1.toolchainTemplateVars)(projectManifest.toolchain) : {}),
|
|
271
|
+
};
|
|
272
|
+
const manifest = readModuleManifest(moduleDir, vars);
|
|
261
273
|
applied.add(module);
|
|
262
274
|
// 0) apply required modules first (auto-add if missing)
|
|
263
275
|
const added = [];
|
|
@@ -277,8 +289,6 @@ function applyModule(projectRoot, module, modulesDir, applied, adopt) {
|
|
|
277
289
|
adopted.push(...result.adopted);
|
|
278
290
|
touched.push(...result.touched);
|
|
279
291
|
}
|
|
280
|
-
const appName = projectName(projectRoot);
|
|
281
|
-
const vars = { projectName: appName };
|
|
282
292
|
// 1) overlay files
|
|
283
293
|
const filesDir = (0, node_path_1.join)(moduleDir, "files");
|
|
284
294
|
if ((0, node_fs_1.existsSync)(filesDir)) {
|
package/dist/assemble.d.ts
CHANGED
|
@@ -15,3 +15,5 @@ export interface AssembleOptions {
|
|
|
15
15
|
}
|
|
16
16
|
/** Assemble the project tree for a template + ordered modules, in memory. */
|
|
17
17
|
export declare function assembleProject(options: AssembleOptions): VfsTree;
|
|
18
|
+
/** Render a Bun-native project template. */
|
|
19
|
+
export declare function renderProjectTemplate(templatesDir: string, template: string, answers: TemplateVars): VfsTree;
|
package/dist/assemble.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.assembleProject = assembleProject;
|
|
4
|
+
exports.renderProjectTemplate = renderProjectTemplate;
|
|
4
5
|
const node_fs_1 = require("node:fs");
|
|
5
6
|
const node_path_1 = require("node:path");
|
|
6
7
|
const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
|
|
7
8
|
const add_1 = require("./add");
|
|
8
|
-
function readManifest(moduleDir) {
|
|
9
|
-
return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8"));
|
|
10
|
-
}
|
|
11
9
|
function textOf(tree, path) {
|
|
12
10
|
return String(tree.get(path)?.content ?? "");
|
|
13
11
|
}
|
|
@@ -15,7 +13,7 @@ function setText(tree, path, content) {
|
|
|
15
13
|
tree.set(path, { content, text: true });
|
|
16
14
|
}
|
|
17
15
|
function applyModuleToTree(tree, moduleDir, vars) {
|
|
18
|
-
const manifest =
|
|
16
|
+
const manifest = (0, add_1.readModuleManifest)(moduleDir, vars);
|
|
19
17
|
// 1) overlay files (module files override the base)
|
|
20
18
|
const filesDir = (0, node_path_1.join)(moduleDir, "files");
|
|
21
19
|
if ((0, node_fs_1.existsSync)(filesDir)) {
|
|
@@ -79,7 +77,7 @@ function preserveExternalPackageDependency(tree, projectRoot, packageName) {
|
|
|
79
77
|
}
|
|
80
78
|
/** Assemble the project tree for a template + ordered modules, in memory. */
|
|
81
79
|
function assembleProject(options) {
|
|
82
|
-
const tree = (
|
|
80
|
+
const tree = renderProjectTemplate(options.templatesDir, options.template, options.answers);
|
|
83
81
|
for (const mod of options.modules) {
|
|
84
82
|
const name = typeof mod === "string" ? mod : (mod.packageName ?? mod.name);
|
|
85
83
|
const resolved = (0, add_1.resolveModule)(name, (0, node_path_1.join)(options.templatesDir, "modules"), options.projectRoot ?? options.templatesDir);
|
|
@@ -95,3 +93,18 @@ function assembleProject(options) {
|
|
|
95
93
|
}
|
|
96
94
|
return tree;
|
|
97
95
|
}
|
|
96
|
+
/** Render a Bun-native project template. */
|
|
97
|
+
function renderProjectTemplate(templatesDir, template, answers) {
|
|
98
|
+
const tree = template === "todo"
|
|
99
|
+
? (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(templatesDir, "fullstack"), answers)
|
|
100
|
+
: (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(templatesDir, template), answers);
|
|
101
|
+
if (template === "todo") {
|
|
102
|
+
for (const [path, file] of (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(templatesDir, template), answers)) {
|
|
103
|
+
tree.set(path, file);
|
|
104
|
+
}
|
|
105
|
+
const appPath = "apps/api/src/app.ts";
|
|
106
|
+
const appSource = textOf(tree, appPath);
|
|
107
|
+
setText(tree, appPath, (0, podokit_template_engine_1.insertAtMarker)((0, podokit_template_engine_1.insertAtMarker)(appSource, "// podokit:end:imports", 'import { todoPlugin } from "./todos/todo.plugin";'), "// podokit:end:modules", '{ name: "todo", plugin: todoPlugin },'));
|
|
108
|
+
}
|
|
109
|
+
return tree;
|
|
110
|
+
}
|
package/dist/create.d.ts
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { DEFAULT_TEMPLATE } from "./templates";
|
|
2
|
-
|
|
2
|
+
import { type Runtime, type Toolchain } from "./toolchain";
|
|
3
|
+
export type PackageManager = "bun";
|
|
3
4
|
export { DEFAULT_TEMPLATE };
|
|
4
5
|
export interface CreateOptions {
|
|
5
6
|
/** Project name; also the default directory name. */
|
|
6
7
|
name: string;
|
|
7
8
|
/** Directory that holds the template sets (each in its own subfolder). */
|
|
8
9
|
templatesDir: string;
|
|
9
|
-
/**
|
|
10
|
+
/** Public template name. Defaults to `fullstack`. */
|
|
10
11
|
template?: string;
|
|
11
12
|
/** Where to create the project. Defaults to `<cwd>/<name>`. */
|
|
12
13
|
targetDir?: string;
|
|
13
|
-
/**
|
|
14
|
+
/** Deprecated compatibility input. PodoKit v1 accepts only Bun. */
|
|
14
15
|
packageManager?: PackageManager;
|
|
16
|
+
/** Application runtime. PodoKit v1 accepts only Bun. */
|
|
17
|
+
runtime?: Runtime;
|
|
15
18
|
/** PodoKit version stamped into the lockfile. Defaults to the CLI version. */
|
|
16
19
|
podokitVersion?: string;
|
|
17
20
|
/** Include AI agent guidance (AGENTS.md, CLAUDE.md, editor rules). Defaults to true. */
|
|
@@ -19,7 +22,8 @@ export interface CreateOptions {
|
|
|
19
22
|
}
|
|
20
23
|
export interface CreateResult {
|
|
21
24
|
projectDir: string;
|
|
22
|
-
packageManager:
|
|
25
|
+
packageManager: Toolchain["packageManager"];
|
|
26
|
+
toolchain: Toolchain;
|
|
23
27
|
template: string;
|
|
24
28
|
}
|
|
25
29
|
/** Validate a project name: no path separators, npm-friendly characters. */
|
package/dist/create.js
CHANGED
|
@@ -9,6 +9,8 @@ const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
|
|
|
9
9
|
const templates_1 = require("./templates");
|
|
10
10
|
Object.defineProperty(exports, "DEFAULT_TEMPLATE", { enumerable: true, get: function () { return templates_1.DEFAULT_TEMPLATE; } });
|
|
11
11
|
const lockfile_1 = require("./lockfile");
|
|
12
|
+
const assemble_1 = require("./assemble");
|
|
13
|
+
const toolchain_1 = require("./toolchain");
|
|
12
14
|
/** AI agent guidance files, removed when scaffolding with `--no-ai`. */
|
|
13
15
|
const AI_ARTIFACTS = [
|
|
14
16
|
"AGENTS.md",
|
|
@@ -36,7 +38,7 @@ function create(options) {
|
|
|
36
38
|
const { name, templatesDir } = options;
|
|
37
39
|
assertValidName(name);
|
|
38
40
|
const template = options.template ?? templates_1.DEFAULT_TEMPLATE;
|
|
39
|
-
const
|
|
41
|
+
const toolchain = (0, toolchain_1.resolveToolchain)(options.runtime, options.packageManager);
|
|
40
42
|
const projectDir = options.targetDir
|
|
41
43
|
? (0, node_path_1.isAbsolute)(options.targetDir)
|
|
42
44
|
? options.targetDir
|
|
@@ -49,17 +51,25 @@ function create(options) {
|
|
|
49
51
|
if (!(0, node_fs_1.existsSync)(templateDir)) {
|
|
50
52
|
throw new Error(`Template "${template}" not found at ${templateDir}`);
|
|
51
53
|
}
|
|
52
|
-
const vars = {
|
|
53
|
-
|
|
54
|
+
const vars = {
|
|
55
|
+
projectName: name,
|
|
56
|
+
...(0, toolchain_1.toolchainTemplateVars)(toolchain),
|
|
57
|
+
};
|
|
58
|
+
(0, podokit_template_engine_1.writeTree)((0, assemble_1.renderProjectTemplate)(templatesDir, template, vars), projectDir);
|
|
54
59
|
if (options.ai === false) {
|
|
55
60
|
for (const artifact of AI_ARTIFACTS)
|
|
56
61
|
(0, node_fs_1.rmSync)((0, node_path_1.join)(projectDir, artifact), { recursive: true, force: true });
|
|
57
62
|
}
|
|
58
63
|
(0, lockfile_1.initLockfile)(projectDir, {
|
|
59
64
|
template,
|
|
60
|
-
|
|
61
|
-
answers:
|
|
65
|
+
toolchain,
|
|
66
|
+
answers: vars,
|
|
62
67
|
version: options.podokitVersion,
|
|
63
68
|
});
|
|
64
|
-
return {
|
|
69
|
+
return {
|
|
70
|
+
projectDir,
|
|
71
|
+
packageManager: toolchain.packageManager,
|
|
72
|
+
toolchain,
|
|
73
|
+
template,
|
|
74
|
+
};
|
|
65
75
|
}
|
|
@@ -340,6 +340,7 @@ function initializeComposeProfile(projectRoot, name, options) {
|
|
|
340
340
|
...(modules.has("rate-limit")
|
|
341
341
|
? {
|
|
342
342
|
RATE_LIMIT_TTL: "60",
|
|
343
|
+
RATE_LIMIT_KEY_PREFIX: "podokit:rate-limit",
|
|
343
344
|
RATE_LIMIT_MAX: "300",
|
|
344
345
|
RATE_LIMIT_AUTH_TTL: "60",
|
|
345
346
|
RATE_LIMIT_AUTH_MAX: "20",
|
|
@@ -38,11 +38,11 @@ export declare function derivedRuntimeConfig(profile: DockerComposeProfileV1): R
|
|
|
38
38
|
* the containers instead of leaving stale values running.
|
|
39
39
|
*/
|
|
40
40
|
export declare function rolloutStateDigest(profile: DockerComposeProfileV1, secretIdentities: Record<string, string>): string;
|
|
41
|
-
export declare function renderComposeDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages, stateDigest: string): string;
|
|
41
|
+
export declare function renderComposeDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages, stateDigest: string, workerCommand?: string[]): string;
|
|
42
42
|
/**
|
|
43
43
|
* The migration runs as its own Compose project so it can be started, waited on,
|
|
44
44
|
* and removed without touching the running application definition.
|
|
45
45
|
*/
|
|
46
|
-
export declare function renderMigrationDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages): string;
|
|
46
|
+
export declare function renderMigrationDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages, defaultCommand?: string[]): string;
|
|
47
47
|
export declare function defaultComposeImages(profile: DockerComposeProfileV1, release: string): ComposeImages;
|
|
48
48
|
export declare function renderComposeDeployment(projectRoot: string, profileName: string, profile: DockerComposeProfileV1, release: string, resolvedImages?: ComposeImages, stateDigest?: string): ComposeRuntime;
|
|
@@ -11,6 +11,8 @@ const node_crypto_1 = require("node:crypto");
|
|
|
11
11
|
const node_fs_1 = require("node:fs");
|
|
12
12
|
const node_path_1 = require("node:path");
|
|
13
13
|
const deploy_schema_1 = require("./deploy-schema");
|
|
14
|
+
const lockfile_1 = require("./lockfile");
|
|
15
|
+
const toolchain_1 = require("./toolchain");
|
|
14
16
|
/** The internal port every generated application service listens on. */
|
|
15
17
|
const CONTAINER_PORT = 3000;
|
|
16
18
|
function quote(value) {
|
|
@@ -237,7 +239,7 @@ function applicationService(profile, role, image, release, stateDigest, options)
|
|
|
237
239
|
" healthcheck:\n disable: true\n") +
|
|
238
240
|
labelsBlock(profile, release, stateDigest, " "));
|
|
239
241
|
}
|
|
240
|
-
function renderComposeDocument(profile, release, images, stateDigest) {
|
|
242
|
+
function renderComposeDocument(profile, release, images, stateDigest, workerCommand = ["bun", "dist/main-worker.js"]) {
|
|
241
243
|
const services = [];
|
|
242
244
|
if (profile.dependencies.postgres.mode === "managed" && images.postgres) {
|
|
243
245
|
services.push(postgresService(profile, images.postgres));
|
|
@@ -262,7 +264,7 @@ function renderComposeDocument(profile, release, images, stateDigest) {
|
|
|
262
264
|
// The worker runs the API image with a different entry point, exactly as the
|
|
263
265
|
// Kubernetes driver does.
|
|
264
266
|
services.push(applicationService(profile, "worker", images.api, release, stateDigest, {
|
|
265
|
-
command: `["
|
|
267
|
+
command: `[${workerCommand.map((part) => quote(part)).join(", ")}]`,
|
|
266
268
|
}));
|
|
267
269
|
}
|
|
268
270
|
const volumes = [
|
|
@@ -286,8 +288,8 @@ function renderComposeDocument(profile, release, images, stateDigest) {
|
|
|
286
288
|
* The migration runs as its own Compose project so it can be started, waited on,
|
|
287
289
|
* and removed without touching the running application definition.
|
|
288
290
|
*/
|
|
289
|
-
function renderMigrationDocument(profile, release, images) {
|
|
290
|
-
const command = profile.migration?.command ??
|
|
291
|
+
function renderMigrationDocument(profile, release, images, defaultCommand = ["bun", "run", "migrate:all"]) {
|
|
292
|
+
const command = profile.migration?.command ?? defaultCommand;
|
|
291
293
|
return (`# Generated by PodoKit. One-shot migration for ${release}.\n` +
|
|
292
294
|
`name: ${profile.target.project}-migrate\n` +
|
|
293
295
|
`services:\n` +
|
|
@@ -323,8 +325,9 @@ function renderComposeDeployment(projectRoot, profileName, profile, release, res
|
|
|
323
325
|
const root = (0, node_path_1.join)((0, node_path_1.resolve)(projectRoot), ".podokit", "runtime", "deploy", profileName);
|
|
324
326
|
(0, node_fs_1.rmSync)(root, { recursive: true, force: true });
|
|
325
327
|
(0, node_fs_1.mkdirSync)(root, { recursive: true });
|
|
326
|
-
const
|
|
327
|
-
const
|
|
328
|
+
const toolchain = (0, lockfile_1.readManifest)(projectRoot)?.toolchain ?? (0, toolchain_1.resolveToolchain)();
|
|
329
|
+
const composeDocument = renderComposeDocument(profile, release, images, effectiveStateDigest, (0, toolchain_1.toolchainWorkerCommand)(toolchain));
|
|
330
|
+
const migrationDocument = renderMigrationDocument(profile, release, images, (0, toolchain_1.toolchainMigrationCommand)(toolchain));
|
|
328
331
|
const composeFile = (0, node_path_1.join)(root, "compose.yaml");
|
|
329
332
|
const migrationFile = (0, node_path_1.join)(root, "compose.migrate.yaml");
|
|
330
333
|
(0, node_fs_1.writeFileSync)(composeFile, composeDocument);
|
|
@@ -84,14 +84,11 @@ interface PackageManifest {
|
|
|
84
84
|
* What the images ship outside their dependency tree.
|
|
85
85
|
*
|
|
86
86
|
* Every entry mirrors a `COPY --from=build` line in the generated Dockerfiles, which
|
|
87
|
-
* is what makes the copy equivalent to a rebuild for code-only changes.
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* `build/` would leave a stale entry running new routes.
|
|
93
|
-
* - `packages/*` are copied as real directories rather than the symlinks npm leaves
|
|
94
|
-
* behind, so their `dist/` is a separate destination from the apps'.
|
|
87
|
+
* is what makes the copy equivalent to a rebuild for code-only changes. The web
|
|
88
|
+
* image is different from the API image: the official Bun adapter bundles the web
|
|
89
|
+
* application and its workspace dependencies into `apps/web/build`, so that one
|
|
90
|
+
* directory is the complete web payload. API and worker processes still load
|
|
91
|
+
* workspace package output separately.
|
|
95
92
|
*
|
|
96
93
|
* `node_modules` is deliberately absent: the image installs a production-only,
|
|
97
94
|
* workspace-scoped tree for its own platform, and a developer's tree is neither.
|
|
@@ -102,12 +99,11 @@ export declare function excludesWithin(artifact: ComposeSyncArtifact, excludes:
|
|
|
102
99
|
/**
|
|
103
100
|
* Whether the image's dependency tree can still run this code.
|
|
104
101
|
*
|
|
105
|
-
* Only the runtime dependency sets matter
|
|
106
|
-
* declare and nothing else, so a change
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* the
|
|
110
|
-
* takes part.
|
|
102
|
+
* Only the runtime dependency sets matter for API and worker images: their package
|
|
103
|
+
* manager installed what these manifests declare and nothing else, so a change can
|
|
104
|
+
* leave the container without a package the new code imports. The web image has no
|
|
105
|
+
* runtime dependency tree; the official Bun adapter includes those dependencies in
|
|
106
|
+
* the synced build instead. `devDependencies` and package versions do not take part.
|
|
111
107
|
*/
|
|
112
108
|
export declare function runtimeDependenciesOf(manifest: PackageManifest): string;
|
|
113
109
|
export declare function planComposeSync(projectRoot: string, profileName: string, runner?: CommandRunner): ComposeSyncPlan;
|