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
@@ -429,6 +429,16 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
429
429
  },
430
430
  };
431
431
 
432
+ if (options.dialect === "sqlite") {
433
+ let url = options.providerUrl;
434
+ url = url.replace("sqlite://", "").replace("file://", "");
435
+ url = join(options.rootDir, url);
436
+
437
+ config.dbCredentials = {
438
+ url,
439
+ };
440
+ }
441
+
432
442
  if (options.providerName === "pglite") {
433
443
  config.driver = "pglite";
434
444
  }
@@ -442,6 +452,24 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
442
452
  );
443
453
  }
444
454
 
455
+ public async loadEnvFile(root: string): Promise<void> {
456
+ const envPath = join(root, ".env");
457
+ try {
458
+ const envContent = await readFile(envPath, "utf8");
459
+ const lines = envContent.split("\n");
460
+ for (const line of lines) {
461
+ const [key, ...rest] = line.split("=");
462
+ if (key) {
463
+ const value = rest.join("=");
464
+ process.env[key.trim()] = value.trim();
465
+ }
466
+ }
467
+ this.log.debug(`Loaded environment variables from ${envPath}`);
468
+ } catch {
469
+ this.log.debug(`No .env file found at ${envPath}, skipping load.`);
470
+ }
471
+ }
472
+
445
473
  /**
446
474
  * Run a drizzle-kit command for all database providers in an Alepha instance.
447
475
  *
@@ -459,6 +487,9 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
459
487
  logMessage: (providerName: string, dialect: string) => string;
460
488
  }): Promise<void> {
461
489
  const rootDir = options.root;
490
+
491
+ await this.loadEnvFile(rootDir);
492
+
462
493
  this.log.debug(`Using project root: ${rootDir}`);
463
494
 
464
495
  const { alepha, entry } = await this.loadAlephaFromServerEntryFile(
@@ -472,8 +503,8 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
472
503
  alepha.inject<RepositoryProvider>("RepositoryProvider");
473
504
  const accepted = new Set<string>([]);
474
505
 
475
- for (const descriptor of repositoryProvider.getRepositories()) {
476
- const provider = descriptor.provider;
506
+ for (const primitive of repositoryProvider.getRepositories()) {
507
+ const provider = primitive.provider;
477
508
  const providerName = provider.name;
478
509
  const dialect = provider.dialect;
479
510
 
@@ -550,7 +581,7 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
550
581
  }
551
582
  }
552
583
 
553
- public async hasDir(root: string, dirName: string): Promise<boolean> {
584
+ public async exists(root: string, dirName: string): Promise<boolean> {
554
585
  return this.fs.exists(join(root, dirName));
555
586
  }
556
587
 
@@ -1,33 +1,33 @@
1
1
  import { $module } from "alepha";
2
- import { $command } from "./descriptors/$command.ts";
3
2
  import { Asker } from "./helpers/Asker.ts";
4
3
  import { PrettyPrint } from "./helpers/PrettyPrint.ts";
5
4
  import { Runner } from "./helpers/Runner.ts";
5
+ import { $command } from "./primitives/$command.ts";
6
6
  import { CliProvider } from "./providers/CliProvider.ts";
7
7
 
8
8
  // ---------------------------------------------------------------------------------------------------------------------
9
9
 
10
- export * from "./descriptors/$command.ts";
11
10
  export * from "./errors/CommandError.ts";
12
11
  export * from "./helpers/Asker.ts";
13
12
  export * from "./helpers/PrettyPrint.ts";
14
13
  export * from "./helpers/Runner.ts";
14
+ export * from "./primitives/$command.ts";
15
15
  export * from "./providers/CliProvider.ts";
16
16
 
17
17
  // ---------------------------------------------------------------------------------------------------------------------
18
18
 
19
19
  /**
20
20
  * This module provides a powerful way to build command-line interfaces
21
- * directly within your Alepha application, using declarative descriptors.
21
+ * directly within your Alepha application, using declarative primitives.
22
22
  *
23
- * It allows you to define commands using the `$command` descriptor.
23
+ * It allows you to define commands using the `$command` primitive.
24
24
  *
25
25
  * @see {@link $command}
26
26
  * @module alepha.command
27
27
  */
28
28
  export const AlephaCommand = $module({
29
29
  name: "alepha.command",
30
- descriptors: [$command],
30
+ primitives: [$command],
31
31
  services: [CliProvider, Runner, Asker, PrettyPrint],
32
32
  });
33
33
 
@@ -2,9 +2,9 @@ import type * as fs from "node:fs/promises";
2
2
  import type { glob } from "node:fs/promises";
3
3
  import {
4
4
  type Async,
5
- createDescriptor,
6
- Descriptor,
5
+ createPrimitive,
7
6
  KIND,
7
+ Primitive,
8
8
  type Static,
9
9
  type TObject,
10
10
  type TSchema,
@@ -16,19 +16,16 @@ import type { RunnerMethod } from "../helpers/Runner.ts";
16
16
  /**
17
17
  * Declares a CLI command.
18
18
  *
19
- * This descriptor allows you to define a command, its flags, and its handler
19
+ * This primitive allows you to define a command, its flags, and its handler
20
20
  * within your Alepha application structure.
21
21
  */
22
22
  export const $command = <T extends TObject, A extends TSchema>(
23
- options: CommandDescriptorOptions<T, A>,
24
- ) => createDescriptor(CommandDescriptor<T, A>, options);
23
+ options: CommandPrimitiveOptions<T, A>,
24
+ ) => createPrimitive(CommandPrimitive<T, A>, options);
25
25
 
26
26
  // ---------------------------------------------------------------------------------------------------------------------
27
27
 
28
- export interface CommandDescriptorOptions<
29
- T extends TObject,
30
- A extends TSchema,
31
- > {
28
+ export interface CommandPrimitiveOptions<T extends TObject, A extends TSchema> {
32
29
  /**
33
30
  * The handler function to execute when the command is matched.
34
31
  */
@@ -89,10 +86,10 @@ export interface CommandDescriptorOptions<
89
86
 
90
87
  // ---------------------------------------------------------------------------------------------------------------------
91
88
 
92
- export class CommandDescriptor<
89
+ export class CommandPrimitive<
93
90
  T extends TObject = TObject,
94
91
  A extends TSchema = TSchema,
95
- > extends Descriptor<CommandDescriptorOptions<T, A>> {
92
+ > extends Primitive<CommandPrimitiveOptions<T, A>> {
96
93
  public readonly flags = this.options.flags ?? t.object({});
97
94
  public readonly aliases = this.options.aliases ?? [];
98
95
 
@@ -104,7 +101,7 @@ export class CommandDescriptor<
104
101
  }
105
102
  }
106
103
 
107
- $command[KIND] = CommandDescriptor;
104
+ $command[KIND] = CommandPrimitive;
108
105
 
109
106
  // ---------------------------------------------------------------------------------------------------------------------
110
107
 
@@ -14,14 +14,14 @@ import {
14
14
  t,
15
15
  } from "alepha";
16
16
  import { $logger } from "alepha/logger";
17
- import {
18
- $command,
19
- type CommandDescriptor,
20
- type CommandHandlerArgs,
21
- } from "../descriptors/$command.ts";
22
17
  import { CommandError } from "../errors/CommandError.ts";
23
18
  import { Asker } from "../helpers/Asker.ts";
24
19
  import { Runner } from "../helpers/Runner.ts";
20
+ import {
21
+ $command,
22
+ type CommandHandlerArgs,
23
+ type CommandPrimitive,
24
+ } from "../primitives/$command.ts";
25
25
 
26
26
  // ---------------------------------------------------------------------------------------------------------------------
27
27
 
@@ -176,11 +176,11 @@ export class CliProvider {
176
176
  },
177
177
  });
178
178
 
179
- public get commands(): CommandDescriptor<any>[] {
180
- return this.alepha.descriptors($command);
179
+ public get commands(): CommandPrimitive<any>[] {
180
+ return this.alepha.primitives($command);
181
181
  }
182
182
 
183
- protected findCommand(name: string): CommandDescriptor<TObject> | undefined {
183
+ protected findCommand(name: string): CommandPrimitive<TObject> | undefined {
184
184
  return this.commands.find(
185
185
  (command) => command.name === name || command.aliases.includes(name),
186
186
  );
@@ -408,7 +408,7 @@ export class CliProvider {
408
408
  return "";
409
409
  }
410
410
 
411
- public printHelp(command?: CommandDescriptor<any>): void {
411
+ public printHelp(command?: CommandPrimitive<any>): void {
412
412
  const cliName = this.name || "cli";
413
413
  this.log.info(""); // Newline
414
414
 
@@ -485,7 +485,7 @@ export class CliProvider {
485
485
  this.log.info(""); // Newline
486
486
  }
487
487
 
488
- private getMaxCmdLength(commands: CommandDescriptor[]): number {
488
+ private getMaxCmdLength(commands: CommandPrimitive[]): number {
489
489
  return Math.max(
490
490
  ...commands.map((c) => {
491
491
  const cmdStr = [c.name, ...c.aliases].join(", ");
@@ -2,13 +2,11 @@ import type { Static, TObject } from "typebox";
2
2
  import { KIND } from "./constants/KIND.ts";
3
3
  import { MODULE } from "./constants/MODULE.ts";
4
4
  import { OPTIONS } from "./constants/OPTIONS.ts";
5
- import type { InjectOptions } from "./descriptors/$inject.ts";
6
- import { Module, type WithModule } from "./descriptors/$module.ts";
7
5
  import { AlephaError } from "./errors/AlephaError.ts";
8
6
  import { CircularDependencyError } from "./errors/CircularDependencyError.ts";
9
7
  import { ContainerLockedError } from "./errors/ContainerLockedError.ts";
10
8
  import { TooLateSubstitutionError } from "./errors/TooLateSubstitutionError.ts";
11
- import { Descriptor } from "./helpers/descriptor.ts";
9
+ import { Primitive } from "./helpers/primitive.ts";
12
10
  import { __alephaRef } from "./helpers/ref.ts";
13
11
  import type { Async } from "./interfaces/Async.ts";
14
12
  import type { LoggerInterface } from "./interfaces/LoggerInterface.ts";
@@ -19,6 +17,8 @@ import {
19
17
  type Service,
20
18
  type ServiceEntry,
21
19
  } from "./interfaces/Service.ts";
20
+ import type { InjectOptions } from "./primitives/$inject.ts";
21
+ import { Module, type WithModule } from "./primitives/$module.ts";
22
22
  import { AlsProvider } from "./providers/AlsProvider.ts";
23
23
  import { CodecManager } from "./providers/CodecManager.ts";
24
24
  import { EventManager } from "./providers/EventManager.ts";
@@ -82,7 +82,7 @@ import type { TSchema } from "./providers/TypeProvider.ts";
82
82
  * // You can access the environment variables using alepha.env
83
83
  * console.log(alepha.env.MY_VAR); // "value"
84
84
  *
85
- * // But you should use $env() descriptor to get typed values from the environment.
85
+ * // But you should use $env() primitive to get typed values from the environment.
86
86
  * class App {
87
87
  * env = $env(
88
88
  * t.object({
@@ -95,7 +95,7 @@ import type { TSchema } from "./providers/TypeProvider.ts";
95
95
  * ### Modules
96
96
  *
97
97
  * Modules are a way to group services together.
98
- * You can register a module using the `$module` descriptor.
98
+ * You can register a module using the `$module` primitive.
99
99
  *
100
100
  * ```ts
101
101
  * import { $module } from "alepha";
@@ -113,7 +113,7 @@ import type { TSchema } from "./providers/TypeProvider.ts";
113
113
  * ### Hooks
114
114
  *
115
115
  * Hooks are a way to run async functions from all registered providers/services.
116
- * You can register a hook using the `$hook` descriptor.
116
+ * You can register a hook using the `$hook` primitive.
117
117
  *
118
118
  * ```ts
119
119
  * import { $hook } from "alepha";
@@ -187,7 +187,7 @@ export class Alepha {
187
187
  // ignore
188
188
  }
189
189
 
190
- alepha.state
190
+ alepha.store
191
191
  .set("alepha.test.beforeAll", beforeAll)
192
192
  .set("alepha.test.afterAll", afterAll)
193
193
  .set("alepha.test.afterEach", afterEach)
@@ -257,12 +257,9 @@ export class Alepha {
257
257
  protected substitutions = new Map<Service, { use: Service }>();
258
258
 
259
259
  /**
260
- * Registry of descriptors.
260
+ * Registry of primitives.
261
261
  */
262
- protected descriptorRegistry = new Map<
263
- Service<Descriptor>,
264
- Array<Descriptor>
265
- >();
262
+ protected primitiveRegistry = new Map<Service<Primitive>, Array<Primitive>>();
266
263
 
267
264
  /**
268
265
  * List of all services + how they are provided.
@@ -294,7 +291,7 @@ export class Alepha {
294
291
  /**
295
292
  * State manager to store arbitrary values.
296
293
  */
297
- public get state(): StateManager<State> {
294
+ public get store(): StateManager<State> {
298
295
  this.events; // ensure events is initialized first (TODO: move this to constructor?)
299
296
  return this.inject(StateManager, {
300
297
  args: [this.init],
@@ -314,14 +311,14 @@ export class Alepha {
314
311
  * Get logger instance.
315
312
  */
316
313
  public get log(): LoggerInterface | undefined {
317
- return this.state.get("alepha.logger");
314
+ return this.store.get("alepha.logger");
318
315
  }
319
316
 
320
317
  /**
321
318
  * The environment variables for the App.
322
319
  */
323
320
  public get env(): Readonly<Env> {
324
- return this.state.get("env") ?? {};
321
+ return this.store.get("env") ?? {};
325
322
  }
326
323
 
327
324
  constructor(init: Partial<State> = {}) {
@@ -442,7 +439,7 @@ export class Alepha {
442
439
  * Starts the App.
443
440
  *
444
441
  * - Lock any further changes to the container.
445
- * - Run "configure" hook for all services. Descriptors will be processed.
442
+ * - Run "configure" hook for all services. Primitives will be processed.
446
443
  * - Run "start" hook for all services. Providers will connect/listen/...
447
444
  * - Run "ready" hook for all services. This is the point where the App is ready to serve requests.
448
445
  *
@@ -472,10 +469,10 @@ export class Alepha {
472
469
  this.inject(key);
473
470
  }
474
471
 
475
- const target = this.state.get("alepha.target");
472
+ const target = this.store.get("alepha.target");
476
473
  if (target) {
477
474
  this.registry = new Map();
478
- this.descriptorRegistry = new Map();
475
+ this.primitiveRegistry = new Map();
479
476
  this.with(target);
480
477
  }
481
478
 
@@ -878,28 +875,28 @@ export class Alepha {
878
875
  }
879
876
 
880
877
  /**
881
- * Get all descriptors of the specified type.
878
+ * Get all primitives of the specified type.
882
879
  */
883
- public descriptors<TDescriptor extends Descriptor>(
880
+ public primitives<TPrimitive extends Primitive>(
884
881
  factory:
885
882
  | {
886
- [KIND]: InstantiableClass<TDescriptor>;
883
+ [KIND]: InstantiableClass<TPrimitive>;
887
884
  }
888
885
  | string,
889
- ): Array<TDescriptor> {
886
+ ): Array<TPrimitive> {
890
887
  if (typeof factory === "string") {
891
888
  const key1 = factory.toLowerCase().replace("$", "");
892
- const key2 = `${key1}descriptor`;
893
- for (const [key, value] of this.descriptorRegistry.entries()) {
889
+ const key2 = `${key1}primitive`;
890
+ for (const [key, value] of this.primitiveRegistry.entries()) {
894
891
  const name = key.name.toLowerCase();
895
892
  if (name === key1 || name === key2) {
896
- return value as Array<TDescriptor>;
893
+ return value as Array<TPrimitive>;
897
894
  }
898
895
  }
899
896
  return [];
900
897
  }
901
- return (this.descriptorRegistry.get(factory[KIND]) ??
902
- []) as Array<TDescriptor>;
898
+ return (this.primitiveRegistry.get(factory[KIND]) ??
899
+ []) as Array<TPrimitive>;
903
900
  }
904
901
 
905
902
  // -------------------------------------------------------------------------------------------------------------------
@@ -922,8 +919,8 @@ export class Alepha {
922
919
 
923
920
  const obj = instance as unknown as Record<string, any>;
924
921
  for (const [key, value] of Object.entries(obj)) {
925
- if (value instanceof Descriptor) {
926
- this.processDescriptor(value, key);
922
+ if (value instanceof Primitive) {
923
+ this.processPrimitive(value, key);
927
924
  }
928
925
  if (
929
926
  typeof value === "object" &&
@@ -933,7 +930,7 @@ export class Alepha {
933
930
  ) {
934
931
  const getter = value[OPTIONS].getter as keyof State;
935
932
  Object.defineProperty(obj, key, {
936
- get: () => this.state.get(getter),
933
+ get: () => this.store.get(getter),
937
934
  });
938
935
  }
939
936
  }
@@ -951,13 +948,13 @@ export class Alepha {
951
948
  return instance;
952
949
  }
953
950
 
954
- protected processDescriptor(value: Descriptor, propertyKey = "") {
951
+ protected processPrimitive(value: Primitive, propertyKey = "") {
955
952
  value.config.propertyKey = propertyKey;
956
953
  (value as any).onInit();
957
954
 
958
955
  const kind = value.constructor as Service;
959
- const list = this.descriptorRegistry.get(kind) ?? [];
960
- this.descriptorRegistry.set(kind, [...list, value]);
956
+ const list = this.primitiveRegistry.get(kind) ?? [];
957
+ this.primitiveRegistry.set(kind, [...list, value]);
961
958
  }
962
959
  }
963
960
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Used for identifying descriptors.
2
+ * Used for identifying primitives.
3
3
  *
4
4
  * @internal
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Used for descriptors options.
2
+ * Used for primitives options.
3
3
  *
4
4
  * @internal
5
5
  */
@@ -1,31 +1,31 @@
1
1
  import { Alepha } from "../Alepha.ts";
2
2
  import { KIND } from "../constants/KIND.ts";
3
3
  import { MODULE } from "../constants/MODULE.ts";
4
- import { $context } from "../descriptors/$context.ts";
5
4
  import type { InstantiableClass, Service } from "../interfaces/Service.ts";
5
+ import { $context } from "../primitives/$context.ts";
6
6
 
7
7
  // ---------------------------------------------------------------------------------------------------------------------
8
8
 
9
- export interface DescriptorArgs<T extends object = {}> {
9
+ export interface PrimitiveArgs<T extends object = {}> {
10
10
  options: T;
11
11
  alepha: Alepha;
12
12
  service: InstantiableClass<Service>;
13
13
  module?: Service;
14
14
  }
15
15
 
16
- export interface DescriptorConfig {
16
+ export interface PrimitiveConfig {
17
17
  propertyKey: string;
18
18
  service: InstantiableClass<Service>;
19
19
  module?: Service;
20
20
  }
21
21
 
22
- export abstract class Descriptor<T extends object = {}> {
22
+ export abstract class Primitive<T extends object = {}> {
23
23
  protected readonly alepha: Alepha;
24
24
 
25
25
  public readonly options: T;
26
- public readonly config: DescriptorConfig;
26
+ public readonly config: PrimitiveConfig;
27
27
 
28
- constructor(args: DescriptorArgs<T>) {
28
+ constructor(args: PrimitiveArgs<T>) {
29
29
  this.alepha = args.alepha;
30
30
  this.options = args.options;
31
31
  this.config = {
@@ -36,7 +36,7 @@ export abstract class Descriptor<T extends object = {}> {
36
36
  }
37
37
 
38
38
  /**
39
- * Called automatically by Alepha after the descriptor is created.
39
+ * Called automatically by Alepha after the primitive is created.
40
40
  */
41
41
  protected onInit(): void {
42
42
  // this method can be overridden by subclasses to perform initialization logic.
@@ -47,27 +47,27 @@ export abstract class Descriptor<T extends object = {}> {
47
47
 
48
48
  // ---------------------------------------------------------------------------------------------------------------------
49
49
 
50
- export type DescriptorFactory<TDescriptor extends Descriptor = Descriptor> = {
51
- (options: TDescriptor["options"]): TDescriptor;
52
- [KIND]: InstantiableClass<TDescriptor>;
50
+ export type PrimitiveFactory<TPrimitive extends Primitive = Primitive> = {
51
+ (options: TPrimitive["options"]): TPrimitive;
52
+ [KIND]: InstantiableClass<TPrimitive>;
53
53
  };
54
54
 
55
- export type DescriptorFactoryLike<T extends object = any> = {
55
+ export type PrimitiveFactoryLike<T extends object = any> = {
56
56
  (options: T): any;
57
57
  [KIND]: any;
58
58
  };
59
59
 
60
- export const createDescriptor = <TDescriptor extends Descriptor>(
61
- descriptor: InstantiableClass<TDescriptor> & { [MODULE]?: Service },
62
- options: TDescriptor["options"],
63
- ): TDescriptor => {
60
+ export const createPrimitive = <TPrimitive extends Primitive>(
61
+ primitive: InstantiableClass<TPrimitive> & { [MODULE]?: Service },
62
+ options: TPrimitive["options"],
63
+ ): TPrimitive => {
64
64
  const { alepha, service } = $context();
65
65
 
66
- if (MODULE in descriptor && descriptor[MODULE]) {
67
- alepha.with(descriptor[MODULE]);
66
+ if (MODULE in primitive && primitive[MODULE]) {
67
+ alepha.with(primitive[MODULE]);
68
68
  }
69
69
 
70
- return alepha.inject(descriptor, {
70
+ return alepha.inject(primitive, {
71
71
  lifetime: "transient",
72
72
  args: [
73
73
  {
@@ -18,7 +18,7 @@ export const __alephaRef: {
18
18
  /**
19
19
  * Note:
20
20
  *
21
- * This file is used to share context between $descriptors and the Alepha core during the injection phase.
21
+ * This file is used to share context between $primitives and the Alepha core during the injection phase.
22
22
  *
23
23
  * There is no side effect as long as Alepha is not used concurrently in multiple contexts (which is not the case).
24
24
  *
@@ -3,13 +3,6 @@
3
3
  export * from "./Alepha.ts";
4
4
  export * from "./constants/KIND.ts";
5
5
  export * from "./constants/OPTIONS.ts";
6
- export * from "./descriptors/$atom.ts";
7
- export * from "./descriptors/$context.ts";
8
- export * from "./descriptors/$env.ts";
9
- export * from "./descriptors/$hook.ts";
10
- export * from "./descriptors/$inject.ts";
11
- export * from "./descriptors/$module.ts";
12
- export * from "./descriptors/$use.ts";
13
6
  export * from "./errors/AlephaError.ts";
14
7
  export * from "./errors/AppNotStartedError.ts";
15
8
  export * from "./errors/CircularDependencyError.ts";
@@ -17,12 +10,19 @@ export * from "./errors/ContainerLockedError.ts";
17
10
  export * from "./errors/TooLateSubstitutionError.ts";
18
11
  export * from "./errors/TypeBoxError.ts";
19
12
  export * from "./helpers/createPagination.ts";
20
- export * from "./helpers/descriptor.ts";
21
13
  export * from "./helpers/FileLike.ts";
14
+ export * from "./helpers/primitive.ts";
22
15
  export * from "./interfaces/Async.ts";
23
16
  export * from "./interfaces/LoggerInterface.ts";
24
17
  export * from "./interfaces/Pagination.ts";
25
18
  export * from "./interfaces/Service.ts";
19
+ export * from "./primitives/$atom.ts";
20
+ export * from "./primitives/$context.ts";
21
+ export * from "./primitives/$env.ts";
22
+ export * from "./primitives/$hook.ts";
23
+ export * from "./primitives/$inject.ts";
24
+ export * from "./primitives/$module.ts";
25
+ export * from "./primitives/$use.ts";
26
26
  export * from "./providers/AlsProvider.ts";
27
27
  export * from "./providers/CodecManager.ts";
28
28
  export * from "./providers/EventManager.ts";
@@ -7,7 +7,7 @@ import type { Service } from "../interfaces/Service.ts";
7
7
  /**
8
8
  * Get Alepha instance and current service from the current context.
9
9
  *
10
- * It can only be used inside $descriptor functions.
10
+ * It can only be used inside $primitive functions.
11
11
  *
12
12
  * ```ts
13
13
  * import { $context } from "alepha";
@@ -16,7 +16,7 @@ import type { Service } from "../interfaces/Service.ts";
16
16
  * const { alepha, service, module } = $context();
17
17
  *
18
18
  * // alepha - alepha instance
19
- * // service - class which is creating this descriptor, this is NOT the instance but the service definition
19
+ * // service - class which is creating this primitive, this is NOT the instance but the service definition
20
20
  * // module - module definition, if any
21
21
  *
22
22
  * return {};
@@ -31,7 +31,7 @@ import type { Service } from "../interfaces/Service.ts";
31
31
  *
32
32
  * @internal
33
33
  */
34
- export const $context = (): ContextDescriptor => {
34
+ export const $context = (): ContextPrimitive => {
35
35
  if (!__alephaRef.alepha) {
36
36
  throw new MissingContextError();
37
37
  }
@@ -45,13 +45,13 @@ export const $context = (): ContextDescriptor => {
45
45
 
46
46
  // ---------------------------------------------------------------------------------------------------------------------
47
47
 
48
- export interface ContextDescriptor {
48
+ export interface ContextPrimitive {
49
49
  /**
50
50
  * Alepha instance.
51
51
  */
52
52
  alepha: Alepha;
53
53
  /**
54
- * Service definition which is creating this descriptor.
54
+ * Service definition which is creating this primitive.
55
55
  * This is NOT the instance but the service definition.
56
56
  */
57
57
  service?: Service;
@@ -1,6 +1,6 @@
1
1
  import type { Hooks } from "../Alepha.ts";
2
2
  import { KIND } from "../constants/KIND.ts";
3
- import { createDescriptor, Descriptor } from "../helpers/descriptor.ts";
3
+ import { createPrimitive, Primitive } from "../helpers/primitive.ts";
4
4
  import type { Async } from "../interfaces/Async.ts";
5
5
 
6
6
  /**
@@ -43,7 +43,7 @@ import type { Async } from "../interfaces/Async.ts";
43
43
  *
44
44
  */
45
45
  export const $hook = <T extends keyof Hooks>(options: HookOptions<T>) =>
46
- createDescriptor(HookDescriptor<T>, options);
46
+ createPrimitive(HookPrimitive<T>, options);
47
47
 
48
48
  // ---------------------------------------------------------------------------------------------------------------------
49
49
 
@@ -76,7 +76,7 @@ export interface HookOptions<T extends keyof Hooks> {
76
76
 
77
77
  // ---------------------------------------------------------------------------------------------------------------------
78
78
 
79
- export class HookDescriptor<T extends keyof Hooks> extends Descriptor<
79
+ export class HookPrimitive<T extends keyof Hooks> extends Primitive<
80
80
  HookOptions<T>
81
81
  > {
82
82
  public called = 0;
@@ -93,4 +93,4 @@ export class HookDescriptor<T extends keyof Hooks> extends Descriptor<
93
93
  }
94
94
  }
95
95
 
96
- $hook[KIND] = HookDescriptor;
96
+ $hook[KIND] = HookPrimitive;
@@ -1,4 +1,4 @@
1
- import { Descriptor } from "../helpers/descriptor.ts";
1
+ import { Primitive } from "../helpers/primitive.ts";
2
2
  import type { InstantiableClass, Service } from "../interfaces/Service.ts";
3
3
  import { $context } from "./$context.ts";
4
4
 
@@ -30,7 +30,7 @@ export const $inject = <T extends object>(
30
30
  });
31
31
  };
32
32
 
33
- export class InjectDescriptor extends Descriptor {}
33
+ export class InjectPrimitive extends Primitive {}
34
34
 
35
35
  export interface InjectOptions<T extends object = any> {
36
36
  /**