unleash-server 4.2.0 → 4.3.0-beta.2
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 +1 -0
- package/dist/lib/addons/addon.d.ts +2 -1
- package/dist/lib/addons/addon.js.map +1 -1
- package/dist/lib/addons/datadog.d.ts +2 -1
- package/dist/lib/addons/datadog.js.map +1 -1
- package/dist/lib/addons/datadog.test.js +3 -0
- package/dist/lib/addons/datadog.test.js.map +1 -1
- package/dist/lib/addons/feature-event-formatter-md.d.ts +1 -1
- package/dist/lib/addons/feature-event-formatter-md.js +13 -14
- package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
- package/dist/lib/addons/slack.d.ts +2 -1
- package/dist/lib/addons/slack.js.map +1 -1
- package/dist/lib/addons/slack.test.js +6 -0
- package/dist/lib/addons/slack.test.js.map +1 -1
- package/dist/lib/addons/teams.d.ts +2 -1
- package/dist/lib/addons/teams.js.map +1 -1
- package/dist/lib/addons/teams.test.js +3 -0
- package/dist/lib/addons/teams.test.js.map +1 -1
- package/dist/lib/addons/webhook.d.ts +8 -2
- package/dist/lib/addons/webhook.js +0 -1
- package/dist/lib/addons/webhook.js.map +1 -1
- package/dist/lib/addons/webhook.test.js +2 -0
- package/dist/lib/addons/webhook.test.js.map +1 -1
- package/dist/lib/create-config.js +11 -20
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/create-config.test.js +0 -37
- package/dist/lib/create-config.test.js.map +1 -1
- package/dist/lib/db/client-instance-store.js +2 -2
- package/dist/lib/db/client-instance-store.js.map +1 -1
- package/dist/lib/db/client-metrics-db.js +2 -2
- package/dist/lib/db/client-metrics-db.js.map +1 -1
- package/dist/lib/db/client-metrics-store-v2.js +5 -1
- package/dist/lib/db/client-metrics-store-v2.js.map +1 -1
- package/dist/lib/db/client-metrics-store.js +2 -2
- package/dist/lib/db/client-metrics-store.js.map +1 -1
- package/dist/lib/db/event-store.d.ts +10 -6
- package/dist/lib/db/event-store.js +21 -1
- package/dist/lib/db/event-store.js.map +1 -1
- package/dist/lib/db/feature-strategy-store.js +1 -0
- package/dist/lib/db/feature-strategy-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-store.d.ts +4 -1
- package/dist/lib/db/feature-toggle-store.js +27 -2
- package/dist/lib/db/feature-toggle-store.js.map +1 -1
- package/dist/lib/db/index.js +2 -0
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/session-store.js +2 -1
- package/dist/lib/db/session-store.js.map +1 -1
- package/dist/lib/db/user-splash-store.d.ts +19 -0
- package/dist/lib/db/user-splash-store.js +70 -0
- package/dist/lib/db/user-splash-store.js.map +1 -0
- package/dist/lib/error/minimum-one-environment-error.d.ts +5 -0
- package/dist/lib/error/minimum-one-environment-error.js +24 -0
- package/dist/lib/error/minimum-one-environment-error.js.map +1 -0
- package/dist/lib/error/operation-denied-error.d.ts +4 -0
- package/dist/lib/error/operation-denied-error.js +24 -0
- package/dist/lib/error/operation-denied-error.js.map +1 -0
- package/dist/lib/metrics.js +20 -12
- package/dist/lib/metrics.js.map +1 -1
- package/dist/lib/metrics.test.js +1 -0
- package/dist/lib/metrics.test.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.js +2 -17
- package/dist/lib/middleware/rbac-middleware.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.test.js +0 -21
- package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
- package/dist/lib/middleware/secure-headers.js +2 -1
- package/dist/lib/middleware/secure-headers.js.map +1 -1
- package/dist/lib/middleware/session-db.js +2 -3
- package/dist/lib/middleware/session-db.js.map +1 -1
- package/dist/lib/routes/admin-api/event.d.ts +8 -4
- package/dist/lib/routes/admin-api/event.js +8 -10
- package/dist/lib/routes/admin-api/event.js.map +1 -1
- package/dist/lib/routes/admin-api/feature.js +7 -3
- package/dist/lib/routes/admin-api/feature.js.map +1 -1
- package/dist/lib/routes/admin-api/index.js +2 -0
- package/dist/lib/routes/admin-api/index.js.map +1 -1
- package/dist/lib/routes/admin-api/project/features.js +11 -8
- package/dist/lib/routes/admin-api/project/features.js.map +1 -1
- package/dist/lib/routes/admin-api/project/index.js +2 -0
- package/dist/lib/routes/admin-api/project/index.js.map +1 -1
- package/dist/lib/routes/admin-api/project/variants.d.ts +21 -0
- package/dist/lib/routes/admin-api/project/variants.js +41 -0
- package/dist/lib/routes/admin-api/project/variants.js.map +1 -0
- package/dist/lib/routes/admin-api/state.js +2 -3
- package/dist/lib/routes/admin-api/state.js.map +1 -1
- package/dist/lib/routes/admin-api/user-splash-controller.d.ts +10 -0
- package/dist/lib/routes/admin-api/user-splash-controller.js +28 -0
- package/dist/lib/routes/admin-api/user-splash-controller.js.map +1 -0
- package/dist/lib/routes/admin-api/user.d.ts +2 -1
- package/dist/lib/routes/admin-api/user.js +7 -2
- package/dist/lib/routes/admin-api/user.js.map +1 -1
- package/dist/lib/routes/client-api/feature.test.js +3 -2
- package/dist/lib/routes/client-api/feature.test.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.d.ts +0 -1
- package/dist/lib/routes/client-api/metrics.js +2 -10
- package/dist/lib/routes/client-api/metrics.js.map +1 -1
- package/dist/lib/routes/util.js +18 -14
- package/dist/lib/routes/util.js.map +1 -1
- package/dist/lib/schema/feature-schema.d.ts +1 -0
- package/dist/lib/schema/feature-schema.js +6 -7
- package/dist/lib/schema/feature-schema.js.map +1 -1
- package/dist/lib/services/addon-service-test-simple-addon.d.ts +1 -1
- package/dist/lib/services/addon-service-test-simple-addon.js.map +1 -1
- package/dist/lib/services/addon-service.js +2 -2
- package/dist/lib/services/addon-service.js.map +1 -1
- package/dist/lib/services/api-token-service.js +2 -2
- package/dist/lib/services/api-token-service.js.map +1 -1
- package/dist/lib/services/client-metrics/client-metrics-service-v2.js +5 -6
- package/dist/lib/services/client-metrics/client-metrics-service-v2.js.map +1 -1
- package/dist/lib/services/client-metrics/client-metrics.test.js +74 -41
- package/dist/lib/services/client-metrics/client-metrics.test.js.map +1 -1
- package/dist/lib/services/client-metrics/index.d.ts +6 -5
- package/dist/lib/services/client-metrics/index.js +13 -10
- package/dist/lib/services/client-metrics/index.js.map +1 -1
- package/dist/lib/services/client-metrics/list.d.ts +19 -16
- package/dist/lib/services/client-metrics/list.js +6 -4
- package/dist/lib/services/client-metrics/list.js.map +1 -1
- package/dist/lib/services/client-metrics/list.test.js +9 -5
- package/dist/lib/services/client-metrics/list.test.js.map +1 -1
- package/dist/lib/services/client-metrics/ttl-list.d.ts +20 -13
- package/dist/lib/services/client-metrics/ttl-list.js +26 -15
- package/dist/lib/services/client-metrics/ttl-list.js.map +1 -1
- package/dist/lib/services/client-metrics/ttl-list.test.js +33 -9
- package/dist/lib/services/client-metrics/ttl-list.test.js.map +1 -1
- package/dist/lib/services/environment-service.d.ts +2 -1
- package/dist/lib/services/environment-service.js +10 -3
- package/dist/lib/services/environment-service.js.map +1 -1
- package/dist/lib/services/event-service.d.ts +1 -1
- package/dist/lib/services/event-service.js +1 -1
- package/dist/lib/services/event-service.js.map +1 -1
- package/dist/lib/services/feature-tag-service.js +7 -11
- package/dist/lib/services/feature-tag-service.js.map +1 -1
- package/dist/lib/services/{feature-toggle-service-v2.d.ts → feature-toggle-service.d.ts} +39 -20
- package/dist/lib/services/{feature-toggle-service-v2.js → feature-toggle-service.js} +233 -146
- package/dist/lib/services/feature-toggle-service.js.map +1 -0
- package/dist/lib/services/index.js +6 -2
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-health-service.d.ts +2 -2
- package/dist/lib/services/project-health-service.js +4 -3
- package/dist/lib/services/project-health-service.js.map +1 -1
- package/dist/lib/services/project-service.d.ts +2 -3
- package/dist/lib/services/project-service.js +12 -18
- package/dist/lib/services/project-service.js.map +1 -1
- package/dist/lib/services/reset-token-service.js +2 -2
- package/dist/lib/services/reset-token-service.js.map +1 -1
- package/dist/lib/services/state-util.js +1 -1
- package/dist/lib/services/state-util.js.map +1 -1
- package/dist/lib/services/user-service.d.ts +3 -2
- package/dist/lib/services/user-service.js +37 -21
- package/dist/lib/services/user-service.js.map +1 -1
- package/dist/lib/services/user-splash-service.d.ts +12 -0
- package/dist/lib/services/user-splash-service.js +33 -0
- package/dist/lib/services/user-splash-service.js.map +1 -0
- package/dist/lib/services/version-service.js +2 -2
- package/dist/lib/services/version-service.js.map +1 -1
- package/dist/lib/types/events.d.ts +165 -2
- package/dist/lib/types/events.js +124 -4
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/model.d.ts +4 -12
- package/dist/lib/types/model.js +6 -1
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/services.d.ts +5 -2
- package/dist/lib/types/stores/event-store.d.ts +4 -3
- package/dist/lib/types/stores/feature-toggle-store.d.ts +3 -1
- package/dist/lib/types/stores/user-splash-store.d.ts +15 -0
- package/dist/lib/types/stores/user-splash-store.js +3 -0
- package/dist/lib/types/stores/user-splash-store.js.map +1 -0
- package/dist/lib/types/stores.d.ts +2 -0
- package/dist/lib/util/constants.d.ts +0 -2
- package/dist/lib/util/constants.js +1 -3
- package/dist/lib/util/constants.js.map +1 -1
- package/dist/migrations/20211105104316-add-feature-name-column-to-events.d.ts +2 -0
- package/dist/migrations/20211105104316-add-feature-name-column-to-events.js +16 -0
- package/dist/migrations/20211105104316-add-feature-name-column-to-events.js.map +1 -0
- package/dist/migrations/20211105105509-add-predata-column-to-events.d.ts +2 -0
- package/dist/migrations/20211105105509-add-predata-column-to-events.js +8 -0
- package/dist/migrations/20211105105509-add-predata-column-to-events.js.map +1 -0
- package/dist/migrations/20211108130333-create-user-splash-table.d.ts +2 -0
- package/dist/migrations/20211108130333-create-user-splash-table.js +18 -0
- package/dist/migrations/20211108130333-create-user-splash-table.js.map +1 -0
- package/dist/migrations/20211109103930-add-splash-entry-for-users.d.ts +2 -0
- package/dist/migrations/20211109103930-add-splash-entry-for-users.js +7 -0
- package/dist/migrations/20211109103930-add-splash-entry-for-users.js.map +1 -0
- package/dist/migrations/20211126112551-disable-default-environment.d.ts +2 -0
- package/dist/migrations/20211126112551-disable-default-environment.js +24 -0
- package/dist/migrations/20211126112551-disable-default-environment.js.map +1 -0
- package/dist/migrator.js +9 -2
- package/dist/migrator.js.map +1 -1
- package/dist/test/e2e/api/admin/client-metrics.e2e.test.js +18 -14
- package/dist/test/e2e/api/admin/client-metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature-archive.e2e.test.js +1 -2
- package/dist/test/e2e/api/admin/feature-archive.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature.e2e.test.js +43 -20
- package/dist/test/e2e/api/admin/feature.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/metrics.e2e.test.js +5 -3
- package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js +10 -0
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/features.e2e.test.js +145 -8
- package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/project.health.e2e.test.js +60 -0
- package/dist/test/e2e/api/admin/project/project.health.e2e.test.js.map +1 -1
- package/dist/{lib/event-differ.test.d.ts → test/e2e/api/admin/project/variants.e2e.test.d.ts} +0 -0
- package/dist/test/e2e/api/admin/project/variants.e2e.test.js +727 -0
- package/dist/test/e2e/api/admin/project/variants.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/splash.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/admin/splash.e2e.test.js +51 -0
- package/dist/test/e2e/api/admin/splash.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/state.e2e.test.js +17 -13
- package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js +2 -16
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js +8 -4
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +4 -4
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/register.e2e.test.js +1 -1
- package/dist/test/e2e/api/client/register.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/addon-service.e2e.test.js +1 -1
- package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/api-token-service.e2e.test.js +5 -3
- package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js +5 -2
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/environment-service.test.js +1 -1
- package/dist/test/e2e/services/environment-service.test.js.map +1 -1
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +14 -11
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/project-health-service.e2e.test.js +2 -2
- package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/project-service.e2e.test.js +2 -32
- package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/session-service.e2e.test.js +5 -4
- package/dist/test/e2e/services/session-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/user-service.e2e.test.js +3 -2
- package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/client-metrics-store-v2.e2e.test.js +4 -6
- package/dist/test/e2e/stores/client-metrics-store-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/event-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/user-splash-store.e2e.test.d.ts +1 -0
- package/dist/test/e2e/stores/user-splash-store.e2e.test.js +74 -0
- package/dist/test/e2e/stores/user-splash-store.e2e.test.js.map +1 -0
- package/dist/test/fixtures/fake-event-store.d.ts +2 -1
- package/dist/test/fixtures/fake-event-store.js +3 -0
- package/dist/test/fixtures/fake-event-store.js.map +1 -1
- package/dist/test/fixtures/fake-feature-toggle-store.d.ts +3 -1
- package/dist/test/fixtures/fake-feature-toggle-store.js +9 -0
- package/dist/test/fixtures/fake-feature-toggle-store.js.map +1 -1
- package/dist/test/fixtures/fake-user-splash-store.d.ts +12 -0
- package/dist/test/fixtures/fake-user-splash-store.js +40 -0
- package/dist/test/fixtures/fake-user-splash-store.js.map +1 -0
- package/dist/test/fixtures/store.js +2 -0
- package/dist/test/fixtures/store.js.map +1 -1
- package/docs/api/oas/openapi.yaml +35 -55
- package/package.json +17 -18
- package/dist/lib/event-differ.d.ts +0 -1
- package/dist/lib/event-differ.js +0 -117
- package/dist/lib/event-differ.js.map +0 -1
- package/dist/lib/event-differ.test.js +0 -142
- package/dist/lib/event-differ.test.js.map +0 -1
- package/dist/lib/services/feature-toggle-service-v2.js.map +0 -1
|
@@ -10,34 +10,65 @@ const db_error_1 = require("../error/db-error");
|
|
|
10
10
|
const feature_schema_1 = require("../schema/feature-schema");
|
|
11
11
|
const events_1 = require("../types/events");
|
|
12
12
|
const notfound_error_1 = __importDefault(require("../error/notfound-error"));
|
|
13
|
+
const model_1 = require("../types/model");
|
|
13
14
|
const constants_1 = require("../util/constants");
|
|
14
15
|
const fast_json_patch_1 = require("fast-json-patch");
|
|
15
|
-
|
|
16
|
+
const operation_denied_error_1 = require("../error/operation-denied-error");
|
|
17
|
+
class FeatureToggleService {
|
|
16
18
|
constructor({ featureStrategiesStore, featureToggleStore, featureToggleClientStore, projectStore, eventStore, featureTagStore, featureEnvironmentStore, }, { getLogger }) {
|
|
17
19
|
this.logger = getLogger('services/feature-toggle-service-v2.ts');
|
|
18
20
|
this.featureStrategiesStore = featureStrategiesStore;
|
|
19
21
|
this.featureToggleStore = featureToggleStore;
|
|
20
22
|
this.featureToggleClientStore = featureToggleClientStore;
|
|
21
|
-
this.
|
|
23
|
+
this.tagStore = featureTagStore;
|
|
22
24
|
this.projectStore = projectStore;
|
|
23
25
|
this.eventStore = eventStore;
|
|
24
26
|
this.featureEnvironmentStore = featureEnvironmentStore;
|
|
25
27
|
}
|
|
26
|
-
async
|
|
28
|
+
async validateFeatureContext({ featureName, projectId, }) {
|
|
29
|
+
const id = await this.featureToggleStore.getProjectId(featureName);
|
|
30
|
+
if (id !== projectId) {
|
|
31
|
+
throw new invalid_operation_error_1.default('You can not change the projectId for an activation strategy.');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
validateFeatureStrategyContext(strategy, { featureName, projectId }) {
|
|
35
|
+
if (strategy.projectId !== projectId) {
|
|
36
|
+
throw new invalid_operation_error_1.default('You can not change the projectId for an activation strategy.');
|
|
37
|
+
}
|
|
38
|
+
if (strategy.featureName !== featureName) {
|
|
39
|
+
throw new invalid_operation_error_1.default('You can not change the featureName for an activation strategy.');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async patchFeature(project, featureName, createdBy, operations) {
|
|
27
43
|
const featureToggle = await this.getFeatureMetadata(featureName);
|
|
44
|
+
if (operations.some((op) => op.path.indexOf('/variants') >= 0)) {
|
|
45
|
+
throw new operation_denied_error_1.OperationDeniedError(`Changing variants is done via PATCH operation to /api/admin/projects/:project/features/:feature/variants`);
|
|
46
|
+
}
|
|
28
47
|
const { newDocument } = (0, fast_json_patch_1.applyPatch)((0, fast_json_patch_1.deepClone)(featureToggle), operations);
|
|
29
|
-
const updated = await this.updateFeatureToggle(
|
|
48
|
+
const updated = await this.updateFeatureToggle(project, newDocument, createdBy);
|
|
30
49
|
if (featureToggle.stale !== newDocument.stale) {
|
|
31
|
-
await this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
project
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
51
|
+
await this.eventStore.store(new events_1.FeatureStaleEvent({
|
|
52
|
+
stale: newDocument.stale,
|
|
53
|
+
project,
|
|
54
|
+
featureName,
|
|
55
|
+
createdBy,
|
|
56
|
+
tags,
|
|
57
|
+
}));
|
|
37
58
|
}
|
|
38
59
|
return updated;
|
|
39
60
|
}
|
|
40
|
-
|
|
61
|
+
featureStrategyToPublic(featureStrategy) {
|
|
62
|
+
return {
|
|
63
|
+
id: featureStrategy.id,
|
|
64
|
+
name: featureStrategy.strategyName,
|
|
65
|
+
constraints: featureStrategy.constraints || [],
|
|
66
|
+
parameters: featureStrategy.parameters,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async createStrategy(strategyConfig, context, createdBy) {
|
|
70
|
+
const { featureName, projectId, environment } = context;
|
|
71
|
+
await this.validateFeatureContext(context);
|
|
41
72
|
try {
|
|
42
73
|
const newFeatureStrategy = await this.featureStrategiesStore.createStrategyFeatureEnv({
|
|
43
74
|
strategyName: strategyConfig.name,
|
|
@@ -48,24 +79,17 @@ class FeatureToggleServiceV2 {
|
|
|
48
79
|
featureName,
|
|
49
80
|
environment,
|
|
50
81
|
});
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
constraints: newFeatureStrategy.constraints,
|
|
55
|
-
parameters: newFeatureStrategy.parameters,
|
|
56
|
-
};
|
|
57
|
-
await this.eventStore.store({
|
|
58
|
-
type: events_1.FEATURE_STRATEGY_ADD,
|
|
82
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
83
|
+
const strategy = this.featureStrategyToPublic(newFeatureStrategy);
|
|
84
|
+
await this.eventStore.store(new events_1.FeatureStrategyAddEvent({
|
|
59
85
|
project: projectId,
|
|
60
|
-
|
|
86
|
+
featureName,
|
|
87
|
+
createdBy,
|
|
61
88
|
environment,
|
|
62
|
-
data:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
return data;
|
|
89
|
+
data: strategy,
|
|
90
|
+
tags,
|
|
91
|
+
}));
|
|
92
|
+
return strategy;
|
|
69
93
|
}
|
|
70
94
|
catch (e) {
|
|
71
95
|
if (e.code === db_error_1.FOREIGN_KEY_VIOLATION) {
|
|
@@ -81,49 +105,51 @@ class FeatureToggleServiceV2 {
|
|
|
81
105
|
* }
|
|
82
106
|
* @param id
|
|
83
107
|
* @param updates
|
|
108
|
+
* @param context - Which context does this strategy live in (projectId, featureName, environment)
|
|
109
|
+
* @param userName - Human readable id of the user performing the update
|
|
84
110
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
111
|
+
async updateStrategy(id, updates, context, userName) {
|
|
112
|
+
const { projectId, environment, featureName } = context;
|
|
87
113
|
const existingStrategy = await this.featureStrategiesStore.get(id);
|
|
114
|
+
this.validateFeatureStrategyContext(existingStrategy, context);
|
|
88
115
|
if (existingStrategy.id === id) {
|
|
89
116
|
const strategy = await this.featureStrategiesStore.updateStrategy(id, updates);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
await this.eventStore.store({
|
|
98
|
-
type: events_1.FEATURE_STRATEGY_UPDATE,
|
|
99
|
-
project,
|
|
117
|
+
// Store event!
|
|
118
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
119
|
+
const data = this.featureStrategyToPublic(strategy);
|
|
120
|
+
const preData = this.featureStrategyToPublic(existingStrategy);
|
|
121
|
+
await this.eventStore.store(new events_1.FeatureStrategyUpdateEvent({
|
|
122
|
+
project: projectId,
|
|
123
|
+
featureName,
|
|
100
124
|
environment,
|
|
101
125
|
createdBy: userName,
|
|
102
126
|
data,
|
|
103
|
-
|
|
127
|
+
preData,
|
|
128
|
+
tags,
|
|
129
|
+
}));
|
|
104
130
|
return data;
|
|
105
131
|
}
|
|
106
132
|
throw new notfound_error_1.default(`Could not find strategy with id ${id}`);
|
|
107
133
|
}
|
|
108
|
-
|
|
109
|
-
|
|
134
|
+
async updateStrategyParameter(id, name, value, context, userName) {
|
|
135
|
+
const { projectId, environment, featureName } = context;
|
|
110
136
|
const existingStrategy = await this.featureStrategiesStore.get(id);
|
|
137
|
+
this.validateFeatureStrategyContext(existingStrategy, context);
|
|
111
138
|
if (existingStrategy.id === id) {
|
|
112
139
|
existingStrategy.parameters[name] = value;
|
|
113
140
|
const strategy = await this.featureStrategiesStore.updateStrategy(id, existingStrategy);
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
await this.eventStore.store({
|
|
121
|
-
type: events_1.FEATURE_STRATEGY_UPDATE,
|
|
122
|
-
project,
|
|
141
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
142
|
+
const data = this.featureStrategyToPublic(strategy);
|
|
143
|
+
const preData = this.featureStrategyToPublic(existingStrategy);
|
|
144
|
+
await this.eventStore.store(new events_1.FeatureStrategyUpdateEvent({
|
|
145
|
+
featureName,
|
|
146
|
+
project: projectId,
|
|
123
147
|
environment,
|
|
124
148
|
createdBy: userName,
|
|
125
149
|
data,
|
|
126
|
-
|
|
150
|
+
preData,
|
|
151
|
+
tags,
|
|
152
|
+
}));
|
|
127
153
|
return data;
|
|
128
154
|
}
|
|
129
155
|
throw new notfound_error_1.default(`Could not find strategy with id ${id}`);
|
|
@@ -134,23 +160,24 @@ class FeatureToggleServiceV2 {
|
|
|
134
160
|
*
|
|
135
161
|
* }
|
|
136
162
|
* @param id - strategy id
|
|
137
|
-
* @param
|
|
138
|
-
* @param userName - Who's doing the change
|
|
139
|
-
* @param project - Which project does this feature toggle belong to
|
|
163
|
+
* @param context - Which context does this strategy live in (projectId, featureName, environment)
|
|
140
164
|
* @param environment - Which environment does this strategy belong to
|
|
141
165
|
*/
|
|
142
|
-
async deleteStrategy(id,
|
|
166
|
+
async deleteStrategy(id, context, createdBy) {
|
|
167
|
+
const existingStrategy = await this.featureStrategiesStore.get(id);
|
|
168
|
+
const { featureName, projectId, environment } = context;
|
|
169
|
+
this.validateFeatureStrategyContext(existingStrategy, context);
|
|
143
170
|
await this.featureStrategiesStore.delete(id);
|
|
144
|
-
await this.
|
|
145
|
-
|
|
146
|
-
|
|
171
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
172
|
+
const preData = this.featureStrategyToPublic(existingStrategy);
|
|
173
|
+
await this.eventStore.store(new events_1.FeatureStrategyRemoveEvent({
|
|
174
|
+
featureName,
|
|
175
|
+
project: projectId,
|
|
147
176
|
environment,
|
|
148
|
-
createdBy
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
},
|
|
153
|
-
});
|
|
177
|
+
createdBy,
|
|
178
|
+
preData,
|
|
179
|
+
tags,
|
|
180
|
+
}));
|
|
154
181
|
// If there are no strategies left for environment disable it
|
|
155
182
|
await this.featureEnvironmentStore.disableEnvironmentIfNoStrategies(featureName, environment);
|
|
156
183
|
}
|
|
@@ -176,6 +203,14 @@ class FeatureToggleServiceV2 {
|
|
|
176
203
|
async getFeature(featureName, archived = false) {
|
|
177
204
|
return this.featureStrategiesStore.getFeatureToggleWithEnvs(featureName, archived);
|
|
178
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* GET /api/admin/projects/:project/features/:featureName/variants
|
|
208
|
+
* @param featureName
|
|
209
|
+
* @return The list of variants
|
|
210
|
+
*/
|
|
211
|
+
async getVariants(featureName) {
|
|
212
|
+
return this.featureToggleStore.getVariants(featureName);
|
|
213
|
+
}
|
|
179
214
|
async getFeatureMetadata(featureName) {
|
|
180
215
|
return this.featureToggleStore.get(featureName);
|
|
181
216
|
}
|
|
@@ -202,21 +237,29 @@ class FeatureToggleServiceV2 {
|
|
|
202
237
|
async getFeatureToggle(featureName) {
|
|
203
238
|
return this.featureStrategiesStore.getFeatureToggleWithEnvs(featureName, false);
|
|
204
239
|
}
|
|
205
|
-
async createFeatureToggle(projectId, value,
|
|
206
|
-
this.logger.info(`${
|
|
240
|
+
async createFeatureToggle(projectId, value, createdBy, isValidated = false) {
|
|
241
|
+
this.logger.info(`${createdBy} creates feature toggle ${value.name}`);
|
|
207
242
|
await this.validateName(value.name);
|
|
208
243
|
const exists = await this.projectStore.hasProject(projectId);
|
|
209
244
|
if (exists) {
|
|
210
|
-
|
|
245
|
+
let featureData;
|
|
246
|
+
if (isValidated) {
|
|
247
|
+
featureData = value;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
featureData = await feature_schema_1.featureMetadataSchema.validateAsync(value);
|
|
251
|
+
}
|
|
252
|
+
const featureName = featureData.name;
|
|
211
253
|
const createdToggle = await this.featureToggleStore.create(projectId, featureData);
|
|
212
|
-
await this.featureEnvironmentStore.connectFeatureToEnvironmentsForProject(
|
|
213
|
-
const
|
|
214
|
-
await this.eventStore.store({
|
|
215
|
-
|
|
216
|
-
createdBy
|
|
254
|
+
await this.featureEnvironmentStore.connectFeatureToEnvironmentsForProject(featureName, projectId);
|
|
255
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
256
|
+
await this.eventStore.store(new events_1.FeatureCreatedEvent({
|
|
257
|
+
featureName,
|
|
258
|
+
createdBy,
|
|
217
259
|
project: projectId,
|
|
218
|
-
data,
|
|
219
|
-
|
|
260
|
+
data: createdToggle,
|
|
261
|
+
tags,
|
|
262
|
+
}));
|
|
220
263
|
return createdToggle;
|
|
221
264
|
}
|
|
222
265
|
throw new notfound_error_1.default(`Project with id ${projectId} does not exist`);
|
|
@@ -235,7 +278,11 @@ class FeatureToggleServiceV2 {
|
|
|
235
278
|
s.parameters.groupId = newFeatureName;
|
|
236
279
|
}
|
|
237
280
|
delete s.id;
|
|
238
|
-
createStrategies.push(this.createStrategy(s,
|
|
281
|
+
createStrategies.push(this.createStrategy(s, {
|
|
282
|
+
projectId,
|
|
283
|
+
featureName: newFeatureName,
|
|
284
|
+
environment: e.name,
|
|
285
|
+
}, userName));
|
|
239
286
|
}));
|
|
240
287
|
// Create strategies
|
|
241
288
|
await Promise.allSettled(createStrategies);
|
|
@@ -245,15 +292,17 @@ class FeatureToggleServiceV2 {
|
|
|
245
292
|
const featureName = updatedFeature.name;
|
|
246
293
|
this.logger.info(`${userName} updates feature toggle ${featureName}`);
|
|
247
294
|
const featureData = await feature_schema_1.featureMetadataSchema.validateAsync(updatedFeature);
|
|
295
|
+
const preData = await this.featureToggleStore.get(featureName);
|
|
248
296
|
const featureToggle = await this.featureToggleStore.update(projectId, featureData);
|
|
249
|
-
const tags = await this.
|
|
250
|
-
await this.eventStore.store({
|
|
251
|
-
type: events_1.FEATURE_METADATA_UPDATED,
|
|
297
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
298
|
+
await this.eventStore.store(new events_1.FeatureMetadataUpdateEvent({
|
|
252
299
|
createdBy: userName,
|
|
253
300
|
data: featureToggle,
|
|
301
|
+
preData,
|
|
302
|
+
featureName,
|
|
254
303
|
project: projectId,
|
|
255
304
|
tags,
|
|
256
|
-
});
|
|
305
|
+
}));
|
|
257
306
|
return featureToggle;
|
|
258
307
|
}
|
|
259
308
|
async getFeatureCountForProject(projectId) {
|
|
@@ -284,6 +333,7 @@ class FeatureToggleServiceV2 {
|
|
|
284
333
|
strategies,
|
|
285
334
|
};
|
|
286
335
|
}
|
|
336
|
+
// todo: store events for this change.
|
|
287
337
|
async deleteEnvironment(projectId, environment) {
|
|
288
338
|
await this.featureStrategiesStore.deleteConfigurationsForProjectAndEnvironment(projectId, environment);
|
|
289
339
|
await this.projectStore.deleteEnvironmentForProject(projectId, environment);
|
|
@@ -310,38 +360,38 @@ class FeatureToggleServiceV2 {
|
|
|
310
360
|
async hasFeature(name) {
|
|
311
361
|
return this.featureToggleStore.exists(name);
|
|
312
362
|
}
|
|
313
|
-
async updateStale(featureName, isStale,
|
|
363
|
+
async updateStale(featureName, isStale, createdBy) {
|
|
314
364
|
const feature = await this.featureToggleStore.get(featureName);
|
|
365
|
+
const { project } = feature;
|
|
315
366
|
feature.stale = isStale;
|
|
316
|
-
await this.featureToggleStore.update(
|
|
317
|
-
const tags = await this.
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
367
|
+
await this.featureToggleStore.update(project, feature);
|
|
368
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
369
|
+
await this.eventStore.store(new events_1.FeatureStaleEvent({
|
|
370
|
+
stale: isStale,
|
|
371
|
+
project,
|
|
372
|
+
featureName,
|
|
373
|
+
createdBy,
|
|
323
374
|
tags,
|
|
324
|
-
|
|
325
|
-
});
|
|
375
|
+
}));
|
|
326
376
|
return feature;
|
|
327
377
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
await this.featureToggleStore.
|
|
331
|
-
|
|
332
|
-
await this.
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
378
|
+
// todo: add projectId
|
|
379
|
+
async archiveToggle(featureName, createdBy) {
|
|
380
|
+
const feature = await this.featureToggleStore.get(featureName);
|
|
381
|
+
await this.featureToggleStore.archive(featureName);
|
|
382
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
383
|
+
await this.eventStore.store(new events_1.FeatureArchivedEvent({
|
|
384
|
+
featureName,
|
|
385
|
+
createdBy,
|
|
336
386
|
project: feature.project,
|
|
337
387
|
tags,
|
|
338
|
-
});
|
|
388
|
+
}));
|
|
339
389
|
}
|
|
340
|
-
async updateEnabled(
|
|
390
|
+
async updateEnabled(project, featureName, environment, enabled, createdBy) {
|
|
341
391
|
const hasEnvironment = await this.featureEnvironmentStore.featureHasEnvironment(environment, featureName);
|
|
342
392
|
if (hasEnvironment) {
|
|
343
393
|
if (enabled) {
|
|
344
|
-
const strategies = await this.getStrategiesForEnvironment(
|
|
394
|
+
const strategies = await this.getStrategiesForEnvironment(project, featureName, environment);
|
|
345
395
|
if (strategies.length === 0) {
|
|
346
396
|
throw new invalid_operation_error_1.default('You can not enable the environment before it has strategies');
|
|
347
397
|
}
|
|
@@ -349,28 +399,30 @@ class FeatureToggleServiceV2 {
|
|
|
349
399
|
const updatedEnvironmentStatus = await this.featureEnvironmentStore.setEnvironmentEnabledStatus(environment, featureName, enabled);
|
|
350
400
|
const feature = await this.featureToggleStore.get(featureName);
|
|
351
401
|
if (updatedEnvironmentStatus > 0) {
|
|
352
|
-
const tags = await this.
|
|
353
|
-
await this.eventStore.store({
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
createdBy: userName,
|
|
358
|
-
data: { name: featureName },
|
|
359
|
-
tags,
|
|
360
|
-
project: projectId,
|
|
402
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
403
|
+
await this.eventStore.store(new events_1.FeatureEnvironmentEvent({
|
|
404
|
+
enabled,
|
|
405
|
+
project,
|
|
406
|
+
featureName,
|
|
361
407
|
environment,
|
|
362
|
-
|
|
408
|
+
createdBy,
|
|
409
|
+
tags,
|
|
410
|
+
}));
|
|
363
411
|
}
|
|
364
412
|
return feature;
|
|
365
413
|
}
|
|
366
414
|
throw new notfound_error_1.default(`Could not find environment ${environment} for feature: ${featureName}`);
|
|
367
415
|
}
|
|
368
|
-
|
|
369
|
-
|
|
416
|
+
// @deprecated
|
|
417
|
+
async storeFeatureUpdatedEventLegacy(featureName, createdBy) {
|
|
418
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
370
419
|
const feature = await this.getFeatureToggleLegacy(featureName);
|
|
420
|
+
// Legacy event. Will not be used from v4.3.
|
|
421
|
+
// We do not include 'preData' on purpose.
|
|
371
422
|
await this.eventStore.store({
|
|
372
423
|
type: events_1.FEATURE_UPDATED,
|
|
373
|
-
createdBy
|
|
424
|
+
createdBy,
|
|
425
|
+
featureName,
|
|
374
426
|
data: feature,
|
|
375
427
|
tags,
|
|
376
428
|
project: feature.project,
|
|
@@ -383,6 +435,7 @@ class FeatureToggleServiceV2 {
|
|
|
383
435
|
const isEnabled = await this.featureEnvironmentStore.isEnvironmentEnabled(featureName, environment);
|
|
384
436
|
return this.updateEnabled(projectId, featureName, environment, !isEnabled, userName);
|
|
385
437
|
}
|
|
438
|
+
// @deprecated
|
|
386
439
|
async getFeatureToggleLegacy(featureName) {
|
|
387
440
|
const feature = await this.featureStrategiesStore.getFeatureToggleWithEnvs(featureName);
|
|
388
441
|
const { environments, ...legacyFeature } = feature;
|
|
@@ -391,47 +444,46 @@ class FeatureToggleServiceV2 {
|
|
|
391
444
|
const enabled = defaultEnv?.enabled || false;
|
|
392
445
|
return { ...legacyFeature, enabled, strategies };
|
|
393
446
|
}
|
|
394
|
-
async changeProject(featureName, newProject,
|
|
447
|
+
async changeProject(featureName, newProject, createdBy) {
|
|
395
448
|
const feature = await this.featureToggleStore.get(featureName);
|
|
396
449
|
const oldProject = feature.project;
|
|
397
450
|
feature.project = newProject;
|
|
398
451
|
await this.featureToggleStore.update(newProject, feature);
|
|
399
|
-
const tags = await this.
|
|
400
|
-
await this.eventStore.store({
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
oldProject,
|
|
406
|
-
newProject,
|
|
407
|
-
},
|
|
408
|
-
project: newProject,
|
|
452
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
453
|
+
await this.eventStore.store(new events_1.FeatureChangeProjectEvent({
|
|
454
|
+
createdBy,
|
|
455
|
+
oldProject,
|
|
456
|
+
newProject,
|
|
457
|
+
featureName,
|
|
409
458
|
tags,
|
|
410
|
-
});
|
|
459
|
+
}));
|
|
411
460
|
}
|
|
412
461
|
async getArchivedFeatures() {
|
|
413
462
|
return this.getFeatureToggles({}, true);
|
|
414
463
|
}
|
|
415
|
-
|
|
464
|
+
// TODO: add project id.
|
|
465
|
+
async deleteFeature(featureName, createdBy) {
|
|
466
|
+
const toggle = await this.featureToggleStore.get(featureName);
|
|
467
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
416
468
|
await this.featureToggleStore.delete(featureName);
|
|
417
|
-
await this.eventStore.store({
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
});
|
|
469
|
+
await this.eventStore.store(new events_1.FeatureDeletedEvent({
|
|
470
|
+
featureName,
|
|
471
|
+
project: toggle.project,
|
|
472
|
+
createdBy,
|
|
473
|
+
preData: toggle,
|
|
474
|
+
tags,
|
|
475
|
+
}));
|
|
424
476
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
const
|
|
428
|
-
await this.
|
|
429
|
-
|
|
430
|
-
createdBy
|
|
431
|
-
|
|
432
|
-
project:
|
|
477
|
+
// TODO: add project id.
|
|
478
|
+
async reviveToggle(featureName, createdBy) {
|
|
479
|
+
const toggle = await this.featureToggleStore.revive(featureName);
|
|
480
|
+
const tags = await this.tagStore.getAllTagsForFeature(featureName);
|
|
481
|
+
await this.eventStore.store(new events_1.FeatureRevivedEvent({
|
|
482
|
+
createdBy,
|
|
483
|
+
featureName,
|
|
484
|
+
project: toggle.project,
|
|
433
485
|
tags,
|
|
434
|
-
});
|
|
486
|
+
}));
|
|
435
487
|
}
|
|
436
488
|
async getMetadataForAllFeatures(archived) {
|
|
437
489
|
return this.featureToggleStore.getAll({ archived });
|
|
@@ -442,7 +494,42 @@ class FeatureToggleServiceV2 {
|
|
|
442
494
|
async updateFeatureStrategyProject(featureName, newProjectId) {
|
|
443
495
|
await this.featureStrategiesStore.setProjectForStrategiesBelongingToFeature(featureName, newProjectId);
|
|
444
496
|
}
|
|
497
|
+
async updateVariants(featureName, newVariants) {
|
|
498
|
+
const oldVariants = await this.getVariants(featureName);
|
|
499
|
+
const { newDocument } = await (0, fast_json_patch_1.applyPatch)(oldVariants, newVariants);
|
|
500
|
+
return this.saveVariants(featureName, newDocument);
|
|
501
|
+
}
|
|
502
|
+
async saveVariants(featureName, newVariants) {
|
|
503
|
+
await feature_schema_1.variantsArraySchema.validateAsync(newVariants);
|
|
504
|
+
const fixedVariants = this.fixVariantWeights(newVariants);
|
|
505
|
+
return this.featureToggleStore.saveVariants(featureName, fixedVariants);
|
|
506
|
+
}
|
|
507
|
+
fixVariantWeights(variants) {
|
|
508
|
+
let variableVariants = variants.filter((x) => {
|
|
509
|
+
return x.weightType === model_1.WeightType.VARIABLE;
|
|
510
|
+
});
|
|
511
|
+
if (variants.length > 0 && variableVariants.length === 0) {
|
|
512
|
+
throw new bad_data_error_1.default('There must be at least one "variable" variant');
|
|
513
|
+
}
|
|
514
|
+
let fixedVariants = variants.filter((x) => {
|
|
515
|
+
return x.weightType === model_1.WeightType.FIX;
|
|
516
|
+
});
|
|
517
|
+
let fixedWeights = fixedVariants.reduce((a, v) => a + v.weight, 0);
|
|
518
|
+
if (fixedWeights > 1000) {
|
|
519
|
+
throw new bad_data_error_1.default('The traffic distribution total must equal 100%');
|
|
520
|
+
}
|
|
521
|
+
let averageWeight = Math.floor((1000 - fixedWeights) / variableVariants.length);
|
|
522
|
+
let remainder = (1000 - fixedWeights) % variableVariants.length;
|
|
523
|
+
variableVariants = variableVariants.map((x) => {
|
|
524
|
+
x.weight = averageWeight;
|
|
525
|
+
if (remainder > 0) {
|
|
526
|
+
x.weight += 1;
|
|
527
|
+
remainder--;
|
|
528
|
+
}
|
|
529
|
+
return x;
|
|
530
|
+
});
|
|
531
|
+
return variableVariants.concat(fixedVariants);
|
|
532
|
+
}
|
|
445
533
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
//# sourceMappingURL=feature-toggle-service-v2.js.map
|
|
534
|
+
exports.default = FeatureToggleService;
|
|
535
|
+
//# sourceMappingURL=feature-toggle-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-toggle-service.js","sourceRoot":"","sources":["../../../src/lib/services/feature-toggle-service.ts"],"names":[],"mappings":";;;;;AAGA,6EAAmD;AACnD,mFAAyD;AACzD,+FAAqE;AACrE,gDAA0D;AAC1D,6DAIkC;AAClC,4CAayB;AACzB,6EAAoD;AASpD,0CAawB;AAGxB,iDAAgD;AAChD,qDAAmE;AACnE,4EAAuE;AAWvE,MAAM,oBAAoB;IAiBtB,YACI,EACI,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,uBAAuB,GAU1B,EACD,EAAE,SAAS,EAAqC;QAEhD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,uCAAuC,CAAC,CAAC;QACjE,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACrD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,EACzB,WAAW,EACX,SAAS,GACK;QACd,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,MAAM,IAAI,iCAAqB,CAC3B,8DAA8D,CACjE,CAAC;SACL;IACL,CAAC;IAED,8BAA8B,CAC1B,QAA0B,EAC1B,EAAE,WAAW,EAAE,SAAS,EAA2B;QAEnD,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE;YAClC,MAAM,IAAI,iCAAqB,CAC3B,8DAA8D,CACjE,CAAC;SACL;QAED,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW,EAAE;YACtC,MAAM,IAAI,iCAAqB,CAC3B,gEAAgE,CACnE,CAAC;SACL;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CACd,OAAe,EACf,WAAmB,EACnB,SAAiB,EACjB,UAAuB;QAEvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAEjE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE;YAC5D,MAAM,IAAI,6CAAoB,CAC1B,0GAA0G,CAC7G,CAAC;SACL;QACD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,4BAAU,EAC9B,IAAA,2BAAS,EAAC,aAAa,CAAC,EACxB,UAAU,CACb,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC1C,OAAO,EACP,WAAW,EACX,SAAS,CACZ,CAAC;QAEF,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,EAAE;YAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAEnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,0BAAiB,CAAC;gBAClB,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,OAAO;gBACP,WAAW;gBACX,SAAS;gBACT,IAAI;aACP,CAAC,CACL,CAAC;SACL;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,uBAAuB,CACnB,eAAiC;QAEjC,OAAO;YACH,EAAE,EAAE,eAAe,CAAC,EAAE;YACtB,IAAI,EAAE,eAAe,CAAC,YAAY;YAClC,WAAW,EAAE,eAAe,CAAC,WAAW,IAAI,EAAE;YAC9C,UAAU,EAAE,eAAe,CAAC,UAAU;SACzC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,cAAc,CAChB,cAA2C,EAC3C,OAAgC,EAChC,SAAiB;QAEjB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACxD,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI;YACA,MAAM,kBAAkB,GACpB,MAAM,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC;gBACvD,YAAY,EAAE,cAAc,CAAC,IAAI;gBACjC,WAAW,EAAE,cAAc,CAAC,WAAW;gBACvC,UAAU,EAAE,cAAc,CAAC,UAAU;gBACrC,SAAS,EAAE,cAAc,CAAC,SAAS;gBACnC,SAAS;gBACT,WAAW;gBACX,WAAW;aACd,CAAC,CAAC;YAEP,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,gCAAuB,CAAC;gBACxB,OAAO,EAAE,SAAS;gBAClB,WAAW;gBACX,SAAS;gBACT,WAAW;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI;aACP,CAAC,CACL,CAAC;YACF,OAAO,QAAQ,CAAC;SACnB;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,CAAC,IAAI,KAAK,gCAAqB,EAAE;gBAClC,MAAM,IAAI,wBAAY,CAClB,2DAA2D,CAC9D,CAAC;aACL;YACD,MAAM,CAAC,CAAC;SACX;IACL,CAAC;IACD;;;;;;;;;OASG;IAEH,KAAK,CAAC,cAAc,CAChB,EAAU,EACV,OAAkC,EAClC,OAAgC,EAChC,QAAgB;QAEhB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACxD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE/D,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAC7D,EAAE,EACF,OAAO,CACV,CAAC;YAEF,eAAe;YACf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,mCAA0B,CAAC;gBAC3B,OAAO,EAAE,SAAS;gBAClB,WAAW;gBACX,WAAW;gBACX,SAAS,EAAE,QAAQ;gBACnB,IAAI;gBACJ,OAAO;gBACP,IAAI;aACP,CAAC,CACL,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QACD,MAAM,IAAI,wBAAa,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,uBAAuB,CACzB,EAAU,EACV,IAAY,EACZ,KAAsB,EACtB,OAAgC,EAChC,QAAgB;QAEhB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAExD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE/D,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;YAC5B,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAC7D,EAAE,EACF,gBAAgB,CACnB,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,mCAA0B,CAAC;gBAC3B,WAAW;gBACX,OAAO,EAAE,SAAS;gBAClB,WAAW;gBACX,SAAS,EAAE,QAAQ;gBACnB,IAAI;gBACJ,OAAO;gBACP,IAAI;aACP,CAAC,CACL,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QACD,MAAM,IAAI,wBAAa,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CAChB,EAAU,EACV,OAAgC,EAChC,SAAiB;QAEjB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACxD,IAAI,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE/D,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAE/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,mCAA0B,CAAC;YAC3B,WAAW;YACX,OAAO,EAAE,SAAS;YAClB,WAAW;YACX,SAAS;YACT,OAAO;YACP,IAAI;SACP,CAAC,CACL,CAAC;QAEF,6DAA6D;QAC7D,MAAM,IAAI,CAAC,uBAAuB,CAAC,gCAAgC,CAC/D,WAAW,EACX,WAAW,CACd,CAAC;IACN,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC7B,OAAe,EACf,WAAmB,EACnB,cAAsB,uBAAW;QAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,CACnE,WAAW,EACX,WAAW,CACd,CAAC;QACF,IAAI,MAAM,EAAE;YACR,MAAM,iBAAiB,GACnB,MAAM,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CACxD,OAAO,EACP,WAAW,EACX,WAAW,CACd,CAAC;YACN,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,YAAY;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC7B,CAAC,CAAC,CAAC;SACP;QACD,MAAM,IAAI,wBAAa,CACnB,WAAW,WAAW,8BAA8B,WAAW,EAAE,CACpE,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CACZ,WAAmB,EACnB,WAAoB,KAAK;QAEzB,OAAO,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CACvD,WAAW,EACX,QAAQ,CACX,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,iBAAiB,CACnB,KAA2B;QAE3B,OAAO,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,iBAAiB,CACnB,KAA2B,EAC3B,WAAoB,KAAK;QAEzB,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,kBAAkB,CACpB,SAAiB,EACjB,WAAoB,KAAK;QAEzB,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CACjD,SAAS,EACT,QAAQ,CACX,CAAC;IACN,CAAC;IAED,KAAK,CAAC,gBAAgB,CAClB,WAAmB;QAEnB,OAAO,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CACvD,WAAW,EACX,KAAK,CACR,CAAC;IACN,CAAC;IAED,KAAK,CAAC,mBAAmB,CACrB,SAAiB,EACjB,KAAuB,EACvB,SAAiB,EACjB,cAAuB,KAAK;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,2BAA2B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE;YACR,IAAI,WAAW,CAAC;YAChB,IAAI,WAAW,EAAE;gBACb,WAAW,GAAG,KAAK,CAAC;aACvB;iBAAM;gBACH,WAAW,GAAG,MAAM,sCAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAClE;YACD,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;YACrC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACtD,SAAS,EACT,WAAW,CACd,CAAC;YACF,MAAM,IAAI,CAAC,uBAAuB,CAAC,sCAAsC,CACrE,WAAW,EACX,SAAS,CACZ,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAEnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,4BAAmB,CAAC;gBACpB,WAAW;gBACX,SAAS;gBACT,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,aAAa;gBACnB,IAAI;aACP,CAAC,CACL,CAAC;YAEF,OAAO,aAAa,CAAC;SACxB;QACD,MAAM,IAAI,wBAAa,CAAC,mBAAmB,SAAS,iBAAiB,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,kBAAkB,CACpB,WAAmB,EACnB,SAAiB,EACjB,cAAsB,EACtB,iBAA0B,IAAI,EAC9B,QAAgB;QAEhB,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,GAAG,QAAQ,0BAA0B,WAAW,OAAO,cAAc,EAAE,CAC1E,CAAC;QACF,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAExC,MAAM,OAAO,GACT,MAAM,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CACtD,WAAW,CACd,CAAC;QAEN,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QAEvD,wBAAwB;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC1C,SAAS,EACT,SAAS,EACT,QAAQ,CACX,CAAC;QAEF,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAqB,EAAE,EAAE,CACrD,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAkB,EAAE,EAAE;YACxC,IAAI,cAAc,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBAC1D,YAAY;gBACZ,CAAC,CAAC,UAAU,CAAC,OAAO,GAAG,cAAc,CAAC;aACzC;YACD,OAAO,CAAC,CAAC,EAAE,CAAC;YACZ,gBAAgB,CAAC,IAAI,CACjB,IAAI,CAAC,cAAc,CACf,CAAC,EACD;gBACI,SAAS;gBACT,WAAW,EAAE,cAAc;gBAC3B,WAAW,EAAE,CAAC,CAAC,IAAI;aACtB,EACD,QAAQ,CACX,CACJ,CAAC;QACN,CAAC,CAAC,CACL,CAAC;QAEF,oBAAoB;QACpB,MAAM,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,mBAAmB,CACrB,SAAiB,EACjB,cAAgC,EAChC,QAAgB;QAEhB,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,2BAA2B,WAAW,EAAE,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,MAAM,sCAAqB,CAAC,aAAa,CACzD,cAAc,CACjB,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE/D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACtD,SAAS,EACT,WAAW,CACd,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,mCAA0B,CAAC;YAC3B,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,aAAa;YACnB,OAAO;YACP,WAAW;YACX,OAAO,EAAE,SAAS;YAClB,IAAI;SACP,CAAC,CACL,CAAC;QACF,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,SAAiB;QAC7C,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACjC,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,SAAS;SACrB,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC3B,UAAkB,EAClB,cAAsB,uBAAW;QAEjC,MAAM,IAAI,CAAC,sBAAsB,CAAC,gCAAgC,CAC9D,UAAU,EACV,WAAW,CACd,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAC9D,UAAU,CACb,CAAC;QACF,OAAO;YACH,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,YAAY;YAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;YACvC,UAAU,EAAE,QAAQ,CAAC,UAAU;SAClC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,kBAAkB,CACpB,OAAe,EACf,WAAmB,EACnB,WAAmB;QAEnB,MAAM,WAAW,GACb,MAAM,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CACrD,WAAW,EACX,WAAW,CACd,CAAC;QACN,MAAM,UAAU,GACZ,MAAM,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CACxD,OAAO,EACP,WAAW,EACX,WAAW,CACd,CAAC;QACN,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,WAAW;YACX,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,UAAU;SACb,CAAC;IACN,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,iBAAiB,CACnB,SAAiB,EACjB,WAAmB;QAEnB,MAAM,IAAI,CAAC,sBAAsB,CAAC,4CAA4C,CAC1E,SAAS,EACT,WAAW,CACd,CAAC;QACF,MAAM,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAC/C,SAAS,EACT,WAAW,CACd,CAAC;IACN,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,MAAM,2BAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,IAAY;QACxC,IAAI,GAAW,CAAC;QAChB,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,GAAG,GAAG,OAAO,CAAC,QAAQ;gBAClB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,wCAAwC,CAAC;SAClD;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO;SACV;QACD,MAAM,IAAI,2BAAe,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,WAAW,CACb,WAAmB,EACnB,OAAgB,EAChB,SAAiB;QAEjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC5B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;QACxB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,0BAAiB,CAAC;YAClB,KAAK,EAAE,OAAO;YACd,OAAO;YACP,WAAW;YACX,SAAS;YACT,IAAI;SACP,CAAC,CACL,CAAC;QAEF,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,SAAiB;QACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,6BAAoB,CAAC;YACrB,WAAW;YACX,SAAS;YACT,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI;SACP,CAAC,CACL,CAAC;IACN,CAAC;IAED,KAAK,CAAC,aAAa,CACf,OAAe,EACf,WAAmB,EACnB,WAAmB,EACnB,OAAgB,EAChB,SAAiB;QAEjB,MAAM,cAAc,GAChB,MAAM,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,CACpD,WAAW,EACX,WAAW,CACd,CAAC;QAEN,IAAI,cAAc,EAAE;YAChB,IAAI,OAAO,EAAE;gBACT,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,2BAA2B,CACrD,OAAO,EACP,WAAW,EACX,WAAW,CACd,CAAC;gBACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,MAAM,IAAI,iCAAqB,CAC3B,6DAA6D,CAChE,CAAC;iBACL;aACJ;YACD,MAAM,wBAAwB,GAC1B,MAAM,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,CAC1D,WAAW,EACX,WAAW,EACX,OAAO,CACV,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAE/D,IAAI,wBAAwB,GAAG,CAAC,EAAE;gBAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CACjD,WAAW,CACd,CAAC;gBACF,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,gCAAuB,CAAC;oBACxB,OAAO;oBACP,OAAO;oBACP,WAAW;oBACX,WAAW;oBACX,SAAS;oBACT,IAAI;iBACP,CAAC,CACL,CAAC;aACL;YACD,OAAO,OAAO,CAAC;SAClB;QACD,MAAM,IAAI,wBAAa,CACnB,8BAA8B,WAAW,iBAAiB,WAAW,EAAE,CAC1E,CAAC;IACN,CAAC;IAED,cAAc;IACd,KAAK,CAAC,8BAA8B,CAChC,WAAmB,EACnB,SAAiB;QAEjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAE/D,4CAA4C;QAC5C,0CAA0C;QAC1C,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACxB,IAAI,EAAE,wBAAe;YACrB,SAAS;YACT,WAAW;YACX,IAAI,EAAE,OAAO;YACb,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,cAAc;IACd,KAAK,CAAC,MAAM,CACR,SAAiB,EACjB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,SAAS,GACX,MAAM,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CACnD,WAAW,EACX,WAAW,CACd,CAAC;QACN,OAAO,IAAI,CAAC,aAAa,CACrB,SAAS,EACT,WAAW,EACX,WAAW,EACX,CAAC,SAAS,EACV,QAAQ,CACX,CAAC;IACN,CAAC;IAED,cAAc;IACd,KAAK,CAAC,sBAAsB,CACxB,WAAmB;QAEnB,MAAM,OAAO,GACT,MAAM,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CACtD,WAAW,CACd,CAAC;QACN,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;QACnD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAW,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,UAAU,EAAE,UAAU,IAAI,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,IAAI,KAAK,CAAC;QAE7C,OAAO,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,aAAa,CACf,WAAmB,EACnB,UAAkB,EAClB,SAAiB;QAEjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC;QAC7B,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,kCAAyB,CAAC;YAC1B,SAAS;YACT,UAAU;YACV,UAAU;YACV,WAAW;YACX,IAAI;SACP,CAAC,CACL,CAAC;IACN,CAAC;IAED,KAAK,CAAC,mBAAmB;QACrB,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,SAAiB;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,4BAAmB,CAAC;YACpB,WAAW;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS;YACT,OAAO,EAAE,MAAM;YACf,IAAI;SACP,CAAC,CACL,CAAC;IACN,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,SAAiB;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACvB,IAAI,4BAAmB,CAAC;YACpB,SAAS;YACT,WAAW;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI;SACP,CAAC,CACL,CAAC;IACN,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC3B,QAAiB;QAEjB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,4BAA4B,CAC9B,WAAmB,EACnB,YAAoB;QAEpB,MAAM,IAAI,CAAC,sBAAsB,CAAC,yCAAyC,CACvE,WAAW,EACX,YAAY,CACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,cAAc,CAChB,WAAmB,EACnB,WAAwB;QAExB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,4BAAU,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,YAAY,CACd,WAAmB,EACnB,WAAuB;QAEvB,MAAM,oCAAmB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5E,CAAC;IAED,iBAAiB,CAAC,QAAoB;QAClC,IAAI,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,OAAO,CAAC,CAAC,UAAU,KAAK,kBAAU,CAAC,QAAQ,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtD,MAAM,IAAI,wBAAY,CAClB,+CAA+C,CAClD,CAAC;SACL;QAED,IAAI,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,OAAO,CAAC,CAAC,UAAU,KAAK,kBAAU,CAAC,GAAG,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEnE,IAAI,YAAY,GAAG,IAAI,EAAE;YACrB,MAAM,IAAI,wBAAY,CAClB,gDAAgD,CACnD,CAAC;SACL;QAED,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAC1B,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAClD,CAAC;QACF,IAAI,SAAS,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAEhE,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;YACzB,IAAI,SAAS,GAAG,CAAC,EAAE;gBACf,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACd,SAAS,EAAE,CAAC;aACf;YACD,OAAO,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;CACJ;AAED,kBAAe,oBAAoB,CAAC"}
|
|
@@ -25,10 +25,11 @@ const reset_token_service_1 = __importDefault(require("./reset-token-service"));
|
|
|
25
25
|
const setting_service_1 = __importDefault(require("./setting-service"));
|
|
26
26
|
const session_service_1 = __importDefault(require("./session-service"));
|
|
27
27
|
const user_feedback_service_1 = __importDefault(require("./user-feedback-service"));
|
|
28
|
-
const
|
|
28
|
+
const feature_toggle_service_1 = __importDefault(require("./feature-toggle-service"));
|
|
29
29
|
const environment_service_1 = __importDefault(require("./environment-service"));
|
|
30
30
|
const feature_tag_service_1 = __importDefault(require("./feature-tag-service"));
|
|
31
31
|
const project_health_service_1 = __importDefault(require("./project-health-service"));
|
|
32
|
+
const user_splash_service_1 = __importDefault(require("./user-splash-service"));
|
|
32
33
|
const createServices = (stores, config) => {
|
|
33
34
|
const accessService = new access_service_1.AccessService(stores, config);
|
|
34
35
|
const apiTokenService = new api_token_service_1.ApiTokenService(stores, config);
|
|
@@ -56,14 +57,16 @@ const createServices = (stores, config) => {
|
|
|
56
57
|
const versionService = new version_service_1.default(stores, config);
|
|
57
58
|
const healthService = new health_service_1.default(stores, config);
|
|
58
59
|
const userFeedbackService = new user_feedback_service_1.default(stores, config);
|
|
59
|
-
const featureToggleServiceV2 = new
|
|
60
|
+
const featureToggleServiceV2 = new feature_toggle_service_1.default(stores, config);
|
|
60
61
|
const environmentService = new environment_service_1.default(stores, config);
|
|
61
62
|
const featureTagService = new feature_tag_service_1.default(stores, config);
|
|
62
63
|
const projectHealthService = new project_health_service_1.default(stores, config, featureToggleServiceV2);
|
|
63
64
|
const projectService = new project_service_1.default(stores, config, accessService, featureToggleServiceV2);
|
|
65
|
+
const userSplashService = new user_splash_service_1.default(stores, config);
|
|
64
66
|
return {
|
|
65
67
|
accessService,
|
|
66
68
|
addonService,
|
|
69
|
+
featureToggleService: featureToggleServiceV2,
|
|
67
70
|
featureToggleServiceV2,
|
|
68
71
|
featureTypeService,
|
|
69
72
|
healthService,
|
|
@@ -87,6 +90,7 @@ const createServices = (stores, config) => {
|
|
|
87
90
|
userFeedbackService,
|
|
88
91
|
featureTagService,
|
|
89
92
|
projectHealthService,
|
|
93
|
+
userSplashService,
|
|
90
94
|
};
|
|
91
95
|
};
|
|
92
96
|
exports.createServices = createServices;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":";;;;;;AAGA,kFAAwD;AACxD,oEAA2C;AAC3C,sEAA6C;AAE7C,wEAA+C;AAC/C,oEAA2C;AAC3C,sEAAoD;AACpD,2GAAgF;AAChF,0EAAgD;AAChD,gEAAuC;AACvC,0EAAiD;AACjD,oEAA2C;AAC3C,wEAA+C;AAC/C,wEAA+C;AAC/C,mDAA+C;AAC/C,qDAAiD;AACjD,2DAAsD;AACtD,kEAAyC;AACzC,gFAAsD;AACtD,wEAA+C;AAC/C,wEAA+C;AAC/C,oFAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"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"}
|