@rippling/rippling-sdk 0.2.0-alpha.83 → 0.2.0-alpha.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/examples/manifest/custom-object-creation-workflow/custom-object-creation-workflow.ts +44 -26
- package/examples/manifest/dental-practice-management/dental-practice-management.ts +470 -142
- package/examples/manifest/dental-practice-management/functions/chair-schedule.ts +23 -13
- package/examples/manifest/dental-practice-management/functions/complete-visit.ts +55 -32
- package/examples/manifest/dental-practice-management/functions/operatory-list.ts +23 -13
- package/examples/manifest/dental-practice-management/functions/patient-list.ts +23 -13
- package/examples/manifest/dental-practice-management/functions/treatment-plan-list.ts +23 -13
- package/examples/manifest/existing-manifest-mutations/existing-manifest-mutations.ts +23 -68
- package/examples/manifest/field-service-dispatch/field-service-dispatch.ts +375 -102
- package/examples/manifest/grant-program-management/grant-program-management.ts +419 -125
- package/examples/manifest/gym-membership-management/functions/check-in-desk.ts +23 -13
- package/examples/manifest/gym-membership-management/functions/member-list.ts +23 -13
- package/examples/manifest/gym-membership-management/functions/today-schedule.ts +23 -13
- package/examples/manifest/gym-membership-management/functions/trainer-list.ts +23 -13
- package/examples/manifest/gym-membership-management/gym-membership-management.ts +442 -92
- package/examples/manifest/procurement-approval-hub/procurement-approval-hub.ts +408 -122
- package/examples/manifest/simple-todo-app/functions/mark-done.ts +12 -16
- package/examples/manifest/simple-todo-app/functions/todo-list.ts +23 -13
- package/examples/manifest/simple-todo-app/simple-todo-app.ts +109 -40
- package/examples/manifest/todo-app-without-object-list-view/functions/todo-page.ts +193 -166
- package/examples/manifest/todo-app-without-object-list-view/todo-app-without-object-list-view.ts +47 -24
- package/package.json +13 -7
- package/resources/custom-objects/custom-objects.d.mts +0 -7
- package/resources/custom-objects/custom-objects.d.mts.map +1 -1
- package/resources/custom-objects/custom-objects.d.ts +0 -7
- package/resources/custom-objects/custom-objects.d.ts.map +1 -1
- package/resources/custom-objects/custom-objects.js.map +1 -1
- package/resources/custom-objects/custom-objects.mjs.map +1 -1
- package/resources/custom-objects/fields.d.mts +14 -128
- package/resources/custom-objects/fields.d.mts.map +1 -1
- package/resources/custom-objects/fields.d.ts +14 -128
- package/resources/custom-objects/fields.d.ts.map +1 -1
- package/src/resources/custom-objects/custom-objects.ts +0 -8
- package/src/resources/custom-objects/fields.ts +13 -191
- package/src/tsconfig.json +1 -1
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
- package/core/platform/custom-objects/category.d.mts +0 -125
- package/core/platform/custom-objects/category.d.mts.map +0 -1
- package/core/platform/custom-objects/category.d.ts +0 -125
- package/core/platform/custom-objects/category.d.ts.map +0 -1
- package/core/platform/custom-objects/category.js +0 -188
- package/core/platform/custom-objects/category.js.map +0 -1
- package/core/platform/custom-objects/category.mjs +0 -178
- package/core/platform/custom-objects/category.mjs.map +0 -1
- package/core/platform/custom-objects/definition.d.mts +0 -147
- package/core/platform/custom-objects/definition.d.mts.map +0 -1
- package/core/platform/custom-objects/definition.d.ts +0 -147
- package/core/platform/custom-objects/definition.d.ts.map +0 -1
- package/core/platform/custom-objects/definition.js +0 -200
- package/core/platform/custom-objects/definition.js.map +0 -1
- package/core/platform/custom-objects/definition.mjs +0 -190
- package/core/platform/custom-objects/definition.mjs.map +0 -1
- package/core/platform/custom-objects/fields.d.mts +0 -302
- package/core/platform/custom-objects/fields.d.mts.map +0 -1
- package/core/platform/custom-objects/fields.d.ts +0 -302
- package/core/platform/custom-objects/fields.d.ts.map +0 -1
- package/core/platform/custom-objects/fields.js +0 -369
- package/core/platform/custom-objects/fields.js.map +0 -1
- package/core/platform/custom-objects/fields.mjs +0 -347
- package/core/platform/custom-objects/fields.mjs.map +0 -1
- package/core/platform/custom-objects/function-runtime.d.mts +0 -42
- package/core/platform/custom-objects/function-runtime.d.mts.map +0 -1
- package/core/platform/custom-objects/function-runtime.d.ts +0 -42
- package/core/platform/custom-objects/function-runtime.d.ts.map +0 -1
- package/core/platform/custom-objects/function-runtime.js +0 -38
- package/core/platform/custom-objects/function-runtime.js.map +0 -1
- package/core/platform/custom-objects/function-runtime.mjs +0 -35
- package/core/platform/custom-objects/function-runtime.mjs.map +0 -1
- package/core/platform/custom-objects/lifecycle.d.mts +0 -83
- package/core/platform/custom-objects/lifecycle.d.mts.map +0 -1
- package/core/platform/custom-objects/lifecycle.d.ts +0 -83
- package/core/platform/custom-objects/lifecycle.d.ts.map +0 -1
- package/core/platform/custom-objects/lifecycle.js +0 -372
- package/core/platform/custom-objects/lifecycle.js.map +0 -1
- package/core/platform/custom-objects/lifecycle.mjs +0 -367
- package/core/platform/custom-objects/lifecycle.mjs.map +0 -1
- package/core/platform/custom-objects/manager.d.mts +0 -354
- package/core/platform/custom-objects/manager.d.mts.map +0 -1
- package/core/platform/custom-objects/manager.d.ts +0 -354
- package/core/platform/custom-objects/manager.d.ts.map +0 -1
- package/core/platform/custom-objects/manager.js +0 -646
- package/core/platform/custom-objects/manager.js.map +0 -1
- package/core/platform/custom-objects/manager.mjs +0 -637
- package/core/platform/custom-objects/manager.mjs.map +0 -1
- package/core/platform/custom-objects/provisioning.d.mts +0 -138
- package/core/platform/custom-objects/provisioning.d.mts.map +0 -1
- package/core/platform/custom-objects/provisioning.d.ts +0 -138
- package/core/platform/custom-objects/provisioning.d.ts.map +0 -1
- package/core/platform/custom-objects/provisioning.js +0 -455
- package/core/platform/custom-objects/provisioning.js.map +0 -1
- package/core/platform/custom-objects/provisioning.mjs +0 -447
- package/core/platform/custom-objects/provisioning.mjs.map +0 -1
- package/core/platform/custom-objects/rql.d.mts +0 -122
- package/core/platform/custom-objects/rql.d.mts.map +0 -1
- package/core/platform/custom-objects/rql.d.ts +0 -122
- package/core/platform/custom-objects/rql.d.ts.map +0 -1
- package/core/platform/custom-objects/rql.js +0 -225
- package/core/platform/custom-objects/rql.js.map +0 -1
- package/core/platform/custom-objects/rql.mjs +0 -222
- package/core/platform/custom-objects/rql.mjs.map +0 -1
- package/core/platform/custom-objects/schema-manager.d.mts +0 -203
- package/core/platform/custom-objects/schema-manager.d.mts.map +0 -1
- package/core/platform/custom-objects/schema-manager.d.ts +0 -203
- package/core/platform/custom-objects/schema-manager.d.ts.map +0 -1
- package/core/platform/custom-objects/schema-manager.js +0 -256
- package/core/platform/custom-objects/schema-manager.js.map +0 -1
- package/core/platform/custom-objects/schema-manager.mjs +0 -249
- package/core/platform/custom-objects/schema-manager.mjs.map +0 -1
- package/core/platform/custom-objects/typed-rql.d.mts +0 -157
- package/core/platform/custom-objects/typed-rql.d.mts.map +0 -1
- package/core/platform/custom-objects/typed-rql.d.ts +0 -157
- package/core/platform/custom-objects/typed-rql.d.ts.map +0 -1
- package/core/platform/custom-objects/typed-rql.js +0 -583
- package/core/platform/custom-objects/typed-rql.js.map +0 -1
- package/core/platform/custom-objects/typed-rql.mjs +0 -580
- package/core/platform/custom-objects/typed-rql.mjs.map +0 -1
- package/core/platform/custom-objects/types.d.mts +0 -549
- package/core/platform/custom-objects/types.d.mts.map +0 -1
- package/core/platform/custom-objects/types.d.ts +0 -549
- package/core/platform/custom-objects/types.d.ts.map +0 -1
- package/core/platform/custom-objects/types.js +0 -20
- package/core/platform/custom-objects/types.js.map +0 -1
- package/core/platform/custom-objects/types.mjs +0 -17
- package/core/platform/custom-objects/types.mjs.map +0 -1
- package/core/platform/custom-objects/validation.d.mts +0 -97
- package/core/platform/custom-objects/validation.d.mts.map +0 -1
- package/core/platform/custom-objects/validation.d.ts +0 -97
- package/core/platform/custom-objects/validation.d.ts.map +0 -1
- package/core/platform/custom-objects/validation.js +0 -477
- package/core/platform/custom-objects/validation.js.map +0 -1
- package/core/platform/custom-objects/validation.mjs +0 -465
- package/core/platform/custom-objects/validation.mjs.map +0 -1
- package/core/platform/custom-objects.d.mts +0 -67
- package/core/platform/custom-objects.d.mts.map +0 -1
- package/core/platform/custom-objects.d.ts +0 -67
- package/core/platform/custom-objects.d.ts.map +0 -1
- package/core/platform/custom-objects.js +0 -118
- package/core/platform/custom-objects.js.map +0 -1
- package/core/platform/custom-objects.mjs +0 -45
- package/core/platform/custom-objects.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/action.d.mts +0 -58
- package/core/platform/manifest/custom-objects/action.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/action.d.ts +0 -58
- package/core/platform/manifest/custom-objects/action.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/action.js +0 -44
- package/core/platform/manifest/custom-objects/action.js.map +0 -1
- package/core/platform/manifest/custom-objects/action.mjs +0 -40
- package/core/platform/manifest/custom-objects/action.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.d.mts +0 -240
- package/core/platform/manifest/custom-objects/conditions.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.d.ts +0 -240
- package/core/platform/manifest/custom-objects/conditions.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.js +0 -326
- package/core/platform/manifest/custom-objects/conditions.js.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.mjs +0 -321
- package/core/platform/manifest/custom-objects/conditions.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/existing.d.mts +0 -87
- package/core/platform/manifest/custom-objects/existing.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/existing.d.ts +0 -87
- package/core/platform/manifest/custom-objects/existing.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/existing.js +0 -113
- package/core/platform/manifest/custom-objects/existing.js.map +0 -1
- package/core/platform/manifest/custom-objects/existing.mjs +0 -109
- package/core/platform/manifest/custom-objects/existing.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.d.mts +0 -48
- package/core/platform/manifest/custom-objects/field-resolution.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.d.ts +0 -48
- package/core/platform/manifest/custom-objects/field-resolution.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.js +0 -61
- package/core/platform/manifest/custom-objects/field-resolution.js.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.mjs +0 -58
- package/core/platform/manifest/custom-objects/field-resolution.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.d.mts +0 -87
- package/core/platform/manifest/custom-objects/function-file.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.d.ts +0 -87
- package/core/platform/manifest/custom-objects/function-file.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.js +0 -76
- package/core/platform/manifest/custom-objects/function-file.js.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.mjs +0 -69
- package/core/platform/manifest/custom-objects/function-file.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.d.mts +0 -65
- package/core/platform/manifest/custom-objects/list-view.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.d.ts +0 -65
- package/core/platform/manifest/custom-objects/list-view.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.js +0 -33
- package/core/platform/manifest/custom-objects/list-view.js.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.mjs +0 -30
- package/core/platform/manifest/custom-objects/list-view.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.d.mts +0 -43
- package/core/platform/manifest/custom-objects/object-list-page.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.d.ts +0 -43
- package/core/platform/manifest/custom-objects/object-list-page.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.js +0 -54
- package/core/platform/manifest/custom-objects/object-list-page.js.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.mjs +0 -50
- package/core/platform/manifest/custom-objects/object-list-page.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.d.mts +0 -142
- package/core/platform/manifest/custom-objects/page-layout.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.d.ts +0 -142
- package/core/platform/manifest/custom-objects/page-layout.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.js +0 -184
- package/core/platform/manifest/custom-objects/page-layout.js.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.mjs +0 -180
- package/core/platform/manifest/custom-objects/page-layout.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/register.d.mts +0 -87
- package/core/platform/manifest/custom-objects/register.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/register.d.ts +0 -87
- package/core/platform/manifest/custom-objects/register.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/register.js +0 -395
- package/core/platform/manifest/custom-objects/register.js.map +0 -1
- package/core/platform/manifest/custom-objects/register.mjs +0 -391
- package/core/platform/manifest/custom-objects/register.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/rule.d.mts +0 -113
- package/core/platform/manifest/custom-objects/rule.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/rule.d.ts +0 -113
- package/core/platform/manifest/custom-objects/rule.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/rule.js +0 -49
- package/core/platform/manifest/custom-objects/rule.js.map +0 -1
- package/core/platform/manifest/custom-objects/rule.mjs +0 -45
- package/core/platform/manifest/custom-objects/rule.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.d.mts +0 -214
- package/core/platform/manifest/custom-objects/sdui-page.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.d.ts +0 -214
- package/core/platform/manifest/custom-objects/sdui-page.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.js +0 -194
- package/core/platform/manifest/custom-objects/sdui-page.js.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.mjs +0 -182
- package/core/platform/manifest/custom-objects/sdui-page.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.d.mts +0 -28
- package/core/platform/manifest/custom-objects/typed-condition.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.d.ts +0 -28
- package/core/platform/manifest/custom-objects/typed-condition.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.js +0 -434
- package/core/platform/manifest/custom-objects/typed-condition.js.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.mjs +0 -431
- package/core/platform/manifest/custom-objects/typed-condition.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/types.d.mts +0 -29
- package/core/platform/manifest/custom-objects/types.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/types.d.ts +0 -29
- package/core/platform/manifest/custom-objects/types.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/types.js +0 -3
- package/core/platform/manifest/custom-objects/types.js.map +0 -1
- package/core/platform/manifest/custom-objects/types.mjs +0 -2
- package/core/platform/manifest/custom-objects/types.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/validation.d.mts +0 -44
- package/core/platform/manifest/custom-objects/validation.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/validation.d.ts +0 -44
- package/core/platform/manifest/custom-objects/validation.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/validation.js +0 -30
- package/core/platform/manifest/custom-objects/validation.js.map +0 -1
- package/core/platform/manifest/custom-objects/validation.mjs +0 -27
- package/core/platform/manifest/custom-objects/validation.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.d.mts +0 -47
- package/core/platform/manifest/custom-objects/workflow.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.d.ts +0 -47
- package/core/platform/manifest/custom-objects/workflow.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.js +0 -38
- package/core/platform/manifest/custom-objects/workflow.js.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.mjs +0 -34
- package/core/platform/manifest/custom-objects/workflow.mjs.map +0 -1
- package/core/platform/manifest/custom-objects.d.mts +0 -85
- package/core/platform/manifest/custom-objects.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects.d.ts +0 -85
- package/core/platform/manifest/custom-objects.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects.js +0 -84
- package/core/platform/manifest/custom-objects.js.map +0 -1
- package/core/platform/manifest/custom-objects.mjs +0 -55
- package/core/platform/manifest/custom-objects.mjs.map +0 -1
- package/examples/manifest/custom-object-creation-workflow/functions/intake-request-created.ts +0 -20
- package/examples/manifest/custom-object-creation-workflow/schema.ts +0 -29
- package/examples/manifest/dental-practice-management/schema.ts +0 -298
- package/examples/manifest/field-service-dispatch/schema.ts +0 -248
- package/examples/manifest/grant-program-management/schema.ts +0 -269
- package/examples/manifest/gym-membership-management/schema.ts +0 -266
- package/examples/manifest/procurement-approval-hub/functions/route-purchase-request.ts +0 -20
- package/examples/manifest/procurement-approval-hub/schema.ts +0 -256
- package/examples/manifest/simple-todo-app/schema.ts +0 -60
- package/examples/manifest/todo-app-without-object-list-view/schema.ts +0 -28
- package/src/core/platform/README.md +0 -20
- package/src/core/platform/custom-objects/category.ts +0 -294
- package/src/core/platform/custom-objects/definition.ts +0 -373
- package/src/core/platform/custom-objects/fields.ts +0 -653
- package/src/core/platform/custom-objects/function-runtime.ts +0 -76
- package/src/core/platform/custom-objects/lifecycle.ts +0 -557
- package/src/core/platform/custom-objects/manager.ts +0 -959
- package/src/core/platform/custom-objects/provisioning.ts +0 -672
- package/src/core/platform/custom-objects/rql.ts +0 -375
- package/src/core/platform/custom-objects/schema-manager.ts +0 -351
- package/src/core/platform/custom-objects/typed-rql.ts +0 -1273
- package/src/core/platform/custom-objects/types.ts +0 -753
- package/src/core/platform/custom-objects/validation.ts +0 -573
- package/src/core/platform/custom-objects.ts +0 -269
- package/src/core/platform/manifest/README.md +0 -26
- package/src/core/platform/manifest/custom-objects/action.ts +0 -87
- package/src/core/platform/manifest/custom-objects/conditions.ts +0 -762
- package/src/core/platform/manifest/custom-objects/existing.ts +0 -221
- package/src/core/platform/manifest/custom-objects/field-resolution.ts +0 -116
- package/src/core/platform/manifest/custom-objects/function-file.ts +0 -149
- package/src/core/platform/manifest/custom-objects/list-view.ts +0 -95
- package/src/core/platform/manifest/custom-objects/object-list-page.ts +0 -87
- package/src/core/platform/manifest/custom-objects/page-layout.ts +0 -380
- package/src/core/platform/manifest/custom-objects/register.ts +0 -555
- package/src/core/platform/manifest/custom-objects/rule.ts +0 -192
- package/src/core/platform/manifest/custom-objects/sdui-page.ts +0 -515
- package/src/core/platform/manifest/custom-objects/typed-condition.ts +0 -617
- package/src/core/platform/manifest/custom-objects/types.ts +0 -92
- package/src/core/platform/manifest/custom-objects/validation.ts +0 -70
- package/src/core/platform/manifest/custom-objects/workflow.ts +0 -71
- package/src/core/platform/manifest/custom-objects.ts +0 -203
- package/src/pebble-sdui-web-custom-apps-shim.d.ts +0 -3
|
@@ -1,580 +0,0 @@
|
|
|
1
|
-
const STANDARD_TYPED_RQL_FIELDS = [
|
|
2
|
-
'id',
|
|
3
|
-
'name',
|
|
4
|
-
'created_at',
|
|
5
|
-
'updated_at',
|
|
6
|
-
'system_updated_at',
|
|
7
|
-
'external_id',
|
|
8
|
-
'owner_role',
|
|
9
|
-
'created_by',
|
|
10
|
-
'last_modified_by',
|
|
11
|
-
];
|
|
12
|
-
const STANDARD_LOOKUP_FIELDS = new Set(['owner_role', 'created_by', 'last_modified_by']);
|
|
13
|
-
/**
|
|
14
|
-
* Returns whether one character should be treated as parser whitespace.
|
|
15
|
-
*
|
|
16
|
-
* @param char - Candidate source character.
|
|
17
|
-
* @returns Whether the parser should skip this character outside literals.
|
|
18
|
-
*/
|
|
19
|
-
function isWhitespace(char) {
|
|
20
|
-
return char === ' ' || char === '\n' || char === '\t' || char === '\r';
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Advances the parser cursor past any contiguous whitespace.
|
|
24
|
-
*
|
|
25
|
-
* @param state - Mutable parser cursor to advance in place.
|
|
26
|
-
*/
|
|
27
|
-
function skipWhitespace(state) {
|
|
28
|
-
while (state.index < state.text.length && isWhitespace(state.text[state.index])) {
|
|
29
|
-
state.index += 1;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Checks whether the parser cursor is currently positioned at one complete RQL keyword token.
|
|
34
|
-
*
|
|
35
|
-
* @param state - Mutable parser cursor whose current position should be checked.
|
|
36
|
-
* @param keyword - Uppercase keyword token to match, such as `AND`, `OR`, or `NULL`.
|
|
37
|
-
* @returns Whether the cursor is positioned at that complete keyword token.
|
|
38
|
-
*/
|
|
39
|
-
function startsWithKeyword(state, keyword) {
|
|
40
|
-
const source = state.text.slice(state.index, state.index + keyword.length);
|
|
41
|
-
if (source.toUpperCase() !== keyword)
|
|
42
|
-
return false;
|
|
43
|
-
const next = state.text[state.index + keyword.length];
|
|
44
|
-
if (next == null)
|
|
45
|
-
return true;
|
|
46
|
-
return isWhitespace(next) || next === ')' || next === ']' || next === ',';
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Consumes one keyword token when it is present at the current parser cursor.
|
|
50
|
-
*
|
|
51
|
-
* @param state - Mutable parser cursor to update in place.
|
|
52
|
-
* @param keyword - Uppercase keyword token to consume.
|
|
53
|
-
* @returns Whether the keyword was present and therefore consumed.
|
|
54
|
-
*/
|
|
55
|
-
function consumeKeyword(state, keyword) {
|
|
56
|
-
skipWhitespace(state);
|
|
57
|
-
if (!startsWithKeyword(state, keyword))
|
|
58
|
-
return false;
|
|
59
|
-
state.index += keyword.length;
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Consumes one specific punctuation character when it is present at the current parser cursor.
|
|
64
|
-
*
|
|
65
|
-
* @param state - Mutable parser cursor to update in place.
|
|
66
|
-
* @param char - Expected punctuation character, such as `(`, `)`, `[`, `]`, or `,`.
|
|
67
|
-
* @returns Whether the character was present and therefore consumed.
|
|
68
|
-
*/
|
|
69
|
-
function consumeCharacter(state, char) {
|
|
70
|
-
skipWhitespace(state);
|
|
71
|
-
if (state.text[state.index] !== char)
|
|
72
|
-
return false;
|
|
73
|
-
state.index += 1;
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Requires one specific punctuation character at the current parser cursor.
|
|
78
|
-
*
|
|
79
|
-
* @param state - Mutable parser cursor to validate and update in place.
|
|
80
|
-
* @param char - Required punctuation character.
|
|
81
|
-
* @throws Error when the required character is not present.
|
|
82
|
-
*/
|
|
83
|
-
function expectCharacter(state, char) {
|
|
84
|
-
if (!consumeCharacter(state, char)) {
|
|
85
|
-
throw new Error(`Expected "${char}" at index ${state.index} while parsing RQL.`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Parses one field identifier token from the current parser cursor.
|
|
90
|
-
*
|
|
91
|
-
* @param state - Mutable parser cursor to read and update in place.
|
|
92
|
-
* @returns The parsed logical field name.
|
|
93
|
-
* @throws Error when no identifier is present at the current cursor.
|
|
94
|
-
*/
|
|
95
|
-
function parseIdentifier(state) {
|
|
96
|
-
skipWhitespace(state);
|
|
97
|
-
const start = state.index;
|
|
98
|
-
while (state.index < state.text.length) {
|
|
99
|
-
const char = state.text[state.index];
|
|
100
|
-
if (!/[A-Za-z0-9_]/.test(char))
|
|
101
|
-
break;
|
|
102
|
-
state.index += 1;
|
|
103
|
-
}
|
|
104
|
-
if (state.index === start) {
|
|
105
|
-
throw new Error(`Expected a field name at index ${state.index} while parsing RQL.`);
|
|
106
|
-
}
|
|
107
|
-
return state.text.slice(start, state.index);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Parses one quoted string literal, including backslash escapes.
|
|
111
|
-
*
|
|
112
|
-
* @param state - Mutable parser cursor positioned at the opening single quote.
|
|
113
|
-
* @returns Parsed runtime string-literal node.
|
|
114
|
-
* @throws Error when the string literal is unterminated or contains an unterminated escape.
|
|
115
|
-
*/
|
|
116
|
-
function parseStringLiteral(state) {
|
|
117
|
-
expectCharacter(state, "'");
|
|
118
|
-
let value = '';
|
|
119
|
-
while (state.index < state.text.length) {
|
|
120
|
-
const char = state.text[state.index];
|
|
121
|
-
state.index += 1;
|
|
122
|
-
if (char === '\\') {
|
|
123
|
-
const next = state.text[state.index];
|
|
124
|
-
if (next == null) {
|
|
125
|
-
throw new Error('Unterminated escape sequence in RQL string literal.');
|
|
126
|
-
}
|
|
127
|
-
value += next;
|
|
128
|
-
state.index += 1;
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (char === "'") {
|
|
132
|
-
return { kind: 'string', value };
|
|
133
|
-
}
|
|
134
|
-
value += char;
|
|
135
|
-
}
|
|
136
|
-
throw new Error('Unterminated RQL string literal.');
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Parses one numeric literal from the current parser cursor.
|
|
140
|
-
*
|
|
141
|
-
* @param state - Mutable parser cursor to read and update in place.
|
|
142
|
-
* @returns Parsed runtime numeric-literal node.
|
|
143
|
-
* @throws Error when no supported numeric literal is present.
|
|
144
|
-
*/
|
|
145
|
-
function parseNumberLiteral(state) {
|
|
146
|
-
skipWhitespace(state);
|
|
147
|
-
const remainder = state.text.slice(state.index);
|
|
148
|
-
const match = remainder.match(/^-?(?:\d*\.\d+|\d+)(?:[Ee][+-]?\d+)?/);
|
|
149
|
-
if (match == null) {
|
|
150
|
-
throw new Error(`Expected a numeric literal at index ${state.index} while parsing RQL.`);
|
|
151
|
-
}
|
|
152
|
-
state.index += match[0].length;
|
|
153
|
-
return { kind: 'number', value: Number(match[0]) };
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Parses one scalar literal: string, number, boolean, or null.
|
|
157
|
-
*
|
|
158
|
-
* @param state - Mutable parser cursor to read and update in place.
|
|
159
|
-
* @returns Parsed runtime scalar-literal node.
|
|
160
|
-
*/
|
|
161
|
-
function parseScalarLiteral(state) {
|
|
162
|
-
skipWhitespace(state);
|
|
163
|
-
const next = state.text[state.index];
|
|
164
|
-
if (next === "'")
|
|
165
|
-
return parseStringLiteral(state);
|
|
166
|
-
if (startsWithKeyword(state, 'TRUE')) {
|
|
167
|
-
state.index += 4;
|
|
168
|
-
return { kind: 'boolean', value: true };
|
|
169
|
-
}
|
|
170
|
-
if (startsWithKeyword(state, 'FALSE')) {
|
|
171
|
-
state.index += 5;
|
|
172
|
-
return { kind: 'boolean', value: false };
|
|
173
|
-
}
|
|
174
|
-
if (startsWithKeyword(state, 'NULL')) {
|
|
175
|
-
state.index += 4;
|
|
176
|
-
return { kind: 'null', value: null };
|
|
177
|
-
}
|
|
178
|
-
return parseNumberLiteral(state);
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Parses one array literal containing zero or more scalar literal elements.
|
|
182
|
-
*
|
|
183
|
-
* @param state - Mutable parser cursor positioned at the opening `[`.
|
|
184
|
-
* @returns Parsed runtime array-literal node.
|
|
185
|
-
*/
|
|
186
|
-
function parseArrayLiteral(state) {
|
|
187
|
-
expectCharacter(state, '[');
|
|
188
|
-
const values = [];
|
|
189
|
-
skipWhitespace(state);
|
|
190
|
-
if (consumeCharacter(state, ']')) {
|
|
191
|
-
return { kind: 'array', value: values };
|
|
192
|
-
}
|
|
193
|
-
while (true) {
|
|
194
|
-
values.push(parseScalarLiteral(state));
|
|
195
|
-
skipWhitespace(state);
|
|
196
|
-
if (consumeCharacter(state, ']')) {
|
|
197
|
-
return { kind: 'array', value: values };
|
|
198
|
-
}
|
|
199
|
-
expectCharacter(state, ',');
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Parses either one scalar literal or one array literal at the current parser cursor.
|
|
204
|
-
*
|
|
205
|
-
* @param state - Mutable parser cursor to read and update in place.
|
|
206
|
-
* @returns Parsed runtime literal node.
|
|
207
|
-
*/
|
|
208
|
-
function parseLiteral(state) {
|
|
209
|
-
skipWhitespace(state);
|
|
210
|
-
if (state.text[state.index] === '[') {
|
|
211
|
-
return parseArrayLiteral(state);
|
|
212
|
-
}
|
|
213
|
-
return parseScalarLiteral(state);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Parses one supported comparison operator token in longest-first order.
|
|
217
|
-
*
|
|
218
|
-
* @param state - Mutable parser cursor to read and update in place.
|
|
219
|
-
* @returns Parsed comparison operator token.
|
|
220
|
-
* @throws Error when no supported operator is present.
|
|
221
|
-
*/
|
|
222
|
-
function parseOperator(state) {
|
|
223
|
-
skipWhitespace(state);
|
|
224
|
-
for (const operator of ['NOT_IN', 'IN', '==', '!=', '<=', '>=', '<', '>']) {
|
|
225
|
-
if (state.text.slice(state.index, state.index + operator.length).toUpperCase() === operator) {
|
|
226
|
-
state.index += operator.length;
|
|
227
|
-
return operator;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
throw new Error(`Expected an RQL operator at index ${state.index}.`);
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Parses one full comparison clause.
|
|
234
|
-
*
|
|
235
|
-
* @param state - Mutable parser cursor positioned at the start of one comparison expression.
|
|
236
|
-
* @returns Parsed runtime comparison node.
|
|
237
|
-
*/
|
|
238
|
-
function parseComparison(state) {
|
|
239
|
-
const field = parseIdentifier(state);
|
|
240
|
-
const operator = parseOperator(state);
|
|
241
|
-
const value = parseLiteral(state);
|
|
242
|
-
return { kind: 'comparison', field, operator, value };
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Parses one parenthesized subexpression or leaf comparison expression.
|
|
246
|
-
*
|
|
247
|
-
* @param state - Mutable parser cursor positioned at the next primary expression.
|
|
248
|
-
* @returns Parsed runtime expression node.
|
|
249
|
-
*/
|
|
250
|
-
function parsePrimary(state) {
|
|
251
|
-
skipWhitespace(state);
|
|
252
|
-
if (consumeCharacter(state, '(')) {
|
|
253
|
-
const expression = parseOrExpression(state);
|
|
254
|
-
expectCharacter(state, ')');
|
|
255
|
-
return expression;
|
|
256
|
-
}
|
|
257
|
-
return parseComparison(state);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Parses one NOT-prefixed expression, recursing to preserve unary precedence.
|
|
261
|
-
*
|
|
262
|
-
* @param state - Mutable parser cursor positioned at the next unary expression.
|
|
263
|
-
* @returns Parsed runtime expression node.
|
|
264
|
-
*/
|
|
265
|
-
function parseNotExpression(state) {
|
|
266
|
-
skipWhitespace(state);
|
|
267
|
-
if (consumeKeyword(state, 'NOT')) {
|
|
268
|
-
return { kind: 'not', operand: parseNotExpression(state) };
|
|
269
|
-
}
|
|
270
|
-
return parsePrimary(state);
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Parses one AND-composed expression group.
|
|
274
|
-
*
|
|
275
|
-
* @param state - Mutable parser cursor positioned at the next AND-precedence expression.
|
|
276
|
-
* @returns Parsed runtime expression node, collapsed when only one operand is present.
|
|
277
|
-
*/
|
|
278
|
-
function parseAndExpression(state) {
|
|
279
|
-
const operands = [parseNotExpression(state)];
|
|
280
|
-
while (true) {
|
|
281
|
-
const checkpoint = state.index;
|
|
282
|
-
if (!consumeKeyword(state, 'AND')) {
|
|
283
|
-
state.index = checkpoint;
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
operands.push(parseNotExpression(state));
|
|
287
|
-
}
|
|
288
|
-
return operands.length === 1 ?
|
|
289
|
-
operands[0]
|
|
290
|
-
: { kind: 'logical', operator: 'AND', operands };
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Parses one OR-composed expression group, the lowest-precedence logical form.
|
|
294
|
-
*
|
|
295
|
-
* @param state - Mutable parser cursor positioned at the next OR-precedence expression.
|
|
296
|
-
* @returns Parsed runtime expression node, collapsed when only one operand is present.
|
|
297
|
-
*/
|
|
298
|
-
function parseOrExpression(state) {
|
|
299
|
-
const operands = [parseAndExpression(state)];
|
|
300
|
-
while (true) {
|
|
301
|
-
const checkpoint = state.index;
|
|
302
|
-
if (!consumeKeyword(state, 'OR')) {
|
|
303
|
-
state.index = checkpoint;
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
operands.push(parseAndExpression(state));
|
|
307
|
-
}
|
|
308
|
-
return operands.length === 1 ?
|
|
309
|
-
operands[0]
|
|
310
|
-
: { kind: 'logical', operator: 'OR', operands };
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Parses one complete parsed-string RQL expression into the runtime AST.
|
|
314
|
-
*
|
|
315
|
-
* @param text - Logical-name RQL source string to parse.
|
|
316
|
-
* @returns Parsed runtime expression tree.
|
|
317
|
-
* @throws Error when the expression is malformed or contains trailing content.
|
|
318
|
-
*/
|
|
319
|
-
function parseTypedRqlExpression(text) {
|
|
320
|
-
const state = { text, index: 0 };
|
|
321
|
-
const expression = parseOrExpression(state);
|
|
322
|
-
skipWhitespace(state);
|
|
323
|
-
if (state.index !== state.text.length) {
|
|
324
|
-
throw new Error(`Unexpected trailing RQL content starting at index ${state.index}: ${state.text.slice(state.index)}.`);
|
|
325
|
-
}
|
|
326
|
-
return expression;
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Resolves the runtime validation/rendering metadata for one logical field name.
|
|
330
|
-
*
|
|
331
|
-
* @param definition - Object definition that owns the valid field set.
|
|
332
|
-
* @param fieldName - Logical field name referenced by the parsed expression.
|
|
333
|
-
* @returns Runtime metadata used to validate literals and render wire-level field names.
|
|
334
|
-
* @throws Error when the field name is unknown for the supplied definition.
|
|
335
|
-
*/
|
|
336
|
-
function resolveRuntimeFieldMetadata(definition, fieldName) {
|
|
337
|
-
if (STANDARD_TYPED_RQL_FIELDS.includes(fieldName)) {
|
|
338
|
-
return {
|
|
339
|
-
apiName: fieldName,
|
|
340
|
-
category: STANDARD_LOOKUP_FIELDS.has(fieldName) ? 'lookup' : 'string',
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
const field = definition.fields[fieldName];
|
|
344
|
-
if (field == null) {
|
|
345
|
-
throw new Error(`Unknown field "${fieldName}" for "${definition.apiName}". Valid fields: ${[
|
|
346
|
-
...STANDARD_TYPED_RQL_FIELDS,
|
|
347
|
-
...Object.keys(definition.fields).sort(),
|
|
348
|
-
].join(', ')}.`);
|
|
349
|
-
}
|
|
350
|
-
switch (field.kind) {
|
|
351
|
-
case 'text':
|
|
352
|
-
case 'long-text':
|
|
353
|
-
case 'email':
|
|
354
|
-
case 'url':
|
|
355
|
-
case 'phone':
|
|
356
|
-
case 'date':
|
|
357
|
-
case 'datetime':
|
|
358
|
-
case 'time':
|
|
359
|
-
case 'radio':
|
|
360
|
-
case 'formula-text':
|
|
361
|
-
case 'formula-date':
|
|
362
|
-
case 'formula-url':
|
|
363
|
-
return { apiName: field.apiName, category: 'string' };
|
|
364
|
-
case 'number':
|
|
365
|
-
case 'currency':
|
|
366
|
-
case 'percentage':
|
|
367
|
-
case 'formula-number':
|
|
368
|
-
case 'formula-currency':
|
|
369
|
-
case 'formula-percentage':
|
|
370
|
-
return { apiName: field.apiName, category: 'number' };
|
|
371
|
-
case 'boolean':
|
|
372
|
-
case 'formula-boolean':
|
|
373
|
-
return { apiName: field.apiName, category: 'boolean' };
|
|
374
|
-
case 'lookup':
|
|
375
|
-
case 'parent-child':
|
|
376
|
-
return { apiName: field.apiName, category: 'lookup' };
|
|
377
|
-
default:
|
|
378
|
-
return { apiName: field.apiName, category: 'unsupported' };
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Describes the literal form a runtime field category accepts in human-readable errors.
|
|
383
|
-
*
|
|
384
|
-
* @param category - Runtime field category being validated.
|
|
385
|
-
* @returns Human-readable description of the expected literal form.
|
|
386
|
-
*/
|
|
387
|
-
function describeRuntimeExpectedLiteral(category) {
|
|
388
|
-
switch (category) {
|
|
389
|
-
case 'string':
|
|
390
|
-
return "a quoted string literal such as 'Ada'";
|
|
391
|
-
case 'number':
|
|
392
|
-
return 'a numeric literal such as 14';
|
|
393
|
-
case 'boolean':
|
|
394
|
-
return 'a boolean literal: True or False';
|
|
395
|
-
case 'lookup':
|
|
396
|
-
return "a quoted record-id string such as 'rec_123'";
|
|
397
|
-
default:
|
|
398
|
-
return 'a supported literal value';
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Describes one parsed literal value in human-readable runtime errors.
|
|
403
|
-
*
|
|
404
|
-
* @param literal - Parsed literal value to describe.
|
|
405
|
-
* @returns Human-readable description of the provided literal.
|
|
406
|
-
*/
|
|
407
|
-
function describeRuntimeLiteral(literal) {
|
|
408
|
-
switch (literal.kind) {
|
|
409
|
-
case 'string':
|
|
410
|
-
return `quoted string ${encodeTypedRqlString(literal.value)}`;
|
|
411
|
-
case 'number':
|
|
412
|
-
return `number ${String(literal.value)}`;
|
|
413
|
-
case 'boolean':
|
|
414
|
-
return `boolean ${literal.value ? 'True' : 'False'}`;
|
|
415
|
-
case 'null':
|
|
416
|
-
return 'null';
|
|
417
|
-
case 'array':
|
|
418
|
-
return `array ${renderTypedRqlLiteral(literal)}`;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
/**
|
|
422
|
-
* Enforces that one parsed literal/operator pairing is valid for the field category.
|
|
423
|
-
*
|
|
424
|
-
* @param fieldName - Logical field name used in user-facing error messages.
|
|
425
|
-
* @param category - Runtime category inferred for that field.
|
|
426
|
-
* @param operator - Comparison operator applied to the field.
|
|
427
|
-
* @param literal - Parsed literal value supplied on the right-hand side.
|
|
428
|
-
* @throws Error when the operator/literal combination is invalid for the field category.
|
|
429
|
-
*/
|
|
430
|
-
function assertLiteralMatchesCategory(fieldName, category, operator, literal) {
|
|
431
|
-
if (category === 'unsupported') {
|
|
432
|
-
throw new Error('typedRql(...) does not yet support this field kind in parsed-string mode.');
|
|
433
|
-
}
|
|
434
|
-
if (operator === 'IN' || operator === 'NOT_IN') {
|
|
435
|
-
if (literal.kind !== 'array') {
|
|
436
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" requires an array literal such as ['value']; received ${describeRuntimeLiteral(literal)}.`);
|
|
437
|
-
}
|
|
438
|
-
if (literal.value.length === 0) {
|
|
439
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" requires a non-empty array literal such as ['value'].`);
|
|
440
|
-
}
|
|
441
|
-
for (const value of literal.value) {
|
|
442
|
-
assertLiteralMatchesCategory(fieldName, category, '==', value);
|
|
443
|
-
}
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
if (literal.kind === 'null') {
|
|
447
|
-
if (operator === '<' || operator === '<=' || operator === '>' || operator === '>=') {
|
|
448
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" does not allow null. Use a concrete ${describeRuntimeExpectedLiteral(category)}.`);
|
|
449
|
-
}
|
|
450
|
-
return;
|
|
451
|
-
}
|
|
452
|
-
if ((operator === '<' || operator === '<=' || operator === '>' || operator === '>=') &&
|
|
453
|
-
!(category === 'string' || category === 'number')) {
|
|
454
|
-
throw new Error(`RQL field "${fieldName}" uses operator "${operator}", which is only valid for string or number fields; this field expects ${describeRuntimeExpectedLiteral(category)}.`);
|
|
455
|
-
}
|
|
456
|
-
switch (category) {
|
|
457
|
-
case 'string':
|
|
458
|
-
if (literal.kind !== 'string') {
|
|
459
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" expects ${describeRuntimeExpectedLiteral(category)}; received ${describeRuntimeLiteral(literal)}.`);
|
|
460
|
-
}
|
|
461
|
-
return;
|
|
462
|
-
case 'number':
|
|
463
|
-
if (literal.kind !== 'number') {
|
|
464
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" expects ${describeRuntimeExpectedLiteral(category)}; received ${describeRuntimeLiteral(literal)}.`);
|
|
465
|
-
}
|
|
466
|
-
return;
|
|
467
|
-
case 'boolean':
|
|
468
|
-
if (literal.kind !== 'boolean') {
|
|
469
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" expects ${describeRuntimeExpectedLiteral(category)}; received ${describeRuntimeLiteral(literal)}.`);
|
|
470
|
-
}
|
|
471
|
-
return;
|
|
472
|
-
case 'lookup':
|
|
473
|
-
if (literal.kind !== 'string') {
|
|
474
|
-
throw new Error(`RQL field "${fieldName}" with operator "${operator}" expects ${describeRuntimeExpectedLiteral(category)}; received ${describeRuntimeLiteral(literal)}.`);
|
|
475
|
-
}
|
|
476
|
-
return;
|
|
477
|
-
default:
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* Walks the runtime AST and validates each comparison against the object definition.
|
|
483
|
-
*
|
|
484
|
-
* @param definition - Object definition that owns the valid field set and field categories.
|
|
485
|
-
* @param node - Parsed runtime AST node to validate.
|
|
486
|
-
* @throws Error when any referenced field or literal/operator combination is invalid.
|
|
487
|
-
*/
|
|
488
|
-
function validateTypedRqlAst(definition, node) {
|
|
489
|
-
switch (node.kind) {
|
|
490
|
-
case 'logical':
|
|
491
|
-
for (const operand of node.operands)
|
|
492
|
-
validateTypedRqlAst(definition, operand);
|
|
493
|
-
return;
|
|
494
|
-
case 'not':
|
|
495
|
-
validateTypedRqlAst(definition, node.operand);
|
|
496
|
-
return;
|
|
497
|
-
case 'comparison': {
|
|
498
|
-
const metadata = resolveRuntimeFieldMetadata(definition, node.field);
|
|
499
|
-
assertLiteralMatchesCategory(node.field, metadata.category, node.operator, node.value);
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* Escapes one string value back into backend-ready single-quoted RQL syntax.
|
|
506
|
-
*
|
|
507
|
-
* @param value - Raw string value to encode.
|
|
508
|
-
* @returns Escaped single-quoted RQL literal text.
|
|
509
|
-
*/
|
|
510
|
-
function encodeTypedRqlString(value) {
|
|
511
|
-
return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
|
|
512
|
-
}
|
|
513
|
-
/**
|
|
514
|
-
* Renders one parsed literal value back into backend-ready RQL text.
|
|
515
|
-
*
|
|
516
|
-
* @param literal - Parsed literal node to render.
|
|
517
|
-
* @returns Backend-ready RQL literal text.
|
|
518
|
-
*/
|
|
519
|
-
function renderTypedRqlLiteral(literal) {
|
|
520
|
-
switch (literal.kind) {
|
|
521
|
-
case 'string':
|
|
522
|
-
return encodeTypedRqlString(literal.value);
|
|
523
|
-
case 'number':
|
|
524
|
-
return String(literal.value);
|
|
525
|
-
case 'boolean':
|
|
526
|
-
return literal.value ? 'True' : 'False';
|
|
527
|
-
case 'null':
|
|
528
|
-
return 'null';
|
|
529
|
-
case 'array':
|
|
530
|
-
return `[${literal.value.map((value) => renderTypedRqlLiteral(value)).join(', ')}]`;
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Renders the validated runtime AST back into backend-ready wire-level RQL.
|
|
535
|
-
*
|
|
536
|
-
* @param definition - Object definition that supplies wire-level field API names.
|
|
537
|
-
* @param node - Parsed and validated runtime AST node to render.
|
|
538
|
-
* @returns Backend-ready RQL expression string.
|
|
539
|
-
*/
|
|
540
|
-
function renderTypedRqlAst(definition, node) {
|
|
541
|
-
switch (node.kind) {
|
|
542
|
-
case 'logical':
|
|
543
|
-
return `(${node.operands
|
|
544
|
-
.map((operand) => renderTypedRqlAst(definition, operand))
|
|
545
|
-
.join(` ${node.operator} `)})`;
|
|
546
|
-
case 'not':
|
|
547
|
-
return `(NOT ${renderTypedRqlAst(definition, node.operand)})`;
|
|
548
|
-
case 'comparison': {
|
|
549
|
-
const metadata = resolveRuntimeFieldMetadata(definition, node.field);
|
|
550
|
-
return `(${metadata.apiName} ${node.operator} ${renderTypedRqlLiteral(node.value)})`;
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
/**
|
|
555
|
-
* Parses a constrained logical-name RQL string, validates it against the typed custom-object definition,
|
|
556
|
-
* and renders a backend-ready RQL string that uses wire-level field api names.
|
|
557
|
-
*
|
|
558
|
-
* Supported parsed-string custom-object RQL contract:
|
|
559
|
-
* - standard record fields and local custom-object fields
|
|
560
|
-
* - `==`, `!=`, `<`, `<=`, `>`, `>=`, `IN`, `NOT_IN`
|
|
561
|
-
* - `AND`, `OR`, `NOT`
|
|
562
|
-
* - parentheses / grouping
|
|
563
|
-
* - string / number / boolean / null / array literals
|
|
564
|
-
* - lookup equality against quoted ids such as `owner_role == 'role_123'`
|
|
565
|
-
*
|
|
566
|
-
* This helper intentionally targets the SDK's documented custom-object subset
|
|
567
|
-
* rather than the full universe of backend RQL features.
|
|
568
|
-
*
|
|
569
|
-
* @param definition - Object definition whose logical field names and value categories should be enforced.
|
|
570
|
-
* @param expression - Constrained logical-name RQL source string to parse and render.
|
|
571
|
-
* @returns Backend-ready RQL string that uses wire-level field API names.
|
|
572
|
-
* @typeParam TDefinition - Object definition whose field names and value types should be enforced.
|
|
573
|
-
* @typeParam TExpression - Candidate RQL expression string.
|
|
574
|
-
*/
|
|
575
|
-
export function typedRql(definition, expression) {
|
|
576
|
-
const ast = parseTypedRqlExpression(expression);
|
|
577
|
-
validateTypedRqlAst(definition, ast);
|
|
578
|
-
return renderTypedRqlAst(definition, ast);
|
|
579
|
-
}
|
|
580
|
-
//# sourceMappingURL=typed-rql.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typed-rql.mjs","sourceRoot":"","sources":["../../../src/core/platform/custom-objects/typed-rql.ts"],"names":[],"mappings":"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"}
|