stacks 0.52.10 → 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/nitro.config.ts +2 -2
- package/api/package.json +3 -2
- package/api/routes/index.ts +1 -1
- package/art/logo-dark.svg +11 -0
- package/art/logo.svg +11 -0
- package/auto-imports.d.ts +1186 -839
- package/components.d.ts +7 -9
- package/core/actions/build.config.ts +181 -9
- package/core/actions/package.json +6 -12
- package/core/actions/src/build/component-libs.ts +2 -12
- package/core/actions/src/clean.ts +1 -1
- package/core/actions/src/dev/index.ts +6 -14
- package/core/actions/src/generate/index.ts +2 -2
- package/core/actions/src/generate/settings.ts +3 -3
- package/core/actions/src/helpers/lib-entries.ts +47 -40
- package/core/actions/src/helpers/utils.ts +7 -9
- package/core/actions/src/lint/index.ts +14 -2
- package/core/actions/src/make.ts +8 -5
- package/core/actions/src/migrate.ts +2 -2
- package/core/actions/src/prepublish.ts +2 -2
- package/core/actions/src/release.ts +5 -3
- package/core/actions/src/seed.ts +1 -1
- package/core/actions/src/upgrade/framework.ts +29 -29
- package/core/actions/src/upgrade/index.ts +13 -15
- package/core/actions/src/upgrade/node.ts +4 -4
- package/core/actions/src/upgrade/package-manager.ts +4 -4
- 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 +12 -43
- 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/fresh.ts +1 -1
- 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 +5 -5
- package/core/buddy/src/commands/make.ts +20 -15
- package/core/buddy/src/commands/onboarding.ts +9 -15
- package/core/buddy/src/commands/setting.ts +10 -12
- package/core/buddy/src/commands/upgrade.ts +18 -22
- package/core/buddy/src/commands/version.ts +7 -19
- package/core/buddy/src/index.ts +0 -21
- 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 +11 -13
- package/core/build/src/index.ts +7 -7
- package/core/build/src/stacks.ts +31 -53
- 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 +13 -12
- 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/src/drivers/redis.ts +2 -2
- 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 +6 -7
- 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 +2 -2
- package/core/database/src/migrations/index.ts +3 -3
- 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/actions/send.ts +2 -0
- 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/email/src/tailwind.config.ts +3 -3
- 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 +7 -7
- 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/chat/Slack.test.ts +35 -35
- package/core/notifications/tests/email/Mailgun.test.ts +41 -41
- package/core/notifications/tests/email/Sendgrid.test.ts +41 -41
- package/core/notifications/tests/sms/Twilio.test.ts +38 -38
- package/core/objects/build.config.ts +15 -7
- package/core/objects/package.json +5 -4
- package/core/objects/src/index.ts +2 -1
- 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 +39 -39
- package/core/path/build.config.ts +1 -2
- package/core/path/package.json +4 -5
- package/core/path/src/index.ts +94 -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/helpers.ts +1 -1
- 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 +6 -5
- package/core/server/src/index.ts +2 -5
- package/core/server/src/nitro.config.ts +2 -2
- 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/sms/src/drivers/gupshup.ts +1 -1
- package/core/sms/src/drivers/nexmo.ts +3 -2
- package/core/sms/src/drivers/plivo.ts +3 -2
- package/core/sms/src/drivers/sms77.ts +3 -2
- package/core/sms/src/drivers/sns.ts +1 -1
- package/core/sms/src/drivers/telnyx.ts +3 -2
- package/core/sms/src/drivers/termii.ts +3 -2
- package/core/sms/src/drivers/twilio.ts +3 -2
- package/core/storage/build.config.ts +3 -7
- package/core/storage/package.json +5 -5
- package/core/storage/src/index.ts +2 -24
- 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 +34 -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/fs.ts +5 -0
- 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 -8
- 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/guards.ts +3 -3
- package/core/utils/src/helpers.ts +36 -12
- package/core/utils/src/vendors.ts +1 -0
- 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/views/web/main.ts +26 -0
- 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/actions/src/generate/package-jsons.ts +0 -11
- 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/pages/web/main.ts +0 -26
- /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,10 +1,11 @@
|
|
|
1
|
+
import type { AddressInfo } from 'node:net'
|
|
1
2
|
import type { CliOptions, CommandResult, Manifest, NpmScript } from '@stacksjs/types'
|
|
2
|
-
import detectIndent from 'detect-indent'
|
|
3
3
|
import { frameworkPath, projectPath } from '@stacksjs/path'
|
|
4
4
|
import { parse } from 'yaml'
|
|
5
|
-
import { log, runCommand, spawn } from '@stacksjs/cli'
|
|
6
|
-
import storage from '@stacksjs/storage'
|
|
5
|
+
import { execSync, log, runCommand, spawn } from '@stacksjs/cli'
|
|
7
6
|
import { app, ui } from '@stacksjs/config'
|
|
7
|
+
import * as storage from '@stacksjs/storage'
|
|
8
|
+
import { semver } from './versions'
|
|
8
9
|
|
|
9
10
|
export async function isProjectCreated() {
|
|
10
11
|
if (storage.isFile('.env'))
|
|
@@ -17,9 +18,29 @@ export async function isProjectCreated() {
|
|
|
17
18
|
return await isAppKeySet()
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
export async function installIfVersionMismatch() {
|
|
22
|
+
const dependenciesYaml = storage.fs.readFileSync(projectPath('tea.yaml'), 'utf8')
|
|
23
|
+
const dependencies = parseYaml(dependenciesYaml).dependencies
|
|
24
|
+
|
|
25
|
+
const requiredNodeVersion = dependencies['nodejs.org']
|
|
26
|
+
const requiredPnpmVersion = dependencies['pnpm.io']
|
|
27
|
+
|
|
28
|
+
const installedNodeVersion = process.version
|
|
29
|
+
const installedPnpmVersion = execSync('pnpm -v').trim()
|
|
30
|
+
|
|
31
|
+
if (!semver.satisfies(installedNodeVersion, requiredNodeVersion)) {
|
|
32
|
+
log.error(`Installed Node.js version (${installedNodeVersion}) does not satisfy required version (${requiredNodeVersion}). One moment...`)
|
|
33
|
+
await runCommand(`tea +nodejs.org${requiredNodeVersion} >/dev/null 2>&1`)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!semver.satisfies(installedPnpmVersion, requiredPnpmVersion)) {
|
|
37
|
+
log.error(`Installed pnpm version (${installedPnpmVersion}) does not satisfy required version (${requiredPnpmVersion}). One moment...`)
|
|
38
|
+
await runCommand(`tea +pnpm.io${requiredPnpmVersion} >/dev/null 2>&1`)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
20
42
|
export async function frameworkVersion(): Promise<string> {
|
|
21
|
-
|
|
22
|
-
return packageJson.version
|
|
43
|
+
return (await storage.readPackageJson(frameworkPath('package.json'))).version
|
|
23
44
|
}
|
|
24
45
|
|
|
25
46
|
export async function isAppKeySet() {
|
|
@@ -27,10 +48,7 @@ export async function isAppKeySet() {
|
|
|
27
48
|
const lines = env.data.split('\n')
|
|
28
49
|
const appKey = lines.find(line => line.startsWith('APP_KEY='))
|
|
29
50
|
|
|
30
|
-
|
|
31
|
-
return true
|
|
32
|
-
|
|
33
|
-
return false
|
|
51
|
+
return !!(appKey && appKey.length > 16)
|
|
34
52
|
}
|
|
35
53
|
|
|
36
54
|
/**
|
|
@@ -139,7 +157,13 @@ export function determineDebugLevel(options?: CliOptions) {
|
|
|
139
157
|
return app.debug === true
|
|
140
158
|
}
|
|
141
159
|
|
|
142
|
-
|
|
160
|
+
export function isIpv6(address: AddressInfo): boolean {
|
|
161
|
+
return address.family === 'IPv6'
|
|
162
|
+
// in node >=18.0 <18.4 this was an integer value. This was changed in a minor version.
|
|
163
|
+
// See: https://github.com/laravel/vite-plugin/issues/103
|
|
143
164
|
|
|
144
|
-
|
|
145
|
-
|
|
165
|
+
// @ts-expect-error-next-line
|
|
166
|
+
|| address.family === 6
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// export { SemVer } from 'semver'
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
import { defineBuildConfig } from '
|
|
1
|
+
import { alias, defineBuildConfig } from '@stacksjs/development'
|
|
2
2
|
|
|
3
3
|
export default defineBuildConfig({
|
|
4
|
+
alias,
|
|
5
|
+
|
|
4
6
|
entries: [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
'./src/index',
|
|
8
|
+
],
|
|
9
|
+
|
|
10
|
+
externals: [
|
|
11
|
+
'@vinejs/vine',
|
|
12
|
+
'vite',
|
|
13
|
+
'validator',
|
|
14
|
+
'@stacksjs/path',
|
|
15
|
+
'@stacksjs/utils',
|
|
16
|
+
'@stacksjs/types',
|
|
11
17
|
],
|
|
12
18
|
|
|
19
|
+
rollup: {
|
|
20
|
+
inlineDependencies: true,
|
|
21
|
+
},
|
|
22
|
+
|
|
13
23
|
clean: true,
|
|
14
|
-
declaration: true
|
|
24
|
+
declaration: false, // todo: this should be set to true
|
|
15
25
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/validation",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"packageManager": "pnpm@8.5
|
|
4
|
+
"version": "0.56.3",
|
|
5
|
+
"packageManager": "pnpm@8.6.5",
|
|
6
6
|
"description": "The Stacks Validation methods.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"license": "MIT",
|
|
@@ -25,12 +25,10 @@
|
|
|
25
25
|
],
|
|
26
26
|
"exports": {
|
|
27
27
|
".": {
|
|
28
|
-
"types": "./dist/index.d.ts",
|
|
29
28
|
"import": "./dist/index.mjs"
|
|
30
29
|
}
|
|
31
30
|
},
|
|
32
31
|
"module": "dist/index.mjs",
|
|
33
|
-
"types": "dist/index.d.ts",
|
|
34
32
|
"contributors": [
|
|
35
33
|
"Chris Breuer <chris@ow3.org>"
|
|
36
34
|
],
|
|
@@ -41,11 +39,15 @@
|
|
|
41
39
|
"scripts": {
|
|
42
40
|
"build": "unbuild",
|
|
43
41
|
"dev": "unbuild --stub",
|
|
44
|
-
"prepublishOnly": "
|
|
42
|
+
"prepublishOnly": "unbuild",
|
|
45
43
|
"typecheck": "tsc --noEmit"
|
|
46
44
|
},
|
|
47
45
|
"peerDependencies": {
|
|
48
|
-
"
|
|
46
|
+
"@stacksjs/utils": "workspace:*",
|
|
47
|
+
"@vinejs/vine": "^1.4.1"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@vinejs/vine": "^1.4.1"
|
|
49
51
|
},
|
|
50
52
|
"devDependencies": {
|
|
51
53
|
"@stacksjs/development": "workspace:*",
|
|
@@ -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
|