From 01fcb933d2cbd131a0f4a005173cdd1906087e18 Mon Sep 17 00:00:00 2001 From: Todd Baert Date: Wed, 16 Oct 2024 14:33:47 -0400 Subject: [PATCH] chore: import type lint rule and fixes (#1039) Inspired by [this comment](https://github.com/open-feature/js-sdk/pull/1020#discussion_r1777829664) I've added a lint rule to enforce `import type`, and some additional package changes to add a `lint:fix`. The only changes I made manually here is to add the lint rule, and the package.json script. All the changes are auto-generated by the `lint:fix`. --------- Signed-off-by: Todd Baert --- .eslintrc.json | 115 ++++++++---------- package.json | 1 + packages/angular/angular.json | 3 +- packages/angular/package.json | 1 + packages/nest/package.json | 3 +- packages/nest/src/context-factory.ts | 5 +- .../src/evaluation-context-interceptor.ts | 6 +- packages/nest/src/feature.decorator.ts | 8 +- packages/nest/src/open-feature.module.ts | 17 +-- packages/nest/src/shutdown.service.ts | 3 +- packages/nest/test/fixtures.ts | 2 +- packages/nest/test/open-feature-sdk.spec.ts | 5 +- .../nest/test/open-feature.module.spec.ts | 6 +- packages/nest/test/test-app.ts | 5 +- packages/react/package.json | 3 +- packages/react/src/common/options.ts | 2 +- packages/react/src/common/suspense.ts | 3 +- .../react/src/evaluation/hook-flag-query.ts | 7 +- .../react/src/evaluation/use-feature-flag.ts | 10 +- packages/react/src/provider/context.ts | 5 +- packages/react/src/provider/provider.tsx | 5 +- packages/react/src/provider/test-provider.tsx | 9 +- .../use-open-feature-client-status.ts | 3 +- .../src/provider/use-open-feature-client.ts | 2 +- .../src/provider/use-when-provider-ready.ts | 3 +- packages/react/src/query/query.ts | 2 +- packages/react/test/evaluation.spec.tsx | 7 +- packages/react/test/provider.spec.tsx | 3 +- packages/react/test/test-provider.spec.tsx | 2 +- .../e2e/step-definitions/evaluation.spec.ts | 5 +- packages/server/package.json | 1 + packages/server/src/client/client.ts | 8 +- .../client/internal/open-feature-client.ts | 20 +-- packages/server/src/evaluation/evaluation.ts | 4 +- .../events/internal/internal-event-emitter.ts | 2 +- .../src/events/open-feature-event-emitter.ts | 2 +- packages/server/src/hooks/hook.ts | 2 +- packages/server/src/open-feature.ts | 19 +-- .../in-memory-provider/flag-configuration.ts | 2 +- .../in-memory-provider/in-memory-provider.ts | 13 +- .../server/src/provider/no-op-provider.ts | 4 +- packages/server/src/provider/provider.ts | 5 +- ...-storage-transaction-context-propagator.ts | 4 +- .../no-op-transaction-context-propagator.ts | 4 +- .../transaction-context.ts | 2 +- packages/server/test/client.spec.ts | 19 +-- .../server/test/evaluation-context.spec.ts | 3 +- packages/server/test/events.spec.ts | 14 ++- packages/server/test/hooks.spec.ts | 7 +- packages/server/test/logger.spec.ts | 3 +- packages/server/test/open-feature.spec.ts | 5 +- packages/shared/package.json | 3 +- packages/shared/src/client/client.ts | 2 +- .../shared/src/errors/flag-not-found-error.ts | 3 +- packages/shared/src/errors/general-error.ts | 3 +- .../src/errors/invalid-context-error.ts | 3 +- .../src/errors/open-feature-error-abstract.ts | 2 +- packages/shared/src/errors/parse-error.ts | 3 +- .../shared/src/errors/provider-fatal-error.ts | 3 +- .../src/errors/provider-not-ready-error.ts | 3 +- .../src/errors/targeting-key-missing-error.ts | 3 +- .../shared/src/errors/type-mismatch-error.ts | 3 +- packages/shared/src/evaluation/context.ts | 2 +- packages/shared/src/events/event-utils.ts | 6 +- packages/shared/src/events/eventing.ts | 5 +- .../src/events/generic-event-emitter.ts | 10 +- .../src/events/provider-event-emitter.ts | 6 +- .../shared/src/hooks/evaluation-lifecycle.ts | 2 +- packages/shared/src/hooks/hook.ts | 4 +- packages/shared/src/hooks/hooks.ts | 8 +- packages/shared/src/logger/default-logger.ts | 2 +- packages/shared/src/logger/safe-logger.ts | 2 +- packages/shared/src/open-feature.ts | 22 ++-- packages/shared/src/provider/provider.ts | 6 +- packages/shared/test/events.spec.ts | 3 +- .../e2e/step-definitions/evaluation.spec.ts | 5 +- packages/web/package.json | 1 + packages/web/src/client/client.ts | 8 +- .../client/internal/open-feature-client.ts | 20 +-- packages/web/src/evaluation/evaluation.ts | 2 +- .../events/internal/internal-event-emitter.ts | 5 +- .../src/events/open-feature-event-emitter.ts | 2 +- packages/web/src/hooks/hook.ts | 2 +- packages/web/src/open-feature.ts | 12 +- .../in-memory-provider/flag-configuration.ts | 2 +- .../in-memory-provider/in-memory-provider.ts | 13 +- packages/web/src/provider/no-op-provider.ts | 4 +- packages/web/src/provider/provider.ts | 5 +- packages/web/test/client.spec.ts | 13 +- packages/web/test/evaluation-context.spec.ts | 3 +- packages/web/test/events.spec.ts | 16 +-- packages/web/test/hooks.spec.ts | 5 +- packages/web/test/open-feature.spec.ts | 5 +- 93 files changed, 348 insertions(+), 278 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 4e9a1c2af..a08b5bd52 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,63 +1,54 @@ { - "env": { - "browser": true, - "es2021": true - }, - "ignorePatterns": ["**/dist/**/*"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - "plugin:jsdoc/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint", - "check-file", - "jsdoc" - ], - "rules": { - "jsdoc/require-jsdoc": [ - "warn", - { - "publicOnly": true - } - ], - "jsdoc/check-tag-names": [ - "warn", - { - "definedTags": [ - "experimental" - ] - } - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "single", - { - "avoidEscape": true - } - ], - "semi": [ - "error", - "always" - ], - "check-file/filename-naming-convention": [ - "error", - { - "**/*.{js,ts}": "KEBAB_CASE" - }, - { - "ignoreMiddleExtensions": true - } - ] - } -} \ No newline at end of file + "env": { + "browser": true, + "es2021": true + }, + "ignorePatterns": ["**/dist/**/*"], + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:jsdoc/recommended"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["@typescript-eslint", "check-file", "jsdoc"], + "rules": { + "@typescript-eslint/consistent-type-imports": [ + "error", + { + "disallowTypeAnnotations": true, + "fixStyle": "separate-type-imports", + "prefer": "type-imports" + } + ], + "jsdoc/require-jsdoc": [ + "warn", + { + "publicOnly": true + } + ], + "jsdoc/check-tag-names": [ + "warn", + { + "definedTags": ["experimental"] + } + ], + "linebreak-style": ["error", "unix"], + "quotes": [ + "error", + "single", + { + "avoidEscape": true + } + ], + "semi": ["error", "always"], + "check-file/filename-naming-convention": [ + "error", + { + "**/*.{js,ts}": "KEBAB_CASE" + }, + { + "ignoreMiddleExtensions": true + } + ] + } +} diff --git a/package.json b/package.json index c0452956b..8c0352a67 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "e2e-web": "git submodule update --init --recursive && shx cp test-harness/features/evaluation.feature packages/web/e2e/features && jest --selectProjects=web-e2e --verbose", "e2e": "npm run e2e-server && npm run e2e-web", "lint": "npm run lint --workspace=packages/shared --workspace=packages/server --workspace=packages/web --workspace=packages/react --workspace=packages/angular --workspace=packages/nest", + "lint:fix": "npm run lint:fix --workspace=packages/shared --workspace=packages/server --workspace=packages/web --workspace=packages/react --workspace=packages/angular --workspace=packages/nest", "clean": "shx rm -rf ./dist", "build": "npm run build --workspace=packages/shared --workspace=packages/server --workspace=packages/web --workspace=packages/react --workspace=packages/angular --workspace=packages/nest", "publish-all": "npm run publish-if-not-exists --workspace=packages/shared --workspace=packages/server --workspace=packages/web --workspace=packages/react --workspace=packages/angular --workspace=packages/nest", diff --git a/packages/angular/angular.json b/packages/angular/angular.json index 3fdc6e91d..1d9cc72d7 100644 --- a/packages/angular/angular.json +++ b/packages/angular/angular.json @@ -39,6 +39,7 @@ "cli": { "schematicCollections": [ "@angular-eslint/schematics" - ] + ], + "analytics": false } } diff --git a/packages/angular/package.json b/packages/angular/package.json index cb782dc67..78ac670f2 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -5,6 +5,7 @@ "ng": "ng", "start": "ng serve", "lint": "ng lint", + "lint:fix": "ng lint --fix", "watch": "ng build --watch --configuration development", "test": "jest", "build": "ng build && npm run postbuild", diff --git a/packages/nest/package.json b/packages/nest/package.json index b73f1d8c6..bef422f85 100644 --- a/packages/nest/package.json +++ b/packages/nest/package.json @@ -16,6 +16,7 @@ "scripts": { "test": "jest --verbose", "lint": "eslint ./", + "lint:fix": "eslint ./ --fix", "clean": "shx rm -rf ./dist", "build:esm": "esbuild src/index.ts --bundle --external:@nestjs/* --external:@openfeature/server-sdk --sourcemap --target=es2015 --platform=node --format=esm --outfile=./dist/esm/index.js --analyze", "build:cjs": "esbuild src/index.ts --bundle --external:@nestjs/* --external:@openfeature/server-sdk --sourcemap --target=es2015 --platform=node --format=cjs --outfile=./dist/cjs/index.js --analyze", @@ -60,4 +61,4 @@ "@types/supertest": "^6.0.0", "supertest": "^7.0.0" } -} \ No newline at end of file +} diff --git a/packages/nest/src/context-factory.ts b/packages/nest/src/context-factory.ts index 241c4fb36..3c1e76fa2 100644 --- a/packages/nest/src/context-factory.ts +++ b/packages/nest/src/context-factory.ts @@ -1,5 +1,6 @@ -import { EvaluationContext } from '@openfeature/core'; -import { ExecutionContext, Inject } from '@nestjs/common'; +import type { EvaluationContext } from '@openfeature/core'; +import type { ExecutionContext} from '@nestjs/common'; +import { Inject } from '@nestjs/common'; /** * A factory function for creating an OpenFeature {@link EvaluationContext} from Nest {@link ExecutionContext}. diff --git a/packages/nest/src/evaluation-context-interceptor.ts b/packages/nest/src/evaluation-context-interceptor.ts index 5ec04d674..0dcf6a4f2 100644 --- a/packages/nest/src/evaluation-context-interceptor.ts +++ b/packages/nest/src/evaluation-context-interceptor.ts @@ -1,5 +1,7 @@ -import { CallHandler, ExecutionContext, Inject, Injectable, NestInterceptor } from '@nestjs/common'; -import { ContextFactory, ContextFactoryToken } from './context-factory'; +import type { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common'; +import { Inject, Injectable } from '@nestjs/common'; +import type { ContextFactory} from './context-factory'; +import { ContextFactoryToken } from './context-factory'; import { Observable } from 'rxjs'; import { OpenFeature } from '@openfeature/server-sdk'; import { OpenFeatureModule } from './open-feature.module'; diff --git a/packages/nest/src/feature.decorator.ts b/packages/nest/src/feature.decorator.ts index 82341b07a..c6dba0623 100644 --- a/packages/nest/src/feature.decorator.ts +++ b/packages/nest/src/feature.decorator.ts @@ -1,14 +1,16 @@ import { createParamDecorator, Inject } from '@nestjs/common'; -import { +import type { EvaluationContext, EvaluationDetails, FlagValue, - JsonValue, + JsonValue} from '@openfeature/server-sdk'; +import { OpenFeature, Client, } from '@openfeature/server-sdk'; import { getOpenFeatureClientToken } from './open-feature.module'; -import { from, Observable } from 'rxjs'; +import type { Observable } from 'rxjs'; +import { from } from 'rxjs'; /** * Options for injecting an OpenFeature client into a constructor. diff --git a/packages/nest/src/open-feature.module.ts b/packages/nest/src/open-feature.module.ts index 77295f85c..6bebf8f08 100644 --- a/packages/nest/src/open-feature.module.ts +++ b/packages/nest/src/open-feature.module.ts @@ -1,24 +1,27 @@ -import { +import type { DynamicModule, - Module, FactoryProvider as NestFactoryProvider, ValueProvider, ClassProvider, - Provider as NestProvider, + Provider as NestProvider} from '@nestjs/common'; +import { + Module, ExecutionContext, } from '@nestjs/common'; -import { +import type { Client, Hook, - OpenFeature, Provider, EvaluationContext, ServerProviderEvents, EventHandler, - Logger, + Logger} from '@openfeature/server-sdk'; +import { + OpenFeature, AsyncLocalStorageTransactionContextPropagator, } from '@openfeature/server-sdk'; -import { ContextFactory, ContextFactoryToken } from './context-factory'; +import type { ContextFactory} from './context-factory'; +import { ContextFactoryToken } from './context-factory'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { EvaluationContextInterceptor } from './evaluation-context-interceptor'; import { ShutdownService } from './shutdown.service'; diff --git a/packages/nest/src/shutdown.service.ts b/packages/nest/src/shutdown.service.ts index 0f5a4fce9..91ccffd7f 100644 --- a/packages/nest/src/shutdown.service.ts +++ b/packages/nest/src/shutdown.service.ts @@ -1,4 +1,5 @@ -import { Injectable, OnApplicationShutdown } from '@nestjs/common'; +import type { OnApplicationShutdown } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { OpenFeature } from '@openfeature/server-sdk'; @Injectable() diff --git a/packages/nest/test/fixtures.ts b/packages/nest/test/fixtures.ts index 856ca8f39..b773682aa 100644 --- a/packages/nest/test/fixtures.ts +++ b/packages/nest/test/fixtures.ts @@ -1,5 +1,5 @@ import { InMemoryProvider } from '@openfeature/server-sdk'; -import { ExecutionContext } from '@nestjs/common'; +import type { ExecutionContext } from '@nestjs/common'; import { OpenFeatureModule } from '../src'; export const defaultProvider = new InMemoryProvider({ diff --git a/packages/nest/test/open-feature-sdk.spec.ts b/packages/nest/test/open-feature-sdk.spec.ts index ee27c5e5e..901f810fd 100644 --- a/packages/nest/test/open-feature-sdk.spec.ts +++ b/packages/nest/test/open-feature-sdk.spec.ts @@ -1,5 +1,6 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { INestApplication } from '@nestjs/common'; +import type { TestingModule } from '@nestjs/testing'; +import { Test } from '@nestjs/testing'; +import type { INestApplication } from '@nestjs/common'; import supertest from 'supertest'; import { OpenFeatureController, OpenFeatureControllerContextScopedController, OpenFeatureTestService } from './test-app'; import { exampleContextFactory, getOpenFeatureDefaultTestModule } from './fixtures'; diff --git a/packages/nest/test/open-feature.module.spec.ts b/packages/nest/test/open-feature.module.spec.ts index cb4453e2a..42962cb67 100644 --- a/packages/nest/test/open-feature.module.spec.ts +++ b/packages/nest/test/open-feature.module.spec.ts @@ -1,6 +1,8 @@ -import { Test, TestingModule } from '@nestjs/testing'; +import type { TestingModule } from '@nestjs/testing'; +import { Test } from '@nestjs/testing'; import { getOpenFeatureClientToken, OpenFeatureModule, ServerProviderEvents } from '../src'; -import { Client, OpenFeature } from '@openfeature/server-sdk'; +import type { Client} from '@openfeature/server-sdk'; +import { OpenFeature } from '@openfeature/server-sdk'; import { getOpenFeatureDefaultTestModule } from './fixtures'; describe('OpenFeatureModule', () => { diff --git a/packages/nest/test/test-app.ts b/packages/nest/test/test-app.ts index b8163cbf8..c717b1a1f 100644 --- a/packages/nest/test/test-app.ts +++ b/packages/nest/test/test-app.ts @@ -1,7 +1,8 @@ import { Controller, Get, Injectable, UseInterceptors } from '@nestjs/common'; -import { Observable, map } from 'rxjs'; +import type { Observable} from 'rxjs'; +import { map } from 'rxjs'; import { BooleanFeatureFlag, ObjectFeatureFlag, NumberFeatureFlag, OpenFeatureClient, StringFeatureFlag } from '../src'; -import { Client, EvaluationDetails, FlagValue } from '@openfeature/server-sdk'; +import type { Client, EvaluationDetails, FlagValue } from '@openfeature/server-sdk'; import { EvaluationContextInterceptor } from '../src'; @Injectable() diff --git a/packages/react/package.json b/packages/react/package.json index 2394cafb2..13e87375c 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -16,6 +16,7 @@ "scripts": { "test": "jest --verbose", "lint": "eslint ./", + "lint:fix": "eslint ./ --fix", "clean": "shx rm -rf ./dist", "build:react-esm": "esbuild src/index.ts --bundle --external:react --external:@openfeature/web-sdk --sourcemap --target=es2015 --platform=browser --format=esm --outfile=./dist/esm/index.js --analyze", "build:react-cjs": "esbuild src/index.ts --bundle --external:react --external:@openfeature/web-sdk --sourcemap --target=es2015 --platform=browser --format=cjs --outfile=./dist/cjs/index.js --analyze", @@ -53,4 +54,4 @@ "@openfeature/core": "*", "@openfeature/web-sdk": "*" } -} \ No newline at end of file +} diff --git a/packages/react/src/common/options.ts b/packages/react/src/common/options.ts index cb9c23973..6f3120c4f 100644 --- a/packages/react/src/common/options.ts +++ b/packages/react/src/common/options.ts @@ -1,4 +1,4 @@ -import { FlagEvaluationOptions } from '@openfeature/web-sdk'; +import type { FlagEvaluationOptions } from '@openfeature/web-sdk'; export type ReactFlagEvaluationOptions = ({ /** diff --git a/packages/react/src/common/suspense.ts b/packages/react/src/common/suspense.ts index a0ac0995d..72f4ca0d0 100644 --- a/packages/react/src/common/suspense.ts +++ b/packages/react/src/common/suspense.ts @@ -1,4 +1,5 @@ -import { Client, ProviderEvents } from '@openfeature/web-sdk'; +import type { Client} from '@openfeature/web-sdk'; +import { ProviderEvents } from '@openfeature/web-sdk'; /** * Suspends until the client is ready to evaluate feature flags. diff --git a/packages/react/src/evaluation/hook-flag-query.ts b/packages/react/src/evaluation/hook-flag-query.ts index 1236a1f2b..9c931a762 100644 --- a/packages/react/src/evaluation/hook-flag-query.ts +++ b/packages/react/src/evaluation/hook-flag-query.ts @@ -1,9 +1,10 @@ -import { +import type { EvaluationDetails, - FlagValue, + FlagValue} from '@openfeature/web-sdk'; +import { StandardResolutionReasons } from '@openfeature/web-sdk'; -import { FlagQuery } from '../query'; +import type { FlagQuery } from '../query'; // FlagQuery implementation, do not export diff --git a/packages/react/src/evaluation/use-feature-flag.ts b/packages/react/src/evaluation/use-feature-flag.ts index fe21c4e38..cbcaea92a 100644 --- a/packages/react/src/evaluation/use-feature-flag.ts +++ b/packages/react/src/evaluation/use-feature-flag.ts @@ -1,21 +1,23 @@ -import { +import type { Client, ClientProviderEvents, EvaluationDetails, EventHandler, FlagEvaluationOptions, FlagValue, - JsonValue, + JsonValue} from '@openfeature/web-sdk'; +import { ProviderEvents, ProviderStatus, } from '@openfeature/web-sdk'; import { useEffect, useRef, useState } from 'react'; -import { DEFAULT_OPTIONS, ReactFlagEvaluationOptions, normalizeOptions } from '../common/options'; +import type { ReactFlagEvaluationOptions} from '../common/options'; +import { DEFAULT_OPTIONS, normalizeOptions } from '../common/options'; import { suspendUntilReady } from '../common/suspense'; import { useProviderOptions } from '../provider/context'; import { useOpenFeatureClient } from '../provider/use-open-feature-client'; import { useOpenFeatureClientStatus } from '../provider/use-open-feature-client-status'; -import { FlagQuery } from '../query'; +import type { FlagQuery } from '../query'; import { HookFlagQuery } from './hook-flag-query'; import { isEqual } from '../common/is-equal'; diff --git a/packages/react/src/provider/context.ts b/packages/react/src/provider/context.ts index ff4f215d3..ca53cb1e3 100644 --- a/packages/react/src/provider/context.ts +++ b/packages/react/src/provider/context.ts @@ -1,6 +1,7 @@ -import { Client } from '@openfeature/web-sdk'; +import type { Client } from '@openfeature/web-sdk'; import React from 'react'; -import { NormalizedOptions, ReactFlagEvaluationOptions, normalizeOptions } from '../common/options'; +import type { NormalizedOptions, ReactFlagEvaluationOptions} from '../common/options'; +import { normalizeOptions } from '../common/options'; /** * The underlying React context. diff --git a/packages/react/src/provider/provider.tsx b/packages/react/src/provider/provider.tsx index e3fb928a3..31cefcb84 100644 --- a/packages/react/src/provider/provider.tsx +++ b/packages/react/src/provider/provider.tsx @@ -1,6 +1,7 @@ -import { Client, OpenFeature } from '@openfeature/web-sdk'; +import type { Client} from '@openfeature/web-sdk'; +import { OpenFeature } from '@openfeature/web-sdk'; import * as React from 'react'; -import { ReactFlagEvaluationOptions } from '../common/options'; +import type { ReactFlagEvaluationOptions } from '../common/options'; import { Context } from './context'; type ClientOrDomain = diff --git a/packages/react/src/provider/test-provider.tsx b/packages/react/src/provider/test-provider.tsx index 91a19d253..38becaf2f 100644 --- a/packages/react/src/provider/test-provider.tsx +++ b/packages/react/src/provider/test-provider.tsx @@ -1,12 +1,13 @@ +import type { + JsonValue, + Provider} from '@openfeature/web-sdk'; import { InMemoryProvider, - JsonValue, NOOP_PROVIDER, - OpenFeature, - Provider, + OpenFeature } from '@openfeature/web-sdk'; import React from 'react'; -import { NormalizedOptions } from '../common/options'; +import type { NormalizedOptions } from '../common/options'; import { OpenFeatureProvider } from './provider'; type FlagValueMap = { [flagKey: string]: JsonValue }; diff --git a/packages/react/src/provider/use-open-feature-client-status.ts b/packages/react/src/provider/use-open-feature-client-status.ts index 4a4b51437..2539f792f 100644 --- a/packages/react/src/provider/use-open-feature-client-status.ts +++ b/packages/react/src/provider/use-open-feature-client-status.ts @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react'; import { useOpenFeatureClient } from './use-open-feature-client'; -import { ProviderEvents, ProviderStatus } from '@openfeature/web-sdk'; +import type { ProviderStatus } from '@openfeature/web-sdk'; +import { ProviderEvents } from '@openfeature/web-sdk'; /** * Get the {@link ProviderStatus} for the OpenFeatureClient. diff --git a/packages/react/src/provider/use-open-feature-client.ts b/packages/react/src/provider/use-open-feature-client.ts index 39bc9a207..9b395fedb 100644 --- a/packages/react/src/provider/use-open-feature-client.ts +++ b/packages/react/src/provider/use-open-feature-client.ts @@ -1,6 +1,6 @@ import React from 'react'; import { Context } from './context'; -import { Client } from '@openfeature/web-sdk'; +import type { Client } from '@openfeature/web-sdk'; /** * Get the {@link Client} instance for this OpenFeatureProvider context. diff --git a/packages/react/src/provider/use-when-provider-ready.ts b/packages/react/src/provider/use-when-provider-ready.ts index f6e00bd8a..885b24a62 100644 --- a/packages/react/src/provider/use-when-provider-ready.ts +++ b/packages/react/src/provider/use-when-provider-ready.ts @@ -1,5 +1,6 @@ import { ProviderStatus } from '@openfeature/web-sdk'; -import { DEFAULT_OPTIONS, ReactFlagEvaluationOptions, normalizeOptions } from '../common/options'; +import type { ReactFlagEvaluationOptions} from '../common/options'; +import { DEFAULT_OPTIONS, normalizeOptions } from '../common/options'; import { useProviderOptions } from './context'; import { useOpenFeatureClient } from './use-open-feature-client'; import { useOpenFeatureClientStatus } from './use-open-feature-client-status'; diff --git a/packages/react/src/query/query.ts b/packages/react/src/query/query.ts index d0f84a99c..5ba215f84 100644 --- a/packages/react/src/query/query.ts +++ b/packages/react/src/query/query.ts @@ -1,4 +1,4 @@ -import { ErrorCode, EvaluationDetails, FlagMetadata, FlagValue, StandardResolutionReasons } from '@openfeature/core'; +import type { ErrorCode, EvaluationDetails, FlagMetadata, FlagValue, StandardResolutionReasons } from '@openfeature/core'; export interface FlagQuery { /** diff --git a/packages/react/test/evaluation.spec.tsx b/packages/react/test/evaluation.spec.tsx index 26418572a..530369719 100644 --- a/packages/react/test/evaluation.spec.tsx +++ b/packages/react/test/evaluation.spec.tsx @@ -1,11 +1,12 @@ import '@testing-library/jest-dom'; // see: https://testing-library.com/docs/react-testing-library/setup import { act, render, renderHook, screen, waitFor } from '@testing-library/react'; import * as React from 'react'; -import { - ErrorCode, +import type { EvaluationContext, EvaluationDetails, - Hook, + Hook} from '../src/'; +import { + ErrorCode, InMemoryProvider, OpenFeature, OpenFeatureProvider, diff --git a/packages/react/test/provider.spec.tsx b/packages/react/test/provider.spec.tsx index fca7f8ad5..7edfec817 100644 --- a/packages/react/test/provider.spec.tsx +++ b/packages/react/test/provider.spec.tsx @@ -1,4 +1,5 @@ -import { EvaluationContext, OpenFeature } from '@openfeature/web-sdk'; +import type { EvaluationContext} from '@openfeature/web-sdk'; +import { OpenFeature } from '@openfeature/web-sdk'; import '@testing-library/jest-dom'; // see: https://testing-library.com/docs/react-testing-library/setup import { render, renderHook, screen, waitFor } from '@testing-library/react'; import * as React from 'react'; diff --git a/packages/react/test/test-provider.spec.tsx b/packages/react/test/test-provider.spec.tsx index 0938fd63a..6006cbcfb 100644 --- a/packages/react/test/test-provider.spec.tsx +++ b/packages/react/test/test-provider.spec.tsx @@ -1,4 +1,4 @@ -import { Provider, ResolutionDetails } from '@openfeature/web-sdk'; +import type { Provider, ResolutionDetails } from '@openfeature/web-sdk'; import '@testing-library/jest-dom'; // see: https://testing-library.com/docs/react-testing-library/setup import { render, screen } from '@testing-library/react'; import * as React from 'react'; diff --git a/packages/server/e2e/step-definitions/evaluation.spec.ts b/packages/server/e2e/step-definitions/evaluation.spec.ts index f27436c07..7ec4333a7 100644 --- a/packages/server/e2e/step-definitions/evaluation.spec.ts +++ b/packages/server/e2e/step-definitions/evaluation.spec.ts @@ -1,9 +1,10 @@ -import { +import type { EvaluationContext, EvaluationDetails, JsonObject, JsonValue, - ResolutionDetails, + ResolutionDetails} from '@openfeature/core'; +import { StandardResolutionReasons, } from '@openfeature/core'; import { defineFeature, loadFeature } from 'jest-cucumber'; diff --git a/packages/server/package.json b/packages/server/package.json index 46c65e4d6..0bcdc4f1d 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -16,6 +16,7 @@ "scripts": { "test": "jest --verbose", "lint": "eslint ./", + "lint:fix": "eslint ./ --fix", "clean": "shx rm -rf ./dist", "build:esm": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2015 --platform=node --format=esm --outfile=./dist/esm/index.js --analyze", "build:cjs": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2015 --platform=node --format=cjs --outfile=./dist/cjs/index.js --analyze", diff --git a/packages/server/src/client/client.ts b/packages/server/src/client/client.ts index 6c31fa6eb..9efe1220d 100644 --- a/packages/server/src/client/client.ts +++ b/packages/server/src/client/client.ts @@ -1,13 +1,13 @@ -import { +import type { ClientMetadata, EvaluationLifeCycle, Eventing, ManageContext, ManageLogger, } from '@openfeature/core'; -import { Features } from '../evaluation'; -import { ProviderStatus } from '../provider'; -import { ProviderEvents } from '../events'; +import type { Features } from '../evaluation'; +import type { ProviderStatus } from '../provider'; +import type { ProviderEvents } from '../events'; export interface Client extends EvaluationLifeCycle, diff --git a/packages/server/src/client/internal/open-feature-client.ts b/packages/server/src/client/internal/open-feature-client.ts index 0e3cd1bbc..5678c8082 100644 --- a/packages/server/src/client/internal/open-feature-client.ts +++ b/packages/server/src/client/internal/open-feature-client.ts @@ -1,6 +1,5 @@ -import { +import type { ClientMetadata, - ErrorCode, EvaluationContext, EvaluationDetails, EventHandler, @@ -10,21 +9,24 @@ import { JsonValue, Logger, OpenFeatureError, + ResolutionDetails} from '@openfeature/core'; +import { + ErrorCode, ProviderFatalError, ProviderNotReadyError, - ResolutionDetails, SafeLogger, StandardResolutionReasons, instantiateErrorByErrorCode, statusMatchesEvent, } from '@openfeature/core'; -import { FlagEvaluationOptions } from '../../evaluation'; -import { ProviderEvents } from '../../events'; -import { InternalEventEmitter } from '../../events/internal/internal-event-emitter'; -import { Hook } from '../../hooks'; +import type { FlagEvaluationOptions } from '../../evaluation'; +import type { ProviderEvents } from '../../events'; +import type { InternalEventEmitter } from '../../events/internal/internal-event-emitter'; +import type { Hook } from '../../hooks'; import { OpenFeature } from '../../open-feature'; -import { Provider, ProviderStatus } from '../../provider'; -import { Client } from './../client'; +import type { Provider} from '../../provider'; +import { ProviderStatus } from '../../provider'; +import type { Client } from './../client'; type OpenFeatureClientOptions = { /** diff --git a/packages/server/src/evaluation/evaluation.ts b/packages/server/src/evaluation/evaluation.ts index 70af4bfdb..b43c4f126 100644 --- a/packages/server/src/evaluation/evaluation.ts +++ b/packages/server/src/evaluation/evaluation.ts @@ -1,5 +1,5 @@ -import { EvaluationContext, EvaluationDetails, HookHints, JsonValue } from '@openfeature/core'; -import { Hook } from '../hooks'; +import type { EvaluationContext, EvaluationDetails, HookHints, JsonValue } from '@openfeature/core'; +import type { Hook } from '../hooks'; export interface FlagEvaluationOptions { hooks?: Hook[]; diff --git a/packages/server/src/events/internal/internal-event-emitter.ts b/packages/server/src/events/internal/internal-event-emitter.ts index 663a8af07..0a5c18c68 100644 --- a/packages/server/src/events/internal/internal-event-emitter.ts +++ b/packages/server/src/events/internal/internal-event-emitter.ts @@ -1,5 +1,5 @@ import { GenericEventEmitter } from '@openfeature/core'; -import { ProviderEvents } from '../events'; +import type { ProviderEvents } from '../events'; /** * The InternalEventEmitter is not exported publicly and should only be used within the SDK. It extends the diff --git a/packages/server/src/events/open-feature-event-emitter.ts b/packages/server/src/events/open-feature-event-emitter.ts index 74039016b..eea9172e5 100644 --- a/packages/server/src/events/open-feature-event-emitter.ts +++ b/packages/server/src/events/open-feature-event-emitter.ts @@ -1,6 +1,6 @@ import { GenericEventEmitter } from '@openfeature/core'; import { EventEmitter } from 'node:events'; -import { ProviderEvents } from './events'; +import type { ProviderEvents } from './events'; /** * The OpenFeatureEventEmitter can be used by provider developers to emit diff --git a/packages/server/src/hooks/hook.ts b/packages/server/src/hooks/hook.ts index b98d83647..c7fb07731 100644 --- a/packages/server/src/hooks/hook.ts +++ b/packages/server/src/hooks/hook.ts @@ -1,4 +1,4 @@ -import { BaseHook, EvaluationContext, FlagValue } from '@openfeature/core'; +import type { BaseHook, EvaluationContext, FlagValue } from '@openfeature/core'; export type Hook = BaseHook< FlagValue, diff --git a/packages/server/src/open-feature.ts b/packages/server/src/open-feature.ts index 03d4b3300..995c08842 100644 --- a/packages/server/src/open-feature.ts +++ b/packages/server/src/open-feature.ts @@ -1,22 +1,25 @@ -import { +import type { EvaluationContext, ManageContext, + ServerProviderStatus} from '@openfeature/core'; +import { OpenFeatureCommonAPI, ProviderWrapper, - ServerProviderStatus, objectOrUndefined, stringOrUndefined, } from '@openfeature/core'; -import { Client } from './client'; +import type { Client } from './client'; import { OpenFeatureClient } from './client/internal/open-feature-client'; import { OpenFeatureEventEmitter } from './events'; -import { Hook } from './hooks'; -import { NOOP_PROVIDER, Provider, ProviderStatus } from './provider'; -import { +import type { Hook } from './hooks'; +import type { Provider} from './provider'; +import { NOOP_PROVIDER, ProviderStatus } from './provider'; +import type { ManageTransactionContextPropagator, - NOOP_TRANSACTION_CONTEXT_PROPAGATOR, TransactionContext, - TransactionContextPropagator, + TransactionContextPropagator} from './transaction-context'; +import { + NOOP_TRANSACTION_CONTEXT_PROPAGATOR } from './transaction-context'; // use a symbol as a key for the global singleton diff --git a/packages/server/src/provider/in-memory-provider/flag-configuration.ts b/packages/server/src/provider/in-memory-provider/flag-configuration.ts index 2bbfc9173..05f507d44 100644 --- a/packages/server/src/provider/in-memory-provider/flag-configuration.ts +++ b/packages/server/src/provider/in-memory-provider/flag-configuration.ts @@ -3,7 +3,7 @@ * It might cause confusion since these types are not a part of the general API, * but just for the in-memory provider. */ -import { EvaluationContext, JsonValue } from '@openfeature/core'; +import type { EvaluationContext, JsonValue } from '@openfeature/core'; type Variants = Record; diff --git a/packages/server/src/provider/in-memory-provider/in-memory-provider.ts b/packages/server/src/provider/in-memory-provider/in-memory-provider.ts index 7c76cdd81..345c4aad7 100644 --- a/packages/server/src/provider/in-memory-provider/in-memory-provider.ts +++ b/packages/server/src/provider/in-memory-provider/in-memory-provider.ts @@ -1,17 +1,18 @@ -import { +import type { EvaluationContext, - FlagNotFoundError, FlagValueType, - GeneralError, JsonValue, Logger, + ResolutionDetails} from '@openfeature/core'; +import { + FlagNotFoundError, + GeneralError, OpenFeatureError, - ResolutionDetails, StandardResolutionReasons, TypeMismatchError } from '@openfeature/core'; -import { Provider } from '../provider'; -import { Flag, FlagConfiguration } from './flag-configuration'; +import type { Provider } from '../provider'; +import type { Flag, FlagConfiguration } from './flag-configuration'; import { VariantFoundError } from './variant-not-found-error'; import { OpenFeatureEventEmitter, ProviderEvents } from '../..'; diff --git a/packages/server/src/provider/no-op-provider.ts b/packages/server/src/provider/no-op-provider.ts index c8db369ca..b7081c08c 100644 --- a/packages/server/src/provider/no-op-provider.ts +++ b/packages/server/src/provider/no-op-provider.ts @@ -1,5 +1,5 @@ -import { JsonValue, ResolutionDetails } from '@openfeature/core'; -import { Provider } from './provider'; +import type { JsonValue, ResolutionDetails } from '@openfeature/core'; +import type { Provider } from './provider'; const REASON_NO_OP = 'No-op'; diff --git a/packages/server/src/provider/provider.ts b/packages/server/src/provider/provider.ts index 63173d3d0..1c001a83e 100644 --- a/packages/server/src/provider/provider.ts +++ b/packages/server/src/provider/provider.ts @@ -1,5 +1,6 @@ -import { CommonProvider, EvaluationContext, JsonValue, Logger, ResolutionDetails, ServerProviderStatus } from '@openfeature/core'; -import { Hook } from '../hooks'; +import type { CommonProvider, EvaluationContext, JsonValue, Logger, ResolutionDetails} from '@openfeature/core'; +import { ServerProviderStatus } from '@openfeature/core'; +import type { Hook } from '../hooks'; export { ServerProviderStatus as ProviderStatus }; diff --git a/packages/server/src/transaction-context/async-local-storage-transaction-context-propagator.ts b/packages/server/src/transaction-context/async-local-storage-transaction-context-propagator.ts index 0be281e6e..21cce7d66 100644 --- a/packages/server/src/transaction-context/async-local-storage-transaction-context-propagator.ts +++ b/packages/server/src/transaction-context/async-local-storage-transaction-context-propagator.ts @@ -1,5 +1,5 @@ -import { EvaluationContext } from '@openfeature/core'; -import { TransactionContext, TransactionContextPropagator } from './transaction-context'; +import type { EvaluationContext } from '@openfeature/core'; +import type { TransactionContext, TransactionContextPropagator } from './transaction-context'; import { AsyncLocalStorage } from 'async_hooks'; export class AsyncLocalStorageTransactionContextPropagator implements TransactionContextPropagator { diff --git a/packages/server/src/transaction-context/no-op-transaction-context-propagator.ts b/packages/server/src/transaction-context/no-op-transaction-context-propagator.ts index beaf063b1..ee0a176f5 100644 --- a/packages/server/src/transaction-context/no-op-transaction-context-propagator.ts +++ b/packages/server/src/transaction-context/no-op-transaction-context-propagator.ts @@ -1,5 +1,5 @@ -import { EvaluationContext } from '@openfeature/core'; -import { TransactionContext, TransactionContextPropagator } from './transaction-context'; +import type { EvaluationContext } from '@openfeature/core'; +import type { TransactionContext, TransactionContextPropagator } from './transaction-context'; class NoopTransactionContextPropagator implements TransactionContextPropagator { getTransactionContext(): EvaluationContext { diff --git a/packages/server/src/transaction-context/transaction-context.ts b/packages/server/src/transaction-context/transaction-context.ts index 5ee79540e..f305a107e 100644 --- a/packages/server/src/transaction-context/transaction-context.ts +++ b/packages/server/src/transaction-context/transaction-context.ts @@ -1,4 +1,4 @@ -import { EvaluationContext } from '@openfeature/core'; +import type { EvaluationContext } from '@openfeature/core'; /** * Transaction context is a mechanism for adding transaction specific context that diff --git a/packages/server/test/client.spec.ts b/packages/server/test/client.spec.ts index bbb44312c..e66048484 100644 --- a/packages/server/test/client.spec.ts +++ b/packages/server/test/client.spec.ts @@ -1,26 +1,27 @@ import { GeneralError } from '@openfeature/core'; -import { +import type { Client, - ErrorCode, EvaluationContext, EvaluationDetails, - FlagNotFoundError, Hook, JsonArray, JsonObject, JsonValue, - OpenFeature, Provider, - ProviderFatalError, - ProviderStatus, ResolutionDetails, - StandardResolutionReasons, TransactionContext, - TransactionContextPropagator, + TransactionContextPropagator} from '../src'; +import { + ErrorCode, + FlagNotFoundError, + OpenFeature, + ProviderFatalError, + ProviderStatus, + StandardResolutionReasons } from '../src'; import { OpenFeatureClient } from '../src/client/internal/open-feature-client'; import { isDeepStrictEqual } from 'node:util'; -import { HookContext } from '@openfeature/core'; +import type { HookContext } from '@openfeature/core'; const BOOLEAN_VALUE = true; const STRING_VALUE = 'val'; diff --git a/packages/server/test/evaluation-context.spec.ts b/packages/server/test/evaluation-context.spec.ts index 1ea2d50ad..223cea8e1 100644 --- a/packages/server/test/evaluation-context.spec.ts +++ b/packages/server/test/evaluation-context.spec.ts @@ -1,4 +1,5 @@ -import { EvaluationContext, OpenFeature } from '../src'; +import type { EvaluationContext} from '../src'; +import { OpenFeature } from '../src'; describe('Evaluation Context', () => { afterEach(async () => { diff --git a/packages/server/test/events.spec.ts b/packages/server/test/events.spec.ts index 044689c66..07b3babe3 100644 --- a/packages/server/test/events.spec.ts +++ b/packages/server/test/events.spec.ts @@ -1,16 +1,18 @@ import { v4 as uuid } from 'uuid'; -import { +import type { JsonValue, - NOOP_PROVIDER, - OpenFeature, - OpenFeatureEventEmitter, Provider, - ProviderEvents, ProviderMetadata, - ProviderStatus, ResolutionDetails, StaleEvent } from '../src'; +import { + NOOP_PROVIDER, + OpenFeature, + OpenFeatureEventEmitter, + ProviderEvents, + ProviderStatus +} from '../src'; const TIMEOUT = 1000; diff --git a/packages/server/test/hooks.spec.ts b/packages/server/test/hooks.spec.ts index 627a68354..006144f2f 100644 --- a/packages/server/test/hooks.spec.ts +++ b/packages/server/test/hooks.spec.ts @@ -1,11 +1,12 @@ -import { - OpenFeature, +import type { Provider, ResolutionDetails, Client, FlagValueType, EvaluationContext, - Hook, + Hook} from '../src'; +import { + OpenFeature, StandardResolutionReasons, ErrorCode, } from '../src'; diff --git a/packages/server/test/logger.spec.ts b/packages/server/test/logger.spec.ts index 93f69b49b..249d0d0f2 100644 --- a/packages/server/test/logger.spec.ts +++ b/packages/server/test/logger.spec.ts @@ -1,4 +1,5 @@ -import { OpenFeature, BaseHook, Logger, Provider, DefaultLogger, SafeLogger } from '../src'; +import type { BaseHook, Logger, Provider} from '../src'; +import { OpenFeature, DefaultLogger, SafeLogger } from '../src'; class MockedLogger implements Logger { error = jest.fn(); diff --git a/packages/server/test/open-feature.spec.ts b/packages/server/test/open-feature.spec.ts index 18b6bfd41..fb83f0c91 100644 --- a/packages/server/test/open-feature.spec.ts +++ b/packages/server/test/open-feature.spec.ts @@ -1,5 +1,6 @@ -import { Paradigm } from '@openfeature/core'; -import { OpenFeature, OpenFeatureAPI, Provider, ProviderStatus } from '../src'; +import type { Paradigm } from '@openfeature/core'; +import type { Provider, ProviderStatus } from '../src'; +import { OpenFeature, OpenFeatureAPI } from '../src'; import { OpenFeatureClient } from '../src/client/internal/open-feature-client'; const mockProvider = (config?: { initialStatus?: ProviderStatus; runsOn?: Paradigm }) => { diff --git a/packages/shared/package.json b/packages/shared/package.json index 7e3a59992..8e28b0661 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -17,6 +17,7 @@ "scripts": { "test": "jest --verbose", "lint": "eslint ./", + "lint:fix": "eslint ./ --fix", "clean": "shx rm -rf ./dist", "type": "tsc --project ./tsconfig.json --declaration --emitDeclarationOnly", "build:esm": "esbuild src/index.ts --bundle --external:events --sourcemap --target=es2015 --format=esm --outfile=./dist/esm/index.js --analyze", @@ -45,4 +46,4 @@ "flags", "toggles" ] -} \ No newline at end of file +} diff --git a/packages/shared/src/client/client.ts b/packages/shared/src/client/client.ts index 6024f6ccf..f487e9ddb 100644 --- a/packages/shared/src/client/client.ts +++ b/packages/shared/src/client/client.ts @@ -1,4 +1,4 @@ -import { ProviderMetadata } from '../provider/provider'; +import type { ProviderMetadata } from '../provider/provider'; export interface ClientMetadata { /** diff --git a/packages/shared/src/errors/flag-not-found-error.ts b/packages/shared/src/errors/flag-not-found-error.ts index c0eb0ff10..1b4bc8d74 100644 --- a/packages/shared/src/errors/flag-not-found-error.ts +++ b/packages/shared/src/errors/flag-not-found-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class FlagNotFoundError extends OpenFeatureError { diff --git a/packages/shared/src/errors/general-error.ts b/packages/shared/src/errors/general-error.ts index 38f5dde4c..2ce948a6f 100644 --- a/packages/shared/src/errors/general-error.ts +++ b/packages/shared/src/errors/general-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class GeneralError extends OpenFeatureError { diff --git a/packages/shared/src/errors/invalid-context-error.ts b/packages/shared/src/errors/invalid-context-error.ts index 360bf0792..8edce7208 100644 --- a/packages/shared/src/errors/invalid-context-error.ts +++ b/packages/shared/src/errors/invalid-context-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class InvalidContextError extends OpenFeatureError { diff --git a/packages/shared/src/errors/open-feature-error-abstract.ts b/packages/shared/src/errors/open-feature-error-abstract.ts index 492ef3288..8d6850c20 100644 --- a/packages/shared/src/errors/open-feature-error-abstract.ts +++ b/packages/shared/src/errors/open-feature-error-abstract.ts @@ -1,4 +1,4 @@ -import { ErrorCode } from '../evaluation'; +import type { ErrorCode } from '../evaluation'; /** * Error Options were added in ES2022. Manually adding the type so that an diff --git a/packages/shared/src/errors/parse-error.ts b/packages/shared/src/errors/parse-error.ts index 06bf62193..2ed5e7e38 100644 --- a/packages/shared/src/errors/parse-error.ts +++ b/packages/shared/src/errors/parse-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class ParseError extends OpenFeatureError { diff --git a/packages/shared/src/errors/provider-fatal-error.ts b/packages/shared/src/errors/provider-fatal-error.ts index 1044fb524..15ba5d15a 100644 --- a/packages/shared/src/errors/provider-fatal-error.ts +++ b/packages/shared/src/errors/provider-fatal-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class ProviderFatalError extends OpenFeatureError { diff --git a/packages/shared/src/errors/provider-not-ready-error.ts b/packages/shared/src/errors/provider-not-ready-error.ts index c5f81d710..3cee9565f 100644 --- a/packages/shared/src/errors/provider-not-ready-error.ts +++ b/packages/shared/src/errors/provider-not-ready-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class ProviderNotReadyError extends OpenFeatureError { diff --git a/packages/shared/src/errors/targeting-key-missing-error.ts b/packages/shared/src/errors/targeting-key-missing-error.ts index 40c8fbb7f..6de0d3365 100644 --- a/packages/shared/src/errors/targeting-key-missing-error.ts +++ b/packages/shared/src/errors/targeting-key-missing-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class TargetingKeyMissingError extends OpenFeatureError { diff --git a/packages/shared/src/errors/type-mismatch-error.ts b/packages/shared/src/errors/type-mismatch-error.ts index a231de180..b9afab9dc 100644 --- a/packages/shared/src/errors/type-mismatch-error.ts +++ b/packages/shared/src/errors/type-mismatch-error.ts @@ -1,4 +1,5 @@ -import { ErrorOptions, OpenFeatureError } from './open-feature-error-abstract'; +import type { ErrorOptions} from './open-feature-error-abstract'; +import { OpenFeatureError } from './open-feature-error-abstract'; import { ErrorCode } from '../evaluation'; export class TypeMismatchError extends OpenFeatureError { diff --git a/packages/shared/src/evaluation/context.ts b/packages/shared/src/evaluation/context.ts index 14de9dbfd..0412fd2a5 100644 --- a/packages/shared/src/evaluation/context.ts +++ b/packages/shared/src/evaluation/context.ts @@ -1,4 +1,4 @@ -import { PrimitiveValue } from './evaluation'; +import type { PrimitiveValue } from './evaluation'; export type EvaluationContextValue = | PrimitiveValue diff --git a/packages/shared/src/events/event-utils.ts b/packages/shared/src/events/event-utils.ts index 3f6cf3fac..68adda349 100644 --- a/packages/shared/src/events/event-utils.ts +++ b/packages/shared/src/events/event-utils.ts @@ -1,5 +1,7 @@ -import { AllProviderStatus, ClientProviderStatus, ServerProviderStatus } from '../provider'; -import { AllProviderEvents, AnyProviderEvent } from './events'; +import type { ClientProviderStatus, ServerProviderStatus } from '../provider'; +import { AllProviderStatus } from '../provider'; +import type { AnyProviderEvent } from './events'; +import { AllProviderEvents } from './events'; const eventStatusMap = { [AllProviderStatus.READY]: AllProviderEvents.Ready, diff --git a/packages/shared/src/events/eventing.ts b/packages/shared/src/events/eventing.ts index 1bb5936fb..976e12cf4 100644 --- a/packages/shared/src/events/eventing.ts +++ b/packages/shared/src/events/eventing.ts @@ -1,5 +1,6 @@ -import { ErrorCode } from '../evaluation'; -import { ClientProviderEvents, ServerProviderEvents, AnyProviderEvent } from './events'; +import type { ErrorCode } from '../evaluation'; +import type { ClientProviderEvents, ServerProviderEvents} from './events'; +import { AnyProviderEvent } from './events'; export type EventMetadata = { [key: string]: string | boolean | number; diff --git a/packages/shared/src/events/generic-event-emitter.ts b/packages/shared/src/events/generic-event-emitter.ts index 43b287d90..27033a066 100644 --- a/packages/shared/src/events/generic-event-emitter.ts +++ b/packages/shared/src/events/generic-event-emitter.ts @@ -1,7 +1,9 @@ -import { Logger, ManageLogger, SafeLogger } from '../logger'; -import { ProviderEventEmitter } from './provider-event-emitter'; -import { EventContext, EventDetails, EventHandler } from './eventing'; -import { AllProviderEvents, AnyProviderEvent } from './events'; +import type { Logger, ManageLogger} from '../logger'; +import { SafeLogger } from '../logger'; +import type { ProviderEventEmitter } from './provider-event-emitter'; +import type { EventContext, EventDetails, EventHandler } from './eventing'; +import type { AnyProviderEvent } from './events'; +import { AllProviderEvents } from './events'; /** * The GenericEventEmitter should only be used within the SDK. It supports additional properties that can be included diff --git a/packages/shared/src/events/provider-event-emitter.ts b/packages/shared/src/events/provider-event-emitter.ts index 71714bc4f..519e059f5 100644 --- a/packages/shared/src/events/provider-event-emitter.ts +++ b/packages/shared/src/events/provider-event-emitter.ts @@ -1,6 +1,6 @@ -import { ManageLogger } from '../logger'; -import { EventContext, EventHandler } from './eventing'; -import { AnyProviderEvent } from './events'; +import type { ManageLogger } from '../logger'; +import type { EventContext, EventHandler } from './eventing'; +import type { AnyProviderEvent } from './events'; /** * Event emitter to be optionally implemented by providers. diff --git a/packages/shared/src/hooks/evaluation-lifecycle.ts b/packages/shared/src/hooks/evaluation-lifecycle.ts index 86c5e953e..361f9c3de 100644 --- a/packages/shared/src/hooks/evaluation-lifecycle.ts +++ b/packages/shared/src/hooks/evaluation-lifecycle.ts @@ -1,4 +1,4 @@ -import { BaseHook } from './hook'; +import type { BaseHook } from './hook'; export interface EvaluationLifeCycle { /** diff --git a/packages/shared/src/hooks/hook.ts b/packages/shared/src/hooks/hook.ts index fe89f1500..54233b80f 100644 --- a/packages/shared/src/hooks/hook.ts +++ b/packages/shared/src/hooks/hook.ts @@ -1,5 +1,5 @@ -import { BeforeHookContext, HookContext, HookHints } from './hooks'; -import { EvaluationDetails, FlagValue } from '../evaluation'; +import type { BeforeHookContext, HookContext, HookHints } from './hooks'; +import type { EvaluationDetails, FlagValue } from '../evaluation'; export interface BaseHook { /** diff --git a/packages/shared/src/hooks/hooks.ts b/packages/shared/src/hooks/hooks.ts index b963d5d35..76233ece3 100644 --- a/packages/shared/src/hooks/hooks.ts +++ b/packages/shared/src/hooks/hooks.ts @@ -1,7 +1,7 @@ -import { ProviderMetadata } from '../provider'; -import { ClientMetadata } from '../client'; -import { EvaluationContext, FlagValue, FlagValueType } from '../evaluation'; -import { Logger } from '../logger'; +import type { ProviderMetadata } from '../provider'; +import type { ClientMetadata } from '../client'; +import type { EvaluationContext, FlagValue, FlagValueType } from '../evaluation'; +import type { Logger } from '../logger'; export type HookHints = Readonly>; diff --git a/packages/shared/src/logger/default-logger.ts b/packages/shared/src/logger/default-logger.ts index d821ac1b2..111ef6125 100644 --- a/packages/shared/src/logger/default-logger.ts +++ b/packages/shared/src/logger/default-logger.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-empty-function */ -import { Logger } from './logger'; +import type { Logger } from './logger'; export class DefaultLogger implements Logger { error(...args: unknown[]): void { diff --git a/packages/shared/src/logger/safe-logger.ts b/packages/shared/src/logger/safe-logger.ts index e9ebd074a..a860f3828 100644 --- a/packages/shared/src/logger/safe-logger.ts +++ b/packages/shared/src/logger/safe-logger.ts @@ -1,4 +1,4 @@ -import { Logger } from './logger'; +import type { Logger } from './logger'; import { DefaultLogger } from './default-logger'; export const LOG_LEVELS: Array = ['error', 'warn', 'info', 'debug']; diff --git a/packages/shared/src/open-feature.ts b/packages/shared/src/open-feature.ts index 2e7f32a10..58e1e6a14 100644 --- a/packages/shared/src/open-feature.ts +++ b/packages/shared/src/open-feature.ts @@ -1,20 +1,24 @@ -import { GeneralError, OpenFeatureError } from './errors'; -import { ErrorCode, EvaluationContext } from './evaluation'; -import { - AllProviderEvents, +import type { OpenFeatureError } from './errors'; +import { GeneralError } from './errors'; +import type { EvaluationContext } from './evaluation'; +import { ErrorCode } from './evaluation'; +import type { AnyProviderEvent, EventDetails, EventHandler, Eventing, - GenericEventEmitter, + GenericEventEmitter} from './events'; +import { + AllProviderEvents, statusMatchesEvent, } from './events'; import { isDefined } from './filter'; -import { BaseHook, EvaluationLifeCycle } from './hooks'; -import { DefaultLogger, Logger, ManageLogger, SafeLogger } from './logger'; -import { ClientProviderStatus, CommonProvider, ProviderMetadata, ServerProviderStatus } from './provider'; +import type { BaseHook, EvaluationLifeCycle } from './hooks'; +import type { Logger, ManageLogger} from './logger'; +import { DefaultLogger, SafeLogger } from './logger'; +import type { ClientProviderStatus, CommonProvider, ProviderMetadata, ServerProviderStatus } from './provider'; import { objectOrUndefined, stringOrUndefined } from './type-guards'; -import { Paradigm } from './types'; +import type { Paradigm } from './types'; type AnyProviderStatus = ClientProviderStatus | ServerProviderStatus; diff --git a/packages/shared/src/provider/provider.ts b/packages/shared/src/provider/provider.ts index e49e01c91..06f869081 100644 --- a/packages/shared/src/provider/provider.ts +++ b/packages/shared/src/provider/provider.ts @@ -1,6 +1,6 @@ -import { EvaluationContext } from '../evaluation'; -import { AnyProviderEvent, ProviderEventEmitter } from '../events'; -import { Metadata, Paradigm } from '../types'; +import type { EvaluationContext } from '../evaluation'; +import type { AnyProviderEvent, ProviderEventEmitter } from '../events'; +import type { Metadata, Paradigm } from '../types'; // TODO: with TypeScript 5+, we can use computed string properties, // so we can extract all of these into a shared set of string consts and use that in both enums diff --git a/packages/shared/test/events.spec.ts b/packages/shared/test/events.spec.ts index b15bb7b3d..f490892a9 100644 --- a/packages/shared/test/events.spec.ts +++ b/packages/shared/test/events.spec.ts @@ -1,5 +1,6 @@ import EventEmitter from 'events'; -import { GenericEventEmitter, Logger, AllProviderEvents, ReadyEvent, AnyProviderEvent } from '../src'; +import type { Logger, ReadyEvent, AnyProviderEvent } from '../src'; +import { GenericEventEmitter, AllProviderEvents } from '../src'; // create concrete class to test the abstract functionality. class TestEventEmitter extends GenericEventEmitter { diff --git a/packages/web/e2e/step-definitions/evaluation.spec.ts b/packages/web/e2e/step-definitions/evaluation.spec.ts index 46cafd479..779e01221 100644 --- a/packages/web/e2e/step-definitions/evaluation.spec.ts +++ b/packages/web/e2e/step-definitions/evaluation.spec.ts @@ -1,9 +1,10 @@ -import { +import type { EvaluationContext, EvaluationDetails, JsonObject, JsonValue, - ResolutionDetails, + ResolutionDetails} from '@openfeature/core'; +import { StandardResolutionReasons, } from '@openfeature/core'; import { defineFeature, loadFeature } from 'jest-cucumber'; diff --git a/packages/web/package.json b/packages/web/package.json index 2307a25d5..03be49b22 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -16,6 +16,7 @@ "scripts": { "test": "jest --verbose", "lint": "eslint ./", + "lint:fix": "eslint ./ --fix", "clean": "shx rm -rf ./dist", "build:web-esm": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2015 --platform=browser --format=esm --outfile=./dist/esm/index.js --analyze", "build:web-cjs": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2015 --platform=browser --format=cjs --outfile=./dist/cjs/index.js --analyze", diff --git a/packages/web/src/client/client.ts b/packages/web/src/client/client.ts index 699359e68..2cb14b491 100644 --- a/packages/web/src/client/client.ts +++ b/packages/web/src/client/client.ts @@ -1,7 +1,7 @@ -import { ClientMetadata, EvaluationLifeCycle, Eventing, ManageLogger } from '@openfeature/core'; -import { Features } from '../evaluation'; -import { ProviderStatus } from '../provider'; -import { ProviderEvents } from '../events'; +import type { ClientMetadata, EvaluationLifeCycle, Eventing, ManageLogger } from '@openfeature/core'; +import type { Features } from '../evaluation'; +import type { ProviderStatus } from '../provider'; +import type { ProviderEvents } from '../events'; export interface Client extends EvaluationLifeCycle, Features, ManageLogger, Eventing { readonly metadata: ClientMetadata; diff --git a/packages/web/src/client/internal/open-feature-client.ts b/packages/web/src/client/internal/open-feature-client.ts index 7e649e39d..600a6d717 100644 --- a/packages/web/src/client/internal/open-feature-client.ts +++ b/packages/web/src/client/internal/open-feature-client.ts @@ -1,6 +1,5 @@ -import { +import type { ClientMetadata, - ErrorCode, EvaluationContext, EvaluationDetails, EventHandler, @@ -10,21 +9,24 @@ import { JsonValue, Logger, OpenFeatureError, + ResolutionDetails} from '@openfeature/core'; +import { + ErrorCode, ProviderFatalError, ProviderNotReadyError, - ResolutionDetails, SafeLogger, StandardResolutionReasons, instantiateErrorByErrorCode, statusMatchesEvent, } from '@openfeature/core'; -import { FlagEvaluationOptions } from '../../evaluation'; -import { ProviderEvents } from '../../events'; -import { InternalEventEmitter } from '../../events/internal/internal-event-emitter'; -import { Hook } from '../../hooks'; +import type { FlagEvaluationOptions } from '../../evaluation'; +import type { ProviderEvents } from '../../events'; +import type { InternalEventEmitter } from '../../events/internal/internal-event-emitter'; +import type { Hook } from '../../hooks'; import { OpenFeature } from '../../open-feature'; -import { Provider, ProviderStatus } from '../../provider'; -import { Client } from './../client'; +import type { Provider} from '../../provider'; +import { ProviderStatus } from '../../provider'; +import type { Client } from './../client'; type OpenFeatureClientOptions = { /** diff --git a/packages/web/src/evaluation/evaluation.ts b/packages/web/src/evaluation/evaluation.ts index 05078724c..b839ea823 100644 --- a/packages/web/src/evaluation/evaluation.ts +++ b/packages/web/src/evaluation/evaluation.ts @@ -1,4 +1,4 @@ -import { EvaluationDetails, BaseHook, HookHints, JsonValue } from '@openfeature/core'; +import type { EvaluationDetails, BaseHook, HookHints, JsonValue } from '@openfeature/core'; export interface FlagEvaluationOptions { hooks?: BaseHook[]; diff --git a/packages/web/src/events/internal/internal-event-emitter.ts b/packages/web/src/events/internal/internal-event-emitter.ts index 6d9b1daa6..3a2129120 100644 --- a/packages/web/src/events/internal/internal-event-emitter.ts +++ b/packages/web/src/events/internal/internal-event-emitter.ts @@ -1,5 +1,6 @@ -import { CommonEventDetails, GenericEventEmitter } from '@openfeature/core'; -import { ProviderEvents } from '../events'; +import type { CommonEventDetails} from '@openfeature/core'; +import { GenericEventEmitter } from '@openfeature/core'; +import type { ProviderEvents } from '../events'; /** * The InternalEventEmitter is not exported publicly and should only be used within the SDK. It extends the diff --git a/packages/web/src/events/open-feature-event-emitter.ts b/packages/web/src/events/open-feature-event-emitter.ts index 79c86863f..b41e0ac16 100644 --- a/packages/web/src/events/open-feature-event-emitter.ts +++ b/packages/web/src/events/open-feature-event-emitter.ts @@ -1,6 +1,6 @@ import { GenericEventEmitter } from '@openfeature/core'; import { EventEmitter } from 'eventemitter3'; -import { ProviderEmittableEvents } from './events'; +import type { ProviderEmittableEvents } from './events'; /** * The OpenFeatureEventEmitter can be used by provider developers to emit diff --git a/packages/web/src/hooks/hook.ts b/packages/web/src/hooks/hook.ts index e824c1499..20b2b8874 100644 --- a/packages/web/src/hooks/hook.ts +++ b/packages/web/src/hooks/hook.ts @@ -1,3 +1,3 @@ -import { BaseHook, FlagValue } from '@openfeature/core'; +import type { BaseHook, FlagValue } from '@openfeature/core'; export type Hook = BaseHook; diff --git a/packages/web/src/open-feature.ts b/packages/web/src/open-feature.ts index d6fc07931..27c1f5610 100644 --- a/packages/web/src/open-feature.ts +++ b/packages/web/src/open-feature.ts @@ -1,18 +1,20 @@ -import { +import type { ClientProviderStatus, EvaluationContext, GenericEventEmitter, - ManageContext, + ManageContext} from '@openfeature/core'; +import { OpenFeatureCommonAPI, ProviderWrapper, objectOrUndefined, stringOrUndefined, } from '@openfeature/core'; -import { Client } from './client'; +import type { Client } from './client'; import { OpenFeatureClient } from './client/internal/open-feature-client'; import { OpenFeatureEventEmitter, ProviderEvents } from './events'; -import { Hook } from './hooks'; -import { NOOP_PROVIDER, Provider, ProviderStatus } from './provider'; +import type { Hook } from './hooks'; +import type { Provider} from './provider'; +import { NOOP_PROVIDER, ProviderStatus } from './provider'; // use a symbol as a key for the global singleton const GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/web-sdk/api'); diff --git a/packages/web/src/provider/in-memory-provider/flag-configuration.ts b/packages/web/src/provider/in-memory-provider/flag-configuration.ts index 2bbfc9173..05f507d44 100644 --- a/packages/web/src/provider/in-memory-provider/flag-configuration.ts +++ b/packages/web/src/provider/in-memory-provider/flag-configuration.ts @@ -3,7 +3,7 @@ * It might cause confusion since these types are not a part of the general API, * but just for the in-memory provider. */ -import { EvaluationContext, JsonValue } from '@openfeature/core'; +import type { EvaluationContext, JsonValue } from '@openfeature/core'; type Variants = Record; diff --git a/packages/web/src/provider/in-memory-provider/in-memory-provider.ts b/packages/web/src/provider/in-memory-provider/in-memory-provider.ts index d8b0195ff..26690a56b 100644 --- a/packages/web/src/provider/in-memory-provider/in-memory-provider.ts +++ b/packages/web/src/provider/in-memory-provider/in-memory-provider.ts @@ -1,18 +1,19 @@ -import { +import type { EvaluationContext, - FlagNotFoundError, FlagValueType, - GeneralError, JsonValue, Logger, + ResolutionDetails} from '@openfeature/core'; +import { + FlagNotFoundError, + GeneralError, OpenFeatureError, - ResolutionDetails, StandardResolutionReasons, TypeMismatchError, } from '@openfeature/core'; -import { Provider } from '../provider'; +import type { Provider } from '../provider'; import { OpenFeatureEventEmitter, ProviderEvents } from '../../events'; -import { FlagConfiguration, Flag } from './flag-configuration'; +import type { FlagConfiguration, Flag } from './flag-configuration'; import { VariantNotFoundError } from './variant-not-found-error'; /** diff --git a/packages/web/src/provider/no-op-provider.ts b/packages/web/src/provider/no-op-provider.ts index 123bcb368..08f2ebbd5 100644 --- a/packages/web/src/provider/no-op-provider.ts +++ b/packages/web/src/provider/no-op-provider.ts @@ -1,5 +1,5 @@ -import { JsonValue, ResolutionDetails } from '@openfeature/core'; -import { Provider } from './provider'; +import type { JsonValue, ResolutionDetails } from '@openfeature/core'; +import type { Provider } from './provider'; const REASON_NO_OP = 'No-op'; diff --git a/packages/web/src/provider/provider.ts b/packages/web/src/provider/provider.ts index 6b51ec73f..03c6d8cb8 100644 --- a/packages/web/src/provider/provider.ts +++ b/packages/web/src/provider/provider.ts @@ -1,5 +1,6 @@ -import { ClientProviderStatus, CommonProvider, EvaluationContext, JsonValue, Logger, ResolutionDetails } from '@openfeature/core'; -import { Hook } from '../hooks'; +import type { CommonProvider, EvaluationContext, JsonValue, Logger, ResolutionDetails } from '@openfeature/core'; +import { ClientProviderStatus } from '@openfeature/core'; +import type { Hook } from '../hooks'; export { ClientProviderStatus as ProviderStatus }; diff --git a/packages/web/test/client.spec.ts b/packages/web/test/client.spec.ts index bb776ba38..3fd93162a 100644 --- a/packages/web/test/client.spec.ts +++ b/packages/web/test/client.spec.ts @@ -1,17 +1,18 @@ -import { +import type { Client, - ErrorCode, EvaluationDetails, - FlagNotFoundError, - GeneralError, JsonArray, JsonObject, JsonValue, - OpenFeature, Provider, + ResolutionDetails} from '../src'; +import { + ErrorCode, + FlagNotFoundError, + GeneralError, + OpenFeature, ProviderFatalError, ProviderStatus, - ResolutionDetails, StandardResolutionReasons, } from '../src'; import { OpenFeatureClient } from '../src/client/internal/open-feature-client'; diff --git a/packages/web/test/evaluation-context.spec.ts b/packages/web/test/evaluation-context.spec.ts index 4b6b24ed8..7de3b8edc 100644 --- a/packages/web/test/evaluation-context.spec.ts +++ b/packages/web/test/evaluation-context.spec.ts @@ -1,4 +1,5 @@ -import { EvaluationContext, JsonValue, OpenFeature, Provider, ProviderMetadata, ResolutionDetails } from '../src'; +import type { EvaluationContext, JsonValue, Provider, ProviderMetadata, ResolutionDetails } from '../src'; +import { OpenFeature } from '../src'; const initializeMock = jest.fn(); diff --git a/packages/web/test/events.spec.ts b/packages/web/test/events.spec.ts index 51ceceb82..ea020b438 100644 --- a/packages/web/test/events.spec.ts +++ b/packages/web/test/events.spec.ts @@ -1,17 +1,19 @@ -import { EventDetails } from '@openfeature/core'; +import type { EventDetails } from '@openfeature/core'; import { v4 as uuid } from 'uuid'; -import { +import type { JsonValue, - NOOP_PROVIDER, - OpenFeature, - OpenFeatureEventEmitter, Provider, - ProviderEvents, ProviderMetadata, - ProviderStatus, ResolutionDetails, StaleEvent } from '../src'; +import { + NOOP_PROVIDER, + OpenFeature, + OpenFeatureEventEmitter, + ProviderEvents, + ProviderStatus +} from '../src'; const TIMEOUT = 1000; const ERR_MESSAGE = 'fake err'; diff --git a/packages/web/test/hooks.spec.ts b/packages/web/test/hooks.spec.ts index d52884a70..20583a310 100644 --- a/packages/web/test/hooks.spec.ts +++ b/packages/web/test/hooks.spec.ts @@ -1,12 +1,13 @@ -import { +import type { Provider, ResolutionDetails, Client, FlagValueType, EvaluationContext, + Hook} from '../src'; +import { GeneralError, OpenFeature, - Hook, StandardResolutionReasons, ErrorCode, } from '../src'; diff --git a/packages/web/test/open-feature.spec.ts b/packages/web/test/open-feature.spec.ts index 75364b5d9..2e2f32b69 100644 --- a/packages/web/test/open-feature.spec.ts +++ b/packages/web/test/open-feature.spec.ts @@ -1,5 +1,6 @@ -import { Paradigm } from '@openfeature/core'; -import { OpenFeature, OpenFeatureAPI, Provider, ProviderStatus } from '../src'; +import type { Paradigm } from '@openfeature/core'; +import type { Provider} from '../src'; +import { OpenFeature, OpenFeatureAPI, ProviderStatus } from '../src'; import { OpenFeatureClient } from '../src/client/internal/open-feature-client'; const mockProvider = (config?: { initialStatus?: ProviderStatus; runsOn?: Paradigm }) => {