Skip to content

Commit

Permalink
prepare 2.29.3 release (#173)
Browse files Browse the repository at this point in the history
* Initial commit

* Delete extraneous files from lib.

* Update initLDClient.test.ts

* Update withLDProvider.tsx (#18)

* update JS SDK dependency to 2.16.3

* use JS SDK 2.17.0

* improve tests to clarify which options we're passing in and which ones are added by the wrapper

* set wrapperName to react-client-sdk

* lint

* Update withLDProvider.test.tsx

* update JS SDK to 2.17.5 + a few dev dependency bumps (#21)

* downgrade typescript to 3.8.3 (#22)

* [Fixes for] Expose LDProvider as a standalone component (#31)

* remove startsWith usage (#23)

* Fix the broken build (#24)

* Expose ld provider (#40)

* Add tests for the LDProvider

* Add LDProvider component

* Add LDProvider to main export

* Update provider tests

* Remove unused EnhancedComponent

* Abstract function to generate react options

* add waitForUserToInitializeClient flag to Provider

* rename to LDProvider.tsx

* fix tests

* remove async from componentDidMount

* fixes from CR

* add test

* cleanup

* update types for componentDidUpdate

* await initLDClient

Co-authored-by: Nicholas Mitchell <nicholas@netlify.com>
Co-authored-by: Martin Heller <mheller@testo.de>

* update to JS SDK 2.18.0 (adds disableSyncEventPost) (#25)

* 45 fix providers to respect subscribed flags (#46)

* Fixed asyncWithLDProvider.tsx and provider.tsx so that they only provide flag changes for subscribed flags.

* Removed unused imports.

* Addressed PR feedback. Fixed linting errors.

Co-authored-by: Clay Embry <cembry@atlassian.com>

* targetflags simplified logic (#26)

* remove client-side ids from examples (#27)

* update JS SDK to 2.18.1

* Fixing camelCaseKeys export (#44)

* new js-common-sdk version (#30)

* adding alias functionality (#31)

* pin typedoc to unblock our releases (#32)

* Removed the guides link

* add inlineUsersToEvents to TypeScript defs by updating js-client-sdk (#33)

* debugging

* Fix linting errors

* [ch103643] Fix examples to use local sdk

* Remove unwanted changes.

* Update package.json

* Update yarn.lock

* Update lock files.

* Update package-lock.json

* Update package-lock.json

* Update package.json

* Update link-dev.sh

Co-authored-by: Ben Woskow <48036130+bwoskow-ld@users.noreply.github.com>

* Update link-dev.sh

* Update yarn.lock

* Add react 17 peer dep (#61)

* Update common JS SDK library to use fixes for debug event generation issues. (#36)

* HOC static hoisting (#71)

* Added a test for hoisting react statics in withLDProvider HOC

* Fixed linting errors

* Fixed more linting errors

* update example app deps (#38)

* Updated asyncWithLDProvider to fetch latest flag values when the Provider renders (#39)

* Updated asyncWithLDProvider to fetch latest flag values when the Provider renders

* Fixed linting

* Updates docs URLs

* fix: improve types of withLDProvider (#97)

* [sc-107070] Include src for sourcemaps to work

* [sc-127032] Omit deferInitialization from asyncWithLDProvider config

* Removed and ignored lock files.

* Update types.ts

* Update typescript version (#44)

* Update Makefile

* Update Makefile

* Deleting test-types.ts (#45)

* [sc-132394] Add typedoc for AsyncProviderConfig (#47)

Co-authored-by: Molly <molly.jones@launchdarkly.com>

* Pass in client (#105)

* [sc134057] Fix react sdk lint errors (#48)

* remove custom TypeDoc build, use Releaser's standard logic (#49)

* update js-client-sdk to 2.20.1 for localstorage error-handling fix and others

* export more public symbols from entry point

* [sc134364] Upgrade typescript, tslint and jest. (#50)

Co-authored-by: Eli Bishop <eli@launchdarkly.com>

* update js-client-sdk to 2.20.2 for sc-142333 fix (#53)

* First commit. TODO: migrate enzyme to rtl.

* Removed enzyme. Fixed prettier parentheses rule.

* Fixed broken snapshot tests. Removed unused imports.

* Update package.json

* Update the version of the js-client-sdk

* Update patch version.

* Rename master to main (#56)

* Set sendEventsOnlyForVariation by default

* Add jest-environment-jsdom as explicit dependency

* Fix TS error

* Add jest-environment-jsdom as explicit dependency

* Fix TS error

* Update tests

* Move wrapper options into base options obj

* Target ES6

* Add tests for camel case cases

* Remove vestigial package

* Make targetFlags doc more clear

* Add error hook and handler

* Revert changes to original docs

* Add context and flags proxy util

* Use flags proxy and update tests

* Fixup

* Fixup

* Don't call variation when initializing

* Add option and failing test

* Passing test

* Remove incorrect comment and fix typo

* Update proxy's get trap

* except after c

* Remove unproxied flags from context

* Restore ldClient dec and clean up camelization

* Update src/types.ts

Co-authored-by: Molly <molly.jones@launchdarkly.com>

* Fixup

* Handle symbols

* Add type constraint to withLDProvider

* Remove getter setter

* Remove error handler and fix bad merge

* Update snapshots

* Update releaser config

* Fixup

* Update version of js-client-sdk used. (#82)

* Upgrade js-client-sdk version to 2.24.0 (#83)

* Upgrade common to 2.24.2 (#84)

* Populate the context with the initial flag state and proxy. (#85)

* [sc-178466] Bugfix flags proxy errors when using native functions (#91)

* [sc-178466] Fix native function proxy errors

* Added unit tests.

* Fix ts any error

* Update getFlagsProxy.test.ts

Co-authored-by: Yusinto Ngadiman <yus@launchdarkly.com>

* Update config.yml

Co-authored-by: Yusinto Ngadiman <yusinto@gmail.com>
Co-authored-by: Ben Woskow <48036130+bwoskow-ld@users.noreply.github.com>
Co-authored-by: Eli Bishop <eli@launchdarkly.com>
Co-authored-by: LaunchDarklyCI <dev@launchdarkly.com>
Co-authored-by: Martin Heller <github@technopolis.de>
Co-authored-by: Ben Woskow <bwoskow@launchdarkly.com>
Co-authored-by: bezreyhan <bezreyhan@gmail.com>
Co-authored-by: Nicholas Mitchell <nicholas@netlify.com>
Co-authored-by: Martin Heller <mheller@testo.de>
Co-authored-by: clayembry <clayembry@yahoo.com>
Co-authored-by: Clay Embry <cembry@atlassian.com>
Co-authored-by: Jonathan Felchlin <jonathan@xgecko.com>
Co-authored-by: Mac Lockard <maclockard@gmail.com>
Co-authored-by: Gavin Whelan <gwhelan@launchdarkly.com>
Co-authored-by: Nathan Waddell <45477581+NathanWaddell121107@users.noreply.github.com>
Co-authored-by: Clifford Tawiah <ctawiah@launchdarkly.com>
Co-authored-by: Cliff Tawiah <82856282+ctawiah@users.noreply.github.com>
Co-authored-by: LaunchDarklyReleaseBot <launchdarklyreleasebot@launchdarkly.com>
Co-authored-by: Ember Stevens <ember.stevens@launchdarkly.com>
Co-authored-by: ember-stevens <79482775+ember-stevens@users.noreply.github.com>
Co-authored-by: Derek Sifford <dereksifford@gmail.com>
Co-authored-by: Jaz White <jwhite@launchdarkly.com>
Co-authored-by: Molly <molly.jones@launchdarkly.com>
Co-authored-by: Tim Lee <tim.lee@red-badger.com>
Co-authored-by: Louis Chan <91093020+louis-launchdarkly@users.noreply.github.com>
Co-authored-by: Louis Chan <lchan@launchdarkly.com>
Co-authored-by: Ryan Lamb <4955475+kinyoklion@users.noreply.github.com>
Co-authored-by: Christie Williams <xie.williams@gmail.com>
Co-authored-by: Yusinto Ngadiman <yus@launchdarkly.com>
  • Loading branch information
1 parent 7518c09 commit 0d57f90
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 13 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
"check-typescript": "tsc",
"prepublishOnly": "npm run build",
"prettier": "prettier --write 'src/*.@(js|ts|tsx|json|css)'",
"link-dev": "./link-dev.sh"
"link-dev": "./link-dev.sh",
"check": "npm i && npm run prettier && npm run lint && tsc && npm run test"
},
"repository": {
"type": "git",
Expand Down
21 changes: 13 additions & 8 deletions src/getFlagsProxy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@ import { LDClient, LDFlagSet } from 'launchdarkly-js-client-sdk';
import getFlagsProxy from './getFlagsProxy';
import { defaultReactOptions } from './types';

// tslint:disable-next-line: no-unsafe-any
const variation = jest.fn((k: string): string | undefined => rawFlags[k]);

const ldClient = ({ variation } as unknown) as LDClient;

const rawFlags: LDFlagSet = {
'foo-bar': 'foobar',
'baz-qux': 'bazqux',
Expand All @@ -17,8 +12,18 @@ const camelizedFlags: LDFlagSet = {
bazQux: 'bazqux',
};

// cast as unknown first to be able to partially mock ldClient
const ldClient = ({ variation: jest.fn((flagKey) => rawFlags[flagKey] as string) } as unknown) as LDClient;

beforeEach(jest.clearAllMocks);

test('native Object functions should be ignored', () => {
const { flags } = getFlagsProxy(ldClient, rawFlags);
flags.hasOwnProperty('fooBar');
flags.propertyIsEnumerable('bazQux');
expect(ldClient.variation).not.toHaveBeenCalled();
});

test('camel cases keys', () => {
const { flags } = getFlagsProxy(ldClient, rawFlags);

Expand All @@ -31,12 +36,12 @@ test('does not camel cases keys', () => {
expect(flags).toEqual(rawFlags);
});

test('proxy calls variation on flag read', () => {
test('proxy calls ldClient.variation on flag read', () => {
const { flags } = getFlagsProxy(ldClient, rawFlags);

expect(flags.fooBar).toBe('foobar');

expect(variation).toHaveBeenCalledWith('foo-bar', 'foobar');
expect(ldClient.variation).toHaveBeenCalledWith('foo-bar', 'foobar');
});

test('returns flag key map', () => {
Expand All @@ -56,5 +61,5 @@ test('does not use proxy if option is false', () => {

expect(flags['foo-bar']).toBe('foobar');

expect(variation).not.toHaveBeenCalled();
expect(ldClient.variation).not.toHaveBeenCalled();
});
10 changes: 6 additions & 4 deletions src/getFlagsProxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,19 @@ function toFlagsProxy(ldClient: LDClient, flags: LDFlagSet, flagKeyMap: LDFlagKe
// trap for reading a flag value using `LDClient#variation` to trigger an evaluation event
get(target, prop, receiver) {
const currentValue = Reflect.get(target, prop, receiver);
if (typeof prop === 'symbol') {

// only process flag keys and ignore symbols and native Object functions
if (typeof prop === 'symbol' || !hasFlag(flagKeyMap, prop)) {
return currentValue;
}

if (currentValue === undefined) {
return;
}
const originalFlagKey = hasFlag(flagKeyMap, prop) ? flagKeyMap[prop] : prop;
const nextValue = ldClient.variation(originalFlagKey, currentValue);

return nextValue;
return ldClient.variation(flagKeyMap[prop], currentValue);
},

// disable all mutation functions to make proxy readonly
setPrototypeOf: () => false,
set: () => false,
Expand Down

0 comments on commit 0d57f90

Please sign in to comment.