@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.
- package/README.md +0 -0
- package/dist/build-tools/compiler.d.ts +49 -0
- package/dist/build-tools/compiler.d.ts.map +1 -0
- package/dist/build-tools/compiler.js +291 -0
- package/dist/build-tools/compiler.js.map +1 -0
- package/dist/build-tools/index.d.ts +2 -0
- package/dist/build-tools/index.d.ts.map +1 -0
- package/dist/build-tools/index.js +18 -0
- package/dist/build-tools/index.js.map +1 -0
- package/dist/config/config.d.ts +34 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +132 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +35 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +901 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/container.d.ts +3 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +21 -0
- package/dist/container.js.map +1 -0
- package/dist/database/index.d.ts +3 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +19 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/pg-connection-loader.d.ts +6 -0
- package/dist/database/pg-connection-loader.d.ts.map +1 -0
- package/dist/database/pg-connection-loader.js +37 -0
- package/dist/database/pg-connection-loader.js.map +1 -0
- package/dist/eto-app-loader.d.ts +51 -0
- package/dist/eto-app-loader.d.ts.map +1 -0
- package/dist/eto-app-loader.js +183 -0
- package/dist/eto-app-loader.js.map +1 -0
- package/dist/feature-flags/feature-flag-loader.d.ts +8 -0
- package/dist/feature-flags/feature-flag-loader.d.ts.map +1 -0
- package/dist/feature-flags/feature-flag-loader.js +81 -0
- package/dist/feature-flags/feature-flag-loader.js.map +1 -0
- package/dist/feature-flags/flag-router.d.ts +32 -0
- package/dist/feature-flags/flag-router.d.ts.map +1 -0
- package/dist/feature-flags/flag-router.js +67 -0
- package/dist/feature-flags/flag-router.js.map +1 -0
- package/dist/feature-flags/index.d.ts +5 -0
- package/dist/feature-flags/index.d.ts.map +1 -0
- package/dist/feature-flags/index.js +21 -0
- package/dist/feature-flags/index.js.map +1 -0
- package/dist/feature-flags/types.d.ts +31 -0
- package/dist/feature-flags/types.d.ts.map +1 -0
- package/dist/feature-flags/types.js +3 -0
- package/dist/feature-flags/types.js.map +1 -0
- package/dist/http/express-loader.d.ts +8 -0
- package/dist/http/express-loader.d.ts.map +1 -0
- package/dist/http/express-loader.js +85 -0
- package/dist/http/express-loader.js.map +1 -0
- package/dist/http/index.d.ts +15 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +31 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/middlewares/apply-default-filters.d.ts +3 -0
- package/dist/http/middlewares/apply-default-filters.d.ts.map +1 -0
- package/dist/http/middlewares/apply-default-filters.js +32 -0
- package/dist/http/middlewares/apply-default-filters.js.map +1 -0
- package/dist/http/middlewares/apply-params-as-filters.d.ts +5 -0
- package/dist/http/middlewares/apply-params-as-filters.d.ts.map +1 -0
- package/dist/http/middlewares/apply-params-as-filters.js +14 -0
- package/dist/http/middlewares/apply-params-as-filters.js.map +1 -0
- package/dist/http/middlewares/authenticate-middleware.d.ts +11 -0
- package/dist/http/middlewares/authenticate-middleware.d.ts.map +1 -0
- package/dist/http/middlewares/authenticate-middleware.js +135 -0
- package/dist/http/middlewares/authenticate-middleware.js.map +1 -0
- package/dist/http/middlewares/clear-filters-by-key.d.ts +3 -0
- package/dist/http/middlewares/clear-filters-by-key.d.ts.map +1 -0
- package/dist/http/middlewares/clear-filters-by-key.js +12 -0
- package/dist/http/middlewares/clear-filters-by-key.js.map +1 -0
- package/dist/http/middlewares/ensure-publishable-api-key.d.ts +3 -0
- package/dist/http/middlewares/ensure-publishable-api-key.d.ts.map +1 -0
- package/dist/http/middlewares/ensure-publishable-api-key.js +49 -0
- package/dist/http/middlewares/ensure-publishable-api-key.js.map +1 -0
- package/dist/http/middlewares/error-handler.d.ts +23 -0
- package/dist/http/middlewares/error-handler.d.ts.map +1 -0
- package/dist/http/middlewares/error-handler.js +85 -0
- package/dist/http/middlewares/error-handler.js.map +1 -0
- package/dist/http/middlewares/exception-formatter.d.ts +9 -0
- package/dist/http/middlewares/exception-formatter.d.ts.map +1 -0
- package/dist/http/middlewares/exception-formatter.js +36 -0
- package/dist/http/middlewares/exception-formatter.js.map +1 -0
- package/dist/http/middlewares/index.d.ts +8 -0
- package/dist/http/middlewares/index.d.ts.map +1 -0
- package/dist/http/middlewares/index.js +24 -0
- package/dist/http/middlewares/index.js.map +1 -0
- package/dist/http/middlewares/set-context.d.ts +3 -0
- package/dist/http/middlewares/set-context.d.ts.map +1 -0
- package/dist/http/middlewares/set-context.js +18 -0
- package/dist/http/middlewares/set-context.js.map +1 -0
- package/dist/http/router.d.ts +100 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +764 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/types.d.ts +141 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +16 -0
- package/dist/http/types.js.map +1 -0
- package/dist/http/utils/define-middlewares.d.ts +18 -0
- package/dist/http/utils/define-middlewares.d.ts.map +1 -0
- package/dist/http/utils/define-middlewares.js +40 -0
- package/dist/http/utils/define-middlewares.js.map +1 -0
- package/dist/http/utils/get-query-config.d.ts +42 -0
- package/dist/http/utils/get-query-config.d.ts.map +1 -0
- package/dist/http/utils/get-query-config.js +183 -0
- package/dist/http/utils/get-query-config.js.map +1 -0
- package/dist/http/utils/http-compression.d.ts +5 -0
- package/dist/http/utils/http-compression.d.ts.map +1 -0
- package/dist/http/utils/http-compression.js +33 -0
- package/dist/http/utils/http-compression.js.map +1 -0
- package/dist/http/utils/maybe-apply-link-filter.d.ts +8 -0
- package/dist/http/utils/maybe-apply-link-filter.d.ts.map +1 -0
- package/dist/http/utils/maybe-apply-link-filter.js +71 -0
- package/dist/http/utils/maybe-apply-link-filter.js.map +1 -0
- package/dist/http/utils/refetch-entities.d.ts +5 -0
- package/dist/http/utils/refetch-entities.d.ts.map +1 -0
- package/dist/http/utils/refetch-entities.js +29 -0
- package/dist/http/utils/refetch-entities.js.map +1 -0
- package/dist/http/utils/restricted-fields.d.ts +6 -0
- package/dist/http/utils/restricted-fields.d.ts.map +1 -0
- package/dist/http/utils/restricted-fields.js +30 -0
- package/dist/http/utils/restricted-fields.js.map +1 -0
- package/dist/http/utils/unless-path.d.ts +9 -0
- package/dist/http/utils/unless-path.d.ts.map +1 -0
- package/dist/http/utils/unless-path.js +19 -0
- package/dist/http/utils/unless-path.js.map +1 -0
- package/dist/http/utils/validate-body.d.ts +5 -0
- package/dist/http/utils/validate-body.d.ts.map +1 -0
- package/dist/http/utils/validate-body.js +23 -0
- package/dist/http/utils/validate-body.js.map +1 -0
- package/dist/http/utils/validate-query.d.ts +6 -0
- package/dist/http/utils/validate-query.d.ts.map +1 -0
- package/dist/http/utils/validate-query.js +79 -0
- package/dist/http/utils/validate-query.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/index.d.ts +2 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +18 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/job-loader.d.ts +37 -0
- package/dist/jobs/job-loader.d.ts.map +1 -0
- package/dist/jobs/job-loader.js +130 -0
- package/dist/jobs/job-loader.js.map +1 -0
- package/dist/links/index.d.ts +2 -0
- package/dist/links/index.d.ts.map +1 -0
- package/dist/links/index.js +18 -0
- package/dist/links/index.js.map +1 -0
- package/dist/links/link-loader.d.ts +10 -0
- package/dist/links/link-loader.d.ts.map +1 -0
- package/dist/links/link-loader.js +74 -0
- package/dist/links/link-loader.js.map +1 -0
- package/dist/logger/index.d.ts +3 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +9 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/mikro-orm-cli/bin.d.ts +14 -0
- package/dist/mikro-orm-cli/bin.d.ts.map +1 -0
- package/dist/mikro-orm-cli/bin.js +54 -0
- package/dist/mikro-orm-cli/bin.js.map +1 -0
- package/dist/modules-sdk/index.d.ts +2 -0
- package/dist/modules-sdk/index.d.ts.map +1 -0
- package/dist/modules-sdk/index.js +18 -0
- package/dist/modules-sdk/index.js.map +1 -0
- package/dist/orchestration/index.d.ts +2 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +18 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/subscribers/index.d.ts +3 -0
- package/dist/subscribers/index.d.ts.map +1 -0
- package/dist/subscribers/index.js +19 -0
- package/dist/subscribers/index.js.map +1 -0
- package/dist/subscribers/subscriber-loader.d.ts +11 -0
- package/dist/subscribers/subscriber-loader.d.ts.map +1 -0
- package/dist/subscribers/subscriber-loader.js +196 -0
- package/dist/subscribers/subscriber-loader.js.map +1 -0
- package/dist/subscribers/types.d.ts +15 -0
- package/dist/subscribers/types.d.ts.map +1 -0
- package/dist/subscribers/types.js +3 -0
- package/dist/subscribers/types.js.map +1 -0
- package/dist/telemetry/index.d.ts +50 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +81 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/types/container.d.ts +62 -0
- package/dist/types/container.d.ts.map +1 -0
- package/dist/types/container.js +3 -0
- package/dist/types/container.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +19 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/workflow-loader.d.ts +10 -0
- package/dist/workflows/workflow-loader.d.ts.map +1 -0
- package/dist/workflows/workflow-loader.js +74 -0
- package/dist/workflows/workflow-loader.js.map +1 -0
- package/dist/workflows-sdk/composer.d.ts +2 -0
- package/dist/workflows-sdk/composer.d.ts.map +1 -0
- package/dist/workflows-sdk/composer.js +18 -0
- package/dist/workflows-sdk/composer.js.map +1 -0
- package/dist/workflows-sdk/index.d.ts +3 -0
- package/dist/workflows-sdk/index.d.ts.map +1 -0
- package/dist/workflows-sdk/index.js +19 -0
- package/dist/workflows-sdk/index.js.map +1 -0
- package/dist/zod/index.d.ts +2 -0
- package/dist/zod/index.d.ts.map +1 -0
- package/dist/zod/index.js +18 -0
- package/dist/zod/index.js.map +1 -0
- package/dist/zod/zod-helpers.d.ts +3 -0
- package/dist/zod/zod-helpers.d.ts.map +1 -0
- package/dist/zod/zod-helpers.js +95 -0
- package/dist/zod/zod-helpers.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|