Skip to content

Commit 1c8854d

Browse files
committed
Improve precision compatibility further (for when JSON is parsed with Decimal reviver rather than number)
1 parent b728b89 commit 1c8854d

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

defaultMethods.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,8 @@ const defaultMethods = {
300300
}
301301
},
302302
substr: ([string, from, end]) => {
303+
if (from) from = +from
304+
if (end) end = +end
303305
if (end < 0) {
304306
const result = string.substr(from)
305307
return result.substr(0, result.length + end)

precision/index.js

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ export function configurePrecision (engine, constructor, compatible = true) {
141141
engine.addMethod('===', {
142142
method: (args) => {
143143
if (args.length === 2) {
144-
if (args[0].eq) return args[0].eq(args[1])
145-
if (args[1].eq) return args[1].eq(args[0])
144+
if (args[0].eq && args[1].eq) return args[0].eq(args[1])
146145
return args[0] === args[1]
147146
}
148147
for (let i = 1; i < args.length; i++) {
@@ -155,11 +154,48 @@ export function configurePrecision (engine, constructor, compatible = true) {
155154
traverse: true
156155
}, { sync: true, deterministic: true })
157156

158-
engine.addMethod('!==', {
157+
engine.addMethod('==', {
158+
method: (args) => {
159+
if (args.length === 2) {
160+
if (args[0].eq) return args[0].eq(args[1])
161+
if (args[1].eq) return args[1].eq(args[0])
162+
// eslint-disable-next-line eqeqeq
163+
return args[0] == args[1]
164+
}
165+
for (let i = 1; i < args.length; i++) {
166+
if (args[i - 1].eq && !args[i - 1].eq(args[i])) return false
167+
if (args[i].eq && !args[i].eq(args[i - 1])) return false
168+
// eslint-disable-next-line eqeqeq
169+
if (args[i - 1] != args[i]) return false
170+
}
171+
return true
172+
},
173+
traverse: true
174+
}, { sync: true, deterministic: true })
175+
176+
engine.addMethod('!=', {
159177
method: (args) => {
160178
if (args.length === 2) {
161179
if (args[0].eq) return !args[0].eq(args[1])
162180
if (args[1].eq) return !args[1].eq(args[0])
181+
// eslint-disable-next-line eqeqeq
182+
return args[0] != args[1]
183+
}
184+
for (let i = 1; i < args.length; i++) {
185+
if (args[i - 1].eq && args[i - 1].eq(args[i])) return false
186+
if (args[i].eq && args[i].eq(args[i - 1])) return false
187+
// eslint-disable-next-line eqeqeq
188+
if (args[i - 1] !== args[i]) return true
189+
}
190+
return true
191+
},
192+
traverse: true
193+
}, { sync: true, deterministic: true })
194+
195+
engine.addMethod('!==', {
196+
method: (args) => {
197+
if (args.length === 2) {
198+
if (args[0].eq && args[1].eq) return !args[0].eq(args[1])
163199
return args[0] !== args[1]
164200
}
165201
for (let i = 1; i < args.length; i++) {

0 commit comments

Comments
 (0)