alepha 0.13.1 → 0.13.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 +1 -1
- package/dist/api-files/index.browser.js +80 -0
- package/dist/api-files/index.browser.js.map +1 -0
- package/dist/api-files/index.d.ts +28 -91
- package/dist/api-files/index.js +10 -755
- package/dist/api-files/index.js.map +1 -1
- package/dist/api-jobs/index.browser.js +56 -0
- package/dist/api-jobs/index.browser.js.map +1 -0
- package/dist/api-jobs/index.d.ts +46 -46
- package/dist/api-jobs/index.js +13 -13
- package/dist/api-jobs/index.js.map +1 -1
- package/dist/api-notifications/index.browser.js +382 -0
- package/dist/api-notifications/index.browser.js.map +1 -0
- package/dist/api-notifications/index.d.ts +231 -193
- package/dist/api-notifications/index.js +108 -78
- package/dist/api-notifications/index.js.map +1 -1
- package/dist/api-parameters/index.browser.js +29 -0
- package/dist/api-parameters/index.browser.js.map +1 -0
- package/dist/api-parameters/index.d.ts +21 -22
- package/dist/api-parameters/index.js +22 -22
- package/dist/api-parameters/index.js.map +1 -1
- package/dist/api-users/index.d.ts +237 -2001
- package/dist/api-users/index.js +969 -4795
- package/dist/api-users/index.js.map +1 -1
- package/dist/api-verifications/index.browser.js +52 -0
- package/dist/api-verifications/index.browser.js.map +1 -0
- package/dist/api-verifications/index.d.ts +119 -97
- package/dist/api-verifications/index.js +1 -1
- package/dist/api-verifications/index.js.map +1 -1
- package/dist/batch/index.d.ts +13 -13
- package/dist/batch/index.js +8 -13
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts +14 -14
- package/dist/bucket/index.js +19 -17
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/index.d.ts +11 -11
- package/dist/cache/index.js +9 -9
- package/dist/cache/index.js.map +1 -1
- package/dist/cli/{dist-Dl9Vl7Ur.js → dist-lGnqsKpu.js} +11 -15
- package/dist/cli/dist-lGnqsKpu.js.map +1 -0
- package/dist/cli/index.d.ts +32 -49
- package/dist/cli/index.js +90 -71
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +20 -19
- package/dist/command/index.js +34 -25
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +218 -218
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +232 -232
- package/dist/core/index.js +218 -218
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +2113 -0
- package/dist/core/index.native.js.map +1 -0
- package/dist/datetime/index.d.ts +9 -9
- package/dist/datetime/index.js +7 -7
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +16 -16
- package/dist/email/index.js +14 -9
- package/dist/email/index.js.map +1 -1
- package/dist/file/index.js +1 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/index.d.ts +9 -9
- package/dist/lock/index.js +8 -8
- package/dist/lock/index.js.map +1 -1
- package/dist/lock-redis/index.js +3 -66
- package/dist/lock-redis/index.js.map +1 -1
- package/dist/logger/index.d.ts +5 -5
- package/dist/logger/index.js +8 -8
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/index.browser.js +114 -114
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.d.ts +218 -218
- package/dist/orm/index.js +49 -49
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/index.d.ts +29 -29
- package/dist/queue/index.js +20 -20
- package/dist/queue/index.js.map +1 -1
- package/dist/queue-redis/index.d.ts +2 -2
- package/dist/redis/index.d.ts +4 -4
- package/dist/retry/index.d.ts +19 -19
- package/dist/retry/index.js +7 -7
- package/dist/retry/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +16 -16
- package/dist/scheduler/index.js +9 -9
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +53 -53
- package/dist/security/index.js +35 -35
- package/dist/security/index.js.map +1 -1
- package/dist/server/index.browser.js +1 -1
- package/dist/server/index.browser.js.map +1 -1
- package/dist/server/index.d.ts +92 -92
- package/dist/server/index.js +16 -16
- package/dist/server/index.js.map +1 -1
- package/dist/server-auth/index.browser.js +4 -982
- package/dist/server-auth/index.browser.js.map +1 -1
- package/dist/server-auth/index.d.ts +204 -785
- package/dist/server-auth/index.js +47 -1239
- package/dist/server-auth/index.js.map +1 -1
- package/dist/server-cache/index.d.ts +10 -10
- package/dist/server-cache/index.js +2 -2
- package/dist/server-cache/index.js.map +1 -1
- package/dist/server-compress/index.d.ts +4 -4
- package/dist/server-compress/index.js +1 -1
- package/dist/server-compress/index.js.map +1 -1
- package/dist/server-cookies/index.browser.js +8 -8
- package/dist/server-cookies/index.browser.js.map +1 -1
- package/dist/server-cookies/index.d.ts +17 -17
- package/dist/server-cookies/index.js +11 -11
- package/dist/server-cookies/index.js.map +1 -1
- package/dist/server-cors/index.d.ts +17 -17
- package/dist/server-cors/index.js +9 -9
- package/dist/server-cors/index.js.map +1 -1
- package/dist/server-health/index.d.ts +19 -19
- package/dist/server-helmet/index.d.ts +1 -1
- package/dist/server-links/index.browser.js +12 -12
- package/dist/server-links/index.browser.js.map +1 -1
- package/dist/server-links/index.d.ts +59 -251
- package/dist/server-links/index.js +23 -502
- package/dist/server-links/index.js.map +1 -1
- package/dist/server-metrics/index.d.ts +4 -4
- package/dist/server-multipart/index.d.ts +2 -2
- package/dist/server-proxy/index.d.ts +12 -12
- package/dist/server-proxy/index.js +10 -10
- package/dist/server-proxy/index.js.map +1 -1
- package/dist/server-rate-limit/index.d.ts +22 -22
- package/dist/server-rate-limit/index.js +12 -12
- package/dist/server-rate-limit/index.js.map +1 -1
- package/dist/server-security/index.d.ts +22 -22
- package/dist/server-security/index.js +15 -15
- package/dist/server-security/index.js.map +1 -1
- package/dist/server-static/index.d.ts +14 -14
- package/dist/server-static/index.js +26 -10
- package/dist/server-static/index.js.map +1 -1
- package/dist/server-swagger/index.d.ts +25 -184
- package/dist/server-swagger/index.js +21 -724
- package/dist/server-swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +14 -14
- package/dist/sms/index.js +9 -9
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +11 -11
- package/dist/thread/index.js +17 -17
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/index.d.ts +26 -26
- package/dist/topic/index.js +16 -16
- package/dist/topic/index.js.map +1 -1
- package/dist/topic-redis/index.d.ts +1 -1
- package/dist/vite/index.d.ts +3 -3
- package/dist/vite/index.js +8 -8
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +11 -11
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +58 -58
- package/dist/websocket/index.js +13 -13
- package/dist/websocket/index.js.map +1 -1
- package/package.json +128 -57
- package/src/api-files/index.browser.ts +17 -0
- package/src/api-files/services/FileService.ts +5 -7
- package/src/api-jobs/index.browser.ts +15 -0
- package/src/api-jobs/index.ts +1 -1
- package/src/api-jobs/{descriptors → primitives}/$job.ts +8 -8
- package/src/api-jobs/providers/JobProvider.ts +9 -9
- package/src/api-jobs/services/JobService.ts +5 -5
- package/src/api-notifications/controllers/NotificationController.ts +26 -1
- package/src/api-notifications/index.browser.ts +17 -0
- package/src/api-notifications/index.ts +6 -15
- package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
- package/src/api-notifications/schemas/notificationQuerySchema.ts +13 -0
- package/src/api-notifications/services/NotificationSenderService.ts +3 -3
- package/src/api-notifications/services/NotificationService.ts +45 -2
- package/src/api-parameters/index.browser.ts +12 -0
- package/src/api-parameters/index.ts +1 -1
- package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
- package/src/api-users/atoms/realmAuthSettingsAtom.ts +3 -1
- package/src/api-users/controllers/UserController.ts +21 -1
- package/src/api-users/index.ts +1 -1
- package/src/api-users/{descriptors → primitives}/$userRealm.ts +40 -17
- package/src/api-users/providers/UserRealmProvider.ts +2 -1
- package/src/api-users/services/SessionService.ts +2 -0
- package/src/api-users/services/UserService.ts +56 -16
- package/src/api-verifications/index.browser.ts +15 -0
- package/src/api-verifications/index.ts +1 -0
- package/src/batch/index.ts +3 -3
- package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
- package/src/batch/providers/BatchProvider.ts +0 -7
- package/src/bucket/index.ts +15 -13
- package/src/bucket/{descriptors → primitives}/$bucket.ts +8 -8
- package/src/bucket/providers/LocalFileStorageProvider.ts +3 -3
- package/src/cache/index.ts +4 -4
- package/src/cache/{descriptors → primitives}/$cache.ts +15 -15
- package/src/cli/apps/AlephaCli.ts +27 -1
- package/src/cli/apps/AlephaPackageBuilderCli.ts +27 -2
- package/src/cli/commands/CoreCommands.ts +6 -2
- package/src/cli/commands/DrizzleCommands.ts +6 -6
- package/src/cli/commands/VerifyCommands.ts +1 -1
- package/src/cli/commands/ViteCommands.ts +8 -2
- package/src/cli/services/ProjectUtils.ts +74 -78
- package/src/command/helpers/Asker.ts +10 -0
- package/src/command/index.ts +5 -5
- package/src/command/{descriptors → primitives}/$command.ts +9 -12
- package/src/command/providers/CliProvider.ts +10 -10
- package/src/core/Alepha.ts +30 -33
- package/src/core/constants/KIND.ts +1 -1
- package/src/core/constants/OPTIONS.ts +1 -1
- package/src/core/helpers/{descriptor.ts → primitive.ts} +18 -18
- package/src/core/helpers/ref.ts +1 -1
- package/src/core/index.shared.ts +8 -8
- package/src/core/{descriptors → primitives}/$context.ts +5 -5
- package/src/core/{descriptors → primitives}/$hook.ts +4 -4
- package/src/core/{descriptors → primitives}/$inject.ts +2 -2
- package/src/core/{descriptors → primitives}/$module.ts +9 -9
- package/src/core/{descriptors → primitives}/$use.ts +2 -2
- package/src/core/providers/CodecManager.ts +1 -1
- package/src/core/providers/JsonSchemaCodec.ts +1 -1
- package/src/core/providers/StateManager.ts +2 -2
- package/src/datetime/index.ts +3 -3
- package/src/datetime/{descriptors → primitives}/$interval.ts +6 -6
- package/src/email/index.ts +17 -9
- package/src/email/{descriptors → primitives}/$email.ts +8 -8
- package/src/file/index.ts +1 -1
- package/src/lock/index.ts +3 -3
- package/src/lock/{descriptors → primitives}/$lock.ts +10 -10
- package/src/logger/index.ts +8 -8
- package/src/logger/{descriptors → primitives}/$logger.ts +2 -2
- package/src/logger/services/Logger.ts +1 -1
- package/src/orm/constants/PG_SYMBOLS.ts +2 -2
- package/src/orm/index.browser.ts +2 -2
- package/src/orm/index.ts +8 -8
- package/src/orm/{descriptors → primitives}/$entity.ts +11 -11
- package/src/orm/{descriptors → primitives}/$repository.ts +2 -2
- package/src/orm/{descriptors → primitives}/$sequence.ts +8 -8
- package/src/orm/{descriptors → primitives}/$transaction.ts +4 -4
- package/src/orm/providers/PostgresTypeProvider.ts +3 -3
- package/src/orm/providers/RepositoryProvider.ts +4 -4
- package/src/orm/providers/drivers/DatabaseProvider.ts +7 -7
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -3
- package/src/orm/services/ModelBuilder.ts +9 -9
- package/src/orm/services/PgRelationManager.ts +2 -2
- package/src/orm/services/PostgresModelBuilder.ts +5 -5
- package/src/orm/services/Repository.ts +7 -7
- package/src/orm/services/SqliteModelBuilder.ts +5 -5
- package/src/queue/index.ts +7 -7
- package/src/queue/{descriptors → primitives}/$consumer.ts +15 -15
- package/src/queue/{descriptors → primitives}/$queue.ts +12 -12
- package/src/queue/providers/WorkerProvider.ts +7 -7
- package/src/retry/index.ts +3 -3
- package/src/retry/{descriptors → primitives}/$retry.ts +14 -14
- package/src/scheduler/index.ts +3 -3
- package/src/scheduler/{descriptors → primitives}/$scheduler.ts +9 -9
- package/src/scheduler/providers/CronProvider.ts +1 -1
- package/src/security/index.ts +9 -9
- package/src/security/{descriptors → primitives}/$permission.ts +7 -7
- package/src/security/{descriptors → primitives}/$realm.ts +6 -12
- package/src/security/{descriptors → primitives}/$role.ts +12 -12
- package/src/security/{descriptors → primitives}/$serviceAccount.ts +8 -8
- package/src/server/index.browser.ts +1 -1
- package/src/server/index.ts +14 -14
- package/src/server/{descriptors → primitives}/$action.ts +13 -13
- package/src/server/{descriptors → primitives}/$route.ts +9 -9
- package/src/server/providers/NodeHttpServerProvider.ts +1 -1
- package/src/server/services/HttpClient.ts +1 -1
- package/src/server-auth/index.browser.ts +1 -1
- package/src/server-auth/index.ts +6 -6
- package/src/server-auth/{descriptors → primitives}/$auth.ts +10 -10
- package/src/server-auth/{descriptors → primitives}/$authCredentials.ts +4 -4
- package/src/server-auth/{descriptors → primitives}/$authGithub.ts +4 -4
- package/src/server-auth/{descriptors → primitives}/$authGoogle.ts +4 -4
- package/src/server-auth/providers/ServerAuthProvider.ts +4 -4
- package/src/server-cache/providers/ServerCacheProvider.ts +7 -7
- package/src/server-compress/providers/ServerCompressProvider.ts +3 -3
- package/src/server-cookies/index.browser.ts +2 -2
- package/src/server-cookies/index.ts +5 -5
- package/src/server-cookies/{descriptors → primitives}/$cookie.browser.ts +12 -12
- package/src/server-cookies/{descriptors → primitives}/$cookie.ts +13 -13
- package/src/server-cookies/providers/ServerCookiesProvider.ts +6 -5
- package/src/server-cookies/services/CookieParser.ts +1 -1
- package/src/server-cors/index.ts +3 -3
- package/src/server-cors/{descriptors → primitives}/$cors.ts +11 -13
- package/src/server-cors/providers/ServerCorsProvider.ts +5 -5
- package/src/server-links/index.browser.ts +5 -5
- package/src/server-links/index.ts +9 -9
- package/src/server-links/{descriptors → primitives}/$remote.ts +11 -11
- package/src/server-links/providers/LinkProvider.ts +7 -7
- package/src/server-links/providers/{RemoteDescriptorProvider.ts → RemotePrimitiveProvider.ts} +6 -6
- package/src/server-links/providers/ServerLinksProvider.ts +3 -3
- package/src/server-proxy/index.ts +3 -3
- package/src/server-proxy/{descriptors → primitives}/$proxy.ts +8 -8
- package/src/server-proxy/providers/ServerProxyProvider.ts +4 -4
- package/src/server-rate-limit/index.ts +6 -6
- package/src/server-rate-limit/{descriptors → primitives}/$rateLimit.ts +13 -13
- package/src/server-rate-limit/providers/ServerRateLimitProvider.ts +5 -5
- package/src/server-security/index.ts +3 -3
- package/src/server-security/{descriptors → primitives}/$basicAuth.ts +13 -13
- package/src/server-security/providers/ServerBasicAuthProvider.ts +5 -5
- package/src/server-security/providers/ServerSecurityProvider.ts +4 -4
- package/src/server-static/index.ts +3 -3
- package/src/server-static/{descriptors → primitives}/$serve.ts +8 -10
- package/src/server-static/providers/ServerStaticProvider.ts +24 -9
- package/src/server-swagger/index.ts +5 -5
- package/src/server-swagger/{descriptors → primitives}/$swagger.ts +9 -9
- package/src/server-swagger/providers/ServerSwaggerProvider.ts +11 -10
- package/src/sms/index.ts +4 -4
- package/src/sms/{descriptors → primitives}/$sms.ts +8 -8
- package/src/thread/index.ts +3 -3
- package/src/thread/{descriptors → primitives}/$thread.ts +13 -13
- package/src/thread/providers/ThreadProvider.ts +7 -9
- package/src/topic/index.ts +5 -5
- package/src/topic/{descriptors → primitives}/$subscriber.ts +14 -14
- package/src/topic/{descriptors → primitives}/$topic.ts +10 -10
- package/src/topic/providers/TopicProvider.ts +4 -4
- package/src/vite/tasks/copyAssets.ts +1 -1
- package/src/vite/tasks/generateSitemap.ts +3 -3
- package/src/vite/tasks/prerenderPages.ts +2 -2
- package/src/vite/tasks/runAlepha.ts +2 -2
- package/src/websocket/index.browser.ts +3 -3
- package/src/websocket/index.shared.ts +2 -2
- package/src/websocket/index.ts +4 -4
- package/src/websocket/interfaces/WebSocketInterfaces.ts +3 -3
- package/src/websocket/{descriptors → primitives}/$channel.ts +10 -10
- package/src/websocket/{descriptors → primitives}/$websocket.ts +8 -8
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +7 -7
- package/src/websocket/providers/WebSocketServerProvider.ts +3 -3
- package/src/websocket/services/WebSocketClient.ts +5 -5
- package/dist/cli/dist-Dl9Vl7Ur.js.map +0 -1
- package/src/api-notifications/providers/MemorySmsProvider.ts +0 -20
- package/src/api-notifications/providers/SmsProvider.ts +0 -8
- /package/src/core/{descriptors → primitives}/$atom.ts +0 -0
- /package/src/core/{descriptors → primitives}/$env.ts +0 -0
- /package/src/server-auth/{descriptors → primitives}/$authApple.ts +0 -0
- /package/src/server-links/{descriptors → primitives}/$client.ts +0 -0
|
@@ -72,6 +72,11 @@ export class ProjectUtils {
|
|
|
72
72
|
|
|
73
73
|
const devDependencies: Record<string, string> = {};
|
|
74
74
|
|
|
75
|
+
if (modes.ui) {
|
|
76
|
+
dependencies["@alepha/ui"] = `^${version}`;
|
|
77
|
+
modes.react = true;
|
|
78
|
+
}
|
|
79
|
+
|
|
75
80
|
if (modes.react) {
|
|
76
81
|
dependencies["@alepha/react"] = `^${version}`;
|
|
77
82
|
dependencies.react = "^19.2.0";
|
|
@@ -79,10 +84,6 @@ export class ProjectUtils {
|
|
|
79
84
|
devDependencies["@types/react"] = "^19.2.0";
|
|
80
85
|
}
|
|
81
86
|
|
|
82
|
-
if (modes.admin) {
|
|
83
|
-
dependencies["@alepha/ui"] = `^${version}`;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
87
|
return {
|
|
87
88
|
type: "module",
|
|
88
89
|
dependencies,
|
|
@@ -174,33 +175,6 @@ export class ProjectUtils {
|
|
|
174
175
|
await Promise.all(tasks);
|
|
175
176
|
}
|
|
176
177
|
|
|
177
|
-
/**
|
|
178
|
-
* Ensure package.json exists and is configured as ES module.
|
|
179
|
-
*
|
|
180
|
-
* Similar to ensurePackageJson but only validates/sets the "type": "module" field.
|
|
181
|
-
* Throws an error if no package.json exists.
|
|
182
|
-
*
|
|
183
|
-
* @param root - The root directory of the project
|
|
184
|
-
* @throws {AlephaError} If no package.json is found
|
|
185
|
-
*/
|
|
186
|
-
public async ensurePackageJsonModule(root: string): Promise<void> {
|
|
187
|
-
const packageJsonPath = join(root, "package.json");
|
|
188
|
-
try {
|
|
189
|
-
await access(packageJsonPath);
|
|
190
|
-
} catch (error) {
|
|
191
|
-
throw new AlephaError(
|
|
192
|
-
"No package.json found in project root. Run 'npx alepha init' to create one.",
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
const content = await readFile(packageJsonPath, "utf8");
|
|
197
|
-
const packageJson = JSON.parse(content);
|
|
198
|
-
if (!packageJson.type || packageJson.type !== "module") {
|
|
199
|
-
packageJson.type = "module";
|
|
200
|
-
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
178
|
/**
|
|
205
179
|
* Ensure tsconfig.json exists in the project.
|
|
206
180
|
*
|
|
@@ -217,25 +191,30 @@ export class ProjectUtils {
|
|
|
217
191
|
*
|
|
218
192
|
* Creates a standard Alepha vite.config.ts if none exists.
|
|
219
193
|
*/
|
|
220
|
-
public async ensureViteConfig(
|
|
221
|
-
|
|
194
|
+
public async ensureViteConfig(
|
|
195
|
+
root: string,
|
|
196
|
+
serverEntry?: string,
|
|
197
|
+
): Promise<void> {
|
|
198
|
+
await this.ensureFileExists(
|
|
199
|
+
root,
|
|
200
|
+
"vite.config.ts",
|
|
201
|
+
viteConfigTs(serverEntry),
|
|
202
|
+
false,
|
|
203
|
+
);
|
|
222
204
|
}
|
|
223
205
|
|
|
224
|
-
protected async
|
|
206
|
+
protected async checkFileExists(
|
|
225
207
|
root: string,
|
|
226
208
|
name: string,
|
|
227
|
-
content: string,
|
|
228
209
|
checkParentDirectories: boolean = false,
|
|
229
|
-
): Promise<
|
|
210
|
+
): Promise<boolean> {
|
|
230
211
|
const configPath = join(root, name);
|
|
231
|
-
|
|
232
212
|
if (!checkParentDirectories) {
|
|
233
213
|
try {
|
|
234
214
|
await access(configPath);
|
|
235
|
-
return;
|
|
215
|
+
return true;
|
|
236
216
|
} catch {
|
|
237
|
-
|
|
238
|
-
return;
|
|
217
|
+
return false;
|
|
239
218
|
}
|
|
240
219
|
}
|
|
241
220
|
|
|
@@ -259,8 +238,23 @@ export class ProjectUtils {
|
|
|
259
238
|
level += 1;
|
|
260
239
|
}
|
|
261
240
|
|
|
241
|
+
return found;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
protected async ensureFileExists(
|
|
245
|
+
root: string,
|
|
246
|
+
name: string,
|
|
247
|
+
content: string,
|
|
248
|
+
checkParentDirectories: boolean = false,
|
|
249
|
+
): Promise<void> {
|
|
250
|
+
const found = await this.checkFileExists(
|
|
251
|
+
root,
|
|
252
|
+
name,
|
|
253
|
+
checkParentDirectories,
|
|
254
|
+
);
|
|
255
|
+
|
|
262
256
|
if (!found) {
|
|
263
|
-
await writeFile(
|
|
257
|
+
await writeFile(join(root, name), content);
|
|
264
258
|
}
|
|
265
259
|
}
|
|
266
260
|
|
|
@@ -277,35 +271,6 @@ export class ProjectUtils {
|
|
|
277
271
|
await this.ensureFileExists(root, "biome.json", biomeJson, true);
|
|
278
272
|
}
|
|
279
273
|
|
|
280
|
-
// ===================================================================================================================
|
|
281
|
-
// Vite Configuration
|
|
282
|
-
// ===================================================================================================================
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Get the path to Vite configuration file.
|
|
286
|
-
*
|
|
287
|
-
* Looks for an existing vite.config.ts in the project root, or creates one if it doesn't exist.
|
|
288
|
-
*
|
|
289
|
-
* @param root - The root directory of the project (defaults to process.cwd())
|
|
290
|
-
* @param serverEntry - Optional path to the server entry file to include in the config
|
|
291
|
-
* @returns Absolute path to the vite.config.ts file
|
|
292
|
-
*/
|
|
293
|
-
public async getViteConfigPath(
|
|
294
|
-
root: string,
|
|
295
|
-
serverEntry?: string,
|
|
296
|
-
): Promise<string> {
|
|
297
|
-
try {
|
|
298
|
-
const viteConfigPath = join(root, "vite.config.ts");
|
|
299
|
-
await access(viteConfigPath);
|
|
300
|
-
return viteConfigPath;
|
|
301
|
-
} catch {
|
|
302
|
-
return this.runner.writeConfigFile(
|
|
303
|
-
"vite.config.ts",
|
|
304
|
-
viteConfigTs(serverEntry),
|
|
305
|
-
);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
274
|
// ===================================================================================================================
|
|
310
275
|
// Drizzle ORM & Kit Utilities
|
|
311
276
|
// ===================================================================================================================
|
|
@@ -429,6 +394,16 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
429
394
|
},
|
|
430
395
|
};
|
|
431
396
|
|
|
397
|
+
if (options.dialect === "sqlite") {
|
|
398
|
+
let url = options.providerUrl;
|
|
399
|
+
url = url.replace("sqlite://", "").replace("file://", "");
|
|
400
|
+
url = join(options.rootDir, url);
|
|
401
|
+
|
|
402
|
+
config.dbCredentials = {
|
|
403
|
+
url,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
|
|
432
407
|
if (options.providerName === "pglite") {
|
|
433
408
|
config.driver = "pglite";
|
|
434
409
|
}
|
|
@@ -442,6 +417,24 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
442
417
|
);
|
|
443
418
|
}
|
|
444
419
|
|
|
420
|
+
public async loadEnvFile(root: string): Promise<void> {
|
|
421
|
+
const envPath = join(root, ".env");
|
|
422
|
+
try {
|
|
423
|
+
const envContent = await readFile(envPath, "utf8");
|
|
424
|
+
const lines = envContent.split("\n");
|
|
425
|
+
for (const line of lines) {
|
|
426
|
+
const [key, ...rest] = line.split("=");
|
|
427
|
+
if (key) {
|
|
428
|
+
const value = rest.join("=");
|
|
429
|
+
process.env[key.trim()] = value.trim();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
this.log.debug(`Loaded environment variables from ${envPath}`);
|
|
433
|
+
} catch {
|
|
434
|
+
this.log.debug(`No .env file found at ${envPath}, skipping load.`);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
445
438
|
/**
|
|
446
439
|
* Run a drizzle-kit command for all database providers in an Alepha instance.
|
|
447
440
|
*
|
|
@@ -459,6 +452,9 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
459
452
|
logMessage: (providerName: string, dialect: string) => string;
|
|
460
453
|
}): Promise<void> {
|
|
461
454
|
const rootDir = options.root;
|
|
455
|
+
|
|
456
|
+
await this.loadEnvFile(rootDir);
|
|
457
|
+
|
|
462
458
|
this.log.debug(`Using project root: ${rootDir}`);
|
|
463
459
|
|
|
464
460
|
const { alepha, entry } = await this.loadAlephaFromServerEntryFile(
|
|
@@ -472,8 +468,8 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
472
468
|
alepha.inject<RepositoryProvider>("RepositoryProvider");
|
|
473
469
|
const accepted = new Set<string>([]);
|
|
474
470
|
|
|
475
|
-
for (const
|
|
476
|
-
const provider =
|
|
471
|
+
for (const primitive of repositoryProvider.getRepositories()) {
|
|
472
|
+
const provider = primitive.provider;
|
|
477
473
|
const providerName = provider.name;
|
|
478
474
|
const dialect = provider.dialect;
|
|
479
475
|
|
|
@@ -513,13 +509,13 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
513
509
|
public async getPackageManager(
|
|
514
510
|
root: string,
|
|
515
511
|
): Promise<"yarn" | "pnpm" | "npm"> {
|
|
516
|
-
if (await this.
|
|
512
|
+
if (await this.checkFileExists(root, "yarn.lock", true)) {
|
|
517
513
|
return "yarn";
|
|
518
|
-
}
|
|
514
|
+
}
|
|
515
|
+
if (await this.checkFileExists(root, "pnpm-lock.yaml", true)) {
|
|
519
516
|
return "pnpm";
|
|
520
|
-
} else {
|
|
521
|
-
return "npm";
|
|
522
517
|
}
|
|
518
|
+
return "npm";
|
|
523
519
|
}
|
|
524
520
|
|
|
525
521
|
public async ensureIndexHtml(root: string) {
|
|
@@ -550,7 +546,7 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
550
546
|
}
|
|
551
547
|
}
|
|
552
548
|
|
|
553
|
-
public async
|
|
549
|
+
public async exists(root: string, dirName: string): Promise<boolean> {
|
|
554
550
|
return this.fs.exists(join(root, dirName));
|
|
555
551
|
}
|
|
556
552
|
|
|
@@ -566,5 +562,5 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
566
562
|
|
|
567
563
|
export interface DependencyModes {
|
|
568
564
|
react?: boolean;
|
|
569
|
-
|
|
565
|
+
ui?: boolean;
|
|
570
566
|
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type Static,
|
|
8
8
|
type TSchema,
|
|
9
9
|
type TString,
|
|
10
|
+
t,
|
|
10
11
|
} from "alepha";
|
|
11
12
|
import { $logger } from "alepha/logger";
|
|
12
13
|
|
|
@@ -44,6 +45,8 @@ export interface AskMethod {
|
|
|
44
45
|
question: string,
|
|
45
46
|
options?: AskOptions<T>,
|
|
46
47
|
): Promise<Static<T>>;
|
|
48
|
+
|
|
49
|
+
permission: (question: string) => Promise<boolean>;
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
export class Asker {
|
|
@@ -63,6 +66,13 @@ export class Asker {
|
|
|
63
66
|
return await this.prompt<T>(question, options);
|
|
64
67
|
};
|
|
65
68
|
|
|
69
|
+
askFn.permission = async (question: string) => {
|
|
70
|
+
const response = await this.prompt(`${question} [Y/n]`, {
|
|
71
|
+
schema: t.enum(["Y", "y", "n", "no", "yes"], { default: "Y" }),
|
|
72
|
+
});
|
|
73
|
+
return response.charAt(0).toLowerCase() === "y";
|
|
74
|
+
};
|
|
75
|
+
|
|
66
76
|
return askFn;
|
|
67
77
|
}
|
|
68
78
|
|
package/src/command/index.ts
CHANGED
|
@@ -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
|
|
21
|
+
* directly within your Alepha application, using declarative primitives.
|
|
22
22
|
*
|
|
23
|
-
* It allows you to define commands using the `$command`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
24
|
-
) =>
|
|
23
|
+
options: CommandPrimitiveOptions<T, A>,
|
|
24
|
+
) => createPrimitive(CommandPrimitive<T, A>, options);
|
|
25
25
|
|
|
26
26
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
27
27
|
|
|
28
|
-
export interface
|
|
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
|
|
89
|
+
export class CommandPrimitive<
|
|
93
90
|
T extends TObject = TObject,
|
|
94
91
|
A extends TSchema = TSchema,
|
|
95
|
-
> extends
|
|
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] =
|
|
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():
|
|
180
|
-
return this.alepha.
|
|
179
|
+
public get commands(): CommandPrimitive<any>[] {
|
|
180
|
+
return this.alepha.primitives($command);
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
protected findCommand(name: string):
|
|
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?:
|
|
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:
|
|
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(", ");
|
package/src/core/Alepha.ts
CHANGED
|
@@ -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 {
|
|
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()
|
|
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`
|
|
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`
|
|
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.
|
|
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
|
|
260
|
+
* Registry of primitives.
|
|
261
261
|
*/
|
|
262
|
-
protected
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
472
|
+
const target = this.store.get("alepha.target");
|
|
476
473
|
if (target) {
|
|
477
474
|
this.registry = new Map();
|
|
478
|
-
this.
|
|
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
|
|
878
|
+
* Get all primitives of the specified type.
|
|
882
879
|
*/
|
|
883
|
-
public
|
|
880
|
+
public primitives<TPrimitive extends Primitive>(
|
|
884
881
|
factory:
|
|
885
882
|
| {
|
|
886
|
-
[KIND]: InstantiableClass<
|
|
883
|
+
[KIND]: InstantiableClass<TPrimitive>;
|
|
887
884
|
}
|
|
888
885
|
| string,
|
|
889
|
-
): Array<
|
|
886
|
+
): Array<TPrimitive> {
|
|
890
887
|
if (typeof factory === "string") {
|
|
891
888
|
const key1 = factory.toLowerCase().replace("$", "");
|
|
892
|
-
const key2 = `${key1}
|
|
893
|
-
for (const [key, value] of this.
|
|
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<
|
|
893
|
+
return value as Array<TPrimitive>;
|
|
897
894
|
}
|
|
898
895
|
}
|
|
899
896
|
return [];
|
|
900
897
|
}
|
|
901
|
-
return (this.
|
|
902
|
-
[]) as Array<
|
|
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
|
|
926
|
-
this.
|
|
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.
|
|
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
|
|
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.
|
|
960
|
-
this.
|
|
956
|
+
const list = this.primitiveRegistry.get(kind) ?? [];
|
|
957
|
+
this.primitiveRegistry.set(kind, [...list, value]);
|
|
961
958
|
}
|
|
962
959
|
}
|
|
963
960
|
|