@osdk/client 2.6.0-beta.6 → 2.6.0-beta.8

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/build/browser/index.js.map +1 -1
  3. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +31 -23
  4. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  5. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +233 -63
  6. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  7. package/build/browser/object/mediaUpload.js +1 -1
  8. package/build/browser/object/mediaUpload.js.map +1 -1
  9. package/build/browser/observable/internal/base-list/BaseListQuery.js +133 -2
  10. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  11. package/build/browser/observable/internal/links/LinksHelper.js +3 -0
  12. package/build/browser/observable/internal/links/LinksHelper.js.map +1 -1
  13. package/build/browser/observable/internal/list/ListQuery.js +6 -58
  14. package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
  15. package/build/browser/observable/internal/objectset/ObjectSetHelper.js +5 -1
  16. package/build/browser/observable/internal/objectset/ObjectSetHelper.js.map +1 -1
  17. package/build/browser/observable/internal/objectset/ObjectSetQuery.js +3 -0
  18. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  19. package/build/browser/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -1
  20. package/build/browser/observable/internal/types/ObjectUpdate.js +2 -0
  21. package/build/browser/observable/internal/types/ObjectUpdate.js.map +1 -0
  22. package/build/browser/util/UserAgent.js +2 -2
  23. package/build/browser/util/toDataValue.js +3 -2
  24. package/build/browser/util/toDataValue.js.map +1 -1
  25. package/build/browser/util/toDataValue.test.js +1 -1
  26. package/build/browser/util/toDataValue.test.js.map +1 -1
  27. package/build/cjs/{chunk-VNLY3YOJ.cjs → chunk-HJV24UL2.cjs} +76 -78
  28. package/build/cjs/chunk-HJV24UL2.cjs.map +1 -0
  29. package/build/cjs/{chunk-3ZJESPX6.cjs → chunk-PCNVSZXT.cjs} +133 -67
  30. package/build/cjs/chunk-PCNVSZXT.cjs.map +1 -0
  31. package/build/cjs/index.cjs +8 -8
  32. package/build/cjs/index.d.cts +1 -1
  33. package/build/cjs/public/internal.cjs +8 -8
  34. package/build/cjs/public/unstable-do-not-use.cjs +179 -92
  35. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  36. package/build/cjs/public/unstable-do-not-use.d.cts +1 -0
  37. package/build/esm/index.js.map +1 -1
  38. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +31 -23
  39. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  40. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +233 -63
  41. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  42. package/build/esm/object/mediaUpload.js +1 -1
  43. package/build/esm/object/mediaUpload.js.map +1 -1
  44. package/build/esm/observable/internal/base-list/BaseListQuery.js +133 -2
  45. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  46. package/build/esm/observable/internal/links/LinksHelper.js +3 -0
  47. package/build/esm/observable/internal/links/LinksHelper.js.map +1 -1
  48. package/build/esm/observable/internal/list/ListQuery.js +6 -58
  49. package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
  50. package/build/esm/observable/internal/objectset/ObjectSetHelper.js +5 -1
  51. package/build/esm/observable/internal/objectset/ObjectSetHelper.js.map +1 -1
  52. package/build/esm/observable/internal/objectset/ObjectSetQuery.js +3 -0
  53. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  54. package/build/esm/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -1
  55. package/build/esm/observable/internal/types/ObjectUpdate.js +2 -0
  56. package/build/esm/observable/internal/types/ObjectUpdate.js.map +1 -0
  57. package/build/esm/util/UserAgent.js +2 -2
  58. package/build/esm/util/toDataValue.js +3 -2
  59. package/build/esm/util/toDataValue.js.map +1 -1
  60. package/build/esm/util/toDataValue.test.js +1 -1
  61. package/build/esm/util/toDataValue.test.js.map +1 -1
  62. package/build/types/index.d.ts +1 -1
  63. package/build/types/index.d.ts.map +1 -1
  64. package/build/types/observable/internal/base-list/BaseListQuery.d.ts +42 -2
  65. package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
  66. package/build/types/observable/internal/links/LinksHelper.d.ts +4 -0
  67. package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -1
  68. package/build/types/observable/internal/list/ListQuery.d.ts +2 -8
  69. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
  70. package/build/types/observable/internal/objectset/ObjectSetHelper.d.ts.map +1 -1
  71. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +2 -1
  72. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
  73. package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts +1 -0
  74. package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts.map +1 -1
  75. package/build/types/observable/internal/types/ObjectUpdate.d.ts +11 -0
  76. package/build/types/observable/internal/types/ObjectUpdate.d.ts.map +1 -0
  77. package/package.json +9 -8
  78. package/build/cjs/chunk-3ZJESPX6.cjs.map +0 -1
  79. package/build/cjs/chunk-VNLY3YOJ.cjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @osdk/client
2
2
 
3
+ ## 2.6.0-beta.8
4
+
5
+ ### Minor Changes
6
+
7
+ - a1ffb20: Use new ephemeral media upload endpoint.
8
+ - e62c692: Allow all applicable filters for struct sub properties to be applied on struct arrays
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [a1ffb20]
13
+ - Updated dependencies [e62c692]
14
+ - @osdk/generator-converters@2.6.0-beta.8
15
+ - @osdk/api@2.6.0-beta.8
16
+ - @osdk/client.unstable@2.6.0-beta.8
17
+
18
+ ## 2.6.0-beta.7
19
+
20
+ ### Minor Changes
21
+
22
+ - 507ec7f: Allows top level filters with an implied and clause to support a combination of a not and and clause
23
+
24
+ ### Patch Changes
25
+
26
+ - @osdk/api@2.6.0-beta.7
27
+ - @osdk/client.unstable@2.6.0-beta.7
28
+ - @osdk/generator-converters@2.6.0-beta.7
29
+
3
30
  ## 2.6.0-beta.6
4
31
 
5
32
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isOk","NULL_VALUE","PalantirApiError","ActionValidationError","createClient","createPlatformClient","createAttachmentUpload","extractDate","extractDateInLocalTime","extractDateInUTC","createObjectSpecifierFromPrimaryKey","extractPrimaryKeyFromObjectSpecifier"],"sources":["index.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nexport { isOk, NULL_VALUE } from \"@osdk/api\";\nexport type {\n ActionDefinition,\n ActionEditResponse,\n ActionMetadata,\n ActionParam,\n ActionReturnTypeForOptions,\n ActionValidationResponse,\n ApplyActionOptions,\n ApplyBatchActionOptions,\n Attachment,\n CompileTimeMetadata,\n DerivedProperty,\n InterfaceDefinition,\n InterfaceMetadata,\n Logger,\n ObjectMetadata,\n ObjectSet,\n ObjectSpecifier,\n ObjectTypeDefinition,\n Osdk,\n OsdkObject,\n OsdkObjectCreatePropertyType,\n OsdkObjectPropertyType,\n PageResult,\n PropertyDef,\n PropertyKeys,\n PropertyValueWireToClient,\n QueryDefinition,\n QueryParam,\n QueryResult,\n Range,\n Result,\n SingleLinkAccessor,\n ThreeDimensionalAggregation,\n TwoDimensionalAggregation,\n VersionBound,\n WhereClause,\n} from \"@osdk/api\";\nexport { PalantirApiError } from \"@osdk/shared.net.errors\";\n\nexport { ActionValidationError } from \"./actions/ActionValidationError.js\";\nexport type { Client } from \"./Client.js\";\nexport { createClient } from \"./createClient.js\";\nexport { createPlatformClient } from \"./createPlatformClient.js\";\nexport type { PlatformClient } from \"./createPlatformClient.js\";\nexport { createAttachmentUpload } from \"./object/AttachmentUpload.js\";\nexport type { ResultOrError } from \"./ResultOrError.js\";\n\nexport {\n extractDate,\n extractDateInLocalTime,\n extractDateInUTC,\n} from \"./util/datetimeConverters.js\";\n\nexport {\n createObjectSpecifierFromPrimaryKey,\n extractPrimaryKeyFromObjectSpecifier,\n} from \"./util/objectSpecifierUtils.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAASA,IAAI,EAAEC,UAAU,QAAQ,WAAW;AAuC5C,SAASC,gBAAgB,QAAQ,yBAAyB;AAE1D,SAASC,qBAAqB,QAAQ,oCAAoC;AAE1E,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,oBAAoB,QAAQ,2BAA2B;AAEhE,SAASC,sBAAsB,QAAQ,8BAA8B;AAGrE,SACEC,WAAW,EACXC,sBAAsB,EACtBC,gBAAgB,QACX,8BAA8B;AAErC,SACEC,mCAAmC,EACnCC,oCAAoC,QAC/B,gCAAgC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["isOk","NULL_VALUE","PalantirApiError","ActionValidationError","createClient","createPlatformClient","createAttachmentUpload","extractDate","extractDateInLocalTime","extractDateInUTC","createObjectSpecifierFromPrimaryKey","extractPrimaryKeyFromObjectSpecifier"],"sources":["index.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nexport { isOk, NULL_VALUE } from \"@osdk/api\";\nexport type {\n ActionDefinition,\n ActionEditResponse,\n ActionMetadata,\n ActionParam,\n ActionReturnTypeForOptions,\n ActionValidationResponse,\n ApplyActionOptions,\n ApplyBatchActionOptions,\n Attachment,\n CompileTimeMetadata,\n DerivedProperty,\n InterfaceDefinition,\n InterfaceMetadata,\n Logger,\n MediaReference,\n MediaUpload,\n ObjectMetadata,\n ObjectSet,\n ObjectSpecifier,\n ObjectTypeDefinition,\n Osdk,\n OsdkObject,\n OsdkObjectCreatePropertyType,\n OsdkObjectPropertyType,\n PageResult,\n PropertyDef,\n PropertyKeys,\n PropertyValueWireToClient,\n QueryDefinition,\n QueryParam,\n QueryResult,\n Range,\n Result,\n SingleLinkAccessor,\n ThreeDimensionalAggregation,\n TwoDimensionalAggregation,\n VersionBound,\n WhereClause,\n} from \"@osdk/api\";\nexport { PalantirApiError } from \"@osdk/shared.net.errors\";\n\nexport { ActionValidationError } from \"./actions/ActionValidationError.js\";\nexport type { Client } from \"./Client.js\";\nexport { createClient } from \"./createClient.js\";\nexport { createPlatformClient } from \"./createPlatformClient.js\";\nexport type { PlatformClient } from \"./createPlatformClient.js\";\nexport { createAttachmentUpload } from \"./object/AttachmentUpload.js\";\nexport type { ResultOrError } from \"./ResultOrError.js\";\n\nexport {\n extractDate,\n extractDateInLocalTime,\n extractDateInUTC,\n} from \"./util/datetimeConverters.js\";\n\nexport {\n createObjectSpecifierFromPrimaryKey,\n extractPrimaryKeyFromObjectSpecifier,\n} from \"./util/objectSpecifierUtils.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAASA,IAAI,EAAEC,UAAU,QAAQ,WAAW;AAyC5C,SAASC,gBAAgB,QAAQ,yBAAyB;AAE1D,SAASC,qBAAqB,QAAQ,oCAAoC;AAE1E,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,oBAAoB,QAAQ,2BAA2B;AAEhE,SAASC,sBAAsB,QAAQ,8BAA8B;AAGrE,SACEC,WAAW,EACXC,sBAAsB,EACtBC,gBAAgB,QACX,8BAA8B;AAErC,SACEC,mCAAmC,EACnCC,oCAAoC,QAC/B,gCAAgC","ignoreList":[]}
@@ -30,6 +30,22 @@ function isNotClause(whereClause) {
30
30
 
31
31
  /** @internal */
32
32
  export function modernToLegacyWhereClause(whereClause, objectOrInterface, rdpNames) {
33
+ const parts = Object.entries(whereClause).map(([key, value]) => ({
34
+ [key]: value
35
+ }));
36
+ if (parts.length === 1) {
37
+ return modernToLegacyWhereClauseInner(whereClause, objectOrInterface, rdpNames);
38
+ }
39
+ return {
40
+ type: "and",
41
+ value: parts.map(v => modernToLegacyWhereClauseInner(v, objectOrInterface, rdpNames))
42
+ };
43
+ }
44
+
45
+ /** @internal */
46
+ export function modernToLegacyWhereClauseInner(whereClause, objectOrInterface, rdpNames) {
47
+ const parts = Object.entries(whereClause);
48
+ !(parts.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "Invalid where clause provided.") : invariant(false) : void 0;
33
49
  if (isAndClause(whereClause)) {
34
50
  return {
35
51
  type: "and",
@@ -46,14 +62,7 @@ export function modernToLegacyWhereClause(whereClause, objectOrInterface, rdpNam
46
62
  value: modernToLegacyWhereClause(whereClause.$not, objectOrInterface, rdpNames)
47
63
  };
48
64
  }
49
- const parts = Object.entries(whereClause);
50
- if (parts.length === 1) {
51
- return handleWherePair(parts[0], objectOrInterface, undefined, rdpNames);
52
- }
53
- return {
54
- type: "and",
55
- value: parts.map(v => handleWherePair(v, objectOrInterface, undefined, rdpNames))
56
- };
65
+ return handleWherePair(parts[0], objectOrInterface, undefined, rdpNames);
57
66
  }
58
67
  function handleWherePair([fieldName, filter], objectOrInterface, structFieldSelector, rdpNames) {
59
68
  !(filter != null) ? process.env.NODE_ENV !== "production" ? invariant(false, "Defined key values are only allowed when they are not undefined.") : invariant(false) : void 0;
@@ -67,6 +76,7 @@ function handleWherePair([fieldName, filter], objectOrInterface, structFieldSele
67
76
  propertyApiName: fullyQualifyPropName(structFieldSelector.propertyApiName, objectOrInterface)
68
77
  } : undefined;
69
78
  const field = !isRdp && structFieldSelector == null ? fullyQualifyPropName(fieldName, objectOrInterface) : undefined;
79
+ !(field == null || propertyIdentifier == null && (field != null || isRdp != null)) ? process.env.NODE_ENV !== "production" ? invariant(false, "Encountered error constructing where clause: field and propertyIdentifier cannot both be defined") : invariant(false) : void 0;
70
80
  if (typeof filter === "string" || typeof filter === "number" || typeof filter === "boolean") {
71
81
  return {
72
82
  type: "eq",
@@ -83,6 +93,8 @@ function handleWherePair([fieldName, filter], objectOrInterface, structFieldSele
83
93
  // e.g. `where({ name: { $eq: "foo", $ne: "bar" } })` is invalid currently
84
94
  const hasDollarSign = keysOfFilter.some(key => key.startsWith("$"));
85
95
  !(!hasDollarSign || keysOfFilter.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "A WhereClause Filter with multiple clauses/fields is not allowed. Instead, use an 'or'/'and' clause to combine multiple filters.") : invariant(false) : void 0;
96
+
97
+ // Struct
86
98
  if (!hasDollarSign) {
87
99
  const structFilter = Object.entries(filter);
88
100
  !(structFilter.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "Cannot filter on more than one struct field in the same clause, need to use an and clause") : invariant(false) : void 0;
@@ -94,6 +106,17 @@ function handleWherePair([fieldName, filter], objectOrInterface, structFieldSele
94
106
  }
95
107
  const firstKey = keysOfFilter[0];
96
108
  !(filter[firstKey] != null) ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
109
+
110
+ // Struct array
111
+ if (firstKey === "$contains" && filter[firstKey] instanceof Object) {
112
+ const structFilter = Object.entries(filter[firstKey]);
113
+ !(structFilter.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "Cannot filter on more than one struct field in the same clause, need to use an and clause") : invariant(false) : void 0;
114
+ const structFieldApiName = structFilter[0][0];
115
+ return handleWherePair(structFilter[0], objectOrInterface, {
116
+ propertyApiName: fieldName,
117
+ structFieldApiName
118
+ });
119
+ }
97
120
  if (firstKey === "$ne") {
98
121
  return {
99
122
  type: "not",
@@ -124,21 +147,6 @@ function handleWherePair([fieldName, filter], objectOrInterface, structFieldSele
124
147
  fuzzy: typeof filter[firstKey] === "string" ? false : filter[firstKey]["fuzzySearch"] ?? false
125
148
  };
126
149
  }
127
- if (firstKey === "$contains" && filter[firstKey] instanceof Object) {
128
- const structFilter = Object.entries(filter[firstKey]);
129
- !(structFilter.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "Cannot filter on more than one struct field in the same clause, need to use an and clause") : invariant(false) : void 0;
130
- const structFieldApiName = structFilter[0][0];
131
- !(structFilter[0][1] != null && Object.keys(structFilter[0][1]).length === 1 && "$eq" in structFilter[0][1]) ? process.env.NODE_ENV !== "production" ? invariant(false, "Cannot filter on a struct field in an array with anything other than a single $eq") : invariant(false) : void 0;
132
- return {
133
- type: "contains",
134
- propertyIdentifier: {
135
- type: "structField",
136
- propertyApiName: fieldName,
137
- structFieldApiName
138
- },
139
- value: structFilter[0][1]["$eq"]
140
- };
141
- }
142
150
  return {
143
151
  type: firstKey.substring(1),
144
152
  ...(propertyIdentifier != null && {
@@ -1 +1 @@
1
- {"version":3,"file":"modernToLegacyWhereClause.js","names":["invariant","fullyQualifyPropName","makeGeoFilterIntersects","makeGeoFilterWithin","isAndClause","whereClause","$and","undefined","isOrClause","$or","isNotClause","$not","modernToLegacyWhereClause","objectOrInterface","rdpNames","type","value","map","clause","parts","Object","entries","length","handleWherePair","v","fieldName","filter","structFieldSelector","process","env","NODE_ENV","isRdp","has","propertyIdentifier","apiName","propertyApiName","field","keysOfFilter","keys","hasDollarSign","some","key","startsWith","structFilter","structFieldApiName","firstKey","substring","fuzzy"],"sources":["modernToLegacyWhereClause.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AndWhereClause,\n NotWhereClause,\n ObjectOrInterfaceDefinition,\n OrWhereClause,\n PossibleWhereClauseFilters,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\n\nimport type {\n PropertyIdentifier,\n SearchJsonQueryV2,\n} from \"@osdk/foundry.ontologies\";\nimport invariant from \"tiny-invariant\";\nimport { fullyQualifyPropName } from \"./fullyQualifyPropName.js\";\nimport { makeGeoFilterIntersects } from \"./makeGeoFilterIntersects.js\";\nimport { makeGeoFilterWithin } from \"./makeGeoFilterWithin.js\";\n\ntype DropDollarSign<T extends `$${string}`> = T extends `$${infer U}` ? U\n : never;\n\nfunction isAndClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n): whereClause is AndWhereClause<T, RDPs> {\n return \"$and\" in whereClause && whereClause.$and !== undefined;\n}\n\nfunction isOrClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n): whereClause is OrWhereClause<T, RDPs> {\n return \"$or\" in whereClause && whereClause.$or !== undefined;\n}\n\nfunction isNotClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n): whereClause is NotWhereClause<T, RDPs> {\n return \"$not\" in whereClause && whereClause.$not !== undefined;\n}\n\n/** @internal */\nexport function modernToLegacyWhereClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n objectOrInterface: T,\n rdpNames?: Set<string>,\n): SearchJsonQueryV2 {\n if (isAndClause(whereClause)) {\n return {\n type: \"and\",\n value: (whereClause.$and as WhereClause<T, RDPs>[]).map(\n (clause) =>\n modernToLegacyWhereClause(clause, objectOrInterface, rdpNames),\n ),\n };\n } else if (isOrClause(whereClause)) {\n return {\n type: \"or\",\n value: (whereClause.$or as WhereClause<T, RDPs>[]).map(\n (clause) =>\n modernToLegacyWhereClause(clause, objectOrInterface, rdpNames),\n ),\n };\n } else if (isNotClause(whereClause)) {\n return {\n type: \"not\",\n value: modernToLegacyWhereClause(\n whereClause.$not as WhereClause<T, RDPs>,\n objectOrInterface,\n rdpNames,\n ),\n };\n }\n\n const parts = Object.entries(whereClause);\n\n if (parts.length === 1) {\n return handleWherePair(parts[0], objectOrInterface, undefined, rdpNames);\n }\n\n return {\n type: \"and\",\n value: parts.map<SearchJsonQueryV2>(\n v => handleWherePair(v, objectOrInterface, undefined, rdpNames),\n ),\n };\n}\n\nfunction handleWherePair(\n [fieldName, filter]: [string, any],\n objectOrInterface: ObjectOrInterfaceDefinition,\n structFieldSelector?: { propertyApiName: string; structFieldApiName: string },\n rdpNames?: Set<string>,\n): SearchJsonQueryV2 {\n invariant(\n filter != null,\n \"Defined key values are only allowed when they are not undefined.\",\n );\n\n const isRdp = !structFieldSelector && rdpNames?.has(fieldName);\n\n const propertyIdentifier: PropertyIdentifier | undefined = isRdp\n ? {\n type: \"property\",\n apiName: fieldName,\n }\n : structFieldSelector != null\n ? {\n type: \"structField\",\n ...structFieldSelector,\n propertyApiName: fullyQualifyPropName(\n structFieldSelector.propertyApiName,\n objectOrInterface,\n ),\n }\n : undefined;\n\n const field = !isRdp && structFieldSelector == null\n ? fullyQualifyPropName(fieldName, objectOrInterface)\n : undefined;\n\n if (\n typeof filter === \"string\" || typeof filter === \"number\"\n || typeof filter === \"boolean\"\n ) {\n propertyIdentifier;\n return {\n type: \"eq\",\n ...(propertyIdentifier != null\n && { propertyIdentifier }),\n field,\n value: filter,\n };\n }\n\n const keysOfFilter = Object.keys(filter);\n\n // If any of the keys start with `$` then they must be the only one.\n // e.g. `where({ name: { $eq: \"foo\", $ne: \"bar\" } })` is invalid currently\n const hasDollarSign = keysOfFilter.some((key) => key.startsWith(\"$\"));\n invariant(\n !hasDollarSign\n || keysOfFilter.length === 1,\n \"A WhereClause Filter with multiple clauses/fields is not allowed. Instead, use an 'or'/'and' clause to combine multiple filters.\",\n );\n\n if (!hasDollarSign) {\n const structFilter = Object.entries(filter);\n invariant(\n structFilter.length === 1,\n \"Cannot filter on more than one struct field in the same clause, need to use an and clause\",\n );\n const structFieldApiName = keysOfFilter[0];\n return handleWherePair(Object.entries(filter)[0], objectOrInterface, {\n propertyApiName: fieldName,\n structFieldApiName,\n }, rdpNames);\n }\n\n const firstKey = keysOfFilter[0] as PossibleWhereClauseFilters;\n invariant(filter[firstKey] != null);\n\n if (firstKey === \"$ne\") {\n return {\n type: \"not\",\n value: {\n type: \"eq\",\n ...(propertyIdentifier != null && { propertyIdentifier }),\n field,\n value: filter[firstKey],\n },\n };\n }\n\n if (firstKey === \"$within\") {\n return makeGeoFilterWithin(filter[firstKey], propertyIdentifier, field);\n }\n if (firstKey === \"$intersects\") {\n return makeGeoFilterIntersects(filter[firstKey], propertyIdentifier, field);\n }\n\n if (firstKey === \"$containsAllTerms\" || firstKey === \"$containsAnyTerm\") {\n return {\n type: firstKey.substring(1) as DropDollarSign<typeof firstKey>,\n ...(propertyIdentifier != null && { propertyIdentifier }),\n field,\n value: typeof filter[firstKey] === \"string\"\n ? filter[firstKey]\n : filter[firstKey][\"term\"],\n fuzzy: typeof filter[firstKey] === \"string\"\n ? false\n : filter[firstKey][\"fuzzySearch\"] ?? false,\n };\n }\n\n if (firstKey === \"$contains\" && filter[firstKey] instanceof Object) {\n const structFilter: [string, any][] = Object.entries(filter[firstKey]);\n invariant(\n structFilter.length === 1,\n \"Cannot filter on more than one struct field in the same clause, need to use an and clause\",\n );\n const structFieldApiName = structFilter[0][0];\n invariant(\n structFilter[0][1] != null\n && Object.keys(structFilter[0][1]).length === 1\n && \"$eq\" in structFilter[0][1],\n \"Cannot filter on a struct field in an array with anything other than a single $eq\",\n );\n return {\n type: \"contains\",\n propertyIdentifier: {\n type: \"structField\",\n propertyApiName: fieldName,\n structFieldApiName,\n },\n value: structFilter[0][1][\"$eq\"],\n };\n }\n\n return {\n type: firstKey.substring(1) as DropDollarSign<typeof firstKey>,\n ...(propertyIdentifier != null && { propertyIdentifier }),\n field,\n value: filter[firstKey] as any,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"modernToLegacyWhereClause.js","names":["invariant","fullyQualifyPropName","makeGeoFilterIntersects","makeGeoFilterWithin","isAndClause","whereClause","$and","undefined","isOrClause","$or","isNotClause","$not","modernToLegacyWhereClause","objectOrInterface","rdpNames","parts","Object","entries","map","key","value","length","modernToLegacyWhereClauseInner","type","v","process","env","NODE_ENV","clause","handleWherePair","fieldName","filter","structFieldSelector","isRdp","has","propertyIdentifier","apiName","propertyApiName","field","keysOfFilter","keys","hasDollarSign","some","startsWith","structFilter","structFieldApiName","firstKey","substring","fuzzy"],"sources":["modernToLegacyWhereClause.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AndWhereClause,\n NotWhereClause,\n ObjectOrInterfaceDefinition,\n OrWhereClause,\n PossibleWhereClauseFilters,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\n\nimport type {\n PropertyIdentifier,\n SearchJsonQueryV2,\n} from \"@osdk/foundry.ontologies\";\nimport invariant from \"tiny-invariant\";\nimport { fullyQualifyPropName } from \"./fullyQualifyPropName.js\";\nimport { makeGeoFilterIntersects } from \"./makeGeoFilterIntersects.js\";\nimport { makeGeoFilterWithin } from \"./makeGeoFilterWithin.js\";\n\ntype DropDollarSign<T extends `$${string}`> = T extends `$${infer U}` ? U\n : never;\n\nfunction isAndClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n): whereClause is AndWhereClause<T, RDPs> {\n return \"$and\" in whereClause && whereClause.$and !== undefined;\n}\n\nfunction isOrClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n): whereClause is OrWhereClause<T, RDPs> {\n return \"$or\" in whereClause && whereClause.$or !== undefined;\n}\n\nfunction isNotClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n): whereClause is NotWhereClause<T, RDPs> {\n return \"$not\" in whereClause && whereClause.$not !== undefined;\n}\n\n/** @internal */\nexport function modernToLegacyWhereClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n objectOrInterface: T,\n rdpNames?: Set<string>,\n): SearchJsonQueryV2 {\n const parts = Object.entries(whereClause).map(([key, value]) => ({\n [key]: value,\n })) as WhereClause<T, RDPs>[];\n if (parts.length === 1) {\n return modernToLegacyWhereClauseInner(\n whereClause,\n objectOrInterface,\n rdpNames,\n );\n }\n return {\n type: \"and\",\n value: parts.map<SearchJsonQueryV2>(\n v => modernToLegacyWhereClauseInner(v, objectOrInterface, rdpNames),\n ),\n };\n}\n\n/** @internal */\nexport function modernToLegacyWhereClauseInner<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n>(\n whereClause: WhereClause<T, RDPs>,\n objectOrInterface: T,\n rdpNames?: Set<string>,\n): SearchJsonQueryV2 {\n const parts = Object.entries(whereClause);\n\n invariant(parts.length === 1, \"Invalid where clause provided.\");\n\n if (isAndClause(whereClause)) {\n return {\n type: \"and\",\n value: (whereClause.$and as WhereClause<T, RDPs>[]).map(\n (clause) =>\n modernToLegacyWhereClause(clause, objectOrInterface, rdpNames),\n ),\n };\n } else if (isOrClause(whereClause)) {\n return {\n type: \"or\",\n value: (whereClause.$or as WhereClause<T, RDPs>[]).map(\n (clause) =>\n modernToLegacyWhereClause(clause, objectOrInterface, rdpNames),\n ),\n };\n } else if (isNotClause(whereClause)) {\n return {\n type: \"not\",\n value: modernToLegacyWhereClause(\n whereClause.$not as WhereClause<T, RDPs>,\n objectOrInterface,\n rdpNames,\n ),\n };\n }\n\n return handleWherePair(parts[0], objectOrInterface, undefined, rdpNames);\n}\n\nfunction handleWherePair(\n [fieldName, filter]: [string, any],\n objectOrInterface: ObjectOrInterfaceDefinition,\n structFieldSelector?: { propertyApiName: string; structFieldApiName: string },\n rdpNames?: Set<string>,\n): SearchJsonQueryV2 {\n invariant(\n filter != null,\n \"Defined key values are only allowed when they are not undefined.\",\n );\n\n const isRdp = !structFieldSelector && rdpNames?.has(fieldName);\n\n const propertyIdentifier: PropertyIdentifier | undefined = isRdp\n ? {\n type: \"property\",\n apiName: fieldName,\n }\n : structFieldSelector != null\n ? {\n type: \"structField\",\n ...structFieldSelector,\n propertyApiName: fullyQualifyPropName(\n structFieldSelector.propertyApiName,\n objectOrInterface,\n ),\n }\n : undefined;\n\n const field = !isRdp && structFieldSelector == null\n ? fullyQualifyPropName(fieldName, objectOrInterface)\n : undefined;\n\n invariant(\n field == null\n || propertyIdentifier == null && (field != null || isRdp != null),\n \"Encountered error constructing where clause: field and propertyIdentifier cannot both be defined\",\n );\n\n if (\n typeof filter === \"string\" || typeof filter === \"number\"\n || typeof filter === \"boolean\"\n ) {\n return {\n type: \"eq\",\n ...(propertyIdentifier != null\n && { propertyIdentifier }),\n field,\n value: filter,\n };\n }\n\n const keysOfFilter = Object.keys(filter);\n\n // If any of the keys start with `$` then they must be the only one.\n // e.g. `where({ name: { $eq: \"foo\", $ne: \"bar\" } })` is invalid currently\n const hasDollarSign = keysOfFilter.some((key) => key.startsWith(\"$\"));\n invariant(\n !hasDollarSign\n || keysOfFilter.length === 1,\n \"A WhereClause Filter with multiple clauses/fields is not allowed. Instead, use an 'or'/'and' clause to combine multiple filters.\",\n );\n\n // Struct\n if (!hasDollarSign) {\n const structFilter = Object.entries(filter);\n invariant(\n structFilter.length === 1,\n \"Cannot filter on more than one struct field in the same clause, need to use an and clause\",\n );\n const structFieldApiName = keysOfFilter[0];\n return handleWherePair(Object.entries(filter)[0], objectOrInterface, {\n propertyApiName: fieldName,\n structFieldApiName,\n }, rdpNames);\n }\n\n const firstKey = keysOfFilter[0] as PossibleWhereClauseFilters;\n invariant(filter[firstKey] != null);\n\n // Struct array\n if (firstKey === \"$contains\" && filter[firstKey] instanceof Object) {\n const structFilter: [string, any][] = Object.entries(filter[firstKey]);\n invariant(\n structFilter.length === 1,\n \"Cannot filter on more than one struct field in the same clause, need to use an and clause\",\n );\n const structFieldApiName = structFilter[0][0];\n\n return handleWherePair(structFilter[0], objectOrInterface, {\n propertyApiName: fieldName,\n structFieldApiName,\n });\n }\n\n if (firstKey === \"$ne\") {\n return {\n type: \"not\",\n value: {\n type: \"eq\",\n ...(propertyIdentifier != null && { propertyIdentifier }),\n field,\n value: filter[firstKey],\n },\n };\n }\n\n if (firstKey === \"$within\") {\n return makeGeoFilterWithin(filter[firstKey], propertyIdentifier, field);\n }\n if (firstKey === \"$intersects\") {\n return makeGeoFilterIntersects(filter[firstKey], propertyIdentifier, field);\n }\n\n if (firstKey === \"$containsAllTerms\" || firstKey === \"$containsAnyTerm\") {\n return {\n type: firstKey.substring(1) as DropDollarSign<typeof firstKey>,\n ...(propertyIdentifier != null && { propertyIdentifier }),\n field,\n value: typeof filter[firstKey] === \"string\"\n ? filter[firstKey]\n : filter[firstKey][\"term\"],\n fuzzy: typeof filter[firstKey] === \"string\"\n ? false\n : filter[firstKey][\"fuzzySearch\"] ?? false,\n };\n }\n\n return {\n type: firstKey.substring(1) as DropDollarSign<typeof firstKey>,\n ...(propertyIdentifier != null && { propertyIdentifier }),\n field,\n value: filter[firstKey] as any,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -907,6 +907,68 @@ describe(modernToLegacyWhereClause, () => {
907
907
  }
908
908
  `);
909
909
  });
910
+ it("converts struct arrays correctly", () => {
911
+ expect(modernToLegacyWhereClause({
912
+ $and: [{
913
+ addressArray: {
914
+ $contains: {
915
+ zipCode: {
916
+ $gte: 10001
917
+ }
918
+ }
919
+ }
920
+ }, {
921
+ addressArray: {
922
+ $contains: {
923
+ location: {
924
+ $within: [1, 2, 3, 4]
925
+ }
926
+ }
927
+ }
928
+ }]
929
+ }, BgaoNflPlayer)).toMatchInlineSnapshot(`
930
+ {
931
+ "type": "and",
932
+ "value": [
933
+ {
934
+ "field": undefined,
935
+ "propertyIdentifier": {
936
+ "propertyApiName": "addressArray",
937
+ "structFieldApiName": "zipCode",
938
+ "type": "structField",
939
+ },
940
+ "type": "gte",
941
+ "value": 10001,
942
+ },
943
+ {
944
+ "field": undefined,
945
+ "propertyIdentifier": {
946
+ "propertyApiName": "addressArray",
947
+ "structFieldApiName": "location",
948
+ "type": "structField",
949
+ },
950
+ "type": "withinBoundingBox",
951
+ "value": {
952
+ "bottomRight": {
953
+ "coordinates": [
954
+ 3,
955
+ 2,
956
+ ],
957
+ "type": "Point",
958
+ },
959
+ "topLeft": {
960
+ "coordinates": [
961
+ 1,
962
+ 4,
963
+ ],
964
+ "type": "Point",
965
+ },
966
+ },
967
+ },
968
+ ],
969
+ }
970
+ `);
971
+ });
910
972
  });
911
973
  describe("multiple checks", () => {
912
974
  it("properly handles multiple simple where checks", () => {
@@ -983,6 +1045,80 @@ describe(modernToLegacyWhereClause, () => {
983
1045
  });
984
1046
  });
985
1047
  });
1048
+ describe("mixed $ operators and regular properties", () => {
1049
+ it("should handle $not operator with regular properties at top level", () => {
1050
+ const result = modernToLegacyWhereClause({
1051
+ integer: {
1052
+ $eq: 5
1053
+ },
1054
+ $not: {
1055
+ string: {
1056
+ $in: ["a", "b", "c"]
1057
+ }
1058
+ }
1059
+ }, objectTypeWithAllPropertyTypes);
1060
+ expect(result).toMatchInlineSnapshot(`
1061
+ {
1062
+ "type": "and",
1063
+ "value": [
1064
+ {
1065
+ "field": "integer",
1066
+ "type": "eq",
1067
+ "value": 5,
1068
+ },
1069
+ {
1070
+ "type": "not",
1071
+ "value": {
1072
+ "field": "string",
1073
+ "type": "in",
1074
+ "value": [
1075
+ "a",
1076
+ "b",
1077
+ "c",
1078
+ ],
1079
+ },
1080
+ },
1081
+ ],
1082
+ }
1083
+ `);
1084
+ });
1085
+ it("should handle multiple regular properties with $not at top level", () => {
1086
+ const result = modernToLegacyWhereClause({
1087
+ integer: 5,
1088
+ boolean: true,
1089
+ $not: {
1090
+ string: {
1091
+ $eq: "excluded"
1092
+ }
1093
+ }
1094
+ }, objectTypeWithAllPropertyTypes);
1095
+ expect(result).toMatchInlineSnapshot(`
1096
+ {
1097
+ "type": "and",
1098
+ "value": [
1099
+ {
1100
+ "field": "integer",
1101
+ "type": "eq",
1102
+ "value": 5,
1103
+ },
1104
+ {
1105
+ "field": "boolean",
1106
+ "type": "eq",
1107
+ "value": true,
1108
+ },
1109
+ {
1110
+ "type": "not",
1111
+ "value": {
1112
+ "field": "string",
1113
+ "type": "eq",
1114
+ "value": "excluded",
1115
+ },
1116
+ },
1117
+ ],
1118
+ }
1119
+ `);
1120
+ });
1121
+ });
986
1122
  describe("RDP properties", () => {
987
1123
  const mockObjectType = {
988
1124
  type: "object",
@@ -1022,28 +1158,36 @@ describe(modernToLegacyWhereClause, () => {
1022
1158
  },
1023
1159
  managerName: "John"
1024
1160
  }, mockObjectType, rdpNames);
1025
- expect(result).toEqual({
1026
- type: "and",
1027
- value: [{
1028
- type: "eq",
1029
- field: "department",
1030
- value: "Engineering"
1031
- }, {
1032
- type: "gte",
1033
- propertyIdentifier: {
1034
- type: "property",
1035
- apiName: "reportCount"
1036
- },
1037
- value: 5
1038
- }, {
1039
- type: "eq",
1040
- propertyIdentifier: {
1041
- type: "property",
1042
- apiName: "managerName"
1043
- },
1044
- value: "John"
1045
- }]
1046
- });
1161
+ expect(result).toMatchInlineSnapshot(`
1162
+ {
1163
+ "type": "and",
1164
+ "value": [
1165
+ {
1166
+ "field": "department",
1167
+ "type": "eq",
1168
+ "value": "Engineering",
1169
+ },
1170
+ {
1171
+ "field": undefined,
1172
+ "propertyIdentifier": {
1173
+ "apiName": "reportCount",
1174
+ "type": "property",
1175
+ },
1176
+ "type": "gte",
1177
+ "value": 5,
1178
+ },
1179
+ {
1180
+ "field": undefined,
1181
+ "propertyIdentifier": {
1182
+ "apiName": "managerName",
1183
+ "type": "property",
1184
+ },
1185
+ "type": "eq",
1186
+ "value": "John",
1187
+ },
1188
+ ],
1189
+ }
1190
+ `);
1047
1191
  });
1048
1192
  it("should handle RDP properties in $and clauses", () => {
1049
1193
  const rdpNames = new Set(["reportCount"]);
@@ -1056,21 +1200,27 @@ describe(modernToLegacyWhereClause, () => {
1056
1200
  }
1057
1201
  }]
1058
1202
  }, mockObjectType, rdpNames);
1059
- expect(result).toEqual({
1060
- type: "and",
1061
- value: [{
1062
- type: "eq",
1063
- field: "department",
1064
- value: "Engineering"
1065
- }, {
1066
- type: "gte",
1067
- propertyIdentifier: {
1068
- type: "property",
1069
- apiName: "reportCount"
1070
- },
1071
- value: 5
1072
- }]
1073
- });
1203
+ expect(result).toMatchInlineSnapshot(`
1204
+ {
1205
+ "type": "and",
1206
+ "value": [
1207
+ {
1208
+ "field": "department",
1209
+ "type": "eq",
1210
+ "value": "Engineering",
1211
+ },
1212
+ {
1213
+ "field": undefined,
1214
+ "propertyIdentifier": {
1215
+ "apiName": "reportCount",
1216
+ "type": "property",
1217
+ },
1218
+ "type": "gte",
1219
+ "value": 5,
1220
+ },
1221
+ ],
1222
+ }
1223
+ `);
1074
1224
  });
1075
1225
  it("should handle complex nested structures with RDP", () => {
1076
1226
  const rdpNames = new Set(["reportCount", "managerName"]);
@@ -1092,34 +1242,54 @@ describe(modernToLegacyWhereClause, () => {
1092
1242
  }, mockObjectType, rdpNames);
1093
1243
 
1094
1244
  // The actual structure flattens the nested $and differently
1095
- expect(result).toEqual({
1096
- type: "and",
1097
- value: [{
1098
- type: "or",
1099
- value: [{
1100
- type: "eq",
1101
- field: "status",
1102
- value: "active"
1103
- }, {
1104
- type: "gte",
1105
- propertyIdentifier: {
1106
- type: "property",
1107
- apiName: "reportCount"
1245
+ expect(result).toMatchInlineSnapshot(`
1246
+ {
1247
+ "type": "and",
1248
+ "value": [
1249
+ {
1250
+ "field": "department",
1251
+ "type": "eq",
1252
+ "value": "Engineering",
1108
1253
  },
1109
- value: 10
1110
- }]
1111
- }, {
1112
- type: "not",
1113
- value: {
1114
- type: "eq",
1115
- propertyIdentifier: {
1116
- type: "property",
1117
- apiName: "managerName"
1254
+ {
1255
+ "type": "and",
1256
+ "value": [
1257
+ {
1258
+ "type": "or",
1259
+ "value": [
1260
+ {
1261
+ "field": "status",
1262
+ "type": "eq",
1263
+ "value": "active",
1264
+ },
1265
+ {
1266
+ "field": undefined,
1267
+ "propertyIdentifier": {
1268
+ "apiName": "reportCount",
1269
+ "type": "property",
1270
+ },
1271
+ "type": "gte",
1272
+ "value": 10,
1273
+ },
1274
+ ],
1275
+ },
1276
+ {
1277
+ "type": "not",
1278
+ "value": {
1279
+ "field": undefined,
1280
+ "propertyIdentifier": {
1281
+ "apiName": "managerName",
1282
+ "type": "property",
1283
+ },
1284
+ "type": "eq",
1285
+ "value": "Admin",
1286
+ },
1287
+ },
1288
+ ],
1118
1289
  },
1119
- value: "Admin"
1120
- }
1121
- }]
1122
- });
1290
+ ],
1291
+ }
1292
+ `);
1123
1293
  });
1124
1294
  });
1125
1295
  });