feat: update demo app and documentation (#255)
## This PR Update k8s end to end example, update app by removing deprecated packages and fix docker image as it was failing with python requirement. While doing the update, had to do extra lint fixes and CI fixes --------- Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
This commit is contained in:
parent
d4d0a38ccb
commit
eaa770db6f
|
|
@ -16,13 +16,11 @@ jobs:
|
|||
with:
|
||||
# We need to fetch all branches and commits so that Nx affected has a base to compare against.
|
||||
fetch-depth: 0
|
||||
- uses: nrwl/nx-set-shas@v3
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: nrwl/nx-set-shas@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 16
|
||||
node-version: 18
|
||||
cache: 'npm'
|
||||
- run: npm ci
|
||||
- run: npx nx workspace-lint
|
||||
- run: if ! npx nx format:check ; then echo "Format check failed. Please run 'npx nx format:write'."; fi
|
||||
- run: npx nx affected --target=lint --parallel=3
|
||||
- run: npx nx affected --target=test --parallel=3 --ci --code-coverage
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ npm-debug.log
|
|||
yarn-error.log
|
||||
testem.log
|
||||
/typings
|
||||
.nx
|
||||
|
||||
# System Files
|
||||
.DS_Store
|
||||
|
|
@ -43,4 +44,4 @@ Thumbs.db
|
|||
|
||||
# yalc stuff
|
||||
.yalc
|
||||
yalc.lock
|
||||
yalc.lock
|
||||
|
|
|
|||
|
|
@ -2,3 +2,4 @@
|
|||
|
||||
/dist
|
||||
/coverage
|
||||
/.nx
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
# A basic flag custom resource
|
||||
apiVersion: core.openfeature.dev/v1alpha2
|
||||
kind: FeatureFlagConfiguration
|
||||
apiVersion: core.openfeature.dev/v1beta1
|
||||
kind: FeatureFlag
|
||||
metadata:
|
||||
name: end-to-end
|
||||
labels:
|
||||
app: open-feature-demo
|
||||
spec:
|
||||
featureFlagSpec:
|
||||
flagSpec:
|
||||
flags:
|
||||
new-welcome-message:
|
||||
state: ENABLED
|
||||
|
|
@ -53,6 +53,19 @@ spec:
|
|||
'off': false
|
||||
defaultVariant: 'off'
|
||||
---
|
||||
# Feature flag source custom resource, configuring flagd to source flags from FeatureFlag crd
|
||||
apiVersion: core.openfeature.dev/v1beta1
|
||||
kind: FeatureFlagSource
|
||||
metadata:
|
||||
name: end-to-end
|
||||
labels:
|
||||
app: open-feature-demo
|
||||
spec:
|
||||
sources:
|
||||
- source: end-to-end
|
||||
provider: kubernetes
|
||||
|
||||
---
|
||||
# Deployment of a demo-app using our custom resource
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
|
|
@ -71,7 +84,7 @@ spec:
|
|||
app: open-feature-demo
|
||||
annotations:
|
||||
openfeature.dev/enabled: "true"
|
||||
openfeature.dev/featureflagconfiguration: "end-to-end"
|
||||
openfeature.dev/featureflagsource: "end-to-end"
|
||||
spec:
|
||||
containers:
|
||||
- name: open-feature-demo
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ services:
|
|||
- FIB_SERVICE_URL=http://fib-service:30001
|
||||
- FIB_SERVICE_USER
|
||||
- FIB_SERVICE_PASS
|
||||
- ENABLED_SPAN_BASED_TRACES
|
||||
# Provider values come from the .env
|
||||
- NEW_WELCOME_MESSAGE
|
||||
- FIB_ALGO
|
||||
|
|
@ -60,7 +59,6 @@ services:
|
|||
- OTEL_SERVICE_NAME=fibonacci-service
|
||||
- FIB_SERVICE_USER
|
||||
- FIB_SERVICE_PASS
|
||||
- ENABLED_SPAN_BASED_TRACES
|
||||
# Provider values come from the .env
|
||||
- NEW_WELCOME_MESSAGE
|
||||
- FIB_ALGO
|
||||
|
|
|
|||
200
migrations.json
200
migrations.json
|
|
@ -2,171 +2,87 @@
|
|||
"migrations": [
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.0",
|
||||
"description": "Remove @nrwl/cli.",
|
||||
"implementation": "./src/migrations/update-16-0-0/remove-nrwl-cli",
|
||||
"package": "nx",
|
||||
"name": "16.0.0-remove-nrwl-cli"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.9",
|
||||
"description": "Replace `dependsOn.projects` and `inputs` definitions with new configuration format.",
|
||||
"implementation": "./src/migrations/update-16-0-0/update-depends-on-to-tokens",
|
||||
"package": "nx",
|
||||
"name": "16.0.0-tokens-for-depends-on"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.0",
|
||||
"description": "Replace @nrwl/nx-cloud with nx-cloud",
|
||||
"implementation": "./src/migrations/update-16-0-0/update-nx-cloud-runner",
|
||||
"package": "nx",
|
||||
"name": "16.0.0-update-nx-cloud-runner"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.2.0-beta.0",
|
||||
"description": "Remove outputPath from run commands",
|
||||
"implementation": "./src/migrations/update-16-2-0/remove-run-commands-output-path",
|
||||
"package": "nx",
|
||||
"name": "16.2.0-remove-output-path-from-run-commands"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/devkit with @nx/devkit",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/devkit",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/workspace with @nx/workspace",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/workspace",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
},
|
||||
{
|
||||
"version": "16.0.0-beta.4",
|
||||
"description": "Generates a plugin called 'workspace-plugin' containing your workspace generators.",
|
||||
"cli": "nx",
|
||||
"implementation": "./src/migrations/update-16-0-0/move-workspace-generators-to-local-plugin",
|
||||
"package": "@nx/workspace",
|
||||
"name": "16-0-0-move-workspace-generators-into-local-plugin"
|
||||
},
|
||||
{
|
||||
"version": "16.0.0-beta.9",
|
||||
"description": "Fix .babelrc presets if it contains an invalid entry for @nx/web/babel.",
|
||||
"cli": "nx",
|
||||
"implementation": "./src/migrations/update-16-0-0/fix-invalid-babelrc",
|
||||
"package": "@nx/workspace",
|
||||
"name": "16-0-0-fix-invalid-babelrc"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/js with @nx/js",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/js",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/linter with @nx/linter",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/linter",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/web with @nx/web",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/web",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.4",
|
||||
"description": "Replace @nx/web executors with @nx/webpack and @nx/rollup",
|
||||
"implementation": "./src/migrations/update-16-0-0-update-executors/update-16-0-0-update-executors",
|
||||
"package": "@nx/web",
|
||||
"name": "update-16-0-0-update-executors"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/eslint-plugin with @nx/eslint-plugin",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/eslint-plugin",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/react with @nx/react",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"version": "16.7.0-beta.2",
|
||||
"description": "Add @babel/core to package.json if @babel/preset-react is present",
|
||||
"implementation": "./src/migrations/update-16-7-0/add-babel-core",
|
||||
"package": "@nx/react",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
"name": "add-babel-core"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.2.0-beta.0",
|
||||
"description": "Remove react-test-renderer from package.json",
|
||||
"implementation": "./src/migrations/update-16-2-0-remove-package/update-16-2-0-remove-package",
|
||||
"version": "16.7.0-beta.2",
|
||||
"description": "Add @nx/react types to tsconfig types array",
|
||||
"implementation": "./src/migrations/update-16-7-0-add-typings/update-16-7-0-add-typings",
|
||||
"package": "@nx/react",
|
||||
"name": "update-16-2-0-remove-package"
|
||||
"name": "update-16-7-0-add-typings"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/jest with @nx/jest",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"version": "16.5.0-beta.2",
|
||||
"description": "Add test-setup.ts to ignored files in production input",
|
||||
"implementation": "./src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore",
|
||||
"package": "@nx/jest",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
"name": "add-test-setup-to-inputs-ignore"
|
||||
},
|
||||
{
|
||||
"version": "17.1.0-beta.2",
|
||||
"description": "Move jest executor options to nx.json targetDefaults",
|
||||
"implementation": "./src/migrations/update-17-1-0/move-options-to-target-defaults",
|
||||
"package": "@nx/jest",
|
||||
"name": "move-options-to-target-defaults"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/node with @nx/node",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/node",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
"version": "16.6.0-beta.0",
|
||||
"description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.",
|
||||
"factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps",
|
||||
"package": "@nx/js",
|
||||
"name": "explicitly-set-projects-to-update-buildable-deps"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.5",
|
||||
"description": "Replace @nx/node:webpack with @nx/node:webpack",
|
||||
"implementation": "./src/migrations/update-16-0-0/update-webpack-executor",
|
||||
"package": "@nx/node",
|
||||
"name": "update-16-0-0-update-executor"
|
||||
"version": "16.8.2-beta.0",
|
||||
"description": "Remove invalid options (strict, noInterop) for ES6 type modules.",
|
||||
"factory": "./src/migrations/update-16-8-2/update-swcrc",
|
||||
"package": "@nx/js",
|
||||
"name": "16-8-2-update-swcrc"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/express with @nx/express",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/express",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
"version": "17.0.2",
|
||||
"description": "Remove deprecated build options",
|
||||
"implementation": "./src/migrations/update-17-0-0/remove-deprecated-build-options",
|
||||
"package": "@nx/js",
|
||||
"name": "update-17-0-0-remove-deprecated-build-options"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/nest with @nx/nest",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/nest",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
"version": "16.9.0-beta.1",
|
||||
"description": "Replace imports of Module Federation utils frm @nx/devkit to @nx/webpack",
|
||||
"implementation": "./src/migrations/update-16-9-0/migrate-mf-util-usage",
|
||||
"package": "@nx/devkit",
|
||||
"name": "update-16-9-0-migrate-mf-usage-to-webpack"
|
||||
},
|
||||
{
|
||||
"cli": "nx",
|
||||
"version": "16.0.0-beta.1",
|
||||
"description": "Replace @nx/webpack with @nx/webpack",
|
||||
"implementation": "./src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages",
|
||||
"package": "@nx/webpack",
|
||||
"name": "update-16-0-0-add-nx-packages"
|
||||
"version": "16.8.0",
|
||||
"description": "update-16-8-0-add-ignored-files",
|
||||
"implementation": "./src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files",
|
||||
"package": "@nx/linter",
|
||||
"name": "update-16-8-0-add-ignored-files"
|
||||
},
|
||||
{
|
||||
"version": "17.0.0-beta.7",
|
||||
"description": "update-17-0-0-rename-to-eslint",
|
||||
"implementation": "./src/migrations/update-17-0-0-rename-to-eslint/update-17-0-0-rename-to-eslint",
|
||||
"package": "@nx/linter",
|
||||
"name": "update-17-0-0-rename-to-eslint"
|
||||
},
|
||||
{
|
||||
"version": "17.1.0-beta.1",
|
||||
"description": "Updates for @typescript-utils/utils v6.9.1+",
|
||||
"implementation": "./src/migrations/update-17-1-0/update-typescript-eslint",
|
||||
"package": "@nx/linter",
|
||||
"name": "update-typescript-eslint"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
27
nx.json
27
nx.json
|
|
@ -2,9 +2,7 @@
|
|||
"tasksRunnerOptions": {
|
||||
"default": {
|
||||
"runner": "@nx/workspace/tasks-runners/default",
|
||||
"options": {
|
||||
"cacheableOperations": ["build", "lint", "test", "e2e"]
|
||||
}
|
||||
"options": {}
|
||||
}
|
||||
},
|
||||
"extends": "nx/presets/core.json",
|
||||
|
|
@ -12,13 +10,9 @@
|
|||
"libsDir": "packages",
|
||||
"appsDir": "packages"
|
||||
},
|
||||
"npmScope": "openfeature",
|
||||
"affected": {
|
||||
"defaultBase": "main"
|
||||
},
|
||||
"cli": {
|
||||
"defaultCollection": "@nx/express"
|
||||
},
|
||||
"defaultProject": "app",
|
||||
"generators": {
|
||||
"@nx/react": {
|
||||
|
|
@ -39,12 +33,29 @@
|
|||
"$schema": "./node_modules/nx/schemas/nx-schema.json",
|
||||
"targetDefaults": {
|
||||
"build": {
|
||||
"dependsOn": ["^build"]
|
||||
"dependsOn": ["^build"],
|
||||
"inputs": ["production", "^production"],
|
||||
"cache": true
|
||||
},
|
||||
"lint": {
|
||||
"cache": true
|
||||
},
|
||||
"test": {
|
||||
"cache": true
|
||||
},
|
||||
"e2e": {
|
||||
"cache": true
|
||||
}
|
||||
},
|
||||
"pluginsConfig": {
|
||||
"@nx/js": {
|
||||
"analyzeSourceFiles": true
|
||||
}
|
||||
},
|
||||
"nxCloudAccessToken": "MzczOGQ0MDAtNTU1MC00NzMzLTk0YmMtMzQ5ZWYyMTQzNmRjfHJlYWQtd3JpdGU=",
|
||||
"namedInputs": {
|
||||
"default": ["{projectRoot}/**/*", "sharedGlobals"],
|
||||
"sharedGlobals": [],
|
||||
"production": ["default"]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
43
package.json
43
package.json
|
|
@ -28,7 +28,6 @@
|
|||
"@openfeature/flagd-web-provider": "^0.4.0",
|
||||
"@openfeature/go-feature-flag-provider": "^0.5.14",
|
||||
"@openfeature/js-sdk": "^1.4.1",
|
||||
"@openfeature/open-telemetry-hook": "^5.1.1",
|
||||
"@openfeature/open-telemetry-hooks": "^0.2.3",
|
||||
"@openfeature/web-sdk": "0.4.0",
|
||||
"@opentelemetry/api": "~1.6.0",
|
||||
|
|
@ -69,19 +68,19 @@
|
|||
"@mui/material": "^5.11.3",
|
||||
"@nestjs/schematics": "9.2.0",
|
||||
"@nestjs/testing": "9.4.3",
|
||||
"@nrwl/tao": "16.4.0",
|
||||
"@nx/devkit": "16.4.0",
|
||||
"@nx/eslint-plugin": "16.4.0",
|
||||
"@nx/express": "16.4.0",
|
||||
"@nx/jest": "16.4.0",
|
||||
"@nx/js": "16.4.0",
|
||||
"@nx/linter": "16.4.0",
|
||||
"@nx/nest": "16.4.0",
|
||||
"@nx/node": "16.4.0",
|
||||
"@nx/react": "16.4.0",
|
||||
"@nx/web": "16.4.0",
|
||||
"@nx/webpack": "16.4.0",
|
||||
"@nx/workspace": "16.4.0",
|
||||
"@nrwl/tao": "17.1.3",
|
||||
"@nx/devkit": "17.1.3",
|
||||
"@nx/eslint-plugin": "17.1.3",
|
||||
"@nx/express": "17.1.3",
|
||||
"@nx/jest": "17.1.3",
|
||||
"@nx/js": "17.1.3",
|
||||
"@nx/linter": "17.1.3",
|
||||
"@nx/nest": "17.1.3",
|
||||
"@nx/node": "17.1.3",
|
||||
"@nx/react": "17.1.3",
|
||||
"@nx/web": "17.1.3",
|
||||
"@nx/webpack": "17.1.3",
|
||||
"@nx/workspace": "17.1.3",
|
||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
|
||||
"@reactour/tour": "^3.1.8",
|
||||
"@svgr/webpack": "^8.0.0",
|
||||
|
|
@ -90,19 +89,19 @@
|
|||
"@types/express": "4.17.21",
|
||||
"@types/jest": "^29.2.5",
|
||||
"@types/node": "18.18.9",
|
||||
"@types/react": "18.2.37",
|
||||
"@types/react-dom": "18.2.15",
|
||||
"@types/react": "18.2.24",
|
||||
"@types/react-dom": "18.2.9",
|
||||
"@types/react-json-editor-ajrm": "^2.5.3",
|
||||
"@types/react-modal": "^3.13.1",
|
||||
"@types/rox-node": "^5.0.1",
|
||||
"@typescript-eslint/eslint-plugin": "5.60.1",
|
||||
"@typescript-eslint/parser": "5.60.1",
|
||||
"@typescript-eslint/eslint-plugin": "6.13.1",
|
||||
"@typescript-eslint/parser": "6.13.1",
|
||||
"ajv": "^8.12.0",
|
||||
"babel-jest": "^29.3.1",
|
||||
"core-js": "^3.27.1",
|
||||
"css-loader": "^6.7.3",
|
||||
"eslint": "8.43.0",
|
||||
"eslint-config-prettier": "8.8.0",
|
||||
"eslint": "8.46.0",
|
||||
"eslint-config-prettier": "9.0.0",
|
||||
"eslint-plugin-import": "2.27.5",
|
||||
"eslint-plugin-jsx-a11y": "6.7.1",
|
||||
"eslint-plugin-react": "7.32.2",
|
||||
|
|
@ -127,9 +126,9 @@
|
|||
"ts-jest": "29.1.1",
|
||||
"ts-node": "10.9.1",
|
||||
"tslib": "^2.4.1",
|
||||
"typescript": "5.1.6",
|
||||
"typescript": "5.2.2",
|
||||
"url-loader": "^4.1.1",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack": "5.89.0",
|
||||
"webpack-merge": "^5.8.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FROM node:20.3-bullseye-slim AS builder
|
||||
FROM node:20.3-bullseye AS builder
|
||||
WORKDIR /tmp/playground/
|
||||
COPY package*.json workspace.json tsconfig*.json nx.json babel.config.json ./
|
||||
COPY schemas/ ./schemas/
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/app"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/app"],
|
||||
"options": {
|
||||
"jestConfig": "packages/app/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -1,23 +1,22 @@
|
|||
import { HttpModule } from '@nestjs/axios';
|
||||
import { MiddlewareConsumer, Module, NestModule, Scope } from '@nestjs/common';
|
||||
import { REQUEST } from '@nestjs/core';
|
||||
import { ServeStaticModule } from '@nestjs/serve-static';
|
||||
import { AsyncLocalStorageTransactionContext, LoggingHook, OpenFeatureLogger } from '@openfeature/extra';
|
||||
import { FlagMetadata, OpenFeature } from '@openfeature/js-sdk';
|
||||
import { TracingHook as SpanEventBasedTracingHook, MetricsHook } from '@openfeature/open-telemetry-hooks';
|
||||
import { OpenTelemetryHook as SpanBasedTracingHook } from '@openfeature/open-telemetry-hook';
|
||||
import { ProviderService } from '@openfeature/provider';
|
||||
import { Request } from 'express';
|
||||
import { Agent } from 'http';
|
||||
import { LoggerModule } from 'nestjs-pino';
|
||||
import { join } from 'path';
|
||||
import { OPENFEATURE_CLIENT, REQUEST_DATA } from './constants';
|
||||
import { FibonacciAsAServiceController } from './fibonacci-as-a-service.controller';
|
||||
import { FibonacciService } from './fibonacci/fibonacci.service';
|
||||
import { ProvidersController } from './providers.controller';
|
||||
import { TransactionContextMiddleware } from './transaction-context.middleware';
|
||||
import { RequestData } from './types';
|
||||
import { UtilsController } from './utils.controller';
|
||||
import {HttpModule} from '@nestjs/axios';
|
||||
import {MiddlewareConsumer, Module, NestModule, Scope} from '@nestjs/common';
|
||||
import {REQUEST} from '@nestjs/core';
|
||||
import {ServeStaticModule} from '@nestjs/serve-static';
|
||||
import {AsyncLocalStorageTransactionContext, LoggingHook, OpenFeatureLogger} from '@openfeature/extra';
|
||||
import {FlagMetadata, OpenFeature} from '@openfeature/js-sdk';
|
||||
import {MetricsHook, TracingHook as SpanEventBasedTracingHook} from '@openfeature/open-telemetry-hooks';
|
||||
import {ProviderService} from '@openfeature/provider';
|
||||
import {Request} from 'express';
|
||||
import {Agent} from 'http';
|
||||
import {LoggerModule} from 'nestjs-pino';
|
||||
import {join} from 'path';
|
||||
import {OPENFEATURE_CLIENT, REQUEST_DATA} from './constants';
|
||||
import {FibonacciAsAServiceController} from './fibonacci-as-a-service.controller';
|
||||
import {FibonacciService} from './fibonacci/fibonacci.service';
|
||||
import {ProvidersController} from './providers.controller';
|
||||
import {TransactionContextMiddleware} from './transaction-context.middleware';
|
||||
import {RequestData} from './types';
|
||||
import {UtilsController} from './utils.controller';
|
||||
|
||||
/**
|
||||
* Set a global logger for OpenFeature. This is logger will available in hooks.
|
||||
|
|
@ -30,16 +29,14 @@ function attributeMapper(flagMetadata: FlagMetadata) {
|
|||
};
|
||||
}
|
||||
|
||||
const traceHook =
|
||||
process.env.ENABLED_SPAN_BASED_TRACES === 'true'
|
||||
? new SpanBasedTracingHook()
|
||||
: new SpanEventBasedTracingHook({ attributeMapper });
|
||||
|
||||
/**
|
||||
* Adding hooks to at the global level will ensure they always run
|
||||
* as part of a flag evaluation lifecycle.
|
||||
*/
|
||||
OpenFeature.addHooks(new LoggingHook(), traceHook, new MetricsHook({ attributeMapper }));
|
||||
OpenFeature.addHooks(
|
||||
new LoggingHook(),
|
||||
new SpanEventBasedTracingHook({attributeMapper}),
|
||||
new MetricsHook({attributeMapper}));
|
||||
|
||||
/**
|
||||
* The transaction context propagator is an experimental feature
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/fibonacci-service"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/fibonacci-service"],
|
||||
"options": {
|
||||
"jestConfig": "packages/fibonacci-service/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -1,14 +1,12 @@
|
|||
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
||||
|
||||
import { AppController } from './app.controller';
|
||||
import { LoggerModule } from 'nestjs-pino';
|
||||
import { FlagMetadata, OpenFeature } from '@openfeature/js-sdk';
|
||||
import { AsyncLocalStorageTransactionContext, LoggingHook, OpenFeatureLogger } from '@openfeature/extra';
|
||||
import { TracingHook as SpanEventBasedTracingHook, MetricsHook } from '@openfeature/open-telemetry-hooks';
|
||||
import { OpenTelemetryHook as SpanBasedTracingHook } from '@openfeature/open-telemetry-hook';
|
||||
import { TransactionContextMiddleware } from './transaction-context.middleware';
|
||||
import { ProviderService } from '@openfeature/provider';
|
||||
import { ProvidersController } from './providers.controller';
|
||||
import {MiddlewareConsumer, Module, NestModule} from '@nestjs/common';
|
||||
import {AppController} from './app.controller';
|
||||
import {LoggerModule} from 'nestjs-pino';
|
||||
import {FlagMetadata, OpenFeature} from '@openfeature/js-sdk';
|
||||
import {AsyncLocalStorageTransactionContext, LoggingHook, OpenFeatureLogger} from '@openfeature/extra';
|
||||
import {MetricsHook, TracingHook as SpanEventBasedTracingHook} from '@openfeature/open-telemetry-hooks';
|
||||
import {TransactionContextMiddleware} from './transaction-context.middleware';
|
||||
import {ProviderService} from '@openfeature/provider';
|
||||
import {ProvidersController} from './providers.controller';
|
||||
|
||||
/**
|
||||
* Set a global logger for OpenFeature. This is logger will available in hooks.
|
||||
|
|
@ -21,16 +19,14 @@ function attributeMapper(flagMetadata: FlagMetadata) {
|
|||
};
|
||||
}
|
||||
|
||||
const traceHook =
|
||||
process.env.ENABLED_SPAN_BASED_TRACES === 'true'
|
||||
? new SpanBasedTracingHook()
|
||||
: new SpanEventBasedTracingHook({ attributeMapper });
|
||||
|
||||
/**
|
||||
* Adding hooks to at the global level will ensure they always run
|
||||
* as part of a flag evaluation lifecycle.
|
||||
*/
|
||||
OpenFeature.addHooks(new LoggingHook(), traceHook, new MetricsHook({ attributeMapper }));
|
||||
OpenFeature.addHooks(
|
||||
new LoggingHook(),
|
||||
new SpanEventBasedTracingHook({attributeMapper}),
|
||||
new MetricsHook({ attributeMapper }));
|
||||
|
||||
/**
|
||||
* The transaction context propagator is an experimental feature
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/fibonacci"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/fibonacci"],
|
||||
"options": {
|
||||
"jestConfig": "packages/fibonacci/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/js-flagsmith-provider"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/js-flagsmith-provider"],
|
||||
"options": {
|
||||
"jestConfig": "packages/js-flagsmith-provider/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/js-harness-provider"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/js-harness-provider"],
|
||||
"options": {
|
||||
"jestConfig": "packages/js-harness-provider/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/js-launchdarkly-provider"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/js-launchdarkly-provider"],
|
||||
"options": {
|
||||
"jestConfig": "packages/js-launchdarkly-provider/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/js-split-provider"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/js-split-provider"],
|
||||
"options": {
|
||||
"jestConfig": "packages/js-split-provider/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/openfeature-extra"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/openfeature-extra"],
|
||||
"options": {
|
||||
"jestConfig": "packages/openfeature-extra/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { EvaluationDetails, Hook, HookContext, JsonObject } from '@openfeature/js-sdk';
|
||||
import { validateSync } from 'class-validator';
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
type Class = { new (data: any): any };
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ export class ProviderService {
|
|||
if (!appKey) {
|
||||
throw new Error('"CLOUDBEES_APP_KEY" must be defined.');
|
||||
} else {
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
return CloudbeesProvider.build(appKey) as any;
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["coverage/packages/ui"],
|
||||
"outputs": ["{workspaceRoot}/coverage/packages/ui"],
|
||||
"options": {
|
||||
"jestConfig": "packages/ui/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ type ProviderMap = Record<
|
|||
export class Demos extends Component<
|
||||
Readonly<Record<string, never>>,
|
||||
{
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
json: any;
|
||||
editorOn: boolean;
|
||||
editorAccess: boolean;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ export class CloudbeesWebProvider implements Provider {
|
|||
name: 'CloudBees web provider',
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
async initialize(context: EvaluationContext): Promise<void> {
|
||||
await setup(this.options.key, {
|
||||
configurationFetchedHandler: this.changedHandler,
|
||||
|
|
@ -47,6 +48,7 @@ export class CloudbeesWebProvider implements Provider {
|
|||
flagKey: string,
|
||||
defaultValue: boolean,
|
||||
context: EvaluationContext,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
logger: Logger
|
||||
): ResolutionDetails<boolean> {
|
||||
return {
|
||||
|
|
@ -58,6 +60,7 @@ export class CloudbeesWebProvider implements Provider {
|
|||
flagKey: string,
|
||||
defaultValue: string,
|
||||
context: EvaluationContext,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
logger: Logger
|
||||
): ResolutionDetails<string> {
|
||||
return {
|
||||
|
|
@ -69,6 +72,7 @@ export class CloudbeesWebProvider implements Provider {
|
|||
flagKey: string,
|
||||
defaultValue: number,
|
||||
context: EvaluationContext,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
logger: Logger
|
||||
): ResolutionDetails<number> {
|
||||
return {
|
||||
|
|
@ -76,12 +80,8 @@ export class CloudbeesWebProvider implements Provider {
|
|||
};
|
||||
}
|
||||
|
||||
resolveObjectEvaluation<T extends JsonValue>(
|
||||
flagKey: string,
|
||||
defaultValue: T,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<T> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveObjectEvaluation<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger): ResolutionDetails<T> {
|
||||
throw new Error('not implemented');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ export class FlagsmithProvider implements Provider {
|
|||
.init({
|
||||
environmentID: this.options.environmentID,
|
||||
realtime: true,
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
traits: context as any,
|
||||
identity: context.targetingKey || 'anon',
|
||||
onChange: (oldFlags, params) => {
|
||||
|
|
@ -78,6 +79,7 @@ export class FlagsmithProvider implements Provider {
|
|||
flagsmith.stopListening();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveBooleanEvaluation(flagKey: string, _: boolean, context: EvaluationContext): ResolutionDetails<boolean> {
|
||||
const details = this.evaluate(flagKey);
|
||||
if (typeof details.value === 'boolean') {
|
||||
|
|
@ -88,6 +90,7 @@ export class FlagsmithProvider implements Provider {
|
|||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveStringEvaluation(flagKey: string, _: string, context: EvaluationContext): ResolutionDetails<string> {
|
||||
const details = this.evaluate(flagKey);
|
||||
if (typeof details.value === 'string') {
|
||||
|
|
@ -98,6 +101,7 @@ export class FlagsmithProvider implements Provider {
|
|||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveNumberEvaluation(flagKey: string, _: number, context: EvaluationContext): ResolutionDetails<number> {
|
||||
const details = this.evaluate(flagKey);
|
||||
if (typeof details.value === 'number') {
|
||||
|
|
@ -108,11 +112,8 @@ export class FlagsmithProvider implements Provider {
|
|||
}
|
||||
}
|
||||
|
||||
resolveObjectEvaluation<U extends JsonValue>(
|
||||
flagKey: string,
|
||||
_: U,
|
||||
context: EvaluationContext
|
||||
): ResolutionDetails<U> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveObjectEvaluation<U extends JsonValue>(flagKey: string, _: U, context: EvaluationContext): ResolutionDetails<U> {
|
||||
const details = this.evaluate(flagKey);
|
||||
if (typeof details.value === 'string') {
|
||||
// we may want to allow the parsing to be customized.
|
||||
|
|
@ -135,4 +136,4 @@ export class FlagsmithProvider implements Provider {
|
|||
private getFlagTypeErrorMessage(flagKey: string, value: unknown, expectedType: string) {
|
||||
return `Flag value ${flagKey} had unexpected type ${typeof value}, expected ${expectedType}.`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import {
|
|||
ProviderStatus,
|
||||
} from '@openfeature/web-sdk';
|
||||
|
||||
type ValueTypes = 'boolean' | 'string' | 'number' | 'object';
|
||||
type ValueTypes = 'boolean' | 'string' | 'number' | 'object';
|
||||
|
||||
/**
|
||||
* NOTE: This is an unofficial provider that was created for demonstration
|
||||
|
|
@ -53,6 +53,7 @@ export class HarnessWebProvider implements Provider {
|
|||
const oldClient = this._client;
|
||||
const client = initialize(this.apiKey, { identifier: newContext.targetingKey || 'anon', attributes: newContext });
|
||||
// needed?
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
return new Promise((resolve, reject) => {
|
||||
client.on(HarnessEvent.READY, () => {
|
||||
oldClient.close();
|
||||
|
|
@ -67,39 +68,23 @@ export class HarnessWebProvider implements Provider {
|
|||
return Promise.resolve(this._client.close());
|
||||
}
|
||||
|
||||
resolveBooleanEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: boolean,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<boolean> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext, logger: Logger): ResolutionDetails<boolean> {
|
||||
return this.resolve(flagKey, defaultValue, 'boolean');
|
||||
}
|
||||
|
||||
resolveStringEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: string,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<string> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext, logger: Logger): ResolutionDetails<string> {
|
||||
return this.resolve(flagKey, defaultValue, 'string');
|
||||
}
|
||||
|
||||
resolveNumberEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: number,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<number> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext, logger: Logger): ResolutionDetails<number> {
|
||||
return this.resolve(flagKey, defaultValue, 'number');
|
||||
}
|
||||
|
||||
resolveObjectEvaluation<T extends JsonValue>(
|
||||
flagKey: string,
|
||||
defaultValue: T,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<T> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveObjectEvaluation<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger): ResolutionDetails<T> {
|
||||
return this.resolve(flagKey, defaultValue, 'object');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,11 +68,8 @@ export class LaunchDarklyProvider implements Provider {
|
|||
this.client.close();
|
||||
}
|
||||
|
||||
resolveBooleanEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: boolean,
|
||||
context: EvaluationContext
|
||||
): ResolutionDetails<boolean> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext): ResolutionDetails<boolean> {
|
||||
const details = this.evaluateFlag<boolean>(flagKey, defaultValue);
|
||||
if (typeof details.value === 'boolean') {
|
||||
return details;
|
||||
|
|
@ -81,11 +78,8 @@ export class LaunchDarklyProvider implements Provider {
|
|||
}
|
||||
}
|
||||
|
||||
resolveStringEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: string,
|
||||
context: EvaluationContext
|
||||
): ResolutionDetails<string> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext): ResolutionDetails<string> {
|
||||
const details = this.evaluateFlag<string>(flagKey, defaultValue);
|
||||
if (typeof details.value === 'string') {
|
||||
return details;
|
||||
|
|
@ -94,11 +88,8 @@ export class LaunchDarklyProvider implements Provider {
|
|||
}
|
||||
}
|
||||
|
||||
resolveNumberEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: number,
|
||||
context: EvaluationContext
|
||||
): ResolutionDetails<number> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext): ResolutionDetails<number> {
|
||||
const details = this.evaluateFlag<number>(flagKey, defaultValue);
|
||||
if (typeof details.value === 'number') {
|
||||
return details;
|
||||
|
|
@ -107,11 +98,8 @@ export class LaunchDarklyProvider implements Provider {
|
|||
}
|
||||
}
|
||||
|
||||
resolveObjectEvaluation<U extends JsonValue>(
|
||||
flagKey: string,
|
||||
defaultValue: U,
|
||||
context: EvaluationContext
|
||||
): ResolutionDetails<U> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveObjectEvaluation<U extends JsonValue>(flagKey: string, defaultValue: U, context: EvaluationContext): ResolutionDetails<U> {
|
||||
const details = this.evaluateFlag<unknown>(flagKey, JSON.stringify(defaultValue));
|
||||
if (typeof details.value === 'string') {
|
||||
// we may want to allow the parsing to be customized.
|
||||
|
|
|
|||
|
|
@ -67,12 +67,8 @@ export class SplitWebProvider implements Provider {
|
|||
this.client.setAttributes(JSON.parse(JSON.stringify(newContext)));
|
||||
}
|
||||
|
||||
resolveBooleanEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: boolean,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<boolean> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext, logger: Logger): ResolutionDetails<boolean> {
|
||||
const treatment = this.resolve(flagKey);
|
||||
let value: boolean;
|
||||
switch (treatment as unknown) {
|
||||
|
|
@ -99,32 +95,20 @@ export class SplitWebProvider implements Provider {
|
|||
}
|
||||
return { value };
|
||||
}
|
||||
resolveStringEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: string,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<string> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext, logger: Logger): ResolutionDetails<string> {
|
||||
return {
|
||||
value: this.resolve(flagKey),
|
||||
};
|
||||
}
|
||||
resolveNumberEvaluation(
|
||||
flagKey: string,
|
||||
defaultValue: number,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<number> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext, logger: Logger): ResolutionDetails<number> {
|
||||
return {
|
||||
value: parseValidNumber(this.resolve(flagKey)),
|
||||
};
|
||||
}
|
||||
resolveObjectEvaluation<T extends JsonValue>(
|
||||
flagKey: string,
|
||||
defaultValue: T,
|
||||
context: EvaluationContext,
|
||||
logger: Logger
|
||||
): ResolutionDetails<T> {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
resolveObjectEvaluation<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger): ResolutionDetails<T> {
|
||||
return {
|
||||
value: parseValidJsonObject(this.resolve(flagKey)),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@
|
|||
"bump-minor-pre-major": false,
|
||||
"bump-patch-for-minor-pre-major": false,
|
||||
"extra-files": [
|
||||
"docker-compose.yaml"
|
||||
"docker-compose.yaml",
|
||||
"config/k8s/end-to-end.yaml"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
"version": 2,
|
||||
"projects": {
|
||||
"app": "packages/app",
|
||||
"fibonacci": "packages/fibonacci",
|
||||
"fibonacci-service": "packages/fibonacci-service",
|
||||
"js-flagsmith-provider": "packages/js-flagsmith-provider",
|
||||
"js-harness-provider": "packages/js-harness-provider",
|
||||
"js-launchdarkly-provider": "packages/js-launchdarkly-provider",
|
||||
"js-split-provider": "packages/js-split-provider",
|
||||
"openfeature-extra": "packages/openfeature-extra",
|
||||
"openfeature-propagator": "packages/openfeature-propagator",
|
||||
"provider": "packages/provider",
|
||||
"ui": "packages/ui",
|
||||
"utils": "packages/utils",
|
||||
"web-cloudbees-provider": "packages/web-cloudbees-provider",
|
||||
"web-flagsmith-provider": "packages/web-flagsmith-provider",
|
||||
"web-harness-provider": "packages/web-harness-provider",
|
||||
"web-launchdarkly-provider": "packages/web-launchdarkly-provider",
|
||||
"web-split-provider": "packages/web-split-provider"
|
||||
},
|
||||
"$schema": "./node_modules/nx/schemas/workspace-schema.json"
|
||||
}
|
||||
Loading…
Reference in New Issue