unleash-server 5.4.3 → 5.5.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 +5 -3
- package/dist/lib/addons/addon-schema.js +2 -1
- package/dist/lib/addons/addon-schema.js.map +1 -1
- package/dist/lib/addons/datadog-definition.js +22 -7
- package/dist/lib/addons/datadog-definition.js.map +1 -1
- package/dist/lib/addons/datadog.d.ts +7 -1
- package/dist/lib/addons/datadog.js +16 -3
- package/dist/lib/addons/datadog.js.map +1 -1
- package/dist/lib/addons/datadog.test.js +62 -0
- package/dist/lib/addons/datadog.test.js.map +1 -1
- package/dist/lib/addons/index.js +3 -11
- package/dist/lib/addons/index.js.map +1 -1
- package/dist/lib/addons/slack-app-definition.js +5 -24
- package/dist/lib/addons/slack-app-definition.js.map +1 -1
- package/dist/lib/addons/slack-app.d.ts +0 -1
- package/dist/lib/addons/slack-app.js +5 -17
- package/dist/lib/addons/slack-app.js.map +1 -1
- package/dist/lib/addons/slack-app.test.js +39 -25
- package/dist/lib/addons/slack-app.test.js.map +1 -1
- package/dist/lib/addons/slack-definition.js +11 -4
- package/dist/lib/addons/slack-definition.js.map +1 -1
- package/dist/lib/addons/teams-definition.js +5 -4
- package/dist/lib/addons/teams-definition.js.map +1 -1
- package/dist/lib/addons/webhook-definition.js +10 -12
- package/dist/lib/addons/webhook-definition.js.map +1 -1
- package/dist/lib/create-config.js +13 -1
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/create-config.test.js +14 -0
- package/dist/lib/create-config.test.js.map +1 -1
- package/dist/lib/db/access-store.d.ts +23 -5
- package/dist/lib/db/access-store.js +263 -17
- package/dist/lib/db/access-store.js.map +1 -1
- package/dist/lib/db/access-store.test.js +83 -0
- package/dist/lib/db/access-store.test.js.map +1 -0
- package/dist/lib/db/client-applications-store.d.ts +1 -3
- package/dist/lib/db/client-applications-store.js +13 -24
- package/dist/lib/db/client-applications-store.js.map +1 -1
- package/dist/lib/db/event-store.js +1 -0
- package/dist/lib/db/event-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-client-store.js +17 -4
- package/dist/lib/db/feature-toggle-client-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-store.js +1 -1
- package/dist/lib/db/feature-toggle-store.js.map +1 -1
- package/dist/lib/db/group-store.d.ts +4 -2
- package/dist/lib/db/group-store.js +24 -0
- package/dist/lib/db/group-store.js.map +1 -1
- package/dist/lib/db/index.d.ts +1 -2
- package/dist/lib/db/index.js +5 -1
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/project-stats-store.d.ts +2 -0
- package/dist/lib/db/project-stats-store.js +27 -0
- package/dist/lib/db/project-stats-store.js.map +1 -1
- package/dist/lib/db/project-store.d.ts +7 -1
- package/dist/lib/db/project-store.js +34 -1
- package/dist/lib/db/project-store.js.map +1 -1
- package/dist/lib/error/bad-data-error.d.ts +1 -1
- package/dist/lib/error/index.d.ts +2 -1
- package/dist/lib/error/index.js +3 -1
- package/dist/lib/error/index.js.map +1 -1
- package/dist/lib/error/pattern-error.d.ts +10 -0
- package/dist/lib/error/pattern-error.js +20 -0
- package/dist/lib/error/pattern-error.js.map +1 -0
- package/dist/lib/features/dependent-features/createDependentFeaturesService.d.ts +3 -0
- package/dist/lib/features/dependent-features/createDependentFeaturesService.js +11 -0
- package/dist/lib/features/dependent-features/createDependentFeaturesService.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-controller.d.ts +28 -0
- package/dist/lib/features/dependent-features/dependent-features-controller.js +151 -0
- package/dist/lib/features/dependent-features/dependent-features-controller.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-service.d.ts +11 -0
- package/dist/lib/features/dependent-features/dependent-features-service.js +40 -0
- package/dist/lib/features/dependent-features/dependent-features-service.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-store-type.d.ts +8 -0
- package/dist/lib/features/dependent-features/dependent-features-store-type.js +3 -0
- package/dist/lib/features/dependent-features/dependent-features-store-type.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-store.d.ts +12 -0
- package/dist/lib/features/dependent-features/dependent-features-store.js +56 -0
- package/dist/lib/features/dependent-features/dependent-features-store.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features.d.ts +14 -0
- package/dist/lib/features/dependent-features/dependent-features.js +3 -0
- package/dist/lib/features/dependent-features/dependent-features.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent.features.e2e.test.d.ts +1 -0
- package/dist/lib/features/dependent-features/dependent.features.e2e.test.js +82 -0
- package/dist/lib/features/dependent-features/dependent.features.e2e.test.js.map +1 -0
- package/dist/lib/features/dependent-features/fake-dependent-features-store.d.ts +8 -0
- package/dist/lib/features/dependent-features/fake-dependent-features-store.js +22 -0
- package/dist/lib/features/dependent-features/fake-dependent-features-store.js.map +1 -0
- package/dist/lib/features/export-import-toggles/createExportImportService.js +6 -3
- package/dist/lib/features/export-import-toggles/createExportImportService.js.map +1 -1
- package/dist/lib/features/export-import-toggles/export-import-service.d.ts +9 -3
- package/dist/lib/features/export-import-toggles/export-import-service.js +51 -21
- package/dist/lib/features/export-import-toggles/export-import-service.js.map +1 -1
- package/dist/lib/features/export-import-toggles/export-import.e2e.test.js +120 -50
- package/dist/lib/features/export-import-toggles/export-import.e2e.test.js.map +1 -1
- package/dist/lib/features/export-import-toggles/import-permissions-service.d.ts +1 -2
- package/dist/lib/features/export-import-toggles/import-toggles-store-type.d.ts +6 -0
- package/dist/lib/features/export-import-toggles/import-toggles-store.d.ts +2 -1
- package/dist/lib/features/export-import-toggles/import-toggles-store.js +25 -0
- package/dist/lib/features/export-import-toggles/import-toggles-store.js.map +1 -1
- package/dist/lib/features/export-import-toggles/import-validation-messages.d.ts +18 -2
- package/dist/lib/features/export-import-toggles/import-validation-messages.js +27 -11
- package/dist/lib/features/export-import-toggles/import-validation-messages.js.map +1 -1
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.d.ts +14 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.js +46 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.js.map +1 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.d.ts +1 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.js +116 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.js.map +1 -0
- package/dist/lib/features/feature-toggle/createFeatureToggleService.js +11 -2
- package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
- package/dist/lib/features/instance-stats/getActiveUsers.d.ts +9 -0
- package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.d.ts +1 -0
- package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.js +141 -0
- package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.js.map +1 -0
- package/dist/lib/features/instance-stats/getActiveUsers.js +33 -0
- package/dist/lib/features/instance-stats/getActiveUsers.js.map +1 -0
- package/dist/lib/{services → features/instance-stats}/instance-stats-service.d.ts +13 -7
- package/dist/lib/{services → features/instance-stats}/instance-stats-service.js +16 -7
- package/dist/lib/features/instance-stats/instance-stats-service.js.map +1 -0
- package/dist/lib/features/instance-stats/instance-stats-service.test.d.ts +1 -0
- package/dist/lib/{services → features/instance-stats}/instance-stats-service.test.js +6 -5
- package/dist/lib/features/instance-stats/instance-stats-service.test.js.map +1 -0
- package/dist/lib/features/playground/advanced-playground.test.js +2 -3
- package/dist/lib/features/playground/advanced-playground.test.js.map +1 -1
- package/dist/lib/features/playground/feature-evaluator/variant.d.ts +1 -1
- package/dist/lib/features/playground/generateObjectCombinations.d.ts +1 -1
- package/dist/lib/features/playground/generateObjectCombinations.js +14 -4
- package/dist/lib/features/playground/generateObjectCombinations.js.map +1 -1
- package/dist/lib/features/playground/generateObjectCombinations.test.js +21 -0
- package/dist/lib/features/playground/generateObjectCombinations.test.js.map +1 -1
- package/dist/lib/features/playground/playground-service.d.ts +5 -3
- package/dist/lib/features/playground/playground-service.js +18 -3
- package/dist/lib/features/playground/playground-service.js.map +1 -1
- package/dist/lib/features/playground/playground.d.ts +2 -1
- package/dist/lib/features/playground/playground.js +2 -1
- package/dist/lib/features/playground/playground.js.map +1 -1
- package/dist/lib/features/private-project/createPrivateProjectChecker.d.ts +5 -0
- package/dist/lib/features/private-project/createPrivateProjectChecker.js +22 -0
- package/dist/lib/features/private-project/createPrivateProjectChecker.js.map +1 -0
- package/dist/lib/features/private-project/fakePrivateProjectChecker.d.ts +7 -0
- package/dist/lib/features/private-project/fakePrivateProjectChecker.js +15 -0
- package/dist/lib/features/private-project/fakePrivateProjectChecker.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectChecker.d.ts +10 -0
- package/dist/lib/features/private-project/privateProjectChecker.js +22 -0
- package/dist/lib/features/private-project/privateProjectChecker.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectCheckerType.d.ts +5 -0
- package/dist/lib/features/private-project/privateProjectCheckerType.js +3 -0
- package/dist/lib/features/private-project/privateProjectCheckerType.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectStore.d.ts +18 -0
- package/dist/lib/features/private-project/privateProjectStore.js +70 -0
- package/dist/lib/features/private-project/privateProjectStore.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectStoreType.d.ts +4 -0
- package/dist/lib/features/private-project/privateProjectStoreType.js +3 -0
- package/dist/lib/features/private-project/privateProjectStoreType.js.map +1 -0
- package/dist/lib/features/project/createProjectService.js +5 -8
- package/dist/lib/features/project/createProjectService.js.map +1 -1
- package/dist/lib/features/segment/createSegmentService.js +5 -2
- package/dist/lib/features/segment/createSegmentService.js.map +1 -1
- package/dist/lib/features/segment/segment-controller.d.ts +39 -0
- package/dist/lib/features/segment/segment-controller.js +291 -0
- package/dist/lib/features/segment/segment-controller.js.map +1 -0
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/metrics.js +30 -1
- package/dist/lib/metrics.js.map +1 -1
- package/dist/lib/metrics.test.js +3 -2
- package/dist/lib/metrics.test.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.d.ts +2 -0
- package/dist/lib/middleware/rbac-middleware.js +2 -0
- package/dist/lib/middleware/rbac-middleware.js.map +1 -1
- package/dist/lib/middleware/secure-headers.js +18 -0
- package/dist/lib/middleware/secure-headers.js.map +1 -1
- package/dist/lib/openapi/index.js +13 -0
- package/dist/lib/openapi/index.js.map +1 -1
- package/dist/lib/openapi/meta-schema-rules.test.js +14 -4
- package/dist/lib/openapi/meta-schema-rules.test.js.map +1 -1
- package/dist/lib/openapi/spec/addon-type-schema.d.ts +6 -1
- package/dist/lib/openapi/spec/addon-type-schema.js +6 -1
- package/dist/lib/openapi/spec/addon-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/addons-schema.d.ts +8 -3
- package/dist/lib/openapi/spec/addons-schema.js +8 -3
- package/dist/lib/openapi/spec/addons-schema.js.map +1 -1
- package/dist/lib/openapi/spec/admin-segment-schema.d.ts +115 -0
- package/dist/lib/openapi/spec/admin-segment-schema.js +75 -0
- package/dist/lib/openapi/spec/admin-segment-schema.js.map +1 -0
- package/dist/lib/openapi/spec/admin-segment-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/admin-segment-schema.test.js +39 -0
- package/dist/lib/openapi/spec/admin-segment-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.d.ts +46 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.js +54 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.js.map +1 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.test.js +40 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +51 -6
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js +3 -1
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +101 -11
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.js +2 -0
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/advanced-playground-request-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +203 -22
- package/dist/lib/openapi/spec/advanced-playground-response-schema.js +2 -0
- package/dist/lib/openapi/spec/advanced-playground-response-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-feature-schema.d.ts +41 -6
- package/dist/lib/openapi/spec/client-feature-schema.js +9 -0
- package/dist/lib/openapi/spec/client-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-features-schema.d.ts +75 -12
- package/dist/lib/openapi/spec/client-features-schema.js +2 -0
- package/dist/lib/openapi/spec/client-features-schema.js.map +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.js +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-api-token-schema.d.ts +1 -139
- package/dist/lib/openapi/spec/create-api-token-schema.js +16 -20
- package/dist/lib/openapi/spec/create-api-token-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-dependent-feature-schema.d.ts +29 -0
- package/dist/lib/openapi/spec/create-dependent-feature-schema.js +31 -0
- package/dist/lib/openapi/spec/create-dependent-feature-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.d.ts +29 -0
- package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.js +33 -0
- package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/create-strategy-schema.d.ts +15 -0
- package/dist/lib/openapi/spec/create-strategy-schema.js +15 -0
- package/dist/lib/openapi/spec/create-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-strategy-variant-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/create-strategy-variant-schema.js +2 -2
- package/dist/lib/openapi/spec/create-strategy-variant-schema.js.map +1 -1
- package/dist/lib/openapi/spec/dependent-feature-schema.d.ts +30 -0
- package/dist/lib/openapi/spec/dependent-feature-schema.js +14 -0
- package/dist/lib/openapi/spec/dependent-feature-schema.js.map +1 -0
- package/dist/lib/openapi/spec/dora-features-schema.d.ts +20 -0
- package/dist/lib/openapi/spec/dora-features-schema.js +22 -0
- package/dist/lib/openapi/spec/dora-features-schema.js.map +1 -0
- package/dist/lib/openapi/spec/environment-project-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/event-schema.d.ts +3 -3
- package/dist/lib/openapi/spec/events-schema.d.ts +3 -3
- package/dist/lib/openapi/spec/export-query-schema.d.ts +22 -15
- package/dist/lib/openapi/spec/export-query-schema.js +16 -15
- package/dist/lib/openapi/spec/export-query-schema.js.map +1 -1
- package/dist/lib/openapi/spec/export-result-schema.d.ts +26 -26
- package/dist/lib/openapi/spec/feature-environment-schema.d.ts +6 -6
- package/dist/lib/openapi/spec/feature-events-schema.d.ts +3 -3
- package/dist/lib/openapi/spec/feature-schema.d.ts +12 -12
- package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/feature-variants-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/features-schema.d.ts +24 -24
- package/dist/lib/openapi/spec/health-overview-schema.d.ts +63 -33
- package/dist/lib/openapi/spec/health-overview-schema.js +6 -1
- package/dist/lib/openapi/spec/health-overview-schema.js.map +1 -1
- package/dist/lib/openapi/spec/health-report-schema.d.ts +63 -33
- package/dist/lib/openapi/spec/import-toggles-schema.d.ts +52 -52
- package/dist/lib/openapi/spec/index.d.ts +9 -0
- package/dist/lib/openapi/spec/index.js +9 -0
- package/dist/lib/openapi/spec/index.js.map +1 -1
- package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts +42 -0
- package/dist/lib/openapi/spec/instance-admin-stats-schema.js +42 -0
- package/dist/lib/openapi/spec/instance-admin-stats-schema.js.map +1 -1
- package/dist/lib/openapi/spec/parent-feature-options-schema.d.ts +11 -0
- package/dist/lib/openapi/spec/parent-feature-options-schema.js +13 -0
- package/dist/lib/openapi/spec/parent-feature-options-schema.js.map +1 -0
- package/dist/lib/openapi/spec/playground-feature-schema.d.ts +5 -5
- package/dist/lib/openapi/spec/playground-request-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/playground-response-schema.d.ts +12 -10
- package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/playground-strategy-schema.js +1 -1
- package/dist/lib/openapi/spec/playground-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/profile-schema.d.ts +12 -12
- package/dist/lib/openapi/spec/project-dora-metrics-schema.d.ts +44 -0
- package/dist/lib/openapi/spec/project-dora-metrics-schema.js +28 -0
- package/dist/lib/openapi/spec/project-dora-metrics-schema.js.map +1 -0
- package/dist/lib/openapi/spec/project-environment-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/project-overview-schema.d.ts +63 -33
- package/dist/lib/openapi/spec/project-overview-schema.js +6 -1
- package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
- package/dist/lib/openapi/spec/project-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/project-schema.js +1 -1
- package/dist/lib/openapi/spec/project-schema.js.map +1 -1
- package/dist/lib/openapi/spec/projects-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/push-variants-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/sdk-context-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/sdk-context-schema.js +1 -0
- package/dist/lib/openapi/spec/sdk-context-schema.js.map +1 -1
- package/dist/lib/openapi/spec/sdk-flat-context-schema.d.ts +46 -0
- package/dist/lib/openapi/spec/sdk-flat-context-schema.js +15 -0
- package/dist/lib/openapi/spec/sdk-flat-context-schema.js.map +1 -0
- package/dist/lib/openapi/spec/search-events-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/segments-schema.d.ts +177 -0
- package/dist/lib/openapi/spec/segments-schema.js +26 -0
- package/dist/lib/openapi/spec/segments-schema.js.map +1 -0
- package/dist/lib/openapi/spec/segments-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/segments-schema.test.js +16 -0
- package/dist/lib/openapi/spec/segments-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/state-schema.d.ts +23 -23
- package/dist/lib/openapi/spec/strategy-variant-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.d.ts +35 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.js +37 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.js.map +1 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.js +19 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +8 -15
- package/dist/lib/openapi/spec/upsert-segment-schema.js +8 -17
- package/dist/lib/openapi/spec/upsert-segment-schema.js.map +1 -1
- package/dist/lib/openapi/spec/upsert-segment-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/upsert-segment-schema.test.js +35 -0
- package/dist/lib/openapi/spec/upsert-segment-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/validate-feature-schema.d.ts +6 -0
- package/dist/lib/openapi/spec/validate-feature-schema.js +6 -0
- package/dist/lib/openapi/spec/validate-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variant-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/variant-schema.js +2 -2
- package/dist/lib/openapi/spec/variant-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variants-schema.d.ts +2 -2
- package/dist/lib/openapi/util/all-of.d.ts +3 -0
- package/dist/lib/openapi/util/all-of.js +34 -0
- package/dist/lib/openapi/util/all-of.js.map +1 -0
- package/dist/lib/openapi/util/openapi-tags.d.ts +46 -58
- package/dist/lib/openapi/util/openapi-tags.js +27 -34
- package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
- package/dist/lib/openapi/util/openapi-tags.test.d.ts +1 -0
- package/dist/lib/openapi/util/openapi-tags.test.js +15 -0
- package/dist/lib/openapi/util/openapi-tags.test.js.map +1 -0
- package/dist/lib/openapi/validate.js +0 -1
- package/dist/lib/openapi/validate.js.map +1 -1
- package/dist/lib/routes/admin-api/archive.d.ts +1 -1
- package/dist/lib/routes/admin-api/archive.js +3 -2
- package/dist/lib/routes/admin-api/archive.js.map +1 -1
- package/dist/lib/routes/admin-api/context.js +2 -1
- package/dist/lib/routes/admin-api/context.js.map +1 -1
- package/dist/lib/routes/admin-api/feature.js +2 -1
- 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/instance-admin.d.ts +2 -2
- package/dist/lib/routes/admin-api/instance-admin.js +7 -1
- package/dist/lib/routes/admin-api/instance-admin.js.map +1 -1
- package/dist/lib/routes/admin-api/metrics.d.ts +2 -1
- package/dist/lib/routes/admin-api/metrics.js +2 -1
- package/dist/lib/routes/admin-api/metrics.js.map +1 -1
- package/dist/lib/routes/admin-api/project/api-token.d.ts +2 -1
- package/dist/lib/routes/admin-api/project/api-token.js +12 -3
- package/dist/lib/routes/admin-api/project/api-token.js.map +1 -1
- package/dist/lib/routes/admin-api/project/environments.d.ts +2 -1
- package/dist/lib/routes/admin-api/project/environments.js +3 -1
- package/dist/lib/routes/admin-api/project/environments.js.map +1 -1
- package/dist/lib/routes/admin-api/project/index.d.ts +2 -1
- package/dist/lib/routes/admin-api/project/index.js +31 -0
- package/dist/lib/routes/admin-api/project/index.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.d.ts +1 -1
- package/dist/lib/routes/admin-api/strategy.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.js +14 -8
- package/dist/lib/routes/client-api/metrics.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.test.js +27 -0
- package/dist/lib/routes/client-api/metrics.test.js.map +1 -1
- package/dist/lib/routes/controller.d.ts +1 -1
- package/dist/lib/routes/controller.js +17 -10
- package/dist/lib/routes/controller.js.map +1 -1
- package/dist/lib/routes/proxy-api/index.js +5 -0
- package/dist/lib/routes/proxy-api/index.js.map +1 -1
- package/dist/lib/schema/role-schema.js +3 -1
- package/dist/lib/schema/role-schema.js.map +1 -1
- package/dist/lib/schema/role-schema.test.js +1 -1
- package/dist/lib/schema/role-schema.test.js.map +1 -1
- package/dist/lib/segments/segment-service-interface.d.ts +1 -1
- package/dist/lib/services/access-service.d.ts +29 -11
- package/dist/lib/services/access-service.js +53 -10
- package/dist/lib/services/access-service.js.map +1 -1
- package/dist/lib/services/access-service.test.js +2 -1
- package/dist/lib/services/access-service.test.js.map +1 -1
- package/dist/lib/services/addon-service.js +4 -2
- package/dist/lib/services/addon-service.js.map +1 -1
- package/dist/lib/services/addon-service.test.js +65 -0
- package/dist/lib/services/addon-service.test.js.map +1 -1
- package/dist/lib/services/client-metrics/instance-service.d.ts +5 -2
- package/dist/lib/services/client-metrics/instance-service.js +22 -3
- package/dist/lib/services/client-metrics/instance-service.js.map +1 -1
- package/dist/lib/services/client-metrics/instance-service.test.js +5 -4
- package/dist/lib/services/client-metrics/instance-service.test.js.map +1 -1
- package/dist/lib/services/context-service.d.ts +6 -2
- package/dist/lib/services/context-service.js +16 -2
- package/dist/lib/services/context-service.js.map +1 -1
- package/dist/lib/services/feature-service-potentially-stale.test.js +1 -1
- package/dist/lib/services/feature-service-potentially-stale.test.js.map +1 -1
- package/dist/lib/services/feature-toggle-service.d.ts +20 -7
- package/dist/lib/services/feature-toggle-service.js +109 -41
- package/dist/lib/services/feature-toggle-service.js.map +1 -1
- package/dist/lib/services/group-service.d.ts +4 -4
- package/dist/lib/services/group-service.js +17 -16
- package/dist/lib/services/group-service.js.map +1 -1
- package/dist/lib/services/index.d.ts +3 -2
- package/dist/lib/services/index.js +31 -17
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-schema.js +9 -1
- package/dist/lib/services/project-schema.js.map +1 -1
- package/dist/lib/services/project-service.d.ts +16 -12
- package/dist/lib/services/project-service.js +127 -17
- package/dist/lib/services/project-service.js.map +1 -1
- package/dist/lib/services/scheduler-service.d.ts +1 -1
- package/dist/lib/services/scheduler-service.js +3 -3
- package/dist/lib/services/scheduler-service.js.map +1 -1
- package/dist/lib/services/scheduler-service.test.js +15 -15
- package/dist/lib/services/scheduler-service.test.js.map +1 -1
- package/dist/lib/services/segment-service.d.ts +4 -2
- package/dist/lib/services/segment-service.js +17 -10
- package/dist/lib/services/segment-service.js.map +1 -1
- package/dist/lib/services/state-service.test.js +13 -3
- package/dist/lib/services/state-service.test.js.map +1 -1
- package/dist/lib/services/version-service.test.js +3 -0
- package/dist/lib/services/version-service.test.js.map +1 -1
- package/dist/lib/types/events.d.ts +61 -1
- package/dist/lib/types/events.js +66 -4
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/experimental.d.ts +1 -1
- package/dist/lib/types/experimental.js +9 -5
- package/dist/lib/types/experimental.js.map +1 -1
- package/dist/lib/types/group.d.ts +2 -2
- package/dist/lib/types/model.d.ts +31 -2
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/no-auth-user.d.ts +1 -0
- package/dist/lib/types/no-auth-user.js +3 -1
- package/dist/lib/types/no-auth-user.js.map +1 -1
- package/dist/lib/types/option.d.ts +7 -0
- package/dist/lib/types/services.d.ts +6 -1
- package/dist/lib/types/stores/access-store.d.ts +23 -4
- package/dist/lib/types/stores/feature-strategies-store.d.ts +2 -1
- package/dist/lib/types/stores/group-store.d.ts +4 -2
- package/dist/lib/types/stores/project-stats-store-type.d.ts +2 -0
- package/dist/lib/types/stores/project-store.d.ts +7 -14
- package/dist/lib/types/stores/strategy-store.d.ts +3 -17
- package/dist/lib/types/stores.d.ts +5 -1
- package/dist/lib/util/findDuplicates.d.ts +1 -0
- package/dist/lib/util/findDuplicates.js +18 -0
- package/dist/lib/util/findDuplicates.js.map +1 -0
- package/dist/lib/util/findDuplicates.test.d.ts +1 -0
- package/dist/lib/util/findDuplicates.test.js +23 -0
- package/dist/lib/util/findDuplicates.test.js.map +1 -0
- package/dist/migrations/20230830121352-update-client-applications-usage-table.d.ts +2 -0
- package/dist/migrations/20230830121352-update-client-applications-usage-table.js +16 -0
- package/dist/migrations/20230830121352-update-client-applications-usage-table.js.map +1 -0
- package/dist/migrations/20230905122605-add-feature-naming-description.d.ts +2 -0
- package/dist/migrations/20230905122605-add-feature-naming-description.js +13 -0
- package/dist/migrations/20230905122605-add-feature-naming-description.js.map +1 -0
- package/dist/migrations/20230919104006-dependent-features.d.ts +2 -0
- package/dist/migrations/20230919104006-dependent-features.js +21 -0
- package/dist/migrations/20230919104006-dependent-features.js.map +1 -0
- package/dist/migrations/20230927071830-reset-pnps-feedback.d.ts +2 -0
- package/dist/migrations/20230927071830-reset-pnps-feedback.js +10 -0
- package/dist/migrations/20230927071830-reset-pnps-feedback.js.map +1 -0
- package/dist/server-dev.js +7 -4
- package/dist/server-dev.js.map +1 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js +0 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js +8 -12
- package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/event.e2e.test.js +9 -2
- package/dist/test/e2e/api/admin/event.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/metrics.e2e.test.js +2 -10
- package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js +8 -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 +41 -15
- package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/project.api.tokens.e2e.test.js +30 -3
- package/dist/test/e2e/api/admin/project/project.api.tokens.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/segment.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/admin/segment.e2e.test.js +272 -0
- package/dist/test/e2e/api/admin/segment.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/state.e2e.test.js +0 -11
- package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/strategy.e2e.test.js +1 -1
- package/dist/test/e2e/api/client/feature.e2e.test.js +27 -3
- package/dist/test/e2e/api/client/feature.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +2 -2
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/segment.e2e.test.js +1 -1
- package/dist/test/e2e/api/client/segment.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/proxy/proxy.e2e.test.js +34 -9
- package/dist/test/e2e/api/proxy/proxy.e2e.test.js.map +1 -1
- package/dist/test/e2e/helpers/app.utils.d.ts +6 -0
- package/dist/test/e2e/helpers/app.utils.js +16 -0
- package/dist/test/e2e/helpers/app.utils.js.map +1 -0
- package/dist/test/e2e/helpers/database.json +24 -0
- package/dist/test/e2e/services/access-service.e2e.test.js +549 -135
- package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/api-token-service.e2e.test.js +4 -2
- 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 +2 -1
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +38 -5
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/group-service.e2e.test.js +16 -11
- package/dist/test/e2e/services/group-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/playground-service.test.js +5 -2
- package/dist/test/e2e/services/playground-service.test.js.map +1 -1
- package/dist/test/e2e/services/project-health-service.e2e.test.js +4 -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 +242 -60
- package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
- package/dist/test/fixtures/access-service-mock.d.ts +3 -4
- package/dist/test/fixtures/access-service-mock.js.map +1 -1
- package/dist/test/fixtures/fake-access-store.d.ts +15 -5
- package/dist/test/fixtures/fake-access-store.js +30 -3
- package/dist/test/fixtures/fake-access-store.js.map +1 -1
- package/dist/test/fixtures/fake-group-store.d.ts +4 -2
- package/dist/test/fixtures/fake-group-store.js +3 -0
- package/dist/test/fixtures/fake-group-store.js.map +1 -1
- package/dist/test/fixtures/fake-project-stats-store.d.ts +1 -0
- package/dist/test/fixtures/fake-project-stats-store.js +3 -0
- package/dist/test/fixtures/fake-project-stats-store.js.map +1 -1
- package/dist/test/fixtures/fake-project-store.d.ts +2 -1
- package/dist/test/fixtures/fake-project-store.js +3 -0
- package/dist/test/fixtures/fake-project-store.js.map +1 -1
- package/dist/test/fixtures/no-logger.d.ts +2 -1
- package/dist/test/fixtures/no-logger.js +8 -4
- package/dist/test/fixtures/no-logger.js.map +1 -1
- package/dist/test/fixtures/store.js +3 -0
- package/dist/test/fixtures/store.js.map +1 -1
- package/frontend/README.md +7 -1
- package/frontend/build/index.html +2 -2
- package/frontend/build/static/{AdvancedPlayground-1748fcdd.js → AdvancedPlayground-20059178.js} +11 -11
- package/frontend/build/static/CreateProject-6955728f.js +4 -0
- package/frontend/build/static/{Error-cbce6b64.js → Error-f56339ab.js} +1 -1
- package/frontend/build/static/FeatureArchiveDialog-33dc3a5b.js +10 -0
- package/frontend/build/static/{FeatureMetricsChart-8fd8a304.js → FeatureMetricsChart-5ad514bc.js} +2 -2
- package/frontend/build/static/FeatureViewLazyExport-85a68ed0.js +7 -0
- package/frontend/build/static/LazyAdminExport-e2677758.js +35 -0
- package/frontend/build/static/LazyProjectExport-969bb54e.js +24 -0
- package/frontend/build/static/Logo-android-218bddbb.svg +1 -0
- package/frontend/build/static/Logo-flutter-cc3c706f.svg +1 -0
- package/frontend/build/static/Logo-go-02475b3d.svg +1 -0
- package/frontend/build/static/Logo-java-6e556b26.svg +1 -0
- package/frontend/build/static/Logo-javascript-caebc06e.svg +1 -0
- package/frontend/build/static/Logo-net-0a33abee.svg +1 -0
- package/frontend/build/static/Logo-node-318ed025.svg +1 -0
- package/frontend/build/static/Logo-php-201f18c3.svg +1 -0
- package/frontend/build/static/Logo-python-4305760e.svg +1 -0
- package/frontend/build/static/Logo-react-18e98687.svg +1 -0
- package/frontend/build/static/Logo-ruby-58f46832.svg +1 -0
- package/frontend/build/static/Logo-rust-c83a80f9.svg +1 -0
- package/frontend/build/static/Logo-svelte-97dcb624.svg +1 -0
- package/frontend/build/static/Logo-swift-315f842b.svg +5 -0
- package/frontend/build/static/Logo-vue-0de73099.svg +1 -0
- package/frontend/build/static/{NetworkOverview-349a7bdd.js → NetworkOverview-894877e6.js} +2 -2
- package/frontend/build/static/{NetworkTraffic-60478e50.js → NetworkTraffic-81eff1ae.js} +1 -1
- package/frontend/build/static/ReactJSONEditor-59c8a094.js +129 -0
- package/frontend/build/static/RoleCell-35857d41.js +1 -0
- package/frontend/build/static/{StrategyItemContainer-a4caeace.js → StrategyItemContainer-b250f2d4.js} +1 -1
- package/frontend/build/static/{chartjs-adapter-date-fns.esm-03d2fbea.js → chartjs-adapter-date-fns.esm-c51fe022.js} +1 -1
- package/frontend/build/static/cr-db7653ac.png +0 -0
- package/frontend/build/static/datadog-543762b6.svg +5 -0
- package/frontend/build/static/edge-daisy-chaining-012bfdef.svg +48 -0
- package/frontend/build/static/edge-mode-5d25949b.svg +22 -0
- package/frontend/build/static/edge-offline-f6a0f761.svg +19 -0
- package/frontend/build/static/{flowchart-elk-definition-170a3958-fc100c77.js → flowchart-elk-definition-170a3958-a8c4a86a.js} +1 -1
- package/frontend/build/static/{index-866f9bf9.js → index-0515f416.js} +1 -1
- package/frontend/build/static/index-942e9eeb.js +463 -0
- package/frontend/build/static/{index-3c63138f.js → index-a59b2d65.js} +1 -1
- package/frontend/build/static/{is_dark-31c253e9.js → is_dark-464961a8.js} +1 -1
- package/frontend/build/static/jira-1abe7cbf.svg +17 -0
- package/frontend/build/static/{mindmap-definition-44684416-398682f9.js → mindmap-definition-44684416-3a71a9a5.js} +1 -1
- package/frontend/build/static/slack-36ce798a.svg +18 -0
- package/frontend/build/static/style-97d3ef98.css +1 -0
- package/frontend/build/static/teams-4e30b51f.svg +45 -0
- package/frontend/build/static/{timeline-definition-8e5a9bc6-04a0ae08.js → timeline-definition-8e5a9bc6-da4ebc88.js} +1 -1
- package/frontend/build/static/{unknownify-b8618d88.js → unknownify-3563456b.js} +1 -1
- package/frontend/build/static/unleash-integration-949d8966.svg +1 -0
- package/frontend/build/static/webhooks-b1b44207.svg +16 -0
- package/frontend/package.json +20 -18
- package/package.json +23 -23
- package/dist/lib/services/instance-stats-service.js.map +0 -1
- package/dist/lib/services/instance-stats-service.test.js.map +0 -1
- package/frontend/build/static/CreateProject-972fa820.js +0 -4
- package/frontend/build/static/FeatureArchiveDialog-8a281845.js +0 -10
- package/frontend/build/static/FeatureViewLazyExport-a215d53b.js +0 -7
- package/frontend/build/static/LazyAdminExport-ba7d55ca.js +0 -35
- package/frontend/build/static/LazyProjectExport-12bccd40.js +0 -17
- package/frontend/build/static/RoleCell-144e7eca.js +0 -1
- package/frontend/build/static/datadog-591b6a73.svg +0 -1
- package/frontend/build/static/index-17d74ac9.js +0 -454
- package/frontend/build/static/slack-c0af31c6.svg +0 -1
- package/frontend/build/static/style-770afaee.css +0 -1
- package/frontend/build/static/teams-62e72076.svg +0 -26
- package/frontend/build/static/webhooks-ffa904ac.svg +0 -1
- /package/dist/lib/{services/instance-stats-service.test.d.ts → db/access-store.test.d.ts} +0 -0
- /package/frontend/build/static/{jira-d9eb9af9.svg → jira-comment-d9eb9af9.svg} +0 -0
|
@@ -14,5 +14,6 @@ import RoleInUseError from './role-in-use-error';
|
|
|
14
14
|
import ProjectWithoutOwnerError from './project-without-owner-error';
|
|
15
15
|
import PasswordUndefinedError from './password-undefined';
|
|
16
16
|
import PasswordMismatchError from './password-mismatch';
|
|
17
|
+
import PatternError from './pattern-error';
|
|
17
18
|
import ForbiddenError from './forbidden-error';
|
|
18
|
-
export { BadDataError, UNIQUE_CONSTRAINT_VIOLATION, FOREIGN_KEY_VIOLATION, DisabledError, FeatureHasTagError, IncompatibleProjectError, InvalidOperationError, InvalidTokenError, MinimumOneEnvironmentError, NameExistsError, PermissionError, ForbiddenError, OperationDeniedError, UserTokenError, RoleInUseError, ProjectWithoutOwnerError, PasswordUndefinedError, PasswordMismatchError, };
|
|
19
|
+
export { BadDataError, UNIQUE_CONSTRAINT_VIOLATION, FOREIGN_KEY_VIOLATION, DisabledError, FeatureHasTagError, IncompatibleProjectError, InvalidOperationError, InvalidTokenError, MinimumOneEnvironmentError, NameExistsError, PermissionError, ForbiddenError, OperationDeniedError, UserTokenError, RoleInUseError, ProjectWithoutOwnerError, PasswordUndefinedError, PatternError, PasswordMismatchError, };
|
package/dist/lib/error/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PasswordMismatchError = exports.PasswordUndefinedError = exports.ProjectWithoutOwnerError = exports.RoleInUseError = exports.UserTokenError = exports.OperationDeniedError = exports.ForbiddenError = exports.PermissionError = exports.NameExistsError = exports.MinimumOneEnvironmentError = exports.InvalidTokenError = exports.InvalidOperationError = exports.IncompatibleProjectError = exports.FeatureHasTagError = exports.DisabledError = exports.FOREIGN_KEY_VIOLATION = exports.UNIQUE_CONSTRAINT_VIOLATION = exports.BadDataError = void 0;
|
|
6
|
+
exports.PasswordMismatchError = exports.PatternError = exports.PasswordUndefinedError = exports.ProjectWithoutOwnerError = exports.RoleInUseError = exports.UserTokenError = exports.OperationDeniedError = exports.ForbiddenError = exports.PermissionError = exports.NameExistsError = exports.MinimumOneEnvironmentError = exports.InvalidTokenError = exports.InvalidOperationError = exports.IncompatibleProjectError = exports.FeatureHasTagError = exports.DisabledError = exports.FOREIGN_KEY_VIOLATION = exports.UNIQUE_CONSTRAINT_VIOLATION = exports.BadDataError = void 0;
|
|
7
7
|
const bad_data_error_1 = __importDefault(require("./bad-data-error"));
|
|
8
8
|
exports.BadDataError = bad_data_error_1.default;
|
|
9
9
|
const db_error_1 = require("./db-error");
|
|
@@ -37,6 +37,8 @@ const password_undefined_1 = __importDefault(require("./password-undefined"));
|
|
|
37
37
|
exports.PasswordUndefinedError = password_undefined_1.default;
|
|
38
38
|
const password_mismatch_1 = __importDefault(require("./password-mismatch"));
|
|
39
39
|
exports.PasswordMismatchError = password_mismatch_1.default;
|
|
40
|
+
const pattern_error_1 = __importDefault(require("./pattern-error"));
|
|
41
|
+
exports.PatternError = pattern_error_1.default;
|
|
40
42
|
const forbidden_error_1 = __importDefault(require("./forbidden-error"));
|
|
41
43
|
exports.ForbiddenError = forbidden_error_1.default;
|
|
42
44
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/error/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA4C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/error/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA4C;AAoBxC,uBApBG,wBAAY,CAoBH;AAnBhB,yCAAgF;AAoB5E,4GApBK,sCAA2B,OAoBL;AAC3B,sGArBkC,gCAAqB,OAqBlC;AApBzB,sEAA6C;AAqBzC,wBArBG,wBAAa,CAqBH;AApBjB,oFAAyD;AAqBrD,6BArBG,+BAAkB,CAqBH;AApBtB,8FAAoE;AAqBhE,mCArBG,oCAAwB,CAqBH;AApB5B,wFAA8D;AAqB1D,gCArBG,iCAAqB,CAqBH;AApBzB,gFAAsD;AAqBlD,4BArBG,6BAAiB,CAqBH;AApBrB,oGAAyE;AAqBrE,qCArBG,uCAA0B,CAqBH;AApB9B,4EAAkD;AAqB9C,0BArBG,2BAAe,CAqBH;AApBnB,0EAAiD;AAqB7C,0BArBG,0BAAe,CAqBH;AApBnB,qEAAgE;AAsB5D,qGAtBK,6CAAoB,OAsBL;AArBxB,0EAAgD;AAsB5C,yBAtBG,0BAAc,CAsBH;AArBlB,4EAAiD;AAsB7C,yBAtBG,2BAAc,CAsBH;AArBlB,gGAAqE;AAsBjE,mCAtBG,qCAAwB,CAsBH;AArB5B,8EAA0D;AAsBtD,iCAtBG,4BAAsB,CAsBH;AArB1B,4EAAwD;AAuBpD,gCAvBG,2BAAqB,CAuBH;AAtBzB,oEAA2C;AAqBvC,uBArBG,uBAAY,CAqBH;AApBhB,wEAA+C;AAc3C,yBAdG,yBAAc,CAcH"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApiErrorSchema, UnleashError } from './unleash-error';
|
|
2
|
+
declare class PatternError extends UnleashError {
|
|
3
|
+
statusCode: number;
|
|
4
|
+
details?: {
|
|
5
|
+
message: string;
|
|
6
|
+
}[];
|
|
7
|
+
constructor(message: string, details?: string[]);
|
|
8
|
+
toJSON(): ApiErrorSchema;
|
|
9
|
+
}
|
|
10
|
+
export default PatternError;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const unleash_error_1 = require("./unleash-error");
|
|
4
|
+
class PatternError extends unleash_error_1.UnleashError {
|
|
5
|
+
constructor(message, details) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.statusCode = 400;
|
|
8
|
+
this.details = details?.map((description) => ({
|
|
9
|
+
message: description,
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
toJSON() {
|
|
13
|
+
return {
|
|
14
|
+
...super.toJSON(),
|
|
15
|
+
details: this.details,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = PatternError;
|
|
20
|
+
//# sourceMappingURL=pattern-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-error.js","sourceRoot":"","sources":["../../../src/lib/error/pattern-error.ts"],"names":[],"mappings":";;AAAA,mDAA+D;AAE/D,MAAM,YAAa,SAAQ,4BAAY;IAKnC,YAAY,OAAe,EAAE,OAAkB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QALnB,eAAU,GAAG,GAAG,CAAC;QAMb,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,EAAE,WAAW;SACvB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,MAAM;QACF,OAAO;YACH,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;IACN,CAAC;CACJ;AAED,kBAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDependentFeaturesService = void 0;
|
|
4
|
+
const dependent_features_service_1 = require("./dependent-features-service");
|
|
5
|
+
const dependent_features_store_1 = require("./dependent-features-store");
|
|
6
|
+
const createDependentFeaturesService = (db) => {
|
|
7
|
+
const dependentFeaturesStore = new dependent_features_store_1.DependentFeaturesStore(db);
|
|
8
|
+
return new dependent_features_service_1.DependentFeaturesService(dependentFeaturesStore);
|
|
9
|
+
};
|
|
10
|
+
exports.createDependentFeaturesService = createDependentFeaturesService;
|
|
11
|
+
//# sourceMappingURL=createDependentFeaturesService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDependentFeaturesService.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/createDependentFeaturesService.ts"],"names":[],"mappings":";;;AACA,6EAAwE;AACxE,yEAAoE;AAE7D,MAAM,8BAA8B,GAAG,CAC1C,EAAM,EACkB,EAAE;IAC1B,MAAM,sBAAsB,GAAG,IAAI,iDAAsB,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,IAAI,qDAAwB,CAAC,sBAAsB,CAAC,CAAC;AAChE,CAAC,CAAC;AALW,QAAA,8BAA8B,kCAKzC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Response } from 'express';
|
|
2
|
+
import Controller from '../../routes/controller';
|
|
3
|
+
import { IUnleashConfig, IUnleashServices } from '../../types';
|
|
4
|
+
import { CreateDependentFeatureSchema, ParentFeatureOptionsSchema } from '../../openapi';
|
|
5
|
+
import { IAuthRequest } from '../../routes/unleash-types';
|
|
6
|
+
import { TransactionCreator, UnleashTransaction } from '../../db/transaction';
|
|
7
|
+
interface FeatureParams {
|
|
8
|
+
child: string;
|
|
9
|
+
}
|
|
10
|
+
interface DeleteDependencyParams {
|
|
11
|
+
child: string;
|
|
12
|
+
parent: string;
|
|
13
|
+
}
|
|
14
|
+
declare type DependentFeaturesServices = Pick<IUnleashServices, 'transactionalDependentFeaturesService' | 'dependentFeaturesService' | 'openApiService'>;
|
|
15
|
+
export default class DependentFeaturesController extends Controller {
|
|
16
|
+
private transactionalDependentFeaturesService;
|
|
17
|
+
private dependentFeaturesService;
|
|
18
|
+
private readonly startTransaction;
|
|
19
|
+
private openApiService;
|
|
20
|
+
private flagResolver;
|
|
21
|
+
private readonly logger;
|
|
22
|
+
constructor(config: IUnleashConfig, { transactionalDependentFeaturesService, dependentFeaturesService, openApiService, }: DependentFeaturesServices, startTransaction: TransactionCreator<UnleashTransaction>);
|
|
23
|
+
addFeatureDependency(req: IAuthRequest<FeatureParams, any, CreateDependentFeatureSchema>, res: Response): Promise<void>;
|
|
24
|
+
deleteFeatureDependency(req: IAuthRequest<DeleteDependencyParams, any, any>, res: Response): Promise<void>;
|
|
25
|
+
deleteFeatureDependencies(req: IAuthRequest<FeatureParams, any, any>, res: Response): Promise<void>;
|
|
26
|
+
getParentOptions(req: IAuthRequest<FeatureParams, any, any>, res: Response<ParentFeatureOptionsSchema>): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const controller_1 = __importDefault(require("../../routes/controller"));
|
|
7
|
+
const types_1 = require("../../types");
|
|
8
|
+
const openapi_1 = require("../../openapi");
|
|
9
|
+
const error_1 = require("../../error");
|
|
10
|
+
const PATH = '/:projectId/features';
|
|
11
|
+
const PATH_FEATURE = `${PATH}/:child`;
|
|
12
|
+
const PATH_DEPENDENCIES = `${PATH_FEATURE}/dependencies`;
|
|
13
|
+
const PATH_PARENTS = `${PATH_FEATURE}/parents`;
|
|
14
|
+
const PATH_DEPENDENCY = `${PATH_FEATURE}/dependencies/:parent`;
|
|
15
|
+
class DependentFeaturesController extends controller_1.default {
|
|
16
|
+
constructor(config, { transactionalDependentFeaturesService, dependentFeaturesService, openApiService, }, startTransaction) {
|
|
17
|
+
super(config);
|
|
18
|
+
this.transactionalDependentFeaturesService =
|
|
19
|
+
transactionalDependentFeaturesService;
|
|
20
|
+
this.dependentFeaturesService = dependentFeaturesService;
|
|
21
|
+
this.openApiService = openApiService;
|
|
22
|
+
this.flagResolver = config.flagResolver;
|
|
23
|
+
this.startTransaction = startTransaction;
|
|
24
|
+
this.logger = config.getLogger('/dependent-features/dependent-feature-service.ts');
|
|
25
|
+
this.route({
|
|
26
|
+
method: 'post',
|
|
27
|
+
path: PATH_DEPENDENCIES,
|
|
28
|
+
handler: this.addFeatureDependency,
|
|
29
|
+
permission: types_1.UPDATE_FEATURE,
|
|
30
|
+
middleware: [
|
|
31
|
+
openApiService.validPath({
|
|
32
|
+
tags: ['Features'],
|
|
33
|
+
summary: 'Add a feature dependency.',
|
|
34
|
+
description: 'Add a dependency to a parent feature. Each environment will resolve corresponding dependency independently.',
|
|
35
|
+
operationId: 'addFeatureDependency',
|
|
36
|
+
requestBody: (0, openapi_1.createRequestSchema)('createDependentFeatureSchema'),
|
|
37
|
+
responses: {
|
|
38
|
+
200: openapi_1.emptyResponse,
|
|
39
|
+
...(0, openapi_1.getStandardResponses)(401, 403, 404),
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
this.route({
|
|
45
|
+
method: 'delete',
|
|
46
|
+
path: PATH_DEPENDENCY,
|
|
47
|
+
handler: this.deleteFeatureDependency,
|
|
48
|
+
permission: types_1.UPDATE_FEATURE,
|
|
49
|
+
acceptAnyContentType: true,
|
|
50
|
+
middleware: [
|
|
51
|
+
openApiService.validPath({
|
|
52
|
+
tags: ['Features'],
|
|
53
|
+
summary: 'Deletes a feature dependency.',
|
|
54
|
+
description: 'Remove a dependency to a parent feature.',
|
|
55
|
+
operationId: 'deleteFeatureDependency',
|
|
56
|
+
responses: {
|
|
57
|
+
200: openapi_1.emptyResponse,
|
|
58
|
+
...(0, openapi_1.getStandardResponses)(401, 403, 404),
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
this.route({
|
|
64
|
+
method: 'delete',
|
|
65
|
+
path: PATH_DEPENDENCIES,
|
|
66
|
+
handler: this.deleteFeatureDependencies,
|
|
67
|
+
permission: types_1.UPDATE_FEATURE,
|
|
68
|
+
acceptAnyContentType: true,
|
|
69
|
+
middleware: [
|
|
70
|
+
openApiService.validPath({
|
|
71
|
+
tags: ['Features'],
|
|
72
|
+
summary: 'Deletes feature dependencies.',
|
|
73
|
+
description: 'Remove dependencies to all parent features.',
|
|
74
|
+
operationId: 'deleteFeatureDependencies',
|
|
75
|
+
responses: {
|
|
76
|
+
200: openapi_1.emptyResponse,
|
|
77
|
+
...(0, openapi_1.getStandardResponses)(401, 403, 404),
|
|
78
|
+
},
|
|
79
|
+
}),
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
this.route({
|
|
83
|
+
method: 'get',
|
|
84
|
+
path: PATH_PARENTS,
|
|
85
|
+
handler: this.getParentOptions,
|
|
86
|
+
permission: types_1.NONE,
|
|
87
|
+
middleware: [
|
|
88
|
+
openApiService.validPath({
|
|
89
|
+
tags: ['Features'],
|
|
90
|
+
summary: 'List parent options.',
|
|
91
|
+
description: 'List available parents who have no transitive dependencies.',
|
|
92
|
+
operationId: 'listParentOptions',
|
|
93
|
+
responses: {
|
|
94
|
+
200: (0, openapi_1.createResponseSchema)('parentFeatureOptionsSchema'),
|
|
95
|
+
...(0, openapi_1.getStandardResponses)(401, 403, 404),
|
|
96
|
+
},
|
|
97
|
+
}),
|
|
98
|
+
],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async addFeatureDependency(req, res) {
|
|
102
|
+
const { child } = req.params;
|
|
103
|
+
const { variants, enabled, feature } = req.body;
|
|
104
|
+
if (this.config.flagResolver.isEnabled('dependentFeatures')) {
|
|
105
|
+
await this.startTransaction(async (tx) => this.transactionalDependentFeaturesService(tx).upsertFeatureDependency(child, {
|
|
106
|
+
variants,
|
|
107
|
+
enabled,
|
|
108
|
+
feature,
|
|
109
|
+
}));
|
|
110
|
+
res.status(200).end();
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
throw new error_1.InvalidOperationError('Dependent features are not enabled');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async deleteFeatureDependency(req, res) {
|
|
117
|
+
const { child, parent } = req.params;
|
|
118
|
+
if (this.config.flagResolver.isEnabled('dependentFeatures')) {
|
|
119
|
+
await this.dependentFeaturesService.deleteFeatureDependency({
|
|
120
|
+
parent,
|
|
121
|
+
child,
|
|
122
|
+
});
|
|
123
|
+
res.status(200).end();
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
throw new error_1.InvalidOperationError('Dependent features are not enabled');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async deleteFeatureDependencies(req, res) {
|
|
130
|
+
const { child } = req.params;
|
|
131
|
+
if (this.config.flagResolver.isEnabled('dependentFeatures')) {
|
|
132
|
+
await this.dependentFeaturesService.deleteFeatureDependencies(child);
|
|
133
|
+
res.status(200).end();
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
throw new error_1.InvalidOperationError('Dependent features are not enabled');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async getParentOptions(req, res) {
|
|
140
|
+
const { child } = req.params;
|
|
141
|
+
if (this.config.flagResolver.isEnabled('dependentFeatures')) {
|
|
142
|
+
const parentOptions = await this.dependentFeaturesService.getParentOptions(child);
|
|
143
|
+
res.send(parentOptions);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
throw new error_1.InvalidOperationError('Dependent features are not enabled');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.default = DependentFeaturesController;
|
|
151
|
+
//# sourceMappingURL=dependent-features-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependent-features-controller.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CreateDependentFeatureSchema } from '../../openapi';
|
|
2
|
+
import { IDependentFeaturesStore } from './dependent-features-store-type';
|
|
3
|
+
import { FeatureDependencyId } from './dependent-features';
|
|
4
|
+
export declare class DependentFeaturesService {
|
|
5
|
+
private dependentFeaturesStore;
|
|
6
|
+
constructor(dependentFeaturesStore: IDependentFeaturesStore);
|
|
7
|
+
upsertFeatureDependency(child: string, dependentFeature: CreateDependentFeatureSchema): Promise<void>;
|
|
8
|
+
deleteFeatureDependency(dependency: FeatureDependencyId): Promise<void>;
|
|
9
|
+
deleteFeatureDependencies(feature: string): Promise<void>;
|
|
10
|
+
getParentOptions(feature: string): Promise<string[]>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependentFeaturesService = void 0;
|
|
4
|
+
const error_1 = require("../../error");
|
|
5
|
+
class DependentFeaturesService {
|
|
6
|
+
constructor(dependentFeaturesStore) {
|
|
7
|
+
this.dependentFeaturesStore = dependentFeaturesStore;
|
|
8
|
+
}
|
|
9
|
+
async upsertFeatureDependency(child, dependentFeature) {
|
|
10
|
+
const { enabled, feature: parent, variants } = dependentFeature;
|
|
11
|
+
const children = await this.dependentFeaturesStore.getChildren(child);
|
|
12
|
+
if (children.length > 0) {
|
|
13
|
+
throw new error_1.InvalidOperationError('Transitive dependency detected. Cannot add a dependency to the feature that other features depend on.');
|
|
14
|
+
}
|
|
15
|
+
const featureDependency = enabled === false
|
|
16
|
+
? {
|
|
17
|
+
parent,
|
|
18
|
+
child,
|
|
19
|
+
enabled,
|
|
20
|
+
}
|
|
21
|
+
: {
|
|
22
|
+
parent,
|
|
23
|
+
child,
|
|
24
|
+
enabled: true,
|
|
25
|
+
variants,
|
|
26
|
+
};
|
|
27
|
+
await this.dependentFeaturesStore.upsert(featureDependency);
|
|
28
|
+
}
|
|
29
|
+
async deleteFeatureDependency(dependency) {
|
|
30
|
+
await this.dependentFeaturesStore.delete(dependency);
|
|
31
|
+
}
|
|
32
|
+
async deleteFeatureDependencies(feature) {
|
|
33
|
+
await this.dependentFeaturesStore.deleteAll(feature);
|
|
34
|
+
}
|
|
35
|
+
async getParentOptions(feature) {
|
|
36
|
+
return this.dependentFeaturesStore.getParentOptions(feature);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.DependentFeaturesService = DependentFeaturesService;
|
|
40
|
+
//# sourceMappingURL=dependent-features-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependent-features-service.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-service.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AAKpD,MAAa,wBAAwB;IAGjC,YAAY,sBAA+C;QACvD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,uBAAuB,CACzB,KAAa,EACb,gBAA8C;QAE9C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC;QAEhE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,MAAM,IAAI,6BAAqB,CAC3B,uGAAuG,CAC1G,CAAC;SACL;QAED,MAAM,iBAAiB,GACnB,OAAO,KAAK,KAAK;YACb,CAAC,CAAC;gBACI,MAAM;gBACN,KAAK;gBACL,OAAO;aACV;YACH,CAAC,CAAC;gBACI,MAAM;gBACN,KAAK;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ;aACX,CAAC;QACZ,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,uBAAuB,CACzB,UAA+B;QAE/B,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,OAAe;QAC3C,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAClC,OAAO,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;CACJ;AAjDD,4DAiDC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FeatureDependency, FeatureDependencyId } from './dependent-features';
|
|
2
|
+
export interface IDependentFeaturesStore {
|
|
3
|
+
upsert(featureDependency: FeatureDependency): Promise<void>;
|
|
4
|
+
getChildren(parent: string): Promise<string[]>;
|
|
5
|
+
delete(dependency: FeatureDependencyId): Promise<void>;
|
|
6
|
+
deleteAll(child: string): Promise<void>;
|
|
7
|
+
getParentOptions(child: string): Promise<string[]>;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependent-features-store-type.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-store-type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Db } from '../../db/db';
|
|
2
|
+
import { IDependentFeaturesStore } from './dependent-features-store-type';
|
|
3
|
+
import { FeatureDependency, FeatureDependencyId } from './dependent-features';
|
|
4
|
+
export declare class DependentFeaturesStore implements IDependentFeaturesStore {
|
|
5
|
+
private db;
|
|
6
|
+
constructor(db: Db);
|
|
7
|
+
upsert(featureDependency: FeatureDependency): Promise<void>;
|
|
8
|
+
getChildren(parent: string): Promise<string[]>;
|
|
9
|
+
getParentOptions(child: string): Promise<string[]>;
|
|
10
|
+
delete(dependency: FeatureDependencyId): Promise<void>;
|
|
11
|
+
deleteAll(feature: string): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependentFeaturesStore = void 0;
|
|
4
|
+
class DependentFeaturesStore {
|
|
5
|
+
constructor(db) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
}
|
|
8
|
+
async upsert(featureDependency) {
|
|
9
|
+
const serializableFeatureDependency = {
|
|
10
|
+
parent: featureDependency.parent,
|
|
11
|
+
child: featureDependency.child,
|
|
12
|
+
enabled: featureDependency.enabled,
|
|
13
|
+
};
|
|
14
|
+
if ('variants' in featureDependency) {
|
|
15
|
+
serializableFeatureDependency.variants = JSON.stringify(featureDependency.variants);
|
|
16
|
+
}
|
|
17
|
+
// TODO: remove when we support multiple parents
|
|
18
|
+
await this.db('dependent_features')
|
|
19
|
+
.where('child', featureDependency.child)
|
|
20
|
+
.del();
|
|
21
|
+
await this.db('dependent_features')
|
|
22
|
+
.insert(serializableFeatureDependency)
|
|
23
|
+
.onConflict(['parent', 'child'])
|
|
24
|
+
.merge();
|
|
25
|
+
}
|
|
26
|
+
async getChildren(parent) {
|
|
27
|
+
const rows = await this.db('dependent_features').where('parent', parent);
|
|
28
|
+
return rows.map((row) => row.child);
|
|
29
|
+
}
|
|
30
|
+
async getParentOptions(child) {
|
|
31
|
+
const result = await this.db('features as f')
|
|
32
|
+
.where('f.name', child)
|
|
33
|
+
.select('f.project');
|
|
34
|
+
if (result.length === 0) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
const rows = await this.db('features as f')
|
|
38
|
+
.leftJoin('dependent_features as df', 'f.name', 'df.child')
|
|
39
|
+
.where('f.project', result[0].project)
|
|
40
|
+
.andWhere('f.name', '!=', child)
|
|
41
|
+
.andWhere('df.child', null)
|
|
42
|
+
.select('f.name');
|
|
43
|
+
return rows.map((item) => item.name);
|
|
44
|
+
}
|
|
45
|
+
async delete(dependency) {
|
|
46
|
+
await this.db('dependent_features')
|
|
47
|
+
.where('parent', dependency.parent)
|
|
48
|
+
.andWhere('child', dependency.child)
|
|
49
|
+
.del();
|
|
50
|
+
}
|
|
51
|
+
async deleteAll(feature) {
|
|
52
|
+
await this.db('dependent_features').andWhere('child', feature).del();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.DependentFeaturesStore = DependentFeaturesStore;
|
|
56
|
+
//# sourceMappingURL=dependent-features-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependent-features-store.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-store.ts"],"names":[],"mappings":";;;AAOA,MAAa,sBAAsB;IAG/B,YAAY,EAAM;QACd,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,iBAAoC;QAC7C,MAAM,6BAA6B,GAAkC;YACjE,MAAM,EAAE,iBAAiB,CAAC,MAAM;YAChC,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,OAAO,EAAE,iBAAiB,CAAC,OAAO;SACrC,CAAC;QACF,IAAI,UAAU,IAAI,iBAAiB,EAAE;YACjC,6BAA6B,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CACnD,iBAAiB,CAAC,QAAQ,CAC7B,CAAC;SACL;QACD,gDAAgD;QAChD,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC;aAC9B,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;aACvC,GAAG,EAAE,CAAC;QAEX,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC;aAC9B,MAAM,CAAC,6BAA6B,CAAC;aACrC,UAAU,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAC/B,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAClD,QAAQ,EACR,MAAM,CACT,CAAC;QAEF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC;aACxC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;aACtB,MAAM,CAAC,WAAW,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,EAAE,CAAC;SACb;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC;aACtC,QAAQ,CAAC,0BAA0B,EAAE,QAAQ,EAAE,UAAU,CAAC;aAC1D,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;aACrC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;aAC/B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;aAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAA+B;QACxC,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC;aAC9B,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC;aAClC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;aACnC,GAAG,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;IACzE,CAAC;CACJ;AAjED,wDAiEC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare type FeatureDependencyId = {
|
|
2
|
+
parent: string;
|
|
3
|
+
child: string;
|
|
4
|
+
};
|
|
5
|
+
export declare type FeatureDependency = {
|
|
6
|
+
parent: string;
|
|
7
|
+
child: string;
|
|
8
|
+
enabled: true;
|
|
9
|
+
variants?: string[];
|
|
10
|
+
} | {
|
|
11
|
+
parent: string;
|
|
12
|
+
child: string;
|
|
13
|
+
enabled: false;
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependent-features.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
const database_init_1 = __importDefault(require("../../../test/e2e/helpers/database-init"));
|
|
8
|
+
const test_helper_1 = require("../../../test/e2e/helpers/test-helper");
|
|
9
|
+
const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger"));
|
|
10
|
+
let app;
|
|
11
|
+
let db;
|
|
12
|
+
beforeAll(async () => {
|
|
13
|
+
db = await (0, database_init_1.default)('dependent_features', no_logger_1.default);
|
|
14
|
+
app = await (0, test_helper_1.setupAppWithCustomConfig)(db.stores, {
|
|
15
|
+
experimental: {
|
|
16
|
+
flags: {
|
|
17
|
+
strictSchemaValidation: true,
|
|
18
|
+
dependentFeatures: true,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
}, db.rawDatabase);
|
|
22
|
+
});
|
|
23
|
+
afterAll(async () => {
|
|
24
|
+
await app.destroy();
|
|
25
|
+
await db.destroy();
|
|
26
|
+
});
|
|
27
|
+
const addFeatureDependency = async (childFeature, payload, expectedCode = 200) => {
|
|
28
|
+
return app.request
|
|
29
|
+
.post(`/api/admin/projects/default/features/${childFeature}/dependencies`)
|
|
30
|
+
.send(payload)
|
|
31
|
+
.expect(expectedCode);
|
|
32
|
+
};
|
|
33
|
+
const deleteFeatureDependency = async (childFeature, parentFeature, expectedCode = 200) => {
|
|
34
|
+
return app.request
|
|
35
|
+
.delete(`/api/admin/projects/default/features/${childFeature}/dependencies/${parentFeature}`)
|
|
36
|
+
.expect(expectedCode);
|
|
37
|
+
};
|
|
38
|
+
const deleteFeatureDependencies = async (childFeature, expectedCode = 200) => {
|
|
39
|
+
return app.request
|
|
40
|
+
.delete(`/api/admin/projects/default/features/${childFeature}/dependencies`)
|
|
41
|
+
.expect(expectedCode);
|
|
42
|
+
};
|
|
43
|
+
const getParentOptions = async (childFeature, expectedCode = 200) => {
|
|
44
|
+
return app.request
|
|
45
|
+
.get(`/api/admin/projects/default/features/${childFeature}/parents`)
|
|
46
|
+
.expect(expectedCode);
|
|
47
|
+
};
|
|
48
|
+
test('should add and delete feature dependencies', async () => {
|
|
49
|
+
const parent = (0, uuid_1.v4)();
|
|
50
|
+
const child = (0, uuid_1.v4)();
|
|
51
|
+
await app.createFeature(parent);
|
|
52
|
+
await app.createFeature(child);
|
|
53
|
+
const { body: parentOptions } = await getParentOptions(child);
|
|
54
|
+
expect(parentOptions).toStrictEqual([parent]);
|
|
55
|
+
// save explicit enabled and variants
|
|
56
|
+
await addFeatureDependency(child, {
|
|
57
|
+
feature: parent,
|
|
58
|
+
enabled: false,
|
|
59
|
+
});
|
|
60
|
+
// overwrite with implicit enabled: true and variants
|
|
61
|
+
await addFeatureDependency(child, {
|
|
62
|
+
feature: parent,
|
|
63
|
+
variants: ['variantB'],
|
|
64
|
+
});
|
|
65
|
+
await deleteFeatureDependency(child, parent); // single
|
|
66
|
+
await deleteFeatureDependencies(child); // all
|
|
67
|
+
});
|
|
68
|
+
test('should not allow to add a parent dependency to a feature that already has children', async () => {
|
|
69
|
+
const grandparent = (0, uuid_1.v4)();
|
|
70
|
+
const parent = (0, uuid_1.v4)();
|
|
71
|
+
const child = (0, uuid_1.v4)();
|
|
72
|
+
await app.createFeature(grandparent);
|
|
73
|
+
await app.createFeature(parent);
|
|
74
|
+
await app.createFeature(child);
|
|
75
|
+
await addFeatureDependency(child, {
|
|
76
|
+
feature: parent,
|
|
77
|
+
});
|
|
78
|
+
await addFeatureDependency(parent, {
|
|
79
|
+
feature: grandparent,
|
|
80
|
+
}, 403);
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=dependent.features.e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependent.features.e2e.test.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent.features.e2e.test.ts"],"names":[],"mappings":";;;;;AAAA,+BAAoC;AACpC,4FAA0E;AAC1E,uEAG+C;AAC/C,iFAAyD;AAGzD,IAAI,GAAiB,CAAC;AACtB,IAAI,EAAW,CAAC;AAEhB,SAAS,CAAC,KAAK,IAAI,EAAE;IACjB,EAAE,GAAG,MAAM,IAAA,uBAAM,EAAC,oBAAoB,EAAE,mBAAS,CAAC,CAAC;IACnD,GAAG,GAAG,MAAM,IAAA,sCAAwB,EAChC,EAAE,CAAC,MAAM,EACT;QACI,YAAY,EAAE;YACV,KAAK,EAAE;gBACH,sBAAsB,EAAE,IAAI;gBAC5B,iBAAiB,EAAE,IAAI;aAC1B;SACJ;KACJ,EACD,EAAE,CAAC,WAAW,CACjB,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;IAChB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,KAAK,EAC9B,YAAoB,EACpB,OAAqC,EACrC,YAAY,GAAG,GAAG,EACpB,EAAE;IACA,OAAO,GAAG,CAAC,OAAO;SACb,IAAI,CACD,wCAAwC,YAAY,eAAe,CACtE;SACA,IAAI,CAAC,OAAO,CAAC;SACb,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,KAAK,EACjC,YAAoB,EACpB,aAAqB,EACrB,YAAY,GAAG,GAAG,EACpB,EAAE;IACA,OAAO,GAAG,CAAC,OAAO;SACb,MAAM,CACH,wCAAwC,YAAY,iBAAiB,aAAa,EAAE,CACvF;SACA,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,KAAK,EACnC,YAAoB,EACpB,YAAY,GAAG,GAAG,EACpB,EAAE;IACA,OAAO,GAAG,CAAC,OAAO;SACb,MAAM,CACH,wCAAwC,YAAY,eAAe,CACtE;SACA,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,YAAoB,EAAE,YAAY,GAAG,GAAG,EAAE,EAAE;IACxE,OAAO,GAAG,CAAC,OAAO;SACb,GAAG,CAAC,wCAAwC,YAAY,UAAU,CAAC;SACnE,MAAM,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;IAC1D,MAAM,MAAM,GAAG,IAAA,SAAM,GAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAA,SAAM,GAAE,CAAC;IACvB,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C,qCAAqC;IACrC,MAAM,oBAAoB,CAAC,KAAK,EAAE;QAC9B,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,qDAAqD;IACrD,MAAM,oBAAoB,CAAC,KAAK,EAAE;QAC9B,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,CAAC,UAAU,CAAC;KACzB,CAAC,CAAC;IAEH,MAAM,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS;IACvD,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;AAClD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;IAClG,MAAM,WAAW,GAAG,IAAA,SAAM,GAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAA,SAAM,GAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAA,SAAM,GAAE,CAAC;IACvB,MAAM,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,oBAAoB,CAAC,KAAK,EAAE;QAC9B,OAAO,EAAE,MAAM;KAClB,CAAC,CAAC;IACH,MAAM,oBAAoB,CACtB,MAAM,EACN;QACI,OAAO,EAAE,WAAW;KACvB,EACD,GAAG,CACN,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IDependentFeaturesStore } from './dependent-features-store-type';
|
|
2
|
+
export declare class FakeDependentFeaturesStore implements IDependentFeaturesStore {
|
|
3
|
+
upsert(): Promise<void>;
|
|
4
|
+
getChildren(): Promise<string[]>;
|
|
5
|
+
getParentOptions(): Promise<string[]>;
|
|
6
|
+
delete(): Promise<void>;
|
|
7
|
+
deleteAll(): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FakeDependentFeaturesStore = void 0;
|
|
4
|
+
class FakeDependentFeaturesStore {
|
|
5
|
+
async upsert() {
|
|
6
|
+
return Promise.resolve();
|
|
7
|
+
}
|
|
8
|
+
getChildren() {
|
|
9
|
+
return Promise.resolve([]);
|
|
10
|
+
}
|
|
11
|
+
getParentOptions() {
|
|
12
|
+
return Promise.resolve([]);
|
|
13
|
+
}
|
|
14
|
+
delete() {
|
|
15
|
+
return Promise.resolve();
|
|
16
|
+
}
|
|
17
|
+
deleteAll() {
|
|
18
|
+
return Promise.resolve();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.FakeDependentFeaturesStore = FakeDependentFeaturesStore;
|
|
22
|
+
//# sourceMappingURL=fake-dependent-features-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-dependent-features-store.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/fake-dependent-features-store.ts"],"names":[],"mappings":";;;AAEA,MAAa,0BAA0B;IACnC,KAAK,CAAC,MAAM;QACR,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW;QACP,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,SAAS;QACL,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ;AApBD,gEAoBC"}
|