@kurdel/core 0.1.0-beta.1

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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -0
  3. package/lib/app/app-config.d.ts +9 -0
  4. package/lib/app/app-config.js +2 -0
  5. package/lib/app/app-config.js.map +1 -0
  6. package/lib/app/app-module.d.ts +75 -0
  7. package/lib/app/app-module.js +2 -0
  8. package/lib/app/app-module.js.map +1 -0
  9. package/lib/app/app-tokens.d.ts +4 -0
  10. package/lib/app/app-tokens.js +6 -0
  11. package/lib/app/app-tokens.js.map +1 -0
  12. package/lib/app/application.d.ts +23 -0
  13. package/lib/app/application.js +2 -0
  14. package/lib/app/application.js.map +1 -0
  15. package/lib/app/index.d.ts +6 -0
  16. package/lib/app/index.js +7 -0
  17. package/lib/app/index.js.map +1 -0
  18. package/lib/app/lifecycle.d.ts +3 -0
  19. package/lib/app/lifecycle.js +2 -0
  20. package/lib/app/lifecycle.js.map +1 -0
  21. package/lib/app/module-priority.d.ts +33 -0
  22. package/lib/app/module-priority.js +35 -0
  23. package/lib/app/module-priority.js.map +1 -0
  24. package/lib/db/index.d.ts +1 -0
  25. package/lib/db/index.js +2 -0
  26. package/lib/db/index.js.map +1 -0
  27. package/lib/db/model.d.ts +23 -0
  28. package/lib/db/model.js +17 -0
  29. package/lib/db/model.js.map +1 -0
  30. package/lib/http/errors/http-error.d.ts +5 -0
  31. package/lib/http/errors/http-error.js +9 -0
  32. package/lib/http/errors/http-error.js.map +1 -0
  33. package/lib/http/errors/index.d.ts +2 -0
  34. package/lib/http/errors/index.js +3 -0
  35. package/lib/http/errors/index.js.map +1 -0
  36. package/lib/http/errors/validation-error.d.ts +9 -0
  37. package/lib/http/errors/validation-error.js +12 -0
  38. package/lib/http/errors/validation-error.js.map +1 -0
  39. package/lib/http/http-context.d.ts +107 -0
  40. package/lib/http/http-context.js +2 -0
  41. package/lib/http/http-context.js.map +1 -0
  42. package/lib/http/http-module.d.ts +61 -0
  43. package/lib/http/http-module.js +2 -0
  44. package/lib/http/http-module.js.map +1 -0
  45. package/lib/http/http-tokens.d.ts +10 -0
  46. package/lib/http/http-tokens.js +11 -0
  47. package/lib/http/http-tokens.js.map +1 -0
  48. package/lib/http/index.d.ts +9 -0
  49. package/lib/http/index.js +10 -0
  50. package/lib/http/index.js.map +1 -0
  51. package/lib/http/middleware/index.d.ts +3 -0
  52. package/lib/http/middleware/index.js +4 -0
  53. package/lib/http/middleware/index.js.map +1 -0
  54. package/lib/http/middleware/middleware-registration.d.ts +25 -0
  55. package/lib/http/middleware/middleware-registration.js +2 -0
  56. package/lib/http/middleware/middleware-registration.js.map +1 -0
  57. package/lib/http/middleware/middleware-registry.d.ts +15 -0
  58. package/lib/http/middleware/middleware-registry.js +2 -0
  59. package/lib/http/middleware/middleware-registry.js.map +1 -0
  60. package/lib/http/middleware/middleware.d.ts +2 -0
  61. package/lib/http/middleware/middleware.js +2 -0
  62. package/lib/http/middleware/middleware.js.map +1 -0
  63. package/lib/http/response/action-result.d.ts +69 -0
  64. package/lib/http/response/action-result.js +2 -0
  65. package/lib/http/response/action-result.js.map +1 -0
  66. package/lib/http/response/http-results.d.ts +17 -0
  67. package/lib/http/response/http-results.js +46 -0
  68. package/lib/http/response/http-results.js.map +1 -0
  69. package/lib/http/response/index.d.ts +3 -0
  70. package/lib/http/response/index.js +4 -0
  71. package/lib/http/response/index.js.map +1 -0
  72. package/lib/http/response/response-renderer.d.ts +6 -0
  73. package/lib/http/response/response-renderer.js +2 -0
  74. package/lib/http/response/response-renderer.js.map +1 -0
  75. package/lib/http/routing/controller-config.d.ts +24 -0
  76. package/lib/http/routing/controller-config.js +2 -0
  77. package/lib/http/routing/controller-config.js.map +1 -0
  78. package/lib/http/routing/controller-resolver.d.ts +5 -0
  79. package/lib/http/routing/controller-resolver.js +2 -0
  80. package/lib/http/routing/controller-resolver.js.map +1 -0
  81. package/lib/http/routing/controller.d.ts +22 -0
  82. package/lib/http/routing/controller.js +47 -0
  83. package/lib/http/routing/controller.js.map +1 -0
  84. package/lib/http/routing/index.d.ts +7 -0
  85. package/lib/http/routing/index.js +8 -0
  86. package/lib/http/routing/index.js.map +1 -0
  87. package/lib/http/routing/route-match.d.ts +27 -0
  88. package/lib/http/routing/route-match.js +2 -0
  89. package/lib/http/routing/route-match.js.map +1 -0
  90. package/lib/http/routing/route-schema.d.ts +16 -0
  91. package/lib/http/routing/route-schema.js +2 -0
  92. package/lib/http/routing/route-schema.js.map +1 -0
  93. package/lib/http/routing/route.d.ts +112 -0
  94. package/lib/http/routing/route.js +21 -0
  95. package/lib/http/routing/route.js.map +1 -0
  96. package/lib/http/routing/router.d.ts +27 -0
  97. package/lib/http/routing/router.js +2 -0
  98. package/lib/http/routing/router.js.map +1 -0
  99. package/lib/http/server/index.d.ts +2 -0
  100. package/lib/http/server/index.js +3 -0
  101. package/lib/http/server/index.js.map +1 -0
  102. package/lib/http/server/running-server.d.ts +8 -0
  103. package/lib/http/server/running-server.js +2 -0
  104. package/lib/http/server/running-server.js.map +1 -0
  105. package/lib/http/server/server-adapter.d.ts +82 -0
  106. package/lib/http/server/server-adapter.js +2 -0
  107. package/lib/http/server/server-adapter.js.map +1 -0
  108. package/lib/http/types.d.ts +10 -0
  109. package/lib/http/types.js +2 -0
  110. package/lib/http/types.js.map +1 -0
  111. package/lib/index.d.ts +5 -0
  112. package/lib/index.js +6 -0
  113. package/lib/index.js.map +1 -0
  114. package/lib/template/index.d.ts +2 -0
  115. package/lib/template/index.js +3 -0
  116. package/lib/template/index.js.map +1 -0
  117. package/lib/template/template-engine.d.ts +3 -0
  118. package/lib/template/template-engine.js +2 -0
  119. package/lib/template/template-engine.js.map +1 -0
  120. package/lib/template/template-tokens.d.ts +2 -0
  121. package/lib/template/template-tokens.js +3 -0
  122. package/lib/template/template-tokens.js.map +1 -0
  123. package/lib/tokens/index.d.ts +1 -0
  124. package/lib/tokens/index.js +2 -0
  125. package/lib/tokens/index.js.map +1 -0
  126. package/lib/tokens/tokens.d.ts +12 -0
  127. package/lib/tokens/tokens.js +9 -0
  128. package/lib/tokens/tokens.js.map +1 -0
  129. package/package.json +67 -0
@@ -0,0 +1,21 @@
1
+ export const ROUTE_META = Symbol('@kurdel/core:route-meta');
2
+ /* ──────────────────────────────────────────────────────────────────────────
3
+ * route(meta)(handler)
4
+ * Attaches metadata to a handler AND preserves the handler's identity.
5
+ *
6
+ * Important: handler is NOT wrapped.
7
+ * RuntimeControllerPipe calls handler.call(controller, ctx),
8
+ * so the function MUST be the original method reference.
9
+ * ────────────────────────────────────────────────────────────────────────── */
10
+ /**
11
+ * Decorates the given handler with metadata (method, path, schema).
12
+ *
13
+ * Typing also narrows ctx.params based on meta.path automatically.
14
+ */
15
+ export function route(meta) {
16
+ return function (fn) {
17
+ fn[ROUTE_META] = meta;
18
+ return fn;
19
+ };
20
+ }
21
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/http/routing/route.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAwI5D;;;;;;;gFAOgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAA4B,IAAO;IACtD,OAAO,UAGL,EAA0B;QACzB,EAAU,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Container } from '@kurdel/ioc';
2
+ import type { Method, ControllerConfig, ControllerResolver, RouteMatch } from '../../http/index.js';
3
+ /**
4
+ * A minimal HTTP router contract.
5
+ *
6
+ * Responsibilities:
7
+ * - Register routes at bootstrap (`init`)
8
+ * - Resolve a request (method + path) to an executable handler
9
+ * - Leave actual execution (middlewares, controller action, rendering)
10
+ * to higher orchestration layers.
11
+ */
12
+ export interface Router {
13
+ /**
14
+ * Initializes the routing table and prepares route lookup.
15
+ * Called exactly once during application bootstrap.
16
+ */
17
+ init(resolver: ControllerResolver, controllerConfigs: ControllerConfig[]): void;
18
+ /**
19
+ * Attempts to resolve a route for the given HTTP method and URL.
20
+ *
21
+ * Returns a {@link RouteMatch} describing which controller/action to execute,
22
+ * or `null` if no route matches.
23
+ *
24
+ * The returned object is later executed by RuntimeRequestOrchestrator.
25
+ */
26
+ resolve(method: Method, url: string, scope: Container): RouteMatch | null;
27
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/http/routing/router.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './running-server.js';
2
+ export * from './server-adapter.js';
@@ -0,0 +1,3 @@
1
+ export * from './running-server.js';
2
+ export * from './server-adapter.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface RunningServer {
2
+ /** e.g. http://127.0.0.1:3000 */
3
+ url?: string;
4
+ /** Graceful shutdown */
5
+ close(): Promise<void>;
6
+ /** Escape hatch for tests (e.g., Node http.Server) */
7
+ raw?<T = unknown>(): T | undefined;
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=running-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"running-server.js","sourceRoot":"","sources":["../../../src/http/server/running-server.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import type { HttpRequest, HttpResponse } from '@kurdel/common';
2
+ /**
3
+ * A unified abstraction over different HTTP runtime environments.
4
+ *
5
+ * The `ServerAdapter` interface allows the Kurdel runtime to operate
6
+ * in both long-running (Node.js) and request-scoped (Web/Edge) contexts
7
+ * using a shared contract.
8
+ *
9
+ * Implementations may bridge native platform primitives
10
+ * (e.g. Node’s `IncomingMessage`, Fetch API `Request`, etc.)
11
+ * into the framework-agnostic `HttpRequest` / `HttpResponse` types.
12
+ *
13
+ * ---
14
+ * ### Adapter responsibilities:
15
+ * - Translate platform-specific request/response objects.
16
+ * - Delegate execution to the runtime pipeline (middlewares + controller).
17
+ * - Manage platform-specific server lifecycle (optional).
18
+ *
19
+ * ### Typical Implementations:
20
+ * - **Node.js** → `NativeHttpServerAdapter` (uses `listen` / `close`)
21
+ * - **Web / Edge** → `WebHttpServerAdapter` (uses `handle`)
22
+ *
23
+ * ---
24
+ */
25
+ export interface ServerAdapter<R = HttpRequest, S = HttpResponse> {
26
+ /**
27
+ * Registers the platform-independent request handler.
28
+ *
29
+ * The runtime calls this once to connect the main execution pipeline.
30
+ *
31
+ * @example
32
+ * adapter.on(async (req, res) => {
33
+ * await router.dispatch(req, res);
34
+ * });
35
+ */
36
+ on(handler: (req: R, res: S) => void | Promise<void>): void;
37
+ /**
38
+ * Handles a single incoming request.
39
+ *
40
+ * This method is primarily used by environments that expose a Fetch-like API
41
+ * (such as Cloudflare Workers, Deno Deploy, Bun, or Vercel Edge).
42
+ *
43
+ * Implementations should adapt the incoming request object and return
44
+ * a platform-compatible response.
45
+ *
46
+ * @example
47
+ * const response = await adapter.handle(request);
48
+ */
49
+ handle?(request: unknown, ...args: unknown[]): Promise<unknown> | unknown;
50
+ /**
51
+ * Starts listening for incoming connections.
52
+ *
53
+ * Used by long-running environments (e.g., Node.js, Bun’s TCP mode).
54
+ * May be a no-op in serverless / edge environments.
55
+ *
56
+ * @example
57
+ * adapter.listen(3000, () => console.log('Server started'));
58
+ */
59
+ listen?(port: number, hostOrCb?: string | (() => void), cb?: () => void): void | Promise<void>;
60
+ /**
61
+ * Gracefully closes the underlying server.
62
+ *
63
+ * Optional. Typically used in tests or controlled shutdowns.
64
+ */
65
+ close?(): Promise<void>;
66
+ /**
67
+ * Returns the underlying platform-native server instance.
68
+ *
69
+ * This is a low-level escape hatch for advanced integrations
70
+ * (e.g., attaching WebSocket handlers, inspecting connections).
71
+ *
72
+ * @example
73
+ * const nodeServer = adapter.raw<import('../../http').Server>();
74
+ */
75
+ raw?<T = unknown>(): T | undefined;
76
+ /**
77
+ * Returns the effective base URL of the server, if applicable.
78
+ *
79
+ * Useful for testing, introspection, or constructing self-referential links.
80
+ */
81
+ url?(): string;
82
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-adapter.js","sourceRoot":"","sources":["../../../src/http/server/server-adapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
2
+ export type Route = {
3
+ method: Method;
4
+ path: string;
5
+ handler: Function;
6
+ };
7
+ export type Query = Readonly<Record<string, string | string[]>>;
8
+ export type JsonValue = string | number | boolean | null | undefined | JsonValue[] | {
9
+ [k: string]: JsonValue;
10
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/http/types.ts"],"names":[],"mappings":""}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * as http from './http/index.js';
2
+ export * as app from './app/index.js';
3
+ export * as db from './db/index.js';
4
+ export * as template from './template/index.js';
5
+ export * as tokens from './tokens/index.js';
package/lib/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * as http from './http/index.js';
2
+ export * as app from './app/index.js';
3
+ export * as db from './db/index.js';
4
+ export * as template from './template/index.js';
5
+ export * as tokens from './tokens/index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './template-engine.js';
2
+ export * from './template-tokens.js';
@@ -0,0 +1,3 @@
1
+ export * from './template-engine.js';
2
+ export * from './template-tokens.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export interface TemplateEngine {
2
+ render(templatePath: string, data: Record<string, unknown>): Promise<string>;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=template-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../src/template/template-engine.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import type { TemplateEngine } from '../template/index.js';
2
+ export declare const TemplateEngineToken: import("@kurdel/ioc").InjectionToken<TemplateEngine>;
@@ -0,0 +1,3 @@
1
+ import { createToken } from '@kurdel/ioc';
2
+ export const TemplateEngineToken = createToken('@kurdel/core/template/engine');
3
+ //# sourceMappingURL=template-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-tokens.js","sourceRoot":"","sources":["../../src/template/template-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAiB,8BAA8B,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './tokens.js';
@@ -0,0 +1,2 @@
1
+ export * from './tokens.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const TOKENS: {
2
+ TemplateEngineToken: import("@kurdel/ioc").InjectionToken<import("../template/index.js").TemplateEngine>;
3
+ OnStart: import("@kurdel/ioc").InjectionToken<import("../app/index.js").LifecycleHook[]>;
4
+ OnShutdown: import("@kurdel/ioc").InjectionToken<import("../app/index.js").LifecycleHook[]>;
5
+ ServerAdapter: import("@kurdel/ioc").InjectionToken<import("../http/index.js").ServerAdapter<import("@kurdel/common").HttpRequest, import("@kurdel/common").HttpResponse>>;
6
+ Router: import("@kurdel/ioc").InjectionToken<import("../http/index.js").Router>;
7
+ ControllerClasses: import("@kurdel/ioc").InjectionToken<import("../http/index.js").Controller<{}>[]>;
8
+ ControllerConfigs: import("@kurdel/ioc").InjectionToken<import("../http/index.js").ControllerConfig[]>;
9
+ MiddlewareRegistry: import("@kurdel/ioc").InjectionToken<import("../http/index.js").MiddlewareRegistry>;
10
+ ControllerResolver: import("@kurdel/ioc").InjectionToken<import("../http/index.js").ControllerResolver>;
11
+ ResponseRenderer: import("@kurdel/ioc").InjectionToken<import("../http/index.js").ResponseRenderer>;
12
+ };
@@ -0,0 +1,9 @@
1
+ import { HTTP_TOKENS } from '../http/index.js';
2
+ import { APP_TOKENS } from '../app/index.js';
3
+ import { TemplateEngineToken } from '../template/index.js';
4
+ export const TOKENS = {
5
+ ...HTTP_TOKENS,
6
+ ...APP_TOKENS,
7
+ TemplateEngineToken,
8
+ };
9
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tokens/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,WAAW;IACd,GAAG,UAAU;IACb,mBAAmB;CACpB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@kurdel/core",
3
+ "version": "0.1.0-beta.1",
4
+ "description": "Core HTTP, routing, controller, and model abstractions for Kurdel",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./lib/index.js",
8
+ "./http": "./lib/http/index.js",
9
+ "./app": "./lib/app/index.js",
10
+ "./db": "./lib/db/index.js",
11
+ "./template": "./lib/template/index.js",
12
+ "./tokens": "./lib/tokens/index.js"
13
+ },
14
+ "main": "./lib/index.js",
15
+ "types": "./lib/index.d.ts",
16
+ "files": [
17
+ "lib"
18
+ ],
19
+ "scripts": {
20
+ "prepack": "npm run build",
21
+ "test": "vitest run",
22
+ "test:ui": "vitest",
23
+ "test:watch": "vitest --watch",
24
+ "coverage": "vitest run --coverage",
25
+ "clean": "rimraf lib ../../.cache/tsconfig.core.build.tsbuildinfo",
26
+ "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
27
+ "build:force": "npm run clean && tsc -p tsconfig.build.json --force && tsc-alias -p tsconfig.build.json"
28
+ },
29
+ "keywords": [
30
+ "kurdel",
31
+ "framework",
32
+ "http",
33
+ "routing",
34
+ "typescript"
35
+ ],
36
+ "author": "Andrii Sorokin",
37
+ "license": "MIT",
38
+ "engines": {
39
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/ignorantic/kurdel.git",
44
+ "directory": "packages/core"
45
+ },
46
+ "homepage": "https://github.com/ignorantic/kurdel/tree/main/packages/core#readme",
47
+ "bugs": {
48
+ "url": "https://github.com/ignorantic/kurdel/issues"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public",
52
+ "tag": "beta"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^20.9.0",
56
+ "@types/supertest": "^6.0.3",
57
+ "@vitest/coverage-v8": "^3.2.4",
58
+ "rimraf": "^6.0.1",
59
+ "supertest": "^7.1.4",
60
+ "tsc-alias": "^1.8.16"
61
+ },
62
+ "dependencies": {
63
+ "@kurdel/common": "0.1.0-beta.1",
64
+ "@kurdel/db": "0.1.0-beta.1",
65
+ "@kurdel/ioc": "0.1.0-beta.1"
66
+ }
67
+ }