@forinda/kickjs 5.13.1 → 5.14.0-alpha.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 (163) hide show
  1. package/dist/{adapter-D1NzavIt.d.mts → adapter-EaDb0yXA.d.mts} +4 -4
  2. package/dist/{adapter-D1NzavIt.d.mts.map → adapter-EaDb0yXA.d.mts.map} +1 -1
  3. package/dist/{app-module-iAA20Cc6.d.mts → app-module-CFhn1C8b.d.mts} +3 -3
  4. package/dist/{app-module-iAA20Cc6.d.mts.map → app-module-CFhn1C8b.d.mts.map} +1 -1
  5. package/dist/{application-ChL6ufgq.d.mts → application-BEGxObrr.d.mts} +6 -6
  6. package/dist/{application-ChL6ufgq.d.mts.map → application-BEGxObrr.d.mts.map} +1 -1
  7. package/dist/{application-BTlWEKp2.mjs → application-BXWBAef4.mjs} +3 -3
  8. package/dist/{application-BTlWEKp2.mjs.map → application-BXWBAef4.mjs.map} +1 -1
  9. package/dist/{bootstrap-Cgt_j-0Q.d.mts → bootstrap-Cdofwou7.d.mts} +2 -2
  10. package/dist/{bootstrap-Cgt_j-0Q.d.mts.map → bootstrap-Cdofwou7.d.mts.map} +1 -1
  11. package/dist/{bootstrap-DoEPezno.mjs → bootstrap-Doj2e6IT.mjs} +3 -3
  12. package/dist/{bootstrap-DoEPezno.mjs.map → bootstrap-Doj2e6IT.mjs.map} +1 -1
  13. package/dist/{cache-XrNWj1KQ.d.mts → cache-BSFDtsEG.d.mts} +1 -1
  14. package/dist/{cache-XrNWj1KQ.d.mts.map → cache-BSFDtsEG.d.mts.map} +1 -1
  15. package/dist/config/index.d.mts +2 -2
  16. package/dist/config/index.mjs +2 -2
  17. package/dist/{config-Bbk1PLGo.mjs → config-DEB5UewY.mjs} +3 -3
  18. package/dist/{config-Bbk1PLGo.mjs.map → config-DEB5UewY.mjs.map} +1 -1
  19. package/dist/{container-B51bkskE.d.mts → container-TWOUyR_0.d.mts} +2 -2
  20. package/dist/container-TWOUyR_0.d.mts.map +1 -0
  21. package/dist/{container-Bq8VjG_Y.mjs → container-rkINSNRc.mjs} +3 -3
  22. package/dist/{container-Bq8VjG_Y.mjs.map → container-rkINSNRc.mjs.map} +1 -1
  23. package/dist/{context-D7sGbb8E.d.mts → context-BqxbiEPD.d.mts} +4 -4
  24. package/dist/context-BqxbiEPD.d.mts.map +1 -0
  25. package/dist/{context-CnyTYykn.mjs → context-Dn4pSsZM.mjs} +3 -3
  26. package/dist/{context-CnyTYykn.mjs.map → context-Dn4pSsZM.mjs.map} +1 -1
  27. package/dist/{context-decorator-BzcOhlej.d.mts → context-decorator--tgS3nKW.d.mts} +55 -21
  28. package/dist/{context-decorator-BzcOhlej.d.mts.map → context-decorator--tgS3nKW.d.mts.map} +1 -1
  29. package/dist/core/adapter.d.mts +1 -1
  30. package/dist/core/adapter.mjs +1 -1
  31. package/dist/core/app-module.d.mts +1 -1
  32. package/dist/core/app-module.mjs +1 -1
  33. package/dist/core/cache.d.mts +1 -1
  34. package/dist/core/cache.mjs +1 -1
  35. package/dist/core/container.d.mts +1 -1
  36. package/dist/core/container.mjs +2 -2
  37. package/dist/core/cron.d.mts +1 -1
  38. package/dist/core/cron.mjs +2 -2
  39. package/dist/core/decorators.d.mts +1 -1
  40. package/dist/core/decorators.mjs +2 -2
  41. package/dist/core/errors.d.mts +1 -1
  42. package/dist/core/errors.mjs +1 -1
  43. package/dist/core/interfaces.d.mts +1 -1
  44. package/dist/core/interfaces.mjs +1 -1
  45. package/dist/core/logger.d.mts +1 -1
  46. package/dist/core/logger.mjs +1 -1
  47. package/dist/core/path.d.mts +1 -1
  48. package/dist/core/path.mjs +1 -1
  49. package/dist/core/plugin.d.mts +1 -1
  50. package/dist/core/plugin.mjs +1 -1
  51. package/dist/core/reactivity.d.mts +1 -1
  52. package/dist/core/reactivity.mjs +1 -1
  53. package/dist/{core-CGEbLIPv.mjs → core-BiOTZWZk.mjs} +4 -4
  54. package/dist/core-BiOTZWZk.mjs.map +1 -0
  55. package/dist/{cors-BfgqfLPd.d.mts → cors-C4aSCD3J.d.mts} +1 -1
  56. package/dist/{cors-BfgqfLPd.d.mts.map → cors-C4aSCD3J.d.mts.map} +1 -1
  57. package/dist/{cron-GNoYydfg.d.mts → cron-DOOtTY4q.d.mts} +1 -1
  58. package/dist/{cron-GNoYydfg.d.mts.map → cron-DOOtTY4q.d.mts.map} +1 -1
  59. package/dist/{csrf-DiK9zept.d.mts → csrf-7nUXGTuz.d.mts} +1 -1
  60. package/dist/{csrf-DiK9zept.d.mts.map → csrf-7nUXGTuz.d.mts.map} +1 -1
  61. package/dist/{decorators-KbaPUBXd.d.mts → decorators-ejABLo9H.d.mts} +3 -3
  62. package/dist/decorators-ejABLo9H.d.mts.map +1 -0
  63. package/dist/env-B6aaB6dr.mjs +13 -0
  64. package/dist/env-B6aaB6dr.mjs.map +1 -0
  65. package/dist/{error-handler-C4SG5o_i.d.mts → error-handler-3ih4E-QZ.d.mts} +1 -1
  66. package/dist/error-handler-3ih4E-QZ.d.mts.map +1 -0
  67. package/dist/{errors-DytV77Hb.d.mts → errors-CRCTjEUK.d.mts} +1 -1
  68. package/dist/{errors-DytV77Hb.d.mts.map → errors-CRCTjEUK.d.mts.map} +1 -1
  69. package/dist/{execution-context-DKnt61pY.d.mts → execution-context-J97mWtz4.d.mts} +1 -1
  70. package/dist/{execution-context-DKnt61pY.d.mts.map → execution-context-J97mWtz4.d.mts.map} +1 -1
  71. package/dist/{helmet-CaMbjzBG.d.mts → helmet-CKzZzeNl.d.mts} +1 -1
  72. package/dist/{helmet-CaMbjzBG.d.mts.map → helmet-CKzZzeNl.d.mts.map} +1 -1
  73. package/dist/http/application.d.mts +1 -1
  74. package/dist/http/application.mjs +2 -2
  75. package/dist/http/bootstrap.d.mts +1 -1
  76. package/dist/http/bootstrap.mjs +2 -2
  77. package/dist/http/context.d.mts +3 -3
  78. package/dist/http/context.mjs +2 -2
  79. package/dist/http/middleware/cors.d.mts +1 -1
  80. package/dist/http/middleware/cors.mjs +1 -1
  81. package/dist/http/middleware/csrf.d.mts +1 -1
  82. package/dist/http/middleware/csrf.mjs +1 -1
  83. package/dist/http/middleware/error-handler.d.mts +1 -1
  84. package/dist/http/middleware/error-handler.mjs +2 -2
  85. package/dist/http/middleware/helmet.d.mts +1 -1
  86. package/dist/http/middleware/helmet.mjs +1 -1
  87. package/dist/http/middleware/rate-limit.d.mts +1 -1
  88. package/dist/http/middleware/rate-limit.mjs +1 -1
  89. package/dist/http/middleware/request-id.d.mts +1 -1
  90. package/dist/http/middleware/request-id.mjs +1 -1
  91. package/dist/http/middleware/request-logger.d.mts +1 -1
  92. package/dist/http/middleware/request-logger.mjs +2 -2
  93. package/dist/http/middleware/session.d.mts +1 -1
  94. package/dist/http/middleware/session.mjs +1 -1
  95. package/dist/http/middleware/spa.d.mts +1 -1
  96. package/dist/http/middleware/spa.mjs +2 -2
  97. package/dist/http/middleware/upload.d.mts +1 -1
  98. package/dist/http/middleware/upload.mjs +1 -1
  99. package/dist/http/middleware/validate.d.mts +1 -1
  100. package/dist/http/middleware/validate.mjs +2 -2
  101. package/dist/http/middleware/validate.mjs.map +1 -1
  102. package/dist/http/middleware/views.d.mts +1 -1
  103. package/dist/http/middleware/views.mjs +2 -2
  104. package/dist/http/query/index.d.mts +2 -2
  105. package/dist/http/query/index.mjs +2 -2
  106. package/dist/http/router-builder.d.mts +1 -1
  107. package/dist/http/router-builder.mjs +2 -2
  108. package/dist/{index-BM32LMqZ.d.mts → index-CFM7HDaD.d.mts} +38 -3
  109. package/dist/index-CFM7HDaD.d.mts.map +1 -0
  110. package/dist/{index-BYLVLFA8.d.mts → index-UpQwKBR3.d.mts} +7 -7
  111. package/dist/index-UpQwKBR3.d.mts.map +1 -0
  112. package/dist/{index-B9cyOQAe.d.mts → index-kEmG8nWU.d.mts} +1 -1
  113. package/dist/{index-B9cyOQAe.d.mts.map → index-kEmG8nWU.d.mts.map} +1 -1
  114. package/dist/index.d.mts +34 -34
  115. package/dist/index.mjs +2 -2
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/{interfaces-ClcFeDhd.d.mts → interfaces-DbTyKGdS.d.mts} +1 -1
  118. package/dist/{interfaces-ClcFeDhd.d.mts.map → interfaces-DbTyKGdS.d.mts.map} +1 -1
  119. package/dist/{logger-DyTCk-v1.d.mts → logger-BnBVjmDa.d.mts} +1 -1
  120. package/dist/{logger-DyTCk-v1.d.mts.map → logger-BnBVjmDa.d.mts.map} +1 -1
  121. package/dist/{metadata-pbYET01G.mjs → metadata-BQx4Gd9H.mjs} +2 -2
  122. package/dist/{metadata-pbYET01G.mjs.map → metadata-BQx4Gd9H.mjs.map} +1 -1
  123. package/dist/{path-Diviu6hv.d.mts → path-BVA9MfN1.d.mts} +1 -1
  124. package/dist/path-BVA9MfN1.d.mts.map +1 -0
  125. package/dist/{plugin-DG_jFA6h.d.mts → plugin-DEKMU50e.d.mts} +5 -5
  126. package/dist/{plugin-DG_jFA6h.d.mts.map → plugin-DEKMU50e.d.mts.map} +1 -1
  127. package/dist/{query-NrahUI9e.mjs → query-qSXmpuBe.mjs} +2 -2
  128. package/dist/{query-NrahUI9e.mjs.map → query-qSXmpuBe.mjs.map} +1 -1
  129. package/dist/{rate-limit-DUwoICtI.d.mts → rate-limit-oLL5EPUf.d.mts} +1 -1
  130. package/dist/{rate-limit-DUwoICtI.d.mts.map → rate-limit-oLL5EPUf.d.mts.map} +1 -1
  131. package/dist/{reactivity-BRvj7bdG.d.mts → reactivity-DWmLcN0A.d.mts} +1 -1
  132. package/dist/reactivity-DWmLcN0A.d.mts.map +1 -0
  133. package/dist/{request-id-BgglvZHN.d.mts → request-id-IDobbxU-.d.mts} +1 -1
  134. package/dist/request-id-IDobbxU-.d.mts.map +1 -0
  135. package/dist/{request-logger-CWHbAzTE.d.mts → request-logger-DZVW6VNI.d.mts} +1 -1
  136. package/dist/{request-logger-CWHbAzTE.d.mts.map → request-logger-DZVW6VNI.d.mts.map} +1 -1
  137. package/dist/{router-builder-CSAOc9MR.d.mts → router-builder-YUcLLArX.d.mts} +2 -2
  138. package/dist/{router-builder-CSAOc9MR.d.mts.map → router-builder-YUcLLArX.d.mts.map} +1 -1
  139. package/dist/{session-N0hActOO.d.mts → session-DSRA-PUX.d.mts} +1 -1
  140. package/dist/{session-N0hActOO.d.mts.map → session-DSRA-PUX.d.mts.map} +1 -1
  141. package/dist/{spa-DNOAvuFy.d.mts → spa-Cf2c2g7x.d.mts} +2 -2
  142. package/dist/{spa-DNOAvuFy.d.mts.map → spa-Cf2c2g7x.d.mts.map} +1 -1
  143. package/dist/{upload-7RRWSKkI.d.mts → upload-D6edAELH.d.mts} +2 -2
  144. package/dist/{upload-7RRWSKkI.d.mts.map → upload-D6edAELH.d.mts.map} +1 -1
  145. package/dist/{validate-HwAyWTwH.d.mts → validate-DoZDOhCi.d.mts} +8 -5
  146. package/dist/validate-DoZDOhCi.d.mts.map +1 -0
  147. package/dist/{views-srW0E4Ll.d.mts → views-D8Awr9tc.d.mts} +38 -6
  148. package/dist/views-D8Awr9tc.d.mts.map +1 -0
  149. package/package.json +10 -6
  150. package/dist/container-B51bkskE.d.mts.map +0 -1
  151. package/dist/context-D7sGbb8E.d.mts.map +0 -1
  152. package/dist/core-CGEbLIPv.mjs.map +0 -1
  153. package/dist/decorators-KbaPUBXd.d.mts.map +0 -1
  154. package/dist/env-BvCyDZYf.mjs +0 -12
  155. package/dist/env-BvCyDZYf.mjs.map +0 -1
  156. package/dist/error-handler-C4SG5o_i.d.mts.map +0 -1
  157. package/dist/index-BM32LMqZ.d.mts.map +0 -1
  158. package/dist/index-BYLVLFA8.d.mts.map +0 -1
  159. package/dist/path-Diviu6hv.d.mts.map +0 -1
  160. package/dist/reactivity-BRvj7bdG.d.mts.map +0 -1
  161. package/dist/request-id-BgglvZHN.d.mts.map +0 -1
  162. package/dist/validate-HwAyWTwH.d.mts.map +0 -1
  163. package/dist/views-srW0E4Ll.d.mts.map +0 -1
@@ -1,3 +1,3 @@
1
1
 
2
- import { a as baseEnvSchema, c as loadEnv, i as Env, l as reloadEnv, n as TypedConfigService, o as defineEnv, r as createConfigService, s as getEnv, t as ConfigService, u as resetEnvCache } from "../index-BM32LMqZ.mjs";
3
- export { ConfigService, Env, TypedConfigService, baseEnvSchema, createConfigService, defineEnv, getEnv, loadEnv, reloadEnv, resetEnvCache };
2
+ import { a as baseEnvSchema, c as loadEnv, d as resetEnvCache, i as Env, l as loadEnvFromSchema, n as TypedConfigService, o as defineEnv, r as createConfigService, s as getEnv, t as ConfigService, u as reloadEnv } from "../index-CFM7HDaD.mjs";
3
+ export { ConfigService, type Env, type TypedConfigService, baseEnvSchema, createConfigService, defineEnv, getEnv, loadEnv, loadEnvFromSchema, reloadEnv, resetEnvCache };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs v5.13.1
2
+ * @forinda/kickjs v5.14.0-alpha.0
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,4 +8,4 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{a as reloadEnv,i as loadEnv,n as defineEnv,o as resetEnvCache,r as getEnv,t as baseEnvSchema}from"../env-BvCyDZYf.mjs";import{n as createConfigService,t as ConfigService}from"../config-Bbk1PLGo.mjs";export{ConfigService,baseEnvSchema,createConfigService,defineEnv,getEnv,loadEnv,reloadEnv,resetEnvCache};
11
+ import{a as loadEnvFromSchema,i as loadEnv,n as defineEnv,o as reloadEnv,r as getEnv,s as resetEnvCache,t as baseEnvSchema}from"../env-B6aaB6dr.mjs";import{n as createConfigService,t as ConfigService}from"../config-DEB5UewY.mjs";export{ConfigService,baseEnvSchema,createConfigService,defineEnv,getEnv,loadEnv,loadEnvFromSchema,reloadEnv,resetEnvCache};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs v5.13.1
2
+ * @forinda/kickjs v5.14.0-alpha.0
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,5 +8,5 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{Service}from"./core/decorators.mjs";import{a as reloadEnv,i as loadEnv}from"./env-BvCyDZYf.mjs";function __decorate(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}let ConfigService=class{get env(){return loadEnv()}get(key){return this.env[key]}getAll(){return Object.freeze({...this.env})}reload(){reloadEnv(),loadEnv()}isProduction(){return this.env.NODE_ENV===`production`}isDevelopment(){return this.env.NODE_ENV===`development`}isTest(){return this.env.NODE_ENV===`test`}};ConfigService=__decorate([Service()],ConfigService);function createConfigService(schema){let SchemaConfigService=class{get env(){return loadEnv(schema)}get(key){return this.env[key]}getAll(){return Object.freeze({...this.env})}reload(){reloadEnv(),loadEnv(schema)}isProduction(){return this.env.NODE_ENV===`production`}isDevelopment(){return this.env.NODE_ENV===`development`}isTest(){return this.env.NODE_ENV===`test`}};return SchemaConfigService=__decorate([Service()],SchemaConfigService),SchemaConfigService}export{createConfigService as n,ConfigService as t};
12
- //# sourceMappingURL=config-Bbk1PLGo.mjs.map
11
+ import{Service}from"./core/decorators.mjs";import{i as loadEnv,o as reloadEnv}from"./env-B6aaB6dr.mjs";function __decorate(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}let ConfigService=class{get env(){return loadEnv()}get(key){return this.env[key]}getAll(){return Object.freeze({...this.env})}reload(){reloadEnv(),loadEnv()}isProduction(){return this.env.NODE_ENV===`production`}isDevelopment(){return this.env.NODE_ENV===`development`}isTest(){return this.env.NODE_ENV===`test`}};ConfigService=__decorate([Service()],ConfigService);function createConfigService(schema){let SchemaConfigService=class{get env(){return loadEnv(schema)}get(key){return this.env[key]}getAll(){return Object.freeze({...this.env})}reload(){reloadEnv(),loadEnv(schema)}isProduction(){return this.env.NODE_ENV===`production`}isDevelopment(){return this.env.NODE_ENV===`development`}isTest(){return this.env.NODE_ENV===`test`}};return SchemaConfigService=__decorate([Service()],SchemaConfigService),SchemaConfigService}export{createConfigService as n,ConfigService as t};
12
+ //# sourceMappingURL=config-DEB5UewY.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-Bbk1PLGo.mjs","names":[],"sources":["../src/config/config-service.ts"],"sourcesContent":["import type { z } from 'zod'\nimport { Service } from '../core/decorators'\nimport type { EnvKey } from '../core/decorators'\nimport { loadEnv, reloadEnv } from './env'\n\n/**\n * Constraint that locks the `key` argument to known `EnvKey` literals\n * once `kick typegen` has populated `KickEnv`. Mirrors the same trick\n * used by the `@Value` decorator: when `EnvKey` resolves to `never`\n * (no schema yet), accept any string for back-compat; once typegen\n * has run, require a known key.\n */\ntype ConfigKey<K extends string> = [EnvKey] extends [never] ? K : K & EnvKey\n\n/**\n * Resolve the return type for a `ConfigService.get(key)` call. When\n * `KickEnv` is populated and the key is a known one, returns the\n * schema-inferred type. Otherwise falls back to the caller-provided\n * generic `T` (default `any`) so existing call sites keep working.\n */\ntype ConfigValue<K extends string, T> = K extends EnvKey ? KickEnv[K] : T\n\n/**\n * Injectable service for accessing typed environment configuration.\n *\n * Once `kick typegen` has run against your `src/env.ts`, both `get()`\n * and `getAll()` are fully typed against the schema with **no extra\n * setup** — you just inject `ConfigService` and call it:\n *\n * ```ts\n * @Service()\n * class DatabaseService {\n * @Autowired() private readonly config!: ConfigService\n *\n * connect() {\n * const url = this.config.get('DATABASE_URL') // typed string\n * const port = this.config.get('PORT') // typed number\n * // const bad = this.config.get('NOPE') // tsc error\n * }\n * }\n * ```\n *\n * Without typegen the previous `<T = any>` generic still works, so\n * legacy code calling `config.get<string>('DATABASE_URL')` keeps\n * compiling.\n */\n@Service()\nexport class ConfigService {\n /**\n * Read the current parsed env on every access. We deliberately do **not**\n * snapshot in the constructor: if `ConfigService` is instantiated before\n * the user's `defineEnv()` schema has been registered (e.g. DI wires it\n * eagerly, or HMR's `reloadEnv()` cleared the cache between rebuilds),\n * an eager snapshot would freeze the base shape and never see the\n * extended values — even though `@Value()` (which reads lazily through\n * `Container._envResolver`) would resolve them correctly.\n *\n * `loadEnv()` is sticky: once an extended schema has been parsed it\n * keeps returning that schema's values, so this getter is cheap (one\n * cached lookup) and always consistent with `@Value`.\n */\n private get env(): Record<string, any> {\n return loadEnv() as Record<string, any>\n }\n\n /**\n * Get an env variable by key.\n *\n * - When `kick typegen` has run, `key` is constrained to known\n * `KickEnv` keys and the return type is inferred from the schema.\n * - When `KickEnv` is empty (no typegen run yet), any string is\n * accepted and `T` falls back to the explicit generic for\n * back-compat.\n */\n get<K extends string, T = any>(key: ConfigKey<K>): ConfigValue<K, T> {\n return this.env[key] as ConfigValue<K, T>\n }\n\n /**\n * Get all env config as a readonly object. When `KickEnv` is\n * populated by typegen, returns `Readonly<KickEnv>` so the caller\n * gets autocomplete on every key.\n */\n getAll(): [EnvKey] extends [never] ? Readonly<Record<string, any>> : Readonly<KickEnv> {\n return Object.freeze({ ...this.env }) as any\n }\n\n /** Reload env from .env file (for HMR / file-watch scenarios) */\n reload(): void {\n reloadEnv()\n // Touch loadEnv() so the resolver + cache are repopulated immediately.\n loadEnv()\n }\n\n isProduction(): boolean {\n return this.env.NODE_ENV === 'production'\n }\n\n isDevelopment(): boolean {\n return this.env.NODE_ENV === 'development'\n }\n\n isTest(): boolean {\n return this.env.NODE_ENV === 'test'\n }\n}\n\n/**\n * Typed config service interface — provides autocomplete for env keys.\n * Use with `createConfigService()` for full type safety.\n */\nexport interface TypedConfigService<TEnv extends Record<string, any>> {\n get<K extends string & keyof TEnv>(key: K): TEnv[K]\n getAll(): Readonly<TEnv>\n reload(): void\n isProduction(): boolean\n isDevelopment(): boolean\n isTest(): boolean\n}\n\n/**\n * Create a typed ConfigService class bound to a specific Zod env schema.\n * The returned class is DI-injectable via `@Service()` and provides\n * fully typed `get()` with key autocomplete.\n *\n * @example\n * ```ts\n * const envSchema = defineEnv((base) =>\n * base.extend({\n * DATABASE_URL: z.string().url(),\n * JWT_SECRET: z.string().min(32),\n * })\n * )\n *\n * // Create a typed, injectable config service\n * export const AppConfigService = createConfigService(envSchema)\n * export type AppConfigService = InstanceType<typeof AppConfigService>\n *\n * // In a controller or service — inject it:\n * @Controller()\n * class UserController {\n * constructor(@Inject(AppConfigService) private config: AppConfigService) {\n * const dbUrl = config.get('DATABASE_URL') // string — autocompletes!\n * const bad = config.get('NOPE') // TS error\n * }\n * }\n * ```\n */\nexport function createConfigService<T extends z.ZodObject<any>>(schema: T) {\n type TEnv = z.infer<T>\n\n @Service()\n class SchemaConfigService implements TypedConfigService<TEnv> {\n /** See note on `ConfigService.env` — same eager-snapshot hazard. */\n private get env(): TEnv {\n return loadEnv(schema)\n }\n\n get<K extends string & keyof TEnv>(key: K): TEnv[K] {\n return this.env[key]\n }\n\n getAll(): Readonly<TEnv> {\n return Object.freeze({ ...this.env })\n }\n\n reload(): void {\n reloadEnv()\n loadEnv(schema)\n }\n\n isProduction(): boolean {\n return this.env.NODE_ENV === 'production'\n }\n\n isDevelopment(): boolean {\n return this.env.NODE_ENV === 'development'\n }\n\n isTest(): boolean {\n return this.env.NODE_ENV === 'test'\n }\n }\n\n return SchemaConfigService as {\n new (): TypedConfigService<TEnv>\n }\n}\n"],"mappings":";;;;;;;;;;uhBA+CO,IAAA,cAAA,KAAoB,CAczB,IAAY,KAA2B,CACrC,OAAO,QAAQ,CACjB,CAWA,IAA+B,IAAsC,CACnE,OAAO,KAAK,IAAI,IAClB,CAOA,QAAuF,CACrF,OAAO,OAAO,OAAO,CAAE,GAAG,KAAK,GAAI,CAAC,CACtC,CAGA,QAAe,CACb,UAAU,EAEV,QAAQ,CACV,CAEA,cAAwB,CACtB,OAAO,KAAK,IAAI,WAAa,YAC/B,CAEA,eAAyB,CACvB,OAAO,KAAK,IAAI,WAAa,aAC/B,CAEA,QAAkB,CAChB,OAAO,KAAK,IAAI,WAAa,MAC/B,CACF,4BA3DC,QAAQ,CAAA,EAAA,aAAA,EAsGT,SAAgB,oBAAgD,OAAW,CAGzE,IAAA,oBAAA,KAC8D,CAE5D,IAAY,KAAY,CACtB,OAAO,QAAQ,MAAM,CACvB,CAEA,IAAmC,IAAiB,CAClD,OAAO,KAAK,IAAI,IAClB,CAEA,QAAyB,CACvB,OAAO,OAAO,OAAO,CAAE,GAAG,KAAK,GAAI,CAAC,CACtC,CAEA,QAAe,CACb,UAAU,EACV,QAAQ,MAAM,CAChB,CAEA,cAAwB,CACtB,OAAO,KAAK,IAAI,WAAa,YAC/B,CAEA,eAAyB,CACvB,OAAO,KAAK,IAAI,WAAa,aAC/B,CAEA,QAAkB,CAChB,OAAO,KAAK,IAAI,WAAa,MAC/B,CACF,EAEA,uCAjCC,QAAQ,CAAA,EAAA,mBAAA,EAiCF,mBAGT"}
1
+ {"version":3,"file":"config-DEB5UewY.mjs","names":[],"sources":["../src/config/config-service.ts"],"sourcesContent":["import type { z } from 'zod'\nimport { Service } from '../core/decorators'\nimport type { EnvKey } from '../core/decorators'\nimport { loadEnv, reloadEnv } from './env'\n\n/**\n * Constraint that locks the `key` argument to known `EnvKey` literals\n * once `kick typegen` has populated `KickEnv`. Mirrors the same trick\n * used by the `@Value` decorator: when `EnvKey` resolves to `never`\n * (no schema yet), accept any string for back-compat; once typegen\n * has run, require a known key.\n */\ntype ConfigKey<K extends string> = [EnvKey] extends [never] ? K : K & EnvKey\n\n/**\n * Resolve the return type for a `ConfigService.get(key)` call. When\n * `KickEnv` is populated and the key is a known one, returns the\n * schema-inferred type. Otherwise falls back to the caller-provided\n * generic `T` (default `any`) so existing call sites keep working.\n */\ntype ConfigValue<K extends string, T> = K extends EnvKey ? KickEnv[K] : T\n\n/**\n * Injectable service for accessing typed environment configuration.\n *\n * Once `kick typegen` has run against your `src/env.ts`, both `get()`\n * and `getAll()` are fully typed against the schema with **no extra\n * setup** — you just inject `ConfigService` and call it:\n *\n * ```ts\n * @Service()\n * class DatabaseService {\n * @Autowired() private readonly config!: ConfigService\n *\n * connect() {\n * const url = this.config.get('DATABASE_URL') // typed string\n * const port = this.config.get('PORT') // typed number\n * // const bad = this.config.get('NOPE') // tsc error\n * }\n * }\n * ```\n *\n * Without typegen the previous `<T = any>` generic still works, so\n * legacy code calling `config.get<string>('DATABASE_URL')` keeps\n * compiling.\n */\n@Service()\nexport class ConfigService {\n /**\n * Read the current parsed env on every access. We deliberately do **not**\n * snapshot in the constructor: if `ConfigService` is instantiated before\n * the user's `defineEnv()` schema has been registered (e.g. DI wires it\n * eagerly, or HMR's `reloadEnv()` cleared the cache between rebuilds),\n * an eager snapshot would freeze the base shape and never see the\n * extended values — even though `@Value()` (which reads lazily through\n * `Container._envResolver`) would resolve them correctly.\n *\n * `loadEnv()` is sticky: once an extended schema has been parsed it\n * keeps returning that schema's values, so this getter is cheap (one\n * cached lookup) and always consistent with `@Value`.\n */\n private get env(): Record<string, any> {\n return loadEnv() as Record<string, any>\n }\n\n /**\n * Get an env variable by key.\n *\n * - When `kick typegen` has run, `key` is constrained to known\n * `KickEnv` keys and the return type is inferred from the schema.\n * - When `KickEnv` is empty (no typegen run yet), any string is\n * accepted and `T` falls back to the explicit generic for\n * back-compat.\n */\n get<K extends string, T = any>(key: ConfigKey<K>): ConfigValue<K, T> {\n return this.env[key] as ConfigValue<K, T>\n }\n\n /**\n * Get all env config as a readonly object. When `KickEnv` is\n * populated by typegen, returns `Readonly<KickEnv>` so the caller\n * gets autocomplete on every key.\n */\n getAll(): [EnvKey] extends [never] ? Readonly<Record<string, any>> : Readonly<KickEnv> {\n return Object.freeze({ ...this.env }) as any\n }\n\n /** Reload env from .env file (for HMR / file-watch scenarios) */\n reload(): void {\n reloadEnv()\n // Touch loadEnv() so the resolver + cache are repopulated immediately.\n loadEnv()\n }\n\n isProduction(): boolean {\n return this.env.NODE_ENV === 'production'\n }\n\n isDevelopment(): boolean {\n return this.env.NODE_ENV === 'development'\n }\n\n isTest(): boolean {\n return this.env.NODE_ENV === 'test'\n }\n}\n\n/**\n * Typed config service interface — provides autocomplete for env keys.\n * Use with `createConfigService()` for full type safety.\n */\nexport interface TypedConfigService<TEnv extends Record<string, any>> {\n get<K extends string & keyof TEnv>(key: K): TEnv[K]\n getAll(): Readonly<TEnv>\n reload(): void\n isProduction(): boolean\n isDevelopment(): boolean\n isTest(): boolean\n}\n\n/**\n * Create a typed ConfigService class bound to a specific Zod env schema.\n * The returned class is DI-injectable via `@Service()` and provides\n * fully typed `get()` with key autocomplete.\n *\n * @example\n * ```ts\n * const envSchema = defineEnv((base) =>\n * base.extend({\n * DATABASE_URL: z.string().url(),\n * JWT_SECRET: z.string().min(32),\n * })\n * )\n *\n * // Create a typed, injectable config service\n * export const AppConfigService = createConfigService(envSchema)\n * export type AppConfigService = InstanceType<typeof AppConfigService>\n *\n * // In a controller or service — inject it:\n * @Controller()\n * class UserController {\n * constructor(@Inject(AppConfigService) private config: AppConfigService) {\n * const dbUrl = config.get('DATABASE_URL') // string — autocompletes!\n * const bad = config.get('NOPE') // TS error\n * }\n * }\n * ```\n */\nexport function createConfigService<T extends z.ZodObject<any>>(schema: T) {\n type TEnv = z.infer<T>\n\n @Service()\n class SchemaConfigService implements TypedConfigService<TEnv> {\n /** See note on `ConfigService.env` — same eager-snapshot hazard. */\n private get env(): TEnv {\n return loadEnv(schema)\n }\n\n get<K extends string & keyof TEnv>(key: K): TEnv[K] {\n return this.env[key]\n }\n\n getAll(): Readonly<TEnv> {\n return Object.freeze({ ...this.env })\n }\n\n reload(): void {\n reloadEnv()\n loadEnv(schema)\n }\n\n isProduction(): boolean {\n return this.env.NODE_ENV === 'production'\n }\n\n isDevelopment(): boolean {\n return this.env.NODE_ENV === 'development'\n }\n\n isTest(): boolean {\n return this.env.NODE_ENV === 'test'\n }\n }\n\n return SchemaConfigService as {\n new (): TypedConfigService<TEnv>\n }\n}\n"],"mappings":";;;;;;;;;;uhBA+CO,IAAA,cAAA,KAAoB,CAczB,IAAY,KAA2B,CACrC,OAAO,QAAQ,CACjB,CAWA,IAA+B,IAAsC,CACnE,OAAO,KAAK,IAAI,IAClB,CAOA,QAAuF,CACrF,OAAO,OAAO,OAAO,CAAE,GAAG,KAAK,GAAI,CAAC,CACtC,CAGA,QAAe,CACb,UAAU,EAEV,QAAQ,CACV,CAEA,cAAwB,CACtB,OAAO,KAAK,IAAI,WAAa,YAC/B,CAEA,eAAyB,CACvB,OAAO,KAAK,IAAI,WAAa,aAC/B,CAEA,QAAkB,CAChB,OAAO,KAAK,IAAI,WAAa,MAC/B,CACF,4BA3DC,QAAQ,CAAA,EAAA,aAAA,EAsGT,SAAgB,oBAAgD,OAAW,CAGzE,IAAA,oBAAA,KAC8D,CAE5D,IAAY,KAAY,CACtB,OAAO,QAAQ,MAAM,CACvB,CAEA,IAAmC,IAAiB,CAClD,OAAO,KAAK,IAAI,IAClB,CAEA,QAAyB,CACvB,OAAO,OAAO,OAAO,CAAE,GAAG,KAAK,GAAI,CAAC,CACtC,CAEA,QAAe,CACb,UAAU,EACV,QAAQ,MAAM,CAChB,CAEA,cAAwB,CACtB,OAAO,KAAK,IAAI,WAAa,YAC/B,CAEA,eAAyB,CACvB,OAAO,KAAK,IAAI,WAAa,aAC/B,CAEA,QAAkB,CAChB,OAAO,KAAK,IAAI,WAAa,MAC/B,CACF,EAEA,uCAjCC,QAAQ,CAAA,EAAA,mBAAA,EAiCF,mBAGT"}
@@ -1,5 +1,5 @@
1
1
 
2
- import { c as Scope, i as Constructor, r as ClassKind, s as PostConstructStatus } from "./interfaces-ClcFeDhd.mjs";
2
+ import { c as Scope, i as Constructor, r as ClassKind, s as PostConstructStatus } from "./interfaces-DbTyKGdS.mjs";
3
3
  //#region src/core/token.d.ts
4
4
  /**
5
5
  * Collision-safe injection tokens with phantom type parameters.
@@ -261,4 +261,4 @@ declare class Container {
261
261
  }
262
262
  //#endregion
263
263
  export { tokenName as a, createToken as c, KickJsRegistry as i, isInjectionToken as l, ContainerChangeEvent as n, INJECTION_TOKEN as o, ContainerChangeListener as r, InjectionToken as s, Container as t };
264
- //# sourceMappingURL=container-B51bkskE.d.mts.map
264
+ //# sourceMappingURL=container-TWOUyR_0.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-TWOUyR_0.d.mts","names":[],"sources":["../src/core/token.ts","../src/core/container.ts"],"mappings":";;;;;;;AAmDA;;;;AAA2F;AAW3F;;;;;;;;;;AAKoB;AAUpB;;;;;;;;;AAA8D;AAQ9D;;;;;;;;AAAyE;;;;AC5BzE;;;;AAAoC;AAqBpC;;;AArBA,cDNa,eAAA;;;;;;;AC+BF;AAIX;;UDxBiB,cAAA;EAAA,UACL,eAAA;ECuB0D;EAAA,SDrB3D,IAAA;ECwCoB;EAAA,SDtCpB,KAAA,GAAQ,CAAC;AAAA;ACsCW;AA+B/B;;;;;;AA/B+B,iBD5Bf,WAAA,IAAe,IAAA,WAAe,cAAc,CAAC,CAAA;;iBAQ7C,gBAAA,CAAiB,KAAA,YAAiB,KAAA,IAAS,cAAc;;;;iBC5BzD,SAAA,CAAU,KAAU;;UAqBnB,oBAAA;EACf,KAAA;EACA,KAAA;EACA,IAAA,GAAO,SAAS;EAChB,SAAA;AAAA;;KAIU,uBAAA,IAA2B,OAA+B,EAAtB,oBAAoB;;;;;;ADnBhD;AAUpB;;;;;;;;;AAA8D;AAQ9D;UCoBiB,cAAA;;;;;;ADpBwD;;;;AC5BzE;;cA+Ea,SAAA;EAAA,eACI,QAAA;EAAA,QACP,aAAA;EAAA,QACA,SAAA;EAAA,QAGA,eAAA;EAAA,QACA,cAAA;EAAA,QACA,WAAA;EAAA,wBACgB,WAAA;EAjExB;EAAA,OAoEO,QAAA,IAAY,SAAA,EAAW,SAAA;EAnEvB;EAAA,OAqEA,QAAA,IAAY,SAAA,EAAW,SAAA;EApErB;AAAA;AAIX;;;EAJW,OA0EF,YAAA,IAAgB,GAAA;EAtE6C;AAmBtE;;;;AAA+B;EAnBuC,OA6E7D,qBAAA;IACM,SAAA,EAAW,GAAA;IAAe,MAAA,EAAQ,GAAA;EAAA;EAAA,OAGxC,WAAA,IAAe,SAAA;EAHE;;;;;EAAA,OAoBjB,KAAA;EAwEgD;;;;;;;;;;;EAAA,OAnBhD,MAAA,IAAU,SAAA;EA2I2C;EAtI5D,QAAA,CAAS,KAAA,OAAY,MAAA,EAAQ,WAAA,EAAa,KAAA,GAAO,KAAA;EAuInB;EAzH9B,eAAA,CAAgB,KAAA,OAAY,OAAA,aAAoB,KAAA,GAAO,KAAA;EAwQb;EAjO1C,gBAAA,CAAiB,KAAA,OAAY,QAAA;EA9Jd;EA2Lf,GAAA,CAAI,KAAA;EAzLI;EA8LR,gBAAA,IAAoB,KAAA;IAClB,KAAA;IACA,KAAA;IACA,IAAA,EAAM,SAAA;IACN,YAAA;IACA,YAAA;IACA,cAAA;IACA,eAAA;IACA,iBAAA;IACA,mBAAA,EAAqB,mBAAA;IACrB,YAAA;EAAA;EAhLK;;;;;;;;;;;;;EAmNP,OAAA,IAAW,KAAA,EAAO,cAAA,CAAe,CAAA,IAAK,CAAA;EACtC,OAAA,IAAW,KAAA,EAAO,WAAA,CAAY,CAAA,IAAK,CAAA;EACnC,OAAA,iBAAwB,cAAA,WAAyB,KAAA,EAAO,CAAA,GAAI,cAAA,CAAe,CAAA;EAC3E,OAAA,UAAiB,KAAA,QAAa,CAAA;EAzHd;EAyOhB,SAAA;EAzOuD;;;;;;;;;;;;;;;;;;;;;;;;EAwQvD,QAAA,CAAS,QAAA,EAAU,uBAAA;EAlJR;;;;;;;;EA+JX,UAAA,CAAW,KAAA;EA7JH;EAAA,QAsLA,IAAA;EAtLgD;EAoNxD,YAAA;EAAA,QAgBQ,cAAA;EApOmE;;;;;;;;;;EAAA,QA4TnE,mBAAA;EAAA,QAuBA,gBAAA;AAAA"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs v5.13.1
2
+ * @forinda/kickjs v5.14.0-alpha.0
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{METADATA}from"./core/interfaces.mjs";import{createLogger}from"./core/logger.mjs";import{i as getMetaRecord,n as getClassMetaOrUndefined,o as getMethodMetaOrUndefined,r as getMetaMap,t as getClassMeta}from"./metadata-pbYET01G.mjs";import{createRequire}from"node:module";import"reflect-metadata";import{existsSync,readFileSync,readdirSync}from"node:fs";import{isAbsolute,join,resolve,sep}from"node:path";var __require=createRequire(import.meta.url);const INJECTION_TOKEN=Symbol.for(`@kickjs/InjectionToken`);function createToken(name){return Object.freeze({[INJECTION_TOKEN]:!0,name})}function isInjectionToken(value){return typeof value==`object`&&!!value&&value[INJECTION_TOKEN]===!0}function groupAssetKeys(namespace,paths,opts={}){let strategy=opts.strategy??`auto`;if(strategy===`with-extension`)return{pairs:paths.map(rel=>({rel,key:`${namespace}/${rel}`})),collisionGroupsResolved:0};if(strategy===`strip`)return{pairs:paths.map(rel=>({rel,key:`${namespace}/${stripExt(rel)}`})),collisionGroupsResolved:0};let groups=new Map;for(let rel of paths){let strippedKey=`${namespace}/${stripExt(rel)}`,arr=groups.get(strippedKey);arr?arr.push(rel):groups.set(strippedKey,[rel])}let collisionGroupsResolved=0,keyByRel=new Map;for(let[strippedKey,rels]of groups)if(rels.length===1)keyByRel.set(rels[0],strippedKey);else{collisionGroupsResolved+=1;for(let rel of rels)keyByRel.set(rel,`${namespace}/${rel}`)}return{pairs:paths.map(rel=>({rel,key:keyByRel.get(rel)??`${namespace}/${rel}`})),collisionGroupsResolved}}function stripExt(path){let lastSlash=path.lastIndexOf(`/`),filename=lastSlash>=0?path.slice(lastSlash+1):path,lastDot=filename.lastIndexOf(`.`);return lastDot<=0?path:(lastSlash>=0?path.slice(0,lastSlash+1):``)+filename.slice(0,lastDot)}const ASSET_MANIFEST_VERSION=1,ASSETS=createToken(`kick/assets/Map`);var UnknownAssetError=class extends Error{namespace;key;constructor(namespace,key){super(`Unknown asset '${namespace}/${key}'. Make sure the namespace exists in kick.config.ts assetMap and that the file is present in the source directory.`),this.name=`UnknownAssetError`,this.namespace=namespace,this.key=key}};let manifestCache;function toPosixPath(p){return p.replaceAll(`\\`,`/`)}function resolveAsset(namespace,key){let resolved=loadManifest();if(!resolved)throw new UnknownAssetError(namespace,key);let entry=resolved.manifest.entries[`${namespace}/${key}`];if(!entry)throw new UnknownAssetError(namespace,key);return toPosixPath(isAbsolute(entry)?entry:resolve(resolved.root,entry))}function clearAssetCache(){manifestCache=void 0}function loadManifest(){return process.env.NODE_ENV===`production`?(manifestCache===void 0&&(manifestCache=discoverManifest()),manifestCache):discoverManifest()}function discoverManifest(){let envRoot=process.env.KICK_ASSETS_ROOT;if(envRoot){let fromEnv=readBuiltManifest(envRoot);if(fromEnv)return fromEnv}let cwd=process.cwd(),config=loadConfigSync(cwd),configOutDir=config?.build?.outDir;if(configOutDir&&!STANDARD_OUT_DIRS.includes(configOutDir)){let found=readBuiltManifest(resolve(cwd,configOutDir));if(found)return found}for(let candidate of STANDARD_OUT_DIRS){let found=readBuiltManifest(join(cwd,candidate));if(found)return found}return synthesiseDevManifest(cwd,config)}const STANDARD_OUT_DIRS=[`dist`,`build`,`out`];function readBuiltManifest(dir){let path=join(dir,`.kickjs-assets.json`);if(!existsSync(path))return null;try{let raw=readFileSync(path,`utf-8`),parsed=JSON.parse(raw);return parsed.version!==1||!parsed.entries||typeof parsed.entries!=`object`?null:{manifest:parsed,root:resolve(dir)}}catch{return null}}function synthesiseDevManifest(cwd,preloadedConfig){let config=preloadedConfig===void 0?loadConfigSync(cwd):preloadedConfig;if(!config?.assetMap)return null;let entries={};for(let[namespace,entry]of Object.entries(config.assetMap)){if(!entry||typeof entry.src!=`string`)continue;let srcAbs=resolve(cwd,entry.src);if(!existsSync(srcAbs))continue;let collected=[];walkSync(srcAbs,srcAbs,(relPath,absPath)=>{entry.glob&&!matchesGlobLite(relPath,entry.glob,namespace)||collected.push({rel:relPath,abs:absPath})}),collected.sort((a,b)=>a.rel.localeCompare(b.rel));let{pairs,collisionGroupsResolved}=groupAssetKeys(namespace,collected.map(c=>c.rel),{strategy:entry.keys??`auto`}),absByRel=new Map(collected.map(c=>[c.rel,c.abs]));for(let{rel,key}of pairs){let abs=absByRel.get(rel);abs&&(entries[key]=abs)}collisionGroupsResolved>0&&process.env.NODE_ENV!==`production`&&console.log(`[kickjs/assets] '${namespace}': ${collisionGroupsResolved} basename collision(s) auto-resolved by keeping extensions (set assetMap.${namespace}.keys to 'strip' or 'with-extension' to override).`)}return{manifest:{version:1,entries},root:cwd}}const warnedGlobs=new Set;function matchesGlobLite(relPath,pattern,namespace){if(pattern===`**/*`||pattern===`**`)return!0;let singleExt=/^\*\*\/\*\.(\w+)$/.exec(pattern);if(singleExt)return relPath.endsWith(`.${singleExt[1]}`);let braceExt=/^\*\*\/\*\.\{([^}]+)\}$/.exec(pattern);if(braceExt)return braceExt[1].split(`,`).map(e=>e.trim()).some(ext=>relPath.endsWith(`.${ext}`));let tag=`${namespace}::${pattern}`;return warnedGlobs.has(tag)||(warnedGlobs.add(tag),console.warn(`[kickjs/assets] Dev-mode glob '${pattern}' on '${namespace}' isn't recognised by the lite matcher. Falling back to '**/*'. Run 'kick build:assets' to use the full glob engine.`)),!0}function walkSync(root,dir,onFile){let entries;try{entries=readdirSync(dir,{withFileTypes:!0})}catch{return}for(let entry of entries){if(entry.name===`node_modules`||entry.name.startsWith(`.`))continue;let full=join(dir,entry.name);entry.isDirectory()?walkSync(root,full,onFile):entry.isFile()&&onFile(full.slice(root.length+1).split(sep).join(`/`),full)}}function loadConfigSync(cwd){let jsonPath=join(cwd,`kick.config.json`);if(existsSync(jsonPath))try{return JSON.parse(readFileSync(jsonPath,`utf-8`))}catch{return null}for(let filename of[`kick.config.cjs`,`kick.config.js`]){let path=join(cwd,filename);if(existsSync(path))try{let{createRequire}=__require(`node:module`),mod=createRequire(join(cwd,`package.json`))(path);return mod.default??mod??null}catch{continue}}return null}const PROMISE_DETECTION_KEYS=new Set([`then`]),PASSTHROUGH_KEYS=new Set([`toString`,`valueOf`,`constructor`,`prototype`,`name`,`length`,`asymmetricMatch`,`nodeType`,Symbol.toPrimitive,Symbol.toStringTag,Symbol.iterator,Symbol.asyncIterator]);function createNamespaceProxy(parts){return new Proxy(function(){},{apply(){if(parts.length<2)throw new UnknownAssetError(parts[0]??``,``);let[namespace,...rest]=parts;return resolveAsset(namespace,rest.join(`/`))},get(t,prop){if(!PROMISE_DETECTION_KEYS.has(prop)){if(PASSTHROUGH_KEYS.has(prop))return Reflect.get(t,prop);if(typeof prop!=`symbol`)return createNamespaceProxy([...parts,prop])}}})}function createAssetProxy(){return new Proxy({},{get(t,prop){if(!PROMISE_DETECTION_KEYS.has(prop)){if(PASSTHROUGH_KEYS.has(prop))return Reflect.get(t,prop);if(typeof prop!=`symbol`)return createNamespaceProxy([prop])}}})}const assets=createAssetProxy();function useAssets(){return assets}var KickError=class extends Error{code;summary;cause;fix;docsUrl;context;constructor(init){super(formatKickError(init,{color:!1})),this.name=`KickError`,this.code=init.code,this.summary=init.summary,init.cause!==void 0&&(this.cause=init.cause),init.fix!==void 0&&(this.fix=init.fix),init.docsUrl!==void 0&&(this.docsUrl=init.docsUrl),init.context!==void 0&&(this.context=init.context)}};function ansiEnabled(){return process.env.NO_COLOR?!1:process.env.FORCE_COLOR?!0:process.stderr?.isTTY===!0}function paint(text,code,enabled){return enabled?`[${code}m${text}`:text}const c={red:(s,enabled)=>paint(s,`31`,enabled),bold:(s,enabled)=>paint(s,`1`,enabled),dim:(s,enabled)=>paint(s,`2`,enabled),cyan:(s,enabled)=>paint(s,`36`,enabled),blue:(s,enabled)=>paint(s,`34`,enabled),underline:(s,enabled)=>paint(s,`4`,enabled)};function formatKickError(err,options={}){let color=options.color??ansiEnabled(),lines=[],code=c.bold(c.red(err.code,color),color);if(lines.push(`${code}: ${err.summary}`),err.cause){lines.push(``,` ${c.bold(c.dim(`Cause:`,color),color)}`);for(let line of err.cause.split(`
11
+ import{METADATA}from"./core/interfaces.mjs";import{createLogger}from"./core/logger.mjs";import{i as getMetaRecord,n as getClassMetaOrUndefined,o as getMethodMetaOrUndefined,r as getMetaMap,t as getClassMeta}from"./metadata-BQx4Gd9H.mjs";import{createRequire}from"node:module";import"reflect-metadata";import{existsSync,readFileSync,readdirSync}from"node:fs";import{isAbsolute,join,resolve,sep}from"node:path";var __require=createRequire(import.meta.url);const INJECTION_TOKEN=Symbol.for(`@kickjs/InjectionToken`);function createToken(name){return Object.freeze({[INJECTION_TOKEN]:!0,name})}function isInjectionToken(value){return typeof value==`object`&&!!value&&value[INJECTION_TOKEN]===!0}function groupAssetKeys(namespace,paths,opts={}){let strategy=opts.strategy??`auto`;if(strategy===`with-extension`)return{pairs:paths.map(rel=>({rel,key:`${namespace}/${rel}`})),collisionGroupsResolved:0};if(strategy===`strip`)return{pairs:paths.map(rel=>({rel,key:`${namespace}/${stripExt(rel)}`})),collisionGroupsResolved:0};let groups=new Map;for(let rel of paths){let strippedKey=`${namespace}/${stripExt(rel)}`,arr=groups.get(strippedKey);arr?arr.push(rel):groups.set(strippedKey,[rel])}let collisionGroupsResolved=0,keyByRel=new Map;for(let[strippedKey,rels]of groups)if(rels.length===1)keyByRel.set(rels[0],strippedKey);else{collisionGroupsResolved+=1;for(let rel of rels)keyByRel.set(rel,`${namespace}/${rel}`)}return{pairs:paths.map(rel=>({rel,key:keyByRel.get(rel)??`${namespace}/${rel}`})),collisionGroupsResolved}}function stripExt(path){let lastSlash=path.lastIndexOf(`/`),filename=lastSlash>=0?path.slice(lastSlash+1):path,lastDot=filename.lastIndexOf(`.`);return lastDot<=0?path:(lastSlash>=0?path.slice(0,lastSlash+1):``)+filename.slice(0,lastDot)}const ASSET_MANIFEST_VERSION=1,ASSETS=createToken(`kick/assets/Map`);var UnknownAssetError=class extends Error{namespace;key;constructor(namespace,key){super(`Unknown asset '${namespace}/${key}'. Make sure the namespace exists in kick.config.ts assetMap and that the file is present in the source directory.`),this.name=`UnknownAssetError`,this.namespace=namespace,this.key=key}};let manifestCache;function toPosixPath(p){return p.replaceAll(`\\`,`/`)}function resolveAsset(namespace,key){let resolved=loadManifest();if(!resolved)throw new UnknownAssetError(namespace,key);let entry=resolved.manifest.entries[`${namespace}/${key}`];if(!entry)throw new UnknownAssetError(namespace,key);return toPosixPath(isAbsolute(entry)?entry:resolve(resolved.root,entry))}function clearAssetCache(){manifestCache=void 0}function loadManifest(){return process.env.NODE_ENV===`production`?(manifestCache===void 0&&(manifestCache=discoverManifest()),manifestCache):discoverManifest()}function discoverManifest(){let envRoot=process.env.KICK_ASSETS_ROOT;if(envRoot){let fromEnv=readBuiltManifest(envRoot);if(fromEnv)return fromEnv}let cwd=process.cwd(),config=loadConfigSync(cwd),configOutDir=config?.build?.outDir;if(configOutDir&&!STANDARD_OUT_DIRS.includes(configOutDir)){let found=readBuiltManifest(resolve(cwd,configOutDir));if(found)return found}for(let candidate of STANDARD_OUT_DIRS){let found=readBuiltManifest(join(cwd,candidate));if(found)return found}return synthesiseDevManifest(cwd,config)}const STANDARD_OUT_DIRS=[`dist`,`build`,`out`];function readBuiltManifest(dir){let path=join(dir,`.kickjs-assets.json`);if(!existsSync(path))return null;try{let raw=readFileSync(path,`utf-8`),parsed=JSON.parse(raw);return parsed.version!==1||!parsed.entries||typeof parsed.entries!=`object`?null:{manifest:parsed,root:resolve(dir)}}catch{return null}}function synthesiseDevManifest(cwd,preloadedConfig){let config=preloadedConfig===void 0?loadConfigSync(cwd):preloadedConfig;if(!config?.assetMap)return null;let entries={};for(let[namespace,entry]of Object.entries(config.assetMap)){if(!entry||typeof entry.src!=`string`)continue;let srcAbs=resolve(cwd,entry.src);if(!existsSync(srcAbs))continue;let collected=[];walkSync(srcAbs,srcAbs,(relPath,absPath)=>{entry.glob&&!matchesGlobLite(relPath,entry.glob,namespace)||collected.push({rel:relPath,abs:absPath})}),collected.sort((a,b)=>a.rel.localeCompare(b.rel));let{pairs,collisionGroupsResolved}=groupAssetKeys(namespace,collected.map(c=>c.rel),{strategy:entry.keys??`auto`}),absByRel=new Map(collected.map(c=>[c.rel,c.abs]));for(let{rel,key}of pairs){let abs=absByRel.get(rel);abs&&(entries[key]=abs)}collisionGroupsResolved>0&&process.env.NODE_ENV!==`production`&&console.log(`[kickjs/assets] '${namespace}': ${collisionGroupsResolved} basename collision(s) auto-resolved by keeping extensions (set assetMap.${namespace}.keys to 'strip' or 'with-extension' to override).`)}return{manifest:{version:1,entries},root:cwd}}const warnedGlobs=new Set;function matchesGlobLite(relPath,pattern,namespace){if(pattern===`**/*`||pattern===`**`)return!0;let singleExt=/^\*\*\/\*\.(\w+)$/.exec(pattern);if(singleExt)return relPath.endsWith(`.${singleExt[1]}`);let braceExt=/^\*\*\/\*\.\{([^}]+)\}$/.exec(pattern);if(braceExt)return braceExt[1].split(`,`).map(e=>e.trim()).some(ext=>relPath.endsWith(`.${ext}`));let tag=`${namespace}::${pattern}`;return warnedGlobs.has(tag)||(warnedGlobs.add(tag),console.warn(`[kickjs/assets] Dev-mode glob '${pattern}' on '${namespace}' isn't recognised by the lite matcher. Falling back to '**/*'. Run 'kick build:assets' to use the full glob engine.`)),!0}function walkSync(root,dir,onFile){let entries;try{entries=readdirSync(dir,{withFileTypes:!0})}catch{return}for(let entry of entries){if(entry.name===`node_modules`||entry.name.startsWith(`.`))continue;let full=join(dir,entry.name);entry.isDirectory()?walkSync(root,full,onFile):entry.isFile()&&onFile(full.slice(root.length+1).split(sep).join(`/`),full)}}function loadConfigSync(cwd){let jsonPath=join(cwd,`kick.config.json`);if(existsSync(jsonPath))try{return JSON.parse(readFileSync(jsonPath,`utf-8`))}catch{return null}for(let filename of[`kick.config.cjs`,`kick.config.js`]){let path=join(cwd,filename);if(existsSync(path))try{let{createRequire}=__require(`node:module`),mod=createRequire(join(cwd,`package.json`))(path);return mod.default??mod??null}catch{continue}}return null}const PROMISE_DETECTION_KEYS=new Set([`then`]),PASSTHROUGH_KEYS=new Set([`toString`,`valueOf`,`constructor`,`prototype`,`name`,`length`,`asymmetricMatch`,`nodeType`,Symbol.toPrimitive,Symbol.toStringTag,Symbol.iterator,Symbol.asyncIterator]);function createNamespaceProxy(parts){return new Proxy(function(){},{apply(){if(parts.length<2)throw new UnknownAssetError(parts[0]??``,``);let[namespace,...rest]=parts;return resolveAsset(namespace,rest.join(`/`))},get(t,prop){if(!PROMISE_DETECTION_KEYS.has(prop)){if(PASSTHROUGH_KEYS.has(prop))return Reflect.get(t,prop);if(typeof prop!=`symbol`)return createNamespaceProxy([...parts,prop])}}})}function createAssetProxy(){return new Proxy({},{get(t,prop){if(!PROMISE_DETECTION_KEYS.has(prop)){if(PASSTHROUGH_KEYS.has(prop))return Reflect.get(t,prop);if(typeof prop!=`symbol`)return createNamespaceProxy([prop])}}})}const assets=createAssetProxy();function useAssets(){return assets}var KickError=class extends Error{code;summary;cause;fix;docsUrl;context;constructor(init){super(formatKickError(init,{color:!1})),this.name=`KickError`,this.code=init.code,this.summary=init.summary,init.cause!==void 0&&(this.cause=init.cause),init.fix!==void 0&&(this.fix=init.fix),init.docsUrl!==void 0&&(this.docsUrl=init.docsUrl),init.context!==void 0&&(this.context=init.context)}};function ansiEnabled(){return process.env.NO_COLOR?!1:process.env.FORCE_COLOR?!0:process.stderr?.isTTY===!0}function paint(text,code,enabled){return enabled?`[${code}m${text}`:text}const c={red:(s,enabled)=>paint(s,`31`,enabled),bold:(s,enabled)=>paint(s,`1`,enabled),dim:(s,enabled)=>paint(s,`2`,enabled),cyan:(s,enabled)=>paint(s,`36`,enabled),blue:(s,enabled)=>paint(s,`34`,enabled),underline:(s,enabled)=>paint(s,`4`,enabled)};function formatKickError(err,options={}){let color=options.color??ansiEnabled(),lines=[],code=c.bold(c.red(err.code,color),color);if(lines.push(`${code}: ${err.summary}`),err.cause){lines.push(``,` ${c.bold(c.dim(`Cause:`,color),color)}`);for(let line of err.cause.split(`
12
12
  `))lines.push(` ${highlightInline(line,color)}`)}if(err.fix){lines.push(``,` ${c.bold(c.dim(`Fix:`,color),color)}`);for(let line of err.fix.split(`
13
13
  `))lines.push(` ${highlightInline(line,color)}`)}return err.docsUrl&&(lines.push(``,` ${c.bold(c.dim(`Docs:`,color),color)}`),lines.push(` ${c.underline(c.blue(err.docsUrl,color),color)}`)),lines.join(`
14
14
  `)}function highlightInline(line,color){return color?line.replace(/`([^`]+)`/g,(_,inner)=>`\`${c.cyan(inner,!0)}\``):line}const DOCS_BASE=`https://forinda.github.io/kick-js`;function noProviderError(tokenName){return new KickError({code:`KICK001`,summary:`No provider for ${tokenName}`,cause:`\`${tokenName}\` was requested from the DI container but no binding is registered.
@@ -105,4 +105,4 @@ Or pass \`router:\` for full control:
105
105
  router: myExpressRouter,
106
106
  }
107
107
  }`,docsUrl:`${DOCS_BASE}/guide/modules`,context:{mountPath}})}const log=createLogger(`Container`);function createReg(fields){return{kind:`unknown`,resolveCount:0,postConstructStatus:`skipped`,dependencies:[],...fields}}function tokenName(token){return typeof token==`symbol`?token.toString():isInjectionToken(token)?token.name:token?.name||String(token)}function getPersistentStore(){return globalThis.__kickjs_persistent||(globalThis.__kickjs_persistent={factories:[],instances:[],resolvedInstances:new Map}),globalThis.__kickjs_persistent}var Container=class Container{static instance;registrations=new Map;resolving=new Set;changeListeners=new Set;pendingChanges=[];notifyTimer=null;static DEBOUNCE_MS=50;static _onReady=null;static _onReset=null;static _envResolver=null;static _requestStoreProvider=null;static getInstance(){return Container.instance||=new Container,Container._onReady&&=(Container._onReady(Container.instance),null),Container.instance}static reset(){Container.instance=new Container,Container._onReset?.(Container.instance);let store=getPersistentStore();for(let{token,factory,scope}of store.factories)if(!Container.instance.has(token)){let name=tokenName(token),existing=store.resolvedInstances.get(name);Container.instance.registrations.set(token,createReg({target:Object,scope,factory,kind:`factory`,instance:existing,resolveCount:+!!existing,postConstructStatus:existing?`completed`:`skipped`}))}for(let{token,instance}of store.instances)Container.instance.has(token)||Container.instance.registrations.set(token,createReg({target:instance.constructor,scope:`singleton`,instance,kind:`instance`,postConstructStatus:`completed`,resolveCount:1}))}static create(){return new Container}register(token,target,scope=`singleton`){let kind=getClassMeta(METADATA.CLASS_KIND,target,`unknown`),reg=createReg({target,scope,kind,dependencies:this.extractDependencies(target)});this.registrations.set(token,reg),typeof token==`function`&&token.name&&this.registrations.set(`__hmr__${token.name}`,reg),this.emit(tokenName(token),`registered`,kind)}registerFactory(token,factory,scope=`singleton`){let store=getPersistentStore(),name=tokenName(token),factoryUnchanged=store.factories.find(r=>tokenName(r.token)===name)?.factory===factory,existingInstance=factoryUnchanged?store.resolvedInstances.get(name):void 0;factoryUnchanged||store.resolvedInstances.delete(name),this.registrations.set(token,createReg({target:Object,scope,factory,kind:`factory`,instance:existingInstance,resolveCount:+!!existingInstance,postConstructStatus:existingInstance?`completed`:`skipped`}));let idx=store.factories.findIndex(r=>tokenName(r.token)===name);idx>=0?store.factories[idx]={token,factory,scope}:store.factories.push({token,factory,scope}),this.emit(name,`registered`,`factory`)}registerInstance(token,instance){let store=getPersistentStore(),name=tokenName(token);this.registrations.set(token,createReg({target:instance.constructor,scope:`singleton`,instance,kind:`instance`,postConstructStatus:`completed`,resolveCount:1,firstResolvedAt:Date.now(),lastResolvedAt:Date.now()})),store.resolvedInstances.set(name,instance);let idx=store.instances.findIndex(r=>tokenName(r.token)===name);idx>=0?store.instances[idx]={token,instance}:store.instances.push({token,instance}),this.emit(name,`registered`,`instance`)}has(token){return this.registrations.has(token)}getRegistrations(){let entries=[];for(let[token,reg]of this.registrations)entries.push({token:tokenName(token),scope:reg.scope,kind:reg.kind,instantiated:reg.scope===`singleton`?reg.instance!==void 0:reg.resolveCount>0,resolveCount:reg.resolveCount,lastResolvedAt:reg.lastResolvedAt,firstResolvedAt:reg.firstResolvedAt,resolveDurationMs:reg.resolveDurationMs,postConstructStatus:reg.postConstructStatus,dependencies:reg.dependencies});return entries}resolve(token){let reg=this.registrations.get(token);if(!reg&&typeof token==`function`&&token.name&&(reg=this.registrations.get(`__hmr__${token.name}`)),!reg)throw noProviderError(tokenName(token));if(reg.scope===`singleton`&&reg.instance!==void 0)return reg.resolveCount++,reg.lastResolvedAt=Date.now(),this.emit(tokenName(token),`resolved`,reg.kind),reg.instance;if(reg.scope===`request`){if(!Container._requestStoreProvider)throw requestScopeMiddlewareMissingError(tokenName(token));let store=Container._requestStoreProvider();if(!store)throw requestScopeOutsideRequestError(tokenName(token));if(store.values.has(token))return reg.resolveCount++,reg.lastResolvedAt=Date.now(),this.emit(tokenName(token),`resolved`,reg.kind),store.values.get(token);if(store.instances.has(token))return reg.resolveCount++,reg.lastResolvedAt=Date.now(),this.emit(tokenName(token),`resolved`,reg.kind),store.instances.get(token);if(reg.factory){let start=performance.now(),instance=reg.factory();return reg.resolveDurationMs=performance.now()-start,reg.resolveCount++,reg.lastResolvedAt=Date.now(),reg.firstResolvedAt||=Date.now(),store.instances.set(token,instance),this.emit(tokenName(token),`resolved`,reg.kind),instance}let start=performance.now(),instance=this.createInstance(reg);return reg.resolveDurationMs=performance.now()-start,reg.resolveCount++,reg.lastResolvedAt=Date.now(),reg.firstResolvedAt||=Date.now(),store.instances.set(token,instance),this.emit(tokenName(token),`resolved`,reg.kind),instance}if(reg.factory){let start=performance.now(),instance=reg.factory();return reg.resolveDurationMs=performance.now()-start,reg.resolveCount++,reg.lastResolvedAt=Date.now(),reg.firstResolvedAt||=Date.now(),reg.scope===`singleton`&&(reg.instance=instance,getPersistentStore().resolvedInstances.set(tokenName(token),instance)),this.emit(tokenName(token),`resolved`,reg.kind),instance}if(this.resolving.has(token)){let chain=[...this.resolving].map(tokenName);throw chain.push(tokenName(token)),Error(`Circular dependency detected: ${chain.join(` -> `)}`)}this.resolving.add(token);try{let start=performance.now(),instance=this.createInstance(reg);return reg.resolveDurationMs=performance.now()-start,reg.resolveCount++,reg.lastResolvedAt=Date.now(),reg.firstResolvedAt||=Date.now(),reg.scope===`singleton`&&(reg.instance=instance),this.emit(tokenName(token),`resolved`,reg.kind),instance}finally{this.resolving.delete(token)}}bootstrap(){}onChange(callback){return this.changeListeners.add(callback),()=>this.changeListeners.delete(callback)}invalidate(token){let name=tokenName(token),reg=this.registrations.get(token)??this.registrations.get(`__hmr__${name}`);if(reg&&!getPersistentStore().resolvedInstances.has(name)){reg.instance=void 0,reg.resolveCount=0,reg.postConstructStatus=`skipped`,this.emit(name,`invalidated`,reg.kind);for(let[depToken,depReg]of this.registrations)depReg.dependencies.includes(name)&&this.invalidate(depToken)}}emit(token,event,kind){let existing=this.pendingChanges.find(p=>p.token===token&&p.event===event);existing?existing.timestamp=Date.now():this.pendingChanges.push({token,event,kind,timestamp:Date.now()}),this.notifyTimer&&clearTimeout(this.notifyTimer),this.notifyTimer=setTimeout(()=>{let batch=this.pendingChanges.splice(0);if(batch.length!==0)for(let listener of this.changeListeners)try{listener(batch)}catch{}},Container.DEBOUNCE_MS)}flushChanges(){this.notifyTimer&&=(clearTimeout(this.notifyTimer),null);let batch=this.pendingChanges.splice(0);if(batch.length!==0)for(let listener of this.changeListeners)try{listener(batch)}catch{}}createInstance(reg){let paramTypes=getClassMeta(METADATA.PARAM_TYPES,reg.target,[]),injectTokens=getMetaRecord(METADATA.INJECT,reg.target),maxInjectIndex=Object.keys(injectTokens).length>0?Math.max(...Object.keys(injectTokens).map(Number))+1:0,paramCount=Math.max(paramTypes.length,maxInjectIndex),args=[];for(let index=0;index<paramCount;index++){let token=injectTokens[index]||paramTypes[index];if(!token)throw Error(`Cannot resolve constructor parameter at index ${index} of ${tokenName(reg.target)}. No @Inject token and no design:paramtypes metadata (tsx/ts-node don't emit it). Add @Inject(Token) to every constructor parameter.`);if(reg.scope===`singleton`){let depReg=this.registrations.get(token);if(depReg&&depReg.scope===`request`)throw Error(`Cannot inject REQUEST-scoped "${tokenName(token)}" into SINGLETON "${tokenName(reg.target)}". Singletons outlive requests. Use TRANSIENT or REQUEST scope for the parent.`)}args.push(this.resolve(token))}let instance=new reg.target(...args);this.injectProperties(instance,reg.target);let postConstruct=getClassMetaOrUndefined(METADATA.POST_CONSTRUCT,reg.target.prototype);if(postConstruct&&typeof instance[postConstruct]==`function`)try{let result=instance[postConstruct]();result&&typeof result.then==`function`?(reg.postConstructStatus=`pending`,result.then(()=>{reg.postConstructStatus=`completed`}).catch(()=>{reg.postConstructStatus=`failed`}),log.warn(`@PostConstruct on ${tokenName(reg.target)}.${String(postConstruct)}() returned a Promise but the container is synchronous. The async operation will not be awaited.`)):reg.postConstructStatus=`completed`}catch(err){reg.postConstructStatus=`failed`,log.error(err,`@PostConstruct on ${tokenName(reg.target)}.${String(postConstruct)}() threw an error`)}return instance}extractDependencies(target){let paramTypes=getClassMeta(METADATA.PARAM_TYPES,target,[]),injectTokens=getMetaRecord(METADATA.INJECT,target),ctorDeps=paramTypes.map((type,index)=>tokenName(injectTokens[index]||type)),autowiredProps=getMetaMap(METADATA.AUTOWIRED,target.prototype),propDeps=[];for(let[prop,token]of autowiredProps){let resolvedToken=token||getMethodMetaOrUndefined(METADATA.PROPERTY_TYPE,target.prototype,prop);resolvedToken&&propDeps.push(tokenName(resolvedToken))}return[...new Set([...ctorDeps,...propDeps])]}injectProperties(instance,target){let autowiredProps=getMetaMap(METADATA.AUTOWIRED,target.prototype);for(let[prop,token]of autowiredProps){let resolvedToken=token||getMethodMetaOrUndefined(METADATA.PROPERTY_TYPE,target.prototype,prop);resolvedToken&&Object.defineProperty(instance,prop,{get:()=>this.resolve(resolvedToken),enumerable:!0,configurable:!0})}let valueProps=getMetaMap(METADATA.VALUE,target.prototype);for(let[prop,config]of valueProps)Object.defineProperty(instance,prop,{get(){if(Container._envResolver){let val=Container._envResolver(config.envKey);if(val!==void 0)return val}let val=process.env[config.envKey];if(val!==void 0)return val;if(config.defaultValue!==void 0)return config.defaultValue;throw envValueMissingError(config.envKey)},enumerable:!0,configurable:!0});let assetProps=getMetaMap(METADATA.ASSET,target.prototype);if(assetProps.size>0)for(let[prop,config]of assetProps){let slashIdx=config.assetKey.indexOf(`/`);if(slashIdx===-1)throw Error(`@Asset('${config.assetKey}'): asset key must include a '/' separator (e.g. 'mails/welcome').`);let namespace=config.assetKey.slice(0,slashIdx),key=config.assetKey.slice(slashIdx+1);Object.defineProperty(instance,prop,{get(){return resolveAsset(namespace,key)},enumerable:!0,configurable:!0})}}};export{isInjectionToken as _,formatKickError as a,UnknownAssetError as c,resolveAsset as d,useAssets as f,createToken as g,INJECTION_TOKEN as h,KickError as i,assets as l,stripExt as m,tokenName as n,ASSETS as o,groupAssetKeys as p,moduleRouteMissingControllerError as r,ASSET_MANIFEST_VERSION as s,Container as t,clearAssetCache as u,__require as v};
108
- //# sourceMappingURL=container-Bq8VjG_Y.mjs.map
108
+ //# sourceMappingURL=container-rkINSNRc.mjs.map