@quonfig/react 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -18,7 +18,7 @@ var require_package = __commonJS({
18
18
  module.exports = {
19
19
  packageManager: "yarn@4.11.0",
20
20
  name: "@quonfig/react",
21
- version: "0.0.3",
21
+ version: "0.0.5",
22
22
  description: "Feature Flags & Dynamic Configuration as a Service",
23
23
  main: "dist/index.cjs",
24
24
  module: "dist/index.mjs",
@@ -61,7 +61,7 @@ var require_package = __commonJS({
61
61
  "config"
62
62
  ],
63
63
  devDependencies: {
64
- "@quonfig/javascript": "file:../sdk-javascript",
64
+ "@quonfig/javascript": ">=0.0.3",
65
65
  "@testing-library/jest-dom": "^5.16.5",
66
66
  "@testing-library/react": "^13.3.0",
67
67
  "@types/jest": "^28.1.6",
@@ -90,7 +90,7 @@ var require_package = __commonJS({
90
90
  typescript: "^4.7.4"
91
91
  },
92
92
  peerDependencies: {
93
- "@quonfig/javascript": ">=0.0.2",
93
+ "@quonfig/javascript": ">=0.0.3",
94
94
  react: "^16 || ^17 || ^18 || ^19"
95
95
  }
96
96
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/QuonfigProvider.tsx","../src/QuonfigTestProvider.tsx"],"names":["quonfig","React","Quonfig","encodeContexts"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"packageManager\": \"yarn@4.11.0\",\n \"name\": \"@quonfig/react\",\n \"version\": \"0.0.3\",\n \"description\": \"Feature Flags & Dynamic Configuration as a Service\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/quonfig/sdk-react.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/quonfig/sdk-react/issues\"\n },\n \"homepage\": \"https://github.com/quonfig/sdk-react#readme\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist/\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"rm -rf dist/ && tsup\",\n \"dev\": \"tsup --watch\",\n \"bundle\": \"esbuild --minify --target=esnext --bundle --outfile=dist/quonfig-react.bundle.js --global-name=window.quonfigReactNamespace dist/index.cjs && echo 'window.quonfigReact = window.quonfigReactNamespace.quonfigReact' >> dist/quonfig-react.bundle.js\",\n \"test\": \"tsup && jest --verbose\",\n \"lint\": \"eslint --ext .ts,.tsx src/\",\n \"prettier\": \"prettier . -l\",\n \"prettier:fix\": \"prettier --write .\"\n },\n \"author\": \"Jeffrey Chupp\",\n \"license\": \"ISC\",\n \"keywords\": [\n \"feature-flags\",\n \"config\"\n ],\n \"devDependencies\": {\n \"@quonfig/javascript\": \"file:../sdk-javascript\",\n \"@testing-library/jest-dom\": \"^5.16.5\",\n \"@testing-library/react\": \"^13.3.0\",\n \"@types/jest\": \"^28.1.6\",\n \"@types/node\": \"^18.6.5\",\n \"@types/react\": \"^19.1.10\",\n \"@typescript-eslint/eslint-plugin\": \"^5.33.0\",\n \"@typescript-eslint/parser\": \"^5.33.0\",\n \"eslint\": \"^8.21.0\",\n \"eslint-config-airbnb\": \"^19.0.4\",\n \"eslint-config-airbnb-typescript\": \"^17.0.0\",\n \"eslint-config-prettier\": \"^8.8.0\",\n \"eslint-plugin-import\": \"^2.26.0\",\n \"eslint-plugin-jest\": \"^26.8.2\",\n \"eslint-plugin-jsx-a11y\": \"^6.6.1\",\n \"eslint-plugin-react\": \"^7.30.1\",\n \"eslint-plugin-react-hooks\": \"^4.6.0\",\n \"jest\": \"^28.1.3\",\n \"jest-environment-jsdom\": \"^28.1.3\",\n \"jest-fetch-mock\": \"^3.0.3\",\n \"prettier\": \"^3.0.0\",\n \"react\": \"^19.1.1\",\n \"react-dom\": \"^19.1.1\",\n \"ts-jest\": \"^28.0.7\",\n \"ts-node\": \"^10.9.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^4.7.4\"\n },\n \"peerDependencies\": {\n \"@quonfig/javascript\": \">=0.0.2\",\n \"react\": \"^16 || ^17 || ^18 || ^19\"\n }\n}\n","import React, { PropsWithChildren } from \"react\";\nimport {\n quonfig,\n type InitOptions,\n type ConfigValue,\n type Contexts,\n Quonfig,\n TypedFrontEndConfigurationRaw,\n FrontEndConfigurationRaw,\n Duration,\n encodeContexts,\n} from \"@quonfig/javascript\";\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version } = require(\"../package.json\");\n\n// @quonfig/cli#generate will create interfaces into this namespace for React to consume\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface FrontEndConfigurationAccessor {}\n\nexport type TypedFrontEndConfigurationAccessor = keyof FrontEndConfigurationAccessor extends never\n ? Record<string, unknown>\n : {\n [TypedFlagKey in keyof FrontEndConfigurationAccessor]: FrontEndConfigurationAccessor[TypedFlagKey];\n };\n\ntype ClassMethods<T> = { [K in keyof T]: T[K] };\n\ntype QuonfigTypesafeClass<T = unknown> = new (\n // eslint-disable-next-line no-shadow\n quonfig: Quonfig\n) => T;\n\ntype SharedSettings = Partial<\n Pick<\n InitOptions,\n | \"sdkKey\"\n | \"apiUrl\"\n | \"apiUrls\"\n | \"timeout\"\n | \"collectEvaluationSummaries\"\n | \"collectLoggerNames\"\n >\n> & {\n // We need to redefine the afterEvaluationCallback type to ensure proper dynamic resolution of K\n afterEvaluationCallback?: <K extends keyof TypedFrontEndConfigurationRaw>(\n key: K,\n value: TypedFrontEndConfigurationRaw[K],\n contexts: Contexts | undefined\n ) => void;\n pollInterval?: number;\n onError?: (error: Error) => void;\n};\n\nexport type BaseContext = {\n get: <K extends keyof TypedFrontEndConfigurationRaw>(key: K) => TypedFrontEndConfigurationRaw[K];\n getDuration: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends Duration\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => Duration | undefined;\n contextAttributes: Contexts;\n isEnabled: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends boolean\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => boolean;\n loading: boolean;\n quonfig: typeof quonfig;\n keys: (keyof TypedFrontEndConfigurationRaw)[];\n settings: SharedSettings;\n};\n\nexport type ProvidedContext = BaseContext & ClassMethods<QuonfigTypesafeClass>;\n\nexport const defaultContext: BaseContext = {\n get: (_key) => undefined,\n getDuration: (_key) => undefined,\n isEnabled: (_key) => false,\n keys: [],\n loading: true,\n contextAttributes: {},\n quonfig,\n settings: {},\n};\n\nexport const QuonfigContext = React.createContext<ProvidedContext>(\n defaultContext as ProvidedContext\n);\n\n// This is a factory function that creates a fully typed useQuonfig hook for a specific QuonfigTypesafe class\nexport function createQuonfigHook<T>(TypesafeClass: QuonfigTypesafeClass<T>) {\n return function useQuonfigHook(): BaseContext & T {\n const baseContext = React.useContext(QuonfigContext);\n\n // Memoize the typesafe instance to prevent unnecessary constructor calls\n const typesafeInstance = React.useMemo(() => {\n const instance = new TypesafeClass(baseContext.quonfig);\n\n // Copy baseContext properties to typesafeInstance except for `get` + `quonfig`\n Object.assign(instance as any, {\n getDuration: baseContext.getDuration,\n contextAttributes: baseContext.contextAttributes,\n isEnabled: baseContext.isEnabled,\n loading: baseContext.loading,\n keys: baseContext.keys,\n settings: baseContext.settings,\n });\n\n return instance;\n }, [baseContext]);\n\n return typesafeInstance as BaseContext & T;\n };\n}\n\n// Basic hook for general use - requires type parameter\nexport const useBaseQuonfig = () => React.useContext(QuonfigContext);\n\n// General hook that returns the context with any explicit type\nexport const useQuonfig = (): ProvidedContext => useBaseQuonfig() as unknown as ProvidedContext;\n\nlet globalQuonfigIsTaken = false;\n\nexport const assignQuonfigClient = () => {\n if (globalQuonfigIsTaken) {\n return new Quonfig();\n }\n\n globalQuonfigIsTaken = true;\n return quonfig;\n};\n\nexport type QuonfigProviderProps = SharedSettings & {\n sdkKey: string;\n contextAttributes?: Contexts;\n initialFlags?: Record<string, unknown>;\n};\n\nconst getContextKey = (\n contextAttributes: Contexts,\n onError: (e: Error) => void\n): string => {\n try {\n if (Object.keys(contextAttributes).length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n \"QuonfigProvider: You haven't passed any contextAttributes. See https://docs.quonfig.com/docs/sdks/react#using-context\"\n );\n }\n\n return encodeContexts(contextAttributes);\n } catch (e) {\n onError(e as Error);\n return \"\";\n }\n};\n\nfunction QuonfigProvider({\n sdkKey,\n contextAttributes = {},\n onError = (e: unknown) => {\n // eslint-disable-next-line no-console\n console.error(e);\n },\n initialFlags,\n children,\n timeout,\n apiUrl,\n apiUrls,\n pollInterval,\n afterEvaluationCallback = undefined,\n collectEvaluationSummaries,\n collectLoggerNames,\n}: PropsWithChildren<QuonfigProviderProps>) {\n const settings = {\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n pollInterval,\n onError,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n // We use this state to prevent a double-init when useEffect fires due to\n // StrictMode\n const mostRecentlyLoadingContextKey = React.useRef<string | undefined>(undefined);\n // We use this state to pass the loading state to the Provider (updating\n // currentLoadingContextKey won't trigger an update)\n const [loading, setLoading] = React.useState(true);\n const [initialLoad, setInitialLoad] = React.useState(true);\n // Here we track the current identity so we can reload our config when it\n // changes\n const [loadedContextKey, setLoadedContextKey] = React.useState(\"\");\n\n const quonfigClient: Quonfig = React.useMemo(() => assignQuonfigClient(), []);\n\n const contextKey = getContextKey(contextAttributes, onError);\n\n if (initialFlags && initialLoad) {\n quonfigClient.hydrate(initialFlags);\n setInitialLoad(false);\n setLoadedContextKey(contextKey);\n setLoading(false);\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (pollInterval) {\n // eslint-disable-next-line no-console\n console.warn(\"Polling is not supported when hydrating flags via initialFlags\");\n }\n }\n\n React.useEffect(() => {\n setInitialLoad(false);\n\n if (mostRecentlyLoadingContextKey.current === contextKey) {\n return;\n }\n\n setLoading(true);\n try {\n if (mostRecentlyLoadingContextKey.current === undefined) {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (!sdkKey) {\n throw new Error(\"QuonfigProvider: sdkKey is required\");\n }\n\n quonfigClient.clientNameString = \"sdk-react\";\n\n const initOptions: InitOptions = {\n context: contextAttributes,\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n quonfigClient\n .init(initOptions)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n\n if (pollInterval) {\n quonfigClient.poll({ frequencyInMs: pollInterval });\n }\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n } else {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n quonfigClient\n .updateContext(contextAttributes)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n }\n } catch (e) {\n setLoading(false);\n onError(e as Error);\n }\n }, [\n sdkKey,\n loadedContextKey,\n contextKey,\n loading,\n setLoading,\n onError,\n quonfigClient.instanceHash,\n ]);\n\n const value = React.useMemo(() => {\n const baseContext: ProvidedContext = {\n isEnabled: quonfigClient.isEnabled.bind(quonfigClient),\n contextAttributes,\n get: quonfigClient.get.bind(quonfigClient),\n getDuration: quonfigClient.getDuration.bind(quonfigClient),\n keys: Object.keys(quonfigClient.extract()),\n quonfig: quonfigClient,\n loading,\n settings,\n };\n\n return baseContext;\n }, [loadedContextKey, loading, quonfigClient.instanceHash, settings]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigProvider, ConfigValue, SharedSettings, QuonfigTypesafeClass };\n","import React, { PropsWithChildren } from \"react\";\nimport { QuonfigContext, assignQuonfigClient, ProvidedContext } from \"./QuonfigProvider\";\n\nexport type QuonfigTestProviderProps = {\n config: Record<string, any>;\n sdkKey?: string;\n};\n\nfunction QuonfigTestProvider({\n sdkKey,\n config,\n children,\n}: PropsWithChildren<QuonfigTestProviderProps>) {\n const get = (key: string) => config[key];\n const getDuration = (key: string) => config[key];\n const isEnabled = (key: string) => !!get(key);\n\n const quonfigClient = React.useMemo(() => assignQuonfigClient(), []);\n\n const value = React.useMemo(() => {\n quonfigClient.get = get;\n quonfigClient.getDuration = getDuration;\n quonfigClient.isEnabled = isEnabled;\n\n const baseContext: ProvidedContext = {\n isEnabled,\n contextAttributes: config.contextAttributes,\n get,\n getDuration,\n loading: false,\n quonfig: quonfigClient,\n keys: Object.keys(config),\n settings: { sdkKey: sdkKey ?? \"fake-sdk-key-via-the-test-provider\" },\n };\n\n return baseContext;\n }, [config, quonfigClient, sdkKey]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigTestProvider };\n"]}
1
+ {"version":3,"sources":["../package.json","../src/QuonfigProvider.tsx","../src/QuonfigTestProvider.tsx"],"names":["quonfig","React","Quonfig","encodeContexts"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"packageManager\": \"yarn@4.11.0\",\n \"name\": \"@quonfig/react\",\n \"version\": \"0.0.5\",\n \"description\": \"Feature Flags & Dynamic Configuration as a Service\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/quonfig/sdk-react.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/quonfig/sdk-react/issues\"\n },\n \"homepage\": \"https://github.com/quonfig/sdk-react#readme\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist/\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"rm -rf dist/ && tsup\",\n \"dev\": \"tsup --watch\",\n \"bundle\": \"esbuild --minify --target=esnext --bundle --outfile=dist/quonfig-react.bundle.js --global-name=window.quonfigReactNamespace dist/index.cjs && echo 'window.quonfigReact = window.quonfigReactNamespace.quonfigReact' >> dist/quonfig-react.bundle.js\",\n \"test\": \"tsup && jest --verbose\",\n \"lint\": \"eslint --ext .ts,.tsx src/\",\n \"prettier\": \"prettier . -l\",\n \"prettier:fix\": \"prettier --write .\"\n },\n \"author\": \"Jeffrey Chupp\",\n \"license\": \"ISC\",\n \"keywords\": [\n \"feature-flags\",\n \"config\"\n ],\n \"devDependencies\": {\n \"@quonfig/javascript\": \">=0.0.3\",\n \"@testing-library/jest-dom\": \"^5.16.5\",\n \"@testing-library/react\": \"^13.3.0\",\n \"@types/jest\": \"^28.1.6\",\n \"@types/node\": \"^18.6.5\",\n \"@types/react\": \"^19.1.10\",\n \"@typescript-eslint/eslint-plugin\": \"^5.33.0\",\n \"@typescript-eslint/parser\": \"^5.33.0\",\n \"eslint\": \"^8.21.0\",\n \"eslint-config-airbnb\": \"^19.0.4\",\n \"eslint-config-airbnb-typescript\": \"^17.0.0\",\n \"eslint-config-prettier\": \"^8.8.0\",\n \"eslint-plugin-import\": \"^2.26.0\",\n \"eslint-plugin-jest\": \"^26.8.2\",\n \"eslint-plugin-jsx-a11y\": \"^6.6.1\",\n \"eslint-plugin-react\": \"^7.30.1\",\n \"eslint-plugin-react-hooks\": \"^4.6.0\",\n \"jest\": \"^28.1.3\",\n \"jest-environment-jsdom\": \"^28.1.3\",\n \"jest-fetch-mock\": \"^3.0.3\",\n \"prettier\": \"^3.0.0\",\n \"react\": \"^19.1.1\",\n \"react-dom\": \"^19.1.1\",\n \"ts-jest\": \"^28.0.7\",\n \"ts-node\": \"^10.9.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^4.7.4\"\n },\n \"peerDependencies\": {\n \"@quonfig/javascript\": \">=0.0.3\",\n \"react\": \"^16 || ^17 || ^18 || ^19\"\n }\n}\n","import React, { PropsWithChildren } from \"react\";\nimport {\n quonfig,\n type InitOptions,\n type ConfigValue,\n type Contexts,\n Quonfig,\n TypedFrontEndConfigurationRaw,\n FrontEndConfigurationRaw,\n Duration,\n encodeContexts,\n} from \"@quonfig/javascript\";\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version } = require(\"../package.json\");\n\n// @quonfig/cli#generate will create interfaces into this namespace for React to consume\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface FrontEndConfigurationAccessor {}\n\nexport type TypedFrontEndConfigurationAccessor = keyof FrontEndConfigurationAccessor extends never\n ? Record<string, unknown>\n : {\n [TypedFlagKey in keyof FrontEndConfigurationAccessor]: FrontEndConfigurationAccessor[TypedFlagKey];\n };\n\ntype ClassMethods<T> = { [K in keyof T]: T[K] };\n\ntype QuonfigTypesafeClass<T = unknown> = new (\n // eslint-disable-next-line no-shadow\n quonfig: Quonfig\n) => T;\n\ntype SharedSettings = Partial<\n Pick<\n InitOptions,\n | \"sdkKey\"\n | \"apiUrl\"\n | \"apiUrls\"\n | \"timeout\"\n | \"collectEvaluationSummaries\"\n | \"collectLoggerNames\"\n >\n> & {\n // We need to redefine the afterEvaluationCallback type to ensure proper dynamic resolution of K\n afterEvaluationCallback?: <K extends keyof TypedFrontEndConfigurationRaw>(\n key: K,\n value: TypedFrontEndConfigurationRaw[K],\n contexts: Contexts | undefined\n ) => void;\n pollInterval?: number;\n onError?: (error: Error) => void;\n};\n\nexport type BaseContext = {\n get: <K extends keyof TypedFrontEndConfigurationRaw>(key: K) => TypedFrontEndConfigurationRaw[K];\n getDuration: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends Duration\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => Duration | undefined;\n contextAttributes: Contexts;\n isEnabled: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends boolean\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => boolean;\n loading: boolean;\n quonfig: typeof quonfig;\n keys: (keyof TypedFrontEndConfigurationRaw)[];\n settings: SharedSettings;\n};\n\nexport type ProvidedContext = BaseContext & ClassMethods<QuonfigTypesafeClass>;\n\nexport const defaultContext: BaseContext = {\n get: (_key) => undefined,\n getDuration: (_key) => undefined,\n isEnabled: (_key) => false,\n keys: [],\n loading: true,\n contextAttributes: {},\n quonfig,\n settings: {},\n};\n\nexport const QuonfigContext = React.createContext<ProvidedContext>(\n defaultContext as ProvidedContext\n);\n\n// This is a factory function that creates a fully typed useQuonfig hook for a specific QuonfigTypesafe class\nexport function createQuonfigHook<T>(TypesafeClass: QuonfigTypesafeClass<T>) {\n return function useQuonfigHook(): BaseContext & T {\n const baseContext = React.useContext(QuonfigContext);\n\n // Memoize the typesafe instance to prevent unnecessary constructor calls\n const typesafeInstance = React.useMemo(() => {\n const instance = new TypesafeClass(baseContext.quonfig);\n\n // Copy baseContext properties to typesafeInstance except for `get` + `quonfig`\n Object.assign(instance as any, {\n getDuration: baseContext.getDuration,\n contextAttributes: baseContext.contextAttributes,\n isEnabled: baseContext.isEnabled,\n loading: baseContext.loading,\n keys: baseContext.keys,\n settings: baseContext.settings,\n });\n\n return instance;\n }, [baseContext]);\n\n return typesafeInstance as BaseContext & T;\n };\n}\n\n// Basic hook for general use - requires type parameter\nexport const useBaseQuonfig = () => React.useContext(QuonfigContext);\n\n// General hook that returns the context with any explicit type\nexport const useQuonfig = (): ProvidedContext => useBaseQuonfig() as unknown as ProvidedContext;\n\nlet globalQuonfigIsTaken = false;\n\nexport const assignQuonfigClient = () => {\n if (globalQuonfigIsTaken) {\n return new Quonfig();\n }\n\n globalQuonfigIsTaken = true;\n return quonfig;\n};\n\nexport type QuonfigProviderProps = SharedSettings & {\n sdkKey: string;\n contextAttributes?: Contexts;\n initialFlags?: Record<string, unknown>;\n};\n\nconst getContextKey = (\n contextAttributes: Contexts,\n onError: (e: Error) => void\n): string => {\n try {\n if (Object.keys(contextAttributes).length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n \"QuonfigProvider: You haven't passed any contextAttributes. See https://docs.quonfig.com/docs/sdks/react#using-context\"\n );\n }\n\n return encodeContexts(contextAttributes);\n } catch (e) {\n onError(e as Error);\n return \"\";\n }\n};\n\nfunction QuonfigProvider({\n sdkKey,\n contextAttributes = {},\n onError = (e: unknown) => {\n // eslint-disable-next-line no-console\n console.error(e);\n },\n initialFlags,\n children,\n timeout,\n apiUrl,\n apiUrls,\n pollInterval,\n afterEvaluationCallback = undefined,\n collectEvaluationSummaries,\n collectLoggerNames,\n}: PropsWithChildren<QuonfigProviderProps>) {\n const settings = {\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n pollInterval,\n onError,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n // We use this state to prevent a double-init when useEffect fires due to\n // StrictMode\n const mostRecentlyLoadingContextKey = React.useRef<string | undefined>(undefined);\n // We use this state to pass the loading state to the Provider (updating\n // currentLoadingContextKey won't trigger an update)\n const [loading, setLoading] = React.useState(true);\n const [initialLoad, setInitialLoad] = React.useState(true);\n // Here we track the current identity so we can reload our config when it\n // changes\n const [loadedContextKey, setLoadedContextKey] = React.useState(\"\");\n\n const quonfigClient: Quonfig = React.useMemo(() => assignQuonfigClient(), []);\n\n const contextKey = getContextKey(contextAttributes, onError);\n\n if (initialFlags && initialLoad) {\n quonfigClient.hydrate(initialFlags);\n setInitialLoad(false);\n setLoadedContextKey(contextKey);\n setLoading(false);\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (pollInterval) {\n // eslint-disable-next-line no-console\n console.warn(\"Polling is not supported when hydrating flags via initialFlags\");\n }\n }\n\n React.useEffect(() => {\n setInitialLoad(false);\n\n if (mostRecentlyLoadingContextKey.current === contextKey) {\n return;\n }\n\n setLoading(true);\n try {\n if (mostRecentlyLoadingContextKey.current === undefined) {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (!sdkKey) {\n throw new Error(\"QuonfigProvider: sdkKey is required\");\n }\n\n quonfigClient.clientNameString = \"sdk-react\";\n\n const initOptions: InitOptions = {\n context: contextAttributes,\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n quonfigClient\n .init(initOptions)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n\n if (pollInterval) {\n quonfigClient.poll({ frequencyInMs: pollInterval });\n }\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n } else {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n quonfigClient\n .updateContext(contextAttributes)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n }\n } catch (e) {\n setLoading(false);\n onError(e as Error);\n }\n }, [\n sdkKey,\n loadedContextKey,\n contextKey,\n loading,\n setLoading,\n onError,\n quonfigClient.instanceHash,\n ]);\n\n const value = React.useMemo(() => {\n const baseContext: ProvidedContext = {\n isEnabled: quonfigClient.isEnabled.bind(quonfigClient),\n contextAttributes,\n get: quonfigClient.get.bind(quonfigClient),\n getDuration: quonfigClient.getDuration.bind(quonfigClient),\n keys: Object.keys(quonfigClient.extract()),\n quonfig: quonfigClient,\n loading,\n settings,\n };\n\n return baseContext;\n }, [loadedContextKey, loading, quonfigClient.instanceHash, settings]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigProvider, ConfigValue, SharedSettings, QuonfigTypesafeClass };\n","import React, { PropsWithChildren } from \"react\";\nimport { QuonfigContext, assignQuonfigClient, ProvidedContext } from \"./QuonfigProvider\";\n\nexport type QuonfigTestProviderProps = {\n config: Record<string, any>;\n sdkKey?: string;\n};\n\nfunction QuonfigTestProvider({\n sdkKey,\n config,\n children,\n}: PropsWithChildren<QuonfigTestProviderProps>) {\n const get = (key: string) => config[key];\n const getDuration = (key: string) => config[key];\n const isEnabled = (key: string) => !!get(key);\n\n const quonfigClient = React.useMemo(() => assignQuonfigClient(), []);\n\n const value = React.useMemo(() => {\n quonfigClient.get = get;\n quonfigClient.getDuration = getDuration;\n quonfigClient.isEnabled = isEnabled;\n\n const baseContext: ProvidedContext = {\n isEnabled,\n contextAttributes: config.contextAttributes,\n get,\n getDuration,\n loading: false,\n quonfig: quonfigClient,\n keys: Object.keys(config),\n settings: { sdkKey: sdkKey ?? \"fake-sdk-key-via-the-test-provider\" },\n };\n\n return baseContext;\n }, [config, quonfigClient, sdkKey]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigTestProvider };\n"]}
package/dist/index.mjs CHANGED
@@ -13,7 +13,7 @@ var require_package = __commonJS({
13
13
  module.exports = {
14
14
  packageManager: "yarn@4.11.0",
15
15
  name: "@quonfig/react",
16
- version: "0.0.3",
16
+ version: "0.0.5",
17
17
  description: "Feature Flags & Dynamic Configuration as a Service",
18
18
  main: "dist/index.cjs",
19
19
  module: "dist/index.mjs",
@@ -56,7 +56,7 @@ var require_package = __commonJS({
56
56
  "config"
57
57
  ],
58
58
  devDependencies: {
59
- "@quonfig/javascript": "file:../sdk-javascript",
59
+ "@quonfig/javascript": ">=0.0.3",
60
60
  "@testing-library/jest-dom": "^5.16.5",
61
61
  "@testing-library/react": "^13.3.0",
62
62
  "@types/jest": "^28.1.6",
@@ -85,7 +85,7 @@ var require_package = __commonJS({
85
85
  typescript: "^4.7.4"
86
86
  },
87
87
  peerDependencies: {
88
- "@quonfig/javascript": ">=0.0.2",
88
+ "@quonfig/javascript": ">=0.0.3",
89
89
  react: "^16 || ^17 || ^18 || ^19"
90
90
  }
91
91
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/QuonfigProvider.tsx","../src/QuonfigTestProvider.tsx"],"names":["React"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"packageManager\": \"yarn@4.11.0\",\n \"name\": \"@quonfig/react\",\n \"version\": \"0.0.3\",\n \"description\": \"Feature Flags & Dynamic Configuration as a Service\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/quonfig/sdk-react.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/quonfig/sdk-react/issues\"\n },\n \"homepage\": \"https://github.com/quonfig/sdk-react#readme\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist/\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"rm -rf dist/ && tsup\",\n \"dev\": \"tsup --watch\",\n \"bundle\": \"esbuild --minify --target=esnext --bundle --outfile=dist/quonfig-react.bundle.js --global-name=window.quonfigReactNamespace dist/index.cjs && echo 'window.quonfigReact = window.quonfigReactNamespace.quonfigReact' >> dist/quonfig-react.bundle.js\",\n \"test\": \"tsup && jest --verbose\",\n \"lint\": \"eslint --ext .ts,.tsx src/\",\n \"prettier\": \"prettier . -l\",\n \"prettier:fix\": \"prettier --write .\"\n },\n \"author\": \"Jeffrey Chupp\",\n \"license\": \"ISC\",\n \"keywords\": [\n \"feature-flags\",\n \"config\"\n ],\n \"devDependencies\": {\n \"@quonfig/javascript\": \"file:../sdk-javascript\",\n \"@testing-library/jest-dom\": \"^5.16.5\",\n \"@testing-library/react\": \"^13.3.0\",\n \"@types/jest\": \"^28.1.6\",\n \"@types/node\": \"^18.6.5\",\n \"@types/react\": \"^19.1.10\",\n \"@typescript-eslint/eslint-plugin\": \"^5.33.0\",\n \"@typescript-eslint/parser\": \"^5.33.0\",\n \"eslint\": \"^8.21.0\",\n \"eslint-config-airbnb\": \"^19.0.4\",\n \"eslint-config-airbnb-typescript\": \"^17.0.0\",\n \"eslint-config-prettier\": \"^8.8.0\",\n \"eslint-plugin-import\": \"^2.26.0\",\n \"eslint-plugin-jest\": \"^26.8.2\",\n \"eslint-plugin-jsx-a11y\": \"^6.6.1\",\n \"eslint-plugin-react\": \"^7.30.1\",\n \"eslint-plugin-react-hooks\": \"^4.6.0\",\n \"jest\": \"^28.1.3\",\n \"jest-environment-jsdom\": \"^28.1.3\",\n \"jest-fetch-mock\": \"^3.0.3\",\n \"prettier\": \"^3.0.0\",\n \"react\": \"^19.1.1\",\n \"react-dom\": \"^19.1.1\",\n \"ts-jest\": \"^28.0.7\",\n \"ts-node\": \"^10.9.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^4.7.4\"\n },\n \"peerDependencies\": {\n \"@quonfig/javascript\": \">=0.0.2\",\n \"react\": \"^16 || ^17 || ^18 || ^19\"\n }\n}\n","import React, { PropsWithChildren } from \"react\";\nimport {\n quonfig,\n type InitOptions,\n type ConfigValue,\n type Contexts,\n Quonfig,\n TypedFrontEndConfigurationRaw,\n FrontEndConfigurationRaw,\n Duration,\n encodeContexts,\n} from \"@quonfig/javascript\";\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version } = require(\"../package.json\");\n\n// @quonfig/cli#generate will create interfaces into this namespace for React to consume\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface FrontEndConfigurationAccessor {}\n\nexport type TypedFrontEndConfigurationAccessor = keyof FrontEndConfigurationAccessor extends never\n ? Record<string, unknown>\n : {\n [TypedFlagKey in keyof FrontEndConfigurationAccessor]: FrontEndConfigurationAccessor[TypedFlagKey];\n };\n\ntype ClassMethods<T> = { [K in keyof T]: T[K] };\n\ntype QuonfigTypesafeClass<T = unknown> = new (\n // eslint-disable-next-line no-shadow\n quonfig: Quonfig\n) => T;\n\ntype SharedSettings = Partial<\n Pick<\n InitOptions,\n | \"sdkKey\"\n | \"apiUrl\"\n | \"apiUrls\"\n | \"timeout\"\n | \"collectEvaluationSummaries\"\n | \"collectLoggerNames\"\n >\n> & {\n // We need to redefine the afterEvaluationCallback type to ensure proper dynamic resolution of K\n afterEvaluationCallback?: <K extends keyof TypedFrontEndConfigurationRaw>(\n key: K,\n value: TypedFrontEndConfigurationRaw[K],\n contexts: Contexts | undefined\n ) => void;\n pollInterval?: number;\n onError?: (error: Error) => void;\n};\n\nexport type BaseContext = {\n get: <K extends keyof TypedFrontEndConfigurationRaw>(key: K) => TypedFrontEndConfigurationRaw[K];\n getDuration: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends Duration\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => Duration | undefined;\n contextAttributes: Contexts;\n isEnabled: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends boolean\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => boolean;\n loading: boolean;\n quonfig: typeof quonfig;\n keys: (keyof TypedFrontEndConfigurationRaw)[];\n settings: SharedSettings;\n};\n\nexport type ProvidedContext = BaseContext & ClassMethods<QuonfigTypesafeClass>;\n\nexport const defaultContext: BaseContext = {\n get: (_key) => undefined,\n getDuration: (_key) => undefined,\n isEnabled: (_key) => false,\n keys: [],\n loading: true,\n contextAttributes: {},\n quonfig,\n settings: {},\n};\n\nexport const QuonfigContext = React.createContext<ProvidedContext>(\n defaultContext as ProvidedContext\n);\n\n// This is a factory function that creates a fully typed useQuonfig hook for a specific QuonfigTypesafe class\nexport function createQuonfigHook<T>(TypesafeClass: QuonfigTypesafeClass<T>) {\n return function useQuonfigHook(): BaseContext & T {\n const baseContext = React.useContext(QuonfigContext);\n\n // Memoize the typesafe instance to prevent unnecessary constructor calls\n const typesafeInstance = React.useMemo(() => {\n const instance = new TypesafeClass(baseContext.quonfig);\n\n // Copy baseContext properties to typesafeInstance except for `get` + `quonfig`\n Object.assign(instance as any, {\n getDuration: baseContext.getDuration,\n contextAttributes: baseContext.contextAttributes,\n isEnabled: baseContext.isEnabled,\n loading: baseContext.loading,\n keys: baseContext.keys,\n settings: baseContext.settings,\n });\n\n return instance;\n }, [baseContext]);\n\n return typesafeInstance as BaseContext & T;\n };\n}\n\n// Basic hook for general use - requires type parameter\nexport const useBaseQuonfig = () => React.useContext(QuonfigContext);\n\n// General hook that returns the context with any explicit type\nexport const useQuonfig = (): ProvidedContext => useBaseQuonfig() as unknown as ProvidedContext;\n\nlet globalQuonfigIsTaken = false;\n\nexport const assignQuonfigClient = () => {\n if (globalQuonfigIsTaken) {\n return new Quonfig();\n }\n\n globalQuonfigIsTaken = true;\n return quonfig;\n};\n\nexport type QuonfigProviderProps = SharedSettings & {\n sdkKey: string;\n contextAttributes?: Contexts;\n initialFlags?: Record<string, unknown>;\n};\n\nconst getContextKey = (\n contextAttributes: Contexts,\n onError: (e: Error) => void\n): string => {\n try {\n if (Object.keys(contextAttributes).length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n \"QuonfigProvider: You haven't passed any contextAttributes. See https://docs.quonfig.com/docs/sdks/react#using-context\"\n );\n }\n\n return encodeContexts(contextAttributes);\n } catch (e) {\n onError(e as Error);\n return \"\";\n }\n};\n\nfunction QuonfigProvider({\n sdkKey,\n contextAttributes = {},\n onError = (e: unknown) => {\n // eslint-disable-next-line no-console\n console.error(e);\n },\n initialFlags,\n children,\n timeout,\n apiUrl,\n apiUrls,\n pollInterval,\n afterEvaluationCallback = undefined,\n collectEvaluationSummaries,\n collectLoggerNames,\n}: PropsWithChildren<QuonfigProviderProps>) {\n const settings = {\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n pollInterval,\n onError,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n // We use this state to prevent a double-init when useEffect fires due to\n // StrictMode\n const mostRecentlyLoadingContextKey = React.useRef<string | undefined>(undefined);\n // We use this state to pass the loading state to the Provider (updating\n // currentLoadingContextKey won't trigger an update)\n const [loading, setLoading] = React.useState(true);\n const [initialLoad, setInitialLoad] = React.useState(true);\n // Here we track the current identity so we can reload our config when it\n // changes\n const [loadedContextKey, setLoadedContextKey] = React.useState(\"\");\n\n const quonfigClient: Quonfig = React.useMemo(() => assignQuonfigClient(), []);\n\n const contextKey = getContextKey(contextAttributes, onError);\n\n if (initialFlags && initialLoad) {\n quonfigClient.hydrate(initialFlags);\n setInitialLoad(false);\n setLoadedContextKey(contextKey);\n setLoading(false);\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (pollInterval) {\n // eslint-disable-next-line no-console\n console.warn(\"Polling is not supported when hydrating flags via initialFlags\");\n }\n }\n\n React.useEffect(() => {\n setInitialLoad(false);\n\n if (mostRecentlyLoadingContextKey.current === contextKey) {\n return;\n }\n\n setLoading(true);\n try {\n if (mostRecentlyLoadingContextKey.current === undefined) {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (!sdkKey) {\n throw new Error(\"QuonfigProvider: sdkKey is required\");\n }\n\n quonfigClient.clientNameString = \"sdk-react\";\n\n const initOptions: InitOptions = {\n context: contextAttributes,\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n quonfigClient\n .init(initOptions)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n\n if (pollInterval) {\n quonfigClient.poll({ frequencyInMs: pollInterval });\n }\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n } else {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n quonfigClient\n .updateContext(contextAttributes)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n }\n } catch (e) {\n setLoading(false);\n onError(e as Error);\n }\n }, [\n sdkKey,\n loadedContextKey,\n contextKey,\n loading,\n setLoading,\n onError,\n quonfigClient.instanceHash,\n ]);\n\n const value = React.useMemo(() => {\n const baseContext: ProvidedContext = {\n isEnabled: quonfigClient.isEnabled.bind(quonfigClient),\n contextAttributes,\n get: quonfigClient.get.bind(quonfigClient),\n getDuration: quonfigClient.getDuration.bind(quonfigClient),\n keys: Object.keys(quonfigClient.extract()),\n quonfig: quonfigClient,\n loading,\n settings,\n };\n\n return baseContext;\n }, [loadedContextKey, loading, quonfigClient.instanceHash, settings]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigProvider, ConfigValue, SharedSettings, QuonfigTypesafeClass };\n","import React, { PropsWithChildren } from \"react\";\nimport { QuonfigContext, assignQuonfigClient, ProvidedContext } from \"./QuonfigProvider\";\n\nexport type QuonfigTestProviderProps = {\n config: Record<string, any>;\n sdkKey?: string;\n};\n\nfunction QuonfigTestProvider({\n sdkKey,\n config,\n children,\n}: PropsWithChildren<QuonfigTestProviderProps>) {\n const get = (key: string) => config[key];\n const getDuration = (key: string) => config[key];\n const isEnabled = (key: string) => !!get(key);\n\n const quonfigClient = React.useMemo(() => assignQuonfigClient(), []);\n\n const value = React.useMemo(() => {\n quonfigClient.get = get;\n quonfigClient.getDuration = getDuration;\n quonfigClient.isEnabled = isEnabled;\n\n const baseContext: ProvidedContext = {\n isEnabled,\n contextAttributes: config.contextAttributes,\n get,\n getDuration,\n loading: false,\n quonfig: quonfigClient,\n keys: Object.keys(config),\n settings: { sdkKey: sdkKey ?? \"fake-sdk-key-via-the-test-provider\" },\n };\n\n return baseContext;\n }, [config, quonfigClient, sdkKey]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigTestProvider };\n"]}
1
+ {"version":3,"sources":["../package.json","../src/QuonfigProvider.tsx","../src/QuonfigTestProvider.tsx"],"names":["React"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"packageManager\": \"yarn@4.11.0\",\n \"name\": \"@quonfig/react\",\n \"version\": \"0.0.5\",\n \"description\": \"Feature Flags & Dynamic Configuration as a Service\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/quonfig/sdk-react.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/quonfig/sdk-react/issues\"\n },\n \"homepage\": \"https://github.com/quonfig/sdk-react#readme\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist/\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"rm -rf dist/ && tsup\",\n \"dev\": \"tsup --watch\",\n \"bundle\": \"esbuild --minify --target=esnext --bundle --outfile=dist/quonfig-react.bundle.js --global-name=window.quonfigReactNamespace dist/index.cjs && echo 'window.quonfigReact = window.quonfigReactNamespace.quonfigReact' >> dist/quonfig-react.bundle.js\",\n \"test\": \"tsup && jest --verbose\",\n \"lint\": \"eslint --ext .ts,.tsx src/\",\n \"prettier\": \"prettier . -l\",\n \"prettier:fix\": \"prettier --write .\"\n },\n \"author\": \"Jeffrey Chupp\",\n \"license\": \"ISC\",\n \"keywords\": [\n \"feature-flags\",\n \"config\"\n ],\n \"devDependencies\": {\n \"@quonfig/javascript\": \">=0.0.3\",\n \"@testing-library/jest-dom\": \"^5.16.5\",\n \"@testing-library/react\": \"^13.3.0\",\n \"@types/jest\": \"^28.1.6\",\n \"@types/node\": \"^18.6.5\",\n \"@types/react\": \"^19.1.10\",\n \"@typescript-eslint/eslint-plugin\": \"^5.33.0\",\n \"@typescript-eslint/parser\": \"^5.33.0\",\n \"eslint\": \"^8.21.0\",\n \"eslint-config-airbnb\": \"^19.0.4\",\n \"eslint-config-airbnb-typescript\": \"^17.0.0\",\n \"eslint-config-prettier\": \"^8.8.0\",\n \"eslint-plugin-import\": \"^2.26.0\",\n \"eslint-plugin-jest\": \"^26.8.2\",\n \"eslint-plugin-jsx-a11y\": \"^6.6.1\",\n \"eslint-plugin-react\": \"^7.30.1\",\n \"eslint-plugin-react-hooks\": \"^4.6.0\",\n \"jest\": \"^28.1.3\",\n \"jest-environment-jsdom\": \"^28.1.3\",\n \"jest-fetch-mock\": \"^3.0.3\",\n \"prettier\": \"^3.0.0\",\n \"react\": \"^19.1.1\",\n \"react-dom\": \"^19.1.1\",\n \"ts-jest\": \"^28.0.7\",\n \"ts-node\": \"^10.9.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^4.7.4\"\n },\n \"peerDependencies\": {\n \"@quonfig/javascript\": \">=0.0.3\",\n \"react\": \"^16 || ^17 || ^18 || ^19\"\n }\n}\n","import React, { PropsWithChildren } from \"react\";\nimport {\n quonfig,\n type InitOptions,\n type ConfigValue,\n type Contexts,\n Quonfig,\n TypedFrontEndConfigurationRaw,\n FrontEndConfigurationRaw,\n Duration,\n encodeContexts,\n} from \"@quonfig/javascript\";\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version } = require(\"../package.json\");\n\n// @quonfig/cli#generate will create interfaces into this namespace for React to consume\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface FrontEndConfigurationAccessor {}\n\nexport type TypedFrontEndConfigurationAccessor = keyof FrontEndConfigurationAccessor extends never\n ? Record<string, unknown>\n : {\n [TypedFlagKey in keyof FrontEndConfigurationAccessor]: FrontEndConfigurationAccessor[TypedFlagKey];\n };\n\ntype ClassMethods<T> = { [K in keyof T]: T[K] };\n\ntype QuonfigTypesafeClass<T = unknown> = new (\n // eslint-disable-next-line no-shadow\n quonfig: Quonfig\n) => T;\n\ntype SharedSettings = Partial<\n Pick<\n InitOptions,\n | \"sdkKey\"\n | \"apiUrl\"\n | \"apiUrls\"\n | \"timeout\"\n | \"collectEvaluationSummaries\"\n | \"collectLoggerNames\"\n >\n> & {\n // We need to redefine the afterEvaluationCallback type to ensure proper dynamic resolution of K\n afterEvaluationCallback?: <K extends keyof TypedFrontEndConfigurationRaw>(\n key: K,\n value: TypedFrontEndConfigurationRaw[K],\n contexts: Contexts | undefined\n ) => void;\n pollInterval?: number;\n onError?: (error: Error) => void;\n};\n\nexport type BaseContext = {\n get: <K extends keyof TypedFrontEndConfigurationRaw>(key: K) => TypedFrontEndConfigurationRaw[K];\n getDuration: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends Duration\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => Duration | undefined;\n contextAttributes: Contexts;\n isEnabled: <\n K extends keyof FrontEndConfigurationRaw extends never\n ? string\n : {\n [IK in keyof TypedFrontEndConfigurationRaw]: TypedFrontEndConfigurationRaw[IK] extends boolean\n ? IK\n : never;\n }[keyof TypedFrontEndConfigurationRaw],\n >(\n key: K\n ) => boolean;\n loading: boolean;\n quonfig: typeof quonfig;\n keys: (keyof TypedFrontEndConfigurationRaw)[];\n settings: SharedSettings;\n};\n\nexport type ProvidedContext = BaseContext & ClassMethods<QuonfigTypesafeClass>;\n\nexport const defaultContext: BaseContext = {\n get: (_key) => undefined,\n getDuration: (_key) => undefined,\n isEnabled: (_key) => false,\n keys: [],\n loading: true,\n contextAttributes: {},\n quonfig,\n settings: {},\n};\n\nexport const QuonfigContext = React.createContext<ProvidedContext>(\n defaultContext as ProvidedContext\n);\n\n// This is a factory function that creates a fully typed useQuonfig hook for a specific QuonfigTypesafe class\nexport function createQuonfigHook<T>(TypesafeClass: QuonfigTypesafeClass<T>) {\n return function useQuonfigHook(): BaseContext & T {\n const baseContext = React.useContext(QuonfigContext);\n\n // Memoize the typesafe instance to prevent unnecessary constructor calls\n const typesafeInstance = React.useMemo(() => {\n const instance = new TypesafeClass(baseContext.quonfig);\n\n // Copy baseContext properties to typesafeInstance except for `get` + `quonfig`\n Object.assign(instance as any, {\n getDuration: baseContext.getDuration,\n contextAttributes: baseContext.contextAttributes,\n isEnabled: baseContext.isEnabled,\n loading: baseContext.loading,\n keys: baseContext.keys,\n settings: baseContext.settings,\n });\n\n return instance;\n }, [baseContext]);\n\n return typesafeInstance as BaseContext & T;\n };\n}\n\n// Basic hook for general use - requires type parameter\nexport const useBaseQuonfig = () => React.useContext(QuonfigContext);\n\n// General hook that returns the context with any explicit type\nexport const useQuonfig = (): ProvidedContext => useBaseQuonfig() as unknown as ProvidedContext;\n\nlet globalQuonfigIsTaken = false;\n\nexport const assignQuonfigClient = () => {\n if (globalQuonfigIsTaken) {\n return new Quonfig();\n }\n\n globalQuonfigIsTaken = true;\n return quonfig;\n};\n\nexport type QuonfigProviderProps = SharedSettings & {\n sdkKey: string;\n contextAttributes?: Contexts;\n initialFlags?: Record<string, unknown>;\n};\n\nconst getContextKey = (\n contextAttributes: Contexts,\n onError: (e: Error) => void\n): string => {\n try {\n if (Object.keys(contextAttributes).length === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n \"QuonfigProvider: You haven't passed any contextAttributes. See https://docs.quonfig.com/docs/sdks/react#using-context\"\n );\n }\n\n return encodeContexts(contextAttributes);\n } catch (e) {\n onError(e as Error);\n return \"\";\n }\n};\n\nfunction QuonfigProvider({\n sdkKey,\n contextAttributes = {},\n onError = (e: unknown) => {\n // eslint-disable-next-line no-console\n console.error(e);\n },\n initialFlags,\n children,\n timeout,\n apiUrl,\n apiUrls,\n pollInterval,\n afterEvaluationCallback = undefined,\n collectEvaluationSummaries,\n collectLoggerNames,\n}: PropsWithChildren<QuonfigProviderProps>) {\n const settings = {\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n pollInterval,\n onError,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n // We use this state to prevent a double-init when useEffect fires due to\n // StrictMode\n const mostRecentlyLoadingContextKey = React.useRef<string | undefined>(undefined);\n // We use this state to pass the loading state to the Provider (updating\n // currentLoadingContextKey won't trigger an update)\n const [loading, setLoading] = React.useState(true);\n const [initialLoad, setInitialLoad] = React.useState(true);\n // Here we track the current identity so we can reload our config when it\n // changes\n const [loadedContextKey, setLoadedContextKey] = React.useState(\"\");\n\n const quonfigClient: Quonfig = React.useMemo(() => assignQuonfigClient(), []);\n\n const contextKey = getContextKey(contextAttributes, onError);\n\n if (initialFlags && initialLoad) {\n quonfigClient.hydrate(initialFlags);\n setInitialLoad(false);\n setLoadedContextKey(contextKey);\n setLoading(false);\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (pollInterval) {\n // eslint-disable-next-line no-console\n console.warn(\"Polling is not supported when hydrating flags via initialFlags\");\n }\n }\n\n React.useEffect(() => {\n setInitialLoad(false);\n\n if (mostRecentlyLoadingContextKey.current === contextKey) {\n return;\n }\n\n setLoading(true);\n try {\n if (mostRecentlyLoadingContextKey.current === undefined) {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n if (!sdkKey) {\n throw new Error(\"QuonfigProvider: sdkKey is required\");\n }\n\n quonfigClient.clientNameString = \"sdk-react\";\n\n const initOptions: InitOptions = {\n context: contextAttributes,\n sdkKey,\n apiUrl,\n apiUrls,\n timeout,\n afterEvaluationCallback,\n collectEvaluationSummaries,\n collectLoggerNames,\n };\n\n quonfigClient\n .init(initOptions)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n\n if (pollInterval) {\n quonfigClient.poll({ frequencyInMs: pollInterval });\n }\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n } else {\n mostRecentlyLoadingContextKey.current = contextKey;\n\n quonfigClient\n .updateContext(contextAttributes)\n .then(() => {\n setLoadedContextKey(contextKey);\n setLoading(false);\n })\n .catch((reason: any) => {\n setLoading(false);\n onError(reason);\n });\n }\n } catch (e) {\n setLoading(false);\n onError(e as Error);\n }\n }, [\n sdkKey,\n loadedContextKey,\n contextKey,\n loading,\n setLoading,\n onError,\n quonfigClient.instanceHash,\n ]);\n\n const value = React.useMemo(() => {\n const baseContext: ProvidedContext = {\n isEnabled: quonfigClient.isEnabled.bind(quonfigClient),\n contextAttributes,\n get: quonfigClient.get.bind(quonfigClient),\n getDuration: quonfigClient.getDuration.bind(quonfigClient),\n keys: Object.keys(quonfigClient.extract()),\n quonfig: quonfigClient,\n loading,\n settings,\n };\n\n return baseContext;\n }, [loadedContextKey, loading, quonfigClient.instanceHash, settings]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigProvider, ConfigValue, SharedSettings, QuonfigTypesafeClass };\n","import React, { PropsWithChildren } from \"react\";\nimport { QuonfigContext, assignQuonfigClient, ProvidedContext } from \"./QuonfigProvider\";\n\nexport type QuonfigTestProviderProps = {\n config: Record<string, any>;\n sdkKey?: string;\n};\n\nfunction QuonfigTestProvider({\n sdkKey,\n config,\n children,\n}: PropsWithChildren<QuonfigTestProviderProps>) {\n const get = (key: string) => config[key];\n const getDuration = (key: string) => config[key];\n const isEnabled = (key: string) => !!get(key);\n\n const quonfigClient = React.useMemo(() => assignQuonfigClient(), []);\n\n const value = React.useMemo(() => {\n quonfigClient.get = get;\n quonfigClient.getDuration = getDuration;\n quonfigClient.isEnabled = isEnabled;\n\n const baseContext: ProvidedContext = {\n isEnabled,\n contextAttributes: config.contextAttributes,\n get,\n getDuration,\n loading: false,\n quonfig: quonfigClient,\n keys: Object.keys(config),\n settings: { sdkKey: sdkKey ?? \"fake-sdk-key-via-the-test-provider\" },\n };\n\n return baseContext;\n }, [config, quonfigClient, sdkKey]);\n\n return <QuonfigContext.Provider value={value}>{children}</QuonfigContext.Provider>;\n}\n\nexport { QuonfigTestProvider };\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "packageManager": "yarn@4.11.0",
3
3
  "name": "@quonfig/react",
4
- "version": "0.0.3",
4
+ "version": "0.0.5",
5
5
  "description": "Feature Flags & Dynamic Configuration as a Service",
6
6
  "main": "dist/index.cjs",
7
7
  "module": "dist/index.mjs",
@@ -44,7 +44,7 @@
44
44
  "config"
45
45
  ],
46
46
  "devDependencies": {
47
- "@quonfig/javascript": "file:../sdk-javascript",
47
+ "@quonfig/javascript": ">=0.0.3",
48
48
  "@testing-library/jest-dom": "^5.16.5",
49
49
  "@testing-library/react": "^13.3.0",
50
50
  "@types/jest": "^28.1.6",
@@ -73,7 +73,7 @@
73
73
  "typescript": "^4.7.4"
74
74
  },
75
75
  "peerDependencies": {
76
- "@quonfig/javascript": ">=0.0.2",
76
+ "@quonfig/javascript": ">=0.0.3",
77
77
  "react": "^16 || ^17 || ^18 || ^19"
78
78
  }
79
79
  }
@@ -1,15 +0,0 @@
1
- "use strict";var window;(window||={}).quonfigReactNamespace=(()=>{var d=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var Ee=d(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.default=zt;var J,Wt=new Uint8Array(16);function zt(){if(!J&&(J=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!J))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return J(Wt)}});var Ge=d(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});G.default=void 0;var Jt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;G.default=Jt});var F=d(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.default=void 0;var Gt=Xt(Ge());function Xt(e){return e&&e.__esModule?e:{default:e}}function Zt(e){return typeof e=="string"&&Gt.default.test(e)}var en=Zt;X.default=en});var Y=d(Q=>{"use strict";Object.defineProperty(Q,"__esModule",{value:!0});Q.default=void 0;Q.unsafeStringify=Xe;var tn=nn(F());function nn(e){return e&&e.__esModule?e:{default:e}}var y=[];for(let e=0;e<256;++e)y.push((e+256).toString(16).slice(1));function Xe(e,n=0){return y[e[n+0]]+y[e[n+1]]+y[e[n+2]]+y[e[n+3]]+"-"+y[e[n+4]]+y[e[n+5]]+"-"+y[e[n+6]]+y[e[n+7]]+"-"+y[e[n+8]]+y[e[n+9]]+"-"+y[e[n+10]]+y[e[n+11]]+y[e[n+12]]+y[e[n+13]]+y[e[n+14]]+y[e[n+15]]}function rn(e,n=0){let t=Xe(e,n);if(!(0,tn.default)(t))throw TypeError("Stringified UUID is invalid");return t}var on=rn;Q.default=on});var et=d(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.default=void 0;var sn=an(Ee()),un=Y();function an(e){return e&&e.__esModule?e:{default:e}}var Ze,we,Te=0,Oe=0;function ln(e,n,t){let r=n&&t||0,o=n||new Array(16);e=e||{};let i=e.node||Ze,s=e.clockseq!==void 0?e.clockseq:we;if(i==null||s==null){let p=e.random||(e.rng||sn.default)();i==null&&(i=Ze=[p[0]|1,p[1],p[2],p[3],p[4],p[5]]),s==null&&(s=we=(p[6]<<8|p[7])&16383)}let u=e.msecs!==void 0?e.msecs:Date.now(),a=e.nsecs!==void 0?e.nsecs:Oe+1,l=u-Te+(a-Oe)/1e4;if(l<0&&e.clockseq===void 0&&(s=s+1&16383),(l<0||u>Te)&&e.nsecs===void 0&&(a=0),a>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Te=u,Oe=a,we=s,u+=122192928e5;let f=((u&268435455)*1e4+a)%4294967296;o[r++]=f>>>24&255,o[r++]=f>>>16&255,o[r++]=f>>>8&255,o[r++]=f&255;let v=u/4294967296*1e4&268435455;o[r++]=v>>>8&255,o[r++]=v&255,o[r++]=v>>>24&15|16,o[r++]=v>>>16&255,o[r++]=s>>>8|128,o[r++]=s&255;for(let p=0;p<6;++p)o[r+p]=i[p];return n||(0,un.unsafeStringify)(o)}var cn=ln;Z.default=cn});var Ce=d(ee=>{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.default=void 0;var fn=dn(F());function dn(e){return e&&e.__esModule?e:{default:e}}function gn(e){if(!(0,fn.default)(e))throw TypeError("Invalid UUID");let n,t=new Uint8Array(16);return t[0]=(n=parseInt(e.slice(0,8),16))>>>24,t[1]=n>>>16&255,t[2]=n>>>8&255,t[3]=n&255,t[4]=(n=parseInt(e.slice(9,13),16))>>>8,t[5]=n&255,t[6]=(n=parseInt(e.slice(14,18),16))>>>8,t[7]=n&255,t[8]=(n=parseInt(e.slice(19,23),16))>>>8,t[9]=n&255,t[10]=(n=parseInt(e.slice(24,36),16))/1099511627776&255,t[11]=n/4294967296&255,t[12]=n>>>24&255,t[13]=n>>>16&255,t[14]=n>>>8&255,t[15]=n&255,t}var pn=gn;ee.default=pn});var xe=d(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.URL=L.DNS=void 0;L.default=mn;var hn=Y(),vn=_n(Ce());function _n(e){return e&&e.__esModule?e:{default:e}}function yn(e){e=unescape(encodeURIComponent(e));let n=[];for(let t=0;t<e.length;++t)n.push(e.charCodeAt(t));return n}var tt="6ba7b810-9dad-11d1-80b4-00c04fd430c8";L.DNS=tt;var nt="6ba7b811-9dad-11d1-80b4-00c04fd430c8";L.URL=nt;function mn(e,n,t){function r(o,i,s,u){var a;if(typeof o=="string"&&(o=yn(o)),typeof i=="string"&&(i=(0,vn.default)(i)),((a=i)===null||a===void 0?void 0:a.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+o.length);if(l.set(i),l.set(o,i.length),l=t(l),l[6]=l[6]&15|n,l[8]=l[8]&63|128,s){u=u||0;for(let f=0;f<16;++f)s[u+f]=l[f];return s}return(0,hn.unsafeStringify)(l)}try{r.name=e}catch{}return r.DNS=tt,r.URL=nt,r}});var ot=d(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.default=void 0;function bn(e){if(typeof e=="string"){let n=unescape(encodeURIComponent(e));e=new Uint8Array(n.length);for(let t=0;t<n.length;++t)e[t]=n.charCodeAt(t)}return En(wn(Tn(e),e.length*8))}function En(e){let n=[],t=e.length*32,r="0123456789abcdef";for(let o=0;o<t;o+=8){let i=e[o>>5]>>>o%32&255,s=parseInt(r.charAt(i>>>4&15)+r.charAt(i&15),16);n.push(s)}return n}function rt(e){return(e+64>>>9<<4)+14+1}function wn(e,n){e[n>>5]|=128<<n%32,e[rt(n)-1]=n;let t=1732584193,r=-271733879,o=-1732584194,i=271733878;for(let s=0;s<e.length;s+=16){let u=t,a=r,l=o,f=i;t=m(t,r,o,i,e[s],7,-680876936),i=m(i,t,r,o,e[s+1],12,-389564586),o=m(o,i,t,r,e[s+2],17,606105819),r=m(r,o,i,t,e[s+3],22,-1044525330),t=m(t,r,o,i,e[s+4],7,-176418897),i=m(i,t,r,o,e[s+5],12,1200080426),o=m(o,i,t,r,e[s+6],17,-1473231341),r=m(r,o,i,t,e[s+7],22,-45705983),t=m(t,r,o,i,e[s+8],7,1770035416),i=m(i,t,r,o,e[s+9],12,-1958414417),o=m(o,i,t,r,e[s+10],17,-42063),r=m(r,o,i,t,e[s+11],22,-1990404162),t=m(t,r,o,i,e[s+12],7,1804603682),i=m(i,t,r,o,e[s+13],12,-40341101),o=m(o,i,t,r,e[s+14],17,-1502002290),r=m(r,o,i,t,e[s+15],22,1236535329),t=b(t,r,o,i,e[s+1],5,-165796510),i=b(i,t,r,o,e[s+6],9,-1069501632),o=b(o,i,t,r,e[s+11],14,643717713),r=b(r,o,i,t,e[s],20,-373897302),t=b(t,r,o,i,e[s+5],5,-701558691),i=b(i,t,r,o,e[s+10],9,38016083),o=b(o,i,t,r,e[s+15],14,-660478335),r=b(r,o,i,t,e[s+4],20,-405537848),t=b(t,r,o,i,e[s+9],5,568446438),i=b(i,t,r,o,e[s+14],9,-1019803690),o=b(o,i,t,r,e[s+3],14,-187363961),r=b(r,o,i,t,e[s+8],20,1163531501),t=b(t,r,o,i,e[s+13],5,-1444681467),i=b(i,t,r,o,e[s+2],9,-51403784),o=b(o,i,t,r,e[s+7],14,1735328473),r=b(r,o,i,t,e[s+12],20,-1926607734),t=E(t,r,o,i,e[s+5],4,-378558),i=E(i,t,r,o,e[s+8],11,-2022574463),o=E(o,i,t,r,e[s+11],16,1839030562),r=E(r,o,i,t,e[s+14],23,-35309556),t=E(t,r,o,i,e[s+1],4,-1530992060),i=E(i,t,r,o,e[s+4],11,1272893353),o=E(o,i,t,r,e[s+7],16,-155497632),r=E(r,o,i,t,e[s+10],23,-1094730640),t=E(t,r,o,i,e[s+13],4,681279174),i=E(i,t,r,o,e[s],11,-358537222),o=E(o,i,t,r,e[s+3],16,-722521979),r=E(r,o,i,t,e[s+6],23,76029189),t=E(t,r,o,i,e[s+9],4,-640364487),i=E(i,t,r,o,e[s+12],11,-421815835),o=E(o,i,t,r,e[s+15],16,530742520),r=E(r,o,i,t,e[s+2],23,-995338651),t=w(t,r,o,i,e[s],6,-198630844),i=w(i,t,r,o,e[s+7],10,1126891415),o=w(o,i,t,r,e[s+14],15,-1416354905),r=w(r,o,i,t,e[s+5],21,-57434055),t=w(t,r,o,i,e[s+12],6,1700485571),i=w(i,t,r,o,e[s+3],10,-1894986606),o=w(o,i,t,r,e[s+10],15,-1051523),r=w(r,o,i,t,e[s+1],21,-2054922799),t=w(t,r,o,i,e[s+8],6,1873313359),i=w(i,t,r,o,e[s+15],10,-30611744),o=w(o,i,t,r,e[s+6],15,-1560198380),r=w(r,o,i,t,e[s+13],21,1309151649),t=w(t,r,o,i,e[s+4],6,-145523070),i=w(i,t,r,o,e[s+11],10,-1120210379),o=w(o,i,t,r,e[s+2],15,718787259),r=w(r,o,i,t,e[s+9],21,-343485551),t=I(t,u),r=I(r,a),o=I(o,l),i=I(i,f)}return[t,r,o,i]}function Tn(e){if(e.length===0)return[];let n=e.length*8,t=new Uint32Array(rt(n));for(let r=0;r<n;r+=8)t[r>>5]|=(e[r/8]&255)<<r%32;return t}function I(e,n){let t=(e&65535)+(n&65535);return(e>>16)+(n>>16)+(t>>16)<<16|t&65535}function On(e,n){return e<<n|e>>>32-n}function te(e,n,t,r,o,i){return I(On(I(I(n,e),I(r,i)),o),t)}function m(e,n,t,r,o,i,s){return te(n&t|~n&r,e,n,o,i,s)}function b(e,n,t,r,o,i,s){return te(n&r|t&~r,e,n,o,i,s)}function E(e,n,t,r,o,i,s){return te(n^t^r,e,n,o,i,s)}function w(e,n,t,r,o,i,s){return te(t^(n|~r),e,n,o,i,s)}var Cn=bn;ne.default=Cn});var st=d(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});re.default=void 0;var xn=it(xe()),qn=it(ot());function it(e){return e&&e.__esModule?e:{default:e}}var jn=(0,xn.default)("v3",48,qn.default),Rn=jn;re.default=Rn});var ut=d(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.default=void 0;var An=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Sn={randomUUID:An};oe.default=Sn});var ct=d(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});ie.default=void 0;var at=lt(ut()),Pn=lt(Ee()),Mn=Y();function lt(e){return e&&e.__esModule?e:{default:e}}function Un(e,n,t){if(at.default.randomUUID&&!n&&!e)return at.default.randomUUID();e=e||{};let r=e.random||(e.rng||Pn.default)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,n){t=t||0;for(let o=0;o<16;++o)n[t+o]=r[o];return n}return(0,Mn.unsafeStringify)(r)}var In=Un;ie.default=In});var ft=d(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.default=void 0;function Ln(e,n,t,r){switch(e){case 0:return n&t^~n&r;case 1:return n^t^r;case 2:return n&t^n&r^t&r;case 3:return n^t^r}}function qe(e,n){return e<<n|e>>>32-n}function Dn(e){let n=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof e=="string"){let s=unescape(encodeURIComponent(e));e=[];for(let u=0;u<s.length;++u)e.push(s.charCodeAt(u))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);let r=e.length/4+2,o=Math.ceil(r/16),i=new Array(o);for(let s=0;s<o;++s){let u=new Uint32Array(16);for(let a=0;a<16;++a)u[a]=e[s*64+a*4]<<24|e[s*64+a*4+1]<<16|e[s*64+a*4+2]<<8|e[s*64+a*4+3];i[s]=u}i[o-1][14]=(e.length-1)*8/Math.pow(2,32),i[o-1][14]=Math.floor(i[o-1][14]),i[o-1][15]=(e.length-1)*8&4294967295;for(let s=0;s<o;++s){let u=new Uint32Array(80);for(let g=0;g<16;++g)u[g]=i[s][g];for(let g=16;g<80;++g)u[g]=qe(u[g-3]^u[g-8]^u[g-14]^u[g-16],1);let a=t[0],l=t[1],f=t[2],v=t[3],p=t[4];for(let g=0;g<80;++g){let R=Math.floor(g/20),A=qe(a,5)+Ln(R,l,f,v)+p+n[R]+u[g]>>>0;p=v,v=f,f=qe(l,30)>>>0,l=a,a=A}t[0]=t[0]+a>>>0,t[1]=t[1]+l>>>0,t[2]=t[2]+f>>>0,t[3]=t[3]+v>>>0,t[4]=t[4]+p>>>0}return[t[0]>>24&255,t[0]>>16&255,t[0]>>8&255,t[0]&255,t[1]>>24&255,t[1]>>16&255,t[1]>>8&255,t[1]&255,t[2]>>24&255,t[2]>>16&255,t[2]>>8&255,t[2]&255,t[3]>>24&255,t[3]>>16&255,t[3]>>8&255,t[3]&255,t[4]>>24&255,t[4]>>16&255,t[4]>>8&255,t[4]&255]}var Nn=Dn;se.default=Nn});var gt=d(ue=>{"use strict";Object.defineProperty(ue,"__esModule",{value:!0});ue.default=void 0;var kn=dt(xe()),$n=dt(ft());function dt(e){return e&&e.__esModule?e:{default:e}}var Hn=(0,kn.default)("v5",80,$n.default),Vn=Hn;ue.default=Vn});var pt=d(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});ae.default=void 0;var Fn="00000000-0000-0000-0000-000000000000";ae.default=Fn});var ht=d(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.default=void 0;var Qn=Yn(F());function Yn(e){return e&&e.__esModule?e:{default:e}}function Kn(e){if(!(0,Qn.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var Bn=Kn;le.default=Bn});var vt=d(q=>{"use strict";Object.defineProperty(q,"__esModule",{value:!0});Object.defineProperty(q,"NIL",{enumerable:!0,get:function(){return Xn.default}});Object.defineProperty(q,"parse",{enumerable:!0,get:function(){return nr.default}});Object.defineProperty(q,"stringify",{enumerable:!0,get:function(){return tr.default}});Object.defineProperty(q,"v1",{enumerable:!0,get:function(){return Wn.default}});Object.defineProperty(q,"v3",{enumerable:!0,get:function(){return zn.default}});Object.defineProperty(q,"v4",{enumerable:!0,get:function(){return Jn.default}});Object.defineProperty(q,"v5",{enumerable:!0,get:function(){return Gn.default}});Object.defineProperty(q,"validate",{enumerable:!0,get:function(){return er.default}});Object.defineProperty(q,"version",{enumerable:!0,get:function(){return Zn.default}});var Wn=P(et()),zn=P(st()),Jn=P(ct()),Gn=P(gt()),Xn=P(pt()),Zn=P(ht()),er=P(F()),tr=P(Y()),nr=P(Ce());function P(e){return e&&e.__esModule?e:{default:e}}});var Re=d(ce=>{"use strict";Object.defineProperty(ce,"__esModule",{value:!0});ce.Config=void 0;var _t=e=>{let n=0,t=e.match(/^PT(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?$/);if(t)t[1]&&(n+=parseFloat(t[1])*3600),t[2]&&(n+=parseFloat(t[2])*60),t[3]&&(n+=parseFloat(t[3]));else{let r=e.match(/(\d+(?:\.\d+)?)/);r&&(n=parseFloat(r[1]))}return{seconds:n,ms:n*1e3}},rr=(e,n)=>{let{type:t,value:r}=e;switch(t){case"bool":return r;case"int":return r;case"double":return r;case"string":return r;case"json":try{return typeof r=="string"?JSON.parse(r):r}catch(o){return console.error(`Error parsing JSON from quonfig config ${n}`,o,r),r}case"string_list":return r;case"duration":return typeof r=="string"?_t(r):typeof r=="object"&&r!==null&&"millis"in r?{ms:r.millis,seconds:r.millis/1e3}:_t(String(r));case"log_level":return r;default:return r}},je=class e{constructor(n,t,r,o,i){this.key=n,this.value=t,this.type=r,this.rawValue=o,this.configEvaluationMetadata=i}static digest(n){if(n===void 0)return console.trace("Config.digest called with undefined payload"),{};let t={};return n.evaluations&&Object.keys(n.evaluations).forEach(r=>{var o,i;let s=n.evaluations[r],u=s.value,a=rr(u,r),l={configRowIndex:(o=s.configRowIndex)!==null&&o!==void 0?o:0,conditionalValueIndex:(i=s.conditionalValueIndex)!==null&&i!==void 0?i:0,configType:s.configType||"config",configId:s.configId||""};t[r]=new e(r,a,u.type,u,l)}),t}};ce.Config=je});var K=d(C=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});C.encodeContextsTyped=C.encodeContexts=C.validateContexts=C.contextsEqual=C.base64Encode=void 0;var or=e=>{if(typeof window<"u"){if(typeof TextEncoder<"u"){let n=new TextEncoder().encode(e),t=Array.from(n,r=>String.fromCodePoint(r)).join("");return btoa(t)}return window.btoa(e)}return Buffer.from(e).toString("base64")};C.base64Encode=or;var ir=(e,n)=>{let t=Object.keys(e),r=Object.keys(n);return t.length!==r.length?!1:t.every(o=>{let i=e[o],s=n[o];if(!s)return!1;let u=Object.keys(i),a=Object.keys(s);return u.length!==a.length?!1:u.every(l=>i[l]===s[l])})};C.contextsEqual=ir;var sr=e=>{Object.values(e).every(n=>typeof n=="object"&&n!==null)||console.error("Context must be an object where the value of each key is also an object"),Object.values(e).some(n=>Object.values(n).some(t=>typeof t=="object"&&t!==null))&&console.error("Nested objects are not supported in context values at this time")};C.validateContexts=sr;var ur=e=>typeof e=="string"?"string":typeof e=="number"?Number.isInteger(e)?"int":"double":"bool",ar=e=>encodeURIComponent((0,C.base64Encode)(JSON.stringify(e)));C.encodeContexts=ar;var lr=e=>{let n=Object.keys(e).map(t=>{let r={};return Object.keys(e[t]).forEach(o=>{r[o]={[ur(e[t][o])]:e[t][o]}}),{type:t,values:r}});return encodeURIComponent((0,C.base64Encode)(JSON.stringify({contexts:n})))};C.encodeContextsTyped=lr});var yt=d(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});fe.ExponentialBackoff=void 0;var Ae=class{constructor(n,t=2,r=2){this.initialDelay=t,this.maxDelay=n,this.multiplier=r,this.delay=t}call(){let n=this.delay;return this.delay=Math.min(this.delay*this.multiplier,this.maxDelay),n*1e3}};fe.ExponentialBackoff=Ae});var Pe=d(de=>{"use strict";Object.defineProperty(de,"__esModule",{value:!0});de.PeriodicSync=void 0;var cr=yt(),Se=class e{constructor(n,t,r){this.data=new Map,this.client=n,this.name=t,this.startAt=new Date,this.syncIntervalFn=e.calculateSyncInterval(r),this.scheduleNextSync()}stop(){clearTimeout(this.timeoutID)}sync(){if(this.data.size===0)return;this.logInternal(`${this.name} syncing ${this.data.size} items`);let n=this.startAt;this.startAt=new Date,this.flush(this.prepareData(),n)}prepareData(){let n=new Map(this.data);return this.data.clear(),n}scheduleNextSync(){let n=this.syncIntervalFn();this.timeoutID=setTimeout(()=>{this.sync(),this.scheduleNextSync()},n)}static calculateSyncInterval(n){if(n!==void 0)return()=>n;let t=new cr.ExponentialBackoff(300,8);return()=>t.call()}logInternal(n){let t=`quonfig-javascript.quonfig.${this.name}`;this.client.shouldLog({loggerName:t,desiredLevel:"debug",defaultLevel:"error"},!1)&&console.log(`${t}: ${n}`)}};de.PeriodicSync=Se});var B=d(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.default="0.1.0"});var mt=d(x=>{"use strict";var fr=x&&x.__rest||function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]]);return t},dr=x&&x.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(x,"__esModule",{value:!0});x.EvaluationSummaryAggregator=x.massageConfigForTelemetry=x.massageSelectedValue=void 0;var gr=Pe(),pr=dr(B()),hr=e=>{if(e.rawValue){if(e.type==="json")return{json:e.rawValue.value};if(e.type==="duration")return e.rawValue.value}return e.type==="string_list"?{values:e.value}:e.value};x.massageSelectedValue=hr;var vr=(e,n)=>Object.assign(Object.assign({},n),{selectedValue:{[e.type]:(0,x.massageSelectedValue)(e)},count:0});x.massageConfigForTelemetry=vr;var Ue=class e extends gr.PeriodicSync{constructor(n,t,r){super(n,"EvaluationSummaryAggregator",r??3e4),this.maxKeys=t}record(n){if(!(this.data.size>=this.maxKeys)&&n?.configEvaluationMetadata){let t=n.configEvaluationMetadata,{configType:r}=t,o=fr(t,["configType"]),i=`${n.key},${r}`;this.data.has(i)||this.data.set(i,(0,x.massageConfigForTelemetry)(n,o));let s=this.data.get(i);s&&(s.count+=1)}}flush(n,t){var r;let o={start:t.getTime(),end:new Date().getTime(),summaries:e.buildSummaries(n)};(r=this.client.telemetryUploader)===null||r===void 0||r.post(this.buildEvents(o))}static buildSummaries(n){return Array.from(n).map(t=>{let[r,o]=t[0].split(","),i=t[1];return{key:r,type:o,counters:[i]}})}buildEvents(n){return{instanceHash:this.client.instanceHash,clientName:"javascript",clientVersion:pr.default,events:[{summaries:n}]}}};x.EvaluationSummaryAggregator=Ue});var Ie=d(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.DEFAULT_API_URLS=j.DEFAULT_TIMEOUT=j.headers=j.authHeader=void 0;var _r=K(),yr=e=>`Basic ${(0,_r.base64Encode)(`1:${e}`)}`;j.authHeader=yr;var mr=(e,n)=>({Authorization:(0,j.authHeader)(e)});j.headers=mr;j.DEFAULT_TIMEOUT=1e4;j.DEFAULT_API_URLS=["https://primary.quonfig.com","https://secondary.quonfig.com"]});var bt=d(W=>{"use strict";var br=W&&W.__awaiter||function(e,n,t,r){function o(i){return i instanceof t?i:new t(function(s){s(i)})}return new(t||(t=Promise))(function(i,s){function u(f){try{l(r.next(f))}catch(v){s(v)}}function a(f){try{l(r.throw(f))}catch(v){s(v)}}function l(f){f.done?i(f.value):o(f.value).then(u,a)}l((r=r.apply(e,n||[])).next())})};Object.defineProperty(W,"__esModule",{value:!0});var Le=Ie(),Er=K(),De=class{constructor({sdkKey:n,contexts:t,apiUrl:r,apiUrls:o,timeout:i,contextUploadMode:s="periodic_example",clientVersion:u=""}){if(this.sdkKey=n,this.contexts=t,this.apiUrls=(o??(r?[r]:Le.DEFAULT_API_URLS)).map(a=>a.replace(/\/$/,"")),this.apiUrls.length===0)throw new Error("apiUrls must not be empty");this.timeout=i||Le.DEFAULT_TIMEOUT,this.contextUploadMode=s,this.clientVersion=u}url(n){let t=(0,Er.encodeContexts)(this.contexts);return`${n}/api/v2/configs/eval-with-context/${t}`}load(){var n;(n=this.abortController)===null||n===void 0||n.abort();let t={headers:(0,Le.headers)(this.sdkKey,this.clientVersion)};return this.loadWithFailover(t)}loadWithFailover(n){return br(this,void 0,void 0,function*(){let t;for(let r of this.apiUrls)try{return yield this.fetchFromUrl(r,n)}catch(o){t=o}throw t??new Error("All API URLs failed")})}fetchFromUrl(n,t){return new Promise((r,o)=>{this.abortController=new AbortController;let{signal:i}=this.abortController,s=this.url(n);fetch(s,Object.assign({signal:i},t)).then(u=>{if(this.clearAbortTimeout(),u.ok)return u.json();throw new Error(`${u.status} ${u.statusText}`)}).then(u=>{if(!("evaluations"in u))throw new Error(`Invalid payload: ${JSON.stringify(u)}`);r(u)}).catch(u=>{this.clearAbortTimeout(),o(u)}),this.abortTimeoutId=setTimeout(()=>{var u;(u=this.abortController)===null||u===void 0||u.abort()},this.timeout)})}clearAbortTimeout(){clearTimeout(this.abortTimeoutId)}};W.default=De});var Et=d(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.shouldLog=M.isValidLogLevel=M.PREFIX=void 0;M.PREFIX="log-level";var ge={TRACE:1,DEBUG:2,INFO:3,WARN:5,ERROR:6,FATAL:9},wr=e=>Object.keys(ge).includes(e.toUpperCase());M.isValidLogLevel=wr;var Tr=({loggerName:e,desiredLevel:n,defaultLevel:t,get:r})=>{let o=`${M.PREFIX}.${e}`,i=ge[n.toUpperCase()];for(;o.length>0;){let s=r(o);if(s!==void 0)return ge[s.toString()]<=i;if(o.indexOf(".")===-1)break;o=o.slice(0,o.lastIndexOf("."))}return ge[t.toUpperCase()]<=i};M.shouldLog=Tr});var Tt=d(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.DEFAULT_TELEMETRY_URL=void 0;var wt=Ie();N.DEFAULT_TELEMETRY_URL="https://telemetry.quonfig.com";var Ne=class{constructor({sdkKey:n,telemetryUrl:t,timeout:r,clientVersion:o}){this.sdkKey=n,this.telemetryUrl=t||N.DEFAULT_TELEMETRY_URL,this.timeout=r||wt.DEFAULT_TIMEOUT,this.clientVersion=o}clearAbortTimeout(){clearTimeout(this.abortTimeoutId)}postUrl(){return`${this.telemetryUrl}/api/v1/telemetry/`}post(n){let t={method:"POST",headers:Object.assign(Object.assign({},(0,wt.headers)(this.sdkKey,this.clientVersion)),{"Content-Type":"application/json",Accept:"application/json"}),body:JSON.stringify(n),keepalive:!0},r=this.postUrl();return new Promise((o,i)=>{this.postToEndpoint(r,t,o,i)})}postToEndpoint(n,t,r,o){let i=new AbortController,{signal:s}=i;fetch(n,Object.assign({signal:s},t)).then(u=>(this.clearAbortTimeout(),u.ok?u.json():(console.warn(`Quonfig warning: Error uploading telemetry ${u.status} ${u.statusText}`),u.status))).then(u=>{r(u)}).catch(u=>{this.clearAbortTimeout(),o(u)}),this.abortTimeoutId=setTimeout(()=>{i.abort()},this.timeout)}};N.default=Ne});var Ot=d(k=>{"use strict";var Or=k&&k.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(k,"__esModule",{value:!0});k.LoggerAggregator=void 0;var Cr=Pe(),xr=Or(B()),qr={TRACE:"traces",DEBUG:"debugs",INFO:"infos",WARN:"warns",ERROR:"errors",FATAL:"fatals"},ke=class extends Cr.PeriodicSync{constructor(n,t,r){super(n,"LoggerAggregator",r??3e4),this.maxLoggers=t}record(n,t){if(this.data.size>=this.maxLoggers)return;this.data.has(n)||this.data.set(n,{loggerName:n,traces:0,debugs:0,infos:0,warns:0,errors:0,fatals:0});let r=this.data.get(n);if(r){let o=qr[t];r[o]+=1}}flush(n,t){var r;let o={startAt:t.getTime(),endAt:new Date().getTime(),loggers:Array.from(n.values())};(r=this.client.telemetryUploader)===null||r===void 0||r.post(this.buildEvents(o))}buildEvents(n){return{instanceHash:this.client.instanceHash,clientName:"javascript",clientVersion:xr.default,events:[{loggers:n}]}}};k.LoggerAggregator=ke});var xt=d(S=>{"use strict";var pe=S&&S.__awaiter||function(e,n,t,r){function o(i){return i instanceof t?i:new t(function(s){s(i)})}return new(t||(t=Promise))(function(i,s){function u(f){try{l(r.next(f))}catch(v){s(v)}}function a(f){try{l(r.throw(f))}catch(v){s(v)}}function l(f){f.done?i(f.value):o(f.value).then(u,a)}l((r=r.apply(e,n||[])).next())})},He=S&&S.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(S,"__esModule",{value:!0});S.quonfig=S.Quonfig=void 0;var jr=vt(),Ct=Re(),$e=K(),Rr=mt(),Ar=He(bt()),he=Et(),Sr=He(Tt()),Pr=Ot(),Mr=He(B()),ve=class{constructor(){this._configs={},this._pollCount=0,this._pollStatus={status:"not-started"},this._instanceHash=(0,jr.v4)(),this._collectEvaluationSummaries=!0,this._collectLoggerNames=!1,this._contexts={},this.clientNameString="quonfig-javascript",this.loaded=!1,this.afterEvaluationCallback=()=>{}}init(n){return pe(this,arguments,void 0,function*({sdkKey:t,context:r,apiUrl:o,apiUrls:i,telemetryUrl:s,timeout:u,afterEvaluationCallback:a=()=>{},collectEvaluationSummaries:l=!0,collectLoggerNames:f=!1,contextUploadMode:v="periodic_example"}){if(!r)throw new Error("Context must be provided");(0,$e.validateContexts)(r),this._contexts=r;let p=`${this.clientNameString}-${Mr.default}`;return this.loader=new Ar.default({sdkKey:t,contexts:r,apiUrl:o,apiUrls:i,timeout:u,contextUploadMode:v,clientVersion:p}),this._telemetryUploader=new Sr.default({sdkKey:t,telemetryUrl:s,timeout:u,clientVersion:p}),this._collectEvaluationSummaries=l,l&&(this.evaluationSummaryAggregator=new Rr.EvaluationSummaryAggregator(this,1e5)),this._collectLoggerNames=f,f&&(this.loggerAggregator=new Pr.LoggerAggregator(this,1e5)),(l||f)&&typeof window<"u"&&typeof window.addEventListener=="function"&&window.addEventListener("beforeunload",()=>{var g,R;(g=this.evaluationSummaryAggregator)===null||g===void 0||g.sync(),(R=this.loggerAggregator)===null||R===void 0||R.sync()}),this.afterEvaluationCallback=a,this.load()})}get configs(){return this._configs}get contexts(){return this._contexts}get instanceHash(){return this._instanceHash}get pollTimeoutId(){return this._pollTimeoutId}get pollCount(){return this._pollCount}get pollStatus(){return this._pollStatus}get telemetryUploader(){return this._telemetryUploader}load(){return pe(this,void 0,void 0,function*(){if(!this.loader)throw new Error("Quonfig not initialized. Call init() first.");if(globalThis&&globalThis._quonfigBootstrap){let n=globalThis._quonfigBootstrap;if((0,$e.contextsEqual)(this._contexts,n.context)){this.setConfig({evaluations:n.evaluations});return}}return this.loader.contexts=this._contexts,this.loader.load().then(n=>{this.setConfig(n)}).finally(()=>{this.pollStatus.status==="running"&&(this._pollCount+=1)})})}updateContext(n){return pe(this,arguments,void 0,function*(t,r=!1){if(!this.loader)throw new Error("Quonfig not initialized. Call init() first.");if((0,$e.validateContexts)(t),this._contexts=t,!r)return this.load()})}poll(n){return pe(this,arguments,void 0,function*({frequencyInMs:t}){if(!this.loader)throw new Error("Quonfig not initialized. Call init() first.");return this.stopPolling(),this._pollStatus={status:"pending"},this.loader.load().then(r=>{this.setConfig(r),this.doPolling({frequencyInMs:t})})})}doPolling({frequencyInMs:n}){this._pollTimeoutId=setTimeout(()=>{this.load().finally(()=>{this.pollStatus.status==="running"&&this.doPolling({frequencyInMs:n})})},n),this._pollStatus={status:"running",frequencyInMs:n}}stopPolling(){this.pollTimeoutId&&(clearTimeout(this.pollTimeoutId),this._pollTimeoutId=void 0),this._pollStatus={status:"stopped"}}close(){this.stopPolling(),this.stopTelemetry()}stopTelemetry(){var n,t;(n=this.evaluationSummaryAggregator)===null||n===void 0||n.stop(),(t=this.loggerAggregator)===null||t===void 0||t.stop()}setConfig(n){this._configs=Ct.Config.digest(n),this.loaded=!0}hydrate(n){let t=Object.assign({},this._configs);Object.keys(n).forEach(r=>{let o=n[r],i=typeof o=="boolean"?"bool":typeof o=="number"?Number.isInteger(o)?"int":"double":"string";t[r]=new Ct.Config(r,o,i)}),this._configs=t,this.loaded=!0}extract(){let n={};return Object.keys(this._configs).forEach(t=>{n[t]=this._configs[t].value}),n}isEnabled(n){return this.get(n)===!0}get(n){if(!this.loaded){n.startsWith(he.PREFIX)||console.warn(`Quonfig warning: The client has not finished loading data yet. Unable to look up actual value for key "${n}".`);return}let t=this.configs[n],r=t?.value;return n.startsWith(he.PREFIX)||(this._collectEvaluationSummaries&&setTimeout(()=>{var o;return(o=this.evaluationSummaryAggregator)===null||o===void 0?void 0:o.record(t)}),setTimeout(()=>this.afterEvaluationCallback(n,r,this._contexts))),r}getDuration(n){let t=this.get(n);if(t){if(!Object.prototype.hasOwnProperty.call(t,"seconds")||!Object.prototype.hasOwnProperty.call(t,"ms"))throw new Error(`Value for key "${n}" is not a duration`);return t}}shouldLog(n,t=!0){if(this._collectLoggerNames&&(0,he.isValidLogLevel)(n.desiredLevel)){let r=()=>{var o;return(o=this.loggerAggregator)===null||o===void 0?void 0:o.record(n.loggerName,n.desiredLevel.toUpperCase())};t?setTimeout(r):r()}return(0,he.shouldLog)(Object.assign(Object.assign({},n),{get:this.get.bind(this)}))}isCollectingEvaluationSummaries(){return this._collectEvaluationSummaries}isCollectingLoggerNames(){return this._collectLoggerNames}};S.Quonfig=ve;S.quonfig=new ve});var jt=d(_=>{"use strict";var Ur=_&&_.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(_,"__esModule",{value:!0});_.version=_.base64Encode=_.encodeContexts=_.contextsEqual=_.Config=_.Quonfig=_.quonfig=void 0;var qt=xt();Object.defineProperty(_,"quonfig",{enumerable:!0,get:function(){return qt.quonfig}});Object.defineProperty(_,"Quonfig",{enumerable:!0,get:function(){return qt.Quonfig}});var Ir=Re();Object.defineProperty(_,"Config",{enumerable:!0,get:function(){return Ir.Config}});var Ve=K();Object.defineProperty(_,"contextsEqual",{enumerable:!0,get:function(){return Ve.contextsEqual}});Object.defineProperty(_,"encodeContexts",{enumerable:!0,get:function(){return Ve.encodeContexts}});Object.defineProperty(_,"base64Encode",{enumerable:!0,get:function(){return Ve.base64Encode}});var Lr=Ur(B());_.version=Lr.default});var $t=d(c=>{"use strict";var Qe=Symbol.for("react.transitional.element"),Dr=Symbol.for("react.portal"),Nr=Symbol.for("react.fragment"),kr=Symbol.for("react.strict_mode"),$r=Symbol.for("react.profiler"),Hr=Symbol.for("react.consumer"),Vr=Symbol.for("react.context"),Fr=Symbol.for("react.forward_ref"),Qr=Symbol.for("react.suspense"),Yr=Symbol.for("react.memo"),Ut=Symbol.for("react.lazy"),Rt=Symbol.iterator;function Kr(e){return e===null||typeof e!="object"?null:(e=Rt&&e[Rt]||e["@@iterator"],typeof e=="function"?e:null)}var It={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Lt=Object.assign,Dt={};function H(e,n,t){this.props=e,this.context=n,this.refs=Dt,this.updater=t||It}H.prototype.isReactComponent={};H.prototype.setState=function(e,n){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")};H.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Nt(){}Nt.prototype=H.prototype;function Ye(e,n,t){this.props=e,this.context=n,this.refs=Dt,this.updater=t||It}var Ke=Ye.prototype=new Nt;Ke.constructor=Ye;Lt(Ke,H.prototype);Ke.isPureReactComponent=!0;var At=Array.isArray,h={H:null,A:null,T:null,S:null,V:null},kt=Object.prototype.hasOwnProperty;function Be(e,n,t,r,o,i){return t=i.ref,{$$typeof:Qe,type:e,key:n,ref:t!==void 0?t:null,props:i}}function Br(e,n){return Be(e.type,n,void 0,void 0,void 0,e.props)}function We(e){return typeof e=="object"&&e!==null&&e.$$typeof===Qe}function Wr(e){var n={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(t){return n[t]})}var St=/\/+/g;function Fe(e,n){return typeof e=="object"&&e!==null&&e.key!=null?Wr(""+e.key):n.toString(36)}function Pt(){}function zr(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(Pt,Pt):(e.status="pending",e.then(function(n){e.status==="pending"&&(e.status="fulfilled",e.value=n)},function(n){e.status==="pending"&&(e.status="rejected",e.reason=n)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function $(e,n,t,r,o){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(i){case"bigint":case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case Qe:case Dr:s=!0;break;case Ut:return s=e._init,$(s(e._payload),n,t,r,o)}}if(s)return o=o(e),s=r===""?"."+Fe(e,0):r,At(o)?(t="",s!=null&&(t=s.replace(St,"$&/")+"/"),$(o,n,t,"",function(l){return l})):o!=null&&(We(o)&&(o=Br(o,t+(o.key==null||e&&e.key===o.key?"":(""+o.key).replace(St,"$&/")+"/")+s)),n.push(o)),1;s=0;var u=r===""?".":r+":";if(At(e))for(var a=0;a<e.length;a++)r=e[a],i=u+Fe(r,a),s+=$(r,n,t,i,o);else if(a=Kr(e),typeof a=="function")for(e=a.call(e),a=0;!(r=e.next()).done;)r=r.value,i=u+Fe(r,a++),s+=$(r,n,t,i,o);else if(i==="object"){if(typeof e.then=="function")return $(zr(e),n,t,r,o);throw n=String(e),Error("Objects are not valid as a React child (found: "+(n==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":n)+"). If you meant to render a collection of children, use an array instead.")}return s}function _e(e,n,t){if(e==null)return e;var r=[],o=0;return $(e,r,"","",function(i){return n.call(t,i,o++)}),r}function Jr(e){if(e._status===-1){var n=e._result;n=n(),n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var Mt=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var n=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)};function Gr(){}c.Children={map:_e,forEach:function(e,n,t){_e(e,function(){n.apply(this,arguments)},t)},count:function(e){var n=0;return _e(e,function(){n++}),n},toArray:function(e){return _e(e,function(n){return n})||[]},only:function(e){if(!We(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};c.Component=H;c.Fragment=Nr;c.Profiler=$r;c.PureComponent=Ye;c.StrictMode=kr;c.Suspense=Qr;c.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=h;c.__COMPILER_RUNTIME={__proto__:null,c:function(e){return h.H.useMemoCache(e)}};c.cache=function(e){return function(){return e.apply(null,arguments)}};c.cloneElement=function(e,n,t){if(e==null)throw Error("The argument must be a React element, but you passed "+e+".");var r=Lt({},e.props),o=e.key,i=void 0;if(n!=null)for(s in n.ref!==void 0&&(i=void 0),n.key!==void 0&&(o=""+n.key),n)!kt.call(n,s)||s==="key"||s==="__self"||s==="__source"||s==="ref"&&n.ref===void 0||(r[s]=n[s]);var s=arguments.length-2;if(s===1)r.children=t;else if(1<s){for(var u=Array(s),a=0;a<s;a++)u[a]=arguments[a+2];r.children=u}return Be(e.type,o,void 0,void 0,i,r)};c.createContext=function(e){return e={$$typeof:Vr,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:Hr,_context:e},e};c.createElement=function(e,n,t){var r,o={},i=null;if(n!=null)for(r in n.key!==void 0&&(i=""+n.key),n)kt.call(n,r)&&r!=="key"&&r!=="__self"&&r!=="__source"&&(o[r]=n[r]);var s=arguments.length-2;if(s===1)o.children=t;else if(1<s){for(var u=Array(s),a=0;a<s;a++)u[a]=arguments[a+2];o.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps,s)o[r]===void 0&&(o[r]=s[r]);return Be(e,i,void 0,void 0,null,o)};c.createRef=function(){return{current:null}};c.forwardRef=function(e){return{$$typeof:Fr,render:e}};c.isValidElement=We;c.lazy=function(e){return{$$typeof:Ut,_payload:{_status:-1,_result:e},_init:Jr}};c.memo=function(e,n){return{$$typeof:Yr,type:e,compare:n===void 0?null:n}};c.startTransition=function(e){var n=h.T,t={};h.T=t;try{var r=e(),o=h.S;o!==null&&o(t,r),typeof r=="object"&&r!==null&&typeof r.then=="function"&&r.then(Gr,Mt)}catch(i){Mt(i)}finally{h.T=n}};c.unstable_useCacheRefresh=function(){return h.H.useCacheRefresh()};c.use=function(e){return h.H.use(e)};c.useActionState=function(e,n,t){return h.H.useActionState(e,n,t)};c.useCallback=function(e,n){return h.H.useCallback(e,n)};c.useContext=function(e){return h.H.useContext(e)};c.useDebugValue=function(){};c.useDeferredValue=function(e,n){return h.H.useDeferredValue(e,n)};c.useEffect=function(e,n,t){var r=h.H;if(typeof t=="function")throw Error("useEffect CRUD overload is not enabled in this build of React.");return r.useEffect(e,n)};c.useId=function(){return h.H.useId()};c.useImperativeHandle=function(e,n,t){return h.H.useImperativeHandle(e,n,t)};c.useInsertionEffect=function(e,n){return h.H.useInsertionEffect(e,n)};c.useLayoutEffect=function(e,n){return h.H.useLayoutEffect(e,n)};c.useMemo=function(e,n){return h.H.useMemo(e,n)};c.useOptimistic=function(e,n){return h.H.useOptimistic(e,n)};c.useReducer=function(e,n,t){return h.H.useReducer(e,n,t)};c.useRef=function(e){return h.H.useRef(e)};c.useState=function(e){return h.H.useState(e)};c.useSyncExternalStore=function(e,n,t){return h.H.useSyncExternalStore(e,n,t)};c.useTransition=function(){return h.H.useTransition()};c.version="19.1.1"});var Vt=d((Fo,Ht)=>{"use strict";Ht.exports=$t()});var co=d(V=>{var z=jt(),Xr=Vt();function Zr(e){return e&&e.__esModule?e:{default:e}}var O=Zr(Xr),eo=Object.getOwnPropertyNames,to=(e,n)=>function(){return n||(0,e[eo(e)[0]])((n={exports:{}}).exports,n),n.exports},no=to({"package.json"(e,n){n.exports={packageManager:"yarn@4.11.0",name:"@quonfig/react",version:"0.0.3",description:"Feature Flags & Dynamic Configuration as a Service",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",repository:{type:"git",url:"https://github.com/quonfig/sdk-react.git"},bugs:{url:"https://github.com/quonfig/sdk-react/issues"},homepage:"https://github.com/quonfig/sdk-react#readme",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs",default:"./dist/index.cjs"}},files:["dist/","README.md","LICENSE","CHANGELOG.md"],scripts:{build:"rm -rf dist/ && tsup",dev:"tsup --watch",bundle:"esbuild --minify --target=esnext --bundle --outfile=dist/quonfig-react.bundle.js --global-name=window.quonfigReactNamespace dist/index.cjs && echo 'window.quonfigReact = window.quonfigReactNamespace.quonfigReact' >> dist/quonfig-react.bundle.js",test:"tsup && jest --verbose",lint:"eslint --ext .ts,.tsx src/",prettier:"prettier . -l","prettier:fix":"prettier --write ."},author:"Jeffrey Chupp",license:"ISC",keywords:["feature-flags","config"],devDependencies:{"@quonfig/javascript":"file:../sdk-javascript","@testing-library/jest-dom":"^5.16.5","@testing-library/react":"^13.3.0","@types/jest":"^28.1.6","@types/node":"^18.6.5","@types/react":"^19.1.10","@typescript-eslint/eslint-plugin":"^5.33.0","@typescript-eslint/parser":"^5.33.0",eslint:"^8.21.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-typescript":"^17.0.0","eslint-config-prettier":"^8.8.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jest":"^26.8.2","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.30.1","eslint-plugin-react-hooks":"^4.6.0",jest:"^28.1.3","jest-environment-jsdom":"^28.1.3","jest-fetch-mock":"^3.0.3",prettier:"^3.0.0",react:"^19.1.1","react-dom":"^19.1.1","ts-jest":"^28.0.7","ts-node":"^10.9.1",tsup:"^8.4.0",typescript:"^4.7.4"},peerDependencies:{"@quonfig/javascript":">=0.0.2",react:"^16 || ^17 || ^18 || ^19"}}}}),{version:Qo}=no(),ro={get:e=>{},getDuration:e=>{},isEnabled:e=>!1,keys:[],loading:!0,contextAttributes:{},quonfig:z.quonfig,settings:{}},ye=O.default.createContext(ro);function oo(e){return function(){let t=O.default.useContext(ye);return O.default.useMemo(()=>{let o=new e(t.quonfig);return Object.assign(o,{getDuration:t.getDuration,contextAttributes:t.contextAttributes,isEnabled:t.isEnabled,loading:t.loading,keys:t.keys,settings:t.settings}),o},[t])}}var io=()=>O.default.useContext(ye),so=()=>io(),Ft=!1,Qt=()=>Ft?new z.Quonfig:(Ft=!0,z.quonfig),uo=(e,n)=>{try{return Object.keys(e).length===0&&console.warn("QuonfigProvider: You haven't passed any contextAttributes. See https://docs.quonfig.com/docs/sdks/react#using-context"),z.encodeContexts(e)}catch(t){return n(t),""}};function ao({sdkKey:e,contextAttributes:n={},onError:t=p=>{console.error(p)},initialFlags:r,children:o,timeout:i,apiUrl:s,apiUrls:u,pollInterval:a,afterEvaluationCallback:l=void 0,collectEvaluationSummaries:f,collectLoggerNames:v}){let p={sdkKey:e,apiUrl:s,apiUrls:u,timeout:i,pollInterval:a,onError:t,afterEvaluationCallback:l,collectEvaluationSummaries:f,collectLoggerNames:v},g=O.default.useRef(void 0),[R,A]=O.default.useState(!0),[Yt,ze]=O.default.useState(!0),[Je,me]=O.default.useState(""),T=O.default.useMemo(()=>Qt(),[]),U=uo(n,t);r&&Yt&&(T.hydrate(r),ze(!1),me(U),A(!1),g.current=U,a&&console.warn("Polling is not supported when hydrating flags via initialFlags")),O.default.useEffect(()=>{if(ze(!1),g.current!==U){A(!0);try{if(g.current===void 0){if(g.current=U,!e)throw new Error("QuonfigProvider: sdkKey is required");T.clientNameString="sdk-react";let D={context:n,sdkKey:e,apiUrl:s,apiUrls:u,timeout:i,afterEvaluationCallback:l,collectEvaluationSummaries:f,collectLoggerNames:v};T.init(D).then(()=>{me(U),A(!1),a&&T.poll({frequencyInMs:a})}).catch(Bt=>{A(!1),t(Bt)})}else g.current=U,T.updateContext(n).then(()=>{me(U),A(!1)}).catch(D=>{A(!1),t(D)})}catch(D){A(!1),t(D)}}},[e,Je,U,R,A,t,T.instanceHash]);let Kt=O.default.useMemo(()=>({isEnabled:T.isEnabled.bind(T),contextAttributes:n,get:T.get.bind(T),getDuration:T.getDuration.bind(T),keys:Object.keys(T.extract()),quonfig:T,loading:R,settings:p}),[Je,R,T.instanceHash,p]);return O.default.createElement(ye.Provider,{value:Kt},o)}function lo({sdkKey:e,config:n,children:t}){let r=a=>n[a],o=a=>n[a],i=a=>!!r(a),s=O.default.useMemo(()=>Qt(),[]),u=O.default.useMemo(()=>(s.get=r,s.getDuration=o,s.isEnabled=i,{isEnabled:i,contextAttributes:n.contextAttributes,get:r,getDuration:o,loading:!1,quonfig:s,keys:Object.keys(n),settings:{sdkKey:e??"fake-sdk-key-via-the-test-provider"}}),[n,s,e]);return O.default.createElement(ye.Provider,{value:u},t)}Object.defineProperty(V,"quonfig",{enumerable:!0,get:function(){return z.quonfig}});V.QuonfigProvider=ao;V.QuonfigTestProvider=lo;V.createQuonfigHook=oo;V.useQuonfig=so});return co();})();
2
- /*! Bundled license information:
3
-
4
- react/cjs/react.production.js:
5
- (**
6
- * @license React
7
- * react.production.js
8
- *
9
- * Copyright (c) Meta Platforms, Inc. and affiliates.
10
- *
11
- * This source code is licensed under the MIT license found in the
12
- * LICENSE file in the root directory of this source tree.
13
- *)
14
- */
15
- window.quonfigReact = window.quonfigReactNamespace.quonfigReact