@etohq/framework 1.0.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 (234) hide show
  1. package/README.md +0 -0
  2. package/dist/build-tools/compiler.d.ts +49 -0
  3. package/dist/build-tools/compiler.d.ts.map +1 -0
  4. package/dist/build-tools/compiler.js +291 -0
  5. package/dist/build-tools/compiler.js.map +1 -0
  6. package/dist/build-tools/index.d.ts +2 -0
  7. package/dist/build-tools/index.d.ts.map +1 -0
  8. package/dist/build-tools/index.js +18 -0
  9. package/dist/build-tools/index.js.map +1 -0
  10. package/dist/config/config.d.ts +34 -0
  11. package/dist/config/config.d.ts.map +1 -0
  12. package/dist/config/config.js +132 -0
  13. package/dist/config/config.js.map +1 -0
  14. package/dist/config/index.d.ts +5 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +21 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/config/loader.d.ts +11 -0
  19. package/dist/config/loader.d.ts.map +1 -0
  20. package/dist/config/loader.js +35 -0
  21. package/dist/config/loader.js.map +1 -0
  22. package/dist/config/types.d.ts +901 -0
  23. package/dist/config/types.d.ts.map +1 -0
  24. package/dist/config/types.js +3 -0
  25. package/dist/config/types.js.map +1 -0
  26. package/dist/container.d.ts +3 -0
  27. package/dist/container.d.ts.map +1 -0
  28. package/dist/container.js +21 -0
  29. package/dist/container.js.map +1 -0
  30. package/dist/database/index.d.ts +3 -0
  31. package/dist/database/index.d.ts.map +1 -0
  32. package/dist/database/index.js +19 -0
  33. package/dist/database/index.js.map +1 -0
  34. package/dist/database/pg-connection-loader.d.ts +6 -0
  35. package/dist/database/pg-connection-loader.d.ts.map +1 -0
  36. package/dist/database/pg-connection-loader.js +37 -0
  37. package/dist/database/pg-connection-loader.js.map +1 -0
  38. package/dist/eto-app-loader.d.ts +51 -0
  39. package/dist/eto-app-loader.d.ts.map +1 -0
  40. package/dist/eto-app-loader.js +183 -0
  41. package/dist/eto-app-loader.js.map +1 -0
  42. package/dist/feature-flags/feature-flag-loader.d.ts +8 -0
  43. package/dist/feature-flags/feature-flag-loader.d.ts.map +1 -0
  44. package/dist/feature-flags/feature-flag-loader.js +81 -0
  45. package/dist/feature-flags/feature-flag-loader.js.map +1 -0
  46. package/dist/feature-flags/flag-router.d.ts +32 -0
  47. package/dist/feature-flags/flag-router.d.ts.map +1 -0
  48. package/dist/feature-flags/flag-router.js +67 -0
  49. package/dist/feature-flags/flag-router.js.map +1 -0
  50. package/dist/feature-flags/index.d.ts +5 -0
  51. package/dist/feature-flags/index.d.ts.map +1 -0
  52. package/dist/feature-flags/index.js +21 -0
  53. package/dist/feature-flags/index.js.map +1 -0
  54. package/dist/feature-flags/types.d.ts +31 -0
  55. package/dist/feature-flags/types.d.ts.map +1 -0
  56. package/dist/feature-flags/types.js +3 -0
  57. package/dist/feature-flags/types.js.map +1 -0
  58. package/dist/http/express-loader.d.ts +8 -0
  59. package/dist/http/express-loader.d.ts.map +1 -0
  60. package/dist/http/express-loader.js +85 -0
  61. package/dist/http/express-loader.js.map +1 -0
  62. package/dist/http/index.d.ts +15 -0
  63. package/dist/http/index.d.ts.map +1 -0
  64. package/dist/http/index.js +31 -0
  65. package/dist/http/index.js.map +1 -0
  66. package/dist/http/middlewares/apply-default-filters.d.ts +3 -0
  67. package/dist/http/middlewares/apply-default-filters.d.ts.map +1 -0
  68. package/dist/http/middlewares/apply-default-filters.js +32 -0
  69. package/dist/http/middlewares/apply-default-filters.js.map +1 -0
  70. package/dist/http/middlewares/apply-params-as-filters.d.ts +5 -0
  71. package/dist/http/middlewares/apply-params-as-filters.d.ts.map +1 -0
  72. package/dist/http/middlewares/apply-params-as-filters.js +14 -0
  73. package/dist/http/middlewares/apply-params-as-filters.js.map +1 -0
  74. package/dist/http/middlewares/authenticate-middleware.d.ts +11 -0
  75. package/dist/http/middlewares/authenticate-middleware.d.ts.map +1 -0
  76. package/dist/http/middlewares/authenticate-middleware.js +135 -0
  77. package/dist/http/middlewares/authenticate-middleware.js.map +1 -0
  78. package/dist/http/middlewares/clear-filters-by-key.d.ts +3 -0
  79. package/dist/http/middlewares/clear-filters-by-key.d.ts.map +1 -0
  80. package/dist/http/middlewares/clear-filters-by-key.js +12 -0
  81. package/dist/http/middlewares/clear-filters-by-key.js.map +1 -0
  82. package/dist/http/middlewares/ensure-publishable-api-key.d.ts +3 -0
  83. package/dist/http/middlewares/ensure-publishable-api-key.d.ts.map +1 -0
  84. package/dist/http/middlewares/ensure-publishable-api-key.js +49 -0
  85. package/dist/http/middlewares/ensure-publishable-api-key.js.map +1 -0
  86. package/dist/http/middlewares/error-handler.d.ts +23 -0
  87. package/dist/http/middlewares/error-handler.d.ts.map +1 -0
  88. package/dist/http/middlewares/error-handler.js +85 -0
  89. package/dist/http/middlewares/error-handler.js.map +1 -0
  90. package/dist/http/middlewares/exception-formatter.d.ts +9 -0
  91. package/dist/http/middlewares/exception-formatter.d.ts.map +1 -0
  92. package/dist/http/middlewares/exception-formatter.js +36 -0
  93. package/dist/http/middlewares/exception-formatter.js.map +1 -0
  94. package/dist/http/middlewares/index.d.ts +8 -0
  95. package/dist/http/middlewares/index.d.ts.map +1 -0
  96. package/dist/http/middlewares/index.js +24 -0
  97. package/dist/http/middlewares/index.js.map +1 -0
  98. package/dist/http/middlewares/set-context.d.ts +3 -0
  99. package/dist/http/middlewares/set-context.d.ts.map +1 -0
  100. package/dist/http/middlewares/set-context.js +18 -0
  101. package/dist/http/middlewares/set-context.js.map +1 -0
  102. package/dist/http/router.d.ts +100 -0
  103. package/dist/http/router.d.ts.map +1 -0
  104. package/dist/http/router.js +764 -0
  105. package/dist/http/router.js.map +1 -0
  106. package/dist/http/types.d.ts +141 -0
  107. package/dist/http/types.d.ts.map +1 -0
  108. package/dist/http/types.js +16 -0
  109. package/dist/http/types.js.map +1 -0
  110. package/dist/http/utils/define-middlewares.d.ts +18 -0
  111. package/dist/http/utils/define-middlewares.d.ts.map +1 -0
  112. package/dist/http/utils/define-middlewares.js +40 -0
  113. package/dist/http/utils/define-middlewares.js.map +1 -0
  114. package/dist/http/utils/get-query-config.d.ts +42 -0
  115. package/dist/http/utils/get-query-config.d.ts.map +1 -0
  116. package/dist/http/utils/get-query-config.js +183 -0
  117. package/dist/http/utils/get-query-config.js.map +1 -0
  118. package/dist/http/utils/http-compression.d.ts +5 -0
  119. package/dist/http/utils/http-compression.d.ts.map +1 -0
  120. package/dist/http/utils/http-compression.js +33 -0
  121. package/dist/http/utils/http-compression.js.map +1 -0
  122. package/dist/http/utils/maybe-apply-link-filter.d.ts +8 -0
  123. package/dist/http/utils/maybe-apply-link-filter.d.ts.map +1 -0
  124. package/dist/http/utils/maybe-apply-link-filter.js +71 -0
  125. package/dist/http/utils/maybe-apply-link-filter.js.map +1 -0
  126. package/dist/http/utils/refetch-entities.d.ts +5 -0
  127. package/dist/http/utils/refetch-entities.d.ts.map +1 -0
  128. package/dist/http/utils/refetch-entities.js +29 -0
  129. package/dist/http/utils/refetch-entities.js.map +1 -0
  130. package/dist/http/utils/restricted-fields.d.ts +6 -0
  131. package/dist/http/utils/restricted-fields.d.ts.map +1 -0
  132. package/dist/http/utils/restricted-fields.js +30 -0
  133. package/dist/http/utils/restricted-fields.js.map +1 -0
  134. package/dist/http/utils/unless-path.d.ts +9 -0
  135. package/dist/http/utils/unless-path.d.ts.map +1 -0
  136. package/dist/http/utils/unless-path.js +19 -0
  137. package/dist/http/utils/unless-path.js.map +1 -0
  138. package/dist/http/utils/validate-body.d.ts +5 -0
  139. package/dist/http/utils/validate-body.d.ts.map +1 -0
  140. package/dist/http/utils/validate-body.js +23 -0
  141. package/dist/http/utils/validate-body.js.map +1 -0
  142. package/dist/http/utils/validate-query.d.ts +6 -0
  143. package/dist/http/utils/validate-query.d.ts.map +1 -0
  144. package/dist/http/utils/validate-query.js +79 -0
  145. package/dist/http/utils/validate-query.js.map +1 -0
  146. package/dist/index.d.ts +16 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +34 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/jobs/index.d.ts +2 -0
  151. package/dist/jobs/index.d.ts.map +1 -0
  152. package/dist/jobs/index.js +18 -0
  153. package/dist/jobs/index.js.map +1 -0
  154. package/dist/jobs/job-loader.d.ts +37 -0
  155. package/dist/jobs/job-loader.d.ts.map +1 -0
  156. package/dist/jobs/job-loader.js +130 -0
  157. package/dist/jobs/job-loader.js.map +1 -0
  158. package/dist/links/index.d.ts +2 -0
  159. package/dist/links/index.d.ts.map +1 -0
  160. package/dist/links/index.js +18 -0
  161. package/dist/links/index.js.map +1 -0
  162. package/dist/links/link-loader.d.ts +10 -0
  163. package/dist/links/link-loader.d.ts.map +1 -0
  164. package/dist/links/link-loader.js +74 -0
  165. package/dist/links/link-loader.js.map +1 -0
  166. package/dist/logger/index.d.ts +3 -0
  167. package/dist/logger/index.d.ts.map +1 -0
  168. package/dist/logger/index.js +9 -0
  169. package/dist/logger/index.js.map +1 -0
  170. package/dist/mikro-orm-cli/bin.d.ts +14 -0
  171. package/dist/mikro-orm-cli/bin.d.ts.map +1 -0
  172. package/dist/mikro-orm-cli/bin.js +54 -0
  173. package/dist/mikro-orm-cli/bin.js.map +1 -0
  174. package/dist/modules-sdk/index.d.ts +2 -0
  175. package/dist/modules-sdk/index.d.ts.map +1 -0
  176. package/dist/modules-sdk/index.js +18 -0
  177. package/dist/modules-sdk/index.js.map +1 -0
  178. package/dist/orchestration/index.d.ts +2 -0
  179. package/dist/orchestration/index.d.ts.map +1 -0
  180. package/dist/orchestration/index.js +18 -0
  181. package/dist/orchestration/index.js.map +1 -0
  182. package/dist/subscribers/index.d.ts +3 -0
  183. package/dist/subscribers/index.d.ts.map +1 -0
  184. package/dist/subscribers/index.js +19 -0
  185. package/dist/subscribers/index.js.map +1 -0
  186. package/dist/subscribers/subscriber-loader.d.ts +11 -0
  187. package/dist/subscribers/subscriber-loader.d.ts.map +1 -0
  188. package/dist/subscribers/subscriber-loader.js +196 -0
  189. package/dist/subscribers/subscriber-loader.js.map +1 -0
  190. package/dist/subscribers/types.d.ts +15 -0
  191. package/dist/subscribers/types.d.ts.map +1 -0
  192. package/dist/subscribers/types.js +3 -0
  193. package/dist/subscribers/types.js.map +1 -0
  194. package/dist/telemetry/index.d.ts +50 -0
  195. package/dist/telemetry/index.d.ts.map +1 -0
  196. package/dist/telemetry/index.js +81 -0
  197. package/dist/telemetry/index.js.map +1 -0
  198. package/dist/types/container.d.ts +62 -0
  199. package/dist/types/container.d.ts.map +1 -0
  200. package/dist/types/container.js +3 -0
  201. package/dist/types/container.js.map +1 -0
  202. package/dist/types/index.d.ts +2 -0
  203. package/dist/types/index.d.ts.map +1 -0
  204. package/dist/types/index.js +18 -0
  205. package/dist/types/index.js.map +1 -0
  206. package/dist/utils/index.d.ts +3 -0
  207. package/dist/utils/index.d.ts.map +1 -0
  208. package/dist/utils/index.js +19 -0
  209. package/dist/utils/index.js.map +1 -0
  210. package/dist/workflows/index.d.ts +3 -0
  211. package/dist/workflows/index.d.ts.map +1 -0
  212. package/dist/workflows/index.js +19 -0
  213. package/dist/workflows/index.js.map +1 -0
  214. package/dist/workflows/workflow-loader.d.ts +10 -0
  215. package/dist/workflows/workflow-loader.d.ts.map +1 -0
  216. package/dist/workflows/workflow-loader.js +74 -0
  217. package/dist/workflows/workflow-loader.js.map +1 -0
  218. package/dist/workflows-sdk/composer.d.ts +2 -0
  219. package/dist/workflows-sdk/composer.d.ts.map +1 -0
  220. package/dist/workflows-sdk/composer.js +18 -0
  221. package/dist/workflows-sdk/composer.js.map +1 -0
  222. package/dist/workflows-sdk/index.d.ts +3 -0
  223. package/dist/workflows-sdk/index.d.ts.map +1 -0
  224. package/dist/workflows-sdk/index.js +19 -0
  225. package/dist/workflows-sdk/index.js.map +1 -0
  226. package/dist/zod/index.d.ts +2 -0
  227. package/dist/zod/index.d.ts.map +1 -0
  228. package/dist/zod/index.js +18 -0
  229. package/dist/zod/index.js.map +1 -0
  230. package/dist/zod/zod-helpers.d.ts +3 -0
  231. package/dist/zod/zod-helpers.d.ts.map +1 -0
  232. package/dist/zod/zod-helpers.js +95 -0
  233. package/dist/zod/zod-helpers.js.map +1 -0
  234. package/package.json +120 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -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/config/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from "./types/container";
2
+ export declare const container: import("@etohq/types").EtoContainer;
3
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAGjC,eAAO,MAAM,SAAS,qCAAuB,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
+ exports.container = void 0;
18
+ __exportStar(require("./types/container"), exports);
19
+ const utils_1 = require("@etohq/utils");
20
+ exports.container = (0, utils_1.createEtoContainer)();
21
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,wCAAiD;AAEpC,QAAA,SAAS,GAAG,IAAA,0BAAkB,GAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import "../types/container";
2
+ export * from "./pg-connection-loader";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,19 @@
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("./pg-connection-loader"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8BAA2B;AAC3B,yDAAsC"}
@@ -0,0 +1,6 @@
1
+ import { ModulesSdkUtils } from "@etohq/utils";
2
+ /**
3
+ * Initialize a knex connection that can then be shared to any resources if needed
4
+ */
5
+ export declare function pgConnectionLoader(): ReturnType<typeof ModulesSdkUtils.createPgConnection>;
6
+ //# sourceMappingURL=pg-connection-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-connection-loader.d.ts","sourceRoot":"","sources":["../../src/database/pg-connection-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,eAAe,EAAE,MAAM,cAAc,CAAA;AAKzE;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAC9C,OAAO,eAAe,CAAC,kBAAkB,CAC1C,CAqCA"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pgConnectionLoader = pgConnectionLoader;
4
+ const utils_1 = require("@etohq/utils");
5
+ const awilix_1 = require("awilix");
6
+ const container_1 = require("../container");
7
+ const config_1 = require("../config");
8
+ /**
9
+ * Initialize a knex connection that can then be shared to any resources if needed
10
+ */
11
+ function pgConnectionLoader() {
12
+ if (container_1.container.hasRegistration(utils_1.ContainerRegistrationKeys.PG_CONNECTION)) {
13
+ return container_1.container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
14
+ }
15
+ const configModule = config_1.configManager.config;
16
+ // Share a knex connection to be consumed by the shared modules
17
+ const connectionString = configModule.projectConfig.databaseUrl;
18
+ const driverOptions = configModule.projectConfig.databaseDriverOptions || {};
19
+ const schema = configModule.projectConfig.databaseSchema || "public";
20
+ const idleTimeoutMillis = driverOptions.pool?.idleTimeoutMillis ?? undefined; // prevent null to be passed
21
+ const poolMin = driverOptions.pool?.min ?? 2;
22
+ const poolMax = driverOptions.pool?.max;
23
+ delete driverOptions.pool;
24
+ const pgConnection = utils_1.ModulesSdkUtils.createPgConnection({
25
+ clientUrl: connectionString,
26
+ schema,
27
+ driverOptions,
28
+ pool: {
29
+ min: poolMin,
30
+ max: poolMax,
31
+ idleTimeoutMillis,
32
+ },
33
+ });
34
+ container_1.container.register(utils_1.ContainerRegistrationKeys.PG_CONNECTION, (0, awilix_1.asValue)(pgConnection));
35
+ return pgConnection;
36
+ }
37
+ //# sourceMappingURL=pg-connection-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-connection-loader.js","sourceRoot":"","sources":["../../src/database/pg-connection-loader.ts"],"names":[],"mappings":";;AAQA,gDAuCC;AA/CD,wCAAyE;AACzE,mCAAgC;AAChC,4CAAwC;AACxC,sCAAyC;AAEzC;;GAEG;AACH,SAAgB,kBAAkB;IAGhC,IAAI,qBAAS,CAAC,eAAe,CAAC,iCAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;QACvE,OAAO,qBAAS,CAAC,OAAO,CACtB,iCAAyB,CAAC,aAAa,CAC4B,CAAA;IACvE,CAAC;IAED,MAAM,YAAY,GAAG,sBAAa,CAAC,MAAM,CAAA;IAEzC,+DAA+D;IAC/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC,WAAW,CAAA;IAC/D,MAAM,aAAa,GACjB,YAAY,CAAC,aAAa,CAAC,qBAAqB,IAAI,EAAE,CAAA;IACxD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,cAAc,IAAI,QAAQ,CAAA;IACpE,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,iBAAiB,IAAI,SAAS,CAAA,CAAC,4BAA4B;IACzG,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAA;IAEvC,OAAO,aAAa,CAAC,IAAI,CAAA;IAEzB,MAAM,YAAY,GAAG,uBAAe,CAAC,kBAAkB,CAAC;QACtD,SAAS,EAAE,gBAAgB;QAC3B,MAAM;QACN,aAAa;QACb,IAAI,EAAE;YACJ,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,OAAO;YACZ,iBAAiB;SAClB;KACF,CAAC,CAAA;IAEF,qBAAS,CAAC,QAAQ,CAChB,iCAAyB,CAAC,aAAa,EACvC,IAAA,gBAAO,EAAC,YAAY,CAAC,CACtB,CAAA;IAED,OAAO,YAAY,CAAA;AACrB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { EtoAppOutput, RegisterModuleJoinerConfig } from "@etohq/modules-sdk";
2
+ import { CommonTypes, ILinkMigrationsPlanner, InternalModuleDeclaration, ModuleServiceInitializeOptions } from "@etohq/types";
3
+ import { EtoContainer } from "./container";
4
+ import type { Knex } from "@mikro-orm/knex";
5
+ export declare class EtoAppLoader {
6
+ #private;
7
+ constructor({ container, customLinksModules, }?: {
8
+ container?: EtoContainer;
9
+ customLinksModules?: RegisterModuleJoinerConfig | RegisterModuleJoinerConfig[];
10
+ });
11
+ protected mergeDefaultModules(modulesConfig: CommonTypes.ConfigModule["modules"]): {
12
+ [x: string]: boolean | Partial<InternalModuleDeclaration | import("@etohq/types").ExternalModuleDeclaration>;
13
+ };
14
+ protected prepareSharedResourcesAndDeps(): {
15
+ sharedResourcesConfig: ModuleServiceInitializeOptions;
16
+ injectedDependencies: {
17
+ __pg_connection__: Knex<any, any[]>;
18
+ logger: import("@etohq/types").Logger;
19
+ };
20
+ };
21
+ /**
22
+ * Run, Revert or Generate the migrations for the eto app.
23
+ *
24
+ * @param moduleNames
25
+ * @param linkModules
26
+ * @param action
27
+ */
28
+ runModulesMigrations({ moduleNames, action, }?: {
29
+ moduleNames?: never;
30
+ action: "run";
31
+ } | {
32
+ moduleNames: string[];
33
+ action: "revert" | "generate";
34
+ }): Promise<void>;
35
+ /**
36
+ * Return an instance of the link module migration planner.
37
+ */
38
+ getLinksExecutionPlanner(): Promise<ILinkMigrationsPlanner>;
39
+ /**
40
+ * Run the modules loader without taking care of anything else. This is useful for running the loader as a separate action or to re run all modules loaders.
41
+ */
42
+ runModulesLoader(): Promise<void>;
43
+ /**
44
+ * Load all modules and bootstrap all the modules and links to be ready to be consumed
45
+ * @param config
46
+ */
47
+ load(config?: {
48
+ registerInContainer: boolean;
49
+ }): Promise<EtoAppOutput>;
50
+ }
51
+ //# sourceMappingURL=eto-app-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eto-app-loader.d.ts","sourceRoot":"","sources":["../src/eto-app-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,YAAY,EAEZ,0BAA0B,EAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,WAAW,EAEX,sBAAsB,EACtB,yBAAyB,EAGzB,8BAA8B,EAC/B,MAAM,cAAc,CAAA;AAYrB,OAAO,EAGL,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,qBAAa,YAAY;;gBAkBX,EACV,SAAS,EACT,kBAAkB,GACnB,GAAE;QACD,SAAS,CAAC,EAAE,YAAY,CAAA;QACxB,kBAAkB,CAAC,EACf,0BAA0B,GAC1B,0BAA0B,EAAE,CAAA;KAC5B;IAKN,SAAS,CAAC,mBAAmB,CAC3B,aAAa,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC;;;IAsCpD,SAAS,CAAC,6BAA6B;;;;;;;IA6BvC;;;;;;OAMG;IACG,oBAAoB,CACxB,EACE,WAAW,EACX,MAAc,GACf,GACG;QACE,WAAW,CAAC,EAAE,KAAK,CAAA;QACnB,MAAM,EAAE,KAAK,CAAA;KACd,GACD;QACE,WAAW,EAAE,MAAM,EAAE,CAAA;QACrB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAA;KAGlC,GACA,OAAO,CAAC,IAAI,CAAC;IAuBhB;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAgBjE;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAevC;;;OAGG;IACG,IAAI,CAAC,MAAM;;KAAgC,GAAG,OAAO,CAAC,YAAY,CAAC;CAqE1E"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _EtoAppLoader_container, _EtoAppLoader_customLinksModules;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.EtoAppLoader = void 0;
16
+ const modules_sdk_1 = require("@etohq/modules-sdk");
17
+ const utils_1 = require("@etohq/utils");
18
+ const awilix_1 = require("awilix");
19
+ const config_1 = require("./config");
20
+ const container_1 = require("./container");
21
+ class EtoAppLoader {
22
+ // TODO: Adjust all loaders to accept an optional container such that in test env it is possible if needed to provide a specific container otherwise use the main container
23
+ // Maybe also adjust the different places to resolve the config from the container instead of the configManager for the same reason
24
+ // To be discussed
25
+ constructor({ container, customLinksModules, } = {}) {
26
+ /**
27
+ * Container from where to resolve resources
28
+ * @private
29
+ */
30
+ _EtoAppLoader_container.set(this, void 0);
31
+ /**
32
+ * Extra links modules config which should be added manually to the links to be loaded
33
+ * @private
34
+ */
35
+ _EtoAppLoader_customLinksModules.set(this, void 0);
36
+ __classPrivateFieldSet(this, _EtoAppLoader_container, container ?? container_1.container, "f");
37
+ __classPrivateFieldSet(this, _EtoAppLoader_customLinksModules, customLinksModules ?? [], "f");
38
+ }
39
+ mergeDefaultModules(modulesConfig) {
40
+ const defaultModules = Object.values(modules_sdk_1.ModulesDefinition).filter((definition) => {
41
+ return !!definition.defaultPackage;
42
+ });
43
+ const configModules = { ...modulesConfig };
44
+ for (const defaultModule of defaultModules) {
45
+ configModules[defaultModule.key] ??=
46
+ defaultModule.defaultModuleDeclaration;
47
+ }
48
+ for (const [key, value] of Object.entries(configModules)) {
49
+ const def = {};
50
+ def.key ??= key;
51
+ def.label ??= modules_sdk_1.ModulesDefinition[key]?.label ?? (0, utils_1.upperCaseFirst)(key);
52
+ def.isQueryable = modules_sdk_1.ModulesDefinition[key]?.isQueryable ?? true;
53
+ const orignalDef = value?.definition ?? modules_sdk_1.ModulesDefinition[key];
54
+ if (!(0, utils_1.isBoolean)(value) &&
55
+ ((0, utils_1.isObject)(orignalDef) || !(0, utils_1.isPresent)(value.definition))) {
56
+ value.definition = {
57
+ ...def,
58
+ ...orignalDef,
59
+ };
60
+ }
61
+ }
62
+ return configModules;
63
+ }
64
+ prepareSharedResourcesAndDeps() {
65
+ const injectedDependencies = {
66
+ [utils_1.ContainerRegistrationKeys.PG_CONNECTION]: __classPrivateFieldGet(this, _EtoAppLoader_container, "f").resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION),
67
+ [utils_1.ContainerRegistrationKeys.LOGGER]: __classPrivateFieldGet(this, _EtoAppLoader_container, "f").resolve(utils_1.ContainerRegistrationKeys.LOGGER),
68
+ };
69
+ const sharedResourcesConfig = {
70
+ database: {
71
+ clientUrl: injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION]?.client?.config?.connection?.connectionString ??
72
+ config_1.configManager.config.projectConfig.databaseUrl,
73
+ driverOptions: config_1.configManager.config.projectConfig.databaseDriverOptions,
74
+ debug: config_1.configManager.config.projectConfig.databaseLogging ?? false,
75
+ schema: config_1.configManager.config.projectConfig.databaseSchema,
76
+ database: config_1.configManager.config.projectConfig.databaseName,
77
+ },
78
+ };
79
+ return { sharedResourcesConfig, injectedDependencies };
80
+ }
81
+ /**
82
+ * Run, Revert or Generate the migrations for the eto app.
83
+ *
84
+ * @param moduleNames
85
+ * @param linkModules
86
+ * @param action
87
+ */
88
+ async runModulesMigrations({ moduleNames, action = "run", } = {
89
+ action: "run",
90
+ }) {
91
+ const configModules = this.mergeDefaultModules(config_1.configManager.config.modules);
92
+ const { sharedResourcesConfig, injectedDependencies } = this.prepareSharedResourcesAndDeps();
93
+ const migrationOptions = {
94
+ modulesConfig: configModules,
95
+ sharedContainer: __classPrivateFieldGet(this, _EtoAppLoader_container, "f"),
96
+ linkModules: __classPrivateFieldGet(this, _EtoAppLoader_customLinksModules, "f"),
97
+ sharedResourcesConfig,
98
+ injectedDependencies,
99
+ };
100
+ if (action === "revert") {
101
+ await (0, modules_sdk_1.EtoAppMigrateDown)(moduleNames, migrationOptions);
102
+ }
103
+ else if (action === "run") {
104
+ await (0, modules_sdk_1.EtoAppMigrateUp)(migrationOptions);
105
+ }
106
+ else {
107
+ await (0, modules_sdk_1.EtoAppMigrateGenerate)(moduleNames, migrationOptions);
108
+ }
109
+ }
110
+ /**
111
+ * Return an instance of the link module migration planner.
112
+ */
113
+ async getLinksExecutionPlanner() {
114
+ const configModules = this.mergeDefaultModules(config_1.configManager.config.modules);
115
+ const { sharedResourcesConfig, injectedDependencies } = this.prepareSharedResourcesAndDeps();
116
+ const migrationOptions = {
117
+ modulesConfig: configModules,
118
+ sharedContainer: __classPrivateFieldGet(this, _EtoAppLoader_container, "f"),
119
+ linkModules: __classPrivateFieldGet(this, _EtoAppLoader_customLinksModules, "f"),
120
+ sharedResourcesConfig,
121
+ injectedDependencies,
122
+ };
123
+ return await (0, modules_sdk_1.EtoAppGetLinksExecutionPlanner)(migrationOptions);
124
+ }
125
+ /**
126
+ * Run the modules loader without taking care of anything else. This is useful for running the loader as a separate action or to re run all modules loaders.
127
+ */
128
+ async runModulesLoader() {
129
+ const { sharedResourcesConfig, injectedDependencies } = this.prepareSharedResourcesAndDeps();
130
+ const configModules = this.mergeDefaultModules(config_1.configManager.config.modules);
131
+ await (0, modules_sdk_1.EtoApp)({
132
+ modulesConfig: configModules,
133
+ sharedContainer: __classPrivateFieldGet(this, _EtoAppLoader_container, "f"),
134
+ linkModules: __classPrivateFieldGet(this, _EtoAppLoader_customLinksModules, "f"),
135
+ sharedResourcesConfig,
136
+ injectedDependencies,
137
+ loaderOnly: true,
138
+ });
139
+ }
140
+ /**
141
+ * Load all modules and bootstrap all the modules and links to be ready to be consumed
142
+ * @param config
143
+ */
144
+ async load(config = { registerInContainer: true }) {
145
+ const configModule = __classPrivateFieldGet(this, _EtoAppLoader_container, "f").resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
146
+ const { sharedResourcesConfig, injectedDependencies } = this.prepareSharedResourcesAndDeps();
147
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.REMOTE_QUERY, (0, awilix_1.asValue)(undefined));
148
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.QUERY, (0, awilix_1.asValue)(undefined));
149
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.LINK, (0, awilix_1.asValue)(undefined));
150
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.REMOTE_LINK, (0, awilix_1.aliasTo)(utils_1.ContainerRegistrationKeys.LINK));
151
+ const configModules = this.mergeDefaultModules(configModule.modules);
152
+ const etoApp = await (0, modules_sdk_1.EtoApp)({
153
+ workerMode: configModule.projectConfig.workerMode,
154
+ modulesConfig: configModules,
155
+ sharedContainer: __classPrivateFieldGet(this, _EtoAppLoader_container, "f"),
156
+ linkModules: __classPrivateFieldGet(this, _EtoAppLoader_customLinksModules, "f"),
157
+ sharedResourcesConfig,
158
+ injectedDependencies,
159
+ });
160
+ if (!config.registerInContainer) {
161
+ return etoApp;
162
+ }
163
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.LINK, (0, awilix_1.asValue)(etoApp.link));
164
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.REMOTE_LINK, (0, awilix_1.aliasTo)(utils_1.ContainerRegistrationKeys.LINK));
165
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.REMOTE_QUERY, (0, awilix_1.asValue)(etoApp.query));
166
+ __classPrivateFieldGet(this, _EtoAppLoader_container, "f").register(utils_1.ContainerRegistrationKeys.QUERY, (0, awilix_1.asValue)(etoApp.query));
167
+ for (const moduleService of Object.values(etoApp.modules)) {
168
+ const loadedModule = moduleService;
169
+ container_1.container.register(loadedModule.__definition.key, (0, awilix_1.asValue)(moduleService));
170
+ }
171
+ // Register all unresolved modules as undefined to be present in the container with undefined value by default
172
+ // but still resolvable
173
+ for (const moduleDefinition of Object.values(modules_sdk_1.ModulesDefinition)) {
174
+ if (!container_1.container.hasRegistration(moduleDefinition.key)) {
175
+ container_1.container.register(moduleDefinition.key, (0, awilix_1.asValue)(undefined));
176
+ }
177
+ }
178
+ return etoApp;
179
+ }
180
+ }
181
+ exports.EtoAppLoader = EtoAppLoader;
182
+ _EtoAppLoader_container = new WeakMap(), _EtoAppLoader_customLinksModules = new WeakMap();
183
+ //# sourceMappingURL=eto-app-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eto-app-loader.js","sourceRoot":"","sources":["../src/eto-app-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { FlagRouter } from "@etohq/utils";
2
+ export declare const featureFlagRouter: FlagRouter;
3
+ /**
4
+ * Load feature flags from a directory and from the already loaded config under the hood
5
+ * @param sourcePath
6
+ */
7
+ export declare function featureFlagsLoader(sourcePath?: string): Promise<FlagRouter>;
8
+ //# 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,EAGL,UAAU,EAOX,MAAM,cAAc,CAAA;AAQrB,eAAO,MAAM,iBAAiB,YAAqB,CAAA;AA+DnD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.featureFlagRouter = void 0;
4
+ exports.featureFlagsLoader = featureFlagsLoader;
5
+ // import { trackFeatureFlag } from "@etohq/telemetry"
6
+ const utils_1 = require("@etohq/utils");
7
+ const awilix_1 = require("awilix");
8
+ const path_1 = require("path");
9
+ const config_1 = require("../config");
10
+ const container_1 = require("../container");
11
+ const logger_1 = require("../logger");
12
+ exports.featureFlagRouter = new utils_1.FlagRouter({});
13
+ container_1.container.register(utils_1.ContainerRegistrationKeys.FEATURE_FLAG_ROUTER, (0, awilix_1.asFunction)(() => exports.featureFlagRouter));
14
+ const excludedFiles = ["index.js", "index.ts"];
15
+ const excludedExtensions = [".d.ts", ".d.ts.map", ".js.map"];
16
+ const flagConfig = {};
17
+ function registerFlag(flag, projectConfigFlags) {
18
+ flagConfig[flag.key] = (0, utils_1.isTruthy)(flag.default_val);
19
+ let from;
20
+ if ((0, utils_1.isDefined)(process.env[flag.env_key])) {
21
+ from = "environment";
22
+ const envVal = process.env[flag.env_key];
23
+ // ETO_FF_ANALYTICS="true"
24
+ flagConfig[flag.key] = (0, utils_1.isTruthy)(process.env[flag.env_key]);
25
+ const parsedFromEnv = (0, utils_1.isString)(envVal) ? envVal.split(",") : [];
26
+ // ETO_FF_WORKFLOWS=createProducts,deleteProducts
27
+ if (parsedFromEnv.length > 1) {
28
+ flagConfig[flag.key] = (0, utils_1.objectFromStringPath)(parsedFromEnv);
29
+ }
30
+ }
31
+ else if ((0, utils_1.isDefined)(projectConfigFlags[flag.key])) {
32
+ from = "project config";
33
+ // featureFlags: { analytics: "true" | true }
34
+ flagConfig[flag.key] = (0, utils_1.isTruthy)(projectConfigFlags[flag.key]);
35
+ // featureFlags: { workflows: { createProducts: true } }
36
+ if ((0, utils_1.isObject)(projectConfigFlags[flag.key])) {
37
+ flagConfig[flag.key] = projectConfigFlags[flag.key];
38
+ }
39
+ }
40
+ if (logger_1.logger && from) {
41
+ logger_1.logger.info(`Using flag ${flag.env_key} from ${from} with value ${flagConfig[flag.key]}`);
42
+ }
43
+ if (flagConfig[flag.key]) {
44
+ // trackFeatureFlag(flag.key)
45
+ }
46
+ exports.featureFlagRouter.setFlag(flag.key, flagConfig[flag.key]);
47
+ }
48
+ /**
49
+ * Load feature flags from a directory and from the already loaded config under the hood
50
+ * @param sourcePath
51
+ */
52
+ async function featureFlagsLoader(sourcePath) {
53
+ const { featureFlags: projectConfigFlags = {} } = config_1.configManager.config;
54
+ if (!sourcePath) {
55
+ return exports.featureFlagRouter;
56
+ }
57
+ const flagDir = (0, path_1.normalize)(sourcePath);
58
+ await (0, utils_1.readDirRecursive)(flagDir).then(async (files) => {
59
+ if (!files?.length) {
60
+ return;
61
+ }
62
+ files.map(async (file) => {
63
+ if (file.isDirectory()) {
64
+ return await featureFlagsLoader((0, path_1.join)(flagDir, file.name));
65
+ }
66
+ if (excludedExtensions.some((ext) => file.name.endsWith(ext)) ||
67
+ excludedFiles.includes(file.name)) {
68
+ return;
69
+ }
70
+ const fileExports = await (0, utils_1.dynamicImport)((0, path_1.join)(flagDir, file.name));
71
+ const featureFlag = fileExports.default;
72
+ if (!featureFlag) {
73
+ return;
74
+ }
75
+ registerFlag(featureFlag, projectConfigFlags);
76
+ return;
77
+ });
78
+ });
79
+ return exports.featureFlagRouter;
80
+ }
81
+ //# 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":"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"}
@@ -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("@etohq/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,wCAAiD;AAGjD,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"}