alepha 0.14.2 → 0.14.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/dist/api/audits/index.browser.js +5 -5
- package/dist/api/audits/index.browser.js.map +1 -1
- package/dist/api/audits/index.d.ts +784 -784
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +13 -13
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -1
- package/dist/api/files/index.d.ts +57 -57
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +71 -71
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +165 -165
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +10 -10
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js +10 -10
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +583 -171
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +12 -12
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +163 -10
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +281 -276
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +196 -91
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.browser.js +19 -19
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +1137 -1123
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +827 -596
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.browser.js +6 -6
- package/dist/api/verifications/index.browser.js.map +1 -1
- package/dist/api/verifications/index.d.ts +13 -13
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +6 -6
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/bin/index.d.ts +1 -2
- package/dist/bin/index.js +0 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/cli/index.d.ts +137 -112
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +371 -259
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +45 -5
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +97 -17
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +14 -18
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +29 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +14 -18
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +14 -18
- package/dist/core/index.native.js.map +1 -1
- package/dist/fake/index.js +195 -168
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +8 -0
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +3 -0
- package/dist/file/index.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/orm/index.d.ts +32 -32
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +12 -12
- package/dist/orm/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +171 -155
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +0 -1
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/compress/index.js +2 -0
- package/dist/server/compress/index.js.map +1 -1
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +1 -1
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/links/index.browser.js +22 -6
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +46 -44
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +24 -41
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/security/index.d.ts +9 -9
- package/dist/server/swagger/index.d.ts +2 -1
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +8 -3
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +12 -4
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts +7 -7
- package/package.json +7 -7
- package/src/api/audits/controllers/{AuditController.ts → AdminAuditController.ts} +5 -6
- package/src/api/audits/entities/audits.ts +5 -5
- package/src/api/audits/index.browser.ts +1 -1
- package/src/api/audits/index.ts +3 -3
- package/src/api/audits/primitives/$audit.spec.ts +276 -0
- package/src/api/audits/services/AuditService.spec.ts +495 -0
- package/src/api/files/__tests__/$bucket.spec.ts +91 -0
- package/src/api/files/controllers/AdminFileStatsController.spec.ts +166 -0
- package/src/api/files/controllers/{StorageStatsController.ts → AdminFileStatsController.ts} +2 -2
- package/src/api/files/controllers/FileController.spec.ts +558 -0
- package/src/api/files/controllers/FileController.ts +4 -5
- package/src/api/files/entities/files.ts +5 -5
- package/src/api/files/index.browser.ts +1 -1
- package/src/api/files/index.ts +4 -4
- package/src/api/files/jobs/FileJobs.spec.ts +52 -0
- package/src/api/files/services/FileService.spec.ts +109 -0
- package/src/api/jobs/__tests__/JobController.spec.ts +343 -0
- package/src/api/jobs/controllers/{JobController.ts → AdminJobController.ts} +2 -2
- package/src/api/jobs/entities/jobExecutions.ts +5 -5
- package/src/api/jobs/index.ts +3 -3
- package/src/api/jobs/primitives/$job.spec.ts +476 -0
- package/src/api/notifications/controllers/{NotificationController.ts → AdminNotificationController.ts} +4 -5
- package/src/api/notifications/entities/notifications.ts +5 -5
- package/src/api/notifications/index.browser.ts +1 -1
- package/src/api/notifications/index.ts +4 -4
- package/src/api/parameters/controllers/{ConfigController.ts → AdminConfigController.ts} +46 -107
- package/src/api/parameters/entities/parameters.ts +7 -17
- package/src/api/parameters/index.ts +3 -3
- package/src/api/parameters/primitives/$config.spec.ts +356 -0
- package/src/api/parameters/schemas/activateConfigBodySchema.ts +12 -0
- package/src/api/parameters/schemas/checkScheduledResponseSchema.ts +8 -0
- package/src/api/parameters/schemas/configCurrentResponseSchema.ts +13 -0
- package/src/api/parameters/schemas/configHistoryResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/configNameParamSchema.ts +10 -0
- package/src/api/parameters/schemas/configNamesResponseSchema.ts +8 -0
- package/src/api/parameters/schemas/configTreeNodeSchema.ts +13 -0
- package/src/api/parameters/schemas/configVersionParamSchema.ts +9 -0
- package/src/api/parameters/schemas/configVersionResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/configsByStatusResponseSchema.ts +9 -0
- package/src/api/parameters/schemas/createConfigVersionBodySchema.ts +24 -0
- package/src/api/parameters/schemas/index.ts +15 -0
- package/src/api/parameters/schemas/parameterResponseSchema.ts +26 -0
- package/src/api/parameters/schemas/parameterStatusSchema.ts +13 -0
- package/src/api/parameters/schemas/rollbackConfigBodySchema.ts +15 -0
- package/src/api/parameters/schemas/statusParamSchema.ts +9 -0
- package/src/api/users/__tests__/EmailVerification.spec.ts +369 -0
- package/src/api/users/__tests__/PasswordReset.spec.ts +550 -0
- package/src/api/users/controllers/AdminIdentityController.spec.ts +365 -0
- package/src/api/users/controllers/{IdentityController.ts → AdminIdentityController.ts} +3 -4
- package/src/api/users/controllers/AdminSessionController.spec.ts +274 -0
- package/src/api/users/controllers/{SessionController.ts → AdminSessionController.ts} +3 -4
- package/src/api/users/controllers/AdminUserController.spec.ts +372 -0
- package/src/api/users/controllers/AdminUserController.ts +116 -0
- package/src/api/users/controllers/UserController.ts +4 -107
- package/src/api/users/controllers/UserRealmController.ts +3 -0
- package/src/api/users/entities/identities.ts +6 -6
- package/src/api/users/entities/sessions.ts +6 -6
- package/src/api/users/entities/users.ts +9 -9
- package/src/api/users/index.ts +9 -6
- package/src/api/users/primitives/$userRealm.ts +13 -8
- package/src/api/users/services/CredentialService.spec.ts +509 -0
- package/src/api/users/services/CredentialService.ts +46 -0
- package/src/api/users/services/IdentityService.ts +15 -0
- package/src/api/users/services/RegistrationService.spec.ts +630 -0
- package/src/api/users/services/RegistrationService.ts +18 -0
- package/src/api/users/services/SessionService.spec.ts +301 -0
- package/src/api/users/services/SessionService.ts +110 -1
- package/src/api/users/services/UserService.ts +67 -2
- package/src/api/verifications/__tests__/CodeVerification.spec.ts +318 -0
- package/src/api/verifications/__tests__/LinkVerification.spec.ts +279 -0
- package/src/api/verifications/entities/verifications.ts +6 -6
- package/src/api/verifications/jobs/VerificationJobs.spec.ts +50 -0
- package/src/batch/__tests__/startup-buffering.spec.ts +458 -0
- package/src/batch/primitives/$batch.spec.ts +766 -0
- package/src/batch/providers/BatchProvider.spec.ts +786 -0
- package/src/bin/index.ts +0 -1
- package/src/bucket/__tests__/shared.ts +194 -0
- package/src/bucket/primitives/$bucket.spec.ts +104 -0
- package/src/bucket/providers/FileStorageProvider.spec.ts +13 -0
- package/src/bucket/providers/LocalFileStorageProvider.spec.ts +77 -0
- package/src/bucket/providers/MemoryFileStorageProvider.spec.ts +82 -0
- package/src/cache/core/__tests__/shared.ts +377 -0
- package/src/cache/core/primitives/$cache.spec.ts +111 -0
- package/src/cache/redis/__tests__/cache-redis.spec.ts +70 -0
- package/src/cli/apps/AlephaCli.ts +25 -4
- package/src/cli/commands/dev.ts +19 -7
- package/src/cli/commands/gen/changelog.spec.ts +315 -0
- package/src/cli/commands/{changelog.ts → gen/changelog.ts} +9 -9
- package/src/cli/commands/gen/openapi.ts +71 -0
- package/src/cli/commands/gen.ts +18 -0
- package/src/cli/commands/init.ts +2 -0
- package/src/cli/commands/root.ts +12 -3
- package/src/cli/commands/typecheck.ts +5 -0
- package/src/cli/index.ts +2 -1
- package/src/cli/services/AlephaCliUtils.ts +71 -32
- package/src/cli/services/GitMessageParser.ts +1 -1
- package/src/command/helpers/Asker.spec.ts +127 -0
- package/src/command/helpers/Runner.spec.ts +126 -0
- package/src/command/primitives/$command.spec.ts +1588 -0
- package/src/command/providers/CliProvider.ts +74 -24
- package/src/core/Alepha.ts +45 -0
- package/src/core/__tests__/Alepha-emit.spec.ts +22 -0
- package/src/core/__tests__/Alepha-graph.spec.ts +93 -0
- package/src/core/__tests__/Alepha-has.spec.ts +41 -0
- package/src/core/__tests__/Alepha-inject.spec.ts +93 -0
- package/src/core/__tests__/Alepha-register.spec.ts +81 -0
- package/src/core/__tests__/Alepha-start.spec.ts +176 -0
- package/src/core/__tests__/Alepha-with.spec.ts +14 -0
- package/src/core/__tests__/TypeBox-usecases.spec.ts +35 -0
- package/src/core/__tests__/TypeBoxLocale.spec.ts +15 -0
- package/src/core/__tests__/descriptor.spec.ts +34 -0
- package/src/core/__tests__/fixtures/A.ts +5 -0
- package/src/core/__tests__/pagination.spec.ts +77 -0
- package/src/core/helpers/jsonSchemaToTypeBox.ts +2 -2
- package/src/core/primitives/$atom.spec.ts +43 -0
- package/src/core/primitives/$hook.spec.ts +130 -0
- package/src/core/primitives/$inject.spec.ts +175 -0
- package/src/core/primitives/$module.spec.ts +115 -0
- package/src/core/providers/CodecManager.spec.ts +740 -0
- package/src/core/providers/EventManager.spec.ts +762 -0
- package/src/core/providers/EventManager.ts +4 -0
- package/src/core/providers/StateManager.spec.ts +365 -0
- package/src/core/providers/TypeProvider.spec.ts +1607 -0
- package/src/core/providers/TypeProvider.ts +20 -26
- package/src/datetime/primitives/$interval.spec.ts +103 -0
- package/src/datetime/providers/DateTimeProvider.spec.ts +86 -0
- package/src/email/primitives/$email.spec.ts +175 -0
- package/src/email/providers/LocalEmailProvider.spec.ts +341 -0
- package/src/fake/__tests__/keyName.example.ts +40 -0
- package/src/fake/__tests__/keyName.spec.ts +152 -0
- package/src/fake/__tests__/module.example.ts +32 -0
- package/src/fake/providers/FakeProvider.spec.ts +438 -0
- package/src/file/providers/FileSystemProvider.ts +8 -0
- package/src/file/providers/NodeFileSystemProvider.spec.ts +418 -0
- package/src/file/providers/NodeFileSystemProvider.ts +5 -0
- package/src/file/services/FileDetector.spec.ts +591 -0
- package/src/lock/core/__tests__/shared.ts +190 -0
- package/src/lock/core/providers/MemoryLockProvider.spec.ts +25 -0
- package/src/lock/redis/providers/RedisLockProvider.spec.ts +25 -0
- package/src/logger/__tests__/SimpleFormatterProvider.spec.ts +109 -0
- package/src/logger/primitives/$logger.spec.ts +108 -0
- package/src/logger/services/Logger.spec.ts +295 -0
- package/src/mcp/__tests__/errors.spec.ts +175 -0
- package/src/mcp/__tests__/integration.spec.ts +450 -0
- package/src/mcp/helpers/jsonrpc.spec.ts +380 -0
- package/src/mcp/primitives/$prompt.spec.ts +468 -0
- package/src/mcp/primitives/$resource.spec.ts +390 -0
- package/src/mcp/primitives/$tool.spec.ts +406 -0
- package/src/mcp/providers/McpServerProvider.spec.ts +797 -0
- package/src/orm/__tests__/$repository-crud.spec.ts +276 -0
- package/src/orm/__tests__/$repository-hooks.spec.ts +325 -0
- package/src/orm/__tests__/$repository-orderBy.spec.ts +128 -0
- package/src/orm/__tests__/$repository-pagination-sort.spec.ts +149 -0
- package/src/orm/__tests__/$repository-save.spec.ts +37 -0
- package/src/orm/__tests__/ModelBuilder-integration.spec.ts +490 -0
- package/src/orm/__tests__/ModelBuilder-types.spec.ts +186 -0
- package/src/orm/__tests__/PostgresProvider.spec.ts +46 -0
- package/src/orm/__tests__/delete-returning.spec.ts +256 -0
- package/src/orm/__tests__/deletedAt.spec.ts +80 -0
- package/src/orm/__tests__/enums.spec.ts +315 -0
- package/src/orm/__tests__/execute.spec.ts +72 -0
- package/src/orm/__tests__/fixtures/bigEntitySchema.ts +65 -0
- package/src/orm/__tests__/fixtures/userEntitySchema.ts +27 -0
- package/src/orm/__tests__/joins.spec.ts +1114 -0
- package/src/orm/__tests__/page.spec.ts +287 -0
- package/src/orm/__tests__/primaryKey.spec.ts +87 -0
- package/src/orm/__tests__/query-date-encoding.spec.ts +402 -0
- package/src/orm/__tests__/ref-auto-onDelete.spec.ts +156 -0
- package/src/orm/__tests__/references.spec.ts +102 -0
- package/src/orm/__tests__/security.spec.ts +710 -0
- package/src/orm/__tests__/sqlite.spec.ts +111 -0
- package/src/orm/__tests__/string-operators.spec.ts +429 -0
- package/src/orm/__tests__/timestamps.spec.ts +388 -0
- package/src/orm/__tests__/validation.spec.ts +183 -0
- package/src/orm/__tests__/version.spec.ts +64 -0
- package/src/orm/helpers/parseQueryString.spec.ts +196 -0
- package/src/orm/primitives/$repository.spec.ts +137 -0
- package/src/orm/primitives/$sequence.spec.ts +29 -0
- package/src/orm/primitives/$transaction.spec.ts +82 -0
- package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -3
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +1 -1
- package/src/orm/providers/drivers/DatabaseProvider.ts +1 -1
- package/src/orm/providers/drivers/NodePostgresProvider.ts +3 -3
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/PglitePostgresProvider.ts +2 -2
- package/src/orm/services/ModelBuilder.spec.ts +575 -0
- package/src/orm/services/Repository.spec.ts +137 -0
- package/src/queue/core/__tests__/shared.ts +143 -0
- package/src/queue/core/providers/MemoryQueueProvider.spec.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.spec.ts +378 -0
- package/src/queue/redis/providers/RedisQueueProvider.spec.ts +23 -0
- package/src/redis/__tests__/redis.spec.ts +58 -0
- package/src/retry/primitives/$retry.spec.ts +234 -0
- package/src/retry/providers/RetryProvider.spec.ts +438 -0
- package/src/router/__tests__/match.spec.ts +252 -0
- package/src/router/providers/RouterProvider.spec.ts +197 -0
- package/src/scheduler/__tests__/$scheduler-cron.spec.ts +25 -0
- package/src/scheduler/__tests__/$scheduler-interval.spec.ts +25 -0
- package/src/scheduler/__tests__/shared.ts +77 -0
- package/src/security/__tests__/bug-1-wildcard-after-start.spec.ts +229 -0
- package/src/security/__tests__/bug-2-password-validation.spec.ts +245 -0
- package/src/security/__tests__/bug-3-regex-vulnerability.spec.ts +407 -0
- package/src/security/__tests__/bug-4-oauth2-validation.spec.ts +439 -0
- package/src/security/__tests__/multi-layer-permissions.spec.ts +522 -0
- package/src/security/primitives/$permission.spec.ts +30 -0
- package/src/security/primitives/$permission.ts +2 -2
- package/src/security/primitives/$realm.spec.ts +101 -0
- package/src/security/primitives/$role.spec.ts +52 -0
- package/src/security/primitives/$serviceAccount.spec.ts +61 -0
- package/src/security/providers/SecurityProvider.spec.ts +350 -0
- package/src/server/auth/providers/ServerAuthProvider.ts +0 -2
- package/src/server/cache/providers/ServerCacheProvider.spec.ts +942 -0
- package/src/server/compress/providers/ServerCompressProvider.spec.ts +31 -0
- package/src/server/compress/providers/ServerCompressProvider.ts +2 -0
- package/src/server/cookies/providers/ServerCookiesProvider.spec.ts +253 -0
- package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +334 -0
- package/src/server/core/__tests__/ServerRouterProvider-requestId.spec.ts +129 -0
- package/src/server/core/primitives/$action.spec.ts +191 -0
- package/src/server/core/primitives/$route.spec.ts +65 -0
- package/src/server/core/providers/ServerBodyParserProvider.spec.ts +93 -0
- package/src/server/core/providers/ServerLoggerProvider.spec.ts +100 -0
- package/src/server/core/providers/ServerProvider.ts +3 -1
- package/src/server/core/services/HttpClient.spec.ts +123 -0
- package/src/server/core/services/UserAgentParser.spec.ts +111 -0
- package/src/server/cors/providers/ServerCorsProvider.spec.ts +481 -0
- package/src/server/health/providers/ServerHealthProvider.spec.ts +22 -0
- package/src/server/helmet/providers/ServerHelmetProvider.spec.ts +105 -0
- package/src/server/links/__tests__/$action.spec.ts +238 -0
- package/src/server/links/__tests__/fixtures/CrudApp.ts +122 -0
- package/src/server/links/__tests__/requestId.spec.ts +120 -0
- package/src/server/links/primitives/$remote.spec.ts +228 -0
- package/src/server/links/providers/LinkProvider.spec.ts +54 -0
- package/src/server/links/providers/LinkProvider.ts +49 -3
- package/src/server/links/providers/ServerLinksProvider.ts +1 -53
- package/src/server/links/schemas/apiLinksResponseSchema.ts +7 -0
- package/src/server/metrics/providers/ServerMetricsProvider.spec.ts +25 -0
- package/src/server/multipart/providers/ServerMultipartProvider.spec.ts +528 -0
- package/src/server/proxy/primitives/$proxy.spec.ts +87 -0
- package/src/server/rate-limit/__tests__/ActionRateLimit.spec.ts +211 -0
- package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +344 -0
- package/src/server/security/__tests__/BasicAuth.spec.ts +684 -0
- package/src/server/security/__tests__/ServerSecurityProvider-realm.spec.ts +388 -0
- package/src/server/security/providers/ServerSecurityProvider.spec.ts +123 -0
- package/src/server/static/primitives/$serve.spec.ts +193 -0
- package/src/server/swagger/__tests__/ui.spec.ts +52 -0
- package/src/server/swagger/primitives/$swagger.spec.ts +193 -0
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +18 -8
- package/src/sms/primitives/$sms.spec.ts +165 -0
- package/src/sms/providers/LocalSmsProvider.spec.ts +224 -0
- package/src/sms/providers/MemorySmsProvider.spec.ts +193 -0
- package/src/thread/primitives/$thread.spec.ts +186 -0
- package/src/topic/core/__tests__/shared.ts +144 -0
- package/src/topic/core/providers/MemoryTopicProvider.spec.ts +23 -0
- package/src/topic/redis/providers/RedisTopicProvider.spec.ts +23 -0
- package/src/vite/plugins/viteAlephaDev.ts +16 -4
- package/src/vite/tasks/runAlepha.ts +7 -1
- package/src/websocket/__tests__/$websocket-new.spec.ts +195 -0
- package/src/websocket/primitives/$channel.spec.ts +30 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { describe, test } from "vitest";
|
|
2
|
+
import { buildQueryString, parseQueryString } from "../index.ts";
|
|
3
|
+
|
|
4
|
+
describe("parseQueryString with wildcard patterns", () => {
|
|
5
|
+
test("should parse wildcard patterns with = operator", ({ expect }) => {
|
|
6
|
+
// Test startsWith pattern
|
|
7
|
+
const result1 = parseQueryString("name=John*");
|
|
8
|
+
expect(result1).toEqual({ name: { startsWith: "John" } });
|
|
9
|
+
|
|
10
|
+
// Test endsWith pattern
|
|
11
|
+
const result2 = parseQueryString("name=*Smith");
|
|
12
|
+
expect(result2).toEqual({ name: { endsWith: "Smith" } });
|
|
13
|
+
|
|
14
|
+
// Test contains pattern
|
|
15
|
+
const result3 = parseQueryString("name=*oh*");
|
|
16
|
+
expect(result3).toEqual({ name: { contains: "oh" } });
|
|
17
|
+
|
|
18
|
+
// Test literal asterisk in the middle (not at beginning or end)
|
|
19
|
+
const result4 = parseQueryString("name=Jo*hn");
|
|
20
|
+
expect(result4).toEqual({ name: { eq: "Jo*hn" } });
|
|
21
|
+
|
|
22
|
+
// Test literal equals (no wildcards)
|
|
23
|
+
const result5 = parseQueryString("name=John");
|
|
24
|
+
expect(result5).toEqual({ name: { eq: "John" } });
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("should handle wildcard patterns in complex queries", ({ expect }) => {
|
|
28
|
+
// Multiple conditions with wildcards
|
|
29
|
+
const result1 = parseQueryString("name=*John&email=*@example.com");
|
|
30
|
+
expect(result1).toEqual({
|
|
31
|
+
and: [
|
|
32
|
+
{ name: { endsWith: "John" } },
|
|
33
|
+
{ email: { endsWith: "@example.com" } },
|
|
34
|
+
],
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// OR conditions with wildcards
|
|
38
|
+
const result2 = parseQueryString("name=John*|name=*Smith");
|
|
39
|
+
expect(result2).toEqual({
|
|
40
|
+
or: [{ name: { startsWith: "John" } }, { name: { endsWith: "Smith" } }],
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Nested conditions with wildcards
|
|
44
|
+
const result3 = parseQueryString("(name=*John*|email=admin*)&age>18");
|
|
45
|
+
expect(result3).toEqual({
|
|
46
|
+
and: [
|
|
47
|
+
{
|
|
48
|
+
or: [
|
|
49
|
+
{ name: { contains: "John" } },
|
|
50
|
+
{ email: { startsWith: "admin" } },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{ age: { gt: 18 } },
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("should handle wildcard patterns in quoted strings", ({ expect }) => {
|
|
59
|
+
// Quoted string with wildcards should be treated as wildcards
|
|
60
|
+
const result1 = parseQueryString('name="*John*"');
|
|
61
|
+
expect(result1).toEqual({ name: { contains: "John" } });
|
|
62
|
+
|
|
63
|
+
// Quoted string with asterisk in middle
|
|
64
|
+
const result2 = parseQueryString('name="Jo*hn"');
|
|
65
|
+
expect(result2).toEqual({ name: { eq: "Jo*hn" } });
|
|
66
|
+
|
|
67
|
+
// Single quotes
|
|
68
|
+
const result3 = parseQueryString("name='*Smith'");
|
|
69
|
+
expect(result3).toEqual({ name: { endsWith: "Smith" } });
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("should handle wildcard patterns with special characters", ({
|
|
73
|
+
expect,
|
|
74
|
+
}) => {
|
|
75
|
+
// Wildcard with spaces
|
|
76
|
+
const result1 = parseQueryString("name=*John Smith*");
|
|
77
|
+
expect(result1).toEqual({ name: { contains: "John Smith" } });
|
|
78
|
+
|
|
79
|
+
// Wildcard with special characters
|
|
80
|
+
const result2 = parseQueryString("email=*@example.com");
|
|
81
|
+
expect(result2).toEqual({ email: { endsWith: "@example.com" } });
|
|
82
|
+
|
|
83
|
+
// Wildcard with numbers
|
|
84
|
+
const result3 = parseQueryString("code=ABC*123");
|
|
85
|
+
expect(result3).toEqual({ code: { eq: "ABC*123" } }); // Asterisk in middle is literal
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test("should handle wildcard patterns in arrays", ({ expect }) => {
|
|
89
|
+
// Array values don't support wildcards (treated as literal)
|
|
90
|
+
const result = parseQueryString("status=[active*,*pending,*idle*]");
|
|
91
|
+
expect(result).toEqual({
|
|
92
|
+
status: { inArray: ["active*", "*pending", "*idle*"] },
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test("should handle wildcard patterns with != operator", ({ expect }) => {
|
|
97
|
+
// != operator doesn't support wildcards, treats as literal
|
|
98
|
+
const result1 = parseQueryString("name!=*John");
|
|
99
|
+
expect(result1).toEqual({ name: { ne: "*John" } });
|
|
100
|
+
|
|
101
|
+
const result2 = parseQueryString("name!=John*");
|
|
102
|
+
expect(result2).toEqual({ name: { ne: "John*" } });
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test("should handle empty wildcard patterns", ({ expect }) => {
|
|
106
|
+
// Just asterisks - a single asterisk at the end means "starts with nothing" = everything
|
|
107
|
+
const result1 = parseQueryString("name=*");
|
|
108
|
+
expect(result1).toEqual({ name: { contains: "" } }); // Since * alone has both start and end asterisk
|
|
109
|
+
|
|
110
|
+
const result2 = parseQueryString("name=**");
|
|
111
|
+
expect(result2).toEqual({ name: { contains: "" } });
|
|
112
|
+
|
|
113
|
+
const result3 = parseQueryString("name=***");
|
|
114
|
+
expect(result3).toEqual({ name: { contains: "*" } });
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test("should handle JSONB nested queries with wildcards", ({ expect }) => {
|
|
118
|
+
const result = parseQueryString("profile.city=*Paris*&profile.name=John*");
|
|
119
|
+
expect(result).toEqual({
|
|
120
|
+
and: [
|
|
121
|
+
{ profile: { city: { contains: "Paris" } } },
|
|
122
|
+
{ profile: { name: { startsWith: "John" } } },
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("should not apply wildcards to non-string operators", ({ expect }) => {
|
|
128
|
+
// Numeric comparison operators don't use wildcards
|
|
129
|
+
const result1 = parseQueryString("age>18");
|
|
130
|
+
expect(result1).toEqual({ age: { gt: 18 } });
|
|
131
|
+
|
|
132
|
+
// NULL checks don't use wildcards
|
|
133
|
+
const result2 = parseQueryString("name=null");
|
|
134
|
+
expect(result2).toEqual({ name: { isNull: true } });
|
|
135
|
+
|
|
136
|
+
const result3 = parseQueryString("name!=null");
|
|
137
|
+
expect(result3).toEqual({ name: { isNotNull: true } });
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
describe("buildQueryString with wildcard patterns", () => {
|
|
142
|
+
test("should build query strings from wildcard conditions", ({ expect }) => {
|
|
143
|
+
// startsWith
|
|
144
|
+
const query1 = buildQueryString({ name: { startsWith: "John" } });
|
|
145
|
+
expect(query1).toBe("name=John*");
|
|
146
|
+
|
|
147
|
+
// endsWith
|
|
148
|
+
const query2 = buildQueryString({ name: { endsWith: "Smith" } });
|
|
149
|
+
expect(query2).toBe("name=*Smith");
|
|
150
|
+
|
|
151
|
+
// contains
|
|
152
|
+
const query3 = buildQueryString({ name: { contains: "oh" } });
|
|
153
|
+
expect(query3).toBe("name=*oh*");
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
test("should build complex query strings with wildcards", ({ expect }) => {
|
|
157
|
+
const query = buildQueryString({
|
|
158
|
+
and: [
|
|
159
|
+
{ name: { startsWith: "John" } },
|
|
160
|
+
{ email: { endsWith: "@example.com" } },
|
|
161
|
+
{ bio: { contains: "developer" } },
|
|
162
|
+
],
|
|
163
|
+
});
|
|
164
|
+
expect(query).toBe("name=John*&email=*@example.com&bio=*developer*");
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
test("should handle OR conditions with wildcards", ({ expect }) => {
|
|
168
|
+
const query = buildQueryString({
|
|
169
|
+
or: [
|
|
170
|
+
{ name: { startsWith: "Admin" } },
|
|
171
|
+
{ role: { contains: "manager" } },
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
expect(query).toBe("(name=Admin*|role=*manager*)");
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test("round-trip conversion should preserve wildcard semantics", ({
|
|
178
|
+
expect,
|
|
179
|
+
}) => {
|
|
180
|
+
const testCases = [
|
|
181
|
+
"name=John*",
|
|
182
|
+
"name=*Smith",
|
|
183
|
+
"name=*John*",
|
|
184
|
+
"email=admin*&role=*manager*",
|
|
185
|
+
"(name=*John*|name=*Jane*)&active=true",
|
|
186
|
+
"profile.city=*Paris*",
|
|
187
|
+
];
|
|
188
|
+
|
|
189
|
+
for (const original of testCases) {
|
|
190
|
+
const parsed = parseQueryString(original);
|
|
191
|
+
const rebuilt = buildQueryString(parsed);
|
|
192
|
+
const reparsed = parseQueryString(rebuilt);
|
|
193
|
+
expect(reparsed).toEqual(parsed);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
});
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Alepha, type Static } from "alepha";
|
|
2
|
+
import { DateTimeProvider } from "alepha/datetime";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { bigEntity } from "../__tests__/fixtures/bigEntitySchema.ts";
|
|
5
|
+
import type { InsertUserEntity } from "../__tests__/fixtures/userEntitySchema.ts";
|
|
6
|
+
import { userEntity } from "../__tests__/fixtures/userEntitySchema.ts";
|
|
7
|
+
import { $repository } from "../index.ts";
|
|
8
|
+
|
|
9
|
+
class App {
|
|
10
|
+
users = $repository(userEntity);
|
|
11
|
+
big = $repository(bigEntity);
|
|
12
|
+
create = (data: InsertUserEntity) => this.users.create(data);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const testPgAttr = async (alepha: Alepha) => {
|
|
16
|
+
const app = alepha.inject(App);
|
|
17
|
+
await alepha.start();
|
|
18
|
+
|
|
19
|
+
const entity = await app.users.create({
|
|
20
|
+
suspect: "hey",
|
|
21
|
+
name: "John",
|
|
22
|
+
profile: {
|
|
23
|
+
age: 30,
|
|
24
|
+
},
|
|
25
|
+
} as any);
|
|
26
|
+
|
|
27
|
+
expect((entity as any).suspect).toBeUndefined();
|
|
28
|
+
expect(entity.name).toEqual("John");
|
|
29
|
+
expect(entity.profile.age).toEqual(30);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
describe("$repository - pg.attr", () => {
|
|
33
|
+
it("should filter out attributes not defined in schema", async () => {
|
|
34
|
+
await testPgAttr(Alepha.create());
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("should filter out attributes not defined in schema (sqlite)", async () => {
|
|
38
|
+
await testPgAttr(
|
|
39
|
+
Alepha.create({
|
|
40
|
+
env: {
|
|
41
|
+
DATABASE_URL: "sqlite://:memory:",
|
|
42
|
+
},
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const testAllTypes = async (alepha: Alepha) => {
|
|
49
|
+
const app = alepha.inject(App);
|
|
50
|
+
await alepha.start();
|
|
51
|
+
|
|
52
|
+
const data: Static<typeof bigEntity.insertSchema> = {
|
|
53
|
+
type: "big_entity",
|
|
54
|
+
a: "a",
|
|
55
|
+
b: 1.111,
|
|
56
|
+
date: "2024-01-01",
|
|
57
|
+
c: 2,
|
|
58
|
+
d: true,
|
|
59
|
+
e: {
|
|
60
|
+
a: "a",
|
|
61
|
+
b: 1,
|
|
62
|
+
c: 2,
|
|
63
|
+
d: true,
|
|
64
|
+
e: {
|
|
65
|
+
a: "a",
|
|
66
|
+
b: 1,
|
|
67
|
+
c: 2,
|
|
68
|
+
d: true,
|
|
69
|
+
j: [
|
|
70
|
+
{
|
|
71
|
+
a: "a",
|
|
72
|
+
b: 1,
|
|
73
|
+
c: 2,
|
|
74
|
+
d: true,
|
|
75
|
+
e: {
|
|
76
|
+
a: "a",
|
|
77
|
+
b: 1,
|
|
78
|
+
c: 2,
|
|
79
|
+
d: true,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
f: ["a", "b"],
|
|
86
|
+
g: [1.111],
|
|
87
|
+
h: [2, 1],
|
|
88
|
+
i: [true],
|
|
89
|
+
j: [
|
|
90
|
+
{
|
|
91
|
+
a: "a",
|
|
92
|
+
b: 1,
|
|
93
|
+
c: 2,
|
|
94
|
+
d: true,
|
|
95
|
+
e: {
|
|
96
|
+
a: "a",
|
|
97
|
+
b: 1,
|
|
98
|
+
c: 2,
|
|
99
|
+
d: true,
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
k: alepha.inject(DateTimeProvider).nowISOString(),
|
|
104
|
+
l: "123e4567-e89b-12d3-a456-426614174000",
|
|
105
|
+
m: "a" as const,
|
|
106
|
+
};
|
|
107
|
+
const entity = await app.big.create(data);
|
|
108
|
+
|
|
109
|
+
expect(entity).toEqual({
|
|
110
|
+
id: entity.id,
|
|
111
|
+
...data,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const it = await app.big.findMany({
|
|
115
|
+
where: {
|
|
116
|
+
type: "big_entity",
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
expect(it).toHaveLength(1);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
describe("$repository - all types", () => {
|
|
124
|
+
it("should handle all supported data types", async () => {
|
|
125
|
+
await testAllTypes(Alepha.create());
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it("should handle all supported data types (sqlite)", async () => {
|
|
129
|
+
await testAllTypes(
|
|
130
|
+
Alepha.create({
|
|
131
|
+
env: {
|
|
132
|
+
DATABASE_URL: "sqlite://:memory:",
|
|
133
|
+
},
|
|
134
|
+
}),
|
|
135
|
+
);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Alepha } from "alepha";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { $sequence } from "../index.ts";
|
|
4
|
+
|
|
5
|
+
describe("$sequence", () => {
|
|
6
|
+
class App {
|
|
7
|
+
seq = $sequence();
|
|
8
|
+
seq2 = $sequence({ startWith: 100, increment: 2 });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const alepha = Alepha.create();
|
|
12
|
+
const app = alepha.inject(App);
|
|
13
|
+
|
|
14
|
+
it("should generate sequential numbers", async () => {
|
|
15
|
+
expect(await app.seq.next()).toBe(1);
|
|
16
|
+
expect(await app.seq.next()).toBe(2);
|
|
17
|
+
expect(await app.seq.next()).toBe(3);
|
|
18
|
+
expect(await app.seq.current()).toBe(3);
|
|
19
|
+
expect(await app.seq.next()).toBe(4);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("should support custom start and increment options", async () => {
|
|
23
|
+
expect(await app.seq2.next()).toBe(100);
|
|
24
|
+
expect(await app.seq2.next()).toBe(102);
|
|
25
|
+
expect(await app.seq2.next()).toBe(104);
|
|
26
|
+
expect(await app.seq2.current()).toBe(104);
|
|
27
|
+
expect(await app.seq2.next()).toBe(106);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { $inject, Alepha, t } from "alepha";
|
|
2
|
+
import { DateTimeProvider } from "alepha/datetime";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { DbConflictError } from "../errors/DbConflictError.ts";
|
|
5
|
+
import { $entity, $repository, $transaction, pg } from "../index.ts";
|
|
6
|
+
|
|
7
|
+
const a = $entity({
|
|
8
|
+
name: "a",
|
|
9
|
+
schema: t.object({
|
|
10
|
+
id: pg.primaryKey(
|
|
11
|
+
t.integer(),
|
|
12
|
+
{},
|
|
13
|
+
{
|
|
14
|
+
mode: "byDefault",
|
|
15
|
+
},
|
|
16
|
+
),
|
|
17
|
+
v: pg.version(),
|
|
18
|
+
counter: t.integer(),
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
class App {
|
|
23
|
+
dt = $inject(DateTimeProvider);
|
|
24
|
+
|
|
25
|
+
repository = $repository(a);
|
|
26
|
+
|
|
27
|
+
runIncrementTest = $transaction({
|
|
28
|
+
handler: async (tx, id: number, val: number, waitMs = 0) => {
|
|
29
|
+
const e = await this.repository.findById(id, {
|
|
30
|
+
tx,
|
|
31
|
+
});
|
|
32
|
+
if (waitMs) {
|
|
33
|
+
await this.dt.wait(waitMs);
|
|
34
|
+
}
|
|
35
|
+
e.counter += val;
|
|
36
|
+
return await this.repository.save(e, { tx });
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
runCollisionTest = $transaction({
|
|
41
|
+
handler: async (tx) => {
|
|
42
|
+
await this.repository.deleteMany({}, { tx });
|
|
43
|
+
const { id } = await this.repository.create({ counter: 0 }, { tx });
|
|
44
|
+
await this.repository.create({ counter: 0 }, { tx });
|
|
45
|
+
await this.repository.create({ counter: 0, id: id }, { tx });
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
describe("$transaction", () => {
|
|
51
|
+
it(
|
|
52
|
+
"should handle version mismatch with retry",
|
|
53
|
+
{ timeout: 10000 },
|
|
54
|
+
async () => {
|
|
55
|
+
const alepha = Alepha.create();
|
|
56
|
+
const app = alepha.inject(App);
|
|
57
|
+
await alepha.start();
|
|
58
|
+
|
|
59
|
+
const { id } = await app.repository.create({ counter: 0 });
|
|
60
|
+
|
|
61
|
+
const tx = app.runIncrementTest(id, 10, 200);
|
|
62
|
+
await app.runIncrementTest(id, 100);
|
|
63
|
+
await tx;
|
|
64
|
+
|
|
65
|
+
const r3 = await app.repository.findById(id);
|
|
66
|
+
|
|
67
|
+
expect(r3.counter).toBe(110);
|
|
68
|
+
},
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
it("should rollback on conflict error", { timeout: 10000 }, async () => {
|
|
72
|
+
const alepha = Alepha.create();
|
|
73
|
+
const app = alepha.inject(App);
|
|
74
|
+
await alepha.start();
|
|
75
|
+
|
|
76
|
+
await app.repository.create({ counter: 0 });
|
|
77
|
+
|
|
78
|
+
await expect(() => app.runCollisionTest()).rejects.toThrow(DbConflictError);
|
|
79
|
+
|
|
80
|
+
expect(await app.repository.count()).toBe(1);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -137,7 +137,7 @@ export class BunPostgresProvider extends DatabaseProvider {
|
|
|
137
137
|
// never migrate in serverless mode (vercel, netlify, ...)
|
|
138
138
|
if (!this.alepha.isServerless()) {
|
|
139
139
|
try {
|
|
140
|
-
await this.
|
|
140
|
+
await this.migrateLock.run();
|
|
141
141
|
} catch (error) {
|
|
142
142
|
throw new DbMigrationError(error);
|
|
143
143
|
}
|
|
@@ -217,9 +217,9 @@ export class BunPostgresProvider extends DatabaseProvider {
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
protected
|
|
220
|
+
protected migrateLock = $lock({
|
|
221
221
|
handler: async () => {
|
|
222
|
-
await this.
|
|
222
|
+
await this.migrate();
|
|
223
223
|
},
|
|
224
224
|
});
|
|
225
225
|
}
|
|
@@ -95,7 +95,7 @@ export abstract class DatabaseProvider {
|
|
|
95
95
|
/**
|
|
96
96
|
* Base migration orchestration - handles environment logic
|
|
97
97
|
*/
|
|
98
|
-
|
|
98
|
+
public async migrate(): Promise<void> {
|
|
99
99
|
const migrationsFolder = this.getMigrationsFolder();
|
|
100
100
|
|
|
101
101
|
// Handle different environments
|
|
@@ -127,7 +127,7 @@ export class NodePostgresProvider extends DatabaseProvider {
|
|
|
127
127
|
// never migrate in serverless mode (vercel, netlify, ...)
|
|
128
128
|
if (!this.alepha.isServerless()) {
|
|
129
129
|
try {
|
|
130
|
-
await this.
|
|
130
|
+
await this.migrateLock.run();
|
|
131
131
|
} catch (error) {
|
|
132
132
|
throw new DbMigrationError(error);
|
|
133
133
|
}
|
|
@@ -196,9 +196,9 @@ export class NodePostgresProvider extends DatabaseProvider {
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
protected
|
|
199
|
+
protected migrateLock = $lock({
|
|
200
200
|
handler: async () => {
|
|
201
|
-
await this.
|
|
201
|
+
await this.migrate();
|
|
202
202
|
},
|
|
203
203
|
});
|
|
204
204
|
|
|
@@ -55,7 +55,7 @@ export class PglitePostgresProvider extends DatabaseProvider {
|
|
|
55
55
|
if (this.alepha.isTest()) {
|
|
56
56
|
path = ":memory:"; // use in-memory database for tests by default
|
|
57
57
|
} else {
|
|
58
|
-
path = "node_modules/.
|
|
58
|
+
path = "node_modules/.alepha/pglite"; // default path for dev
|
|
59
59
|
}
|
|
60
60
|
} else {
|
|
61
61
|
if (path.includes(":memory:")) {
|
|
@@ -112,7 +112,7 @@ export class PglitePostgresProvider extends DatabaseProvider {
|
|
|
112
112
|
client: this.client,
|
|
113
113
|
});
|
|
114
114
|
|
|
115
|
-
await this.
|
|
115
|
+
await this.migrate();
|
|
116
116
|
|
|
117
117
|
this.log.info(`Using PGlite database at ${path}`);
|
|
118
118
|
},
|