alepha 0.13.1 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api-files/index.d.ts +28 -91
- package/dist/api-files/index.js +10 -755
- package/dist/api-files/index.js.map +1 -1
- package/dist/api-jobs/index.d.ts +46 -46
- package/dist/api-jobs/index.js +13 -13
- package/dist/api-jobs/index.js.map +1 -1
- package/dist/api-notifications/index.d.ts +129 -146
- package/dist/api-notifications/index.js +17 -39
- package/dist/api-notifications/index.js.map +1 -1
- package/dist/api-parameters/index.d.ts +21 -22
- package/dist/api-parameters/index.js +22 -22
- package/dist/api-parameters/index.js.map +1 -1
- package/dist/api-users/index.d.ts +223 -2000
- package/dist/api-users/index.js +914 -4787
- package/dist/api-users/index.js.map +1 -1
- package/dist/api-verifications/index.d.ts +96 -96
- package/dist/batch/index.d.ts +13 -13
- package/dist/batch/index.js +8 -8
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts +14 -14
- package/dist/bucket/index.js +12 -12
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/index.d.ts +11 -11
- package/dist/cache/index.js +9 -9
- package/dist/cache/index.js.map +1 -1
- package/dist/cli/index.d.ts +28 -26
- package/dist/cli/index.js +50 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +19 -19
- package/dist/command/index.js +25 -25
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +218 -218
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +232 -232
- package/dist/core/index.js +218 -218
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +2113 -0
- package/dist/core/index.native.js.map +1 -0
- package/dist/datetime/index.d.ts +9 -9
- package/dist/datetime/index.js +7 -7
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +16 -16
- package/dist/email/index.js +9 -9
- package/dist/email/index.js.map +1 -1
- package/dist/file/index.js +1 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/index.d.ts +9 -9
- package/dist/lock/index.js +8 -8
- package/dist/lock/index.js.map +1 -1
- package/dist/lock-redis/index.js +3 -66
- package/dist/lock-redis/index.js.map +1 -1
- package/dist/logger/index.d.ts +5 -5
- package/dist/logger/index.js +8 -8
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/index.browser.js +114 -114
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.d.ts +218 -218
- package/dist/orm/index.js +46 -46
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/index.d.ts +29 -29
- package/dist/queue/index.js +20 -20
- package/dist/queue/index.js.map +1 -1
- package/dist/queue-redis/index.d.ts +2 -2
- package/dist/redis/index.d.ts +10 -10
- package/dist/retry/index.d.ts +19 -19
- package/dist/retry/index.js +7 -7
- package/dist/retry/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +16 -16
- package/dist/scheduler/index.js +9 -9
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +80 -80
- package/dist/security/index.js +32 -32
- package/dist/security/index.js.map +1 -1
- package/dist/server/index.browser.js +1 -1
- package/dist/server/index.browser.js.map +1 -1
- package/dist/server/index.d.ts +101 -101
- package/dist/server/index.js +16 -16
- package/dist/server/index.js.map +1 -1
- package/dist/server-auth/index.browser.js +4 -982
- package/dist/server-auth/index.browser.js.map +1 -1
- package/dist/server-auth/index.d.ts +204 -785
- package/dist/server-auth/index.js +47 -1239
- package/dist/server-auth/index.js.map +1 -1
- package/dist/server-cache/index.d.ts +10 -10
- package/dist/server-cache/index.js +2 -2
- package/dist/server-cache/index.js.map +1 -1
- package/dist/server-compress/index.d.ts +4 -4
- package/dist/server-compress/index.js +1 -1
- package/dist/server-compress/index.js.map +1 -1
- package/dist/server-cookies/index.browser.js +8 -8
- package/dist/server-cookies/index.browser.js.map +1 -1
- package/dist/server-cookies/index.d.ts +17 -17
- package/dist/server-cookies/index.js +10 -10
- package/dist/server-cookies/index.js.map +1 -1
- package/dist/server-cors/index.d.ts +17 -17
- package/dist/server-cors/index.js +9 -9
- package/dist/server-cors/index.js.map +1 -1
- package/dist/server-health/index.d.ts +19 -19
- package/dist/server-helmet/index.d.ts +1 -1
- package/dist/server-links/index.browser.js +12 -12
- package/dist/server-links/index.browser.js.map +1 -1
- package/dist/server-links/index.d.ts +59 -251
- package/dist/server-links/index.js +23 -502
- package/dist/server-links/index.js.map +1 -1
- package/dist/server-metrics/index.d.ts +4 -4
- package/dist/server-multipart/index.d.ts +2 -2
- package/dist/server-proxy/index.d.ts +12 -12
- package/dist/server-proxy/index.js +10 -10
- package/dist/server-proxy/index.js.map +1 -1
- package/dist/server-rate-limit/index.d.ts +22 -22
- package/dist/server-rate-limit/index.js +12 -12
- package/dist/server-rate-limit/index.js.map +1 -1
- package/dist/server-security/index.d.ts +22 -22
- package/dist/server-security/index.js +15 -15
- package/dist/server-security/index.js.map +1 -1
- package/dist/server-static/index.d.ts +14 -14
- package/dist/server-static/index.js +8 -8
- package/dist/server-static/index.js.map +1 -1
- package/dist/server-swagger/index.d.ts +25 -184
- package/dist/server-swagger/index.js +21 -724
- package/dist/server-swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +14 -14
- package/dist/sms/index.js +9 -9
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +11 -11
- package/dist/thread/index.js +17 -17
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/index.d.ts +26 -26
- package/dist/topic/index.js +16 -16
- package/dist/topic/index.js.map +1 -1
- package/dist/topic-redis/index.d.ts +1 -1
- package/dist/vite/index.d.ts +3 -3
- package/dist/vite/index.js +8 -8
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +11 -11
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +58 -58
- package/dist/websocket/index.js +13 -13
- package/dist/websocket/index.js.map +1 -1
- package/package.json +113 -52
- package/src/api-files/services/FileService.ts +5 -7
- package/src/api-jobs/index.ts +1 -1
- package/src/api-jobs/{descriptors → primitives}/$job.ts +8 -8
- package/src/api-jobs/providers/JobProvider.ts +9 -9
- package/src/api-jobs/services/JobService.ts +5 -5
- package/src/api-notifications/index.ts +5 -15
- package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
- package/src/api-notifications/services/NotificationSenderService.ts +3 -3
- package/src/api-parameters/index.ts +1 -1
- package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
- package/src/api-users/index.ts +1 -1
- package/src/api-users/{descriptors → primitives}/$userRealm.ts +8 -8
- package/src/api-users/providers/UserRealmProvider.ts +1 -1
- package/src/batch/index.ts +3 -3
- package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
- package/src/bucket/index.ts +8 -8
- package/src/bucket/{descriptors → primitives}/$bucket.ts +8 -8
- package/src/bucket/providers/LocalFileStorageProvider.ts +3 -3
- package/src/cache/index.ts +4 -4
- package/src/cache/{descriptors → primitives}/$cache.ts +15 -15
- package/src/cli/apps/AlephaPackageBuilderCli.ts +24 -2
- package/src/cli/commands/DrizzleCommands.ts +6 -6
- package/src/cli/commands/VerifyCommands.ts +1 -1
- package/src/cli/commands/ViteCommands.ts +6 -1
- package/src/cli/services/ProjectUtils.ts +34 -3
- package/src/command/index.ts +5 -5
- package/src/command/{descriptors → primitives}/$command.ts +9 -12
- package/src/command/providers/CliProvider.ts +10 -10
- package/src/core/Alepha.ts +30 -33
- package/src/core/constants/KIND.ts +1 -1
- package/src/core/constants/OPTIONS.ts +1 -1
- package/src/core/helpers/{descriptor.ts → primitive.ts} +18 -18
- package/src/core/helpers/ref.ts +1 -1
- package/src/core/index.shared.ts +8 -8
- package/src/core/{descriptors → primitives}/$context.ts +5 -5
- package/src/core/{descriptors → primitives}/$hook.ts +4 -4
- package/src/core/{descriptors → primitives}/$inject.ts +2 -2
- package/src/core/{descriptors → primitives}/$module.ts +9 -9
- package/src/core/{descriptors → primitives}/$use.ts +2 -2
- package/src/core/providers/CodecManager.ts +1 -1
- package/src/core/providers/JsonSchemaCodec.ts +1 -1
- package/src/core/providers/StateManager.ts +2 -2
- package/src/datetime/index.ts +3 -3
- package/src/datetime/{descriptors → primitives}/$interval.ts +6 -6
- package/src/email/index.ts +4 -4
- package/src/email/{descriptors → primitives}/$email.ts +8 -8
- package/src/file/index.ts +1 -1
- package/src/lock/index.ts +3 -3
- package/src/lock/{descriptors → primitives}/$lock.ts +10 -10
- package/src/logger/index.ts +8 -8
- package/src/logger/{descriptors → primitives}/$logger.ts +2 -2
- package/src/logger/services/Logger.ts +1 -1
- package/src/orm/constants/PG_SYMBOLS.ts +2 -2
- package/src/orm/index.browser.ts +2 -2
- package/src/orm/index.ts +8 -8
- package/src/orm/{descriptors → primitives}/$entity.ts +11 -11
- package/src/orm/{descriptors → primitives}/$repository.ts +2 -2
- package/src/orm/{descriptors → primitives}/$sequence.ts +8 -8
- package/src/orm/{descriptors → primitives}/$transaction.ts +4 -4
- package/src/orm/providers/PostgresTypeProvider.ts +3 -3
- package/src/orm/providers/RepositoryProvider.ts +4 -4
- package/src/orm/providers/drivers/DatabaseProvider.ts +7 -7
- package/src/orm/services/ModelBuilder.ts +9 -9
- package/src/orm/services/PgRelationManager.ts +2 -2
- package/src/orm/services/PostgresModelBuilder.ts +5 -5
- package/src/orm/services/Repository.ts +7 -7
- package/src/orm/services/SqliteModelBuilder.ts +5 -5
- package/src/queue/index.ts +7 -7
- package/src/queue/{descriptors → primitives}/$consumer.ts +15 -15
- package/src/queue/{descriptors → primitives}/$queue.ts +12 -12
- package/src/queue/providers/WorkerProvider.ts +7 -7
- package/src/retry/index.ts +3 -3
- package/src/retry/{descriptors → primitives}/$retry.ts +14 -14
- package/src/scheduler/index.ts +3 -3
- package/src/scheduler/{descriptors → primitives}/$scheduler.ts +9 -9
- package/src/scheduler/providers/CronProvider.ts +1 -1
- package/src/security/index.ts +9 -9
- package/src/security/{descriptors → primitives}/$permission.ts +7 -7
- package/src/security/{descriptors → primitives}/$realm.ts +6 -12
- package/src/security/{descriptors → primitives}/$role.ts +12 -12
- package/src/security/{descriptors → primitives}/$serviceAccount.ts +8 -8
- package/src/server/index.browser.ts +1 -1
- package/src/server/index.ts +14 -14
- package/src/server/{descriptors → primitives}/$action.ts +13 -13
- package/src/server/{descriptors → primitives}/$route.ts +9 -9
- package/src/server/providers/NodeHttpServerProvider.ts +1 -1
- package/src/server/services/HttpClient.ts +1 -1
- package/src/server-auth/index.browser.ts +1 -1
- package/src/server-auth/index.ts +6 -6
- package/src/server-auth/{descriptors → primitives}/$auth.ts +10 -10
- package/src/server-auth/{descriptors → primitives}/$authCredentials.ts +4 -4
- package/src/server-auth/{descriptors → primitives}/$authGithub.ts +4 -4
- package/src/server-auth/{descriptors → primitives}/$authGoogle.ts +4 -4
- package/src/server-auth/providers/ServerAuthProvider.ts +4 -4
- package/src/server-cache/providers/ServerCacheProvider.ts +7 -7
- package/src/server-compress/providers/ServerCompressProvider.ts +3 -3
- package/src/server-cookies/index.browser.ts +2 -2
- package/src/server-cookies/index.ts +5 -5
- package/src/server-cookies/{descriptors → primitives}/$cookie.browser.ts +12 -12
- package/src/server-cookies/{descriptors → primitives}/$cookie.ts +13 -13
- package/src/server-cookies/providers/ServerCookiesProvider.ts +4 -4
- package/src/server-cookies/services/CookieParser.ts +1 -1
- package/src/server-cors/index.ts +3 -3
- package/src/server-cors/{descriptors → primitives}/$cors.ts +11 -13
- package/src/server-cors/providers/ServerCorsProvider.ts +5 -5
- package/src/server-links/index.browser.ts +5 -5
- package/src/server-links/index.ts +9 -9
- package/src/server-links/{descriptors → primitives}/$remote.ts +11 -11
- package/src/server-links/providers/LinkProvider.ts +7 -7
- package/src/server-links/providers/{RemoteDescriptorProvider.ts → RemotePrimitiveProvider.ts} +6 -6
- package/src/server-links/providers/ServerLinksProvider.ts +3 -3
- package/src/server-proxy/index.ts +3 -3
- package/src/server-proxy/{descriptors → primitives}/$proxy.ts +8 -8
- package/src/server-proxy/providers/ServerProxyProvider.ts +4 -4
- package/src/server-rate-limit/index.ts +6 -6
- package/src/server-rate-limit/{descriptors → primitives}/$rateLimit.ts +13 -13
- package/src/server-rate-limit/providers/ServerRateLimitProvider.ts +5 -5
- package/src/server-security/index.ts +3 -3
- package/src/server-security/{descriptors → primitives}/$basicAuth.ts +13 -13
- package/src/server-security/providers/ServerBasicAuthProvider.ts +5 -5
- package/src/server-security/providers/ServerSecurityProvider.ts +4 -4
- package/src/server-static/index.ts +3 -3
- package/src/server-static/{descriptors → primitives}/$serve.ts +8 -10
- package/src/server-static/providers/ServerStaticProvider.ts +6 -6
- package/src/server-swagger/index.ts +5 -5
- package/src/server-swagger/{descriptors → primitives}/$swagger.ts +9 -9
- package/src/server-swagger/providers/ServerSwaggerProvider.ts +11 -10
- package/src/sms/index.ts +4 -4
- package/src/sms/{descriptors → primitives}/$sms.ts +8 -8
- package/src/thread/index.ts +3 -3
- package/src/thread/{descriptors → primitives}/$thread.ts +13 -13
- package/src/thread/providers/ThreadProvider.ts +7 -9
- package/src/topic/index.ts +5 -5
- package/src/topic/{descriptors → primitives}/$subscriber.ts +14 -14
- package/src/topic/{descriptors → primitives}/$topic.ts +10 -10
- package/src/topic/providers/TopicProvider.ts +4 -4
- package/src/vite/tasks/copyAssets.ts +1 -1
- package/src/vite/tasks/generateSitemap.ts +3 -3
- package/src/vite/tasks/prerenderPages.ts +2 -2
- package/src/vite/tasks/runAlepha.ts +2 -2
- package/src/websocket/index.browser.ts +3 -3
- package/src/websocket/index.shared.ts +2 -2
- package/src/websocket/index.ts +4 -4
- package/src/websocket/interfaces/WebSocketInterfaces.ts +3 -3
- package/src/websocket/{descriptors → primitives}/$channel.ts +10 -10
- package/src/websocket/{descriptors → primitives}/$websocket.ts +8 -8
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +7 -7
- package/src/websocket/providers/WebSocketServerProvider.ts +3 -3
- package/src/websocket/services/WebSocketClient.ts +5 -5
- package/src/api-notifications/providers/MemorySmsProvider.ts +0 -20
- package/src/api-notifications/providers/SmsProvider.ts +0 -8
- /package/src/core/{descriptors → primitives}/$atom.ts +0 -0
- /package/src/core/{descriptors → primitives}/$env.ts +0 -0
- /package/src/server-auth/{descriptors → primitives}/$authApple.ts +0 -0
- /package/src/server-links/{descriptors → primitives}/$client.ts +0 -0
|
@@ -2,11 +2,11 @@ import type { Alepha } from "../Alepha.ts";
|
|
|
2
2
|
import { KIND } from "../constants/KIND.ts";
|
|
3
3
|
import { MODULE } from "../constants/MODULE.ts";
|
|
4
4
|
import { AlephaError } from "../errors/AlephaError.ts";
|
|
5
|
-
import type {
|
|
5
|
+
import type { PrimitiveFactoryLike } from "../helpers/primitive.ts";
|
|
6
6
|
import type { Service } from "../interfaces/Service.ts";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Wrap Services and
|
|
9
|
+
* Wrap Services and Primitives into a Module.
|
|
10
10
|
*
|
|
11
11
|
* - A module is just a Service with some extra {@link Module}.
|
|
12
12
|
* - You must attach a `name` to it.
|
|
@@ -54,9 +54,9 @@ import type { Service } from "../interfaces/Service.ts";
|
|
|
54
54
|
* Meaning that if you have 100 actions, you should have at least 3 modules.
|
|
55
55
|
*/
|
|
56
56
|
export const $module = <T extends object = {}>(
|
|
57
|
-
options:
|
|
57
|
+
options: ModulePrimitiveOptions,
|
|
58
58
|
): Service<Module> => {
|
|
59
|
-
const { services = [],
|
|
59
|
+
const { services = [], primitives = [], name } = options;
|
|
60
60
|
|
|
61
61
|
// ensure name is valid
|
|
62
62
|
if (!name || !Module.NAME_REGEX.test(name)) {
|
|
@@ -94,7 +94,7 @@ export const $module = <T extends object = {}>(
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
for (const factory of
|
|
97
|
+
for (const factory of primitives) {
|
|
98
98
|
if (typeof factory[KIND] === "function") {
|
|
99
99
|
factory[KIND][MODULE] = $;
|
|
100
100
|
}
|
|
@@ -105,7 +105,7 @@ export const $module = <T extends object = {}>(
|
|
|
105
105
|
|
|
106
106
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
107
107
|
|
|
108
|
-
export interface
|
|
108
|
+
export interface ModulePrimitiveOptions {
|
|
109
109
|
/**
|
|
110
110
|
* Name of the module.
|
|
111
111
|
*
|
|
@@ -122,9 +122,9 @@ export interface ModuleDescriptorOptions {
|
|
|
122
122
|
services?: Array<Service>;
|
|
123
123
|
|
|
124
124
|
/**
|
|
125
|
-
* List of $
|
|
125
|
+
* List of $primitives to register in the module.
|
|
126
126
|
*/
|
|
127
|
-
|
|
127
|
+
primitives?: Array<PrimitiveFactoryLike>;
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* By default, module will register ALL services.
|
|
@@ -140,7 +140,7 @@ export interface ModuleDescriptorOptions {
|
|
|
140
140
|
* Base class for all modules.
|
|
141
141
|
*/
|
|
142
142
|
export abstract class Module {
|
|
143
|
-
public abstract readonly options:
|
|
143
|
+
public abstract readonly options: ModulePrimitiveOptions;
|
|
144
144
|
|
|
145
145
|
public abstract register(alepha: Alepha): void;
|
|
146
146
|
|
|
@@ -32,9 +32,9 @@ export const $use = <T extends TObject, N extends string>(
|
|
|
32
32
|
const { alepha } = $context();
|
|
33
33
|
|
|
34
34
|
// register atom in state if not already registered
|
|
35
|
-
alepha.
|
|
35
|
+
alepha.store.register(atom);
|
|
36
36
|
|
|
37
|
-
const init = alepha.
|
|
37
|
+
const init = alepha.store.get(atom.key as keyof State) as object;
|
|
38
38
|
|
|
39
39
|
return {
|
|
40
40
|
[OPTIONS]: { getter: atom.key }, // alepha will replace this with by a real 'get prop()'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { StaticEncode, TSchema } from "typebox";
|
|
2
|
-
import { $inject } from "../descriptors/$inject.ts";
|
|
3
2
|
import { AlephaError } from "../errors/AlephaError.ts";
|
|
3
|
+
import { $inject } from "../primitives/$inject.ts";
|
|
4
4
|
import { JsonSchemaCodec } from "./JsonSchemaCodec.ts";
|
|
5
5
|
import type { SchemaCodec } from "./SchemaCodec.ts";
|
|
6
6
|
import { SchemaValidator, type ValidateOptions } from "./SchemaValidator.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TSchema } from "typebox";
|
|
2
|
-
import { $inject } from "../
|
|
2
|
+
import { $inject } from "../primitives/$inject.ts";
|
|
3
3
|
import { Json } from "./Json.ts";
|
|
4
4
|
import { SchemaCodec } from "./SchemaCodec.ts";
|
|
5
5
|
import type { Static } from "./TypeProvider.ts";
|
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
Atom,
|
|
5
5
|
type AtomStatic,
|
|
6
6
|
type TAtomObject,
|
|
7
|
-
} from "../
|
|
8
|
-
import { $inject } from "../
|
|
7
|
+
} from "../primitives/$atom.ts";
|
|
8
|
+
import { $inject } from "../primitives/$inject.ts";
|
|
9
9
|
import { AlsProvider } from "./AlsProvider.ts";
|
|
10
10
|
import { EventManager } from "./EventManager.ts";
|
|
11
11
|
import { JsonSchemaCodec } from "./JsonSchemaCodec.ts";
|
package/src/datetime/index.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
|
-
import { $interval } from "./
|
|
2
|
+
import { $interval } from "./primitives/$interval.ts";
|
|
3
3
|
import { DateTimeProvider } from "./providers/DateTimeProvider.ts";
|
|
4
4
|
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./primitives/$interval.ts";
|
|
6
6
|
export * from "./providers/DateTimeProvider.ts";
|
|
7
7
|
|
|
8
8
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
9
9
|
|
|
10
10
|
export const AlephaDateTime = $module({
|
|
11
11
|
name: "alepha.datetime",
|
|
12
|
-
|
|
12
|
+
primitives: [$interval],
|
|
13
13
|
services: [DateTimeProvider],
|
|
14
14
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import {
|
|
3
3
|
DateTimeProvider,
|
|
4
4
|
type DurationLike,
|
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
* It uses the `setInterval` internally.
|
|
10
10
|
* It starts by default when the context starts and stops when the context stops.
|
|
11
11
|
*/
|
|
12
|
-
export const $interval = (options:
|
|
13
|
-
|
|
12
|
+
export const $interval = (options: IntervalPrimitiveOptions) =>
|
|
13
|
+
createPrimitive(IntervalPrimitive, options);
|
|
14
14
|
|
|
15
15
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
16
16
|
|
|
17
|
-
export interface
|
|
17
|
+
export interface IntervalPrimitiveOptions {
|
|
18
18
|
/**
|
|
19
19
|
* The interval handler.
|
|
20
20
|
*/
|
|
@@ -28,7 +28,7 @@ export interface IntervalDescriptorOptions {
|
|
|
28
28
|
|
|
29
29
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
30
30
|
|
|
31
|
-
export class
|
|
31
|
+
export class IntervalPrimitive extends Primitive<IntervalPrimitiveOptions> {
|
|
32
32
|
protected readonly dateTimeProvider = $inject(DateTimeProvider);
|
|
33
33
|
|
|
34
34
|
public called = 0;
|
|
@@ -41,4 +41,4 @@ export class IntervalDescriptor extends Descriptor<IntervalDescriptorOptions> {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
$interval[KIND] =
|
|
44
|
+
$interval[KIND] = IntervalPrimitive;
|
package/src/email/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
|
-
import { $email } from "./
|
|
2
|
+
import { $email } from "./primitives/$email.ts";
|
|
3
3
|
import { EmailProvider } from "./providers/EmailProvider.ts";
|
|
4
4
|
import { LocalEmailProvider } from "./providers/LocalEmailProvider.ts";
|
|
5
5
|
import { MemoryEmailProvider } from "./providers/MemoryEmailProvider.ts";
|
|
@@ -7,8 +7,8 @@ import { NodemailerEmailProvider } from "./providers/NodemailerEmailProvider.ts"
|
|
|
7
7
|
|
|
8
8
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
9
9
|
|
|
10
|
-
export * from "./descriptors/$email.ts";
|
|
11
10
|
export * from "./errors/EmailError.ts";
|
|
11
|
+
export * from "./primitives/$email.ts";
|
|
12
12
|
export * from "./providers/EmailProvider.ts";
|
|
13
13
|
export * from "./providers/LocalEmailProvider.ts";
|
|
14
14
|
export * from "./providers/MemoryEmailProvider.ts";
|
|
@@ -38,7 +38,7 @@ declare module "alepha" {
|
|
|
38
38
|
/**
|
|
39
39
|
* Provides email sending capabilities for Alepha applications with multiple provider backends.
|
|
40
40
|
*
|
|
41
|
-
* The email module enables declarative email sending through the `$email`
|
|
41
|
+
* The email module enables declarative email sending through the `$email` primitive, allowing you to send
|
|
42
42
|
* emails through different providers: memory (for testing), local file system, or SMTP via Nodemailer.
|
|
43
43
|
* It supports HTML email content and automatic provider selection based on environment configuration.
|
|
44
44
|
*
|
|
@@ -47,7 +47,7 @@ declare module "alepha" {
|
|
|
47
47
|
*/
|
|
48
48
|
export const AlephaEmail = $module({
|
|
49
49
|
name: "alepha.email",
|
|
50
|
-
|
|
50
|
+
primitives: [$email],
|
|
51
51
|
services: [
|
|
52
52
|
EmailProvider,
|
|
53
53
|
MemoryEmailProvider,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
Descriptor,
|
|
2
|
+
createPrimitive,
|
|
4
3
|
type InstantiableClass,
|
|
5
4
|
KIND,
|
|
5
|
+
Primitive,
|
|
6
6
|
} from "alepha";
|
|
7
7
|
import type { EmailSendOptions } from "../providers/EmailProvider.ts";
|
|
8
8
|
import { EmailProvider } from "../providers/EmailProvider.ts";
|
|
@@ -10,12 +10,12 @@ import { MemoryEmailProvider } from "../providers/MemoryEmailProvider.ts";
|
|
|
10
10
|
|
|
11
11
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
12
12
|
|
|
13
|
-
export const $email = (options:
|
|
14
|
-
|
|
13
|
+
export const $email = (options: EmailPrimitiveOptions = {}) =>
|
|
14
|
+
createPrimitive(EmailPrimitive, options);
|
|
15
15
|
|
|
16
16
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
17
17
|
|
|
18
|
-
export interface
|
|
18
|
+
export interface EmailPrimitiveOptions {
|
|
19
19
|
name?: string;
|
|
20
20
|
provider?: InstantiableClass<EmailProvider> | "memory";
|
|
21
21
|
}
|
|
@@ -23,7 +23,7 @@ export interface EmailDescriptorOptions {
|
|
|
23
23
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
* Email
|
|
26
|
+
* Email primitive for sending emails through various providers.
|
|
27
27
|
*
|
|
28
28
|
* Usage:
|
|
29
29
|
* ```typescript
|
|
@@ -40,7 +40,7 @@ export interface EmailDescriptorOptions {
|
|
|
40
40
|
* }
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
export class
|
|
43
|
+
export class EmailPrimitive extends Primitive<EmailPrimitiveOptions> {
|
|
44
44
|
protected readonly provider = this.$provider();
|
|
45
45
|
|
|
46
46
|
public get name() {
|
|
@@ -83,4 +83,4 @@ export class EmailDescriptor extends Descriptor<EmailDescriptorOptions> {
|
|
|
83
83
|
|
|
84
84
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
85
85
|
|
|
86
|
-
$email[KIND] =
|
|
86
|
+
$email[KIND] = EmailPrimitive;
|
package/src/file/index.ts
CHANGED
|
@@ -24,7 +24,7 @@ export * from "./services/FileDetector.ts";
|
|
|
24
24
|
*/
|
|
25
25
|
export const AlephaFile = $module({
|
|
26
26
|
name: "alepha.file",
|
|
27
|
-
|
|
27
|
+
primitives: [],
|
|
28
28
|
services: [FileDetector, FileSystemProvider, NodeFileSystemProvider],
|
|
29
29
|
register: (alepha) =>
|
|
30
30
|
alepha.with({
|
package/src/lock/index.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
2
|
import { MemoryTopicProvider } from "alepha/topic";
|
|
3
|
-
import { $lock } from "./
|
|
3
|
+
import { $lock } from "./primitives/$lock.ts";
|
|
4
4
|
import { LockProvider } from "./providers/LockProvider.ts";
|
|
5
5
|
import { LockTopicProvider } from "./providers/LockTopicProvider.ts";
|
|
6
6
|
import { MemoryLockProvider } from "./providers/MemoryLockProvider.ts";
|
|
7
7
|
|
|
8
8
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
9
9
|
|
|
10
|
-
export * from "./
|
|
10
|
+
export * from "./primitives/$lock.ts";
|
|
11
11
|
export * from "./providers/LockProvider.ts";
|
|
12
12
|
export * from "./providers/LockTopicProvider.ts";
|
|
13
13
|
export * from "./providers/MemoryLockProvider.ts";
|
|
@@ -25,7 +25,7 @@ export * from "./providers/MemoryLockProvider.ts";
|
|
|
25
25
|
*/
|
|
26
26
|
export const AlephaLock = $module({
|
|
27
27
|
name: "alepha.lock",
|
|
28
|
-
|
|
28
|
+
primitives: [$lock],
|
|
29
29
|
services: [LockProvider, MemoryLockProvider, LockTopicProvider],
|
|
30
30
|
register: (alepha) =>
|
|
31
31
|
alepha
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
$env,
|
|
3
3
|
$inject,
|
|
4
4
|
type AsyncFn,
|
|
5
|
-
|
|
6
|
-
Descriptor,
|
|
5
|
+
createPrimitive,
|
|
7
6
|
KIND,
|
|
7
|
+
Primitive,
|
|
8
8
|
type Static,
|
|
9
9
|
t,
|
|
10
10
|
} from "alepha";
|
|
@@ -19,7 +19,7 @@ import { LockProvider } from "../providers/LockProvider.ts";
|
|
|
19
19
|
import { LockTopicProvider } from "../providers/LockTopicProvider.ts";
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* Creates a distributed lock
|
|
22
|
+
* Creates a distributed lock primitive for ensuring single-instance execution across processes.
|
|
23
23
|
*
|
|
24
24
|
* Prevents multiple instances of the same operation from running simultaneously, essential for
|
|
25
25
|
* maintaining data consistency and preventing race conditions in distributed applications.
|
|
@@ -68,14 +68,14 @@ import { LockTopicProvider } from "../providers/LockTopicProvider.ts";
|
|
|
68
68
|
* ```
|
|
69
69
|
*/
|
|
70
70
|
export const $lock = <TFunc extends AsyncFn>(
|
|
71
|
-
options:
|
|
72
|
-
):
|
|
73
|
-
return
|
|
71
|
+
options: LockPrimitiveOptions<TFunc>,
|
|
72
|
+
): LockPrimitive<TFunc> => {
|
|
73
|
+
return createPrimitive(LockPrimitive<TFunc>, options);
|
|
74
74
|
};
|
|
75
75
|
|
|
76
76
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
77
77
|
|
|
78
|
-
export interface
|
|
78
|
+
export interface LockPrimitiveOptions<TFunc extends AsyncFn> {
|
|
79
79
|
/**
|
|
80
80
|
* The function to execute when the lock is successfully acquired.
|
|
81
81
|
*
|
|
@@ -295,8 +295,8 @@ declare module "alepha" {
|
|
|
295
295
|
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
export class
|
|
299
|
-
|
|
298
|
+
export class LockPrimitive<TFunc extends AsyncFn> extends Primitive<
|
|
299
|
+
LockPrimitiveOptions<TFunc>
|
|
300
300
|
> {
|
|
301
301
|
protected readonly log = $logger();
|
|
302
302
|
protected readonly provider = $inject(LockProvider);
|
|
@@ -439,7 +439,7 @@ export class LockDescriptor<TFunc extends AsyncFn> extends Descriptor<
|
|
|
439
439
|
}
|
|
440
440
|
}
|
|
441
441
|
|
|
442
|
-
$lock[KIND] =
|
|
442
|
+
$lock[KIND] = LockPrimitive;
|
|
443
443
|
|
|
444
444
|
export interface LockResult {
|
|
445
445
|
id: string;
|
package/src/logger/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $module, type Static, t } from "alepha";
|
|
2
|
-
import { $logger } from "./
|
|
2
|
+
import { $logger } from "./primitives/$logger.ts";
|
|
3
3
|
import { ConsoleDestinationProvider } from "./providers/ConsoleDestinationProvider.ts";
|
|
4
4
|
import { JsonFormatterProvider } from "./providers/JsonFormatterProvider.ts";
|
|
5
5
|
import { LogDestinationProvider } from "./providers/LogDestinationProvider.ts";
|
|
@@ -12,7 +12,7 @@ import { Logger } from "./services/Logger.ts";
|
|
|
12
12
|
|
|
13
13
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
14
14
|
|
|
15
|
-
export * from "./
|
|
15
|
+
export * from "./primitives/$logger.ts";
|
|
16
16
|
export * from "./providers/ConsoleColorProvider.ts";
|
|
17
17
|
export * from "./providers/ConsoleDestinationProvider.ts";
|
|
18
18
|
export * from "./providers/JsonFormatterProvider.ts";
|
|
@@ -28,7 +28,7 @@ export * from "./services/Logger.ts";
|
|
|
28
28
|
/**
|
|
29
29
|
* Minimalist logger module for Alepha.
|
|
30
30
|
*
|
|
31
|
-
* It offers a global logger interface (info, warn, ...) via the `$logger`
|
|
31
|
+
* It offers a global logger interface (info, warn, ...) via the `$logger` primitive.
|
|
32
32
|
*
|
|
33
33
|
* ```ts
|
|
34
34
|
* import { $logger } from "alepha/logger";
|
|
@@ -95,7 +95,7 @@ export * from "./services/Logger.ts";
|
|
|
95
95
|
*/
|
|
96
96
|
export const AlephaLogger = $module({
|
|
97
97
|
name: "alepha.logger",
|
|
98
|
-
|
|
98
|
+
primitives: [$logger],
|
|
99
99
|
services: [
|
|
100
100
|
Logger,
|
|
101
101
|
ConsoleDestinationProvider,
|
|
@@ -121,8 +121,8 @@ export const AlephaLogger = $module({
|
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
try {
|
|
124
|
-
alepha.
|
|
125
|
-
alepha.
|
|
124
|
+
alepha.store.get("alepha.test.afterEach")?.(printOnError);
|
|
125
|
+
alepha.store.get("alepha.test.onTestFinished")?.(printOnError);
|
|
126
126
|
} catch {
|
|
127
127
|
// ignore
|
|
128
128
|
}
|
|
@@ -163,7 +163,7 @@ export const AlephaLogger = $module({
|
|
|
163
163
|
use: getLogFormatterProvider(),
|
|
164
164
|
});
|
|
165
165
|
|
|
166
|
-
alepha.
|
|
166
|
+
alepha.store.set(
|
|
167
167
|
"alepha.logger",
|
|
168
168
|
alepha.inject(Logger, {
|
|
169
169
|
lifetime: "transient",
|
|
@@ -171,7 +171,7 @@ export const AlephaLogger = $module({
|
|
|
171
171
|
}),
|
|
172
172
|
);
|
|
173
173
|
|
|
174
|
-
alepha.
|
|
174
|
+
alepha.store.set(
|
|
175
175
|
"alepha.logger.level",
|
|
176
176
|
env.LOG_LEVEL ?? (alepha.isTest() ? "trace" : "info"),
|
|
177
177
|
);
|
|
@@ -20,7 +20,7 @@ import { Logger } from "../services/Logger.ts";
|
|
|
20
20
|
* }
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
|
-
export const $logger = (options:
|
|
23
|
+
export const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {
|
|
24
24
|
const { alepha, service, module } = $context();
|
|
25
25
|
|
|
26
26
|
return $inject(Logger, {
|
|
@@ -32,7 +32,7 @@ export const $logger = (options: LoggerDescriptorOptions = {}): Logger => {
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
export interface
|
|
35
|
+
export interface LoggerPrimitiveOptions {
|
|
36
36
|
name?: string;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -43,7 +43,7 @@ export class Logger implements LoggerInterface {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
public get level(): string {
|
|
46
|
-
const stateLogLevel = this.alepha.
|
|
46
|
+
const stateLogLevel = this.alepha.store.get("alepha.logger.level");
|
|
47
47
|
if (stateLogLevel && stateLogLevel !== this.appLogLevel) {
|
|
48
48
|
this.appLogLevel = stateLogLevel;
|
|
49
49
|
this.logLevel = this.parseLevel(this.appLogLevel, this.module);
|
|
@@ -2,7 +2,7 @@ import type {
|
|
|
2
2
|
PgSequenceOptions,
|
|
3
3
|
UpdateDeleteAction,
|
|
4
4
|
} from "drizzle-orm/pg-core";
|
|
5
|
-
import type {
|
|
5
|
+
import type { EntityPrimitive } from "../primitives/$entity.ts";
|
|
6
6
|
|
|
7
7
|
export const PG_DEFAULT = Symbol.for("Alepha.Postgres.Default");
|
|
8
8
|
export const PG_PRIMARY_KEY = Symbol.for("Alepha.Postgres.PrimaryKey");
|
|
@@ -56,7 +56,7 @@ export interface PgEnumOptions {
|
|
|
56
56
|
export interface PgRefOptions {
|
|
57
57
|
ref: () => {
|
|
58
58
|
name: string;
|
|
59
|
-
entity:
|
|
59
|
+
entity: EntityPrimitive;
|
|
60
60
|
};
|
|
61
61
|
actions?: {
|
|
62
62
|
onUpdate?: UpdateDeleteAction;
|
package/src/orm/index.browser.ts
CHANGED
|
@@ -9,13 +9,13 @@ export {
|
|
|
9
9
|
pageQuerySchema,
|
|
10
10
|
pageSchema,
|
|
11
11
|
} from "alepha";
|
|
12
|
-
export * from "./descriptors/$entity.ts";
|
|
13
12
|
export * from "./errors/DbEntityNotFoundError.ts";
|
|
14
13
|
export * from "./helpers/parseQueryString.ts";
|
|
15
14
|
export * from "./helpers/pgAttr.ts";
|
|
16
15
|
export * from "./interfaces/FilterOperators.ts";
|
|
17
16
|
export * from "./interfaces/PgQuery.ts";
|
|
18
17
|
export * from "./interfaces/PgQueryWhere.ts";
|
|
18
|
+
export * from "./primitives/$entity.ts";
|
|
19
19
|
export * from "./providers/PostgresTypeProvider.ts";
|
|
20
20
|
export * from "./schemas/legacyIdSchema.ts";
|
|
21
21
|
|
|
@@ -23,6 +23,6 @@ export * from "./schemas/legacyIdSchema.ts";
|
|
|
23
23
|
|
|
24
24
|
export const AlephaPostgres = $module({
|
|
25
25
|
name: "alepha.postgres",
|
|
26
|
-
|
|
26
|
+
primitives: [],
|
|
27
27
|
services: [AlephaDateTime],
|
|
28
28
|
});
|
package/src/orm/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { $module, type Alepha, t } from "alepha";
|
|
2
2
|
import { AlephaDateTime } from "alepha/datetime";
|
|
3
3
|
import * as drizzle from "drizzle-orm";
|
|
4
|
-
import { $entity } from "./
|
|
5
|
-
import { $repository } from "./
|
|
6
|
-
import { $sequence } from "./
|
|
4
|
+
import { $entity } from "./primitives/$entity.ts";
|
|
5
|
+
import { $repository } from "./primitives/$repository.ts";
|
|
6
|
+
import { $sequence } from "./primitives/$sequence.ts";
|
|
7
7
|
import { DrizzleKitProvider } from "./providers/DrizzleKitProvider.ts";
|
|
8
8
|
import { DatabaseProvider } from "./providers/drivers/DatabaseProvider.ts";
|
|
9
9
|
import { NodePostgresProvider } from "./providers/drivers/NodePostgresProvider.ts";
|
|
@@ -95,10 +95,6 @@ export {
|
|
|
95
95
|
export { sql } from "drizzle-orm";
|
|
96
96
|
export * from "drizzle-orm/pg-core";
|
|
97
97
|
export * from "./constants/PG_SYMBOLS.ts";
|
|
98
|
-
export * from "./descriptors/$entity.ts";
|
|
99
|
-
export * from "./descriptors/$repository.ts";
|
|
100
|
-
export * from "./descriptors/$sequence.ts";
|
|
101
|
-
export * from "./descriptors/$transaction.ts";
|
|
102
98
|
export * from "./errors/DbConflictError.ts";
|
|
103
99
|
export * from "./errors/DbEntityNotFoundError.ts";
|
|
104
100
|
export * from "./errors/DbError.ts";
|
|
@@ -109,6 +105,10 @@ export * from "./helpers/pgAttr.ts";
|
|
|
109
105
|
export * from "./interfaces/FilterOperators.ts";
|
|
110
106
|
export * from "./interfaces/PgQuery.ts";
|
|
111
107
|
export * from "./interfaces/PgQueryWhere.ts";
|
|
108
|
+
export * from "./primitives/$entity.ts";
|
|
109
|
+
export * from "./primitives/$repository.ts";
|
|
110
|
+
export * from "./primitives/$sequence.ts";
|
|
111
|
+
export * from "./primitives/$transaction.ts";
|
|
112
112
|
export * from "./providers/DrizzleKitProvider.ts";
|
|
113
113
|
export * from "./providers/drivers/DatabaseProvider.ts";
|
|
114
114
|
export * from "./providers/drivers/NodePostgresProvider.ts";
|
|
@@ -164,7 +164,7 @@ export * from "./types/schema.ts";
|
|
|
164
164
|
*/
|
|
165
165
|
export const AlephaPostgres = $module({
|
|
166
166
|
name: "alepha.postgres",
|
|
167
|
-
|
|
167
|
+
primitives: [$sequence, $entity],
|
|
168
168
|
services: [
|
|
169
169
|
AlephaDateTime,
|
|
170
170
|
DatabaseProvider,
|
|
@@ -9,7 +9,7 @@ import { insertSchema, type TObjectInsert } from "../schemas/insertSchema.ts";
|
|
|
9
9
|
import { type TObjectUpdate, updateSchema } from "../schemas/updateSchema.ts";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Creates a database entity
|
|
12
|
+
* Creates a database entity primitive that defines table structure using TypeBox schemas.
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
@@ -27,14 +27,14 @@ import { type TObjectUpdate, updateSchema } from "../schemas/updateSchema.ts";
|
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
29
|
export const $entity = <TSchema extends TObject>(
|
|
30
|
-
options:
|
|
31
|
-
):
|
|
32
|
-
return new
|
|
30
|
+
options: EntityPrimitiveOptions<TSchema>,
|
|
31
|
+
): EntityPrimitive<TSchema> => {
|
|
32
|
+
return new EntityPrimitive<TSchema>(options);
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
36
36
|
|
|
37
|
-
export interface
|
|
37
|
+
export interface EntityPrimitiveOptions<
|
|
38
38
|
T extends TObject,
|
|
39
39
|
Keys = keyof Static<T>,
|
|
40
40
|
> {
|
|
@@ -163,15 +163,15 @@ export interface EntityDescriptorOptions<
|
|
|
163
163
|
|
|
164
164
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
165
165
|
|
|
166
|
-
export class
|
|
167
|
-
public readonly options:
|
|
166
|
+
export class EntityPrimitive<T extends TObject = TObject> {
|
|
167
|
+
public readonly options: EntityPrimitiveOptions<T>;
|
|
168
168
|
|
|
169
|
-
constructor(options:
|
|
169
|
+
constructor(options: EntityPrimitiveOptions<T>) {
|
|
170
170
|
this.options = options;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
alias(alias: string): this {
|
|
174
|
-
const aliased = new
|
|
174
|
+
const aliased = new EntityPrimitive<T>(this.options);
|
|
175
175
|
return new Proxy(aliased, {
|
|
176
176
|
get(target, prop, receiver) {
|
|
177
177
|
if (prop === "$alias") {
|
|
@@ -213,7 +213,7 @@ export class EntityDescriptor<T extends TObject = TObject> {
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
$entity[KIND] =
|
|
216
|
+
$entity[KIND] = EntityPrimitive;
|
|
217
217
|
|
|
218
218
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
219
219
|
|
|
@@ -235,7 +235,7 @@ export type SchemaToTableConfig<T extends TObject> = {
|
|
|
235
235
|
|
|
236
236
|
export type EntityColumn<T extends TObject> = {
|
|
237
237
|
name: string;
|
|
238
|
-
entity:
|
|
238
|
+
entity: EntityPrimitive<T>;
|
|
239
239
|
};
|
|
240
240
|
|
|
241
241
|
export type EntityColumns<T extends TObject> = {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { $context, $inject, type TObject } from "alepha";
|
|
2
2
|
import { RepositoryProvider } from "../providers/RepositoryProvider.ts";
|
|
3
3
|
import type { Repository } from "../services/Repository.ts";
|
|
4
|
-
import type {
|
|
4
|
+
import type { EntityPrimitive } from "./$entity.ts";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Get the repository for the given entity.
|
|
8
8
|
*/
|
|
9
9
|
export const $repository = <T extends TObject>(
|
|
10
|
-
entity:
|
|
10
|
+
entity: EntityPrimitive<T>,
|
|
11
11
|
): Repository<T> => {
|
|
12
12
|
const { alepha } = $context();
|
|
13
13
|
const repositoryProvider = alepha.inject(RepositoryProvider);
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import { sql } from "drizzle-orm";
|
|
3
3
|
import type { PgSequenceOptions } from "drizzle-orm/pg-core";
|
|
4
4
|
import { DatabaseProvider } from "../providers/drivers/DatabaseProvider.ts";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Creates a PostgreSQL sequence
|
|
7
|
+
* Creates a PostgreSQL sequence primitive for generating unique numeric values.
|
|
8
8
|
*/
|
|
9
9
|
export const $sequence = (
|
|
10
|
-
options:
|
|
11
|
-
):
|
|
12
|
-
return
|
|
10
|
+
options: SequencePrimitiveOptions = {},
|
|
11
|
+
): SequencePrimitive => {
|
|
12
|
+
return createPrimitive(SequencePrimitive, options);
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
16
16
|
|
|
17
|
-
export interface
|
|
17
|
+
export interface SequencePrimitiveOptions extends PgSequenceOptions {
|
|
18
18
|
/**
|
|
19
19
|
* The name of the sequence. If not provided, the property key will be used.
|
|
20
20
|
*/
|
|
@@ -25,7 +25,7 @@ export interface SequenceDescriptorOptions extends PgSequenceOptions {
|
|
|
25
25
|
|
|
26
26
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
27
27
|
|
|
28
|
-
export class
|
|
28
|
+
export class SequencePrimitive extends Primitive<SequencePrimitiveOptions> {
|
|
29
29
|
public readonly provider = this.$provider();
|
|
30
30
|
|
|
31
31
|
public onInit() {
|
|
@@ -57,4 +57,4 @@ export class SequenceDescriptor extends Descriptor<SequenceDescriptorOptions> {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
$sequence[KIND] =
|
|
60
|
+
$sequence[KIND] = SequencePrimitive;
|