diff --git a/types/parse/index.d.ts b/types/parse/index.d.ts index 95331fe0d7..9e91eb024d 100644 --- a/types/parse/index.d.ts +++ b/types/parse/index.d.ts @@ -891,7 +891,8 @@ declare namespace Parse { interface FunctionResponse { success: (response: any) => void; - error: (response: any) => void; + error (code: number, response: any): void; + error (response: any): void; } interface Cookie { @@ -912,7 +913,9 @@ declare namespace Parse { interface AfterDeleteRequest extends TriggerRequest { } interface BeforeDeleteRequest extends TriggerRequest { } interface BeforeDeleteResponse extends FunctionResponse { } - interface BeforeSaveRequest extends TriggerRequest { } + interface BeforeSaveRequest extends TriggerRequest { + original?: Parse.Object; + } interface BeforeSaveResponse extends FunctionResponse { success: () => void; } @@ -1147,4 +1150,4 @@ declare module "parse/node" { declare module "parse" { import * as parse from "parse/node"; export = parse -} +} \ No newline at end of file diff --git a/types/parse/parse-tests.ts b/types/parse/parse-tests.ts index b8d0d0dd0e..5063c1ae53 100644 --- a/types/parse/parse-tests.ts +++ b/types/parse/parse-tests.ts @@ -385,6 +385,27 @@ function test_cloud_functions() { // result }); + const CUSTOM_ERROR_INVALID_CONDITION = 1001 + const CUSTOM_ERROR_IMMUTABLE_FIELD = 1002 + + Parse.Cloud.beforeSave('MyCustomClass', (request: Parse.Cloud.BeforeSaveRequest, + response: Parse.Cloud.BeforeSaveResponse) => { + + if (request.object.isNew()) { + if (!request.object.has('immutable')) return response.error('Field immutable is required') + } else { + const original = request.original; + if (original == null) { // When the object is not new, request.original must be defined + return response.error(CUSTOM_ERROR_INVALID_CONDITION, 'Original must me defined for an existing object') + } + + if (original.get('immutable') !== request.object.get('immutable')) { + return response.error(CUSTOM_ERROR_IMMUTABLE_FIELD, 'This field cannot be changed') + } + } + response.success() + }); + Parse.Cloud.beforeFind('MyCustomClass', (request: Parse.Cloud.BeforeFindRequest) => { let query = request.query; // the Parse.Query let user = request.user; // the user