stacks 0.53.1 → 0.56.3
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/.gitignore +4 -2
- package/README.md +71 -74
- package/api/package.json +3 -2
- package/art/logo-dark.svg +11 -0
- package/art/logo.svg +11 -0
- package/auto-imports.d.ts +1182 -841
- package/components.d.ts +7 -9
- package/core/actions/build.config.ts +181 -9
- package/core/actions/package.json +6 -8
- package/core/actions/src/build/component-libs.ts +2 -12
- package/core/actions/src/dev/index.ts +6 -5
- package/core/actions/src/generate/index.ts +2 -2
- package/core/actions/src/generate/settings.ts +1 -1
- package/core/actions/src/helpers/lib-entries.ts +43 -35
- package/core/actions/src/helpers/utils.ts +7 -9
- package/core/actions/src/lint/index.ts +14 -2
- package/core/actions/src/make.ts +7 -4
- package/core/actions/src/migrate.ts +2 -2
- package/core/actions/src/prepublish.ts +2 -2
- package/core/actions/src/release.ts +1 -1
- package/core/actions/src/seed.ts +1 -1
- package/core/actions/src/upgrade/framework.ts +1 -1
- package/core/actions/src/upgrade.ts +3 -3
- package/core/ai/build.config.ts +5 -7
- package/core/ai/package.json +5 -9
- package/core/alias/build.config.ts +5 -7
- package/core/alias/package.json +3 -6
- package/core/alias/src/index.ts +6 -7
- package/core/analytics/build.config.ts +5 -7
- package/core/analytics/package.json +6 -6
- package/core/arrays/build.config.ts +4 -7
- package/core/arrays/package.json +8 -4
- package/core/arrays/src/contains.ts +23 -0
- package/core/arrays/src/helpers.ts +206 -0
- package/core/arrays/src/index.ts +4 -226
- package/core/arrays/src/macro.ts +135 -0
- package/core/arrays/src/math.ts +19 -0
- package/core/auth/build.config.ts +4 -7
- package/core/auth/package.json +3 -3
- package/core/buddy/README.md +73 -76
- package/core/buddy/build.config.ts +1 -2
- package/core/buddy/package.json +4 -4
- package/core/buddy/src/cli.ts +10 -18
- package/core/buddy/src/commands/add.ts +2 -2
- package/core/buddy/src/commands/build.ts +23 -16
- package/core/buddy/src/commands/create.ts +2 -2
- package/core/buddy/src/commands/dev.ts +31 -30
- package/core/buddy/src/commands/example.ts +8 -14
- package/core/buddy/src/commands/generate.ts +16 -14
- package/core/buddy/src/commands/key.ts +1 -1
- package/core/buddy/src/commands/lint.ts +4 -4
- package/core/buddy/src/commands/make.ts +20 -15
- package/core/buddy/src/commands/setting.ts +2 -2
- package/core/buddy/src/commands/upgrade.ts +18 -22
- package/core/buddy/src/commands/version.ts +1 -1
- package/core/build/build.config.ts +22 -7
- package/core/build/package.json +11 -10
- package/core/build/src/desktop.ts +2 -2
- package/core/build/src/example-vue.ts +5 -4
- package/core/build/src/example-wc.ts +5 -4
- package/core/build/src/functions.ts +9 -11
- package/core/build/src/index.ts +7 -7
- package/core/build/src/stacks.ts +31 -50
- package/core/build/src/{pages.ts → views.ts} +13 -14
- package/core/build/src/vue-components.ts +73 -12
- package/core/build/src/web-components.ts +12 -11
- package/core/build/web-types.ts +3 -3
- package/core/cache/build.config.ts +7 -7
- package/core/cache/package.json +17 -17
- package/core/cache/tests/DynamoDB.test.ts +19 -33
- package/core/chat/build.config.ts +5 -7
- package/core/chat/package.json +8 -8
- package/core/cli/build.config.ts +3 -2
- package/core/cli/package.json +3 -3
- package/core/cli/src/console.ts +75 -2
- package/core/cli/src/helpers.ts +1 -1
- package/core/cli/src/parse.ts +2 -2
- package/core/cli/src/run.ts +5 -6
- package/core/cloud/build.config.ts +4 -7
- package/core/cloud/package.json +17 -3
- package/core/cloud/src/aws/index.ts +9 -0
- package/core/cloud/src/aws/logger.ts +8 -0
- package/core/cloud/src/aws/metrics.ts +8 -0
- package/core/cloud/src/aws/stack.ts +12 -0
- package/core/cloud/src/aws/tracer.ts +3 -0
- package/core/cloud/src/index.ts +1 -1
- package/core/cloud/src/runtime/nodejs/bootstrap.ts +16 -0
- package/core/cloud/src/runtime/nodejs/build.sh +1 -0
- package/core/collections/build.config.ts +3 -7
- package/core/collections/package.json +3 -3
- package/core/config/build.config.ts +33 -33
- package/core/config/package.json +4 -4
- package/core/config/src/defaults.ts +0 -3
- package/core/config/src/stacks.ts +10 -11
- package/core/database/build.config.ts +1 -2
- package/core/database/package.json +3 -3
- package/core/database/src/factory/index.ts +1 -1
- package/core/database/src/migrations/index.ts +1 -1
- package/core/datetime/build.config.ts +1 -2
- package/core/datetime/package.json +3 -3
- package/core/datetime/src/index.ts +2 -1
- package/core/desktop/build.config.ts +2 -1
- package/core/desktop/package.json +6 -6
- package/core/development/build.config.ts +15 -8
- package/core/development/package.json +11 -5
- package/core/development/src/index.ts +2 -0
- package/core/{domains → dns}/README.md +2 -2
- package/core/dns/build.config.ts +22 -0
- package/core/{domains → dns}/package.json +13 -9
- package/core/dns/src/index.ts +18 -0
- package/core/docs/build.config.ts +1 -2
- package/core/docs/package.json +4 -4
- package/core/email/build.config.ts +1 -2
- package/core/email/package.json +15 -15
- package/core/email/src/drivers/emailjs.ts +1 -1
- package/core/email/src/drivers/mailgun.ts +1 -1
- package/core/email/src/drivers/mailjet.ts +2 -2
- package/core/email/src/drivers/mandrill.ts +1 -1
- package/core/email/src/drivers/netcore.ts +1 -1
- package/core/email/src/drivers/nodemailer.ts +1 -1
- package/core/email/src/drivers/postmark.ts +1 -1
- package/core/email/src/drivers/sendgrid.ts +1 -1
- package/core/error-handling/build.config.ts +7 -2
- package/core/error-handling/package.json +6 -4
- package/core/error-handling/src/index.ts +45 -0
- package/core/events/README.md +1 -1
- package/core/events/build.config.ts +1 -2
- package/core/events/package.json +3 -3
- package/core/events/src/index.ts +8 -1
- package/core/faker/build.config.ts +3 -1
- package/core/faker/package.json +4 -4
- package/core/git/build.config.ts +3 -1
- package/core/git/package.json +4 -4
- package/core/health/build.config.ts +3 -1
- package/core/health/package.json +3 -3
- package/core/lint/build.config.ts +3 -1
- package/core/lint/package.json +6 -6
- package/core/logging/build.config.ts +5 -3
- package/core/logging/package.json +6 -6
- package/core/modules/build.config.ts +10 -7
- package/core/modules/package.json +3 -3
- package/core/notifications/README.md +1 -1
- package/core/notifications/build.config.ts +2 -1
- package/core/notifications/package.json +25 -25
- package/core/notifications/src/tailwind.config.ts +1 -1
- package/core/notifications/tests/email/Mailgun.test.ts +4 -4
- package/core/notifications/tests/email/Sendgrid.test.ts +2 -2
- package/core/objects/build.config.ts +15 -7
- package/core/objects/package.json +5 -4
- package/core/orm/build.config.ts +1 -2
- package/core/orm/package.json +3 -3
- package/core/pages/build.config.ts +4 -7
- package/core/pages/package.json +3 -3
- package/core/pages/src/index.ts +2 -2
- package/core/path/build.config.ts +1 -2
- package/core/path/package.json +4 -5
- package/core/path/src/index.ts +84 -65
- package/core/payments/build.config.ts +4 -7
- package/core/payments/package.json +5 -5
- package/core/push/build.config.ts +4 -7
- package/core/push/package.json +5 -5
- package/core/query-builder/build.config.ts +4 -7
- package/core/query-builder/package.json +7 -7
- package/core/queue/build.config.ts +4 -7
- package/core/queue/package.json +3 -3
- package/core/realtime/build.config.ts +4 -7
- package/core/realtime/package.json +3 -3
- package/core/realtime/src/index.ts +3 -1
- package/core/repl/README.md +53 -0
- package/core/repl/build.config.ts +12 -0
- package/core/repl/package.json +56 -0
- package/core/repl/src/index.ts +1 -0
- package/core/repl/tests/example.test.ts +7 -0
- package/core/router/build.config.ts +13 -7
- package/core/router/package.json +4 -4
- package/core/router/src/index.ts +2 -0
- package/core/scheduler/build.config.ts +4 -7
- package/core/scheduler/package.json +4 -4
- package/core/search-engine/build.config.ts +17 -7
- package/core/search-engine/package.json +4 -4
- package/core/search-engine/src/index.ts +2 -2
- package/core/security/build.config.ts +17 -7
- package/core/security/package.json +4 -3
- package/core/security/src/crypt.ts +11 -2
- package/core/server/build.config.ts +3 -7
- package/core/server/package.json +5 -5
- package/core/signals/README.md +2 -2
- package/core/signals/build.config.ts +4 -7
- package/core/signals/package.json +4 -4
- package/core/signals/src/index.ts +1 -1
- package/core/slug/build.config.ts +4 -7
- package/core/slug/package.json +3 -3
- package/core/slug/src/index.ts +2 -1
- package/core/sms/build.config.ts +3 -1
- package/core/sms/package.json +13 -13
- package/core/storage/build.config.ts +3 -7
- package/core/storage/package.json +5 -5
- package/core/storage/src/index.ts +2 -22
- package/core/strings/build.config.ts +1 -2
- package/core/strings/package.json +9 -3
- package/core/strings/src/case.ts +12 -0
- package/core/strings/src/index.ts +2 -1
- package/core/strings/src/is.ts +170 -0
- package/core/strings/src/macro.ts +139 -0
- package/core/strings/src/utils.ts +10 -12
- package/core/testing/build.config.ts +3 -1
- package/core/testing/package.json +8 -8
- package/core/tinker/build.config.ts +12 -0
- package/core/tinker/package.json +15 -3
- package/core/tinker/src/index.ts +1 -0
- package/core/types/build.config.ts +17 -8
- package/core/types/package.json +25 -19
- package/core/types/src/app.ts +4 -4
- package/core/types/src/cli.ts +36 -34
- package/core/types/src/cron-jobs.ts +25 -4
- package/core/types/src/database.ts +12 -3
- package/core/types/src/errors.ts +19 -1
- package/core/types/src/events.ts +13 -5
- package/core/types/src/git.ts +1 -1
- package/core/types/src/index.ts +2 -1
- package/core/types/src/library.ts +0 -7
- package/core/types/src/model.ts +21 -7
- package/core/types/src/money.ts +3 -0
- package/core/types/src/notifications.ts +9 -7
- package/core/types/src/queue.ts +34 -0
- package/core/types/src/search-engine.ts +3 -3
- package/core/types/src/stacks.ts +1 -12
- package/core/ui/build.config.ts +5 -7
- package/core/ui/package.json +7 -7
- package/core/utils/build.config.ts +32 -7
- package/core/utils/package.json +16 -16
- package/core/utils/src/config.ts +88 -49
- package/core/utils/src/currency.ts +3 -0
- package/core/utils/src/delete.ts +1 -3
- package/core/utils/src/helpers.ts +11 -5
- package/core/validation/build.config.ts +18 -8
- package/core/validation/package.json +8 -6
- package/core/validation/src/index.ts +2 -0
- package/core/validation/src/is.ts +27 -174
- package/core/validation/src/rules.ts +126 -0
- package/core/validation/src/types/env.ts +147 -0
- package/core/validation/src/types/index.ts +2 -0
- package/core/validation/src/types/money.ts +17 -0
- package/core/validation/src/validate.ts +14 -25
- package/core/vite-plugin/README.md +59 -0
- package/core/vite-plugin/build.config.ts +21 -0
- package/core/vite-plugin/package.json +51 -0
- package/core/vite-plugin/src/index.ts +23 -0
- package/core/vite-plugin/tests/example.test.ts +7 -0
- package/dictionary.txt +228 -0
- package/docs/package.json +3 -2
- package/env.d.ts +7 -0
- package/ide/jetbrains/.fleet/run.json +5 -0
- package/ide/jetbrains/.fleet/settings.json +4 -0
- package/ide/jetbrains/.idea/.gitignore +5 -0
- package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/ide/jetbrains/.idea/jsLibraryMappings.xml +6 -0
- package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
- package/ide/jetbrains/.idea/modules.xml +8 -0
- package/ide/jetbrains/.idea/stacks.iml +69 -0
- package/ide/jetbrains/.idea/vcs.xml +6 -0
- package/ide/jetbrains/.idea/webResources.xml +14 -0
- package/ide/jetbrains/.idea/workspace.xml +225 -0
- package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
- package/ide/jetbrains/installed.txt +4 -0
- package/ide/jetbrains/options/github-copilot.xml +5 -0
- package/ide/jetbrains/options/nodejs.xml +7 -0
- package/ide/jetbrains/options/templates.xml +124 -0
- package/ide/jetbrains/templates/JavaScript.xml +6 -0
- package/ide/jetbrains/templates/Stacks.xml +8 -0
- package/ide/vscode/.vscode/README.md +23 -0
- package/ide/vscode/.vscode/extensions.json +5 -0
- package/ide/vscode/.vscode/settings.json +111 -0
- package/ide/vscode/.vscode/stacks.code-snippets +182 -0
- package/ide/vscode/README.md +42 -0
- package/ide/vscode/logo.png +0 -0
- package/ide/vscode/package.json +64 -0
- package/{components → libs/components}/vue/main.ts +1 -1
- package/{components → libs/components}/vue/package.json +1 -1
- package/{components → libs/components}/web/package.json +1 -1
- package/libs/examples/vue/App.vue +12 -0
- package/libs/examples/vue/favicon.png +0 -0
- package/libs/examples/vue/index.html +20 -0
- package/libs/examples/web/favicon.png +0 -0
- package/libs/examples/web/index.html +13 -0
- package/libs/functions/package.json +41 -0
- package/package.json +104 -98
- package/reset.d.ts +1 -0
- package/scripts/ensure.sh +33 -0
- package/scripts/publish.sh +18 -0
- package/scripts/setup.sh +540 -0
- package/stacks/dashboard/README.md +74 -0
- package/{core/domains → stacks/dashboard}/build.config.ts +1 -1
- package/stacks/dashboard/package.json +46 -0
- package/stacks/dashboard/src/index.ts +0 -0
- package/stacks/dashboard/tests/example.test.ts +7 -0
- package/stacks/tables/README.md +109 -0
- package/stacks/tables/build.config.ts +16 -0
- package/stacks/tables/examples/vue/App.vue +12 -0
- package/stacks/tables/examples/vue/favicon.png +0 -0
- package/stacks/tables/examples/vue/index.html +20 -0
- package/stacks/tables/examples/web/favicon.png +0 -0
- package/stacks/tables/examples/web/index.html +13 -0
- package/stacks/tables/index.html +13 -0
- package/stacks/tables/package.json +57 -0
- package/stacks/tables/src/App.vue +23 -0
- package/stacks/tables/src/components/Demo.vue +84 -0
- package/stacks/tables/src/components/README.md +110 -0
- package/stacks/tables/src/components/Table.vue +342 -0
- package/stacks/tables/src/components/TableBody.vue +32 -0
- package/stacks/tables/src/components/TableCellActionItems.vue +9 -0
- package/stacks/tables/src/components/TableFilters.vue +704 -0
- package/stacks/tables/src/components/TableHead.vue +60 -0
- package/stacks/tables/src/components/TablePagination.vue +131 -0
- package/stacks/tables/src/components/TableRow.vue +73 -0
- package/stacks/tables/src/components/TableSearch.vue +39 -0
- package/stacks/tables/src/components/Tooltip.vue +10 -0
- package/stacks/tables/src/config/tables.ts +1 -0
- package/stacks/tables/src/docs/index.md +0 -0
- package/stacks/tables/src/functions/README.md +8 -0
- package/stacks/tables/src/functions/dark.ts +3 -0
- package/stacks/tables/src/functions/index.ts +2 -0
- package/stacks/tables/src/functions/table.ts +207 -0
- package/stacks/tables/src/main.ts +4 -0
- package/stacks/tables/tests/example.test.ts +7 -0
- package/stacks/tables/vite.config.ts +26 -0
- package/stacks/tinker/package.json +48 -0
- package/stacks/tinker/src/index.ts +1 -0
- package/stacks/x-ray/README.md +55 -0
- package/stacks/x-ray/build.config.ts +15 -0
- package/stacks/x-ray/index.html +13 -0
- package/stacks/x-ray/package.json +55 -0
- package/stacks/x-ray/routes/index.ts +19 -0
- package/stacks/x-ray/src/client.ts +14 -0
- package/stacks/x-ray/src/desktop/api/nitro.config.ts +19 -0
- package/stacks/x-ray/src/desktop/api/routes/api/logs.ts +7 -0
- package/stacks/x-ray/src/desktop/api/routes/api/store-logs.ts +22 -0
- package/stacks/x-ray/src/desktop/api/src/types.ts +7 -0
- package/stacks/x-ray/src/desktop/api/storage/index.ts +7 -0
- package/stacks/x-ray/src/desktop/app.vue +377 -0
- package/stacks/x-ray/src/desktop/functions/http.ts +26 -0
- package/stacks/x-ray/src/desktop/functions/types.ts +7 -0
- package/stacks/x-ray/src/desktop/main.ts +14 -0
- package/stacks/x-ray/src/desktop/modules/counter/mod.vue +44 -0
- package/stacks/x-ray/src/desktop/modules/fetcher/mod.vue +63 -0
- package/stacks/x-ray/src/desktop/plugins/unified/unified-app.ts +5 -0
- package/stacks/x-ray/src/desktop/plugins/unified/unified-styles.scss +0 -0
- package/stacks/x-ray/src/desktop/services/http.ts +45 -0
- package/stacks/x-ray/src/desktop/styles/app.scss +0 -0
- package/stacks/x-ray/src/http.ts +26 -0
- package/stacks/x-ray/src/index.ts +42 -0
- package/stacks/x-ray/src/ray.config.ts +27 -0
- package/stacks/x-ray/src/types.ts +8 -0
- package/stacks/x-ray/tests/example.test.ts +7 -0
- package/stacks.d.ts +22 -0
- package/tsconfig.json +21 -12
- package/vcs/github/CODE_OF_CONDUCT.md +83 -0
- package/vcs/github/CONTRIBUTING.md +190 -0
- package/vcs/github/EXPLANATIONS.md +41 -0
- package/vcs/github/FUNDING.yml +1 -0
- package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +62 -0
- package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
- package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
- package/vcs/github/SECURITY.md +70 -0
- package/vcs/github/renovate.json +5 -0
- package/vcs/github/stale.yml +14 -0
- package/vcs/github/workflows/README.md +16 -0
- package/vcs/github/workflows/ci.yml +173 -0
- package/vcs/github/workflows/export-size.yml +32 -0
- package/vcs/github/workflows/release.yml +57 -0
- package/{pages → views}/desktop/src/Cargo.lock +363 -46
- package/{pages → views}/desktop/src/Cargo.toml +2 -2
- package/{pages → views}/web/main.ts +2 -2
- package/api/serverless.yml +0 -11
- package/core/actions/node_modules/.bin/markdown-it +0 -17
- package/core/actions/node_modules/.bin/unbuild +0 -17
- package/core/build/entries/README.md +0 -7
- package/core/build/node_modules/.bin/unbuild +0 -17
- package/core/build/node_modules/.bin/vite +0 -17
- package/core/build/node_modules/.bin/vite-ssg +0 -17
- package/core/build/node_modules/.bin/vue-docgen-web-types +0 -17
- package/core/desktop/node_modules/.bin/tauri +0 -17
- package/core/development/node_modules/.bin/tsc +0 -17
- package/core/development/node_modules/.bin/tsserver +0 -17
- package/core/development/node_modules/.bin/tsx +0 -17
- package/core/development/node_modules/.bin/unbuild +0 -17
- package/core/docs/node_modules/.bin/vitepress +0 -17
- package/core/email/node_modules/.bin/maizzle +0 -17
- package/core/git/node_modules/.bin/bumpp +0 -17
- package/core/git/node_modules/.bin/changelogen +0 -17
- package/core/git/node_modules/.bin/commitizen +0 -17
- package/core/git/node_modules/.bin/cz +0 -17
- package/core/git/node_modules/.bin/giget +0 -17
- package/core/git/node_modules/.bin/git-cz +0 -17
- package/core/git/node_modules/.bin/simple-git-hooks +0 -17
- package/core/lint/node_modules/.bin/eslint +0 -17
- package/core/lint/node_modules/.bin/lint-staged +0 -17
- package/core/lint/node_modules/.bin/publint +0 -17
- package/core/logging/node_modules/.bin/tsc +0 -17
- package/core/logging/node_modules/.bin/tsserver +0 -17
- package/core/logging/node_modules/.bin/tsx +0 -17
- package/core/logging/node_modules/.bin/unbuild +0 -17
- package/core/notifications/node_modules/.bin/maizzle +0 -17
- package/core/server/node_modules/.bin/nitro +0 -17
- package/core/server/node_modules/.bin/nitropack +0 -17
- package/core/server/node_modules/.bin/vite +0 -17
- package/core/testing/node_modules/.bin/playwright +0 -17
- package/core/testing/node_modules/.bin/tsc +0 -17
- package/core/testing/node_modules/.bin/tsserver +0 -17
- package/core/testing/node_modules/.bin/unbuild +0 -17
- package/core/testing/node_modules/.bin/vitest +0 -17
- package/core/tinker/node_modules/.bin/tsx +0 -17
- package/core/types/node_modules/.bin/markdown-it +0 -17
- package/core/types/node_modules/.bin/vite +0 -17
- package/core/types/node_modules/.bin/vite-ssg +0 -17
- package/core/types/node_modules/.bin/vitepress +0 -17
- package/core/types/src/markdown.ts +0 -198
- package/core/ui/node_modules/.bin/vue-tsc +0 -17
- package/core/utils/node_modules/.bin/rimraf +0 -17
- package/core/utils/node_modules/.bin/semver +0 -17
- package/docs/node_modules/.bin/rimraf +0 -17
- package/docs/node_modules/.bin/vitepress +0 -17
- /package/core/{domains → dns}/tests/example.test.ts +0 -0
- /package/{LICENSE.md → ide/vscode/LICENSE.md} +0 -0
- /package/{components → libs/components}/vue/index.html +0 -0
- /package/{core/domains/src → stacks/tables/src/cli}/index.ts +0 -0
- /package/{pages → views}/desktop/.gitignore +0 -0
- /package/{pages → views}/desktop/README.md +0 -0
- /package/{pages → views}/desktop/index.html +0 -0
- /package/{pages → views}/desktop/package.json +0 -0
- /package/{pages → views}/desktop/public/favicon.svg +0 -0
- /package/{pages → views}/desktop/src/.gitignore +0 -0
- /package/{pages → views}/desktop/src/build.rs +0 -0
- /package/{pages → views}/desktop/src/icons/128x128.png +0 -0
- /package/{pages → views}/desktop/src/icons/128x128@2x.png +0 -0
- /package/{pages → views}/desktop/src/icons/32x32.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square107x107Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square142x142Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square150x150Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square284x284Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square30x30Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square310x310Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square44x44Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square71x71Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/Square89x89Logo.png +0 -0
- /package/{pages → views}/desktop/src/icons/StoreLogo.png +0 -0
- /package/{pages → views}/desktop/src/icons/icon.icns +0 -0
- /package/{pages → views}/desktop/src/icons/icon.ico +0 -0
- /package/{pages → views}/desktop/src/icons/icon.png +0 -0
- /package/{pages → views}/desktop/src/src/main.rs +0 -0
- /package/{pages → views}/desktop/src/tauri.conf.json +0 -0
- /package/{pages → views}/web/App.vue +0 -0
- /package/{pages → views}/web/index.html +0 -0
- /package/{pages → views}/web/public/_headers +0 -0
- /package/{pages → views}/web/public/favicon-dark.svg +0 -0
- /package/{pages → views}/web/public/favicon.svg +0 -0
- /package/{pages → views}/web/public/pwa-192x192.png +0 -0
- /package/{pages → views}/web/public/pwa-512x512.png +0 -0
- /package/{pages → views}/web/public/safari-pinned-tab.svg +0 -0
- /package/{pages → views}/web/styles/main.css +0 -0
- /package/{pages → views}/web/styles/markdown.css +0 -0
|
@@ -1,257 +1,110 @@
|
|
|
1
1
|
import { getTypeName, toString } from '@stacksjs/utils'
|
|
2
|
-
import validator from 'validator'
|
|
3
|
-
import type { HashAlgorithm } from '@stacksjs/types'
|
|
4
|
-
|
|
5
|
-
export function isEmail(email: string) {
|
|
6
|
-
return validator.isEmail(email)
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function isStrongPassword(password: string) {
|
|
10
|
-
return validator.isStrongPassword(password)
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function isAlphanumeric(username: string) {
|
|
14
|
-
return validator.isAlphanumeric(username)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function validateUsername(username: string) {
|
|
18
|
-
return isAlphanumeric(username)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function isURL(url: string) {
|
|
22
|
-
return validator.isURL(url)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function isMobilePhone(phoneNumber: string) {
|
|
26
|
-
return validator.isMobilePhone(phoneNumber)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function isAlpha(name: string) {
|
|
30
|
-
return validator.isAlpha(name)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function isPostalCode(zipCode: string) {
|
|
34
|
-
return validator.isPostalCode(zipCode, 'any')
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function isNumeric(number: string) {
|
|
38
|
-
return validator.isNumeric(number)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function isHexColor(color: string) {
|
|
42
|
-
return validator.isHexColor(color)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function isHexadecimal(hex: string) {
|
|
46
|
-
return validator.isHexadecimal(hex)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function isBase64(base64: string) {
|
|
50
|
-
return validator.isBase64(base64)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export function isUUID(uuid: string) {
|
|
54
|
-
return validator.isUUID(uuid)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function isJSON(json: string) {
|
|
58
|
-
return validator.isJSON(json)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function isCreditCard(creditCard: string) {
|
|
62
|
-
return validator.isCreditCard(creditCard)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function isISBN(isbn: string) {
|
|
66
|
-
return validator.isISBN(isbn)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function isIP(ip: string) {
|
|
70
|
-
return validator.isIP(ip)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function isIPRange(ip: string) {
|
|
74
|
-
return validator.isIPRange(ip)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export function isMACAddress(macAddress: string) {
|
|
78
|
-
return validator.isMACAddress(macAddress)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export function isLatLong(latitude: string) {
|
|
82
|
-
return validator.isLatLong(latitude)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export function isLatitude(longitude: string) {
|
|
86
|
-
return validator.isLatLong(longitude)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function isLongitude(longitude: string) {
|
|
90
|
-
return validator.isLatLong(longitude)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function isCurrency(currency: string) {
|
|
94
|
-
return validator.isCurrency(currency)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function isDataURI(dataURI: string) {
|
|
98
|
-
return validator.isDataURI(dataURI)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export function isMimeType(mimeType: string) {
|
|
102
|
-
return validator.isMimeType(mimeType)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export function isJWT(jwt: string) {
|
|
106
|
-
return validator.isJWT(jwt)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export function isMongoId(mongoId: string) {
|
|
110
|
-
return validator.isMongoId(mongoId)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
export function isAscii(ascii: string) {
|
|
114
|
-
return validator.isAscii(ascii)
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export function isBase32(base32: string) {
|
|
118
|
-
return validator.isBase32(base32)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export function isByteLength(byteLength: string) {
|
|
122
|
-
return validator.isByteLength(byteLength)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export function isFQDN(fqdn: string) {
|
|
126
|
-
return validator.isFQDN(fqdn)
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
export function isFullWidth(fullWidth: string) {
|
|
130
|
-
return validator.isFullWidth(fullWidth)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export function isHalfWidth(halfWidth: string) {
|
|
134
|
-
return validator.isHalfWidth(halfWidth)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export function isHash(hash: string, algorithm: HashAlgorithm) {
|
|
138
|
-
return validator.isHash(hash, algorithm)
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export function isHSL(hsl: string) {
|
|
142
|
-
return validator.isHSL(hsl)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export function isIBAN(iban: string) {
|
|
146
|
-
return validator.isIBAN(iban)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export function isIdentityCard(identityCard: string) {
|
|
150
|
-
return validator.isIdentityCard(identityCard)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export function isISIN(isin: string) {
|
|
154
|
-
return validator.isISIN(isin)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export function isISO8601(iso8601: string) {
|
|
158
|
-
return validator.isISO8601(iso8601)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export function isISRC(isrc: string) {
|
|
162
|
-
return validator.isISRC(isrc)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export function isISSN(issn: string) {
|
|
166
|
-
return validator.isISSN(issn)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export function isISO31661Alpha2(iso31661Alpha2: string) {
|
|
170
|
-
return validator.isISO31661Alpha2(iso31661Alpha2)
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export function isISO31661Alpha3(iso31661Alpha3: string) {
|
|
174
|
-
return validator.isISO31661Alpha3(iso31661Alpha3)
|
|
175
|
-
}
|
|
176
2
|
|
|
177
3
|
export function isDef<T = any>(val?: T): val is T {
|
|
178
4
|
return typeof val !== 'undefined'
|
|
179
5
|
}
|
|
6
|
+
|
|
180
7
|
export function isBoolean(val: any): val is boolean {
|
|
181
8
|
return typeof val === 'boolean'
|
|
182
9
|
}
|
|
10
|
+
|
|
183
11
|
export function isFunction<T extends Function>(val: any): val is T {
|
|
184
12
|
return typeof val === 'function'
|
|
185
13
|
}
|
|
14
|
+
|
|
186
15
|
export function isNumber(val: any): val is number {
|
|
187
16
|
return typeof val === 'number'
|
|
188
17
|
}
|
|
18
|
+
|
|
189
19
|
export function isString(val: unknown): val is string {
|
|
190
20
|
return typeof val === 'string'
|
|
191
21
|
}
|
|
22
|
+
|
|
192
23
|
export function isObject(val: any): val is object {
|
|
193
24
|
return toString(val) === '[object Object]'
|
|
194
25
|
}
|
|
26
|
+
|
|
195
27
|
export function isWindow(val: any): boolean {
|
|
196
28
|
return typeof window !== 'undefined' && toString(val) === '[object Window]'
|
|
197
29
|
}
|
|
30
|
+
|
|
198
31
|
export const isBrowser = typeof window !== 'undefined'
|
|
32
|
+
|
|
199
33
|
export const isServer = typeof document === 'undefined' // https://remix.run/docs/en/v1/pages/gotchas#typeof-window-checks
|
|
34
|
+
|
|
200
35
|
export function isMap(val: any): val is Map<any, any> {
|
|
201
36
|
return toString(val) === '[object Map]'
|
|
202
37
|
}
|
|
38
|
+
|
|
203
39
|
export function isSet(val: any): val is Set<any> {
|
|
204
40
|
return toString(val) === '[object Set]'
|
|
205
41
|
}
|
|
42
|
+
|
|
206
43
|
export function isPromise<T = any>(val: any): val is Promise<T> {
|
|
207
44
|
return toString(val) === '[object Promise]'
|
|
208
45
|
}
|
|
46
|
+
|
|
209
47
|
export function isUndefined(v: any) {
|
|
210
48
|
return getTypeName(v) === 'undefined'
|
|
211
49
|
}
|
|
50
|
+
|
|
212
51
|
export function isNull(v: any) {
|
|
213
52
|
return getTypeName(v) === 'null'
|
|
214
53
|
}
|
|
54
|
+
|
|
215
55
|
export function isSymbol(v: any) {
|
|
216
56
|
return getTypeName(v) === 'symbol'
|
|
217
57
|
}
|
|
58
|
+
|
|
218
59
|
export function isDate(v: any) {
|
|
219
60
|
return getTypeName(v) === 'date'
|
|
220
61
|
}
|
|
62
|
+
|
|
221
63
|
export function isRegExp(v: any) {
|
|
222
64
|
return getTypeName(v) === 'regexp'
|
|
223
65
|
}
|
|
66
|
+
|
|
224
67
|
export function isArray(v: any) {
|
|
225
68
|
return getTypeName(v) === 'array'
|
|
226
69
|
}
|
|
70
|
+
|
|
227
71
|
export function isPrimitive(v: any) {
|
|
228
72
|
const type = getTypeName(v)
|
|
229
73
|
return type === 'null' || type === 'undefined' || type === 'string' || type === 'number' || type === 'boolean' || type === 'symbol'
|
|
230
74
|
}
|
|
75
|
+
|
|
231
76
|
export function isInteger(v: any) {
|
|
232
77
|
return isNumber(v) && Number.isInteger(v)
|
|
233
78
|
}
|
|
79
|
+
|
|
234
80
|
export function isFloat(v: any) {
|
|
235
81
|
return isNumber(v) && !Number.isInteger(v)
|
|
236
82
|
}
|
|
83
|
+
|
|
237
84
|
export function isPositive(v: any) {
|
|
238
85
|
return isNumber(v) && v > 0
|
|
239
86
|
}
|
|
87
|
+
|
|
240
88
|
export function isNegative(v: any) {
|
|
241
89
|
return isNumber(v) && v < 0
|
|
242
90
|
}
|
|
91
|
+
|
|
243
92
|
export function isEven(v: any) {
|
|
244
93
|
return isNumber(v) && v % 2 === 0
|
|
245
94
|
}
|
|
95
|
+
|
|
246
96
|
export function isOdd(v: any) {
|
|
247
97
|
return isNumber(v) && v % 2 !== 0
|
|
248
98
|
}
|
|
99
|
+
|
|
249
100
|
export function isEvenOrOdd(v: any) {
|
|
250
101
|
return isNumber(v) && (v % 2 === 0 ? 'even' : 'odd')
|
|
251
102
|
}
|
|
103
|
+
|
|
252
104
|
export function isPositiveOrNegative(v: any) {
|
|
253
105
|
return isNumber(v) && (v > 0 ? 'positive' : 'negative')
|
|
254
106
|
}
|
|
107
|
+
|
|
255
108
|
export function isIntegerOrFloat(v: any) {
|
|
256
109
|
return isNumber(v) && (Number.isInteger(v) ? 'integer' : 'float')
|
|
257
110
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { USD, currency } from '@stacksjs/utils'
|
|
2
|
+
import { validator } from './validate'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Thanks to VineJS for the following types:
|
|
6
|
+
*
|
|
7
|
+
* The context shared with the entire validation pipeline.
|
|
8
|
+
* Each field gets its own context object.
|
|
9
|
+
*/
|
|
10
|
+
export interface FieldContext {
|
|
11
|
+
/**
|
|
12
|
+
* Field value
|
|
13
|
+
*/
|
|
14
|
+
value: unknown
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The data property is the top-level object under validation.
|
|
18
|
+
*/
|
|
19
|
+
data: any
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Shared metadata across the entire validation lifecycle. It can be
|
|
23
|
+
* used to pass data between validation rules
|
|
24
|
+
*/
|
|
25
|
+
meta: Record<string, any>
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Mutate the value of field under validation.
|
|
29
|
+
*/
|
|
30
|
+
mutate(newValue: any, field: FieldContext): void
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Report error to the error reporter
|
|
34
|
+
*/
|
|
35
|
+
report: ErrorReporterContract['report']
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Is this field valid. Default: true
|
|
39
|
+
*/
|
|
40
|
+
isValid: boolean
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Is this field has value defined.
|
|
44
|
+
*/
|
|
45
|
+
isDefined: boolean
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Wildcard path for the field. The value is a nested
|
|
49
|
+
* pointer to the field under validation.
|
|
50
|
+
*
|
|
51
|
+
* In case of arrays, the `*` wildcard is used.
|
|
52
|
+
*/
|
|
53
|
+
wildCardPath: string
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The parent property is the parent of the field. It could be an
|
|
57
|
+
* array or an object.
|
|
58
|
+
*/
|
|
59
|
+
parent: any
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Name of the field under validation. In case of an array, the field
|
|
63
|
+
* name will be a number
|
|
64
|
+
*/
|
|
65
|
+
name: string | number
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Is this field an array member
|
|
69
|
+
*/
|
|
70
|
+
isArrayMember: boolean
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Thanks to VineJS for the following types:
|
|
75
|
+
*
|
|
76
|
+
* The error reporter is used to report errors during the validation
|
|
77
|
+
* process.
|
|
78
|
+
*/
|
|
79
|
+
export interface ErrorReporterContract {
|
|
80
|
+
/**
|
|
81
|
+
* A boolean to known if there are one or more
|
|
82
|
+
* errors.
|
|
83
|
+
*/
|
|
84
|
+
hasErrors: boolean
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Creates an instance of an exception to throw
|
|
88
|
+
*/
|
|
89
|
+
createError(): Error
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Report error for a field
|
|
93
|
+
*/
|
|
94
|
+
report(message: string, rule: string, field: FieldContext, args?: Record<string, any>): any
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// export const isMoney = validator.createRule((value: unknown, _, field: FieldContext) => {
|
|
98
|
+
export const isMoney = validator.createRule((value: unknown, _, field: FieldContext) => {
|
|
99
|
+
/**
|
|
100
|
+
* Convert string representation of a number to a JavaScript
|
|
101
|
+
* Number data type.
|
|
102
|
+
*/
|
|
103
|
+
const numericValue = validator.helpers.asNumber(value)
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Report error, if the value is NaN post-conversion
|
|
107
|
+
*/
|
|
108
|
+
if (Number.isNaN(numericValue)) {
|
|
109
|
+
field.report(
|
|
110
|
+
'The {{ field }} field value must be a number',
|
|
111
|
+
'money',
|
|
112
|
+
field,
|
|
113
|
+
)
|
|
114
|
+
return
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Create amount type
|
|
119
|
+
*/
|
|
120
|
+
const amount = currency({ amount: numericValue, currency: USD })
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Mutate the field's value
|
|
124
|
+
*/
|
|
125
|
+
field.mutate(amount, field)
|
|
126
|
+
}) as any
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import process from 'node:process'
|
|
2
|
+
import type { VineObject } from '@vinejs/vine'
|
|
3
|
+
import validator from '@vinejs/vine'
|
|
4
|
+
import type { Infer } from '@vinejs/vine/build/src/types'
|
|
5
|
+
import { loadEnv } from 'vite'
|
|
6
|
+
import { projectPath } from '@stacksjs/path'
|
|
7
|
+
|
|
8
|
+
// TODO: envSchema needs to be auto generated from the .env file
|
|
9
|
+
// envSchema could also be named "backendEnvSchema"
|
|
10
|
+
const envSchema = validator.object({
|
|
11
|
+
APP_NAME: validator.string().optional(),
|
|
12
|
+
APP_ENV: validator.enum(['local', 'development', 'staging', 'production']).optional(),
|
|
13
|
+
APP_KEY: validator.string().optional(),
|
|
14
|
+
APP_URL: validator.string(),
|
|
15
|
+
APP_DEBUG: validator.boolean().optional(),
|
|
16
|
+
APP_SUBDOMAIN_API: validator.string().optional(),
|
|
17
|
+
APP_SUBDOMAIN_DOCS: validator.string().optional(),
|
|
18
|
+
APP_SUBDOMAIN_LIBRARY: validator.string().optional(),
|
|
19
|
+
APP_BUCKET: validator.string().optional(),
|
|
20
|
+
|
|
21
|
+
DB_CONNECTION: validator.string().optional(),
|
|
22
|
+
DB_HOST: validator.string().optional(),
|
|
23
|
+
DB_PORT: validator.number().optional(),
|
|
24
|
+
DB_DATABASE: validator.string().optional(),
|
|
25
|
+
DB_USERNAME: validator.string().optional(),
|
|
26
|
+
DB_PASSWORD: validator.string().optional(),
|
|
27
|
+
|
|
28
|
+
SEARCH_ENGINE_DRIVER: validator.string().optional(),
|
|
29
|
+
MEILISEARCH_HOST: validator.string().optional(),
|
|
30
|
+
MEILISEARCH_KEY: validator.string().optional(),
|
|
31
|
+
|
|
32
|
+
CACHE_DRIVER: validator.enum(['dynamodb', 'memcached', 'redis']).optional(),
|
|
33
|
+
CACHE_PREFIX: validator.string().optional(),
|
|
34
|
+
CACHE_TTL: validator.number().optional(),
|
|
35
|
+
|
|
36
|
+
AWS_ACCESS_KEY_ID: validator.string().optional(),
|
|
37
|
+
AWS_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
38
|
+
AWS_DEFAULT_REGION: validator.string().optional(),
|
|
39
|
+
DYNAMODB_CACHE_TABLE: validator.string().optional(),
|
|
40
|
+
DYNAMODB_ENDPOINT: validator.string().optional(),
|
|
41
|
+
|
|
42
|
+
MEMCACHED_PERSISTENT_ID: validator.string().optional(),
|
|
43
|
+
MEMCACHED_USERNAME: validator.string().optional(),
|
|
44
|
+
MEMCACHED_PASSWORD: validator.string().optional(),
|
|
45
|
+
MEMCACHED_HOST: validator.string().optional(),
|
|
46
|
+
MEMCACHED_PORT: validator.number().optional(),
|
|
47
|
+
|
|
48
|
+
REDIS_HOST: validator.string().optional(),
|
|
49
|
+
REDIS_PORT: validator.number().optional(),
|
|
50
|
+
|
|
51
|
+
MAIL_FROM_NAME: validator.string().optional(),
|
|
52
|
+
MAIL_FROM_ADDRESS: validator.string().optional(),
|
|
53
|
+
|
|
54
|
+
EMAILJS_HOST: validator.string().optional(),
|
|
55
|
+
EMAILJS_USERNAME: validator.string().optional(),
|
|
56
|
+
EMAILJS_PASSWORD: validator.string().optional(),
|
|
57
|
+
EMAILJS_PORT: validator.number().optional(),
|
|
58
|
+
EMAILJS_SECURE: validator.boolean().optional(),
|
|
59
|
+
|
|
60
|
+
MAILGUN_API_KEY: validator.string().optional(),
|
|
61
|
+
MAILGUN_DOMAIN: validator.string().optional(),
|
|
62
|
+
MAILGUN_USERNAME: validator.string().optional(),
|
|
63
|
+
|
|
64
|
+
MAILJET_API_KEY: validator.string().optional(),
|
|
65
|
+
MAILJET_API_SECRET: validator.string().optional(),
|
|
66
|
+
|
|
67
|
+
MANDRILL_API_KEY: validator.string().optional(),
|
|
68
|
+
|
|
69
|
+
NETCORE_API_KEY: validator.string().optional(),
|
|
70
|
+
|
|
71
|
+
NODEMAILER_HOST: validator.string().optional(),
|
|
72
|
+
NODEMAILER_USERNAME: validator.string().optional(),
|
|
73
|
+
NODEMAILER_PASSWORD: validator.string().optional(),
|
|
74
|
+
NODEMAILER_PORT: validator.number().optional(),
|
|
75
|
+
NODEMAILER_SECURE: validator.boolean().optional(),
|
|
76
|
+
|
|
77
|
+
POSTMARK_API_TOKEN: validator.string().optional(),
|
|
78
|
+
POSTMARK_API_KEY: validator.string().optional(),
|
|
79
|
+
|
|
80
|
+
SENDGRID_API_KEY: validator.string().optional(),
|
|
81
|
+
SENDGRID_SENDER_NAME: validator.string().optional(),
|
|
82
|
+
|
|
83
|
+
SES_API_VERSION: validator.string().optional(),
|
|
84
|
+
SES_ACCESS_KEY_ID: validator.string().optional(),
|
|
85
|
+
SES_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
86
|
+
SES_REGION: validator.string().optional(),
|
|
87
|
+
|
|
88
|
+
FROM_PHONE_NUMBER: validator.string().optional(),
|
|
89
|
+
TWILIO_ACCOUNT_SID: validator.string().optional(),
|
|
90
|
+
TWILIO_AUTH_TOKEN: validator.string().optional(),
|
|
91
|
+
|
|
92
|
+
VONAGE_API_KEY: validator.string().optional(),
|
|
93
|
+
VONAGE_API_SECRET: validator.string().optional(),
|
|
94
|
+
|
|
95
|
+
GUPSHUP_USER_ID: validator.string().optional(),
|
|
96
|
+
GUPSHUP_PASSWORD: validator.string().optional(),
|
|
97
|
+
|
|
98
|
+
PLIVO_ACCOUNT_ID: validator.string().optional(),
|
|
99
|
+
PLIVO_AUTH_TOKEN: validator.string().optional(),
|
|
100
|
+
|
|
101
|
+
SMS77_API_KEY: validator.string().optional(),
|
|
102
|
+
|
|
103
|
+
SNS_REGION: validator.string().optional(),
|
|
104
|
+
SNS_ACCESS_KEY_ID: validator.string().optional(),
|
|
105
|
+
SNS_SECRET_ACCESS_KEY: validator.string().optional(),
|
|
106
|
+
|
|
107
|
+
TELNYX_API_KEY: validator.string().optional(),
|
|
108
|
+
TELNYX_MESSAGE_PROFILE_ID: validator.string().optional(),
|
|
109
|
+
|
|
110
|
+
TERMII_API_KEY: validator.string().optional(),
|
|
111
|
+
|
|
112
|
+
SLACK_FROM: validator.string().optional(),
|
|
113
|
+
SLACK_APPLICATION_ID: validator.string().optional(),
|
|
114
|
+
SLACK_CLIENT_ID: validator.string().optional(),
|
|
115
|
+
SLACK_SECRET_KEY: validator.string().optional(),
|
|
116
|
+
|
|
117
|
+
MICROSOFT_TEAMS_APPLICATION_ID: validator.string().optional(),
|
|
118
|
+
MICROSOFT_TEAMS_CLIENT_ID: validator.string().optional(),
|
|
119
|
+
MICROSOFT_TEAMS_SECRET: validator.string().optional(),
|
|
120
|
+
}) as VineObject<any, any, any>
|
|
121
|
+
|
|
122
|
+
const frontendEnvSchema = validator.object({
|
|
123
|
+
FRONTEND_APP_ENV: validator.enum(['local', 'development', 'staging', 'production']).optional(),
|
|
124
|
+
FRONTEND_APP_URL: validator.string().optional(),
|
|
125
|
+
}) as VineObject<any, any, any>
|
|
126
|
+
|
|
127
|
+
export type Env = Infer<typeof envSchema>
|
|
128
|
+
export type EnvKeys = keyof Env
|
|
129
|
+
|
|
130
|
+
export type FrontendEnv = Infer<typeof frontendEnvSchema>
|
|
131
|
+
export type FrontendEnvKeys = keyof FrontendEnv
|
|
132
|
+
|
|
133
|
+
export const env = process.env as Env
|
|
134
|
+
export async function getEnv() {
|
|
135
|
+
try {
|
|
136
|
+
const mode = process.env.NODE_ENV ?? 'development'
|
|
137
|
+
const data = loadEnv(mode, projectPath(), '')
|
|
138
|
+
const v = validator.compile(envSchema)
|
|
139
|
+
|
|
140
|
+
return v.validate(data)
|
|
141
|
+
}
|
|
142
|
+
catch (error: any) {
|
|
143
|
+
handleError(error)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export { loadEnv }
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FieldOptions, Validation } from '@vinejs/vine/build/src/types'
|
|
2
|
+
import type { Money } from '@stacksjs/types'
|
|
3
|
+
import { BaseLiteralType } from '@vinejs/vine'
|
|
4
|
+
import { isMoney } from '../rules'
|
|
5
|
+
|
|
6
|
+
export class MoneyValidator extends BaseLiteralType<Money, Money> {
|
|
7
|
+
constructor(options?: FieldOptions, validations?: Validation<any>[]) {
|
|
8
|
+
super(options, validations || [isMoney()])
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
clone() {
|
|
12
|
+
return new MoneyValidator(
|
|
13
|
+
this.cloneOptions(),
|
|
14
|
+
this.cloneValidations(),
|
|
15
|
+
) as this
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { VineString as ValidationString } from '@vinejs/vine'
|
|
2
|
+
import validator, { Vine as Validator } from '@vinejs/vine'
|
|
3
|
+
import { MoneyValidator } from './types/money'
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
APP_ENV: validate.string().default('local').optional(),
|
|
6
|
-
APP_KEY: validate.string(),
|
|
7
|
-
APP_URL: validate.string().url().default('http://localhost:3333'),
|
|
8
|
-
APP_DEBUG: validate.boolean().default(true),
|
|
9
|
-
DB_CONNECTION: validate.string().default('mysql').optional(),
|
|
10
|
-
DB_DATABASE: validate.string().default('stacks').optional(),
|
|
11
|
-
DB_USERNAME: validate.string().default('root').optional(),
|
|
12
|
-
DB_PASSWORD: validate.string().optional(),
|
|
13
|
-
SEARCH_ENGINE_DRIVER: validate.string().optional(),
|
|
14
|
-
MEILISEARCH_HOST: validate.string().optional().default('http://127.0.0.1:7700'),
|
|
15
|
-
MEILISEARCH_KEY: validate.string().optional(),
|
|
5
|
+
Validator.macro('money', () => {
|
|
6
|
+
return new MoneyValidator()
|
|
16
7
|
})
|
|
17
8
|
|
|
18
|
-
|
|
9
|
+
const validate: Validator = validator
|
|
10
|
+
const string: ValidationString = validator.string()
|
|
11
|
+
const number: Validator['number'] = validator.number
|
|
12
|
+
const boolean: Validator['boolean'] = validator.boolean
|
|
13
|
+
const array: Validator['array'] = validator.array
|
|
14
|
+
const object: Validator['object'] = validator.object
|
|
15
|
+
const any: Validator['any'] = validator.any
|
|
16
|
+
// const email = () => validator.string().email()
|
|
19
17
|
|
|
20
|
-
export
|
|
21
|
-
String = 'String',
|
|
22
|
-
Number = 'Number',
|
|
23
|
-
Boolean = 'Boolean',
|
|
24
|
-
Date = 'Date',
|
|
25
|
-
Object = 'Object',
|
|
26
|
-
Array = 'Array',
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export { validate, z }
|
|
18
|
+
export { validate, validator, Validator, string, number, boolean, array, object, any }
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Vite Plugin Stacks
|
|
2
|
+
|
|
3
|
+
This package contains the Stacks Vite plugin.
|
|
4
|
+
|
|
5
|
+
## ☘️ Features
|
|
6
|
+
|
|
7
|
+
wip
|
|
8
|
+
|
|
9
|
+
- ⚡️
|
|
10
|
+
|
|
11
|
+
wip
|
|
12
|
+
|
|
13
|
+
## 🤖 Usage
|
|
14
|
+
|
|
15
|
+
wip
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm i -D @stacksjs/vite-plugin
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Now, you can use it in your project:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
import vitePlugin from '@stacksjs/vite-plugin'
|
|
25
|
+
|
|
26
|
+
// wip
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Learn more in the docs.
|
|
30
|
+
|
|
31
|
+
## 🧪 Testing
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm test
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 📈 Changelog
|
|
38
|
+
|
|
39
|
+
Please see our [releases](https://github.com/stacksjs/stacks/releases) page for more information on what has changed recently.
|
|
40
|
+
|
|
41
|
+
## 🚜 Contributing
|
|
42
|
+
|
|
43
|
+
Please review the [Contributing Guide](https://github.com/stacksjs/contributing) for details.
|
|
44
|
+
|
|
45
|
+
## 🏝 Community
|
|
46
|
+
|
|
47
|
+
For help, discussion about best practices, or any other conversation that would benefit from being searchable:
|
|
48
|
+
|
|
49
|
+
[Discussions on GitHub](https://github.com/stacksjs/stacks/discussions)
|
|
50
|
+
|
|
51
|
+
For casual chit-chat with others using this package:
|
|
52
|
+
|
|
53
|
+
[Join the Stacks Discord Server](https://discord.ow3.org)
|
|
54
|
+
|
|
55
|
+
## 📄 License
|
|
56
|
+
|
|
57
|
+
The MIT License (MIT). Please see [LICENSE](https://github.com/stacksjs/stacks/tree/main/LICENSE.md) for more information.
|
|
58
|
+
|
|
59
|
+
Made with ❤️
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { alias, defineBuildConfig } from '@stacksjs/development'
|
|
2
|
+
|
|
3
|
+
export default defineBuildConfig({
|
|
4
|
+
alias,
|
|
5
|
+
|
|
6
|
+
entries: [
|
|
7
|
+
'./src/index',
|
|
8
|
+
],
|
|
9
|
+
|
|
10
|
+
externals: [
|
|
11
|
+
'vite',
|
|
12
|
+
'vitepress',
|
|
13
|
+
],
|
|
14
|
+
|
|
15
|
+
rollup: {
|
|
16
|
+
inlineDependencies: true,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
clean: true,
|
|
20
|
+
declaration: true,
|
|
21
|
+
})
|