@h3ravel/core 1.9.7 → 1.11.0
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/dist/app.globals.d.ts +17 -0
- package/dist/index.cjs +191 -70
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +125 -35
- package/dist/index.d.ts +125 -35
- package/dist/index.js +191 -70
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -2,7 +2,6 @@ import "reflect-metadata";
|
|
|
2
2
|
import { FileSystem, Logger, PathLoader } from "@h3ravel/shared";
|
|
3
3
|
import { afterLast, dd, dump } from "@h3ravel/support";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import chalk from "chalk";
|
|
6
5
|
import { detect } from "detect-port";
|
|
7
6
|
import dotenv from "dotenv";
|
|
8
7
|
import dotenvExpand from "dotenv-expand";
|
|
@@ -101,6 +100,142 @@ var ContainerResolver = class ContainerResolver {
|
|
|
101
100
|
}
|
|
102
101
|
};
|
|
103
102
|
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/ProviderRegistry.ts
|
|
105
|
+
var ProviderRegistry = class {
|
|
106
|
+
static providers = /* @__PURE__ */ new Map();
|
|
107
|
+
static priorityMap = /* @__PURE__ */ new Map();
|
|
108
|
+
static filteredProviders = [];
|
|
109
|
+
/**
|
|
110
|
+
* Get a unique identifier for the Provider.
|
|
111
|
+
*
|
|
112
|
+
* @param provider
|
|
113
|
+
* @returns
|
|
114
|
+
*/
|
|
115
|
+
static getKey(provider) {
|
|
116
|
+
const anyProvider = provider;
|
|
117
|
+
if (typeof anyProvider.uid === "string") return anyProvider.uid;
|
|
118
|
+
if (typeof anyProvider.id === "string") return anyProvider.id;
|
|
119
|
+
return provider.name || "AnonymousProvider";
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Register one or more providers.
|
|
123
|
+
* Duplicate constructors will be ignored.
|
|
124
|
+
*
|
|
125
|
+
* @param providers
|
|
126
|
+
* @returns
|
|
127
|
+
*/
|
|
128
|
+
static register(...providers) {
|
|
129
|
+
for (const provider of this.sort(providers.concat(...this.providers.values()))) {
|
|
130
|
+
const key = this.getKey(provider);
|
|
131
|
+
this.providers.set(key, provider);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Bulk register providers from an array.
|
|
136
|
+
*
|
|
137
|
+
* @param providers
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
static registerMany(providers) {
|
|
141
|
+
for (const provider of this.sort(providers.concat(...this.providers.values()))) {
|
|
142
|
+
const key = this.getKey(provider);
|
|
143
|
+
this.providers.set(key, provider);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get all registered providers as an array.
|
|
148
|
+
*
|
|
149
|
+
* @returns
|
|
150
|
+
*/
|
|
151
|
+
static setFiltered(filtered) {
|
|
152
|
+
this.filteredProviders = filtered;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Resolve (instantiate) all providers with the given application or Service Container.
|
|
156
|
+
*
|
|
157
|
+
* @param app
|
|
158
|
+
* @returns
|
|
159
|
+
*/
|
|
160
|
+
static async resolve(app, useServiceContainer = false) {
|
|
161
|
+
const providers = Array.from(this.providers.values()).filter((e) => {
|
|
162
|
+
return !!e && (this.filteredProviders.length < 1 || !this.filteredProviders.includes(e.name));
|
|
163
|
+
});
|
|
164
|
+
return await Promise.all(providers.map(async (ProviderClass) => {
|
|
165
|
+
const provider = new ProviderClass(app);
|
|
166
|
+
if (!useServiceContainer) return Promise.resolve(provider);
|
|
167
|
+
await new ContainerResolver(app).resolveMethodParams(provider, "register", app);
|
|
168
|
+
return provider;
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Sort the service providers
|
|
173
|
+
*
|
|
174
|
+
* @param providers
|
|
175
|
+
* @returns
|
|
176
|
+
*/
|
|
177
|
+
static sort(providers) {
|
|
178
|
+
/**
|
|
179
|
+
* Base priority (default 0)
|
|
180
|
+
*/
|
|
181
|
+
providers.forEach((Provider) => {
|
|
182
|
+
const key = this.getKey(Provider);
|
|
183
|
+
this.priorityMap.set(`${Provider.name}::${key}`, Provider.priority ?? 0);
|
|
184
|
+
});
|
|
185
|
+
/**
|
|
186
|
+
* Handle before/after adjustments
|
|
187
|
+
*/
|
|
188
|
+
providers.forEach((Provider) => {
|
|
189
|
+
const order = Provider.order;
|
|
190
|
+
if (!order) return;
|
|
191
|
+
const [direction, target] = order.split(":");
|
|
192
|
+
const targetPriority = this.priorityMap.get(target) ?? 0;
|
|
193
|
+
const key = this.getKey(Provider);
|
|
194
|
+
if (direction === "before") this.priorityMap.set(`${Provider.name}::${key}`, targetPriority - 1);
|
|
195
|
+
else if (direction === "after") this.priorityMap.set(`${Provider.name}::${key}`, targetPriority + 1);
|
|
196
|
+
});
|
|
197
|
+
/**
|
|
198
|
+
* Return service providers sorted based on thier name and priority
|
|
199
|
+
*/
|
|
200
|
+
return providers.sort((A, B) => {
|
|
201
|
+
const keyA = this.getKey(A);
|
|
202
|
+
const keyB = this.getKey(B);
|
|
203
|
+
return (this.priorityMap.get(`${B.name}::${keyB}`) ?? 0) - (this.priorityMap.get(`${A.name}::${keyA}`) ?? 0);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Log the service providers in a table
|
|
208
|
+
*
|
|
209
|
+
* @param priorityMap
|
|
210
|
+
*/
|
|
211
|
+
static log(providers) {
|
|
212
|
+
const sorted = Array.from((providers ?? this.providers).values());
|
|
213
|
+
console.table(sorted.map((P) => ({
|
|
214
|
+
Name: P.constructor.name,
|
|
215
|
+
Order: P.constructor.order ?? "N/A",
|
|
216
|
+
Priority: P.constructor.priority
|
|
217
|
+
})));
|
|
218
|
+
console.info("");
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get all registered providers as an array.
|
|
222
|
+
*
|
|
223
|
+
* @returns
|
|
224
|
+
*/
|
|
225
|
+
static all() {
|
|
226
|
+
return Array.from(this.providers.values());
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Check if a provider is already registered.
|
|
230
|
+
*
|
|
231
|
+
* @param provider
|
|
232
|
+
* @returns
|
|
233
|
+
*/
|
|
234
|
+
static has(provider) {
|
|
235
|
+
return this.providers.has(this.getKey(provider));
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
|
|
104
239
|
//#endregion
|
|
105
240
|
//#region src/Registerer.ts
|
|
106
241
|
var Registerer = class Registerer {
|
|
@@ -153,6 +288,7 @@ var Application = class Application extends Container {
|
|
|
153
288
|
basePath;
|
|
154
289
|
providers = [];
|
|
155
290
|
externalProviders = [];
|
|
291
|
+
filteredProviders = [];
|
|
156
292
|
/**
|
|
157
293
|
* List of registered console commands
|
|
158
294
|
*/
|
|
@@ -174,17 +310,6 @@ var Application = class Application extends Container {
|
|
|
174
310
|
this.bind("path.base", () => this.basePath);
|
|
175
311
|
this.bind("load.paths", () => this.paths);
|
|
176
312
|
}
|
|
177
|
-
/**
|
|
178
|
-
* Dynamically register all configured providers
|
|
179
|
-
*/
|
|
180
|
-
async registerConfiguredProviders() {
|
|
181
|
-
const providers = await this.getAllProviders();
|
|
182
|
-
for (const ProviderClass of providers) {
|
|
183
|
-
if (!ProviderClass) continue;
|
|
184
|
-
const provider = new ProviderClass(this);
|
|
185
|
-
await this.register(provider);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
313
|
async loadOptions() {
|
|
189
314
|
try {
|
|
190
315
|
const corePath = FileSystem.findModulePkg("@h3ravel/core", process.cwd()) ?? "";
|
|
@@ -220,54 +345,45 @@ var Application = class Application extends Container {
|
|
|
220
345
|
* Full-Stack App: Installs database, mail, queue, cache → they self-register via their providers.
|
|
221
346
|
*/
|
|
222
347
|
async getConfiguredProviders() {
|
|
223
|
-
return [(await import("
|
|
348
|
+
return [(await import("@h3ravel/core")).CoreServiceProvider, (await import("@h3ravel/core")).ViewServiceProvider];
|
|
224
349
|
}
|
|
225
350
|
async getAllProviders() {
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Deduplicate by class reference
|
|
229
|
-
*/
|
|
230
|
-
const uniqueProviders = Array.from(new Set(allProviders));
|
|
231
|
-
return this.sortProviders(uniqueProviders);
|
|
351
|
+
return [...await this.getConfiguredProviders(), ...this.externalProviders];
|
|
232
352
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* If debug is enabled, let's show the loaded service provider info
|
|
258
|
-
*/
|
|
259
|
-
if (process.env.APP_DEBUG === "true" && process.env.EXTENDED_DEBUG !== "false" && !sorted.some((e) => e.console)) {
|
|
260
|
-
console.table(sorted.map((P) => ({
|
|
261
|
-
Provider: P.name,
|
|
262
|
-
Priority: priorityMap.get(P.name),
|
|
263
|
-
Order: P.order || "N/A"
|
|
264
|
-
})));
|
|
265
|
-
console.info(`Set ${chalk.bgCyan(" APP_DEBUG = false ")} in your .env file to hide this information`, "\n");
|
|
353
|
+
/**
|
|
354
|
+
* Configure and Dynamically register all configured service providers, then boot the app.
|
|
355
|
+
*
|
|
356
|
+
* @param providers All regitererable service providers
|
|
357
|
+
* @param filtered A list of service provider name strings we do not want to register at all cost
|
|
358
|
+
* @returns
|
|
359
|
+
*/
|
|
360
|
+
async quickStartup(providers, filtered = []) {
|
|
361
|
+
this.registerProviders(providers, filtered);
|
|
362
|
+
await this.registerConfiguredProviders();
|
|
363
|
+
return this.boot();
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Dynamically register all configured providers
|
|
367
|
+
*/
|
|
368
|
+
async registerConfiguredProviders() {
|
|
369
|
+
const providers = await this.getAllProviders();
|
|
370
|
+
ProviderRegistry.setFiltered(this.filteredProviders);
|
|
371
|
+
ProviderRegistry.registerMany(providers);
|
|
372
|
+
for (const ProviderClass of ProviderRegistry.all()) {
|
|
373
|
+
if (!ProviderClass) continue;
|
|
374
|
+
const provider = new ProviderClass(this);
|
|
375
|
+
await this.register(provider);
|
|
266
376
|
}
|
|
267
|
-
return sorted;
|
|
268
377
|
}
|
|
269
|
-
|
|
378
|
+
/**
|
|
379
|
+
* Register service providers
|
|
380
|
+
*
|
|
381
|
+
* @param providers
|
|
382
|
+
* @param filtered
|
|
383
|
+
*/
|
|
384
|
+
registerProviders(providers, filtered = []) {
|
|
270
385
|
this.externalProviders.push(...providers);
|
|
386
|
+
this.filteredProviders = filtered;
|
|
271
387
|
}
|
|
272
388
|
/**
|
|
273
389
|
* Register a provider
|
|
@@ -293,6 +409,10 @@ var Application = class Application extends Container {
|
|
|
293
409
|
*/
|
|
294
410
|
async boot() {
|
|
295
411
|
if (this.booted) return;
|
|
412
|
+
/**
|
|
413
|
+
* If debug is enabled, let's show the loaded service provider info
|
|
414
|
+
*/
|
|
415
|
+
if (process.env.APP_DEBUG === "true" && process.env.EXTENDED_DEBUG !== "false" && !this.providers.some((e) => e.console)) ProviderRegistry.log(this.providers);
|
|
296
416
|
for (const provider of this.providers) if (provider.boot) if (Container.hasAnyDecorator(provider.boot))
|
|
297
417
|
/**
|
|
298
418
|
* If the service provider is decorated use the IoC container
|
|
@@ -341,17 +461,6 @@ var Application = class Application extends Container {
|
|
|
341
461
|
}
|
|
342
462
|
}
|
|
343
463
|
/**
|
|
344
|
-
* Attempt to dynamically import an optional module
|
|
345
|
-
*/
|
|
346
|
-
async safeImport(moduleName) {
|
|
347
|
-
try {
|
|
348
|
-
const mod = await import(moduleName);
|
|
349
|
-
return mod.default ?? mod ?? {};
|
|
350
|
-
} catch {
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
464
|
* Get the base path of the app
|
|
356
465
|
*
|
|
357
466
|
* @returns
|
|
@@ -458,7 +567,8 @@ var ConsoleCommand = class {
|
|
|
458
567
|
return this.description;
|
|
459
568
|
}
|
|
460
569
|
option(key, def) {
|
|
461
|
-
|
|
570
|
+
const option = this.input.options[key] ?? def;
|
|
571
|
+
return option === "null" || option === "undefined" ? void 0 : option;
|
|
462
572
|
}
|
|
463
573
|
options(key) {
|
|
464
574
|
if (key) return this.input.options[key];
|
|
@@ -634,7 +744,16 @@ var Kernel = class {
|
|
|
634
744
|
|
|
635
745
|
//#endregion
|
|
636
746
|
//#region src/ServiceProvider.ts
|
|
637
|
-
|
|
747
|
+
const Inference = class {};
|
|
748
|
+
var ServiceProvider = class extends Inference {
|
|
749
|
+
/**
|
|
750
|
+
* The current app instance
|
|
751
|
+
*/
|
|
752
|
+
app;
|
|
753
|
+
/**
|
|
754
|
+
* Unique Identifier for the service providers
|
|
755
|
+
*/
|
|
756
|
+
static uid;
|
|
638
757
|
/**
|
|
639
758
|
* Sort order
|
|
640
759
|
*/
|
|
@@ -651,8 +770,8 @@ var ServiceProvider = class {
|
|
|
651
770
|
* List of registered console commands
|
|
652
771
|
*/
|
|
653
772
|
registeredCommands;
|
|
654
|
-
app;
|
|
655
773
|
constructor(app) {
|
|
774
|
+
super();
|
|
656
775
|
this.app = app;
|
|
657
776
|
}
|
|
658
777
|
/**
|
|
@@ -677,6 +796,9 @@ var ServiceProvider = class {
|
|
|
677
796
|
var CoreServiceProvider = class extends ServiceProvider {
|
|
678
797
|
static priority = 999;
|
|
679
798
|
register() {}
|
|
799
|
+
boot() {
|
|
800
|
+
globalThis.asset = this.app.make("asset");
|
|
801
|
+
}
|
|
680
802
|
};
|
|
681
803
|
|
|
682
804
|
//#endregion
|
|
@@ -687,7 +809,6 @@ var ViewServiceProvider = class extends ServiceProvider {
|
|
|
687
809
|
const config = this.app.make("config");
|
|
688
810
|
const edge = Edge.create({ cache: process.env.NODE_ENV === "production" });
|
|
689
811
|
edge.mount(this.app.getPath("views"));
|
|
690
|
-
edge.global("asset", this.app.make("asset"));
|
|
691
812
|
edge.global("config", config.get);
|
|
692
813
|
edge.global("app", this.app);
|
|
693
814
|
this.app.bind("edge", () => edge);
|
|
@@ -695,5 +816,5 @@ var ViewServiceProvider = class extends ServiceProvider {
|
|
|
695
816
|
};
|
|
696
817
|
|
|
697
818
|
//#endregion
|
|
698
|
-
export { Application, ConsoleCommand, ConsoleKernel, Container, ContainerResolver, Controller, CoreServiceProvider, Inject, Injectable, Kernel, Registerer, ServiceProvider, ViewServiceProvider };
|
|
819
|
+
export { Application, ConsoleCommand, ConsoleKernel, Container, ContainerResolver, Controller, CoreServiceProvider, Inject, Injectable, Kernel, ProviderRegistry, Registerer, ServiceProvider, ViewServiceProvider };
|
|
699
820
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["dependencies: any[]","app: Application","params: any[]","args: any[]","app: Application","path","nodepath","port: number","tries: number","hostname: string","e: any","path","app: Application","kernel: ConsoleKernel","app: Application","context: (event: H3Event) => HttpContext","middleware: IMiddleware[]"],"sources":["../src/Container.ts","../src/Di/ContainerResolver.ts","../src/Registerer.ts","../src/Application.ts","../src/Console/ConsoleCommand.ts","../src/Console/ConsoleKernel.ts","../src/Controller.ts","../src/Di/Inject.ts","../src/Http/Kernel.ts","../src/ServiceProvider.ts","../src/Providers/CoreServiceProvider.ts","../src/Providers/ViewServiceProvider.ts"],"sourcesContent":["import type { Bindings, IContainer, UseKey } from '@h3ravel/shared'\n\ntype IBinding = UseKey | (new (..._args: any[]) => unknown)\n\nexport class Container implements IContainer {\n private bindings = new Map<IBinding, () => unknown>()\n private singletons = new Map<IBinding, unknown>()\n\n /**\n * Check if the target has any decorators\n * \n * @param target \n * @returns \n */\n static hasAnyDecorator (target: (...prm: any[]) => any): boolean {\n if (Reflect.getMetadataKeys(target).length > 0) return true\n\n const paramLength = target.length\n\n for (let i = 0; i < paramLength; i++) {\n if (Reflect.getMetadataKeys(target, `__param_${i}`).length > 0) {\n return true\n }\n }\n\n return false\n }\n\n /**\n * Bind a transient service to the container\n */\n bind<T> (key: new (...args: any[]) => T, factory: () => T): void\n bind<T extends UseKey> (key: T, factory: () => Bindings[T]): void\n bind<T extends UseKey> (\n key: T,\n factory: () => Bindings[T] | T\n ) {\n this.bindings.set(key, factory)\n }\n\n /**\n * Bind a singleton service to the container\n */\n singleton<T extends UseKey> (\n key: T | (new (..._args: any[]) => Bindings[T]),\n factory: () => Bindings[T]\n ) {\n this.bindings.set(key, () => {\n if (!this.singletons.has(key)) {\n this.singletons.set(key, factory())\n }\n return this.singletons.get(key)!\n })\n }\n\n /**\n * Resolve a service from the container\n */\n make<T extends UseKey, X = undefined> (\n key: T | (new (..._args: any[]) => Bindings[T])\n ): X extends undefined ? Bindings[T] : X {\n /**\n * Direct factory binding\n */\n if (this.bindings.has(key)) {\n return this.bindings.get(key)!() as Bindings[T]\n }\n\n /**\n * If this is a class constructor, auto-resolve via reflection\n */\n if (typeof key === 'function') {\n return this.build(key)\n }\n\n throw new Error(\n `No binding found for key: ${typeof key === 'string' ? key : (key as any)?.name}`\n )\n }\n\n /**\n * Automatically build a class with constructor dependency injection\n */\n private build<T extends UseKey> (ClassType: new (..._args: any[]) => Bindings[T]): Bindings[T] {\n let dependencies: any[] = []\n\n if (Array.isArray((ClassType as any).__inject__)) {\n dependencies = (ClassType as any).__inject__.map((alias: any) => {\n return this.make(alias)\n })\n } else {\n const paramTypes: any[] = Reflect.getMetadata('design:paramtypes', ClassType) || []\n dependencies = paramTypes.map((dep) => this.make(dep))\n }\n\n return new ClassType(...dependencies)\n }\n\n /**\n * Check if a service is registered\n */\n has (key: UseKey): boolean {\n return this.bindings.has(key)\n }\n}\n","import 'reflect-metadata'\n\nimport { Application } from '..'\n\nexport class ContainerResolver {\n constructor(private app: Application) { }\n\n async resolveMethodParams<I extends Record<string, any>> (instance: I, method: keyof I, _default?: any) {\n /**\n * Get param types for instance method\n */\n let params: any[] = Reflect.getMetadata('design:paramtypes', instance, String(method)) || []\n\n /**\n * Ensure that the Application class is always available\n */\n if (params.length < 1 && _default) {\n params = [_default]\n }\n\n /**\n * Resolve the bound dependencies\n */\n const args: any[] = params.filter(e => ContainerResolver.isClass(e)).map((type: any) => {\n return this.app.make(type)\n })\n\n return new Promise<I>((resolve) => {\n resolve(instance[method](...args))\n })\n }\n\n static isClass (C: any) {\n return typeof C === 'function' &&\n C.prototype !== undefined &&\n Object.toString.call(C).substring(0, 5) === 'class'\n }\n}\n","import { dd, dump } from '@h3ravel/support'\n\nimport { Application } from '.'\nimport nodepath from 'node:path'\n\nexport class Registerer {\n constructor(private app: Application) { }\n\n static register (app: Application) {\n const reg = new Registerer(app)\n reg.bootRegister()\n }\n\n bootRegister () {\n globalThis.dd = dd\n globalThis.dump = dump\n globalThis.app_path = (path?: string) => this.appPath(path)\n globalThis.base_path = (path?: string) => this.basePath(path)\n globalThis.public_path = (path?: string) => this.publicPath(path)\n globalThis.storage_path = (path?: string) => this.storagePath(path)\n globalThis.database_path = (path?: string) => this.databasePath(path)\n }\n\n private appPath (path?: string) {\n return this.app.getPath(\n 'base', nodepath.join(`/${process.env.DIST_DIR ?? 'src'}/`.replace(/([^:]\\/)\\/+/g, '$1'), 'app', path ?? '')\n )\n }\n\n private basePath (path?: string) {\n return this.app.getPath('base', path)\n }\n\n private publicPath (path?: string) {\n return this.app.getPath('public', path)\n }\n\n private storagePath (path?: string) {\n return this.app.getPath('base', nodepath.join('storage', path ?? ''))\n }\n\n private databasePath (path?: string) {\n return this.app.getPath('database', path)\n }\n}\n","import 'reflect-metadata'\n\nimport { FileSystem, IApplication, IPathName, IServiceProvider, Logger } from '@h3ravel/shared'\n\nimport { Container } from './Container'\nimport { ContainerResolver } from './Di/ContainerResolver'\nimport type { H3 } from 'h3'\nimport { PathLoader } from '@h3ravel/shared'\nimport { Registerer } from './Registerer'\nimport { afterLast } from '@h3ravel/support'\nimport chalk from 'chalk'\nimport { detect } from 'detect-port'\nimport dotenv from 'dotenv'\nimport dotenvExpand from 'dotenv-expand'\nimport path from 'node:path'\nimport { readFile } from 'node:fs/promises'\nimport semver from 'semver'\n\ntype AServiceProvider = (new (_app: Application) => IServiceProvider) & IServiceProvider\n\nexport class Application extends Container implements IApplication {\n public paths = new PathLoader()\n private tries: number = 0\n private booted = false\n private versions: { [key: string]: string, app: string, ts: string } = { app: '0.0.0', ts: '0.0.0' }\n private static versions: { [key: string]: string, app: string, ts: string } = { app: '0.0.0', ts: '0.0.0' }\n private basePath: string\n\n private providers: IServiceProvider[] = []\n protected externalProviders: Array<new (_app: Application) => IServiceProvider> = []\n\n /**\n * List of registered console commands\n */\n public registeredCommands: (new (app: any, kernel: any) => any)[] = []\n\n constructor(basePath: string) {\n super()\n\n dotenvExpand.expand(dotenv.config({ quiet: true }))\n\n this.basePath = basePath\n this.setPath('base', basePath)\n this.loadOptions()\n this.registerBaseBindings()\n Registerer.register(this)\n }\n\n /**\n * Register core bindings into the container\n */\n protected registerBaseBindings () {\n this.bind(Application, () => this)\n this.bind('path.base', () => this.basePath)\n this.bind('load.paths', () => this.paths)\n }\n\n /**\n * Dynamically register all configured providers\n */\n public async registerConfiguredProviders () {\n const providers = await this.getAllProviders()\n\n for (const ProviderClass of providers) {\n if (!ProviderClass) continue\n const provider = new ProviderClass(this)\n await this.register(provider)\n }\n }\n\n protected async loadOptions () {\n try {\n const corePath = FileSystem.findModulePkg('@h3ravel/core', process.cwd()) ?? ''\n const app = JSON.parse(await readFile(path.join(process.cwd(), '/package.json'), { encoding: 'utf8' }))\n const core = JSON.parse(await readFile(path.join(corePath, 'package.json'), { encoding: 'utf8' }))\n\n if (core) {\n this.versions.app = semver.minVersion(core.version)?.version ?? this.versions.app\n Application.versions.app = this.versions.app\n }\n if (app && app.devDependencies) {\n this.versions.ts = semver.minVersion(app.devDependencies.typescript)?.version ?? this.versions.ts\n Application.versions.ts = this.versions.ts\n }\n if (app && app.dependencies) {\n const versions = Object.fromEntries(Object.entries(app.dependencies)\n .filter(([e]) => e.includes('@h3ravel'))\n .map(([name, ver]: [string, any]) => [\n afterLast(name, '/'),\n semver.minVersion(ver.includes('work') ? this.versions.app : ver)?.version\n ]))\n\n Object.assign(this.versions, versions)\n Object.assign(Application.versions, versions)\n }\n } catch { /** */ }\n }\n\n /**\n * Get all registered providers\n */\n public getRegisteredProviders () {\n return this.providers\n }\n\n /**\n * Load default and optional providers dynamically\n * \n * Auto-Registration Behavior\n * \n * Minimal App: Loads only core, config, http, router by default.\n * Full-Stack App: Installs database, mail, queue, cache → they self-register via their providers.\n */\n protected async getConfiguredProviders (): Promise<Array<AServiceProvider>> {\n return [\n (await import('@h3ravel/core')).CoreServiceProvider,\n (await import('@h3ravel/core')).ViewServiceProvider,\n ]\n }\n\n protected async getAllProviders (): Promise<Array<AServiceProvider>> {\n const coreProviders = await this.getConfiguredProviders()\n const allProviders = [...coreProviders, ...this.externalProviders]\n\n /**\n * Deduplicate by class reference\n */\n const uniqueProviders = Array.from(new Set(allProviders))\n\n return this.sortProviders(uniqueProviders)\n }\n\n private sortProviders (providers: Array<AServiceProvider>) {\n const priorityMap = new Map<string, number>()\n\n /**\n * Base priority (default 0)\n */\n providers.forEach((Provider) => {\n priorityMap.set(Provider.name, (Provider as any).priority ?? 0)\n })\n\n /**\n * Handle before/after adjustments\n */\n providers.forEach((Provider) => {\n const order = (Provider as any).order\n if (!order) return\n\n const [direction, target] = order.split(':')\n const targetPriority = priorityMap.get(target) ?? 0\n\n if (direction === 'before') {\n priorityMap.set(Provider.name, targetPriority - 1)\n } else if (direction === 'after') {\n priorityMap.set(Provider.name, targetPriority + 1)\n }\n })\n\n /**\n * Service providers sorted based on thier name and priority\n */\n const sorted = providers.sort(\n (A, B) => (priorityMap.get(B.name) ?? 0) - (priorityMap.get(A.name) ?? 0)\n )\n\n /**\n * If debug is enabled, let's show the loaded service provider info\n */\n if (process.env.APP_DEBUG === 'true' && process.env.EXTENDED_DEBUG !== 'false' && !sorted.some(e => e.console)) {\n console.table(\n sorted.map((P) => ({\n Provider: P.name,\n Priority: priorityMap.get(P.name),\n Order: (P as any).order || 'N/A',\n }))\n )\n\n console.info(`Set ${chalk.bgCyan(' APP_DEBUG = false ')} in your .env file to hide this information`, '\\n')\n }\n\n return sorted\n }\n\n registerProviders (providers: Array<AServiceProvider>): void {\n this.externalProviders.push(...providers)\n }\n\n /**\n * Register a provider\n */\n public async register (provider: IServiceProvider) {\n await new ContainerResolver(this).resolveMethodParams(provider, 'register', this)\n if (provider.registeredCommands && provider.registeredCommands.length > 0) {\n this.registeredCommands.push(...provider.registeredCommands)\n }\n this.providers.push(provider)\n }\n\n /**\n * checks if the application is running in CLI\n */\n public runningInConsole (): boolean {\n return typeof process !== 'undefined'\n && !!process.stdout\n && !!process.stdin\n\n }\n\n public getRuntimeEnv (): 'browser' | 'node' | 'unknown' {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return 'browser'\n }\n if (typeof process !== 'undefined' && process.versions?.node) {\n return 'node'\n }\n return 'unknown'\n }\n\n /**\n * Boot all service providers after registration\n */\n public async boot () {\n if (this.booted) return\n\n for (const provider of this.providers) {\n if (provider.boot) {\n if (Container.hasAnyDecorator(provider.boot)) {\n /**\n * If the service provider is decorated use the IoC container\n */\n await this.make<any>(provider.boot)\n } else {\n /**\n * Otherwise instantiate manually so that we can at least\n * pass the app instance\n */\n await provider.boot(this)\n }\n }\n }\n\n this.booted = true\n }\n\n /**\n * Fire up the developement server using the user provided arguments\n * \n * Port will be auto assigned if provided one is not available\n * \n * @param h3App The current H3 app instance\n * @param preferedPort If provided, this will overide the port set in the evironment\n */\n public async fire (h3App: H3, preferedPort?: number) {\n const serve = this.make('http.serve')\n\n const port: number = preferedPort ?? env('PORT', 3000)\n const tries: number = env('RETRIES', 1)\n const hostname: string = env('HOSTNAME', 'localhost')\n\n try {\n const realPort = await detect(port)\n\n if (port == realPort) {\n const server = serve(h3App, {\n port,\n hostname,\n silent: true,\n })\n\n Logger.parse([\n ['🚀 H3ravel running at:', 'green'],\n [`${server.options.protocol ?? 'http'}://${server.options.hostname}:${server.options.port}`, 'cyan']]\n )\n } else if (this.tries <= tries) {\n await this.fire(h3App, realPort)\n this.tries++\n } else {\n Logger.parse([\n ['ERROR:', 'bgRed'],\n ['No free port available', 'red'],\n ])\n }\n } catch (e: any) {\n Logger.parse([\n ['An error occured', 'bgRed'],\n [e.message, 'red'],\n [e.stack, 'red']\n ], '\\n')\n }\n }\n\n /**\n * Attempt to dynamically import an optional module\n */\n private async safeImport (moduleName: string) {\n try {\n const mod = await import(moduleName)\n return mod.default ?? mod ?? {}\n } catch {\n return null\n }\n }\n\n /**\n * Get the base path of the app\n * \n * @returns \n */\n getBasePath (): string {\n return this.basePath\n }\n\n /**\n * Dynamically retrieves a path property from the class.\n * Any property ending with \"Path\" is accessible automatically.\n *\n * @param name - The base name of the path property\n * @returns \n */\n getPath (name: IPathName, suffix?: string) {\n return path.join(this.paths.getPath(name, this.basePath), suffix ?? '')\n }\n\n /**\n * Programatically set the paths.\n *\n * @param name - The base name of the path property\n * @param path - The new path\n * @returns \n */\n setPath (name: IPathName, path: string) {\n return this.paths.setPath(name, path, this.basePath)\n }\n\n /**\n * Returns the installed version of the system core and typescript.\n *\n * @returns \n */\n getVersion (key: string) {\n return this.versions[key]?.replaceAll(/\\^|~/g, '')\n }\n\n /**\n * Returns the installed version of the system core and typescript.\n *\n * @returns \n */\n static getVersion (key: string) {\n return this.versions[key]?.replaceAll(/\\^|~/g, '')\n }\n}\n","import type { Argument, Command } from 'commander'\n\nimport { Application } from '../Application'\nimport { ConsoleKernel } from './ConsoleKernel'\nimport { XGeneric } from '@h3ravel/support'\n\nexport class ConsoleCommand {\n constructor(protected app: Application, protected kernel: ConsoleKernel) { }\n\n /**\n * The underlying commander instance.\n *\n * @var Command\n */\n public program!: Command\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature!: string\n\n /**\n * A dictionary of signatures or what not.\n *\n * @var object\n */\n protected dictionary: Record<string, any> = {}\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description?: string\n\n /**\n * The console command input.\n *\n * @var object\n */\n private input: XGeneric<{ options: Record<string, any>, arguments: Record<string, any> }> = {\n options: {},\n arguments: {},\n }\n\n /**\n * Execute the console command.\n */\n public async handle (..._args: any[]): Promise<void> { }\n\n setApplication (app: Application) {\n this.app = app\n }\n\n setInput (\n options: XGeneric,\n args: string[],\n regArgs: readonly Argument[],\n dictionary: Record<string, any>,\n program: Command,\n ) {\n this.program = program\n this.dictionary = dictionary\n this.input.options = options\n this.input.arguments = regArgs\n .map((e, i) => ({ [e.name()]: args[i] }))\n .reduce((e, x) => Object.assign(e, x), {})\n this.loadBaseFlags()\n }\n\n getSignature () {\n return this.signature\n }\n\n getDescription () {\n return this.description\n }\n\n option (key: string, def?: any) {\n return this.input.options[key] ?? def\n }\n\n options (key?: string) {\n if (key) {\n return this.input.options[key]\n }\n return this.input.options\n }\n\n argument (key: string, def?: any) {\n return this.input.arguments[key] ?? def\n }\n\n arguments () {\n return this.input.arguments\n }\n\n loadBaseFlags () {\n this.input.options.lock = this.program.getOptionValue('lock') ?? false\n this.input.options.quiet = this.program.getOptionValue('quiet') ?? false\n this.input.options.silent = this.program.getOptionValue('silent') ?? false\n this.input.options.verbose = this.program.getOptionValue('verbose') ?? 0\n }\n}\n","import { Application } from '../Application'\nimport { Logger } from '@h3ravel/shared'\nimport { XGeneric } from '@h3ravel/support'\nimport { mkdir } from 'node:fs/promises'\n\nexport class ConsoleKernel {\n public cwd!: string\n public output = typeof Logger\n public basePath: string = ''\n public modulePath!: string\n public consolePath!: string\n public modulePackage!: XGeneric<{ version: string }>\n public consolePackage!: XGeneric<{ version: string }>\n\n constructor(public app: Application) { }\n\n async ensureDirectoryExists (dir: string) {\n await mkdir(dir, { recursive: true })\n }\n}\n","import { Application } from '.'\nimport { IController } from '@h3ravel/shared'\n\n/**\n * Base controller class\n */\nexport abstract class Controller implements IController {\n protected app: Application\n\n constructor(app: Application) {\n this.app = app\n }\n\n public show (..._ctx: any[]): any { return }\n public index (..._ctx: any[]): any { return }\n public store (..._ctx: any[]): any { return }\n public update (..._ctx: any[]): any { return }\n public destroy (..._ctx: any[]): any { return }\n}\n","export function Inject (...dependencies: string[]) {\n return function (target: any) {\n target.__inject__ = dependencies\n }\n}\n\n/**\n * Allows binding dependencies to both class and class methods \n * \n * @returns \n */\nexport function Injectable (): ClassDecorator & MethodDecorator {\n return (...args: any[]) => {\n if (args.length === 1) {\n void args[0] // class target\n }\n if (args.length === 3) {\n void args[0] // target\n void args[1] // propertyKey\n void args[2] // descriptor\n }\n }\n}\n\n// export function Injectable (): MethodDecorator & ClassDecorator {\n// return ((_target: any, _propertyKey?: string, descriptor?: PropertyDescriptor) => {\n// if (descriptor) {\n// const original = descriptor.value;\n// descriptor.value = async function (...args: any[]) {\n// const resolvedArgs = await Promise.all(args);\n// return original.apply(this, resolvedArgs);\n// };\n// }\n// }) as any;\n// }\n","import { HttpContext, IMiddleware } from '@h3ravel/shared'\n\nimport type { H3Event } from 'h3'\n\n/**\n * Kernel class handles middleware execution and response transformations.\n * It acts as the core middleware pipeline for HTTP requests.\n */\nexport class Kernel {\n /**\n * @param context - A factory function that converts an H3Event into an HttpContext.\n * @param middleware - An array of middleware classes that will be executed in sequence.\n */\n constructor(\n protected context: (event: H3Event) => HttpContext,\n protected middleware: IMiddleware[] = [],\n ) { }\n\n /**\n * Handles an incoming request and passes it through middleware before invoking the next handler.\n * \n * @param event - The raw H3 event object.\n * @param next - A callback function that represents the next layer (usually the controller or final handler).\n * @returns A promise resolving to the result of the request pipeline.\n */\n async handle (\n event: H3Event,\n next: (ctx: HttpContext) => Promise<unknown>\n ): Promise<unknown> {\n /**\n * Convert the raw event into a standardized HttpContext\n */\n const ctx = this.context(event)\n const { app } = ctx.request\n\n /**\n * Initialize the view handler method\n * \n * @param template \n * @param params \n * @returns \n */\n const view = async (template: string, params?: Record<string, any>) => {\n const edge = app.make('edge')\n return ctx.response.html(await edge.render(template, params))\n }\n\n /**\n * Bind the view method to the global variable space\n */\n globalThis.view = view\n\n /**\n * Dynamically bind the view renderer to the service container.\n * This allows any part of the request lifecycle to render templates using Edge.\n */\n app.bind('view', () => view)\n\n /**\n * Run middleware stack and obtain result\n */\n const result = await this.runMiddleware(ctx, () => next(ctx))\n\n /**\n * If a plain object is returned from a controller or middleware,\n * automatically set the JSON Content-Type header for the response.\n */\n if (result !== undefined && this.isPlainObject(result)) {\n event.res.headers.set('Content-Type', 'application/json; charset=UTF-8')\n }\n\n return result\n }\n\n /**\n * Sequentially runs middleware in the order they were registered.\n * \n * @param context - The standardized HttpContext.\n * @param next - Callback to execute when middleware completes.\n * @returns A promise resolving to the final handler's result.\n */\n private async runMiddleware (\n context: HttpContext,\n next: (ctx: HttpContext) => Promise<unknown>\n ) {\n let index = -1\n\n const runner = async (i: number): Promise<unknown> => {\n if (i <= index) throw new Error('next() called multiple times')\n index = i\n const middleware = this.middleware[i]\n\n if (middleware) {\n /**\n * Execute the current middleware and proceed to the next one\n */\n return middleware.handle(context, () => runner(i + 1))\n } else {\n /**\n * If no more middleware, call the final handler\n */\n return next(context)\n }\n }\n\n return runner(0)\n }\n\n /**\n * Utility function to determine if a value is a plain object or array.\n * \n * @param value - The value to check.\n * @returns True if the value is a plain object or array, otherwise false.\n */\n private isPlainObject (value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || value.constructor === Array)\n }\n}\n","import { Application } from './Application'\nimport { IServiceProvider } from '@h3ravel/shared'\n\nexport abstract class ServiceProvider implements IServiceProvider {\n /**\n * Sort order\n */\n\n public static order?: `before:${string}` | `after:${string}` | string | undefined\n\n /**\n * Sort priority\n */\n public static priority = 0\n\n /**\n * Indicate that this service provider only runs in console\n */\n public static console = false\n\n /**\n * List of registered console commands\n */\n public registeredCommands?: (new (app: any, kernel: any) => any)[]\n\n protected app: Application\n\n constructor(app: Application) {\n this.app = app\n }\n\n /**\n * Register bindings to the container.\n * Runs before boot().\n */\n abstract register (...app: unknown[]): void | Promise<void>;\n\n /**\n * Perform post-registration booting of services.\n * Runs after all providers have been registered.\n */\n boot?(...app: unknown[]): void | Promise<void>;\n\n /**\n * An array of console commands to register.\n */\n commands (commands: (new (app: any, kernel: any) => any)[]): void {\n this.registeredCommands = commands\n }\n}\n","import 'reflect-metadata'\n\nimport { ServiceProvider } from '../ServiceProvider'\n\n/**\n * Bootstraps core services and bindings.\n * \n * Bind essential services to the container (logger, config repository).\n * Register app-level singletons.\n * Set up exception handling.\n * \n * Auto-Registered\n */\nexport class CoreServiceProvider extends ServiceProvider {\n public static priority = 999\n\n register () {\n }\n}\n","import { Edge } from 'edge.js'\nimport { ServiceProvider } from '../ServiceProvider'\n\nexport class ViewServiceProvider extends ServiceProvider {\n public static priority = 995\n\n register (): void {\n const config = this.app.make('config')\n const edge = Edge.create({\n cache: process.env.NODE_ENV === 'production'\n })\n\n edge.mount(this.app.getPath('views'))\n\n edge.global('asset', this.app.make('asset'))\n edge.global('config', config.get)\n edge.global('app', this.app)\n\n this.app.bind('edge', () => edge)\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["dependencies: any[]","app: Application","params: any[]","args: any[]","app: Application","path","nodepath","port: number","tries: number","hostname: string","e: any","path","app: Application","kernel: ConsoleKernel","app: Application","context: (event: H3Event) => HttpContext","middleware: IMiddleware[]"],"sources":["../src/Container.ts","../src/Di/ContainerResolver.ts","../src/ProviderRegistry.ts","../src/Registerer.ts","../src/Application.ts","../src/Console/ConsoleCommand.ts","../src/Console/ConsoleKernel.ts","../src/Controller.ts","../src/Di/Inject.ts","../src/Http/Kernel.ts","../src/ServiceProvider.ts","../src/Providers/CoreServiceProvider.ts","../src/Providers/ViewServiceProvider.ts"],"sourcesContent":["import type { Bindings, IContainer, UseKey } from '@h3ravel/shared'\n\ntype IBinding = UseKey | (new (..._args: any[]) => unknown)\n\nexport class Container implements IContainer {\n private bindings = new Map<IBinding, () => unknown>()\n private singletons = new Map<IBinding, unknown>()\n\n /**\n * Check if the target has any decorators\n * \n * @param target \n * @returns \n */\n static hasAnyDecorator (target: (...prm: any[]) => any): boolean {\n if (Reflect.getMetadataKeys(target).length > 0) return true\n\n const paramLength = target.length\n\n for (let i = 0; i < paramLength; i++) {\n if (Reflect.getMetadataKeys(target, `__param_${i}`).length > 0) {\n return true\n }\n }\n\n return false\n }\n\n /**\n * Bind a transient service to the container\n */\n bind<T> (key: new (...args: any[]) => T, factory: () => T): void\n bind<T extends UseKey> (key: T, factory: () => Bindings[T]): void\n bind<T extends UseKey> (\n key: T,\n factory: () => Bindings[T] | T\n ) {\n this.bindings.set(key, factory)\n }\n\n /**\n * Bind a singleton service to the container\n */\n singleton<T extends UseKey> (\n key: T | (new (..._args: any[]) => Bindings[T]),\n factory: () => Bindings[T]\n ) {\n this.bindings.set(key, () => {\n if (!this.singletons.has(key)) {\n this.singletons.set(key, factory())\n }\n return this.singletons.get(key)!\n })\n }\n\n /**\n * Resolve a service from the container\n */\n make<T extends UseKey, X = undefined> (\n key: T | (new (..._args: any[]) => Bindings[T])\n ): X extends undefined ? Bindings[T] : X {\n /**\n * Direct factory binding\n */\n if (this.bindings.has(key)) {\n return this.bindings.get(key)!() as Bindings[T]\n }\n\n /**\n * If this is a class constructor, auto-resolve via reflection\n */\n if (typeof key === 'function') {\n return this.build(key)\n }\n\n throw new Error(\n `No binding found for key: ${typeof key === 'string' ? key : (key as any)?.name}`\n )\n }\n\n /**\n * Automatically build a class with constructor dependency injection\n */\n private build<T extends UseKey> (ClassType: new (..._args: any[]) => Bindings[T]): Bindings[T] {\n let dependencies: any[] = []\n\n if (Array.isArray((ClassType as any).__inject__)) {\n dependencies = (ClassType as any).__inject__.map((alias: any) => {\n return this.make(alias)\n })\n } else {\n const paramTypes: any[] = Reflect.getMetadata('design:paramtypes', ClassType) || []\n dependencies = paramTypes.map((dep) => this.make(dep))\n }\n\n return new ClassType(...dependencies)\n }\n\n /**\n * Check if a service is registered\n */\n has (key: UseKey): boolean {\n return this.bindings.has(key)\n }\n}\n","import 'reflect-metadata'\n\nimport { Application } from '..'\n\nexport class ContainerResolver {\n constructor(private app: Application) { }\n\n async resolveMethodParams<I extends Record<string, any>> (instance: I, method: keyof I, _default?: any) {\n /**\n * Get param types for instance method\n */\n let params: any[] = Reflect.getMetadata('design:paramtypes', instance, String(method)) || []\n\n /**\n * Ensure that the Application class is always available\n */\n if (params.length < 1 && _default) {\n params = [_default]\n }\n\n /**\n * Resolve the bound dependencies\n */\n const args: any[] = params.filter(e => ContainerResolver.isClass(e)).map((type: any) => {\n return this.app.make(type)\n })\n\n return new Promise<I>((resolve) => {\n resolve(instance[method](...args))\n })\n }\n\n static isClass (C: any) {\n return typeof C === 'function' &&\n C.prototype !== undefined &&\n Object.toString.call(C).substring(0, 5) === 'class'\n }\n}\n","import type { Application } from './Application'\nimport { ContainerResolver } from '../src/Di/ContainerResolver'\nimport { ServiceProvider } from './ServiceProvider'\n\ntype ProviderCtor = (new (_app: Application) => ServiceProvider) & Partial<ServiceProvider>\n\nexport class ProviderRegistry {\n private static providers = new Map<string, ProviderCtor>()\n private static priorityMap = new Map<string, number>()\n private static filteredProviders: string[] = []\n\n /**\n * Get a unique identifier for the Provider.\n * \n * @param provider \n * @returns \n */\n private static getKey (provider: ProviderCtor): string {\n // If provider has a declared static uid/id → prefer that\n const anyProvider = provider as any\n if (typeof anyProvider.uid === 'string') {\n return anyProvider.uid\n }\n if (typeof anyProvider.id === 'string') {\n return anyProvider.id\n }\n\n // Otherwise fallback to class name + source file (if available)\n // Works for both Node.js (filename from stack) and bundlers\n return provider.name || 'AnonymousProvider'\n }\n\n /**\n * Register one or more providers.\n * Duplicate constructors will be ignored.\n * \n * @param providers \n * @returns \n */\n static register (...providers: ProviderCtor[]): void {\n for (const provider of this.sort(providers.concat(...this.providers.values()))) {\n const key = this.getKey(provider)\n this.providers.set(key, provider)\n }\n }\n\n /**\n * Bulk register providers from an array.\n * \n * @param providers \n * @returns \n */\n static registerMany (providers: ProviderCtor[]): void {\n for (const provider of this.sort(providers.concat(...this.providers.values()))) {\n const key = this.getKey(provider)\n this.providers.set(key, provider)\n }\n }\n\n /**\n * Get all registered providers as an array.\n * \n * @returns \n */\n static setFiltered (filtered: string[]): void {\n this.filteredProviders = filtered\n }\n\n /**\n * Resolve (instantiate) all providers with the given application or Service Container.\n * \n * @param app \n * @returns \n */\n static async resolve (app: Application, useServiceContainer: boolean = false): Promise<ServiceProvider[]> {\n\n // Remove all filtered service providers \n const providers = Array.from(this.providers.values()).filter(e => {\n return !!e && (this.filteredProviders.length < 1 || !this.filteredProviders.includes(e.name))\n })\n\n return await Promise.all(providers.map(async (ProviderClass) => {\n // Don't bind to the service container if we don't have to\n const provider = new ProviderClass(app)\n if (!useServiceContainer) return Promise.resolve(provider)\n\n // Bind to the service container\n await new ContainerResolver(app).resolveMethodParams(provider, 'register', app)\n return provider\n }))\n }\n\n /**\n * Sort the service providers\n * \n * @param providers \n * @returns \n */\n static sort (providers: ProviderCtor[]) {\n /**\n * Base priority (default 0)\n */\n providers.forEach((Provider) => {\n const key = this.getKey(Provider)\n this.priorityMap.set(`${Provider.name}::${key}`, (Provider as any).priority ?? 0)\n })\n\n /**\n * Handle before/after adjustments\n */\n providers.forEach((Provider) => {\n const order = (Provider as any).order\n if (!order) return\n\n const [direction, target] = order.split(':')\n const targetPriority = this.priorityMap.get(target) ?? 0\n const key = this.getKey(Provider)\n\n if (direction === 'before') {\n this.priorityMap.set(`${Provider.name}::${key}`, targetPriority - 1)\n } else if (direction === 'after') {\n this.priorityMap.set(`${Provider.name}::${key}`, targetPriority + 1)\n }\n })\n\n /**\n * Return service providers sorted based on thier name and priority\n */\n return providers.sort(\n (A, B) => {\n const keyA = this.getKey(A)\n const keyB = this.getKey(B)\n return (this.priorityMap.get(`${B.name}::${keyB}`) ?? 0) - (this.priorityMap.get(`${A.name}::${keyA}`) ?? 0)\n }\n )\n }\n\n /**\n * Log the service providers in a table\n * \n * @param priorityMap \n */\n static log<P extends ServiceProvider> (providers?: Array<P> | Map<string, P>) {\n const sorted = Array.from(((providers as unknown as P[]) ?? this.providers).values())\n\n console.table(\n sorted.map((P: any) => ({\n Name: P.constructor.name,\n Order: P.constructor.order ?? 'N/A',\n Priority: P.constructor.priority,\n }))\n )\n\n console.info('')\n }\n\n /**\n * Get all registered providers as an array.\n * \n * @returns \n */\n static all (): ProviderCtor[] {\n return Array.from(this.providers.values())\n }\n\n /**\n * Check if a provider is already registered.\n * \n * @param provider \n * @returns \n */\n static has (provider: ProviderCtor): boolean {\n return this.providers.has(this.getKey(provider))\n }\n}\n","import { dd, dump } from '@h3ravel/support'\n\nimport { Application } from '.'\nimport nodepath from 'node:path'\n\nexport class Registerer {\n constructor(private app: Application) { }\n\n static register (app: Application) {\n const reg = new Registerer(app)\n reg.bootRegister()\n }\n\n bootRegister () {\n globalThis.dd = dd\n globalThis.dump = dump\n globalThis.app_path = (path?: string) => this.appPath(path)\n globalThis.base_path = (path?: string) => this.basePath(path)\n globalThis.public_path = (path?: string) => this.publicPath(path)\n globalThis.storage_path = (path?: string) => this.storagePath(path)\n globalThis.database_path = (path?: string) => this.databasePath(path)\n }\n\n private appPath (path?: string) {\n return this.app.getPath(\n 'base', nodepath.join(`/${process.env.DIST_DIR ?? 'src'}/`.replace(/([^:]\\/)\\/+/g, '$1'), 'app', path ?? '')\n )\n }\n\n private basePath (path?: string) {\n return this.app.getPath('base', path)\n }\n\n private publicPath (path?: string) {\n return this.app.getPath('public', path)\n }\n\n private storagePath (path?: string) {\n return this.app.getPath('base', nodepath.join('storage', path ?? ''))\n }\n\n private databasePath (path?: string) {\n return this.app.getPath('database', path)\n }\n}\n","import 'reflect-metadata'\n\nimport { FileSystem, IApplication, IPathName, Logger } from '@h3ravel/shared'\n\nimport { Container } from './Container'\nimport { ContainerResolver } from './Di/ContainerResolver'\nimport type { H3 } from 'h3'\nimport { PathLoader } from '@h3ravel/shared'\nimport { ProviderRegistry } from './ProviderRegistry'\nimport { Registerer } from './Registerer'\nimport { ServiceProvider } from './ServiceProvider'\nimport { afterLast } from '@h3ravel/support'\nimport { detect } from 'detect-port'\nimport dotenv from 'dotenv'\nimport dotenvExpand from 'dotenv-expand'\nimport path from 'node:path'\nimport { readFile } from 'node:fs/promises'\nimport semver from 'semver'\n\ntype AServiceProvider = (new (_app: Application) => ServiceProvider) & Partial<ServiceProvider>\n\nexport class Application extends Container implements IApplication {\n public paths = new PathLoader()\n private tries: number = 0\n private booted = false\n private versions: { [key: string]: string, app: string, ts: string } = { app: '0.0.0', ts: '0.0.0' }\n private static versions: { [key: string]: string, app: string, ts: string } = { app: '0.0.0', ts: '0.0.0' }\n private basePath: string\n\n private providers: ServiceProvider[] = []\n protected externalProviders: Array<AServiceProvider> = []\n protected filteredProviders: Array<string> = []\n\n /**\n * List of registered console commands\n */\n public registeredCommands: (new (app: any, kernel: any) => any)[] = []\n\n constructor(basePath: string) {\n super()\n\n dotenvExpand.expand(dotenv.config({ quiet: true }))\n\n this.basePath = basePath\n this.setPath('base', basePath)\n this.loadOptions()\n this.registerBaseBindings()\n Registerer.register(this)\n }\n\n /**\n * Register core bindings into the container\n */\n protected registerBaseBindings () {\n this.bind(Application, () => this)\n this.bind('path.base', () => this.basePath)\n this.bind('load.paths', () => this.paths)\n }\n\n protected async loadOptions () {\n try {\n const corePath = FileSystem.findModulePkg('@h3ravel/core', process.cwd()) ?? ''\n const app = JSON.parse(await readFile(path.join(process.cwd(), '/package.json'), { encoding: 'utf8' }))\n const core = JSON.parse(await readFile(path.join(corePath, 'package.json'), { encoding: 'utf8' }))\n\n if (core) {\n this.versions.app = semver.minVersion(core.version)?.version ?? this.versions.app\n Application.versions.app = this.versions.app\n }\n if (app && app.devDependencies) {\n this.versions.ts = semver.minVersion(app.devDependencies.typescript)?.version ?? this.versions.ts\n Application.versions.ts = this.versions.ts\n }\n if (app && app.dependencies) {\n const versions = Object.fromEntries(Object.entries(app.dependencies)\n .filter(([e]) => e.includes('@h3ravel'))\n .map(([name, ver]: [string, any]) => [\n afterLast(name, '/'),\n semver.minVersion(ver.includes('work') ? this.versions.app : ver)?.version\n ]))\n\n Object.assign(this.versions, versions)\n Object.assign(Application.versions, versions)\n }\n } catch { /** */ }\n }\n\n /**\n * Get all registered providers\n */\n public getRegisteredProviders () {\n return this.providers\n }\n\n /**\n * Load default and optional providers dynamically\n * \n * Auto-Registration Behavior\n * \n * Minimal App: Loads only core, config, http, router by default.\n * Full-Stack App: Installs database, mail, queue, cache → they self-register via their providers.\n */\n protected async getConfiguredProviders (): Promise<Array<AServiceProvider>> {\n return [\n (await import('@h3ravel/core')).CoreServiceProvider,\n (await import('@h3ravel/core')).ViewServiceProvider,\n ]\n }\n\n protected async getAllProviders (): Promise<Array<AServiceProvider>> {\n const coreProviders = await this.getConfiguredProviders()\n return [...coreProviders, ...this.externalProviders]\n }\n\n /**\n * Configure and Dynamically register all configured service providers, then boot the app.\n * \n * @param providers All regitererable service providers\n * @param filtered A list of service provider name strings we do not want to register at all cost\n * @returns \n */\n public async quickStartup (providers: Array<AServiceProvider>, filtered: string[] = []) {\n this.registerProviders(providers, filtered)\n await this.registerConfiguredProviders()\n return this.boot()\n }\n\n /**\n * Dynamically register all configured providers\n */\n public async registerConfiguredProviders () {\n const providers = await this.getAllProviders()\n\n ProviderRegistry.setFiltered(this.filteredProviders)\n ProviderRegistry.registerMany(providers)\n\n for (const ProviderClass of ProviderRegistry.all()) {\n if (!ProviderClass) continue\n const provider = new ProviderClass(this)\n await this.register(provider)\n }\n }\n\n /**\n * Register service providers\n * \n * @param providers \n * @param filtered \n */\n registerProviders (providers: Array<AServiceProvider>, filtered: string[] = []): void {\n this.externalProviders.push(...providers)\n this.filteredProviders = filtered\n }\n\n /**\n * Register a provider\n */\n public async register (provider: ServiceProvider) {\n await new ContainerResolver(this).resolveMethodParams(provider, 'register', this)\n if (provider.registeredCommands && provider.registeredCommands.length > 0) {\n this.registeredCommands.push(...provider.registeredCommands)\n }\n this.providers.push(provider)\n }\n\n /**\n * checks if the application is running in CLI\n */\n public runningInConsole (): boolean {\n return typeof process !== 'undefined'\n && !!process.stdout\n && !!process.stdin\n\n }\n\n public getRuntimeEnv (): 'browser' | 'node' | 'unknown' {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return 'browser'\n }\n if (typeof process !== 'undefined' && process.versions?.node) {\n return 'node'\n }\n return 'unknown'\n }\n\n /**\n * Boot all service providers after registration\n */\n public async boot () {\n\n if (this.booted) return\n\n /**\n * If debug is enabled, let's show the loaded service provider info\n */\n if (process.env.APP_DEBUG === 'true' && process.env.EXTENDED_DEBUG !== 'false' && !this.providers.some(e => e.console)) {\n ProviderRegistry.log(this.providers)\n }\n\n for (const provider of this.providers) {\n if (provider.boot) {\n if (Container.hasAnyDecorator(provider.boot)) {\n /**\n * If the service provider is decorated use the IoC container\n */\n await this.make<any>(provider.boot)\n } else {\n /**\n * Otherwise instantiate manually so that we can at least\n * pass the app instance\n */\n await provider.boot(this)\n }\n }\n }\n\n this.booted = true\n }\n\n /**\n * Fire up the developement server using the user provided arguments\n * \n * Port will be auto assigned if provided one is not available\n * \n * @param h3App The current H3 app instance\n * @param preferedPort If provided, this will overide the port set in the evironment\n */\n public async fire (h3App: H3, preferedPort?: number) {\n const serve = this.make('http.serve')\n\n const port: number = preferedPort ?? env('PORT', 3000)\n const tries: number = env('RETRIES', 1)\n const hostname: string = env('HOSTNAME', 'localhost')\n\n try {\n const realPort = await detect(port)\n\n if (port == realPort) {\n const server = serve(h3App, {\n port,\n hostname,\n silent: true,\n })\n\n Logger.parse([\n ['🚀 H3ravel running at:', 'green'],\n [`${server.options.protocol ?? 'http'}://${server.options.hostname}:${server.options.port}`, 'cyan']]\n )\n } else if (this.tries <= tries) {\n await this.fire(h3App, realPort)\n this.tries++\n } else {\n Logger.parse([\n ['ERROR:', 'bgRed'],\n ['No free port available', 'red'],\n ])\n }\n } catch (e: any) {\n Logger.parse([\n ['An error occured', 'bgRed'],\n [e.message, 'red'],\n [e.stack, 'red']\n ], '\\n')\n }\n }\n\n /**\n * Get the base path of the app\n * \n * @returns \n */\n getBasePath (): string {\n return this.basePath\n }\n\n /**\n * Dynamically retrieves a path property from the class.\n * Any property ending with \"Path\" is accessible automatically.\n *\n * @param name - The base name of the path property\n * @returns \n */\n getPath (name: IPathName, suffix?: string) {\n return path.join(this.paths.getPath(name, this.basePath), suffix ?? '')\n }\n\n /**\n * Programatically set the paths.\n *\n * @param name - The base name of the path property\n * @param path - The new path\n * @returns \n */\n setPath (name: IPathName, path: string) {\n return this.paths.setPath(name, path, this.basePath)\n }\n\n /**\n * Returns the installed version of the system core and typescript.\n *\n * @returns \n */\n getVersion (key: string) {\n return this.versions[key]?.replaceAll(/\\^|~/g, '')\n }\n\n /**\n * Returns the installed version of the system core and typescript.\n *\n * @returns \n */\n static getVersion (key: string) {\n return this.versions[key]?.replaceAll(/\\^|~/g, '')\n }\n}\n","import type { Argument, Command } from 'commander'\n\nimport { Application } from '../Application'\nimport { ConsoleKernel } from './ConsoleKernel'\nimport { XGeneric } from '@h3ravel/support'\n\nexport class ConsoleCommand {\n constructor(protected app: Application, protected kernel: ConsoleKernel) { }\n\n /**\n * The underlying commander instance.\n *\n * @var Command\n */\n public program!: Command\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature!: string\n\n /**\n * A dictionary of signatures or what not.\n *\n * @var object\n */\n protected dictionary: Record<string, any> = {}\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description?: string\n\n /**\n * The console command input.\n *\n * @var object\n */\n private input: XGeneric<{ options: Record<string, any>, arguments: Record<string, any> }> = {\n options: {},\n arguments: {},\n }\n\n /**\n * Execute the console command.\n */\n public async handle (..._args: any[]): Promise<void> { }\n\n setApplication (app: Application) {\n this.app = app\n }\n\n setInput (\n options: XGeneric,\n args: string[],\n regArgs: readonly Argument[],\n dictionary: Record<string, any>,\n program: Command,\n ) {\n this.program = program\n this.dictionary = dictionary\n this.input.options = options\n this.input.arguments = regArgs\n .map((e, i) => ({ [e.name()]: args[i] }))\n .reduce((e, x) => Object.assign(e, x), {})\n this.loadBaseFlags()\n }\n\n getSignature () {\n return this.signature\n }\n\n getDescription () {\n return this.description\n }\n\n option (key: string, def?: any) {\n const option = this.input.options[key] ?? def\n return option === 'null' || option === 'undefined' ? undefined : option\n }\n\n options (key?: string) {\n if (key) {\n return this.input.options[key]\n }\n return this.input.options\n }\n\n argument (key: string, def?: any) {\n return this.input.arguments[key] ?? def\n }\n\n arguments () {\n return this.input.arguments\n }\n\n loadBaseFlags () {\n this.input.options.lock = this.program.getOptionValue('lock') ?? false\n this.input.options.quiet = this.program.getOptionValue('quiet') ?? false\n this.input.options.silent = this.program.getOptionValue('silent') ?? false\n this.input.options.verbose = this.program.getOptionValue('verbose') ?? 0\n }\n}\n","import { Application } from '../Application'\nimport { Logger } from '@h3ravel/shared'\nimport { XGeneric } from '@h3ravel/support'\nimport { mkdir } from 'node:fs/promises'\n\nexport class ConsoleKernel {\n public cwd!: string\n public output = typeof Logger\n public basePath: string = ''\n public modulePath!: string\n public consolePath!: string\n public modulePackage!: XGeneric<{ version: string }>\n public consolePackage!: XGeneric<{ version: string }>\n\n constructor(public app: Application) { }\n\n async ensureDirectoryExists (dir: string) {\n await mkdir(dir, { recursive: true })\n }\n}\n","import { Application } from '.'\nimport { IController } from '@h3ravel/shared'\n\n/**\n * Base controller class\n */\nexport abstract class Controller implements IController {\n protected app: Application\n\n constructor(app: Application) {\n this.app = app\n }\n\n public show (..._ctx: any[]): any { return }\n public index (..._ctx: any[]): any { return }\n public store (..._ctx: any[]): any { return }\n public update (..._ctx: any[]): any { return }\n public destroy (..._ctx: any[]): any { return }\n}\n","export function Inject (...dependencies: string[]) {\n return function (target: any) {\n target.__inject__ = dependencies\n }\n}\n\n/**\n * Allows binding dependencies to both class and class methods \n * \n * @returns \n */\nexport function Injectable (): ClassDecorator & MethodDecorator {\n return (...args: any[]) => {\n if (args.length === 1) {\n void args[0] // class target\n }\n if (args.length === 3) {\n void args[0] // target\n void args[1] // propertyKey\n void args[2] // descriptor\n }\n }\n}\n\n// export function Injectable (): MethodDecorator & ClassDecorator {\n// return ((_target: any, _propertyKey?: string, descriptor?: PropertyDescriptor) => {\n// if (descriptor) {\n// const original = descriptor.value;\n// descriptor.value = async function (...args: any[]) {\n// const resolvedArgs = await Promise.all(args);\n// return original.apply(this, resolvedArgs);\n// };\n// }\n// }) as any;\n// }\n","import { HttpContext, IMiddleware } from '@h3ravel/shared'\n\nimport type { H3Event } from 'h3'\n\n/**\n * Kernel class handles middleware execution and response transformations.\n * It acts as the core middleware pipeline for HTTP requests.\n */\nexport class Kernel {\n /**\n * @param context - A factory function that converts an H3Event into an HttpContext.\n * @param middleware - An array of middleware classes that will be executed in sequence.\n */\n constructor(\n protected context: (event: H3Event) => HttpContext,\n protected middleware: IMiddleware[] = [],\n ) { }\n\n /**\n * Handles an incoming request and passes it through middleware before invoking the next handler.\n * \n * @param event - The raw H3 event object.\n * @param next - A callback function that represents the next layer (usually the controller or final handler).\n * @returns A promise resolving to the result of the request pipeline.\n */\n async handle (\n event: H3Event,\n next: (ctx: HttpContext) => Promise<unknown>\n ): Promise<unknown> {\n /**\n * Convert the raw event into a standardized HttpContext\n */\n const ctx = this.context(event)\n const { app } = ctx.request\n\n /**\n * Initialize the view handler method\n * \n * @param template \n * @param params \n * @returns \n */\n const view = async (template: string, params?: Record<string, any>) => {\n const edge = app.make('edge')\n return ctx.response.html(await edge.render(template, params))\n }\n\n /**\n * Bind the view method to the global variable space\n */\n globalThis.view = view\n\n /**\n * Dynamically bind the view renderer to the service container.\n * This allows any part of the request lifecycle to render templates using Edge.\n */\n app.bind('view', () => view)\n\n /**\n * Run middleware stack and obtain result\n */\n const result = await this.runMiddleware(ctx, () => next(ctx))\n\n /**\n * If a plain object is returned from a controller or middleware,\n * automatically set the JSON Content-Type header for the response.\n */\n if (result !== undefined && this.isPlainObject(result)) {\n event.res.headers.set('Content-Type', 'application/json; charset=UTF-8')\n }\n\n return result\n }\n\n /**\n * Sequentially runs middleware in the order they were registered.\n * \n * @param context - The standardized HttpContext.\n * @param next - Callback to execute when middleware completes.\n * @returns A promise resolving to the final handler's result.\n */\n private async runMiddleware (\n context: HttpContext,\n next: (ctx: HttpContext) => Promise<unknown>\n ) {\n let index = -1\n\n const runner = async (i: number): Promise<unknown> => {\n if (i <= index) throw new Error('next() called multiple times')\n index = i\n const middleware = this.middleware[i]\n\n if (middleware) {\n /**\n * Execute the current middleware and proceed to the next one\n */\n return middleware.handle(context, () => runner(i + 1))\n } else {\n /**\n * If no more middleware, call the final handler\n */\n return next(context)\n }\n }\n\n return runner(0)\n }\n\n /**\n * Utility function to determine if a value is a plain object or array.\n * \n * @param value - The value to check.\n * @returns True if the value is a plain object or array, otherwise false.\n */\n private isPlainObject (value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || value.constructor === Array)\n }\n}\n","import { Application } from './Application'\nimport { IServiceProvider } from '@h3ravel/shared'\n\nconst Inference = class { } as { new(): IServiceProvider }\n\nexport abstract class ServiceProvider extends Inference {\n /**\n * The current app instance\n */\n protected app: Application\n\n /**\n * Unique Identifier for the service providers\n */\n public static uid?: number\n\n /**\n * Sort order\n */\n\n public static order?: `before:${string}` | `after:${string}` | string | undefined\n\n /**\n * Sort priority\n */\n public static priority = 0\n\n /**\n * Indicate that this service provider only runs in console\n */\n public static console = false\n\n /**\n * List of registered console commands\n */\n public registeredCommands?: (new (app: any, kernel: any) => any)[]\n\n constructor(app: Application) {\n super()\n this.app = app\n }\n\n /**\n * Register bindings to the container.\n * Runs before boot().\n */\n abstract register (...app: unknown[]): void | Promise<void>;\n\n /**\n * Perform post-registration booting of services.\n * Runs after all providers have been registered.\n */\n boot?(...app: unknown[]): void | Promise<void>;\n\n /**\n * An array of console commands to register.\n */\n commands (commands: (new (app: any, kernel: any) => any)[]): void {\n this.registeredCommands = commands\n }\n}\n","import 'reflect-metadata'\n\nimport { ServiceProvider } from '../ServiceProvider'\n\n/**\n * Bootstraps core services and bindings.\n * \n * Bind essential services to the container (logger, config repository).\n * Register app-level singletons.\n * Set up exception handling.\n * \n * Auto-Registered\n */\nexport class CoreServiceProvider extends ServiceProvider {\n public static priority = 999\n\n register () {\n }\n\n boot (): void | Promise<void> {\n globalThis.asset = this.app.make('asset')\n }\n}\n","import { Edge } from 'edge.js'\nimport { ServiceProvider } from '../ServiceProvider'\n\nexport class ViewServiceProvider extends ServiceProvider {\n public static priority = 995\n\n register (): void {\n const config = this.app.make('config')\n const edge = Edge.create({\n cache: process.env.NODE_ENV === 'production'\n })\n\n edge.mount(this.app.getPath('views'))\n\n edge.global('config', config.get)\n edge.global('app', this.app)\n\n this.app.bind('edge', () => edge)\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h3ravel/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "Core application container, lifecycle management and service providers for H3ravel.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"semver": "^7.7.2",
|
|
55
55
|
"srvx": "^0.8.7",
|
|
56
56
|
"tslib": "^2.8.1",
|
|
57
|
-
"@h3ravel/
|
|
58
|
-
"@h3ravel/
|
|
57
|
+
"@h3ravel/shared": "^0.20.8",
|
|
58
|
+
"@h3ravel/support": "^0.10.3"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/semver": "^7.7.1",
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
"start": "node dist/index.js",
|
|
69
69
|
"lint": "eslint . --ext .ts",
|
|
70
70
|
"test": "jest --passWithNoTests",
|
|
71
|
+
"version-patch": "pnpm version patch",
|
|
71
72
|
"release:patch": "pnpm build && pnpm version patch && git add . && git commit -m \"version: bump core package version\" && pnpm publish --tag latest"
|
|
72
73
|
}
|
|
73
74
|
}
|