forked from ottypes/json0
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes: ottypes#37 # Background There are some corner cases that arise in the `json0` library because - given an object `obj`, and an array `arr` -these statements are both `true` in JavaScript: ```js obj['123'] === obj[123] arr['123'] === arr[123] ``` The fact that these statements are true can lead to some unexpected silent `transform()` failures: ```js const op1 = [{p: ['a', '1', 0], si: 'hi'}] const op2 = [{p: ['a', 1], lm: 0}] json0.transform(op1, op2, 'left') ``` Actual result: `[{p: ["a", 2, 0], si: "hi"}]` Expected result: `[{p: ["a", 0, 0], si: "hi"}]` # Solution In order to prevent this, it's been decided that arrays should *always* be indexed by `number`, and objects should *always* be indexed by `string`. This change enforces stricter type checks when calling `apply()`, and now throws in the following cases: - When a `number` is used to key an object property: `type.apply({'1': 'a'}, [{p:[1], od: 'a'}])` - When a `string` is used to key an array property: `type.apply(['a'], [{p:['0'], ld: 'a'}])` - When adding a `string` to a `number`: `type.apply(1, [{p:[], na: 'a}])` - When adding a `number` to a `string`: `type.apply('a', [{p:[], na: 1}])` - When applying a string operation to a non-string: `type.apply(1, [{p: [0], si: 'a'}])`
- Loading branch information
1 parent
95dce1a
commit 504da40
Showing
3 changed files
with
64 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters