@lukman-ss/moke-core 0.1.0 → 0.2.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -21
  3. package/dist/application.d.ts +27 -2
  4. package/dist/application.d.ts.map +1 -1
  5. package/dist/application.js +194 -6
  6. package/dist/application.js.map +1 -1
  7. package/dist/container.d.ts +37 -4
  8. package/dist/container.d.ts.map +1 -1
  9. package/dist/container.js +272 -30
  10. package/dist/container.js.map +1 -1
  11. package/dist/decorators.d.ts +0 -8
  12. package/dist/decorators.d.ts.map +1 -1
  13. package/dist/decorators.js +3 -12
  14. package/dist/decorators.js.map +1 -1
  15. package/dist/errors.d.ts +38 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +98 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/index.d.ts +4 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +4 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/internal/formatter.d.ts +3 -0
  24. package/dist/internal/formatter.d.ts.map +1 -0
  25. package/dist/internal/formatter.js +20 -0
  26. package/dist/internal/formatter.js.map +1 -0
  27. package/dist/lifecycle.d.ts +13 -0
  28. package/dist/lifecycle.d.ts.map +1 -0
  29. package/dist/lifecycle.js +2 -0
  30. package/dist/lifecycle.js.map +1 -0
  31. package/dist/logger.d.ts +14 -3
  32. package/dist/logger.d.ts.map +1 -1
  33. package/dist/logger.js +19 -5
  34. package/dist/logger.js.map +1 -1
  35. package/dist/module.d.ts +10 -0
  36. package/dist/module.d.ts.map +1 -0
  37. package/dist/module.js +7 -0
  38. package/dist/module.js.map +1 -0
  39. package/dist/providers.d.ts +15 -11
  40. package/dist/providers.d.ts.map +1 -1
  41. package/dist/providers.js.map +1 -1
  42. package/dist/reflection.d.ts +25 -0
  43. package/dist/reflection.d.ts.map +1 -0
  44. package/dist/reflection.js +34 -0
  45. package/dist/reflection.js.map +1 -0
  46. package/dist/service-provider.d.ts +8 -0
  47. package/dist/service-provider.d.ts.map +1 -0
  48. package/dist/service-provider.js +7 -0
  49. package/dist/service-provider.js.map +1 -0
  50. package/dist/types.js.map +1 -1
  51. package/package.json +30 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  export * from './types.js';
2
+ export * from './errors.js';
2
3
  export * from './providers.js';
3
4
  export * from './container.js';
4
5
  export * from './decorators.js';
5
6
  export * from './logger.js';
7
+ export * from './lifecycle.js';
6
8
  export * from './application.js';
9
+ export * from './module.js';
10
+ export * from './service-provider.js';
7
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './types.js';\nexport * from './errors.js';\nexport * from './providers.js';\nexport * from './container.js';\nexport * from './decorators.js';\nexport * from './logger.js';\nexport * from './lifecycle.js';\nexport * from './application.js';\nexport * from './module.js';\nexport * from './service-provider.js';\n"]}
@@ -0,0 +1,3 @@
1
+ export declare function formatToken(token: unknown): string;
2
+ export declare function formatPath(path: unknown[]): string;
3
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/internal/formatter.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmBlD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAElD"}
@@ -0,0 +1,20 @@
1
+ export function formatToken(token) {
2
+ if (typeof token === 'function') {
3
+ return token.name || 'AnonymousClass';
4
+ }
5
+ if (typeof token === 'string') {
6
+ return `"${token}"`;
7
+ }
8
+ if (typeof token === 'symbol') {
9
+ return token.toString();
10
+ }
11
+ if (typeof token === 'object' && token !== null && 'key' in token) {
12
+ const injToken = token;
13
+ return injToken.description || injToken.key.toString();
14
+ }
15
+ return String(token);
16
+ }
17
+ export function formatPath(path) {
18
+ return path.map(formatToken).join('\n→ ');
19
+ }
20
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/internal/formatter.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,IAAI,gBAAgB,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,GAAG,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,KAAgC,CAAC;QAClD,OAAO,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["import { Token, InjectionToken } from '../types.js';\n\nexport function formatToken(token: unknown): string {\n if (typeof token === 'function') {\n return token.name || 'AnonymousClass';\n }\n \n if (typeof token === 'string') {\n return `\"${token}\"`;\n }\n \n if (typeof token === 'symbol') {\n return token.toString();\n }\n \n if (typeof token === 'object' && token !== null && 'key' in token) {\n const injToken = token as InjectionToken<unknown>;\n return injToken.description || injToken.key.toString();\n }\n \n return String(token);\n}\n\nexport function formatPath(path: unknown[]): string {\n return path.map(formatToken).join('\\n→ ');\n}\n"]}
@@ -0,0 +1,13 @@
1
+ export interface OnModuleInit {
2
+ onModuleInit(): void | Promise<void>;
3
+ }
4
+ export interface OnApplicationBootstrap {
5
+ onApplicationBootstrap(): void | Promise<void>;
6
+ }
7
+ export interface OnModuleDestroy {
8
+ onModuleDestroy(): void | Promise<void>;
9
+ }
10
+ export interface OnApplicationShutdown {
11
+ onApplicationShutdown(signal?: string): void | Promise<void>;
12
+ }
13
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,sBAAsB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"","sourcesContent":["export interface OnModuleInit {\n onModuleInit(): void | Promise<void>;\n}\n\nexport interface OnApplicationBootstrap {\n onApplicationBootstrap(): void | Promise<void>;\n}\n\nexport interface OnModuleDestroy {\n onModuleDestroy(): void | Promise<void>;\n}\n\nexport interface OnApplicationShutdown {\n onApplicationShutdown(signal?: string): void | Promise<void>;\n}\n"]}
package/dist/logger.d.ts CHANGED
@@ -1,5 +1,16 @@
1
- export declare class MokeLogger {
2
- log(message: string): void;
3
- error(message: string, trace?: string): void;
1
+ export interface Logger {
2
+ debug?(message: string, context?: string): void;
3
+ log(message: string, context?: string): void;
4
+ warn(message: string, context?: string): void;
5
+ error(message: string, trace?: string, context?: string): void;
6
+ }
7
+ export declare class ConsoleLogger implements Logger {
8
+ private readonly context?;
9
+ constructor(context?: string | undefined);
10
+ log(message: string, context?: string): void;
11
+ debug(message: string, context?: string): void;
12
+ warn(message: string, context?: string): void;
13
+ error(message: string, trace?: string, context?: string): void;
14
+ private format;
4
15
  }
5
16
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACrB,GAAG,CAAC,OAAO,EAAE,MAAM;IAInB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAGtC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,qBAAa,aAAc,YAAW,MAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,MAAM,YAAA;IAE7C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAIrC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAIvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAItC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAIvD,OAAO,CAAC,MAAM;CAIf"}
package/dist/logger.js CHANGED
@@ -1,9 +1,23 @@
1
- export class MokeLogger {
2
- log(message) {
3
- console.log(`[Moke] ${message}`);
1
+ export class ConsoleLogger {
2
+ context;
3
+ constructor(context) {
4
+ this.context = context;
4
5
  }
5
- error(message, trace) {
6
- console.error(`[Moke ERROR] ${message}`, trace || '');
6
+ log(message, context) {
7
+ console.log(this.format('LOG', message, context));
8
+ }
9
+ debug(message, context) {
10
+ console.debug(this.format('DEBUG', message, context));
11
+ }
12
+ warn(message, context) {
13
+ console.warn(this.format('WARN', message, context));
14
+ }
15
+ error(message, trace, context) {
16
+ console.error(this.format('ERROR', message, context), trace ? `\n${trace}` : '');
17
+ }
18
+ format(level, message, context) {
19
+ const ctx = context || this.context;
20
+ return `[Moke] ${level} ${ctx ? `[${ctx}] ` : ''}${message}`;
7
21
  }
8
22
  }
9
23
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IACrB,GAAG,CAAC,OAAe;QACjB,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAc;QACnC,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;CACF"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAEjD,GAAG,CAAC,OAAe,EAAE,OAAgB;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAgB;QACrC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAc,EAAE,OAAgB;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,OAAe,EAAE,OAAgB;QAC7D,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QACpC,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAC/D,CAAC;CACF","sourcesContent":["export interface Logger {\n debug?(message: string, context?: string): void;\n log(message: string, context?: string): void;\n warn(message: string, context?: string): void;\n error(message: string, trace?: string, context?: string): void;\n}\n\nexport class ConsoleLogger implements Logger {\n constructor(private readonly context?: string) {}\n\n log(message: string, context?: string) {\n console.log(this.format('LOG', message, context));\n }\n\n debug(message: string, context?: string) {\n console.debug(this.format('DEBUG', message, context));\n }\n\n warn(message: string, context?: string) {\n console.warn(this.format('WARN', message, context));\n }\n\n error(message: string, trace?: string, context?: string) {\n console.error(this.format('ERROR', message, context), trace ? `\\n${trace}` : '');\n }\n\n private format(level: string, message: string, context?: string): string {\n const ctx = context || this.context;\n return `[Moke] ${level} ${ctx ? `[${ctx}] ` : ''}${message}`;\n }\n}\n\n\n"]}
@@ -0,0 +1,10 @@
1
+ import { Constructor, Token } from './types.js';
2
+ import { ProviderDefinition } from './providers.js';
3
+ export interface ModuleMetadata {
4
+ imports?: Constructor<unknown>[];
5
+ providers?: ProviderDefinition[];
6
+ exports?: Token[];
7
+ controllers?: Constructor<unknown>[];
8
+ }
9
+ export declare function Module(metadata: ModuleMetadata): ClassDecorator;
10
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;CACtC;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAI/D"}
package/dist/module.js ADDED
@@ -0,0 +1,7 @@
1
+ import { ReflectionHost } from './reflection.js';
2
+ export function Module(metadata) {
3
+ return (target) => {
4
+ ReflectionHost.setModuleMetadata(target, metadata);
5
+ };
6
+ }
7
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AASjD,MAAM,UAAU,MAAM,CAAC,QAAwB;IAC7C,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,cAAc,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Constructor, Token } from './types.js';\nimport { ProviderDefinition } from './providers.js';\nimport { ReflectionHost } from './reflection.js';\n\nexport interface ModuleMetadata {\n imports?: Constructor<unknown>[];\n providers?: ProviderDefinition[];\n exports?: Token[];\n controllers?: Constructor<unknown>[];\n}\n\nexport function Module(metadata: ModuleMetadata): ClassDecorator {\n return (target: any) => {\n ReflectionHost.setModuleMetadata(target, metadata);\n };\n}\n"]}
@@ -1,21 +1,25 @@
1
1
  import { Constructor, Token } from './types.js';
2
- import { Container } from './container.js';
3
- export type Scope = 'singleton' | 'transient';
4
- export interface ProviderBase<T = any> {
5
- provide: Token<T>;
2
+ export type Scope = 'singleton' | 'scoped' | 'transient';
3
+ export interface ProviderBase<T = unknown> {
4
+ provide?: Token<T>;
6
5
  }
7
- export interface ClassProvider<T = any> extends ProviderBase<T> {
6
+ export interface ClassProvider<T = unknown> extends ProviderBase<T> {
8
7
  useClass: Constructor<T>;
9
8
  }
10
- export interface ValueProvider<T = any> extends ProviderBase<T> {
9
+ export interface ValueProvider<T = unknown> extends ProviderBase<T> {
11
10
  useValue: T;
12
11
  }
13
- export interface FactoryProvider<T = any> extends ProviderBase<T> {
14
- useFactory: (container: Container) => T | Promise<T>;
12
+ export interface Resolver {
13
+ resolve<T>(token: Token<T>): T;
14
+ resolveAsync<T>(token: Token<T>): Promise<T>;
15
15
  }
16
- export interface ExistingProvider<T = any> extends ProviderBase<T> {
16
+ export interface FactoryProvider<T = unknown> extends ProviderBase<T> {
17
+ useFactory: (resolver: Resolver) => T | Promise<T>;
18
+ scope?: Scope;
19
+ }
20
+ export interface ExistingProvider<T = unknown> extends ProviderBase<T> {
17
21
  useExisting: Token<T>;
18
22
  }
19
- export type Provider<T = any> = ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | ExistingProvider<T>;
20
- export type ProviderDefinition<T = any> = Provider<T> | Constructor<T>;
23
+ export type Provider<T = unknown> = ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | ExistingProvider<T>;
24
+ export type ProviderDefinition<T = unknown> = Provider<T> | Constructor<T>;
21
25
  //# sourceMappingURL=providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9C,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACnC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAC7D,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAC/D,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAChE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE/G,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEzD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAEjE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAEjE,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAGnE,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEnD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAEpE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAEnH,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"","sourcesContent":["import { Constructor, Token } from './types.js';\nimport { Container } from './container.js';\n\nexport type Scope = 'singleton' | 'scoped' | 'transient';\n\nexport interface ProviderBase<T = unknown> {\n provide?: Token<T>;\n}\n\nexport interface ClassProvider<T = unknown> extends ProviderBase<T> {\n // Use Constructor<T> so useClass must be assignable to T\n useClass: Constructor<T>;\n}\n\nexport interface ValueProvider<T = unknown> extends ProviderBase<T> {\n // Value must be exactly T\n useValue: T;\n}\n\nexport interface Resolver {\n resolve<T>(token: Token<T>): T;\n resolveAsync<T>(token: Token<T>): Promise<T>;\n}\n\nexport interface FactoryProvider<T = unknown> extends ProviderBase<T> {\n // Factory receives restricted resolver instead of full Container\n // This prevents mutation of registrations during resolution\n useFactory: (resolver: Resolver) => T | Promise<T>;\n // Ponytail: scope is currently ignored on raw FactoryProvider. Use container.factory() to set scope.\n scope?: Scope;\n}\n\nexport interface ExistingProvider<T = unknown> extends ProviderBase<T> {\n // useExisting must be a Token that represents T\n useExisting: Token<T>;\n}\n\nexport type Provider<T = unknown> = ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | ExistingProvider<T>;\n\nexport type ProviderDefinition<T = unknown> = Provider<T> | Constructor<T>;\n\n\n"]}
@@ -0,0 +1,25 @@
1
+ import 'reflect-metadata';
2
+ import { Constructor, Token } from './types.js';
3
+ declare const INJECTABLE_METADATA: unique symbol;
4
+ declare const INJECT_METADATA: unique symbol;
5
+ declare const MODULE_METADATA: unique symbol;
6
+ export declare const METADATA_KEYS: {
7
+ readonly INJECTABLE: typeof INJECTABLE_METADATA;
8
+ readonly INJECT: typeof INJECT_METADATA;
9
+ readonly MODULE: typeof MODULE_METADATA;
10
+ readonly DESIGN_PARAM_TYPES: "design:paramtypes";
11
+ };
12
+ export interface InjectMetadata {
13
+ index: number;
14
+ token: Token;
15
+ }
16
+ export declare class ReflectionHost {
17
+ static getParamTypes(target: Constructor<unknown>): unknown[];
18
+ static getExplicitInjections(target: Constructor<unknown>): InjectMetadata[];
19
+ static setExplicitInjection(target: object, index: number, token: Token): void;
20
+ static markInjectable(target: object): void;
21
+ static getModuleMetadata(target: Constructor<unknown>): any;
22
+ static setModuleMetadata(target: object, metadata: any): void;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=reflection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,QAAA,MAAM,mBAAmB,eAA4B,CAAC;AACtD,QAAA,MAAM,eAAe,eAAwB,CAAC;AAC9C,QAAA,MAAM,eAAe,eAAwB,CAAC;AAG9C,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;CACd;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;IAI7D,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,cAAc,EAAE;IAI5E,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAM9E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI3C,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG;IAI3D,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI;CAG9D"}
@@ -0,0 +1,34 @@
1
+ import 'reflect-metadata';
2
+ const INJECTABLE_METADATA = Symbol('moke:injectable');
3
+ const INJECT_METADATA = Symbol('moke:inject');
4
+ const MODULE_METADATA = Symbol('moke:module');
5
+ const DESIGN_PARAM_TYPES = 'design:paramtypes';
6
+ export const METADATA_KEYS = {
7
+ INJECTABLE: INJECTABLE_METADATA,
8
+ INJECT: INJECT_METADATA,
9
+ MODULE: MODULE_METADATA,
10
+ DESIGN_PARAM_TYPES,
11
+ };
12
+ export class ReflectionHost {
13
+ static getParamTypes(target) {
14
+ return Reflect.getMetadata(METADATA_KEYS.DESIGN_PARAM_TYPES, target) || [];
15
+ }
16
+ static getExplicitInjections(target) {
17
+ return Reflect.getOwnMetadata(METADATA_KEYS.INJECT, target) || [];
18
+ }
19
+ static setExplicitInjection(target, index, token) {
20
+ const injections = Reflect.getOwnMetadata(METADATA_KEYS.INJECT, target) || [];
21
+ injections.push({ index, token });
22
+ Reflect.defineMetadata(METADATA_KEYS.INJECT, injections, target);
23
+ }
24
+ static markInjectable(target) {
25
+ Reflect.defineMetadata(METADATA_KEYS.INJECTABLE, true, target);
26
+ }
27
+ static getModuleMetadata(target) {
28
+ return Reflect.getMetadata(METADATA_KEYS.MODULE, target);
29
+ }
30
+ static setModuleMetadata(target, metadata) {
31
+ Reflect.defineMetadata(METADATA_KEYS.MODULE, metadata, target);
32
+ }
33
+ }
34
+ //# sourceMappingURL=reflection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflection.js","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACtD,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC9C,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC9C,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,mBAAmB;IAC/B,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,eAAe;IACvB,kBAAkB;CACV,CAAC;AAOX,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,aAAa,CAAC,MAA4B;QAC/C,OAAO,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,MAA4B;QACvD,OAAO,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,MAAc,EAAE,KAAa,EAAE,KAAY;QACrE,MAAM,UAAU,GAAqB,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAChG,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc;QAClC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,MAA4B;QACnD,OAAO,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,MAAc,EAAE,QAAa;QACpD,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;CACF","sourcesContent":["import 'reflect-metadata';\nimport { Constructor, Token } from './types.js';\n\nconst INJECTABLE_METADATA = Symbol('moke:injectable');\nconst INJECT_METADATA = Symbol('moke:inject');\nconst MODULE_METADATA = Symbol('moke:module');\nconst DESIGN_PARAM_TYPES = 'design:paramtypes';\n\nexport const METADATA_KEYS = {\n INJECTABLE: INJECTABLE_METADATA,\n INJECT: INJECT_METADATA,\n MODULE: MODULE_METADATA,\n DESIGN_PARAM_TYPES,\n} as const;\n\nexport interface InjectMetadata {\n index: number;\n token: Token;\n}\n\nexport class ReflectionHost {\n static getParamTypes(target: Constructor<unknown>): unknown[] {\n return Reflect.getMetadata(METADATA_KEYS.DESIGN_PARAM_TYPES, target) || [];\n }\n\n static getExplicitInjections(target: Constructor<unknown>): InjectMetadata[] {\n return Reflect.getOwnMetadata(METADATA_KEYS.INJECT, target) || [];\n }\n\n static setExplicitInjection(target: object, index: number, token: Token): void {\n const injections: InjectMetadata[] = Reflect.getOwnMetadata(METADATA_KEYS.INJECT, target) || [];\n injections.push({ index, token });\n Reflect.defineMetadata(METADATA_KEYS.INJECT, injections, target);\n }\n\n static markInjectable(target: object): void {\n Reflect.defineMetadata(METADATA_KEYS.INJECTABLE, true, target);\n }\n\n static getModuleMetadata(target: Constructor<unknown>): any {\n return Reflect.getMetadata(METADATA_KEYS.MODULE, target);\n }\n\n static setModuleMetadata(target: object, metadata: any): void {\n Reflect.defineMetadata(METADATA_KEYS.MODULE, metadata, target);\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export declare abstract class ServiceProvider {
2
+ protected readonly app: import('./application.js').MokeApplicationContext;
3
+ constructor(app: import('./application.js').MokeApplicationContext);
4
+ register?(): void | Promise<void>;
5
+ boot?(): void | Promise<void>;
6
+ shutdown?(): void | Promise<void>;
7
+ }
8
+ //# sourceMappingURL=service-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-provider.d.ts","sourceRoot":"","sources":["../src/service-provider.ts"],"names":[],"mappings":"AAAA,8BAAsB,eAAe;IACvB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,kBAAkB,EAAE,sBAAsB;gBAAtD,GAAG,EAAE,OAAO,kBAAkB,EAAE,sBAAsB;IAErF,QAAQ,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAClC"}
@@ -0,0 +1,7 @@
1
+ export class ServiceProvider {
2
+ app;
3
+ constructor(app) {
4
+ this.app = app;
5
+ }
6
+ }
7
+ //# sourceMappingURL=service-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-provider.js","sourceRoot":"","sources":["../src/service-provider.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,eAAe;IACJ;IAA/B,YAA+B,GAAsD;QAAtD,QAAG,GAAH,GAAG,CAAmD;IAAG,CAAC;CAK1F","sourcesContent":["export abstract class ServiceProvider {\n constructor(protected readonly app: import('./application.js').MokeApplicationContext) {}\n\n register?(): void | Promise<void>;\n boot?(): void | Promise<void>;\n shutdown?(): void | Promise<void>;\n}\n"]}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,WAAW,CAAI,WAAoB;IACjD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;QACxB,WAAW;KACS,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,WAAW,CAAI,WAAoB;IACjD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;QACxB,WAAW;KACS,CAAC;AACzB,CAAC","sourcesContent":["export type Constructor<T = unknown> = new (...args: any[]) => T;\n\nexport interface InjectionToken<T> {\n readonly key: symbol;\n readonly description?: string;\n readonly __type_brand?: T; // Type-only field to infer T\n}\n\nexport type Token<T = unknown> = Constructor<T> | string | symbol | InjectionToken<T>;\n\nexport function createToken<T>(description?: string): InjectionToken<T> {\n return {\n key: Symbol(description),\n description\n } as InjectionToken<T>;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lukman-ss/moke-core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Core module for Moke web framework. Provides IoC Container, Dependency Injection, and Application Bootstrap.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -12,21 +12,45 @@
12
12
  }
13
13
  },
14
14
  "files": [
15
- "dist"
15
+ "dist/",
16
+ "README.md",
17
+ "LICENSE",
18
+ "package.json"
16
19
  ],
17
20
  "engines": {
18
- "node": ">=18.0.0"
21
+ "node": ">=22.14.0"
19
22
  },
23
+ "packageManager": "npm@12.0.2",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/lukman-ss/moke-core.git"
27
+ },
28
+ "homepage": "https://github.com/lukman-ss/moke-core#readme",
29
+ "bugs": {
30
+ "url": "https://github.com/lukman-ss/moke-core/issues"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "keywords": [
36
+ "core",
37
+ "framework",
38
+ "ioc",
39
+ "di",
40
+ "dependency-injection"
41
+ ],
42
+ "author": "lukman-ss",
43
+ "license": "MIT",
20
44
  "scripts": {
21
45
  "build": "npm run clean && tsc",
22
46
  "clean": "node -e \"fs.rmSync('dist', {recursive:true, force:true})\"",
23
47
  "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json mocha --loader=ts-node/esm \"test/**/*.test.ts\"",
24
48
  "test:watch": "cross-env TS_NODE_PROJECT=tsconfig.test.json mocha --loader=ts-node/esm --watch \"test/**/*.test.ts\"",
25
49
  "typecheck": "tsc --noEmit",
26
- "prepublishOnly": "npm run build"
50
+ "prepack": "npm run build"
27
51
  },
28
52
  "dependencies": {
29
- "reflect-metadata": "^0.1.13"
53
+ "reflect-metadata": "^0.2.2"
30
54
  },
31
55
  "devDependencies": {
32
56
  "@types/chai": "^5.2.3",
@@ -35,6 +59,6 @@
35
59
  "cross-env": "^10.1.0",
36
60
  "mocha": "^11.8.0",
37
61
  "ts-node": "^10.9.2",
38
- "typescript": "^5.2.2"
62
+ "typescript": "^5.9.3"
39
63
  }
40
64
  }