@acmekit/framework 2.13.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 (362) hide show
  1. package/README.md +0 -0
  2. package/dist/acmekit-app-loader.d.ts +70 -0
  3. package/dist/acmekit-app-loader.d.ts.map +1 -0
  4. package/dist/acmekit-app-loader.js +256 -0
  5. package/dist/acmekit-app-loader.js.map +1 -0
  6. package/dist/build-tools/compiler.d.ts +64 -0
  7. package/dist/build-tools/compiler.d.ts.map +1 -0
  8. package/dist/build-tools/compiler.js +423 -0
  9. package/dist/build-tools/compiler.js.map +1 -0
  10. package/dist/build-tools/index.d.ts +2 -0
  11. package/dist/build-tools/index.d.ts.map +1 -0
  12. package/dist/build-tools/index.js +18 -0
  13. package/dist/build-tools/index.js.map +1 -0
  14. package/dist/config/config.d.ts +39 -0
  15. package/dist/config/config.d.ts.map +1 -0
  16. package/dist/config/config.js +155 -0
  17. package/dist/config/config.js.map +1 -0
  18. package/dist/config/index.d.ts +5 -0
  19. package/dist/config/index.d.ts.map +1 -0
  20. package/dist/config/index.js +21 -0
  21. package/dist/config/index.js.map +1 -0
  22. package/dist/config/loader.d.ts +15 -0
  23. package/dist/config/loader.d.ts.map +1 -0
  24. package/dist/config/loader.js +39 -0
  25. package/dist/config/loader.js.map +1 -0
  26. package/dist/config/types.d.ts +2 -0
  27. package/dist/config/types.d.ts.map +1 -0
  28. package/dist/config/types.js +3 -0
  29. package/dist/config/types.js.map +1 -0
  30. package/dist/container.d.ts +3 -0
  31. package/dist/container.d.ts.map +1 -0
  32. package/dist/container.js +21 -0
  33. package/dist/container.js.map +1 -0
  34. package/dist/database/index.d.ts +3 -0
  35. package/dist/database/index.d.ts.map +1 -0
  36. package/dist/database/index.js +19 -0
  37. package/dist/database/index.js.map +1 -0
  38. package/dist/database/pg-connection-loader.d.ts +6 -0
  39. package/dist/database/pg-connection-loader.d.ts.map +1 -0
  40. package/dist/database/pg-connection-loader.js +68 -0
  41. package/dist/database/pg-connection-loader.js.map +1 -0
  42. package/dist/deps/awilix.d.ts +2 -0
  43. package/dist/deps/awilix.d.ts.map +1 -0
  44. package/dist/deps/awilix.js +18 -0
  45. package/dist/deps/awilix.js.map +1 -0
  46. package/dist/deps/mikro-orm-cli.d.ts +2 -0
  47. package/dist/deps/mikro-orm-cli.d.ts.map +1 -0
  48. package/dist/deps/mikro-orm-cli.js +18 -0
  49. package/dist/deps/mikro-orm-cli.js.map +1 -0
  50. package/dist/deps/mikro-orm-core.d.ts +2 -0
  51. package/dist/deps/mikro-orm-core.d.ts.map +1 -0
  52. package/dist/deps/mikro-orm-core.js +18 -0
  53. package/dist/deps/mikro-orm-core.js.map +1 -0
  54. package/dist/deps/mikro-orm-knex.d.ts +2 -0
  55. package/dist/deps/mikro-orm-knex.d.ts.map +1 -0
  56. package/dist/deps/mikro-orm-knex.js +18 -0
  57. package/dist/deps/mikro-orm-knex.js.map +1 -0
  58. package/dist/deps/mikro-orm-migrations.d.ts +2 -0
  59. package/dist/deps/mikro-orm-migrations.d.ts.map +1 -0
  60. package/dist/deps/mikro-orm-migrations.js +18 -0
  61. package/dist/deps/mikro-orm-migrations.js.map +1 -0
  62. package/dist/deps/mikro-orm-postgresql.d.ts +2 -0
  63. package/dist/deps/mikro-orm-postgresql.d.ts.map +1 -0
  64. package/dist/deps/mikro-orm-postgresql.js +18 -0
  65. package/dist/deps/mikro-orm-postgresql.js.map +1 -0
  66. package/dist/deps/opentelemetry-api.d.ts +2 -0
  67. package/dist/deps/opentelemetry-api.d.ts.map +1 -0
  68. package/dist/deps/opentelemetry-api.js +18 -0
  69. package/dist/deps/opentelemetry-api.js.map +1 -0
  70. package/dist/deps/opentelemetry-instrumentation-pg.d.ts +2 -0
  71. package/dist/deps/opentelemetry-instrumentation-pg.d.ts.map +1 -0
  72. package/dist/deps/opentelemetry-instrumentation-pg.js +18 -0
  73. package/dist/deps/opentelemetry-instrumentation-pg.js.map +1 -0
  74. package/dist/deps/opentelemetry-resources.d.ts +2 -0
  75. package/dist/deps/opentelemetry-resources.d.ts.map +1 -0
  76. package/dist/deps/opentelemetry-resources.js +18 -0
  77. package/dist/deps/opentelemetry-resources.js.map +1 -0
  78. package/dist/deps/opentelemetry-sdk-node.d.ts +2 -0
  79. package/dist/deps/opentelemetry-sdk-node.d.ts.map +1 -0
  80. package/dist/deps/opentelemetry-sdk-node.js +18 -0
  81. package/dist/deps/opentelemetry-sdk-node.js.map +1 -0
  82. package/dist/deps/opentelemetry-sdk-trace-node.d.ts +2 -0
  83. package/dist/deps/opentelemetry-sdk-trace-node.d.ts.map +1 -0
  84. package/dist/deps/opentelemetry-sdk-trace-node.js +18 -0
  85. package/dist/deps/opentelemetry-sdk-trace-node.js.map +1 -0
  86. package/dist/deps/pg.d.ts +2 -0
  87. package/dist/deps/pg.d.ts.map +1 -0
  88. package/dist/deps/pg.js +18 -0
  89. package/dist/deps/pg.js.map +1 -0
  90. package/dist/deps/zod.d.ts +2 -0
  91. package/dist/deps/zod.d.ts.map +1 -0
  92. package/dist/deps/zod.js +18 -0
  93. package/dist/deps/zod.js.map +1 -0
  94. package/dist/feature-flags/feature-flag-loader.d.ts +7 -0
  95. package/dist/feature-flags/feature-flag-loader.d.ts.map +1 -0
  96. package/dist/feature-flags/feature-flag-loader.js +34 -0
  97. package/dist/feature-flags/feature-flag-loader.js.map +1 -0
  98. package/dist/feature-flags/flag-router.d.ts +32 -0
  99. package/dist/feature-flags/flag-router.d.ts.map +1 -0
  100. package/dist/feature-flags/flag-router.js +67 -0
  101. package/dist/feature-flags/flag-router.js.map +1 -0
  102. package/dist/feature-flags/index.d.ts +5 -0
  103. package/dist/feature-flags/index.d.ts.map +1 -0
  104. package/dist/feature-flags/index.js +21 -0
  105. package/dist/feature-flags/index.js.map +1 -0
  106. package/dist/feature-flags/types.d.ts +31 -0
  107. package/dist/feature-flags/types.d.ts.map +1 -0
  108. package/dist/feature-flags/types.js +3 -0
  109. package/dist/feature-flags/types.js.map +1 -0
  110. package/dist/http/express-loader.d.ts +10 -0
  111. package/dist/http/express-loader.d.ts.map +1 -0
  112. package/dist/http/express-loader.js +130 -0
  113. package/dist/http/express-loader.js.map +1 -0
  114. package/dist/http/index.d.ts +15 -0
  115. package/dist/http/index.d.ts.map +1 -0
  116. package/dist/http/index.js +31 -0
  117. package/dist/http/index.js.map +1 -0
  118. package/dist/http/middleware-file-loader.d.ts +33 -0
  119. package/dist/http/middleware-file-loader.d.ts.map +1 -0
  120. package/dist/http/middleware-file-loader.js +186 -0
  121. package/dist/http/middleware-file-loader.js.map +1 -0
  122. package/dist/http/middlewares/apply-default-filters.d.ts +3 -0
  123. package/dist/http/middlewares/apply-default-filters.d.ts.map +1 -0
  124. package/dist/http/middlewares/apply-default-filters.js +32 -0
  125. package/dist/http/middlewares/apply-default-filters.js.map +1 -0
  126. package/dist/http/middlewares/apply-locale.d.ts +12 -0
  127. package/dist/http/middlewares/apply-locale.d.ts.map +1 -0
  128. package/dist/http/middlewares/apply-locale.js +31 -0
  129. package/dist/http/middlewares/apply-locale.js.map +1 -0
  130. package/dist/http/middlewares/apply-params-as-filters.d.ts +5 -0
  131. package/dist/http/middlewares/apply-params-as-filters.d.ts.map +1 -0
  132. package/dist/http/middlewares/apply-params-as-filters.js +14 -0
  133. package/dist/http/middlewares/apply-params-as-filters.js.map +1 -0
  134. package/dist/http/middlewares/authenticate-middleware.d.ts +14 -0
  135. package/dist/http/middlewares/authenticate-middleware.d.ts.map +1 -0
  136. package/dist/http/middlewares/authenticate-middleware.js +142 -0
  137. package/dist/http/middlewares/authenticate-middleware.js.map +1 -0
  138. package/dist/http/middlewares/bodyparser.d.ts +13 -0
  139. package/dist/http/middlewares/bodyparser.d.ts.map +1 -0
  140. package/dist/http/middlewares/bodyparser.js +62 -0
  141. package/dist/http/middlewares/bodyparser.js.map +1 -0
  142. package/dist/http/middlewares/check-permissions.d.ts +15 -0
  143. package/dist/http/middlewares/check-permissions.d.ts.map +1 -0
  144. package/dist/http/middlewares/check-permissions.js +54 -0
  145. package/dist/http/middlewares/check-permissions.js.map +1 -0
  146. package/dist/http/middlewares/clear-filters-by-key.d.ts +3 -0
  147. package/dist/http/middlewares/clear-filters-by-key.d.ts.map +1 -0
  148. package/dist/http/middlewares/clear-filters-by-key.js +12 -0
  149. package/dist/http/middlewares/clear-filters-by-key.js.map +1 -0
  150. package/dist/http/middlewares/ensure-publishable-api-key.d.ts +3 -0
  151. package/dist/http/middlewares/ensure-publishable-api-key.d.ts.map +1 -0
  152. package/dist/http/middlewares/ensure-publishable-api-key.js +58 -0
  153. package/dist/http/middlewares/ensure-publishable-api-key.js.map +1 -0
  154. package/dist/http/middlewares/error-handler.d.ts +21 -0
  155. package/dist/http/middlewares/error-handler.d.ts.map +1 -0
  156. package/dist/http/middlewares/error-handler.js +107 -0
  157. package/dist/http/middlewares/error-handler.js.map +1 -0
  158. package/dist/http/middlewares/exception-formatter.d.ts +9 -0
  159. package/dist/http/middlewares/exception-formatter.d.ts.map +1 -0
  160. package/dist/http/middlewares/exception-formatter.js +36 -0
  161. package/dist/http/middlewares/exception-formatter.js.map +1 -0
  162. package/dist/http/middlewares/index.d.ts +10 -0
  163. package/dist/http/middlewares/index.d.ts.map +1 -0
  164. package/dist/http/middlewares/index.js +26 -0
  165. package/dist/http/middlewares/index.js.map +1 -0
  166. package/dist/http/middlewares/set-context.d.ts +3 -0
  167. package/dist/http/middlewares/set-context.d.ts.map +1 -0
  168. package/dist/http/middlewares/set-context.js +18 -0
  169. package/dist/http/middlewares/set-context.js.map +1 -0
  170. package/dist/http/router.d.ts +36 -0
  171. package/dist/http/router.d.ts.map +1 -0
  172. package/dist/http/router.js +317 -0
  173. package/dist/http/router.js.map +1 -0
  174. package/dist/http/routes-finder.d.ts +22 -0
  175. package/dist/http/routes-finder.d.ts.map +1 -0
  176. package/dist/http/routes-finder.js +68 -0
  177. package/dist/http/routes-finder.js.map +1 -0
  178. package/dist/http/routes-loader.d.ts +39 -0
  179. package/dist/http/routes-loader.d.ts.map +1 -0
  180. package/dist/http/routes-loader.js +232 -0
  181. package/dist/http/routes-loader.js.map +1 -0
  182. package/dist/http/routes-sorter.d.ts +105 -0
  183. package/dist/http/routes-sorter.d.ts.map +1 -0
  184. package/dist/http/routes-sorter.js +146 -0
  185. package/dist/http/routes-sorter.js.map +1 -0
  186. package/dist/http/types.d.ts +191 -0
  187. package/dist/http/types.d.ts.map +1 -0
  188. package/dist/http/types.js +16 -0
  189. package/dist/http/types.js.map +1 -0
  190. package/dist/http/utils/define-middlewares.d.ts +22 -0
  191. package/dist/http/utils/define-middlewares.d.ts.map +1 -0
  192. package/dist/http/utils/define-middlewares.js +27 -0
  193. package/dist/http/utils/define-middlewares.js.map +1 -0
  194. package/dist/http/utils/field-filtering/field-parser.d.ts +32 -0
  195. package/dist/http/utils/field-filtering/field-parser.d.ts.map +1 -0
  196. package/dist/http/utils/field-filtering/field-parser.js +87 -0
  197. package/dist/http/utils/field-filtering/field-parser.js.map +1 -0
  198. package/dist/http/utils/field-filtering/field-validator.d.ts +24 -0
  199. package/dist/http/utils/field-filtering/field-validator.d.ts.map +1 -0
  200. package/dist/http/utils/field-filtering/field-validator.js +67 -0
  201. package/dist/http/utils/field-filtering/field-validator.js.map +1 -0
  202. package/dist/http/utils/field-filtering/index.d.ts +33 -0
  203. package/dist/http/utils/field-filtering/index.d.ts.map +1 -0
  204. package/dist/http/utils/field-filtering/index.js +9 -0
  205. package/dist/http/utils/field-filtering/index.js.map +1 -0
  206. package/dist/http/utils/get-query-config.d.ts +50 -0
  207. package/dist/http/utils/get-query-config.d.ts.map +1 -0
  208. package/dist/http/utils/get-query-config.js +109 -0
  209. package/dist/http/utils/get-query-config.js.map +1 -0
  210. package/dist/http/utils/http-compression.d.ts +5 -0
  211. package/dist/http/utils/http-compression.d.ts.map +1 -0
  212. package/dist/http/utils/http-compression.js +33 -0
  213. package/dist/http/utils/http-compression.js.map +1 -0
  214. package/dist/http/utils/maybe-apply-link-filter.d.ts +8 -0
  215. package/dist/http/utils/maybe-apply-link-filter.d.ts.map +1 -0
  216. package/dist/http/utils/maybe-apply-link-filter.js +68 -0
  217. package/dist/http/utils/maybe-apply-link-filter.js.map +1 -0
  218. package/dist/http/utils/policies/rbac-field-filter.d.ts +19 -0
  219. package/dist/http/utils/policies/rbac-field-filter.d.ts.map +1 -0
  220. package/dist/http/utils/policies/rbac-field-filter.js +348 -0
  221. package/dist/http/utils/policies/rbac-field-filter.js.map +1 -0
  222. package/dist/http/utils/refetch-entities.d.ts +21 -0
  223. package/dist/http/utils/refetch-entities.d.ts.map +1 -0
  224. package/dist/http/utils/refetch-entities.js +42 -0
  225. package/dist/http/utils/refetch-entities.js.map +1 -0
  226. package/dist/http/utils/restricted-fields.d.ts +6 -0
  227. package/dist/http/utils/restricted-fields.d.ts.map +1 -0
  228. package/dist/http/utils/restricted-fields.js +30 -0
  229. package/dist/http/utils/restricted-fields.js.map +1 -0
  230. package/dist/http/utils/unless-path.d.ts +9 -0
  231. package/dist/http/utils/unless-path.d.ts.map +1 -0
  232. package/dist/http/utils/unless-path.js +19 -0
  233. package/dist/http/utils/unless-path.js.map +1 -0
  234. package/dist/http/utils/validate-body.d.ts +5 -0
  235. package/dist/http/utils/validate-body.d.ts.map +1 -0
  236. package/dist/http/utils/validate-body.js +23 -0
  237. package/dist/http/utils/validate-body.js.map +1 -0
  238. package/dist/http/utils/validate-query.d.ts +6 -0
  239. package/dist/http/utils/validate-query.d.ts.map +1 -0
  240. package/dist/http/utils/validate-query.js +84 -0
  241. package/dist/http/utils/validate-query.js.map +1 -0
  242. package/dist/http/utils/wrap-handler.d.ts +3 -0
  243. package/dist/http/utils/wrap-handler.d.ts.map +1 -0
  244. package/dist/http/utils/wrap-handler.js +26 -0
  245. package/dist/http/utils/wrap-handler.js.map +1 -0
  246. package/dist/index.d.ts +18 -0
  247. package/dist/index.d.ts.map +1 -0
  248. package/dist/index.js +36 -0
  249. package/dist/index.js.map +1 -0
  250. package/dist/jobs/index.d.ts +2 -0
  251. package/dist/jobs/index.d.ts.map +1 -0
  252. package/dist/jobs/index.js +18 -0
  253. package/dist/jobs/index.js.map +1 -0
  254. package/dist/jobs/job-loader.d.ts +44 -0
  255. package/dist/jobs/job-loader.d.ts.map +1 -0
  256. package/dist/jobs/job-loader.js +91 -0
  257. package/dist/jobs/job-loader.js.map +1 -0
  258. package/dist/links/index.d.ts +2 -0
  259. package/dist/links/index.d.ts.map +1 -0
  260. package/dist/links/index.js +18 -0
  261. package/dist/links/index.js.map +1 -0
  262. package/dist/links/link-loader.d.ts +11 -0
  263. package/dist/links/link-loader.d.ts.map +1 -0
  264. package/dist/links/link-loader.js +76 -0
  265. package/dist/links/link-loader.js.map +1 -0
  266. package/dist/logger/index.d.ts +3 -0
  267. package/dist/logger/index.d.ts.map +1 -0
  268. package/dist/logger/index.js +9 -0
  269. package/dist/logger/index.js.map +1 -0
  270. package/dist/migrations/index.d.ts +3 -0
  271. package/dist/migrations/index.d.ts.map +1 -0
  272. package/dist/migrations/index.js +19 -0
  273. package/dist/migrations/index.js.map +1 -0
  274. package/dist/migrations/migrator.d.ts +38 -0
  275. package/dist/migrations/migrator.d.ts.map +1 -0
  276. package/dist/migrations/migrator.js +146 -0
  277. package/dist/migrations/migrator.js.map +1 -0
  278. package/dist/migrations/run-migration-scripts.d.ts +17 -0
  279. package/dist/migrations/run-migration-scripts.d.ts.map +1 -0
  280. package/dist/migrations/run-migration-scripts.js +97 -0
  281. package/dist/migrations/run-migration-scripts.js.map +1 -0
  282. package/dist/mikro-orm-cli/bin.d.ts +14 -0
  283. package/dist/mikro-orm-cli/bin.d.ts.map +1 -0
  284. package/dist/mikro-orm-cli/bin.js +54 -0
  285. package/dist/mikro-orm-cli/bin.js.map +1 -0
  286. package/dist/modules-sdk/index.d.ts +2 -0
  287. package/dist/modules-sdk/index.d.ts.map +1 -0
  288. package/dist/modules-sdk/index.js +18 -0
  289. package/dist/modules-sdk/index.js.map +1 -0
  290. package/dist/orchestration/index.d.ts +2 -0
  291. package/dist/orchestration/index.d.ts.map +1 -0
  292. package/dist/orchestration/index.js +18 -0
  293. package/dist/orchestration/index.js.map +1 -0
  294. package/dist/policies/has-permission.d.ts +33 -0
  295. package/dist/policies/has-permission.d.ts.map +1 -0
  296. package/dist/policies/has-permission.js +110 -0
  297. package/dist/policies/has-permission.js.map +1 -0
  298. package/dist/policies/index.d.ts +3 -0
  299. package/dist/policies/index.d.ts.map +1 -0
  300. package/dist/policies/index.js +19 -0
  301. package/dist/policies/index.js.map +1 -0
  302. package/dist/policies/policy-loader.d.ts +6 -0
  303. package/dist/policies/policy-loader.d.ts.map +1 -0
  304. package/dist/policies/policy-loader.js +17 -0
  305. package/dist/policies/policy-loader.js.map +1 -0
  306. package/dist/subscribers/index.d.ts +3 -0
  307. package/dist/subscribers/index.d.ts.map +1 -0
  308. package/dist/subscribers/index.js +19 -0
  309. package/dist/subscribers/index.js.map +1 -0
  310. package/dist/subscribers/subscriber-loader.d.ts +20 -0
  311. package/dist/subscribers/subscriber-loader.d.ts.map +1 -0
  312. package/dist/subscribers/subscriber-loader.js +156 -0
  313. package/dist/subscribers/subscriber-loader.js.map +1 -0
  314. package/dist/subscribers/types.d.ts +15 -0
  315. package/dist/subscribers/types.d.ts.map +1 -0
  316. package/dist/subscribers/types.js +3 -0
  317. package/dist/subscribers/types.js.map +1 -0
  318. package/dist/telemetry/index.d.ts +50 -0
  319. package/dist/telemetry/index.d.ts.map +1 -0
  320. package/dist/telemetry/index.js +81 -0
  321. package/dist/telemetry/index.js.map +1 -0
  322. package/dist/types/container.d.ts +68 -0
  323. package/dist/types/container.d.ts.map +1 -0
  324. package/dist/types/container.js +3 -0
  325. package/dist/types/container.js.map +1 -0
  326. package/dist/types/index.d.ts +6 -0
  327. package/dist/types/index.d.ts.map +1 -0
  328. package/dist/types/index.js +19 -0
  329. package/dist/types/index.js.map +1 -0
  330. package/dist/utils/index.d.ts +5 -0
  331. package/dist/utils/index.d.ts.map +1 -0
  332. package/dist/utils/index.js +21 -0
  333. package/dist/utils/index.js.map +1 -0
  334. package/dist/utils/resource-loader.d.ts +28 -0
  335. package/dist/utils/resource-loader.d.ts.map +1 -0
  336. package/dist/utils/resource-loader.js +78 -0
  337. package/dist/utils/resource-loader.js.map +1 -0
  338. package/dist/workflows/index.d.ts +3 -0
  339. package/dist/workflows/index.d.ts.map +1 -0
  340. package/dist/workflows/index.js +19 -0
  341. package/dist/workflows/index.js.map +1 -0
  342. package/dist/workflows/workflow-loader.d.ts +13 -0
  343. package/dist/workflows/workflow-loader.d.ts.map +1 -0
  344. package/dist/workflows/workflow-loader.js +36 -0
  345. package/dist/workflows/workflow-loader.js.map +1 -0
  346. package/dist/workflows-sdk/composer.d.ts +2 -0
  347. package/dist/workflows-sdk/composer.d.ts.map +1 -0
  348. package/dist/workflows-sdk/composer.js +18 -0
  349. package/dist/workflows-sdk/composer.js.map +1 -0
  350. package/dist/workflows-sdk/index.d.ts +3 -0
  351. package/dist/workflows-sdk/index.d.ts.map +1 -0
  352. package/dist/workflows-sdk/index.js +19 -0
  353. package/dist/workflows-sdk/index.js.map +1 -0
  354. package/dist/zod/index.d.ts +2 -0
  355. package/dist/zod/index.d.ts.map +1 -0
  356. package/dist/zod/index.js +18 -0
  357. package/dist/zod/index.js.map +1 -0
  358. package/dist/zod/zod-helpers.d.ts +3 -0
  359. package/dist/zod/zod-helpers.d.ts.map +1 -0
  360. package/dist/zod/zod-helpers.js +95 -0
  361. package/dist/zod/zod-helpers.js.map +1 -0
  362. package/package.json +121 -0
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/opentelemetry/api";
2
+ //# sourceMappingURL=opentelemetry-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-api.d.ts","sourceRoot":"","sources":["../../src/deps/opentelemetry-api.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/opentelemetry/api"), exports);
18
+ //# sourceMappingURL=opentelemetry-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-api.js","sourceRoot":"","sources":["../../src/deps/opentelemetry-api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAA+C"}
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/opentelemetry/instrumentation-pg";
2
+ //# sourceMappingURL=opentelemetry-instrumentation-pg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-instrumentation-pg.d.ts","sourceRoot":"","sources":["../../src/deps/opentelemetry-instrumentation-pg.ts"],"names":[],"mappings":"AAAA,cAAc,gDAAgD,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/opentelemetry/instrumentation-pg"), exports);
18
+ //# sourceMappingURL=opentelemetry-instrumentation-pg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-instrumentation-pg.js","sourceRoot":"","sources":["../../src/deps/opentelemetry-instrumentation-pg.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iFAA8D"}
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/opentelemetry/resources";
2
+ //# sourceMappingURL=opentelemetry-resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-resources.d.ts","sourceRoot":"","sources":["../../src/deps/opentelemetry-resources.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/opentelemetry/resources"), exports);
18
+ //# sourceMappingURL=opentelemetry-resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-resources.js","sourceRoot":"","sources":["../../src/deps/opentelemetry-resources.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAqD"}
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/opentelemetry/sdk-node";
2
+ //# sourceMappingURL=opentelemetry-sdk-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-sdk-node.d.ts","sourceRoot":"","sources":["../../src/deps/opentelemetry-sdk-node.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/opentelemetry/sdk-node"), exports);
18
+ //# sourceMappingURL=opentelemetry-sdk-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-sdk-node.js","sourceRoot":"","sources":["../../src/deps/opentelemetry-sdk-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAoD"}
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/opentelemetry/sdk-trace-node";
2
+ //# sourceMappingURL=opentelemetry-sdk-trace-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-sdk-trace-node.d.ts","sourceRoot":"","sources":["../../src/deps/opentelemetry-sdk-trace-node.ts"],"names":[],"mappings":"AAAA,cAAc,4CAA4C,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/opentelemetry/sdk-trace-node"), exports);
18
+ //# sourceMappingURL=opentelemetry-sdk-trace-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-sdk-trace-node.js","sourceRoot":"","sources":["../../src/deps/opentelemetry-sdk-trace-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6EAA0D"}
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/pg";
2
+ //# sourceMappingURL=pg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/deps/pg.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/pg"), exports);
18
+ //# sourceMappingURL=pg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/deps/pg.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC"}
@@ -0,0 +1,2 @@
1
+ export * from "@acmekit/deps/zod";
2
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/deps/zod.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@acmekit/deps/zod"), exports);
18
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/deps/zod.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC"}
@@ -0,0 +1,7 @@
1
+ import { FlagRouter } from "@acmekit/utils";
2
+ /**
3
+ * Load feature flags from a directory and from the already loaded config under the hood
4
+ * @param sourcePath
5
+ */
6
+ export declare function featureFlagsLoader(sourcePath?: string): Promise<FlagRouter>;
7
+ //# sourceMappingURL=feature-flag-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag-loader.d.ts","sourceRoot":"","sources":["../../src/feature-flags/feature-flag-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,UAAU,EACX,MAAM,gBAAgB,CAAA;AAYvB;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.featureFlagsLoader = featureFlagsLoader;
4
+ const telemetry_1 = require("@acmekit/telemetry");
5
+ const utils_1 = require("@acmekit/utils");
6
+ const awilix_1 = require("../deps/awilix");
7
+ const path_1 = require("path");
8
+ const config_1 = require("../config");
9
+ const container_1 = require("../container");
10
+ const logger_1 = require("../logger");
11
+ container_1.container.register(utils_1.ContainerRegistrationKeys.FEATURE_FLAG_ROUTER, (0, awilix_1.asFunction)(() => utils_1.FeatureFlag));
12
+ /**
13
+ * Load feature flags from a directory and from the already loaded config under the hood
14
+ * @param sourcePath
15
+ */
16
+ async function featureFlagsLoader(sourcePath) {
17
+ const confManager = !!config_1.configManager.baseDir
18
+ ? config_1.configManager.config
19
+ : { featureFlags: {}, logger: logger_1.logger };
20
+ const { featureFlags: projectConfigFlags = {}, logger } = confManager;
21
+ if (!sourcePath) {
22
+ return utils_1.FeatureFlag;
23
+ }
24
+ const flagDir = (0, path_1.normalize)(sourcePath);
25
+ await (0, utils_1.discoverAndRegisterFeatureFlags)({
26
+ flagDir,
27
+ projectConfigFlags,
28
+ router: utils_1.FeatureFlag,
29
+ logger,
30
+ track: (key) => (0, telemetry_1.trackFeatureFlag)(key),
31
+ });
32
+ return utils_1.FeatureFlag;
33
+ }
34
+ //# sourceMappingURL=feature-flag-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag-loader.js","sourceRoot":"","sources":["../../src/feature-flags/feature-flag-loader.ts"],"names":[],"mappings":";;AAsBA,gDAwBC;AA9CD,kDAAqD;AACrD,0CAKuB;AACvB,2CAA2C;AAC3C,+BAAgC;AAChC,sCAAyC;AACzC,4CAAwC;AACxC,sCAAmD;AAEnD,qBAAS,CAAC,QAAQ,CAChB,iCAAyB,CAAC,mBAAmB,EAC7C,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,mBAAW,CAAC,CAC9B,CAAA;AAED;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CACtC,UAAmB;IAEnB,MAAM,WAAW,GAAG,CAAC,CAAC,sBAAa,CAAC,OAAO;QACzC,CAAC,CAAC,sBAAa,CAAC,MAAM;QACtB,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,eAAa,EAAE,CAAA;IAE/C,MAAM,EAAE,YAAY,EAAE,kBAAkB,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,WAAW,CAAA;IAErE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,mBAAW,CAAA;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gBAAS,EAAC,UAAU,CAAC,CAAA;IAErC,MAAM,IAAA,uCAA+B,EAAC;QACpC,OAAO;QACP,kBAAkB;QAClB,MAAM,EAAE,mBAAW;QACnB,MAAM;QACN,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,4BAAgB,EAAC,GAAG,CAAC;KACtC,CAAC,CAAA;IAEF,OAAO,mBAAW,CAAA;AACpB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { FeatureFlagsResponse, IFlagRouter } from "./types";
2
+ export declare class FlagRouter implements IFlagRouter {
3
+ private readonly flags;
4
+ constructor(flags: Record<string, boolean | Record<string, boolean>>);
5
+ /**
6
+ * Check if a feature flag is enabled.
7
+ * There are two ways of using this method:
8
+ * 1. `isFeatureEnabled("myFeatureFlag")`
9
+ * 2. `isFeatureEnabled({ myNestedFeatureFlag: "someNestedFlag" })`
10
+ * We use 1. for top-level feature flags and 2. for nested feature flags. Almost all flags are top-level.
11
+ * An example of a nested flag is workflows. To use it, you would do:
12
+ * `isFeatureEnabled({ workflows: Workflows.CreateCart })`
13
+ * @param flag - The flag to check
14
+ * @return {boolean} - Whether the flag is enabled or not
15
+ */
16
+ isFeatureEnabled(flag: string | string[] | Record<string, string>): boolean;
17
+ /**
18
+ * Sets a feature flag.
19
+ * Flags take two shapes:
20
+ * `setFlag("myFeatureFlag", true)`
21
+ * `setFlag("myFeatureFlag", { nestedFlag: true })`
22
+ * These shapes are used for top-level and nested flags respectively, as explained in isFeatureEnabled.
23
+ * @param key - The key of the flag to set.
24
+ * @param value - The value of the flag to set.
25
+ * @return {void} - void
26
+ */
27
+ setFlag(key: string, value: boolean | {
28
+ [key: string]: boolean;
29
+ }): void;
30
+ listFlags(): FeatureFlagsResponse;
31
+ }
32
+ //# sourceMappingURL=flag-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag-router.d.ts","sourceRoot":"","sources":["../../src/feature-flags/flag-router.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE3D,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;gBAElE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIpE;;;;;;;;;;OAUG;IACI,gBAAgB,CACrB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/C,OAAO;IAkBV;;;;;;;;;OASG;IACI,OAAO,CACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAC1C,IAAI;IAgBA,SAAS,IAAI,oBAAoB;CAMzC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlagRouter = void 0;
4
+ const utils_1 = require("@acmekit/utils");
5
+ class FlagRouter {
6
+ constructor(flags) {
7
+ this.flags = {};
8
+ this.flags = flags;
9
+ }
10
+ /**
11
+ * Check if a feature flag is enabled.
12
+ * There are two ways of using this method:
13
+ * 1. `isFeatureEnabled("myFeatureFlag")`
14
+ * 2. `isFeatureEnabled({ myNestedFeatureFlag: "someNestedFlag" })`
15
+ * We use 1. for top-level feature flags and 2. for nested feature flags. Almost all flags are top-level.
16
+ * An example of a nested flag is workflows. To use it, you would do:
17
+ * `isFeatureEnabled({ workflows: Workflows.CreateCart })`
18
+ * @param flag - The flag to check
19
+ * @return {boolean} - Whether the flag is enabled or not
20
+ */
21
+ isFeatureEnabled(flag) {
22
+ if ((0, utils_1.isObject)(flag)) {
23
+ const [nestedFlag, value] = Object.entries(flag)[0];
24
+ if (typeof this.flags[nestedFlag] === "boolean") {
25
+ return this.flags[nestedFlag];
26
+ }
27
+ return !!this.flags[nestedFlag]?.[value];
28
+ }
29
+ const flags = (Array.isArray(flag) ? flag : [flag]);
30
+ return flags.every((flag_) => {
31
+ if (!(0, utils_1.isString)(flag_)) {
32
+ throw Error("Flag must be a string an array of string or an object");
33
+ }
34
+ return !!this.flags[flag_];
35
+ });
36
+ }
37
+ /**
38
+ * Sets a feature flag.
39
+ * Flags take two shapes:
40
+ * `setFlag("myFeatureFlag", true)`
41
+ * `setFlag("myFeatureFlag", { nestedFlag: true })`
42
+ * These shapes are used for top-level and nested flags respectively, as explained in isFeatureEnabled.
43
+ * @param key - The key of the flag to set.
44
+ * @param value - The value of the flag to set.
45
+ * @return {void} - void
46
+ */
47
+ setFlag(key, value) {
48
+ if ((0, utils_1.isObject)(value)) {
49
+ const existing = this.flags[key];
50
+ if (!existing) {
51
+ this.flags[key] = value;
52
+ return;
53
+ }
54
+ this.flags[key] = { ...this.flags[key], ...value };
55
+ return;
56
+ }
57
+ this.flags[key] = value;
58
+ }
59
+ listFlags() {
60
+ return Object.entries(this.flags || {}).map(([key, value]) => ({
61
+ key,
62
+ value,
63
+ }));
64
+ }
65
+ }
66
+ exports.FlagRouter = FlagRouter;
67
+ //# sourceMappingURL=flag-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag-router.js","sourceRoot":"","sources":["../../src/feature-flags/flag-router.ts"],"names":[],"mappings":";;;AAAA,0CAAmD;AAGnD,MAAa,UAAU;IAGrB,YAAY,KAAwD;QAFnD,UAAK,GAAsD,EAAE,CAAA;QAG5E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IACI,gBAAgB,CACrB,IAAgD;QAEhD,IAAI,IAAA,gBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACnD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAA;YAC1C,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAa,CAAA;QAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,KAAK,CAAC,uDAAuD,CAAC,CAAA;YACtE,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;OASG;IACI,OAAO,CACZ,GAAW,EACX,KAA2C;QAE3C,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACvB,OAAM;YACR,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,EAAE,GAAG,KAAK,EAAE,CAAA;YAC9D,OAAM;QACR,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACzB,CAAC;IAEM,SAAS;QACd,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,GAAG;YACH,KAAK;SACN,CAAC,CAAC,CAAA;IACL,CAAC;CACF;AAzED,gCAyEC"}
@@ -0,0 +1,5 @@
1
+ import "../types/container";
2
+ export * from "./types";
3
+ export * from "./feature-flag-loader";
4
+ export * from "./flag-router";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feature-flags/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,cAAc,SAAS,CAAA;AACvB,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ require("../types/container");
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./feature-flag-loader"), exports);
20
+ __exportStar(require("./flag-router"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feature-flags/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8BAA2B;AAE3B,0CAAuB;AACvB,wDAAqC;AACrC,gDAA6B"}
@@ -0,0 +1,31 @@
1
+ export interface IFlagRouter {
2
+ isFeatureEnabled: (key: string) => boolean;
3
+ listFlags: () => FeatureFlagsResponse;
4
+ }
5
+ /**
6
+ * @schema FeatureFlagsResponse
7
+ * type: array
8
+ * items:
9
+ * type: object
10
+ * required:
11
+ * - key
12
+ * - value
13
+ * properties:
14
+ * key:
15
+ * description: The key of the feature flag.
16
+ * type: string
17
+ * value:
18
+ * description: The value of the feature flag.
19
+ * type: boolean
20
+ */
21
+ export type FeatureFlagsResponse = {
22
+ key: string;
23
+ value: boolean | Record<string, boolean>;
24
+ }[];
25
+ export type FlagSettings = {
26
+ key: string;
27
+ description: string;
28
+ env_key: string;
29
+ default_val: boolean;
30
+ };
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/feature-flags/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,SAAS,EAAE,MAAM,oBAAoB,CAAA;CACtC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC,EAAE,CAAA;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/feature-flags/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { AcmeKitContainer } from "@acmekit/framework/types";
2
+ import { Express } from "express";
3
+ export declare function expressLoader({ app, container, }: {
4
+ app: Express;
5
+ container: AcmeKitContainer;
6
+ }): Promise<{
7
+ app: Express;
8
+ shutdown: () => Promise<void>;
9
+ }>;
10
+ //# sourceMappingURL=express-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-loader.d.ts","sourceRoot":"","sources":["../../src/http/express-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAK3D,OAAgB,EAAE,OAAO,EAAkB,MAAM,SAAS,CAAA;AAY1D,wBAAsB,aAAa,CAAC,EAClC,GAAG,EACH,SAAS,GACV,EAAE;IACD,GAAG,EAAE,OAAO,CAAA;IACZ,SAAS,EAAE,gBAAgB,CAAA;CAC5B,GAAG,OAAO,CAAC;IACV,GAAG,EAAE,OAAO,CAAA;IACZ,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B,CAAC,CAyID"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.expressLoader = expressLoader;
7
+ const utils_1 = require("@acmekit/framework/utils");
8
+ const utils_2 = require("@acmekit/utils");
9
+ const connect_redis_1 = __importDefault(require("connect-redis"));
10
+ const cookie_parser_1 = __importDefault(require("cookie-parser"));
11
+ const express_1 = __importDefault(require("express"));
12
+ const express_session_1 = __importDefault(require("express-session"));
13
+ const ioredis_1 = __importDefault(require("ioredis"));
14
+ const morgan_1 = __importDefault(require("morgan"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const config_1 = require("../config");
17
+ const NOISY_ENDPOINTS_CHUNKS = ["@fs", "@id", "@vite", "@react", "node_modules"];
18
+ const isHealthCheck = (req) => req.path === "/health";
19
+ async function expressLoader({ app, container, }) {
20
+ const baseDir = config_1.configManager.baseDir;
21
+ const configModule = config_1.configManager.config;
22
+ const isProduction = config_1.configManager.isProduction;
23
+ const NODE_ENV = process.env.NODE_ENV || "development";
24
+ const IS_DEV = NODE_ENV.startsWith("dev");
25
+ const isStaging = NODE_ENV === "staging";
26
+ const isTest = NODE_ENV === "test";
27
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
28
+ let sameSite = false;
29
+ let secure = false;
30
+ if (isProduction || isStaging) {
31
+ secure = true;
32
+ sameSite = "none";
33
+ }
34
+ const { http, sessionOptions, cookieOptions } = configModule.projectConfig;
35
+ const sessionOpts = {
36
+ name: sessionOptions?.name ?? "connect.sid",
37
+ resave: sessionOptions?.resave ?? true,
38
+ rolling: sessionOptions?.rolling ?? false,
39
+ saveUninitialized: sessionOptions?.saveUninitialized ?? false,
40
+ proxy: true,
41
+ secret: sessionOptions?.secret ?? http?.cookieSecret,
42
+ cookie: {
43
+ sameSite,
44
+ secure,
45
+ maxAge: sessionOptions?.ttl ?? 10 * 60 * 60 * 1000,
46
+ ...cookieOptions,
47
+ },
48
+ store: null,
49
+ };
50
+ let redisClient;
51
+ if (configModule?.projectConfig.sessionOptions?.dynamodbOptions) {
52
+ const storeFactory = await (0, utils_2.dynamicImport)("connect-dynamodb");
53
+ const client = await (0, utils_2.dynamicImport)("@aws-sdk/client-dynamodb");
54
+ const DynamoDBStore = storeFactory({ session: express_session_1.default });
55
+ sessionOpts.store = new DynamoDBStore({
56
+ ...configModule.projectConfig.sessionOptions.dynamodbOptions,
57
+ client: new client.DynamoDBClient(configModule.projectConfig.sessionOptions.dynamodbOptions.clientOptions),
58
+ });
59
+ }
60
+ else if (configModule?.projectConfig?.redisUrl) {
61
+ const RedisStore = (0, connect_redis_1.default)(express_session_1.default);
62
+ redisClient = new ioredis_1.default(configModule.projectConfig.redisUrl, configModule.projectConfig.redisOptions ?? {});
63
+ sessionOpts.store = new RedisStore({
64
+ client: redisClient,
65
+ prefix: `${configModule?.projectConfig?.redisPrefix ?? ""}sess:`,
66
+ });
67
+ }
68
+ app.set("trust proxy", 1);
69
+ /**
70
+ * Method to skip logging HTTP requests. We skip in test environment
71
+ * and also exclude files served by vite during development
72
+ */
73
+ function shouldSkipHttpLog(req, res) {
74
+ return (isTest ||
75
+ isHealthCheck(req) ||
76
+ NOISY_ENDPOINTS_CHUNKS.some((chunk) => req.url.includes(chunk)) ||
77
+ !logger.shouldLog("http"));
78
+ }
79
+ let loggingMiddleware;
80
+ /**
81
+ * The middleware to use for logging. We write the log messages
82
+ * using winston, but rely on morgan to hook into HTTP requests
83
+ */
84
+ if (!IS_DEV) {
85
+ const jsonFormat = (tokens, req, res) => {
86
+ const result = {
87
+ level: "http",
88
+ // client ip
89
+ client_ip: req.ip || "-",
90
+ // Request ID can be correlated with other logs (like error reports)
91
+ request_id: req.requestId || "-",
92
+ // Standard HTTP request properties
93
+ http_version: tokens["http-version"](req, res),
94
+ method: tokens.method(req, res),
95
+ path: tokens.url(req, res),
96
+ // Response details
97
+ status: Number(tokens.status(req, res)),
98
+ response_size: tokens.res(req, res, "content-length") || 0,
99
+ request_size: tokens.req(req, res, "content-length") || 0,
100
+ duration: Number(tokens["response-time"](req, res)),
101
+ // Useful headers that might help in debugging or tracing
102
+ referrer: tokens.referrer(req, res) || "-",
103
+ user_agent: tokens["user-agent"](req, res),
104
+ timestamp: new Date().toISOString(),
105
+ };
106
+ return JSON.stringify(result);
107
+ };
108
+ loggingMiddleware = (0, morgan_1.default)(jsonFormat, {
109
+ skip: shouldSkipHttpLog,
110
+ });
111
+ }
112
+ else {
113
+ loggingMiddleware = (0, morgan_1.default)(":method :url ← :referrer (:status) - :response-time ms", {
114
+ skip: shouldSkipHttpLog,
115
+ stream: {
116
+ write: (message) => logger.http(message.trim()),
117
+ },
118
+ });
119
+ }
120
+ app.use(loggingMiddleware);
121
+ app.use((0, cookie_parser_1.default)());
122
+ app.use((0, express_session_1.default)(sessionOpts));
123
+ // Currently we don't allow configuration of static files, but this can be revisited as needed.
124
+ app.use("/static", express_1.default.static(path_1.default.join(baseDir, "static")));
125
+ const shutdown = async () => {
126
+ redisClient?.disconnect();
127
+ };
128
+ return { app, shutdown };
129
+ }
130
+ //# sourceMappingURL=express-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-loader.js","sourceRoot":"","sources":["../../src/http/express-loader.ts"],"names":[],"mappings":"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"}