@edgeflags/react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var react=require('react'),sdk=require('@edgeflags/sdk'),jsxRuntime=require('react/jsx-runtime');var s=react.createContext({client:null,version:0});function y({children:n,client:e,token:t,baseUrl:g,context:o,pollingInterval:c,bootstrap:p,debug:F}){let[a,E]=react.useState(0),m=react.useRef(null),i=react.useRef(false),r=react.useMemo(()=>{if(e)return i.current=false,e;if(!t||!g)return null;let l=new sdk.EdgeFlags({token:t,baseUrl:g,context:o,pollingInterval:c,bootstrap:p,debug:F});return i.current=true,l},[e,t,g]);react.useEffect(()=>{if(!r)return;m.current=r;let l=r.on("change",()=>{E(v=>v+1);});return i.current&&r.init().catch(()=>{}),()=>{l(),i.current&&r.destroy();}},[r]);let x=react.useMemo(()=>({client:r,version:a}),[r,a]);return jsxRuntime.jsx(s,{value:x,children:n})}function R(){let{client:n}=react.useContext(s);if(!n)throw new Error("useEdgeFlags must be used within an EdgeFlagsProvider");return n}function V(n,e){let{client:t,version:g}=react.useContext(s);if(!t)return e;let o=t.flag(n);return o===void 0?e:o}function T(n,e){let{client:t,version:g}=react.useContext(s);if(!t)return e;let o=t.config(n);return o===void 0?e:o}exports.EdgeFlagsContext=s;exports.EdgeFlagsProvider=y;exports.useConfig=T;exports.useEdgeFlags=R;exports.useFlag=V;//# sourceMappingURL=index.cjs.map
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.ts","../src/provider.tsx","../src/hooks.ts"],"names":["EdgeFlagsContext","createContext","EdgeFlagsProvider","children","externalClient","token","baseUrl","context","pollingInterval","bootstrap","debug","version","setVersion","useState","clientRef","useRef","ownsClientRef","client","useMemo","ef","EdgeFlags","useEffect","unsub","value","jsx","useEdgeFlags","useContext","useFlag","key","defaultValue","_version","useConfig"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext } from 'react';\nimport type { EdgeFlags } from '@edgeflags/sdk';\n\nexport interface EdgeFlagsContextValue {\n client: EdgeFlags | null;\n version: number;\n}\n\nexport const EdgeFlagsContext = createContext<EdgeFlagsContextValue>({\n client: null,\n version: 0,\n});\n","import { useState, useEffect, useRef, useMemo } from 'react';\nimport { EdgeFlags } from '@edgeflags/sdk';\nimport type { EvaluationContext, EdgeFlagsOptions } from '@edgeflags/sdk';\nimport { EdgeFlagsContext } from './context.js';\n\nexport interface EdgeFlagsProviderProps {\n children: React.ReactNode;\n client?: EdgeFlags;\n token?: string;\n baseUrl?: string;\n context?: EvaluationContext;\n pollingInterval?: number;\n bootstrap?: EdgeFlagsOptions['bootstrap'];\n debug?: boolean;\n}\n\nexport function EdgeFlagsProvider({\n children,\n client: externalClient,\n token,\n baseUrl,\n context,\n pollingInterval,\n bootstrap,\n debug,\n}: EdgeFlagsProviderProps) {\n const [version, setVersion] = useState(0);\n const clientRef = useRef<EdgeFlags | null>(null);\n const ownsClientRef = useRef(false);\n\n const client = useMemo(() => {\n if (externalClient) {\n ownsClientRef.current = false;\n return externalClient;\n }\n\n if (!token || !baseUrl) return null;\n\n const ef = new EdgeFlags({\n token,\n baseUrl,\n context,\n pollingInterval,\n bootstrap,\n debug,\n });\n ownsClientRef.current = true;\n return ef;\n // Only recreate when identity props change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalClient, token, baseUrl]);\n\n useEffect(() => {\n if (!client) return;\n clientRef.current = client;\n\n const unsub = client.on('change', () => {\n setVersion((v) => v + 1);\n });\n\n if (ownsClientRef.current) {\n client.init().catch(() => {\n // Error emitted via 'error' event\n });\n }\n\n return () => {\n unsub();\n if (ownsClientRef.current) {\n client.destroy();\n }\n };\n }, [client]);\n\n const value = useMemo(() => ({ client, version }), [client, version]);\n\n return (\n <EdgeFlagsContext value={value}>\n {children}\n </EdgeFlagsContext>\n );\n}\n","import { useContext } from 'react';\nimport type { FlagValue, EdgeFlags } from '@edgeflags/sdk';\nimport { EdgeFlagsContext } from './context.js';\n\nexport function useEdgeFlags(): EdgeFlags {\n const { client } = useContext(EdgeFlagsContext);\n if (!client) {\n throw new Error('useEdgeFlags must be used within an EdgeFlagsProvider');\n }\n return client;\n}\n\nexport function useFlag(key: string, defaultValue?: FlagValue): FlagValue | undefined {\n const { client, version: _version } = useContext(EdgeFlagsContext);\n if (!client) return defaultValue;\n const value = client.flag(key);\n return value === undefined ? defaultValue : value;\n}\n\nexport function useConfig<T = unknown>(key: string, defaultValue?: T): T | undefined {\n const { client, version: _version } = useContext(EdgeFlagsContext);\n if (!client) return defaultValue;\n const value = client.config(key);\n return (value === undefined ? defaultValue : value) as T | undefined;\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { EdgeFlags, EvaluationContext, EdgeFlagsOptions, FlagValue } from '@edgeflags/sdk';
|
|
3
|
+
import * as react from 'react';
|
|
4
|
+
|
|
5
|
+
interface EdgeFlagsProviderProps {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
client?: EdgeFlags;
|
|
8
|
+
token?: string;
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
context?: EvaluationContext;
|
|
11
|
+
pollingInterval?: number;
|
|
12
|
+
bootstrap?: EdgeFlagsOptions['bootstrap'];
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function EdgeFlagsProvider({ children, client: externalClient, token, baseUrl, context, pollingInterval, bootstrap, debug, }: EdgeFlagsProviderProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
|
|
17
|
+
declare function useEdgeFlags(): EdgeFlags;
|
|
18
|
+
declare function useFlag(key: string, defaultValue?: FlagValue): FlagValue | undefined;
|
|
19
|
+
declare function useConfig<T = unknown>(key: string, defaultValue?: T): T | undefined;
|
|
20
|
+
|
|
21
|
+
interface EdgeFlagsContextValue {
|
|
22
|
+
client: EdgeFlags | null;
|
|
23
|
+
version: number;
|
|
24
|
+
}
|
|
25
|
+
declare const EdgeFlagsContext: react.Context<EdgeFlagsContextValue>;
|
|
26
|
+
|
|
27
|
+
export { EdgeFlagsContext, type EdgeFlagsContextValue, EdgeFlagsProvider, type EdgeFlagsProviderProps, useConfig, useEdgeFlags, useFlag };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { EdgeFlags, EvaluationContext, EdgeFlagsOptions, FlagValue } from '@edgeflags/sdk';
|
|
3
|
+
import * as react from 'react';
|
|
4
|
+
|
|
5
|
+
interface EdgeFlagsProviderProps {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
client?: EdgeFlags;
|
|
8
|
+
token?: string;
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
context?: EvaluationContext;
|
|
11
|
+
pollingInterval?: number;
|
|
12
|
+
bootstrap?: EdgeFlagsOptions['bootstrap'];
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare function EdgeFlagsProvider({ children, client: externalClient, token, baseUrl, context, pollingInterval, bootstrap, debug, }: EdgeFlagsProviderProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
|
|
17
|
+
declare function useEdgeFlags(): EdgeFlags;
|
|
18
|
+
declare function useFlag(key: string, defaultValue?: FlagValue): FlagValue | undefined;
|
|
19
|
+
declare function useConfig<T = unknown>(key: string, defaultValue?: T): T | undefined;
|
|
20
|
+
|
|
21
|
+
interface EdgeFlagsContextValue {
|
|
22
|
+
client: EdgeFlags | null;
|
|
23
|
+
version: number;
|
|
24
|
+
}
|
|
25
|
+
declare const EdgeFlagsContext: react.Context<EdgeFlagsContextValue>;
|
|
26
|
+
|
|
27
|
+
export { EdgeFlagsContext, type EdgeFlagsContextValue, EdgeFlagsProvider, type EdgeFlagsProviderProps, useConfig, useEdgeFlags, useFlag };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {createContext,useState,useRef,useMemo,useEffect,useContext}from'react';import {EdgeFlags}from'@edgeflags/sdk';import {jsx}from'react/jsx-runtime';var s=createContext({client:null,version:0});function y({children:n,client:e,token:t,baseUrl:g,context:o,pollingInterval:c,bootstrap:p,debug:F}){let[a,E]=useState(0),m=useRef(null),i=useRef(false),r=useMemo(()=>{if(e)return i.current=false,e;if(!t||!g)return null;let l=new EdgeFlags({token:t,baseUrl:g,context:o,pollingInterval:c,bootstrap:p,debug:F});return i.current=true,l},[e,t,g]);useEffect(()=>{if(!r)return;m.current=r;let l=r.on("change",()=>{E(v=>v+1);});return i.current&&r.init().catch(()=>{}),()=>{l(),i.current&&r.destroy();}},[r]);let x=useMemo(()=>({client:r,version:a}),[r,a]);return jsx(s,{value:x,children:n})}function R(){let{client:n}=useContext(s);if(!n)throw new Error("useEdgeFlags must be used within an EdgeFlagsProvider");return n}function V(n,e){let{client:t,version:g}=useContext(s);if(!t)return e;let o=t.flag(n);return o===void 0?e:o}function T(n,e){let{client:t,version:g}=useContext(s);if(!t)return e;let o=t.config(n);return o===void 0?e:o}export{s as EdgeFlagsContext,y as EdgeFlagsProvider,T as useConfig,R as useEdgeFlags,V as useFlag};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.ts","../src/provider.tsx","../src/hooks.ts"],"names":["EdgeFlagsContext","createContext","EdgeFlagsProvider","children","externalClient","token","baseUrl","context","pollingInterval","bootstrap","debug","version","setVersion","useState","clientRef","useRef","ownsClientRef","client","useMemo","ef","EdgeFlags","useEffect","unsub","value","jsx","useEdgeFlags","useContext","useFlag","key","defaultValue","_version","useConfig"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext } from 'react';\nimport type { EdgeFlags } from '@edgeflags/sdk';\n\nexport interface EdgeFlagsContextValue {\n client: EdgeFlags | null;\n version: number;\n}\n\nexport const EdgeFlagsContext = createContext<EdgeFlagsContextValue>({\n client: null,\n version: 0,\n});\n","import { useState, useEffect, useRef, useMemo } from 'react';\nimport { EdgeFlags } from '@edgeflags/sdk';\nimport type { EvaluationContext, EdgeFlagsOptions } from '@edgeflags/sdk';\nimport { EdgeFlagsContext } from './context.js';\n\nexport interface EdgeFlagsProviderProps {\n children: React.ReactNode;\n client?: EdgeFlags;\n token?: string;\n baseUrl?: string;\n context?: EvaluationContext;\n pollingInterval?: number;\n bootstrap?: EdgeFlagsOptions['bootstrap'];\n debug?: boolean;\n}\n\nexport function EdgeFlagsProvider({\n children,\n client: externalClient,\n token,\n baseUrl,\n context,\n pollingInterval,\n bootstrap,\n debug,\n}: EdgeFlagsProviderProps) {\n const [version, setVersion] = useState(0);\n const clientRef = useRef<EdgeFlags | null>(null);\n const ownsClientRef = useRef(false);\n\n const client = useMemo(() => {\n if (externalClient) {\n ownsClientRef.current = false;\n return externalClient;\n }\n\n if (!token || !baseUrl) return null;\n\n const ef = new EdgeFlags({\n token,\n baseUrl,\n context,\n pollingInterval,\n bootstrap,\n debug,\n });\n ownsClientRef.current = true;\n return ef;\n // Only recreate when identity props change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalClient, token, baseUrl]);\n\n useEffect(() => {\n if (!client) return;\n clientRef.current = client;\n\n const unsub = client.on('change', () => {\n setVersion((v) => v + 1);\n });\n\n if (ownsClientRef.current) {\n client.init().catch(() => {\n // Error emitted via 'error' event\n });\n }\n\n return () => {\n unsub();\n if (ownsClientRef.current) {\n client.destroy();\n }\n };\n }, [client]);\n\n const value = useMemo(() => ({ client, version }), [client, version]);\n\n return (\n <EdgeFlagsContext value={value}>\n {children}\n </EdgeFlagsContext>\n );\n}\n","import { useContext } from 'react';\nimport type { FlagValue, EdgeFlags } from '@edgeflags/sdk';\nimport { EdgeFlagsContext } from './context.js';\n\nexport function useEdgeFlags(): EdgeFlags {\n const { client } = useContext(EdgeFlagsContext);\n if (!client) {\n throw new Error('useEdgeFlags must be used within an EdgeFlagsProvider');\n }\n return client;\n}\n\nexport function useFlag(key: string, defaultValue?: FlagValue): FlagValue | undefined {\n const { client, version: _version } = useContext(EdgeFlagsContext);\n if (!client) return defaultValue;\n const value = client.flag(key);\n return value === undefined ? defaultValue : value;\n}\n\nexport function useConfig<T = unknown>(key: string, defaultValue?: T): T | undefined {\n const { client, version: _version } = useContext(EdgeFlagsContext);\n if (!client) return defaultValue;\n const value = client.config(key);\n return (value === undefined ? defaultValue : value) as T | undefined;\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@edgeflags/react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React hooks and provider for EdgeFlags feature flag service",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@edgeflags/sdk": "0.1.0"
|
|
26
|
+
},
|
|
27
|
+
"peerDependencies": {
|
|
28
|
+
"react": ">=18"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@testing-library/react": "^16.0.0",
|
|
32
|
+
"@types/react": "^19.0.0",
|
|
33
|
+
"jsdom": "^25.0.0",
|
|
34
|
+
"react": "^19.0.0",
|
|
35
|
+
"react-dom": "^19.0.0",
|
|
36
|
+
"tsup": "^8.0.0",
|
|
37
|
+
"typescript": "^5.7.0"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"feature-flags",
|
|
41
|
+
"edgeflags",
|
|
42
|
+
"react",
|
|
43
|
+
"hooks"
|
|
44
|
+
],
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/edgeflags/sdks.git",
|
|
49
|
+
"directory": "packages/react"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://docs.edgeflags.net/guides/client-sdks/",
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/edgeflags/sdks/issues"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsup",
|
|
57
|
+
"typecheck": "tsc --noEmit",
|
|
58
|
+
"clean": "rm -rf dist"
|
|
59
|
+
}
|
|
60
|
+
}
|