alepha 0.10.1 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,7 +34,9 @@ npm install alepha
34
34
 
35
35
  ## What is this?
36
36
 
37
- Alepha is an opinionated framework that handles everything from database to frontend. It uses a descriptor-based architecture (`$action`, `$page`, `$repository`, etc.) and enforces type safety across the entire stack.
37
+ Alepha is an opinionated framework that handles everything from database to frontend.
38
+
39
+ It uses a descriptor-based architecture (`$action`, `$page`, `$repository`, etc.) and enforces type safety across the entire stack.
38
40
 
39
41
  ```ts
40
42
  import { run } from "alepha";
@@ -49,83 +51,178 @@ class App {
49
51
  run(App);
50
52
  ```
51
53
 
54
+ 👉 For more information, please visit the [documentation](https://feunard.github.io/alepha/).
55
+
52
56
  ## Examples
53
57
 
54
58
  ### Type-safe API endpoint
55
59
 
56
60
  ```ts
61
+ // app.ts
62
+ import { run, t } from "alepha";
57
63
  import { $action } from "alepha/server";
58
- import { t } from "alepha/core";
64
+ import { $swagger } from "alepha/server/swagger";
65
+
66
+ class Api {
67
+ docs = $swagger({
68
+ info: {
69
+ title: "My API",
70
+ version: "1.0.0",
71
+ }
72
+ })
59
73
 
60
- class UserController {
61
- getUser = $action({
74
+ sayHello = $action({
75
+ path: "/hello/:name",
62
76
  schema: {
63
- params: t.object({ id: t.string() }),
77
+ params: t.object({
78
+ name: t.string()
79
+ }),
64
80
  response: t.object({
65
- name: t.string(),
66
- email: t.string()
81
+ message: t.string(),
67
82
  })
68
83
  },
69
84
  handler: async ({ params }) => {
70
- return { name: "John", email: "john@example.com" };
85
+ return { message: `Hello ${params.name} !` };
71
86
  }
72
87
  });
73
88
  }
89
+
90
+ run(Api);
91
+ ```
92
+
93
+ ```bash
94
+ node app.ts
74
95
  ```
75
96
 
76
97
  ### Database with Drizzle ORM
77
98
 
99
+ Drizzle ORM is a type-safe ORM for TypeScript, bundled inside Alepha.
100
+
101
+ Drizzle Kit CLI is required as dev dependencies:
102
+
103
+ ```bash
104
+ npm install -D drizzle-kit
105
+ ```
106
+
78
107
  ```ts
79
- import {$entity, $repository, pg} from "alepha/postgres";
80
- import {t, Static} from "alepha";
108
+ // app.ts
109
+ import { $hook, run, t } from "alepha";
110
+ import { $entity, $repository, pg } from "alepha/postgres";
111
+ import { $logger } from "alepha/logger";
81
112
 
82
113
  export const users = $entity({
83
- id: pg.primaryKey(),
84
- name: t.string(),
85
- email: t.string()
114
+ name: "users",
115
+ schema: t.object({
116
+ id: pg.primaryKey(),
117
+ name: t.string(),
118
+ }),
86
119
  });
87
120
 
88
- type CreateUser = Static<typeof users.$insertSchema>;
89
121
 
90
- class UserService {
122
+ class Db {
123
+ log = $logger();
91
124
  users = $repository(users);
92
125
 
93
- async create(data: CreateUser) {
94
- return await this.users.create(data);
95
- }
126
+ ready = $hook({
127
+ on: "ready",
128
+ handler: async () => {
129
+ await this.users.create({
130
+ name: "John Doe",
131
+ });
132
+ this.log.info("Users:", await this.users.find());
133
+ }
134
+ })
96
135
  }
136
+
137
+ run(Db)
97
138
  ```
98
139
 
99
- ### React SSR Page
140
+ ```bash
141
+ node app.ts
142
+ ```
143
+
144
+ ### React Application
145
+
146
+ Alepha has built-in React **CSR** & **SSR** support.
147
+
148
+ [React](https://react.dev) is required as a `dependency`:
149
+
150
+ ```bash
151
+ npm install react react-dom
152
+ npm install -D @types/react
153
+ ```
100
154
 
101
155
  ```tsx
156
+ // app.tsx
157
+ import { run, t } from "alepha";
102
158
  import { $page } from "alepha/react";
159
+ import { useState } from "react";
160
+
161
+ const Hello = (props: { count: number }) => {
162
+ const [ count, setCount ] = useState(props.count);
163
+ return <button onClick={() => setCount(count + 1)}>Clicked: {count}</button>
164
+ }
103
165
 
104
166
  class HomePage {
105
167
  index = $page({
106
- component: () => <div>Hello from React SSR!</div>
168
+ schema: {
169
+ query: t.object({
170
+ start: t.number({ default: 0 }),
171
+ })
172
+ },
173
+ component: Hello,
174
+ resolve: (req) => {
175
+ return { count: req.query.start };
176
+ },
107
177
  });
108
178
  }
179
+
180
+ run(HomePage);
181
+ ```
182
+
183
+ [Vite](https://vite.dev) is required as a `devDependencies`:
184
+
185
+ ```bash
186
+ npm install -D vite
109
187
  ```
110
188
 
111
- ## Core Concepts
189
+ Add the Alepha Vite plugin to your Vite config:
112
190
 
113
- - **Descriptors**: Define your app logic with `$action`, `$page`, `$repository`, `$cache`, `$email`, etc.
114
- - **Type Safety**: TypeBox schemas validate data from DB to API to frontend
115
- - **DI Container**: Built-in dependency injection using `$inject()`
116
- - **Convention over Config**: Minimal boilerplate, sensible defaults
117
- - **Full-Stack**: React SSR, Vite, class-based router with type-safe routing
191
+ ```ts
192
+ // vite.config.ts
193
+ import { viteAlepha } from "alepha/vite";
194
+ import { defineConfig } from "vite";
195
+
196
+ export default defineConfig({
197
+ plugins: [
198
+ viteAlepha()
199
+ ]
200
+ });
201
+ ```
118
202
 
119
- ## Stack
203
+ Create an `index.html` file:
204
+
205
+ ```html
206
+ <!-- index.html -->
207
+ <!DOCTYPE html>
208
+ <html lang="en">
209
+ <head>
210
+ <meta charset="UTF-8">
211
+ <title>App</title>
212
+ </head>
213
+ <body>
214
+ <script type="module" src="app.tsx"></script>
215
+ </body>
216
+ </html>
217
+ ```
120
218
 
121
- - Node.js 22+
122
- - TypeScript
123
- - React (SSR)
124
- - Vite
125
- - Drizzle ORM
126
- - PostgreSQL
219
+ Then run Vite:
127
220
 
128
- 👉 For more information, please visit the [documentation](https://feunard.github.io/alepha/).
221
+ ```bash
222
+ npx vite
223
+ ```
224
+
225
+ Plenty of other features are available, please check the [documentation](https://feunard.github.io/alepha/).
129
226
 
130
227
  ## License
131
228
 
package/batch.d.ts CHANGED
@@ -579,7 +579,7 @@ declare class BatchDescriptor<TItem extends TSchema, TResponse = any> extends De
579
579
  * @see {@link $batch}
580
580
  * @module alepha.batch
581
581
  */
582
- declare const AlephaBatch: _alepha_core1.Service<_alepha_core1.Module>;
582
+ declare const AlephaBatch: _alepha_core1.Service<_alepha_core1.Module<{}>>;
583
583
  //#endregion
584
584
  export { $batch, AlephaBatch, BatchDescriptor, BatchDescriptorOptions };
585
585
  //# sourceMappingURL=index.d.ts.map
package/bucket.d.ts CHANGED
@@ -618,7 +618,7 @@ declare module "alepha" {
618
618
  * @see {@link FileStorageProvider}
619
619
  * @module alepha.bucket
620
620
  */
621
- declare const AlephaBucket: _alepha_core1.Service<_alepha_core1.Module>;
621
+ declare const AlephaBucket: _alepha_core1.Service<_alepha_core1.Module<{}>>;
622
622
  //#endregion
623
623
  export { $bucket, AlephaBucket, BucketDescriptor, BucketDescriptorOptions, BucketFileOptions, FileNotFoundError, FileStorageProvider, LocalFileStorageProvider, MemoryFileStorageProvider, fileMetadataSchema };
624
624
  //# sourceMappingURL=index.d.ts.map
package/cache/redis.d.ts CHANGED
@@ -33,7 +33,7 @@ declare class RedisCacheProvider implements CacheProvider {
33
33
  * @see {@link RedisCacheProvider}
34
34
  * @module alepha.cache.redis
35
35
  */
36
- declare const AlephaCacheRedis: _alepha_core1.Service<_alepha_core1.Module>;
36
+ declare const AlephaCacheRedis: _alepha_core1.Service<_alepha_core1.Module<{}>>;
37
37
  //#endregion
38
38
  export { AlephaCacheRedis, RedisCacheProvider };
39
39
  //# sourceMappingURL=index.d.ts.map
package/cache.d.ts CHANGED
@@ -277,7 +277,7 @@ declare class MemoryCacheProvider implements CacheProvider {
277
277
  * @see {@link CacheProvider}
278
278
  * @module alepha.cache
279
279
  */
280
- declare const AlephaCache: _alepha_core0.Service<_alepha_core0.Module>;
280
+ declare const AlephaCache: _alepha_core0.Service<_alepha_core0.Module<{}>>;
281
281
  //#endregion
282
282
  export { $cache, AlephaCache, CacheDescriptor, CacheDescriptorFn, CacheDescriptorOptions, CacheProvider, MemoryCacheProvider };
283
283
  //# sourceMappingURL=index.d.ts.map
package/command.d.ts CHANGED
@@ -220,7 +220,7 @@ declare class CliProvider {
220
220
  * @see {@link $command}
221
221
  * @module alepha.command
222
222
  */
223
- declare const AlephaCommand: _alepha_core1.Service<_alepha_core1.Module>;
223
+ declare const AlephaCommand: _alepha_core1.Service<_alepha_core1.Module<{}>>;
224
224
  declare module "typebox" {
225
225
  interface StringOptions {
226
226
  /**
package/core.d.ts CHANGED
@@ -2,7 +2,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
2
2
  import { Validator } from "typebox/compile";
3
3
  import * as TypeBox from "typebox";
4
4
  import { Static, Static as Static$1, StaticDecode, StaticEncode, TAny, TAny as TAny$1, TArray, TArray as TArray$1, TArrayOptions, TBigInt, TBoolean, TBoolean as TBoolean$1, TInteger, TInteger as TInteger$1, TKeysToIndexer, TNull, TNull as TNull$1, TNumber, TNumber as TNumber$1, TNumberOptions, TNumberOptions as TNumberOptions$1, TObject, TObject as TObject$1, TObjectOptions, TObjectOptions as TObjectOptions$1, TOptional, TOptionalAdd, TOptionalAdd as TOptionalAdd$1, TPick, TProperties, TProperties as TProperties$1, TRecord, TRecord as TRecord$1, TSchema, TSchema as TSchema$1, TSchemaOptions, TString, TString as TString$1, TStringOptions, TStringOptions as TStringOptions$1, TTuple, TUnion, TUnion as TUnion$1, TUnsafe, TVoid } from "typebox";
5
- import Format from "typebox/format";
5
+ import TypeBoxFormat from "typebox/format";
6
6
  import * as TypeBoxValue from "typebox/value";
7
7
  import { Readable } from "node:stream";
8
8
  import { ReadableStream as ReadableStream$1 } from "node:stream/web";
@@ -189,8 +189,8 @@ interface InjectOptions<T extends object = any> {
189
189
  * Modules are more useful when the application grows and needs to be structured.
190
190
  * If we speak with `$actions`, a module should be used when you have more than 30 actions in a single module.
191
191
  */
192
- declare const $module: (options: ModuleDescriptorOptions) => Service<Module>;
193
- interface ModuleDescriptorOptions {
192
+ declare const $module: <T extends object = {}>(options: ModuleDescriptorOptions<T>) => Service<Module<T>>;
193
+ interface ModuleDescriptorOptions<T extends object> {
194
194
  /**
195
195
  * Name of the module.
196
196
  *
@@ -210,15 +210,16 @@ interface ModuleDescriptorOptions {
210
210
  * You can override this behavior by providing a register function.
211
211
  * It's useful when you want to register services conditionally or in a specific order.
212
212
  */
213
- register?: (alepha: Alepha) => void;
213
+ register?: (alepha: Alepha, options: T) => void;
214
214
  }
215
215
  /**
216
216
  * Base class for all modules.
217
217
  */
218
- declare abstract class Module {
219
- abstract readonly options: ModuleDescriptorOptions;
218
+ declare abstract class Module<T extends object = {}> {
219
+ abstract readonly config: ModuleDescriptorOptions<T>;
220
220
  abstract register(alepha: Alepha): void;
221
221
  static NAME_REGEX: RegExp;
222
+ options: T;
222
223
  /**
223
224
  * Check if a Service is a Module.
224
225
  */
@@ -404,6 +405,11 @@ type StreamLike = ReadableStream | ReadableStream$1 | Readable | NodeJS.Readable
404
405
  type TStream = TUnsafe<StreamLike>;
405
406
  //#endregion
406
407
  //#region src/providers/TypeProvider.d.ts
408
+ declare const isUUID: typeof TypeBoxFormat.IsUuid;
409
+ declare const isDateTime: typeof TypeBoxFormat.IsDateTime;
410
+ declare const isDate: typeof TypeBoxFormat.IsDate;
411
+ declare const isEmail: typeof TypeBoxFormat.IsEmail;
412
+ declare const isURL: typeof TypeBoxFormat.IsUrl;
407
413
  declare class TypeGuard {
408
414
  isSchema: typeof TypeBox.IsSchema;
409
415
  isObject: typeof TypeBox.IsObject;
@@ -438,7 +444,7 @@ declare module "typebox" {
438
444
  }
439
445
  }
440
446
  declare class TypeProvider {
441
- static format: typeof Format;
447
+ static format: typeof TypeBoxFormat;
442
448
  static isValidBigInt(value: string | number): boolean;
443
449
  /**
444
450
  * Default maximum length for strings.
@@ -976,11 +982,14 @@ declare class Alepha {
976
982
  * > If you are interested in configuring a service, use Alepha#configure() instead.
977
983
  *
978
984
  * @param serviceEntry - The service to register in the container.
985
+ * @param configure - Optional configuration object to merge with the service's options.
979
986
  * @return Current instance of Alepha.
980
987
  */
981
- with<T extends object>(serviceEntry: ServiceEntry<T> | {
988
+ with<T extends {
989
+ options?: object;
990
+ } & object>(serviceEntry: ServiceEntry<T> | {
982
991
  default: ServiceEntry<T>;
983
- }): this;
992
+ }, configure?: Partial<T["options"]>): this;
984
993
  /**
985
994
  * Get an instance of the specified service from the container.
986
995
  *
@@ -1005,7 +1014,7 @@ declare class Alepha {
1005
1014
  * ```
1006
1015
  */
1007
1016
  configure<T extends {
1008
- options: object;
1017
+ options?: object;
1009
1018
  }>(service: Service<T>, state: Partial<T["options"]>): this;
1010
1019
  /**
1011
1020
  * Casts the given value to the specified schema.
@@ -1390,5 +1399,5 @@ declare global {
1390
1399
  */
1391
1400
  declare const run: (entry: Alepha | Service | Array<Service>, opts?: RunOptions) => void;
1392
1401
  //#endregion
1393
- export { $cursor, $env, $hook, $inject, $module, AbstractClass, Alepha, AlephaError, AlephaStringOptions, AlsProvider, AppNotStartedError, Async, AsyncFn, AsyncLocalStorageData, CircularDependencyError, ContainerLockedError, CursorDescriptor, Descriptor, DescriptorArgs, DescriptorConfig, DescriptorFactory, DescriptorFactoryLike, Env, FileLike, Hook, HookDescriptor, HookOptions, Hooks, InjectDescriptor, InjectOptions, InstantiableClass, KIND, LogLevel, LoggerInterface, MaybePromise, Module, ModuleDescriptorOptions, OPTIONS, Service, ServiceEntry, ServiceSubstitution, State, StateManager, type Static, type StaticDecode, type StaticEncode, StreamLike, type TAny, type TArray, type TBigInt, type TBoolean, TFile, type TInteger, type TKeysToIndexer, type TNull, type TNumber, type TNumberOptions, type TObject, type TObjectOptions, type TOptional, type TOptionalAdd, type TPick, type TProperties, type TRecord, type TSchema, TStream, type TString, type TStringOptions, type TTuple, type TUnion, type TVoid, TextLength, TooLateSubstitutionError, TypeBox, TypeBoxError, TypeBoxValue, TypeGuard, TypeProvider, WithModule, __alephaRef, createDescriptor, isFileLike, isTypeFile, run, t };
1402
+ export { $cursor, $env, $hook, $inject, $module, AbstractClass, Alepha, AlephaError, AlephaStringOptions, AlsProvider, AppNotStartedError, Async, AsyncFn, AsyncLocalStorageData, CircularDependencyError, ContainerLockedError, CursorDescriptor, Descriptor, DescriptorArgs, DescriptorConfig, DescriptorFactory, DescriptorFactoryLike, Env, FileLike, Hook, HookDescriptor, HookOptions, Hooks, InjectDescriptor, InjectOptions, InstantiableClass, KIND, LogLevel, LoggerInterface, MaybePromise, Module, ModuleDescriptorOptions, OPTIONS, Service, ServiceEntry, ServiceSubstitution, State, StateManager, type Static, type StaticDecode, type StaticEncode, StreamLike, type TAny, type TArray, type TBigInt, type TBoolean, TFile, type TInteger, type TKeysToIndexer, type TNull, type TNumber, type TNumberOptions, type TObject, type TObjectOptions, type TOptional, type TOptionalAdd, type TPick, type TProperties, type TRecord, type TSchema, TStream, type TString, type TStringOptions, type TTuple, type TUnion, type TVoid, TextLength, TooLateSubstitutionError, TypeBox, TypeBoxError, TypeBoxFormat, TypeBoxValue, TypeGuard, TypeProvider, WithModule, __alephaRef, createDescriptor, isDate, isDateTime, isEmail, isFileLike, isTypeFile, isURL, isUUID, run, t };
1394
1403
  //# sourceMappingURL=index.d.ts.map
package/datetime.d.ts CHANGED
@@ -132,7 +132,7 @@ declare class IntervalDescriptor extends Descriptor<IntervalDescriptorOptions> {
132
132
  }
133
133
  //#endregion
134
134
  //#region src/index.d.ts
135
- declare const AlephaDateTime: _alepha_core1.Service<_alepha_core1.Module>;
135
+ declare const AlephaDateTime: _alepha_core1.Service<_alepha_core1.Module<{}>>;
136
136
  //#endregion
137
137
  export { $interval, AlephaDateTime, DateTime, DateTimeApi, DateTimeProvider, Duration, DurationLike, Interval, IntervalDescriptor, IntervalDescriptorOptions, Timeout };
138
138
  //# sourceMappingURL=index.d.ts.map
package/email.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _alepha_core1 from "alepha";
2
2
  import { Descriptor, KIND, Service, Static, TSchema } from "alepha";
3
- import * as _alepha_logger1 from "alepha/logger";
3
+ import * as _alepha_logger0 from "alepha/logger";
4
4
  import { Transporter } from "nodemailer";
5
5
 
6
6
  //#region src/providers/EmailProvider.d.ts
@@ -30,7 +30,7 @@ interface EmailRecord {
30
30
  sentAt: Date;
31
31
  }
32
32
  declare class MemoryEmailProvider implements EmailProvider {
33
- protected readonly log: _alepha_logger1.Logger;
33
+ protected readonly log: _alepha_logger0.Logger;
34
34
  protected emails: EmailRecord[];
35
35
  send(to: string, subject: string, body: string): Promise<void>;
36
36
  /**
@@ -224,7 +224,7 @@ interface EmailDescriptorOptions<T extends TSchema> {
224
224
  provider?: Service<EmailProvider> | "memory";
225
225
  }
226
226
  declare class EmailDescriptor<T extends TSchema> extends Descriptor<EmailDescriptorOptions<T>> {
227
- protected readonly log: _alepha_logger1.Logger;
227
+ protected readonly log: _alepha_logger0.Logger;
228
228
  protected readonly templateService: TemplateService;
229
229
  readonly provider: EmailProvider | MemoryEmailProvider;
230
230
  get name(): string;
@@ -252,7 +252,7 @@ interface LocalEmailProviderOptions {
252
252
  directory?: string;
253
253
  }
254
254
  declare class LocalEmailProvider implements EmailProvider {
255
- protected readonly log: _alepha_logger1.Logger;
255
+ protected readonly log: _alepha_logger0.Logger;
256
256
  protected readonly directory: string;
257
257
  constructor(options?: LocalEmailProviderOptions);
258
258
  send(to: string, subject: string, body: string): Promise<void>;
@@ -292,7 +292,7 @@ declare class NodemailerEmailProvider implements EmailProvider {
292
292
  EMAIL_FROM: string;
293
293
  EMAIL_SECURE: boolean;
294
294
  };
295
- protected readonly log: _alepha_logger1.Logger;
295
+ protected readonly log: _alepha_logger0.Logger;
296
296
  protected transporter: Transporter;
297
297
  protected fromAddress: string;
298
298
  readonly options: NodemailerEmailProviderOptions;
@@ -322,7 +322,7 @@ declare class NodemailerEmailProvider implements EmailProvider {
322
322
  * @see {@link EmailProvider}
323
323
  * @module alepha.email
324
324
  */
325
- declare const AlephaEmail: _alepha_core1.Service<_alepha_core1.Module>;
325
+ declare const AlephaEmail: _alepha_core1.Service<_alepha_core1.Module<{}>>;
326
326
  //#endregion
327
327
  export { $email, AlephaEmail, EmailDescriptor, EmailDescriptorOptions, EmailError, EmailProvider, EmailRecord, LocalEmailProvider, LocalEmailProviderOptions, MemoryEmailProvider, NodemailerEmailProvider, NodemailerEmailProviderOptions, TemplateService };
328
328
  //# sourceMappingURL=index.d.ts.map
package/lock/redis.d.ts CHANGED
@@ -18,7 +18,7 @@ declare class RedisLockProvider implements LockProvider {
18
18
  * @see {@link RedisLockProvider}
19
19
  * @module alepha.lock.redis
20
20
  */
21
- declare const AlephaLockRedis: _alepha_core0.Service<_alepha_core0.Module>;
21
+ declare const AlephaLockRedis: _alepha_core0.Service<_alepha_core0.Module<{}>>;
22
22
  //#endregion
23
23
  export { AlephaLockRedis, RedisLockProvider };
24
24
  //# sourceMappingURL=index.d.ts.map
package/lock.d.ts CHANGED
@@ -546,7 +546,7 @@ declare class MemoryLockProvider implements LockProvider {
546
546
  * @see {@link $lock}
547
547
  * @module alepha.lock
548
548
  */
549
- declare const AlephaLock: _alepha_core1.Service<_alepha_core1.Module>;
549
+ declare const AlephaLock: _alepha_core1.Service<_alepha_core1.Module<{}>>;
550
550
  //#endregion
551
551
  export { $lock, AlephaLock, LockDescriptor, LockDescriptorOptions, LockProvider, LockResult, LockTopicProvider, MemoryLockProvider };
552
552
  //# sourceMappingURL=index.d.ts.map
package/logger.d.ts CHANGED
@@ -215,7 +215,7 @@ declare class SimpleFormatterProvider extends LogFormatterProvider {
215
215
  * - Empty parts are gracefully skipped: `LOG_LEVEL=",,debug,,"` works fine
216
216
  * - Better error messages: "Invalid log level 'bad' for module pattern 'alepha'"
217
217
  */
218
- declare const AlephaLogger: _alepha_core0.Service<_alepha_core0.Module>;
218
+ declare const AlephaLogger: _alepha_core0.Service<_alepha_core0.Module<{}>>;
219
219
  declare const envSchema: _alepha_core0.TObject<{
220
220
  /**
221
221
  * Default log level for the application.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alepha",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22.0.0"
@@ -15,51 +15,51 @@
15
15
  "main": "./core.js",
16
16
  "types": "./core.d.ts",
17
17
  "dependencies": {
18
- "@alepha/batch": "0.10.1",
19
- "@alepha/bucket": "0.10.1",
20
- "@alepha/cache": "0.10.1",
21
- "@alepha/cache-redis": "0.10.1",
22
- "@alepha/command": "0.10.1",
23
- "@alepha/core": "0.10.1",
24
- "@alepha/datetime": "0.10.1",
25
- "@alepha/email": "0.10.1",
26
- "@alepha/file": "0.10.1",
27
- "@alepha/lock": "0.10.1",
28
- "@alepha/lock-redis": "0.10.1",
29
- "@alepha/logger": "0.10.1",
30
- "@alepha/postgres": "0.10.1",
31
- "@alepha/queue": "0.10.1",
32
- "@alepha/queue-redis": "0.10.1",
33
- "@alepha/react": "0.10.1",
34
- "@alepha/react-auth": "0.10.1",
35
- "@alepha/react-form": "0.10.1",
36
- "@alepha/react-head": "0.10.1",
37
- "@alepha/react-i18n": "0.10.1",
38
- "@alepha/redis": "0.10.1",
39
- "@alepha/retry": "0.10.1",
40
- "@alepha/router": "0.10.1",
41
- "@alepha/scheduler": "0.10.1",
42
- "@alepha/security": "0.10.1",
43
- "@alepha/server": "0.10.1",
44
- "@alepha/server-cache": "0.10.1",
45
- "@alepha/server-compress": "0.10.1",
46
- "@alepha/server-cookies": "0.10.1",
47
- "@alepha/server-cors": "0.10.1",
48
- "@alepha/server-health": "0.10.1",
49
- "@alepha/server-helmet": "0.10.1",
50
- "@alepha/server-links": "0.10.1",
51
- "@alepha/server-metrics": "0.10.1",
52
- "@alepha/server-multipart": "0.10.1",
53
- "@alepha/server-proxy": "0.10.1",
54
- "@alepha/server-security": "0.10.1",
55
- "@alepha/server-static": "0.10.1",
56
- "@alepha/server-swagger": "0.10.1",
57
- "@alepha/topic": "0.10.1",
58
- "@alepha/topic-redis": "0.10.1",
59
- "@alepha/vite": "0.10.1"
18
+ "@alepha/batch": "0.10.3",
19
+ "@alepha/bucket": "0.10.3",
20
+ "@alepha/cache": "0.10.3",
21
+ "@alepha/cache-redis": "0.10.3",
22
+ "@alepha/command": "0.10.3",
23
+ "@alepha/core": "0.10.3",
24
+ "@alepha/datetime": "0.10.3",
25
+ "@alepha/email": "0.10.3",
26
+ "@alepha/file": "0.10.3",
27
+ "@alepha/lock": "0.10.3",
28
+ "@alepha/lock-redis": "0.10.3",
29
+ "@alepha/logger": "0.10.3",
30
+ "@alepha/postgres": "0.10.3",
31
+ "@alepha/queue": "0.10.3",
32
+ "@alepha/queue-redis": "0.10.3",
33
+ "@alepha/react": "0.10.3",
34
+ "@alepha/react-auth": "0.10.3",
35
+ "@alepha/react-form": "0.10.3",
36
+ "@alepha/react-head": "0.10.3",
37
+ "@alepha/react-i18n": "0.10.3",
38
+ "@alepha/redis": "0.10.3",
39
+ "@alepha/retry": "0.10.3",
40
+ "@alepha/router": "0.10.3",
41
+ "@alepha/scheduler": "0.10.3",
42
+ "@alepha/security": "0.10.3",
43
+ "@alepha/server": "0.10.3",
44
+ "@alepha/server-cache": "0.10.3",
45
+ "@alepha/server-compress": "0.10.3",
46
+ "@alepha/server-cookies": "0.10.3",
47
+ "@alepha/server-cors": "0.10.3",
48
+ "@alepha/server-health": "0.10.3",
49
+ "@alepha/server-helmet": "0.10.3",
50
+ "@alepha/server-links": "0.10.3",
51
+ "@alepha/server-metrics": "0.10.3",
52
+ "@alepha/server-multipart": "0.10.3",
53
+ "@alepha/server-proxy": "0.10.3",
54
+ "@alepha/server-security": "0.10.3",
55
+ "@alepha/server-static": "0.10.3",
56
+ "@alepha/server-swagger": "0.10.3",
57
+ "@alepha/topic": "0.10.3",
58
+ "@alepha/topic-redis": "0.10.3",
59
+ "@alepha/vite": "0.10.3"
60
60
  },
61
61
  "devDependencies": {
62
- "tsdown": "^0.15.5"
62
+ "tsdown": "^0.15.6"
63
63
  },
64
64
  "scripts": {
65
65
  "build": "node build.ts"