diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 05977687c..a58de1c65 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -547,7 +547,7 @@ describe('Parse Object', () => { }); it('cannot create invalid key names', async () => { - const error = new Parse.Error(Parse.Error.INVALID_KEY_NAME, `Invalid key name: "foo^bar"`); + const error = new Parse.Error(Parse.Error.INVALID_KEY_NAME, 'Invalid key name: foo^bar'); const item = new Parse.Object('Item'); expect(() => { item.set({ 'foo^bar': 'baz' }); @@ -559,7 +559,7 @@ describe('Parse Object', () => { const item = new Parse.Object('Item'); expect(() => { item.set({ foobar: 'baz', 'foo^bar': 'baz' }); - }).toThrow(new Parse.Error(Parse.Error.INVALID_KEY_NAME, `Invalid key name: "foo^bar"`)); + }).toThrow(new Parse.Error(Parse.Error.INVALID_KEY_NAME, 'Invalid key name: foo^bar')); }); it('can unset fields', done => { diff --git a/src/ParseObject.ts b/src/ParseObject.ts index c53930757..208e503c7 100644 --- a/src/ParseObject.ts +++ b/src/ParseObject.ts @@ -1099,8 +1099,8 @@ class ParseObject { return new ParseError(ParseError.OTHER_CAUSE, 'ACL must be a Parse ACL.'); } for (const key in attrs) { - if (!/^[A-Za-z][0-9A-Za-z_.]*$/.test(key)) { - return new ParseError(ParseError.INVALID_KEY_NAME, `Invalid key name: "${key}"`); + if (!/^[A-Za-z_][0-9A-Za-z_.]*$/.test(key)) { + return new ParseError(ParseError.INVALID_KEY_NAME, `Invalid key name: ${key}`); } } return false; diff --git a/src/__tests__/ParseObject-test.js b/src/__tests__/ParseObject-test.js index 565b57c96..127b7a053 100644 --- a/src/__tests__/ParseObject-test.js +++ b/src/__tests__/ParseObject-test.js @@ -965,7 +965,7 @@ describe('ParseObject', () => { o.validate({ 'invalid!key': 12, }) - ).toEqual(new ParseError(ParseError.INVALID_KEY_NAME, `Invalid key name: "invalid!key"`)); + ).toEqual(new ParseError(ParseError.INVALID_KEY_NAME, 'Invalid key name: invalid!key')); expect( o.validate({ @@ -988,7 +988,7 @@ describe('ParseObject', () => { expect(o.set('ACL', { '*': { read: true, write: false } })).toBe(o); expect(() => { o.set('$$$', 'o_O'); - }).toThrow(new ParseError(ParseError.INVALID_KEY_NAME, `Invalid key name: "$$$"`)); + }).toThrow(new ParseError(ParseError.INVALID_KEY_NAME, 'Invalid key name: $$$')); }); it('ignores validation if ignoreValidation option is passed to set()', () => { @@ -1003,6 +1003,8 @@ describe('ParseObject', () => { expect(o.isValid()).toBe(true); o.set('someKey', 'someValue'); expect(o.isValid()).toBe(true); + o.set('_internalField', 'allow_underscore'); + expect(o.isValid()).toBe(true); o._finishFetch({ objectId: 'O3', 'invalid!key': 'oops',