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.
Files changed (296) hide show
  1. package/README.md +1 -1
  2. package/dist/api-files/index.d.ts +28 -91
  3. package/dist/api-files/index.js +10 -755
  4. package/dist/api-files/index.js.map +1 -1
  5. package/dist/api-jobs/index.d.ts +46 -46
  6. package/dist/api-jobs/index.js +13 -13
  7. package/dist/api-jobs/index.js.map +1 -1
  8. package/dist/api-notifications/index.d.ts +129 -146
  9. package/dist/api-notifications/index.js +17 -39
  10. package/dist/api-notifications/index.js.map +1 -1
  11. package/dist/api-parameters/index.d.ts +21 -22
  12. package/dist/api-parameters/index.js +22 -22
  13. package/dist/api-parameters/index.js.map +1 -1
  14. package/dist/api-users/index.d.ts +223 -2000
  15. package/dist/api-users/index.js +914 -4787
  16. package/dist/api-users/index.js.map +1 -1
  17. package/dist/api-verifications/index.d.ts +96 -96
  18. package/dist/batch/index.d.ts +13 -13
  19. package/dist/batch/index.js +8 -8
  20. package/dist/batch/index.js.map +1 -1
  21. package/dist/bucket/index.d.ts +14 -14
  22. package/dist/bucket/index.js +12 -12
  23. package/dist/bucket/index.js.map +1 -1
  24. package/dist/cache/index.d.ts +11 -11
  25. package/dist/cache/index.js +9 -9
  26. package/dist/cache/index.js.map +1 -1
  27. package/dist/cli/index.d.ts +28 -26
  28. package/dist/cli/index.js +50 -13
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/command/index.d.ts +19 -19
  31. package/dist/command/index.js +25 -25
  32. package/dist/command/index.js.map +1 -1
  33. package/dist/core/index.browser.js +218 -218
  34. package/dist/core/index.browser.js.map +1 -1
  35. package/dist/core/index.d.ts +232 -232
  36. package/dist/core/index.js +218 -218
  37. package/dist/core/index.js.map +1 -1
  38. package/dist/core/index.native.js +2113 -0
  39. package/dist/core/index.native.js.map +1 -0
  40. package/dist/datetime/index.d.ts +9 -9
  41. package/dist/datetime/index.js +7 -7
  42. package/dist/datetime/index.js.map +1 -1
  43. package/dist/email/index.d.ts +16 -16
  44. package/dist/email/index.js +9 -9
  45. package/dist/email/index.js.map +1 -1
  46. package/dist/file/index.js +1 -1
  47. package/dist/file/index.js.map +1 -1
  48. package/dist/lock/index.d.ts +9 -9
  49. package/dist/lock/index.js +8 -8
  50. package/dist/lock/index.js.map +1 -1
  51. package/dist/lock-redis/index.js +3 -66
  52. package/dist/lock-redis/index.js.map +1 -1
  53. package/dist/logger/index.d.ts +5 -5
  54. package/dist/logger/index.js +8 -8
  55. package/dist/logger/index.js.map +1 -1
  56. package/dist/orm/index.browser.js +114 -114
  57. package/dist/orm/index.browser.js.map +1 -1
  58. package/dist/orm/index.d.ts +218 -218
  59. package/dist/orm/index.js +46 -46
  60. package/dist/orm/index.js.map +1 -1
  61. package/dist/queue/index.d.ts +29 -29
  62. package/dist/queue/index.js +20 -20
  63. package/dist/queue/index.js.map +1 -1
  64. package/dist/queue-redis/index.d.ts +2 -2
  65. package/dist/redis/index.d.ts +10 -10
  66. package/dist/retry/index.d.ts +19 -19
  67. package/dist/retry/index.js +7 -7
  68. package/dist/retry/index.js.map +1 -1
  69. package/dist/scheduler/index.d.ts +16 -16
  70. package/dist/scheduler/index.js +9 -9
  71. package/dist/scheduler/index.js.map +1 -1
  72. package/dist/security/index.d.ts +80 -80
  73. package/dist/security/index.js +32 -32
  74. package/dist/security/index.js.map +1 -1
  75. package/dist/server/index.browser.js +1 -1
  76. package/dist/server/index.browser.js.map +1 -1
  77. package/dist/server/index.d.ts +101 -101
  78. package/dist/server/index.js +16 -16
  79. package/dist/server/index.js.map +1 -1
  80. package/dist/server-auth/index.browser.js +4 -982
  81. package/dist/server-auth/index.browser.js.map +1 -1
  82. package/dist/server-auth/index.d.ts +204 -785
  83. package/dist/server-auth/index.js +47 -1239
  84. package/dist/server-auth/index.js.map +1 -1
  85. package/dist/server-cache/index.d.ts +10 -10
  86. package/dist/server-cache/index.js +2 -2
  87. package/dist/server-cache/index.js.map +1 -1
  88. package/dist/server-compress/index.d.ts +4 -4
  89. package/dist/server-compress/index.js +1 -1
  90. package/dist/server-compress/index.js.map +1 -1
  91. package/dist/server-cookies/index.browser.js +8 -8
  92. package/dist/server-cookies/index.browser.js.map +1 -1
  93. package/dist/server-cookies/index.d.ts +17 -17
  94. package/dist/server-cookies/index.js +10 -10
  95. package/dist/server-cookies/index.js.map +1 -1
  96. package/dist/server-cors/index.d.ts +17 -17
  97. package/dist/server-cors/index.js +9 -9
  98. package/dist/server-cors/index.js.map +1 -1
  99. package/dist/server-health/index.d.ts +19 -19
  100. package/dist/server-helmet/index.d.ts +1 -1
  101. package/dist/server-links/index.browser.js +12 -12
  102. package/dist/server-links/index.browser.js.map +1 -1
  103. package/dist/server-links/index.d.ts +59 -251
  104. package/dist/server-links/index.js +23 -502
  105. package/dist/server-links/index.js.map +1 -1
  106. package/dist/server-metrics/index.d.ts +4 -4
  107. package/dist/server-multipart/index.d.ts +2 -2
  108. package/dist/server-proxy/index.d.ts +12 -12
  109. package/dist/server-proxy/index.js +10 -10
  110. package/dist/server-proxy/index.js.map +1 -1
  111. package/dist/server-rate-limit/index.d.ts +22 -22
  112. package/dist/server-rate-limit/index.js +12 -12
  113. package/dist/server-rate-limit/index.js.map +1 -1
  114. package/dist/server-security/index.d.ts +22 -22
  115. package/dist/server-security/index.js +15 -15
  116. package/dist/server-security/index.js.map +1 -1
  117. package/dist/server-static/index.d.ts +14 -14
  118. package/dist/server-static/index.js +8 -8
  119. package/dist/server-static/index.js.map +1 -1
  120. package/dist/server-swagger/index.d.ts +25 -184
  121. package/dist/server-swagger/index.js +21 -724
  122. package/dist/server-swagger/index.js.map +1 -1
  123. package/dist/sms/index.d.ts +14 -14
  124. package/dist/sms/index.js +9 -9
  125. package/dist/sms/index.js.map +1 -1
  126. package/dist/thread/index.d.ts +11 -11
  127. package/dist/thread/index.js +17 -17
  128. package/dist/thread/index.js.map +1 -1
  129. package/dist/topic/index.d.ts +26 -26
  130. package/dist/topic/index.js +16 -16
  131. package/dist/topic/index.js.map +1 -1
  132. package/dist/topic-redis/index.d.ts +1 -1
  133. package/dist/vite/index.d.ts +3 -3
  134. package/dist/vite/index.js +8 -8
  135. package/dist/vite/index.js.map +1 -1
  136. package/dist/websocket/index.browser.js +11 -11
  137. package/dist/websocket/index.browser.js.map +1 -1
  138. package/dist/websocket/index.d.ts +58 -58
  139. package/dist/websocket/index.js +13 -13
  140. package/dist/websocket/index.js.map +1 -1
  141. package/package.json +113 -52
  142. package/src/api-files/services/FileService.ts +5 -7
  143. package/src/api-jobs/index.ts +1 -1
  144. package/src/api-jobs/{descriptors → primitives}/$job.ts +8 -8
  145. package/src/api-jobs/providers/JobProvider.ts +9 -9
  146. package/src/api-jobs/services/JobService.ts +5 -5
  147. package/src/api-notifications/index.ts +5 -15
  148. package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
  149. package/src/api-notifications/services/NotificationSenderService.ts +3 -3
  150. package/src/api-parameters/index.ts +1 -1
  151. package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
  152. package/src/api-users/index.ts +1 -1
  153. package/src/api-users/{descriptors → primitives}/$userRealm.ts +8 -8
  154. package/src/api-users/providers/UserRealmProvider.ts +1 -1
  155. package/src/batch/index.ts +3 -3
  156. package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
  157. package/src/bucket/index.ts +8 -8
  158. package/src/bucket/{descriptors → primitives}/$bucket.ts +8 -8
  159. package/src/bucket/providers/LocalFileStorageProvider.ts +3 -3
  160. package/src/cache/index.ts +4 -4
  161. package/src/cache/{descriptors → primitives}/$cache.ts +15 -15
  162. package/src/cli/apps/AlephaPackageBuilderCli.ts +24 -2
  163. package/src/cli/commands/DrizzleCommands.ts +6 -6
  164. package/src/cli/commands/VerifyCommands.ts +1 -1
  165. package/src/cli/commands/ViteCommands.ts +6 -1
  166. package/src/cli/services/ProjectUtils.ts +34 -3
  167. package/src/command/index.ts +5 -5
  168. package/src/command/{descriptors → primitives}/$command.ts +9 -12
  169. package/src/command/providers/CliProvider.ts +10 -10
  170. package/src/core/Alepha.ts +30 -33
  171. package/src/core/constants/KIND.ts +1 -1
  172. package/src/core/constants/OPTIONS.ts +1 -1
  173. package/src/core/helpers/{descriptor.ts → primitive.ts} +18 -18
  174. package/src/core/helpers/ref.ts +1 -1
  175. package/src/core/index.shared.ts +8 -8
  176. package/src/core/{descriptors → primitives}/$context.ts +5 -5
  177. package/src/core/{descriptors → primitives}/$hook.ts +4 -4
  178. package/src/core/{descriptors → primitives}/$inject.ts +2 -2
  179. package/src/core/{descriptors → primitives}/$module.ts +9 -9
  180. package/src/core/{descriptors → primitives}/$use.ts +2 -2
  181. package/src/core/providers/CodecManager.ts +1 -1
  182. package/src/core/providers/JsonSchemaCodec.ts +1 -1
  183. package/src/core/providers/StateManager.ts +2 -2
  184. package/src/datetime/index.ts +3 -3
  185. package/src/datetime/{descriptors → primitives}/$interval.ts +6 -6
  186. package/src/email/index.ts +4 -4
  187. package/src/email/{descriptors → primitives}/$email.ts +8 -8
  188. package/src/file/index.ts +1 -1
  189. package/src/lock/index.ts +3 -3
  190. package/src/lock/{descriptors → primitives}/$lock.ts +10 -10
  191. package/src/logger/index.ts +8 -8
  192. package/src/logger/{descriptors → primitives}/$logger.ts +2 -2
  193. package/src/logger/services/Logger.ts +1 -1
  194. package/src/orm/constants/PG_SYMBOLS.ts +2 -2
  195. package/src/orm/index.browser.ts +2 -2
  196. package/src/orm/index.ts +8 -8
  197. package/src/orm/{descriptors → primitives}/$entity.ts +11 -11
  198. package/src/orm/{descriptors → primitives}/$repository.ts +2 -2
  199. package/src/orm/{descriptors → primitives}/$sequence.ts +8 -8
  200. package/src/orm/{descriptors → primitives}/$transaction.ts +4 -4
  201. package/src/orm/providers/PostgresTypeProvider.ts +3 -3
  202. package/src/orm/providers/RepositoryProvider.ts +4 -4
  203. package/src/orm/providers/drivers/DatabaseProvider.ts +7 -7
  204. package/src/orm/services/ModelBuilder.ts +9 -9
  205. package/src/orm/services/PgRelationManager.ts +2 -2
  206. package/src/orm/services/PostgresModelBuilder.ts +5 -5
  207. package/src/orm/services/Repository.ts +7 -7
  208. package/src/orm/services/SqliteModelBuilder.ts +5 -5
  209. package/src/queue/index.ts +7 -7
  210. package/src/queue/{descriptors → primitives}/$consumer.ts +15 -15
  211. package/src/queue/{descriptors → primitives}/$queue.ts +12 -12
  212. package/src/queue/providers/WorkerProvider.ts +7 -7
  213. package/src/retry/index.ts +3 -3
  214. package/src/retry/{descriptors → primitives}/$retry.ts +14 -14
  215. package/src/scheduler/index.ts +3 -3
  216. package/src/scheduler/{descriptors → primitives}/$scheduler.ts +9 -9
  217. package/src/scheduler/providers/CronProvider.ts +1 -1
  218. package/src/security/index.ts +9 -9
  219. package/src/security/{descriptors → primitives}/$permission.ts +7 -7
  220. package/src/security/{descriptors → primitives}/$realm.ts +6 -12
  221. package/src/security/{descriptors → primitives}/$role.ts +12 -12
  222. package/src/security/{descriptors → primitives}/$serviceAccount.ts +8 -8
  223. package/src/server/index.browser.ts +1 -1
  224. package/src/server/index.ts +14 -14
  225. package/src/server/{descriptors → primitives}/$action.ts +13 -13
  226. package/src/server/{descriptors → primitives}/$route.ts +9 -9
  227. package/src/server/providers/NodeHttpServerProvider.ts +1 -1
  228. package/src/server/services/HttpClient.ts +1 -1
  229. package/src/server-auth/index.browser.ts +1 -1
  230. package/src/server-auth/index.ts +6 -6
  231. package/src/server-auth/{descriptors → primitives}/$auth.ts +10 -10
  232. package/src/server-auth/{descriptors → primitives}/$authCredentials.ts +4 -4
  233. package/src/server-auth/{descriptors → primitives}/$authGithub.ts +4 -4
  234. package/src/server-auth/{descriptors → primitives}/$authGoogle.ts +4 -4
  235. package/src/server-auth/providers/ServerAuthProvider.ts +4 -4
  236. package/src/server-cache/providers/ServerCacheProvider.ts +7 -7
  237. package/src/server-compress/providers/ServerCompressProvider.ts +3 -3
  238. package/src/server-cookies/index.browser.ts +2 -2
  239. package/src/server-cookies/index.ts +5 -5
  240. package/src/server-cookies/{descriptors → primitives}/$cookie.browser.ts +12 -12
  241. package/src/server-cookies/{descriptors → primitives}/$cookie.ts +13 -13
  242. package/src/server-cookies/providers/ServerCookiesProvider.ts +4 -4
  243. package/src/server-cookies/services/CookieParser.ts +1 -1
  244. package/src/server-cors/index.ts +3 -3
  245. package/src/server-cors/{descriptors → primitives}/$cors.ts +11 -13
  246. package/src/server-cors/providers/ServerCorsProvider.ts +5 -5
  247. package/src/server-links/index.browser.ts +5 -5
  248. package/src/server-links/index.ts +9 -9
  249. package/src/server-links/{descriptors → primitives}/$remote.ts +11 -11
  250. package/src/server-links/providers/LinkProvider.ts +7 -7
  251. package/src/server-links/providers/{RemoteDescriptorProvider.ts → RemotePrimitiveProvider.ts} +6 -6
  252. package/src/server-links/providers/ServerLinksProvider.ts +3 -3
  253. package/src/server-proxy/index.ts +3 -3
  254. package/src/server-proxy/{descriptors → primitives}/$proxy.ts +8 -8
  255. package/src/server-proxy/providers/ServerProxyProvider.ts +4 -4
  256. package/src/server-rate-limit/index.ts +6 -6
  257. package/src/server-rate-limit/{descriptors → primitives}/$rateLimit.ts +13 -13
  258. package/src/server-rate-limit/providers/ServerRateLimitProvider.ts +5 -5
  259. package/src/server-security/index.ts +3 -3
  260. package/src/server-security/{descriptors → primitives}/$basicAuth.ts +13 -13
  261. package/src/server-security/providers/ServerBasicAuthProvider.ts +5 -5
  262. package/src/server-security/providers/ServerSecurityProvider.ts +4 -4
  263. package/src/server-static/index.ts +3 -3
  264. package/src/server-static/{descriptors → primitives}/$serve.ts +8 -10
  265. package/src/server-static/providers/ServerStaticProvider.ts +6 -6
  266. package/src/server-swagger/index.ts +5 -5
  267. package/src/server-swagger/{descriptors → primitives}/$swagger.ts +9 -9
  268. package/src/server-swagger/providers/ServerSwaggerProvider.ts +11 -10
  269. package/src/sms/index.ts +4 -4
  270. package/src/sms/{descriptors → primitives}/$sms.ts +8 -8
  271. package/src/thread/index.ts +3 -3
  272. package/src/thread/{descriptors → primitives}/$thread.ts +13 -13
  273. package/src/thread/providers/ThreadProvider.ts +7 -9
  274. package/src/topic/index.ts +5 -5
  275. package/src/topic/{descriptors → primitives}/$subscriber.ts +14 -14
  276. package/src/topic/{descriptors → primitives}/$topic.ts +10 -10
  277. package/src/topic/providers/TopicProvider.ts +4 -4
  278. package/src/vite/tasks/copyAssets.ts +1 -1
  279. package/src/vite/tasks/generateSitemap.ts +3 -3
  280. package/src/vite/tasks/prerenderPages.ts +2 -2
  281. package/src/vite/tasks/runAlepha.ts +2 -2
  282. package/src/websocket/index.browser.ts +3 -3
  283. package/src/websocket/index.shared.ts +2 -2
  284. package/src/websocket/index.ts +4 -4
  285. package/src/websocket/interfaces/WebSocketInterfaces.ts +3 -3
  286. package/src/websocket/{descriptors → primitives}/$channel.ts +10 -10
  287. package/src/websocket/{descriptors → primitives}/$websocket.ts +8 -8
  288. package/src/websocket/providers/NodeWebSocketServerProvider.ts +7 -7
  289. package/src/websocket/providers/WebSocketServerProvider.ts +3 -3
  290. package/src/websocket/services/WebSocketClient.ts +5 -5
  291. package/src/api-notifications/providers/MemorySmsProvider.ts +0 -20
  292. package/src/api-notifications/providers/SmsProvider.ts +0 -8
  293. /package/src/core/{descriptors → primitives}/$atom.ts +0 -0
  294. /package/src/core/{descriptors → primitives}/$env.ts +0 -0
  295. /package/src/server-auth/{descriptors → primitives}/$authApple.ts +0 -0
  296. /package/src/server-links/{descriptors → primitives}/$client.ts +0 -0
@@ -3,12 +3,12 @@ import { DateTimeProvider } from "alepha/datetime";
3
3
  import { EmailProvider } from "alepha/email";
4
4
  import { $logger } from "alepha/logger";
5
5
  import { $repository } from "alepha/orm";
6
- import { $notification } from "../descriptors/$notification.ts";
6
+ import { SmsProvider } from "alepha/sms";
7
7
  import {
8
8
  type NotificationEntity,
9
9
  notifications,
10
10
  } from "../entities/notifications.ts";
11
- import { SmsProvider } from "../providers/SmsProvider.ts";
11
+ import { $notification } from "../primitives/$notification.ts";
12
12
 
13
13
  export class NotificationSenderService {
14
14
  protected readonly alepha = $inject(Alepha);
@@ -161,7 +161,7 @@ export class NotificationSenderService {
161
161
  const variables = notification.variables || {};
162
162
  const contact = notification.contact;
163
163
  const template = this.alepha
164
- .descriptors($notification)
164
+ .primitives($notification)
165
165
  .find((it) => it.name === notification.template);
166
166
 
167
167
  if (!template) {
@@ -2,8 +2,8 @@ import { $module } from "alepha";
2
2
 
3
3
  // ---------------------------------------------------------------------------------------------------------------------
4
4
 
5
- export * from "./descriptors/$config.ts";
6
5
  export * from "./entities/parameters.ts";
6
+ export * from "./primitives/$config.ts";
7
7
 
8
8
  // ---------------------------------------------------------------------------------------------------------------------
9
9
 
@@ -1,13 +1,8 @@
1
- import {
2
- createDescriptor,
3
- Descriptor,
4
- type Static,
5
- type TObject,
6
- } from "alepha";
1
+ import { createPrimitive, Primitive, type Static, type TObject } from "alepha";
7
2
  import type { UserAccount } from "alepha/security";
8
3
 
9
4
  /**
10
- * Creates a configuration parameter descriptor for managing application settings.
5
+ * Creates a configuration parameter primitive for managing application settings.
11
6
  *
12
7
  * Provides type-safe, versioned configuration with schema validation, default values,
13
8
  * and scheduled activation. Useful for feature flags, system parameters, and runtime settings.
@@ -33,15 +28,15 @@ import type { UserAccount } from "alepha/security";
33
28
  * }
34
29
  * ```
35
30
  */
36
- export interface ConfigDescriptorOptions<T extends TObject> {
31
+ export interface ConfigPrimitiveOptions<T extends TObject> {
37
32
  name?: string;
38
33
  description?: string;
39
34
  schema: T;
40
35
  default: Static<T>;
41
36
  }
42
37
 
43
- export class ConfigDescriptor<T extends TObject> extends Descriptor<
44
- ConfigDescriptorOptions<T>
38
+ export class ConfigPrimitive<T extends TObject> extends Primitive<
39
+ ConfigPrimitiveOptions<T>
45
40
  > {
46
41
  public get name() {
47
42
  return this.options.name || this.config.propertyKey;
@@ -78,7 +73,7 @@ export class ConfigDescriptor<T extends TObject> extends Descriptor<
78
73
  }
79
74
 
80
75
  export const $config = <T extends TObject>(
81
- options: ConfigDescriptorOptions<T>,
76
+ options: ConfigPrimitiveOptions<T>,
82
77
  ) => {
83
- return createDescriptor(ConfigDescriptor<T>, options);
78
+ return createPrimitive(ConfigPrimitive<T>, options);
84
79
  };
@@ -21,10 +21,10 @@ export * from "./controllers/IdentityController.ts";
21
21
  export * from "./controllers/SessionController.ts";
22
22
  export * from "./controllers/UserController.ts";
23
23
  export * from "./controllers/UserRealmController.ts";
24
- export * from "./descriptors/$userRealm.ts";
25
24
  export * from "./entities/identities.ts";
26
25
  export * from "./entities/sessions.ts";
27
26
  export * from "./entities/users.ts";
27
+ export * from "./primitives/$userRealm.ts";
28
28
  export * from "./providers/UserRealmProvider.ts";
29
29
  export * from "./schemas/completePasswordResetRequestSchema.ts";
30
30
  export * from "./schemas/completeRegistrationRequestSchema.ts";
@@ -2,15 +2,15 @@ import { $context } from "alepha";
2
2
  import type { Repository } from "alepha/orm";
3
3
  import {
4
4
  $realm,
5
- type RealmDescriptor,
6
- type RealmDescriptorOptions,
5
+ type RealmPrimitive,
6
+ type RealmPrimitiveOptions,
7
7
  SecurityProvider,
8
8
  } from "alepha/security";
9
9
  import {
10
10
  $authCredentials,
11
11
  $authGithub,
12
12
  $authGoogle,
13
- type AuthDescriptor,
13
+ type AuthPrimitive,
14
14
  type Credentials,
15
15
  type LinkAccountOptions,
16
16
  type WithLinkFn,
@@ -23,7 +23,7 @@ import { DEFAULT_USER_REALM_NAME, type users } from "../entities/users.ts";
23
23
  import { UserRealmProvider } from "../providers/UserRealmProvider.ts";
24
24
  import { SessionService } from "../services/SessionService.ts";
25
25
 
26
- export type UserRealmDescriptor = RealmDescriptor & WithLinkFn & WithLoginFn;
26
+ export type UserRealmPrimitive = RealmPrimitive & WithLinkFn & WithLoginFn;
27
27
 
28
28
  /**
29
29
  * Already configured realm for user management.
@@ -41,7 +41,7 @@ export type UserRealmDescriptor = RealmDescriptor & WithLinkFn & WithLoginFn;
41
41
 
42
42
  export const $userRealm = (
43
43
  options: UserRealmOptions = {},
44
- ): UserRealmDescriptor => {
44
+ ): UserRealmPrimitive => {
45
45
  const { alepha } = $context();
46
46
  const sessionService = alepha.inject(SessionService);
47
47
  const securityProvider = alepha.inject(SecurityProvider);
@@ -50,7 +50,7 @@ export const $userRealm = (
50
50
 
51
51
  userRealmProvider.register(name, options);
52
52
 
53
- const realm: UserRealmDescriptor = $realm({
53
+ const realm: UserRealmPrimitive = $realm({
54
54
  ...options.realm,
55
55
  name,
56
56
  secret: options.secret ?? securityProvider.secretKey,
@@ -104,7 +104,7 @@ export const $userRealm = (
104
104
  };
105
105
 
106
106
  if (options.identities) {
107
- const identities: Record<string, AuthDescriptor> = {};
107
+ const identities: Record<string, AuthPrimitive> = {};
108
108
  if (options.identities?.credentials) {
109
109
  identities.credentials = $authCredentials(realm);
110
110
  }
@@ -135,7 +135,7 @@ export interface UserRealmOptions {
135
135
  *
136
136
  * It's already pre-configured for user management with admin and user roles.
137
137
  */
138
- realm?: Partial<RealmDescriptorOptions>;
138
+ realm?: Partial<RealmPrimitiveOptions>;
139
139
 
140
140
  /**
141
141
  * Override entities.
@@ -40,7 +40,7 @@ export class UserRealmProvider {
40
40
  protected readonly onConfigure = $hook({
41
41
  on: "configure",
42
42
  handler: () => {
43
- this.alepha.state.set("alepha.server.security.system.user", {
43
+ this.alepha.store.set("alepha.server.security.system.user", {
44
44
  id: "00000000-0000-0000-0000-000000000000",
45
45
  name: "system",
46
46
  roles: ["admin"], // TODO: use realm config
@@ -1,10 +1,10 @@
1
1
  import { $module } from "alepha";
2
- import { $batch } from "./descriptors/$batch.ts";
2
+ import { $batch } from "./primitives/$batch.ts";
3
3
  import { BatchProvider } from "./providers/BatchProvider.ts";
4
4
 
5
5
  // ---------------------------------------------------------------------------------------------------------------------
6
6
 
7
- export * from "./descriptors/$batch.ts";
7
+ export * from "./primitives/$batch.ts";
8
8
  export * from "./providers/BatchProvider.ts";
9
9
 
10
10
  // ---------------------------------------------------------------------------------------------------------------------
@@ -53,6 +53,6 @@ export * from "./providers/BatchProvider.ts";
53
53
  */
54
54
  export const AlephaBatch = $module({
55
55
  name: "alepha.batch",
56
- descriptors: [$batch],
56
+ primitives: [$batch],
57
57
  services: [BatchProvider],
58
58
  });
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  $hook,
3
3
  $inject,
4
- createDescriptor,
5
- Descriptor,
4
+ createPrimitive,
6
5
  KIND,
6
+ Primitive,
7
7
  type Static,
8
8
  type TSchema,
9
9
  } from "alepha";
10
10
  import type { DurationLike } from "alepha/datetime";
11
- import type { RetryDescriptorOptions } from "alepha/retry";
11
+ import type { RetryPrimitiveOptions } from "alepha/retry";
12
12
  import {
13
13
  type BatchContext,
14
14
  type BatchItemState,
@@ -17,19 +17,16 @@ import {
17
17
  } from "../providers/BatchProvider.ts";
18
18
 
19
19
  /**
20
- * Creates a batch processing descriptor for efficient grouping and processing of multiple operations.
20
+ * Creates a batch processing primitive for efficient grouping and processing of multiple operations.
21
21
  */
22
22
  export const $batch = <TItem extends TSchema, TResponse>(
23
- options: BatchDescriptorOptions<TItem, TResponse>,
24
- ): BatchDescriptor<TItem, TResponse> =>
25
- createDescriptor(BatchDescriptor<TItem, TResponse>, options);
23
+ options: BatchPrimitiveOptions<TItem, TResponse>,
24
+ ): BatchPrimitive<TItem, TResponse> =>
25
+ createPrimitive(BatchPrimitive<TItem, TResponse>, options);
26
26
 
27
27
  // ---------------------------------------------------------------------------------------------------------------------
28
28
 
29
- export interface BatchDescriptorOptions<
30
- TItem extends TSchema,
31
- TResponse = any,
32
- > {
29
+ export interface BatchPrimitiveOptions<TItem extends TSchema, TResponse = any> {
33
30
  /**
34
31
  * TypeBox schema for validating each item added to the batch.
35
32
  */
@@ -69,7 +66,7 @@ export interface BatchDescriptorOptions<
69
66
  /**
70
67
  * Retry configuration for failed batch processing operations.
71
68
  */
72
- retry?: Omit<RetryDescriptorOptions<() => Array<Static<TItem>>>, "handler">;
69
+ retry?: Omit<RetryPrimitiveOptions<() => Array<Static<TItem>>>, "handler">;
73
70
  }
74
71
 
75
72
  // ---------------------------------------------------------------------------------------------------------------------
@@ -78,16 +75,16 @@ export type { BatchItemState, BatchItemStatus };
78
75
 
79
76
  // ---------------------------------------------------------------------------------------------------------------------
80
77
 
81
- export class BatchDescriptor<
78
+ export class BatchPrimitive<
82
79
  TItem extends TSchema,
83
80
  TResponse = any,
84
- > extends Descriptor<BatchDescriptorOptions<TItem, TResponse>> {
81
+ > extends Primitive<BatchPrimitiveOptions<TItem, TResponse>> {
85
82
  protected readonly batchProvider = $inject(BatchProvider);
86
83
  protected readonly context: BatchContext<Static<TItem>, TResponse>;
87
84
 
88
85
  constructor(
89
86
  ...args: ConstructorParameters<
90
- typeof Descriptor<BatchDescriptorOptions<TItem, TResponse>>
87
+ typeof Primitive<BatchPrimitiveOptions<TItem, TResponse>>
91
88
  >
92
89
  ) {
93
90
  super(...args);
@@ -172,4 +169,4 @@ export class BatchDescriptor<
172
169
  });
173
170
  }
174
171
 
175
- $batch[KIND] = BatchDescriptor;
172
+ $batch[KIND] = BatchPrimitive;
@@ -1,17 +1,17 @@
1
1
  import { $module, type FileLike } from "alepha";
2
2
  import {
3
3
  $bucket,
4
- type BucketDescriptor,
5
4
  type BucketFileOptions,
6
- } from "./descriptors/$bucket.ts";
5
+ type BucketPrimitive,
6
+ } from "./primitives/$bucket.ts";
7
7
  import { FileStorageProvider } from "./providers/FileStorageProvider.ts";
8
8
  import { LocalFileStorageProvider } from "./providers/LocalFileStorageProvider.ts";
9
9
  import { MemoryFileStorageProvider } from "./providers/MemoryFileStorageProvider.ts";
10
10
 
11
11
  // ---------------------------------------------------------------------------------------------------------------------
12
12
 
13
- export * from "./descriptors/$bucket.ts";
14
13
  export * from "./errors/FileNotFoundError.ts";
14
+ export * from "./primitives/$bucket.ts";
15
15
  export * from "./providers/FileStorageProvider.ts";
16
16
  export * from "./providers/LocalFileStorageProvider.ts";
17
17
  export * from "./providers/MemoryFileStorageProvider.ts";
@@ -27,7 +27,7 @@ declare module "alepha" {
27
27
  "bucket:file:uploaded": {
28
28
  id: string;
29
29
  file: FileLike;
30
- bucket: BucketDescriptor;
30
+ bucket: BucketPrimitive;
31
31
  options: BucketFileOptions;
32
32
  };
33
33
  /**
@@ -35,7 +35,7 @@ declare module "alepha" {
35
35
  */
36
36
  "bucket:file:deleted": {
37
37
  id: string;
38
- bucket: BucketDescriptor;
38
+ bucket: BucketPrimitive;
39
39
  };
40
40
  }
41
41
  }
@@ -43,9 +43,9 @@ declare module "alepha" {
43
43
  // ---------------------------------------------------------------------------------------------------------------------
44
44
 
45
45
  /**
46
- * Provides file storage capabilities through declarative bucket descriptors with support for multiple storage backends.
46
+ * Provides file storage capabilities through declarative bucket primitives with support for multiple storage backends.
47
47
  *
48
- * The bucket module enables unified file operations across different storage systems using the `$bucket` descriptor
48
+ * The bucket module enables unified file operations across different storage systems using the `$bucket` primitive
49
49
  * on class properties. It abstracts storage provider differences, offering consistent APIs for local filesystem,
50
50
  * cloud storage, or in-memory storage for testing environments.
51
51
  *
@@ -55,7 +55,7 @@ declare module "alepha" {
55
55
  */
56
56
  export const AlephaBucket = $module({
57
57
  name: "alepha.bucket",
58
- descriptors: [$bucket],
58
+ primitives: [$bucket],
59
59
  services: [
60
60
  FileStorageProvider,
61
61
  MemoryFileStorageProvider,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  $inject,
3
- createDescriptor,
4
- Descriptor,
3
+ createPrimitive,
5
4
  type FileLike,
6
5
  KIND,
6
+ Primitive,
7
7
  type Service,
8
8
  } from "alepha";
9
9
  import { FileSystemProvider } from "alepha/file";
@@ -12,7 +12,7 @@ import { FileStorageProvider } from "../providers/FileStorageProvider.ts";
12
12
  import { MemoryFileStorageProvider } from "../providers/MemoryFileStorageProvider.ts";
13
13
 
14
14
  /**
15
- * Creates a bucket descriptor for file storage and management with configurable validation.
15
+ * Creates a bucket primitive for file storage and management with configurable validation.
16
16
  *
17
17
  * Provides a comprehensive file storage system that handles uploads, downloads, validation,
18
18
  * and management across multiple storage backends with MIME type and size limit controls.
@@ -60,10 +60,10 @@ import { MemoryFileStorageProvider } from "../providers/MemoryFileStorageProvide
60
60
  * }
61
61
  * ```
62
62
  */
63
- export const $bucket = (options: BucketDescriptorOptions) =>
64
- createDescriptor(BucketDescriptor, options);
63
+ export const $bucket = (options: BucketPrimitiveOptions) =>
64
+ createPrimitive(BucketPrimitive, options);
65
65
 
66
- export interface BucketDescriptorOptions extends BucketFileOptions {
66
+ export interface BucketPrimitiveOptions extends BucketFileOptions {
67
67
  /**
68
68
  * File storage provider configuration for the bucket.
69
69
  *
@@ -204,7 +204,7 @@ export interface BucketFileOptions {
204
204
 
205
205
  // ---------------------------------------------------------------------------------------------------------------------
206
206
 
207
- export class BucketDescriptor extends Descriptor<BucketDescriptorOptions> {
207
+ export class BucketPrimitive extends Primitive<BucketPrimitiveOptions> {
208
208
  public readonly provider = this.$provider();
209
209
  private readonly fileSystem = $inject(FileSystemProvider);
210
210
 
@@ -302,7 +302,7 @@ export class BucketDescriptor extends Descriptor<BucketDescriptorOptions> {
302
302
  }
303
303
  }
304
304
 
305
- $bucket[KIND] = BucketDescriptor;
305
+ $bucket[KIND] = BucketPrimitive;
306
306
 
307
307
  // ---------------------------------------------------------------------------------------------------------------------
308
308
 
@@ -17,8 +17,8 @@ import {
17
17
  } from "alepha";
18
18
  import { FileDetector, FileSystemProvider } from "alepha/file";
19
19
  import { $logger } from "alepha/logger";
20
- import { $bucket } from "../descriptors/$bucket.ts";
21
20
  import { FileNotFoundError } from "../errors/FileNotFoundError.ts";
21
+ import { $bucket } from "../primitives/$bucket.ts";
22
22
  import type { FileStorageProvider } from "./FileStorageProvider.ts";
23
23
 
24
24
  // ---------------------------------------------------------------------------------------------------------------------
@@ -68,7 +68,7 @@ export class LocalFileStorageProvider implements FileStorageProvider {
68
68
  this.alepha.isTest() &&
69
69
  this.storagePath === localFileStorageOptions.options.default.storagePath
70
70
  ) {
71
- this.alepha.state.set(localFileStorageOptions, {
71
+ this.alepha.store.set(localFileStorageOptions, {
72
72
  storagePath: join(tmpdir(), `alepha-test-${Date.now()}`),
73
73
  });
74
74
  }
@@ -82,7 +82,7 @@ export class LocalFileStorageProvider implements FileStorageProvider {
82
82
  await mkdir(this.storagePath, { recursive: true });
83
83
  } catch {}
84
84
 
85
- for (const bucket of this.alepha.descriptors($bucket)) {
85
+ for (const bucket of this.alepha.primitives($bucket)) {
86
86
  if (bucket.provider !== this) {
87
87
  continue;
88
88
  }
@@ -1,11 +1,11 @@
1
1
  import { $module } from "alepha";
2
- import { $cache } from "./descriptors/$cache.ts";
2
+ import { $cache } from "./primitives/$cache.ts";
3
3
  import { CacheProvider } from "./providers/CacheProvider.ts";
4
4
  import { MemoryCacheProvider } from "./providers/MemoryCacheProvider.ts";
5
5
 
6
6
  // ---------------------------------------------------------------------------------------------------------------------
7
7
 
8
- export * from "./descriptors/$cache.ts";
8
+ export * from "./primitives/$cache.ts";
9
9
  export * from "./providers/CacheProvider.ts";
10
10
  export * from "./providers/MemoryCacheProvider.ts";
11
11
 
@@ -14,7 +14,7 @@ export * from "./providers/MemoryCacheProvider.ts";
14
14
  /**
15
15
  * Provides high-performance caching capabilities for Alepha applications with configurable TTL and multiple storage backends.
16
16
  *
17
- * The cache module enables declarative caching through the `$cache` descriptor, allowing you to cache method results,
17
+ * The cache module enables declarative caching through the `$cache` primitive, allowing you to cache method results,
18
18
  * API responses, or computed values with automatic invalidation and type safety. It supports both in-memory and
19
19
  * persistent storage backends for different performance and durability requirements.
20
20
  *
@@ -24,7 +24,7 @@ export * from "./providers/MemoryCacheProvider.ts";
24
24
  */
25
25
  export const AlephaCache = $module({
26
26
  name: "alepha.cache",
27
- descriptors: [$cache],
27
+ primitives: [$cache],
28
28
  services: [CacheProvider, MemoryCacheProvider],
29
29
  register: (alepha) =>
30
30
  alepha.with({
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  $env,
3
3
  $inject,
4
- createDescriptor,
5
- Descriptor,
4
+ createPrimitive,
6
5
  type InstantiableClass,
7
6
  KIND,
7
+ Primitive,
8
8
  t,
9
9
  } from "alepha";
10
10
  import { DateTimeProvider, type DurationLike } from "alepha/datetime";
@@ -13,7 +13,7 @@ import { CacheProvider } from "../providers/CacheProvider.ts";
13
13
  import { MemoryCacheProvider } from "../providers/MemoryCacheProvider.ts";
14
14
 
15
15
  /**
16
- * Creates a cache descriptor for high-performance data caching with automatic management.
16
+ * Creates a cache primitive for high-performance data caching with automatic management.
17
17
  *
18
18
  * Provides a caching layer that improves application performance by storing frequently accessed
19
19
  * data in memory or external stores like Redis, with support for both function result caching
@@ -61,14 +61,14 @@ import { MemoryCacheProvider } from "../providers/MemoryCacheProvider.ts";
61
61
  * ```
62
62
  */
63
63
  export const $cache = <TReturn = string, TParameter extends any[] = any[]>(
64
- options: CacheDescriptorOptions<TReturn, TParameter> = {},
65
- ): CacheDescriptorFn<TReturn, TParameter> => {
66
- const instance = createDescriptor(
67
- CacheDescriptor<TReturn, TParameter>,
64
+ options: CachePrimitiveOptions<TReturn, TParameter> = {},
65
+ ): CachePrimitiveFn<TReturn, TParameter> => {
66
+ const instance = createPrimitive(
67
+ CachePrimitive<TReturn, TParameter>,
68
68
  options,
69
69
  );
70
70
  const fn = (...args: TParameter): Promise<TReturn> => instance.run(...args);
71
- return Object.setPrototypeOf(fn, instance) as CacheDescriptorFn<
71
+ return Object.setPrototypeOf(fn, instance) as CachePrimitiveFn<
72
72
  TReturn,
73
73
  TParameter
74
74
  >;
@@ -76,7 +76,7 @@ export const $cache = <TReturn = string, TParameter extends any[] = any[]>(
76
76
 
77
77
  // ---------------------------------------------------------------------------------------------------------------------
78
78
 
79
- export interface CacheDescriptorOptions<
79
+ export interface CachePrimitiveOptions<
80
80
  TReturn = any,
81
81
  TParameter extends any[] = any[],
82
82
  > {
@@ -130,10 +130,10 @@ const envSchema = t.object({
130
130
  }),
131
131
  });
132
132
 
133
- export class CacheDescriptor<
133
+ export class CachePrimitive<
134
134
  TReturn = any,
135
135
  TParameter extends any[] = any[],
136
- > extends Descriptor<CacheDescriptorOptions<TReturn, TParameter>> {
136
+ > extends Primitive<CachePrimitiveOptions<TReturn, TParameter>> {
137
137
  protected readonly env = $env(envSchema);
138
138
  protected readonly dateTimeProvider = $inject(DateTimeProvider);
139
139
  protected readonly provider = this.$provider();
@@ -277,14 +277,14 @@ export class CacheDescriptor<
277
277
  }
278
278
  }
279
279
 
280
- export interface CacheDescriptorFn<
280
+ export interface CachePrimitiveFn<
281
281
  TReturn = any,
282
282
  TParameter extends any[] = any[],
283
- > extends CacheDescriptor<TReturn, TParameter> {
283
+ > extends CachePrimitive<TReturn, TParameter> {
284
284
  /**
285
- * Run the cache descriptor with the provided arguments.
285
+ * Run the cache primitive with the provided arguments.
286
286
  */
287
287
  (...args: TParameter): Promise<TReturn>;
288
288
  }
289
289
 
290
- $cache[KIND] = CacheDescriptor;
290
+ $cache[KIND] = CachePrimitive;
@@ -9,6 +9,7 @@ import type { InlineConfig } from "tsdown";
9
9
  interface Module {
10
10
  name: string;
11
11
  dependencies: string[];
12
+ native?: boolean;
12
13
  browser?: boolean;
13
14
  node?: boolean;
14
15
  }
@@ -41,11 +42,17 @@ export class AlephaPackageBuilderCli {
41
42
  pkgData.exports[path] = {};
42
43
  // order is important here for compatibility
43
44
  pkgData.exports[path].types = `./src/${item.name}/index.ts`;
45
+ if (item.native) {
46
+ pkgData.exports[path]["react-native"] =
47
+ `./src/${item.name}/index.native.ts`;
48
+ } else if (item.browser) {
49
+ pkgData.exports[path]["react-native"] =
50
+ `./src/${item.name}/index.browser.ts`;
51
+ }
44
52
  if (item.browser) {
45
53
  pkgData.exports[path].browser = `./src/${item.name}/index.browser.ts`;
46
54
  }
47
55
  pkgData.exports[path].import = `./src/${item.name}/index.ts`;
48
- pkgData.exports[path].require = `./src/${item.name}/index.ts`;
49
56
  }
50
57
 
51
58
  if (packageName === "alepha") {
@@ -70,7 +77,9 @@ export class AlephaPackageBuilderCli {
70
77
  const external = [
71
78
  "alepha",
72
79
  packageName,
73
- ...modules.map((item) => `${packageName}/${item.name}`),
80
+ ...modules.map(
81
+ (item) => `${packageName}/${item.name.replace("-", "/")}`,
82
+ ),
74
83
  ];
75
84
 
76
85
  await run.rm(this.dist);
@@ -90,6 +99,17 @@ export class AlephaPackageBuilderCli {
90
99
  external,
91
100
  });
92
101
 
102
+ if (item.native) {
103
+ entries.push({
104
+ entry: join(src, "index.native.ts"),
105
+ outDir: dest,
106
+ platform: "neutral",
107
+ sourcemap: true,
108
+ dts: false,
109
+ external,
110
+ });
111
+ }
112
+
93
113
  if (item.browser) {
94
114
  entries.push({
95
115
  entry: join(src, "index.browser.ts"),
@@ -244,6 +264,7 @@ export async function analyzeModules(
244
264
 
245
265
  // Check for browser/node entry points
246
266
  const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
267
+ const hasNative = await fileExists(join(modulePath, "index.native.ts"));
247
268
  const hasNode = await fileExists(join(modulePath, "index.node.ts"));
248
269
 
249
270
  // Get all .ts/.tsx files in this module
@@ -276,6 +297,7 @@ export async function analyzeModules(
276
297
  dependencies: Array.from(dependencies),
277
298
  };
278
299
 
300
+ if (hasNative) module.native = true;
279
301
  if (hasBrowser) module.browser = true;
280
302
  if (hasNode) module.node = true;
281
303
 
@@ -49,8 +49,8 @@ export class DrizzleCommands {
49
49
  alepha.inject<DrizzleKitProvider>("DrizzleKitProvider");
50
50
  const accepted = new Set<string>([]);
51
51
 
52
- for (const descriptor of repositoryProvider.getRepositories()) {
53
- const provider = descriptor.provider;
52
+ for (const primitive of repositoryProvider.getRepositories()) {
53
+ const provider = primitive.provider;
54
54
  const providerName = provider.name;
55
55
  if (accepted.has(providerName)) {
56
56
  continue;
@@ -124,7 +124,7 @@ export class DrizzleCommands {
124
124
  * Generate database migration files
125
125
  *
126
126
  * - Loads the Alepha instance from the specified entry file.
127
- * - Retrieves all repository descriptors to gather database models.
127
+ * - Retrieves all repository primitives to gather database models.
128
128
  * - Creates temporary entity definitions based on the current database schema.
129
129
  * - Writes these definitions to a temporary schema file. (node_modules/.db/entities.ts)
130
130
  * - Invokes Drizzle Kit's CLI to generate migration files based on the current schema.
@@ -167,7 +167,7 @@ export class DrizzleCommands {
167
167
  * Push database schema changes directly to the database
168
168
  *
169
169
  * - Loads the Alepha instance from the specified entry file.
170
- * - Retrieves all repository descriptors to gather database models.
170
+ * - Retrieves all repository primitives to gather database models.
171
171
  * - Creates temporary entity definitions and Drizzle config.
172
172
  * - Invokes Drizzle Kit's push command to apply schema changes directly.
173
173
  */
@@ -198,7 +198,7 @@ export class DrizzleCommands {
198
198
  * Apply pending database migrations
199
199
  *
200
200
  * - Loads the Alepha instance from the specified entry file.
201
- * - Retrieves all repository descriptors to gather database models.
201
+ * - Retrieves all repository primitives to gather database models.
202
202
  * - Creates temporary entity definitions and Drizzle config.
203
203
  * - Invokes Drizzle Kit's migrate command to apply pending migrations.
204
204
  */
@@ -229,7 +229,7 @@ export class DrizzleCommands {
229
229
  * Launch Drizzle Studio database browser
230
230
  *
231
231
  * - Loads the Alepha instance from the specified entry file.
232
- * - Retrieves all repository descriptors to gather database models.
232
+ * - Retrieves all repository primitives to gather database models.
233
233
  * - Creates temporary entity definitions and Drizzle config.
234
234
  * - Invokes Drizzle Kit's studio command to launch the web-based database browser.
235
235
  */
@@ -35,7 +35,7 @@ export class VerifyCommands {
35
35
  await run("alepha test");
36
36
  }
37
37
 
38
- if (await this.utils.hasDir(root, "migrations")) {
38
+ if (await this.utils.exists(root, "migrations")) {
39
39
  await run("alepha db:check-migrations");
40
40
  }
41
41
 
@@ -68,7 +68,12 @@ export class ViteCommands {
68
68
  await access(join(root, "index.html"));
69
69
  } catch {
70
70
  this.log.trace("No index.html found, running entry file with tsx");
71
- await this.runner.exec(`tsx watch ${entry}`);
71
+ let cmd = "tsx --watch";
72
+ if (await this.utils.exists(root, ".env")) {
73
+ cmd += ` --env-file=./.env`;
74
+ }
75
+ cmd += ` ${entry}`;
76
+ await this.runner.exec(cmd);
72
77
  return;
73
78
  }
74
79