@osdk/client 2.7.0-beta.11 → 2.7.0-beta.13

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 (75) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/build/browser/actions/actions.test.js +0 -8
  3. package/build/browser/actions/actions.test.js.map +1 -1
  4. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +14 -9
  5. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  6. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  7. package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  8. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +13 -4
  9. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  10. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
  11. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  12. package/build/browser/objectSet/createObjectSet.js +1 -1
  13. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  14. package/build/browser/observable/internal/Changes.js +1 -1
  15. package/build/browser/observable/internal/Changes.js.map +1 -1
  16. package/build/browser/observable/internal/ObservableClientImpl.js +2 -2
  17. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  18. package/build/browser/observable/internal/Store.test.js +48 -1
  19. package/build/browser/observable/internal/Store.test.js.map +1 -1
  20. package/build/browser/observable/internal/base-list/BaseListQuery.js +1 -1
  21. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  22. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js +3 -2
  23. package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -1
  24. package/build/browser/observable/internal/list/InterfaceListQuery.js +24 -9
  25. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
  26. package/build/browser/observable/internal/object/ObjectsHelper.js +1 -3
  27. package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
  28. package/build/browser/util/UserAgent.js +2 -2
  29. package/build/browser/util/isObjectSpecifiersObject.js.map +1 -1
  30. package/build/cjs/{chunk-RDZ5NKAI.cjs → chunk-VVKEXIIO.cjs} +30 -14
  31. package/build/cjs/chunk-VVKEXIIO.cjs.map +1 -0
  32. package/build/cjs/{chunk-666JN2DO.cjs → chunk-ZFL7RPT6.cjs} +65 -65
  33. package/build/cjs/{chunk-666JN2DO.cjs.map → chunk-ZFL7RPT6.cjs.map} +1 -1
  34. package/build/cjs/index.cjs +8 -8
  35. package/build/cjs/public/internal.cjs +8 -8
  36. package/build/cjs/public/unstable-do-not-use.cjs +81 -63
  37. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  38. package/build/esm/actions/actions.test.js +0 -8
  39. package/build/esm/actions/actions.test.js.map +1 -1
  40. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +14 -9
  41. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  42. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
  43. package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
  44. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +13 -4
  45. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  46. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
  47. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  48. package/build/esm/objectSet/createObjectSet.js +1 -1
  49. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  50. package/build/esm/observable/internal/Changes.js +1 -1
  51. package/build/esm/observable/internal/Changes.js.map +1 -1
  52. package/build/esm/observable/internal/ObservableClientImpl.js +2 -2
  53. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  54. package/build/esm/observable/internal/Store.test.js +48 -1
  55. package/build/esm/observable/internal/Store.test.js.map +1 -1
  56. package/build/esm/observable/internal/base-list/BaseListQuery.js +1 -1
  57. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  58. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js +3 -2
  59. package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -1
  60. package/build/esm/observable/internal/list/InterfaceListQuery.js +24 -9
  61. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
  62. package/build/esm/observable/internal/object/ObjectsHelper.js +1 -3
  63. package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
  64. package/build/esm/util/UserAgent.js +2 -2
  65. package/build/esm/util/isObjectSpecifiersObject.js.map +1 -1
  66. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  67. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  68. package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts.map +1 -1
  69. package/build/types/observable/internal/list/InterfaceListQuery.d.ts +3 -0
  70. package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
  71. package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
  72. package/build/types/util/isObjectSpecifiersObject.d.ts +1 -0
  73. package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -1
  74. package/package.json +9 -9
  75. package/build/cjs/chunk-RDZ5NKAI.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"modernToLegacyWhereClause.test.js","names":["BgaoNflPlayer","objectTypeWithAllPropertyTypes","expectType","describe","expect","it","modernToLegacyWhereClause","T","type","apiName","__DefinitionMetadata","properties","displayName","links","rid","description","undefined","r","$and","prop","$eq","prop2","innerProp1","toMatchInlineSnapshot","foo","geoPoint","$within","$bbox","$distance","$of","coordinates","$polygon","geoShape","$intersects","integer","$ne","string","$containsAllTerms","term","fuzzySearch","$containsAnyTerm","address","state","city","$or","gamesPlayed","$gt","addressArray","$contains","zipCode","$gte","location","decimal","result","$not","$in","boolean","mockObjectType","department","status","primaryKeyApiName","titleProperty","primaryKeyType","icon","visibility","pluralDisplayName","interfaceMap","inverseInterfaceMap","rdpNames","Set","reportCount","managerName"],"sources":["modernToLegacyWhereClause.test.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 { ObjectOrInterfaceDefinition, WhereClause } from \"@osdk/api\";\nimport {\n BgaoNflPlayer,\n objectTypeWithAllPropertyTypes,\n} from \"@osdk/client.test.ontology\";\nimport type { Point } from \"geojson\";\nimport { expectType } from \"ts-expect\";\nimport { describe, expect, it } from \"vitest\";\nimport { modernToLegacyWhereClause } from \"./modernToLegacyWhereClause.js\";\n\ntype ObjAllProps = objectTypeWithAllPropertyTypes;\ntype structObj = BgaoNflPlayer;\ndescribe(modernToLegacyWhereClause, () => {\n describe(\"api namespaces\", () => {\n describe(\"interfaces\", () => {\n it(\"properly converts shortname to fqApiName\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"prop\": { type: \"integer\" },\n \"prop2\": {\n type: { \"innerProp1\": \"string\", \"innerProp2\": \"float\" },\n },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n const r = modernToLegacyWhereClause({\n $and: [\n { prop: { $eq: 5 } },\n { prop2: { innerProp1: { $eq: \"myProp\" } } },\n ],\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"a.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"a.prop2\",\n \"structFieldApiName\": \"innerProp1\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"myProp\",\n },\n ],\n }\n `);\n });\n\n it(\"properly does not convert when interface has no apiNamespace\", () => {\n const T = {\n type: \"interface\",\n apiName: \"Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"foo\": { type: \"integer\" },\n \"b.prop\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n \"c.prop2\": {\n type: { \"innerProp1\": \"string\", \"innerProp2\": \"float\" },\n },\n },\n apiName: \"Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n const r = modernToLegacyWhereClause({\n \"b.prop\": 5,\n foo: 6,\n \"c.prop2\": { innerProp1: { $eq: \"myProp\" } },\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"b.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"foo\",\n \"type\": \"eq\",\n \"value\": 6,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"c.prop2\",\n \"structFieldApiName\": \"innerProp1\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"myProp\",\n },\n ],\n }\n `);\n });\n\n it(\"gracefully handles redundant apiNamespace in property\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"a.foo\": { type: \"integer\" },\n \"b.prop\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n \"c.prop2\": {\n type: { \"innerProp1\": \"string\", \"innerProp2\": \"float\" },\n },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n const r = modernToLegacyWhereClause({\n \"b.prop\": 5,\n \"a.foo\": 6,\n \"c.prop2\": { innerProp1: { $eq: \"myProp\" } },\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"b.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"a.foo\",\n \"type\": \"eq\",\n \"value\": 6,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"c.prop2\",\n \"structFieldApiName\": \"innerProp1\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"myProp\",\n },\n ],\n }\n `);\n });\n\n it(\"properly does not convert different apiNamespaces\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"a.foo\": { type: \"integer\" },\n \"b.prop\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n expect(modernToLegacyWhereClause({\n \"b.prop\": 5,\n }, T)).toMatchInlineSnapshot(`\n {\n \"field\": \"b.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n }\n `);\n });\n });\n\n describe(\"objects\", () => {\n it(\"does not convert object short property names to fq\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"a.foo\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n const r = modernToLegacyWhereClause({\n prop: 5,\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"field\": \"a.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n }\n `);\n });\n });\n });\n\n describe(\"single checks\", () => {\n describe(\"$within\", () => {\n it(\"properly generates bbox shortcut\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: [-5, 5, -10, 10],\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n\n it(\"properly generates bbox long form\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: {\n $bbox: [-5, 5, -10, 10],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n\n it(\"properly generates within radius\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: { $distance: [5, \"km\"], $of: [-5, 5] },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinDistanceOf\",\n \"value\": {\n \"center\": {\n \"coordinates\": [\n -5,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"distance\": {\n \"unit\": \"KILOMETERS\",\n \"value\": 5,\n },\n },\n }\n `);\n });\n\n it(\"properly generates within radius of geopoint\", async () => {\n // suppose you loaded an object with a geopoint field\n // and you want to find all objects within 5 km of that point\n const pointAsGeoJsonPoint: Point = {\n type: \"Point\",\n coordinates: [-5, 5],\n };\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: { $distance: [5, \"km\"], $of: pointAsGeoJsonPoint },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinDistanceOf\",\n \"value\": {\n \"center\": {\n \"coordinates\": [\n -5,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"distance\": {\n \"unit\": \"KILOMETERS\",\n \"value\": 5,\n },\n },\n }\n `);\n });\n\n it(\"properly generates within polygon\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: { $polygon: [[[0, 1], [3, 2], [0, 1]]] },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n\n it(\"properly generates within polygon geojson\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: {\n type: \"Polygon\",\n coordinates: [[[0, 1], [3, 2], [0, 1]]],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n it(\"check types\", async () => {\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: [-5, 5, -10, 10],\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: { $distance: [2, \"centimeter\"], $of: [2, 2] },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: { $polygon: [[[0, 1], [3, 2], [0, 1]]] },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: {\n type: \"Polygon\",\n coordinates: [[[0, 1], [3, 2], [0, 1]]],\n },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: { $bbox: [-5, 5, -10, 10] },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: {\n $bbox: [-5, 5, -10, 10],\n // @ts-expect-error\n $distance: [2, \"centimeter\"],\n // @ts-expect-error\n $of: [2, 2],\n },\n },\n });\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: {\n $polygon: [[[0, 1], [3, 2], [0, 1]]],\n // @ts-expect-error\n $bbox: [2, 2, 2, 2],\n },\n },\n });\n });\n describe(\"$intersects\", () => {\n it(\"properly generates bbox shortcut\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: [-5, 5, -10, 10],\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n it(\"properly generates bbox long form\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: {\n $bbox: [-5, 5, -10, 10],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n\n it(\"properly generates intersects polygon\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: { $polygon: [[[0, 1], [3, 2], [0, 1]]] },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n\n it(\"properly generates within polygon geojson\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: {\n type: \"Polygon\",\n coordinates: [[[0, 1], [3, 2], [0, 1]]],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n });\n\n it(\"inverts ne short hand properly\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n integer: { $ne: 5 },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n }\n `);\n });\n it(\"converts $containsAllTerms correctly if using new type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: { term: \"test\", fuzzySearch: true } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": true,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: { term: \"test\", fuzzySearch: false } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: { term: \"test\" } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n });\n\n it(\"converts $containsAllTerms correctly if using old type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: \"test\" },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n });\n it(\"converts $containsAnyTerm correctly if using new type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: { term: \"test\", fuzzySearch: true } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": true,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: { term: \"test\", fuzzySearch: false } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: { term: \"test\" } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n });\n\n it(\"converts $containsAnyTerm correctly if using old type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: \"test\" },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n });\n it(\"converts struct where clauses correctly\", () => {\n expect(modernToLegacyWhereClause<structObj>({\n address: { state: { $eq: \"NJ\" } },\n }, BgaoNflPlayer)).toMatchInlineSnapshot(`\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"state\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"NJ\",\n }\n `);\n\n expect(modernToLegacyWhereClause<structObj>({\n $and: [\n { address: { state: { $eq: \"NJ\" } } },\n { address: { city: { $containsAnyTerm: \"N\" } } },\n ],\n }, BgaoNflPlayer)).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"state\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"NJ\",\n },\n {\n \"field\": undefined,\n \"fuzzy\": false,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"city\",\n \"type\": \"structField\",\n },\n \"type\": \"containsAnyTerm\",\n \"value\": \"N\",\n },\n ],\n }\n `);\n\n expect(modernToLegacyWhereClause<structObj>({\n $or: [\n { address: { state: { $eq: \"NJ\" } } },\n { address: { city: { $containsAnyTerm: \"N\" } } },\n { gamesPlayed: { $gt: 5 } },\n ],\n }, BgaoNflPlayer)).toMatchInlineSnapshot(`\n {\n \"type\": \"or\",\n \"value\": [\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"state\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"NJ\",\n },\n {\n \"field\": undefined,\n \"fuzzy\": false,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"city\",\n \"type\": \"structField\",\n },\n \"type\": \"containsAnyTerm\",\n \"value\": \"N\",\n },\n {\n \"field\": \"gamesPlayed\",\n \"type\": \"gt\",\n \"value\": 5,\n },\n ],\n }\n `);\n });\n it(\"converts struct arrays correctly\", () => {\n expect(\n modernToLegacyWhereClause<structObj>({\n $and: [{\n addressArray: { $contains: { zipCode: { $gte: 10001 } } },\n }, {\n addressArray: {\n $contains: {\n location: {\n $within: [1, 2, 3, 4],\n },\n },\n },\n }],\n }, BgaoNflPlayer),\n )\n .toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"addressArray\",\n \"structFieldApiName\": \"zipCode\",\n \"type\": \"structField\",\n },\n \"type\": \"gte\",\n \"value\": 10001,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"addressArray\",\n \"structFieldApiName\": \"location\",\n \"type\": \"structField\",\n },\n \"type\": \"withinBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n 3,\n 2,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n 1,\n 4,\n ],\n \"type\": \"Point\",\n },\n },\n },\n ],\n }\n `);\n });\n });\n\n describe(\"multiple checks\", () => {\n it(\"properly handles multiple simple where checks\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n decimal: 5,\n integer: 10,\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"decimal\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n\n it(\"properly handles $and\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n $and: [{\n decimal: 5,\n }, {\n integer: 10,\n }],\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"decimal\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n\n it(\"properly handles $or\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n $or: [{\n decimal: 5,\n }, {\n integer: 10,\n }],\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"type\": \"or\",\n \"value\": [\n {\n \"field\": \"decimal\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n });\n });\n\n describe(\"mixed $ operators and regular properties\", () => {\n it(\"should handle $not operator with regular properties at top level\", () => {\n const whereClause: WhereClause<ObjAllProps> = {\n integer: { $eq: 5 },\n $not: { string: { $in: [\"a\", \"b\", \"c\"] } },\n };\n\n const result = modernToLegacyWhereClause(\n whereClause,\n objectTypeWithAllPropertyTypes,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": \"string\",\n \"type\": \"in\",\n \"value\": [\n \"a\",\n \"b\",\n \"c\",\n ],\n },\n },\n ],\n }\n `);\n });\n\n it(\"should handle multiple regular properties with $not at top level\", () => {\n const whereClause: WhereClause<ObjAllProps> = {\n integer: 5,\n boolean: true,\n $not: { string: { $eq: \"excluded\" } },\n };\n\n const result = modernToLegacyWhereClause(\n whereClause,\n objectTypeWithAllPropertyTypes,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"boolean\",\n \"type\": \"eq\",\n \"value\": true,\n },\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": \"string\",\n \"type\": \"eq\",\n \"value\": \"excluded\",\n },\n },\n ],\n }\n `);\n });\n });\n\n describe(\"RDP properties\", () => {\n type TestRDPs = {\n reportCount: \"integer\";\n managerName: \"string\";\n };\n\n const mockObjectType = {\n type: \"object\" as const,\n apiName: \"TestObject\",\n __DefinitionMetadata: {\n type: \"object\" as const,\n apiName: \"TestObject\",\n displayName: \"Test Object\",\n description: undefined,\n properties: {\n department: { type: \"string\" as const },\n status: { type: \"string\" as const },\n },\n rid: \"test-rid\",\n primaryKeyApiName: \"id\",\n titleProperty: \"department\",\n links: {},\n primaryKeyType: \"string\" as const,\n icon: undefined,\n visibility: undefined,\n pluralDisplayName: \"Test Objects\",\n status: undefined,\n interfaceMap: {},\n inverseInterfaceMap: {},\n },\n };\n\n it(\"should handle RDP properties at top level\", () => {\n const whereClause: WhereClause<typeof mockObjectType, TestRDPs> = {\n department: \"Engineering\",\n reportCount: { $gte: 5 },\n managerName: \"John\",\n };\n\n const rdpNames = new Set([\"reportCount\", \"managerName\"]);\n\n const result = modernToLegacyWhereClause(\n whereClause,\n mockObjectType,\n rdpNames,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"department\",\n \"type\": \"eq\",\n \"value\": \"Engineering\",\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"reportCount\",\n \"type\": \"property\",\n },\n \"type\": \"gte\",\n \"value\": 5,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"managerName\",\n \"type\": \"property\",\n },\n \"type\": \"eq\",\n \"value\": \"John\",\n },\n ],\n }\n `);\n });\n\n it(\"should handle RDP properties in $and clauses\", () => {\n const whereClause: WhereClause<typeof mockObjectType, TestRDPs> = {\n $and: [\n { department: \"Engineering\" },\n { reportCount: { $gte: 5 } },\n ],\n };\n\n const rdpNames = new Set([\"reportCount\"]);\n\n const result = modernToLegacyWhereClause(\n whereClause,\n mockObjectType,\n rdpNames,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"department\",\n \"type\": \"eq\",\n \"value\": \"Engineering\",\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"reportCount\",\n \"type\": \"property\",\n },\n \"type\": \"gte\",\n \"value\": 5,\n },\n ],\n }\n `);\n });\n\n it(\"should handle complex nested structures with RDP\", () => {\n const whereClause: WhereClause<typeof mockObjectType, TestRDPs> = {\n department: \"Engineering\",\n $and: [\n {\n $or: [\n { status: \"active\" },\n { reportCount: { $gte: 10 } },\n ],\n },\n {\n managerName: { $ne: \"Admin\" },\n },\n ],\n };\n\n const rdpNames = new Set([\"reportCount\", \"managerName\"]);\n\n const result = modernToLegacyWhereClause(\n whereClause,\n mockObjectType,\n rdpNames,\n );\n\n // The actual structure flattens the nested $and differently\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"department\",\n \"type\": \"eq\",\n \"value\": \"Engineering\",\n },\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"type\": \"or\",\n \"value\": [\n {\n \"field\": \"status\",\n \"type\": \"eq\",\n \"value\": \"active\",\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"reportCount\",\n \"type\": \"property\",\n },\n \"type\": \"gte\",\n \"value\": 10,\n },\n ],\n },\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"managerName\",\n \"type\": \"property\",\n },\n \"type\": \"eq\",\n \"value\": \"Admin\",\n },\n },\n ],\n },\n ],\n }\n `);\n });\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SACEA,aAAa,EACbC,8BAA8B,QACzB,4BAA4B;AAEnC,SAASC,UAAU,QAAQ,WAAW;AACtC,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,yBAAyB,QAAQ,gCAAgC;AAI1EH,QAAQ,CAACG,yBAAyB,EAAE,MAAM;EACxCH,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAC/BA,QAAQ,CAAC,YAAY,EAAE,MAAM;MAC3BE,EAAE,CAAC,0CAA0C,EAAE,MAAM;QACnD,MAAME,CAAC,GAAG;UACRC,IAAI,EAAE,WAAW;UACjBC,OAAO,EAAE,OAAO;UAChBC,oBAAoB,EAAE;YACpBF,IAAI,EAAE,WAAW;YACjBG,UAAU,EAAE;cACV,MAAM,EAAE;gBAAEH,IAAI,EAAE;cAAU,CAAC;cAC3B,OAAO,EAAE;gBACPA,IAAI,EAAE;kBAAE,YAAY,EAAE,QAAQ;kBAAE,YAAY,EAAE;gBAAQ;cACxD;YACF,CAAC;YACDC,OAAO,EAAE,OAAO;YAChBG,WAAW,EAAE,EAAE;YACfC,KAAK,EAAE,CAAC,CAAC;YACTC,GAAG,EAAE,EAAE;YACPC,WAAW,EAAEC;UACf;QACF,CAAgD;QAEhD,MAAMC,CAAC,GAAGX,yBAAyB,CAAC;UAClCY,IAAI,EAAE,CACJ;YAAEC,IAAI,EAAE;cAAEC,GAAG,EAAE;YAAE;UAAE,CAAC,EACpB;YAAEC,KAAK,EAAE;cAAEC,UAAU,EAAE;gBAAEF,GAAG,EAAE;cAAS;YAAE;UAAE,CAAC;QAEhD,CAAC,EAAEb,CAAC,CAAC;QAELH,MAAM,CAACa,CAAC,CAAC,CAACM,qBAAqB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,8DAA8D,EAAE,MAAM;QACvE,MAAME,CAAC,GAAG;UACRC,IAAI,EAAE,WAAW;UACjBC,OAAO,EAAE,KAAK;UACdC,oBAAoB,EAAE;YACpBF,IAAI,EAAE,WAAW;YACjBG,UAAU,EAAE;cACV,KAAK,EAAE;gBAAEH,IAAI,EAAE;cAAU,CAAC;cAC1B,QAAQ,EAAE;gBAAEA,IAAI,EAAE;cAAU,CAAC;cAC7B,MAAM,EAAE;gBAAEA,IAAI,EAAE;cAAU,CAAC;cAC3B,SAAS,EAAE;gBACTA,IAAI,EAAE;kBAAE,YAAY,EAAE,QAAQ;kBAAE,YAAY,EAAE;gBAAQ;cACxD;YACF,CAAC;YACDC,OAAO,EAAE,KAAK;YACdG,WAAW,EAAE,EAAE;YACfC,KAAK,EAAE,CAAC,CAAC;YACTC,GAAG,EAAE,EAAE;YACPC,WAAW,EAAEC;UACf;QACF,CAAgD;QAEhD,MAAMC,CAAC,GAAGX,yBAAyB,CAAC;UAClC,QAAQ,EAAE,CAAC;UACXkB,GAAG,EAAE,CAAC;UACN,SAAS,EAAE;YAAEF,UAAU,EAAE;cAAEF,GAAG,EAAE;YAAS;UAAE;QAC7C,CAAC,EAAEb,CAAC,CAAC;QAELH,MAAM,CAACa,CAAC,CAAC,CAACM,qBAAqB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,uDAAuD,EAAE,MAAM;QAChE,MAAME,CAAC,GAAG;UACRC,IAAI,EAAE,WAAW;UACjBC,OAAO,EAAE,OAAO;UAChBC,oBAAoB,EAAE;YACpBF,IAAI,EAAE,WAAW;YACjBG,UAAU,EAAE;cACV,OAAO,EAAE;gBAAEH,IAAI,EAAE;cAAU,CAAC;cAC5B,QAAQ,EAAE;gBAAEA,IAAI,EAAE;cAAU,CAAC;cAC7B,MAAM,EAAE;gBAAEA,IAAI,EAAE;cAAU,CAAC;cAC3B,SAAS,EAAE;gBACTA,IAAI,EAAE;kBAAE,YAAY,EAAE,QAAQ;kBAAE,YAAY,EAAE;gBAAQ;cACxD;YACF,CAAC;YACDC,OAAO,EAAE,OAAO;YAChBG,WAAW,EAAE,EAAE;YACfC,KAAK,EAAE,CAAC,CAAC;YACTC,GAAG,EAAE,EAAE;YACPC,WAAW,EAAEC;UACf;QACF,CAAgD;QAEhD,MAAMC,CAAC,GAAGX,yBAAyB,CAAC;UAClC,QAAQ,EAAE,CAAC;UACX,OAAO,EAAE,CAAC;UACV,SAAS,EAAE;YAAEgB,UAAU,EAAE;cAAEF,GAAG,EAAE;YAAS;UAAE;QAC7C,CAAC,EAAEb,CAAC,CAAC;QAELH,MAAM,CAACa,CAAC,CAAC,CAACM,qBAAqB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,mDAAmD,EAAE,MAAM;QAC5D,MAAME,CAAC,GAAG;UACRC,IAAI,EAAE,WAAW;UACjBC,OAAO,EAAE,OAAO;UAChBC,oBAAoB,EAAE;YACpBF,IAAI,EAAE,WAAW;YACjBG,UAAU,EAAE;cACV,OAAO,EAAE;gBAAEH,IAAI,EAAE;cAAU,CAAC;cAC5B,QAAQ,EAAE;gBAAEA,IAAI,EAAE;cAAU,CAAC;cAC7B,MAAM,EAAE;gBAAEA,IAAI,EAAE;cAAU;YAC5B,CAAC;YACDC,OAAO,EAAE,OAAO;YAChBG,WAAW,EAAE,EAAE;YACfC,KAAK,EAAE,CAAC,CAAC;YACTC,GAAG,EAAE,EAAE;YACPC,WAAW,EAAEC;UACf;QACF,CAAgD;QAEhDZ,MAAM,CAACE,yBAAyB,CAAC;UAC/B,QAAQ,EAAE;QACZ,CAAC,EAAEC,CAAC,CAAC,CAAC,CAACgB,qBAAqB,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFpB,QAAQ,CAAC,SAAS,EAAE,MAAM;MACxBE,EAAE,CAAC,oDAAoD,EAAE,MAAM;QAC7D,MAAME,CAAC,GAAG;UACRC,IAAI,EAAE,WAAW;UACjBC,OAAO,EAAE,OAAO;UAChBC,oBAAoB,EAAE;YACpBF,IAAI,EAAE,WAAW;YACjBG,UAAU,EAAE;cACV,OAAO,EAAE;gBAAEH,IAAI,EAAE;cAAU,CAAC;cAC5B,MAAM,EAAE;gBAAEA,IAAI,EAAE;cAAU;YAC5B,CAAC;YACDC,OAAO,EAAE,OAAO;YAChBG,WAAW,EAAE,EAAE;YACfC,KAAK,EAAE,CAAC,CAAC;YACTC,GAAG,EAAE,EAAE;YACPC,WAAW,EAAEC;UACf;QACF,CAAgD;QAChD,MAAMC,CAAC,GAAGX,yBAAyB,CAAC;UAClCa,IAAI,EAAE;QACR,CAAC,EAAEZ,CAAC,CAAC;QAELH,MAAM,CAACa,CAAC,CAAC,CAACM,qBAAqB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFpB,QAAQ,CAAC,eAAe,EAAE,MAAM;IAC9BA,QAAQ,CAAC,SAAS,EAAE,MAAM;MACxBE,EAAE,CAAC,kCAAkC,EAAE,YAAY;QACjDD,MAAM,CAACE,yBAAyB,CAC9B;UACEmB,QAAQ,EAAE;YACRC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;UAC1B;QACF,CAAC,EACDzB,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,mCAAmC,EAAE,YAAY;QAClDD,MAAM,CAACE,yBAAyB,CAC9B;UACEmB,QAAQ,EAAE;YACRC,OAAO,EAAE;cACPC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACxB;UACF;QACF,CAAC,EACD1B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,kCAAkC,EAAE,YAAY;QACjDD,MAAM,CAACE,yBAAyB,CAC9B;UACEmB,QAAQ,EAAE;YACRC,OAAO,EAAE;cAAEE,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;cAAEC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE;UAChD;QACF,CAAC,EACD5B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MAEFlB,EAAE,CAAC,8CAA8C,EAAE,YAAY;QAC7D;QACA;;QAKAD,MAAM,CAACE,yBAAyB,CAC9B;UACEmB,QAAQ,EAAE;YACRC,OAAO,EAAE;cAAEE,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;cAAEC,GAAG,EAPP;gBACjCrB,IAAI,EAAE,OAAO;gBACbsB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;cACrB;YAIgE;UAC5D;QACF,CAAC,EACD7B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MAEFlB,EAAE,CAAC,mCAAmC,EAAE,YAAY;QAClDD,MAAM,CAACE,yBAAyB,CAC9B;UACEmB,QAAQ,EAAE;YACRC,OAAO,EAAE;cAAEK,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE;UAClD;QACF,CAAC,EACD9B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,2CAA2C,EAAE,YAAY;QAC1DD,MAAM,CAACE,yBAAyB,CAC9B;UACEmB,QAAQ,EAAE;YACRC,OAAO,EAAE;cACPlB,IAAI,EAAE,SAAS;cACfsB,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC;UACF;QACF,CAAC,EACD7B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MACFlB,EAAE,CAAC,aAAa,EAAE,YAAY;QAC5BH,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;UAC1B;QACF,CAAC,CAAC;QAEFxB,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE;cAAEE,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC;cAAEC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YAAE;UACvD;QACF,CAAC,CAAC;QAEF3B,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE;cAAEK,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE;UAClD;QACF,CAAC,CAAC;QAEF7B,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE;cACPlB,IAAI,EAAE,SAAS;cACfsB,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC;UACF;QACF,CAAC,CAAC;QAEF5B,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE;cAAEC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAAE;UACrC;QACF,CAAC,CAAC;QAEFzB,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE;cACPC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;cACvB;cACAC,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC;cAC5B;cACAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YACZ;UACF;QACF,CAAC,CAAC;QACF3B,UAAU,CAA2B;UACnCuB,QAAQ,EAAE;YACRC,OAAO,EAAE;cACPK,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;cACpC;cACAJ,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB;UACF;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;MACFxB,QAAQ,CAAC,aAAa,EAAE,MAAM;QAC5BE,EAAE,CAAC,kCAAkC,EAAE,YAAY;UACjDD,MAAM,CAACE,yBAAyB,CAC9B;YACE0B,QAAQ,EAAE;cACRC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAC9B;UACF,CAAC,EACDhC,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;QACA,CAAC,CAAC;QACFlB,EAAE,CAAC,mCAAmC,EAAE,YAAY;UAClDD,MAAM,CAACE,yBAAyB,CAC9B;YACE0B,QAAQ,EAAE;cACRC,WAAW,EAAE;gBACXN,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;cACxB;YACF;UACF,CAAC,EACD1B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;QACF,CAAC,CAAC;QAEFlB,EAAE,CAAC,uCAAuC,EAAE,YAAY;UACtDD,MAAM,CAACE,yBAAyB,CAC9B;YACE0B,QAAQ,EAAE;cACRC,WAAW,EAAE;gBAAEF,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cAAE;YACtD;UACF,CAAC,EACD9B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,CAAC;QACJ,CAAC,CAAC;QAEFlB,EAAE,CAAC,2CAA2C,EAAE,YAAY;UAC1DD,MAAM,CAACE,yBAAyB,CAC9B;YACE0B,QAAQ,EAAE;cACRC,WAAW,EAAE;gBACXzB,IAAI,EAAE,SAAS;gBACfsB,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cACxC;YACF;UACF,CAAC,EACD7B,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,gCAAgC,EAAE,MAAM;QACzCD,MAAM,CAACE,yBAAyB,CAAc;UAC5C4B,OAAO,EAAE;YAAEC,GAAG,EAAE;UAAE;QACpB,CAAC,EAAElC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MACFlB,EAAE,CAAC,wDAAwD,EAAE,MAAM;QACjED,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEC,iBAAiB,EAAE;cAAEC,IAAI,EAAE,MAAM;cAAEC,WAAW,EAAE;YAAK;UAAE;QACnE,CAAC,EAAEtC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;QAEAnB,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEC,iBAAiB,EAAE;cAAEC,IAAI,EAAE,MAAM;cAAEC,WAAW,EAAE;YAAM;UAAE;QACpE,CAAC,EAAEtC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;QAEAnB,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEC,iBAAiB,EAAE;cAAEC,IAAI,EAAE;YAAO;UAAE;QAChD,CAAC,EAAErC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MAEFlB,EAAE,CAAC,wDAAwD,EAAE,MAAM;QACjED,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEC,iBAAiB,EAAE;UAAO;QACtC,CAAC,EAAEpC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MACFlB,EAAE,CAAC,uDAAuD,EAAE,MAAM;QAChED,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEI,gBAAgB,EAAE;cAAEF,IAAI,EAAE,MAAM;cAAEC,WAAW,EAAE;YAAK;UAAE;QAClE,CAAC,EAAEtC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;QAEAnB,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEI,gBAAgB,EAAE;cAAEF,IAAI,EAAE,MAAM;cAAEC,WAAW,EAAE;YAAM;UAAE;QACnE,CAAC,EAAEtC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;QAEAnB,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEI,gBAAgB,EAAE;cAAEF,IAAI,EAAE;YAAO;UAAE;QAC/C,CAAC,EAAErC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MAEFlB,EAAE,CAAC,uDAAuD,EAAE,MAAM;QAChED,MAAM,CAACE,yBAAyB,CAAc;UAC5C8B,MAAM,EAAE;YAAEI,gBAAgB,EAAE;UAAO;QACrC,CAAC,EAAEvC,8BAA8B,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MACFlB,EAAE,CAAC,yCAAyC,EAAE,MAAM;QAClDD,MAAM,CAACE,yBAAyB,CAAY;UAC1CmC,OAAO,EAAE;YAAEC,KAAK,EAAE;cAAEtB,GAAG,EAAE;YAAK;UAAE;QAClC,CAAC,EAAEpB,aAAa,CAAC,CAAC,CAACuB,qBAAqB,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;QAEFnB,MAAM,CAACE,yBAAyB,CAAY;UAC1CY,IAAI,EAAE,CACJ;YAAEuB,OAAO,EAAE;cAAEC,KAAK,EAAE;gBAAEtB,GAAG,EAAE;cAAK;YAAE;UAAE,CAAC,EACrC;YAAEqB,OAAO,EAAE;cAAEE,IAAI,EAAE;gBAAEH,gBAAgB,EAAE;cAAI;YAAE;UAAE,CAAC;QAEpD,CAAC,EAAExC,aAAa,CAAC,CAAC,CAACuB,qBAAqB,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;QAEAnB,MAAM,CAACE,yBAAyB,CAAY;UAC1CsC,GAAG,EAAE,CACH;YAAEH,OAAO,EAAE;cAAEC,KAAK,EAAE;gBAAEtB,GAAG,EAAE;cAAK;YAAE;UAAE,CAAC,EACrC;YAAEqB,OAAO,EAAE;cAAEE,IAAI,EAAE;gBAAEH,gBAAgB,EAAE;cAAI;YAAE;UAAE,CAAC,EAChD;YAAEK,WAAW,EAAE;cAAEC,GAAG,EAAE;YAAE;UAAE,CAAC;QAE/B,CAAC,EAAE9C,aAAa,CAAC,CAAC,CAACuB,qBAAqB,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;MACA,CAAC,CAAC;MACFlB,EAAE,CAAC,kCAAkC,EAAE,MAAM;QAC3CD,MAAM,CACJE,yBAAyB,CAAY;UACnCY,IAAI,EAAE,CAAC;YACL6B,YAAY,EAAE;cAAEC,SAAS,EAAE;gBAAEC,OAAO,EAAE;kBAAEC,IAAI,EAAE;gBAAM;cAAE;YAAE;UAC1D,CAAC,EAAE;YACDH,YAAY,EAAE;cACZC,SAAS,EAAE;gBACTG,QAAQ,EAAE;kBACRzB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB;cACF;YACF;UACF,CAAC;QACH,CAAC,EAAE1B,aAAa,CAClB,CAAC,CACEuB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,CAAC;MACN,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFpB,QAAQ,CAAC,iBAAiB,EAAE,MAAM;MAChCE,EAAE,CAAC,+CAA+C,EAAE,MAAM;QACxDD,MAAM,CAACE,yBAAyB,CAC9B;UACE8C,OAAO,EAAE,CAAC;UACVlB,OAAO,EAAE;QACX,CAAC,EACDjC,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACF,CAAC,CAAC;MAEFlB,EAAE,CAAC,uBAAuB,EAAE,MAAM;QAChCD,MAAM,CAACE,yBAAyB,CAC9B;UACEY,IAAI,EAAE,CAAC;YACLkC,OAAO,EAAE;UACX,CAAC,EAAE;YACDlB,OAAO,EAAE;UACX,CAAC;QACH,CAAC,EACDjC,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC;MACJ,CAAC,CAAC;MAEFlB,EAAE,CAAC,sBAAsB,EAAE,MAAM;QAC/BD,MAAM,CAACE,yBAAyB,CAC9B;UACEsC,GAAG,EAAE,CAAC;YACJQ,OAAO,EAAE;UACX,CAAC,EAAE;YACDlB,OAAO,EAAE;UACX,CAAC;QACH,CAAC,EACDjC,8BACF,CAAC,CAAC,CAACsB,qBAAqB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,CAAC;MACN,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFpB,QAAQ,CAAC,0CAA0C,EAAE,MAAM;IACzDE,EAAE,CAAC,kEAAkE,EAAE,MAAM;MAM3E,MAAMgD,MAAM,GAAG/C,yBAAyB,CALM;QAC5C4B,OAAO,EAAE;UAAEd,GAAG,EAAE;QAAE,CAAC;QACnBkC,IAAI,EAAE;UAAElB,MAAM,EAAE;YAAEmB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;UAAE;QAAE;MAC3C,CAAC,EAICtD,8BACF,CAAC;MAEDG,MAAM,CAACiD,MAAM,CAAC,CAAC9B,qBAAqB,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,kEAAkE,EAAE,MAAM;MAO3E,MAAMgD,MAAM,GAAG/C,yBAAyB,CANM;QAC5C4B,OAAO,EAAE,CAAC;QACVsB,OAAO,EAAE,IAAI;QACbF,IAAI,EAAE;UAAElB,MAAM,EAAE;YAAEhB,GAAG,EAAE;UAAW;QAAE;MACtC,CAAC,EAICnB,8BACF,CAAC;MAEDG,MAAM,CAACiD,MAAM,CAAC,CAAC9B,qBAAqB,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAM/B,MAAMsD,cAAc,GAAG;MACrBjD,IAAI,EAAE,QAAiB;MACvBC,OAAO,EAAE,YAAY;MACrBC,oBAAoB,EAAE;QACpBF,IAAI,EAAE,QAAiB;QACvBC,OAAO,EAAE,YAAY;QACrBG,WAAW,EAAE,aAAa;QAC1BG,WAAW,EAAEC,SAAS;QACtBL,UAAU,EAAE;UACV+C,UAAU,EAAE;YAAElD,IAAI,EAAE;UAAkB,CAAC;UACvCmD,MAAM,EAAE;YAAEnD,IAAI,EAAE;UAAkB;QACpC,CAAC;QACDM,GAAG,EAAE,UAAU;QACf8C,iBAAiB,EAAE,IAAI;QACvBC,aAAa,EAAE,YAAY;QAC3BhD,KAAK,EAAE,CAAC,CAAC;QACTiD,cAAc,EAAE,QAAiB;QACjCC,IAAI,EAAE/C,SAAS;QACfgD,UAAU,EAAEhD,SAAS;QACrBiD,iBAAiB,EAAE,cAAc;QACjCN,MAAM,EAAE3C,SAAS;QACjBkD,YAAY,EAAE,CAAC,CAAC;QAChBC,mBAAmB,EAAE,CAAC;MACxB;IACF,CAAC;IAED9D,EAAE,CAAC,2CAA2C,EAAE,MAAM;MAOpD,MAAM+D,QAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;MAExD,MAAMhB,MAAM,GAAG/C,yBAAyB,CAR0B;QAChEoD,UAAU,EAAE,aAAa;QACzBY,WAAW,EAAE;UAAEpB,IAAI,EAAE;QAAE,CAAC;QACxBqB,WAAW,EAAE;MACf,CAAC,EAMCd,cAAc,EACdW,QACF,CAAC;MAEDhE,MAAM,CAACiD,MAAM,CAAC,CAAC9B,qBAAqB,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,8CAA8C,EAAE,MAAM;MAQvD,MAAM+D,QAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;MAEzC,MAAMhB,MAAM,GAAG/C,yBAAyB,CAT0B;QAChEY,IAAI,EAAE,CACJ;UAAEwC,UAAU,EAAE;QAAc,CAAC,EAC7B;UAAEY,WAAW,EAAE;YAAEpB,IAAI,EAAE;UAAE;QAAE,CAAC;MAEhC,CAAC,EAMCO,cAAc,EACdW,QACF,CAAC;MAEDhE,MAAM,CAACiD,MAAM,CAAC,CAAC9B,qBAAqB,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,kDAAkD,EAAE,MAAM;MAgB3D,MAAM+D,QAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;MAExD,MAAMhB,MAAM,GAAG/C,yBAAyB,CAjB0B;QAChEoD,UAAU,EAAE,aAAa;QACzBxC,IAAI,EAAE,CACJ;UACE0B,GAAG,EAAE,CACH;YAAEe,MAAM,EAAE;UAAS,CAAC,EACpB;YAAEW,WAAW,EAAE;cAAEpB,IAAI,EAAE;YAAG;UAAE,CAAC;QAEjC,CAAC,EACD;UACEqB,WAAW,EAAE;YAAEpC,GAAG,EAAE;UAAQ;QAC9B,CAAC;MAEL,CAAC,EAMCsB,cAAc,EACdW,QACF,CAAC;;MAED;MACAhE,MAAM,CAACiD,MAAM,CAAC,CAAC9B,qBAAqB,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"modernToLegacyWhereClause.test.js","names":["BgaoNflPlayer","objectTypeWithAllPropertyTypes","expectType","describe","expect","it","modernToLegacyWhereClause","T","type","apiName","__DefinitionMetadata","properties","displayName","links","rid","description","undefined","r","$and","prop","$eq","prop2","innerProp1","toMatchInlineSnapshot","foo","geoPoint","$within","$bbox","$distance","$of","coordinates","$polygon","geoShape","$intersects","integer","$ne","string","$containsAllTerms","term","fuzzySearch","$containsAnyTerm","address","state","city","$or","gamesPlayed","$gt","addressArray","$contains","zipCode","$gte","location","integerArray","$lt","stringArray","$startsWith","booleanArray","decimal","result","$not","$in","boolean","mockObjectType","department","status","primaryKeyApiName","titleProperty","primaryKeyType","icon","visibility","pluralDisplayName","interfaceMap","inverseInterfaceMap","rdpNames","Set","reportCount","managerName"],"sources":["modernToLegacyWhereClause.test.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 { ObjectOrInterfaceDefinition, WhereClause } from \"@osdk/api\";\nimport {\n BgaoNflPlayer,\n objectTypeWithAllPropertyTypes,\n} from \"@osdk/client.test.ontology\";\nimport type { Point } from \"geojson\";\nimport { expectType } from \"ts-expect\";\nimport { describe, expect, it } from \"vitest\";\nimport { modernToLegacyWhereClause } from \"./modernToLegacyWhereClause.js\";\n\ntype ObjAllProps = objectTypeWithAllPropertyTypes;\ntype structObj = BgaoNflPlayer;\ndescribe(modernToLegacyWhereClause, () => {\n describe(\"api namespaces\", () => {\n describe(\"interfaces\", () => {\n it(\"properly converts shortname to fqApiName\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"prop\": { type: \"integer\" },\n \"prop2\": {\n type: { \"innerProp1\": \"string\", \"innerProp2\": \"float\" },\n },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n const r = modernToLegacyWhereClause({\n $and: [\n { prop: { $eq: 5 } },\n { prop2: { innerProp1: { $eq: \"myProp\" } } },\n ],\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"a.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"a.prop2\",\n \"structFieldApiName\": \"innerProp1\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"myProp\",\n },\n ],\n }\n `);\n });\n\n it(\"properly does not convert when interface has no apiNamespace\", () => {\n const T = {\n type: \"interface\",\n apiName: \"Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"foo\": { type: \"integer\" },\n \"b.prop\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n \"c.prop2\": {\n type: { \"innerProp1\": \"string\", \"innerProp2\": \"float\" },\n },\n },\n apiName: \"Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n const r = modernToLegacyWhereClause({\n \"b.prop\": 5,\n foo: 6,\n \"c.prop2\": { innerProp1: { $eq: \"myProp\" } },\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"b.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"foo\",\n \"type\": \"eq\",\n \"value\": 6,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"c.prop2\",\n \"structFieldApiName\": \"innerProp1\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"myProp\",\n },\n ],\n }\n `);\n });\n\n it(\"gracefully handles redundant apiNamespace in property\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"a.foo\": { type: \"integer\" },\n \"b.prop\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n \"c.prop2\": {\n type: { \"innerProp1\": \"string\", \"innerProp2\": \"float\" },\n },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n const r = modernToLegacyWhereClause({\n \"b.prop\": 5,\n \"a.foo\": 6,\n \"c.prop2\": { innerProp1: { $eq: \"myProp\" } },\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"b.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"a.foo\",\n \"type\": \"eq\",\n \"value\": 6,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"c.prop2\",\n \"structFieldApiName\": \"innerProp1\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"myProp\",\n },\n ],\n }\n `);\n });\n\n it(\"properly does not convert different apiNamespaces\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"a.foo\": { type: \"integer\" },\n \"b.prop\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n\n expect(modernToLegacyWhereClause({\n \"b.prop\": 5,\n }, T)).toMatchInlineSnapshot(`\n {\n \"field\": \"b.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n }\n `);\n });\n });\n\n describe(\"objects\", () => {\n it(\"does not convert object short property names to fq\", () => {\n const T = {\n type: \"interface\",\n apiName: \"a.Foo\",\n __DefinitionMetadata: {\n type: \"interface\",\n properties: {\n \"a.foo\": { type: \"integer\" },\n \"prop\": { type: \"integer\" },\n },\n apiName: \"a.Foo\",\n displayName: \"\",\n links: {},\n rid: \"\",\n description: undefined,\n },\n } as const satisfies ObjectOrInterfaceDefinition;\n const r = modernToLegacyWhereClause({\n prop: 5,\n }, T);\n\n expect(r).toMatchInlineSnapshot(`\n {\n \"field\": \"a.prop\",\n \"type\": \"eq\",\n \"value\": 5,\n }\n `);\n });\n });\n });\n\n describe(\"single checks\", () => {\n describe(\"$within\", () => {\n it(\"properly generates bbox shortcut\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: [-5, 5, -10, 10],\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n\n it(\"properly generates bbox long form\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: {\n $bbox: [-5, 5, -10, 10],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n\n it(\"properly generates within radius\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: { $distance: [5, \"km\"], $of: [-5, 5] },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinDistanceOf\",\n \"value\": {\n \"center\": {\n \"coordinates\": [\n -5,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"distance\": {\n \"unit\": \"KILOMETERS\",\n \"value\": 5,\n },\n },\n }\n `);\n });\n\n it(\"properly generates within radius of geopoint\", async () => {\n // suppose you loaded an object with a geopoint field\n // and you want to find all objects within 5 km of that point\n const pointAsGeoJsonPoint: Point = {\n type: \"Point\",\n coordinates: [-5, 5],\n };\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: { $distance: [5, \"km\"], $of: pointAsGeoJsonPoint },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinDistanceOf\",\n \"value\": {\n \"center\": {\n \"coordinates\": [\n -5,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"distance\": {\n \"unit\": \"KILOMETERS\",\n \"value\": 5,\n },\n },\n }\n `);\n });\n\n it(\"properly generates within polygon\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: { $polygon: [[[0, 1], [3, 2], [0, 1]]] },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n\n it(\"properly generates within polygon geojson\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoPoint: {\n $within: {\n type: \"Polygon\",\n coordinates: [[[0, 1], [3, 2], [0, 1]]],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoPoint\",\n \"type\": \"withinPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n it(\"check types\", async () => {\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: [-5, 5, -10, 10],\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: { $distance: [2, \"centimeter\"], $of: [2, 2] },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: { $polygon: [[[0, 1], [3, 2], [0, 1]]] },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: {\n type: \"Polygon\",\n coordinates: [[[0, 1], [3, 2], [0, 1]]],\n },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: { $bbox: [-5, 5, -10, 10] },\n },\n });\n\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: {\n $bbox: [-5, 5, -10, 10],\n // @ts-expect-error\n $distance: [2, \"centimeter\"],\n // @ts-expect-error\n $of: [2, 2],\n },\n },\n });\n expectType<WhereClause<ObjAllProps>>({\n geoPoint: {\n $within: {\n $polygon: [[[0, 1], [3, 2], [0, 1]]],\n // @ts-expect-error\n $bbox: [2, 2, 2, 2],\n },\n },\n });\n });\n describe(\"$intersects\", () => {\n it(\"properly generates bbox shortcut\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: [-5, 5, -10, 10],\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n it(\"properly generates bbox long form\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: {\n $bbox: [-5, 5, -10, 10],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n -10,\n 5,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n -5,\n 10,\n ],\n \"type\": \"Point\",\n },\n },\n }\n `);\n });\n\n it(\"properly generates intersects polygon\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: { $polygon: [[[0, 1], [3, 2], [0, 1]]] },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n\n it(\"properly generates within polygon geojson\", async () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n geoShape: {\n $intersects: {\n type: \"Polygon\",\n coordinates: [[[0, 1], [3, 2], [0, 1]]],\n },\n },\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"field\": \"geoShape\",\n \"type\": \"intersectsPolygon\",\n \"value\": {\n \"coordinates\": [\n [\n [\n 0,\n 1,\n ],\n [\n 3,\n 2,\n ],\n [\n 0,\n 1,\n ],\n ],\n ],\n \"type\": \"Polygon\",\n },\n }\n `);\n });\n });\n\n it(\"inverts ne short hand properly\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n integer: { $ne: 5 },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n }\n `);\n });\n it(\"converts $containsAllTerms correctly if using new type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: { term: \"test\", fuzzySearch: true } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": true,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: { term: \"test\", fuzzySearch: false } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: { term: \"test\" } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n });\n\n it(\"converts $containsAllTerms correctly if using old type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAllTerms: \"test\" },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAllTerms\",\n \"value\": \"test\",\n }\n `);\n });\n it(\"converts $containsAnyTerm correctly if using new type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: { term: \"test\", fuzzySearch: true } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": true,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: { term: \"test\", fuzzySearch: false } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: { term: \"test\" } },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n });\n\n it(\"converts $containsAnyTerm correctly if using old type\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>({\n string: { $containsAnyTerm: \"test\" },\n }, objectTypeWithAllPropertyTypes)).toMatchInlineSnapshot(`\n {\n \"field\": \"string\",\n \"fuzzy\": false,\n \"type\": \"containsAnyTerm\",\n \"value\": \"test\",\n }\n `);\n });\n it(\"converts struct where clauses correctly\", () => {\n expect(modernToLegacyWhereClause<structObj>({\n address: { state: { $eq: \"NJ\" } },\n }, BgaoNflPlayer)).toMatchInlineSnapshot(`\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"state\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"NJ\",\n }\n `);\n\n expect(modernToLegacyWhereClause<structObj>({\n $and: [\n { address: { state: { $eq: \"NJ\" } } },\n { address: { city: { $containsAnyTerm: \"N\" } } },\n ],\n }, BgaoNflPlayer)).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"state\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"NJ\",\n },\n {\n \"field\": undefined,\n \"fuzzy\": false,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"city\",\n \"type\": \"structField\",\n },\n \"type\": \"containsAnyTerm\",\n \"value\": \"N\",\n },\n ],\n }\n `);\n\n expect(modernToLegacyWhereClause<structObj>({\n $or: [\n { address: { state: { $eq: \"NJ\" } } },\n { address: { city: { $containsAnyTerm: \"N\" } } },\n { gamesPlayed: { $gt: 5 } },\n ],\n }, BgaoNflPlayer)).toMatchInlineSnapshot(`\n {\n \"type\": \"or\",\n \"value\": [\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"state\",\n \"type\": \"structField\",\n },\n \"type\": \"eq\",\n \"value\": \"NJ\",\n },\n {\n \"field\": undefined,\n \"fuzzy\": false,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"address\",\n \"structFieldApiName\": \"city\",\n \"type\": \"structField\",\n },\n \"type\": \"containsAnyTerm\",\n \"value\": \"N\",\n },\n {\n \"field\": \"gamesPlayed\",\n \"type\": \"gt\",\n \"value\": 5,\n },\n ],\n }\n `);\n });\n it(\"converts struct arrays correctly\", () => {\n expect(\n modernToLegacyWhereClause<structObj>({\n $and: [{\n addressArray: { $contains: { zipCode: { $gte: 10001 } } },\n }, {\n addressArray: {\n $contains: {\n location: {\n $within: [1, 2, 3, 4],\n },\n },\n },\n }],\n }, BgaoNflPlayer),\n )\n .toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"addressArray\",\n \"structFieldApiName\": \"zipCode\",\n \"type\": \"structField\",\n },\n \"type\": \"gte\",\n \"value\": 10001,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"propertyApiName\": \"addressArray\",\n \"structFieldApiName\": \"location\",\n \"type\": \"structField\",\n },\n \"type\": \"withinBoundingBox\",\n \"value\": {\n \"bottomRight\": {\n \"coordinates\": [\n 3,\n 2,\n ],\n \"type\": \"Point\",\n },\n \"topLeft\": {\n \"coordinates\": [\n 1,\n 4,\n ],\n \"type\": \"Point\",\n },\n },\n },\n ],\n }\n `);\n });\n\n it(\"converts primitive arrays with nested filters correctly\", () => {\n expect(\n modernToLegacyWhereClause<ObjAllProps>({\n integerArray: { $contains: { $lt: 5 } },\n }, objectTypeWithAllPropertyTypes),\n ).toMatchInlineSnapshot(`\n {\n \"field\": \"integerArray\",\n \"type\": \"lt\",\n \"value\": 5,\n }\n `);\n\n expect(\n modernToLegacyWhereClause<ObjAllProps>({\n stringArray: { $contains: { $startsWith: \"test\" } },\n }, objectTypeWithAllPropertyTypes),\n ).toMatchInlineSnapshot(`\n {\n \"field\": \"stringArray\",\n \"type\": \"startsWith\",\n \"value\": \"test\",\n }\n `);\n\n expect(\n modernToLegacyWhereClause<ObjAllProps>({\n booleanArray: { $contains: { $eq: true } },\n }, objectTypeWithAllPropertyTypes),\n ).toMatchInlineSnapshot(`\n {\n \"field\": \"booleanArray\",\n \"type\": \"eq\",\n \"value\": true,\n }\n `);\n });\n\n it(\"converts primitive arrays with multiple nested filter conditions\", () => {\n expect(\n modernToLegacyWhereClause<ObjAllProps>({\n $and: [\n { integerArray: { $contains: { $gte: 1 } } },\n { integerArray: { $contains: { $lt: 10 } } },\n ],\n }, objectTypeWithAllPropertyTypes),\n ).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"integerArray\",\n \"type\": \"gte\",\n \"value\": 1,\n },\n {\n \"field\": \"integerArray\",\n \"type\": \"lt\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n });\n\n describe(\"multiple checks\", () => {\n it(\"properly handles multiple simple where checks\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n decimal: 5,\n integer: 10,\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"decimal\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n\n it(\"properly handles $and\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n $and: [{\n decimal: 5,\n }, {\n integer: 10,\n }],\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"decimal\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n\n it(\"properly handles $or\", () => {\n expect(modernToLegacyWhereClause<ObjAllProps>(\n {\n $or: [{\n decimal: 5,\n }, {\n integer: 10,\n }],\n },\n objectTypeWithAllPropertyTypes,\n )).toMatchInlineSnapshot(`\n {\n \"type\": \"or\",\n \"value\": [\n {\n \"field\": \"decimal\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 10,\n },\n ],\n }\n `);\n });\n });\n });\n\n describe(\"mixed $ operators and regular properties\", () => {\n it(\"should handle $not operator with regular properties at top level\", () => {\n const whereClause: WhereClause<ObjAllProps> = {\n integer: { $eq: 5 },\n $not: { string: { $in: [\"a\", \"b\", \"c\"] } },\n };\n\n const result = modernToLegacyWhereClause(\n whereClause,\n objectTypeWithAllPropertyTypes,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": \"string\",\n \"type\": \"in\",\n \"value\": [\n \"a\",\n \"b\",\n \"c\",\n ],\n },\n },\n ],\n }\n `);\n });\n\n it(\"should handle multiple regular properties with $not at top level\", () => {\n const whereClause: WhereClause<ObjAllProps> = {\n integer: 5,\n boolean: true,\n $not: { string: { $eq: \"excluded\" } },\n };\n\n const result = modernToLegacyWhereClause(\n whereClause,\n objectTypeWithAllPropertyTypes,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"integer\",\n \"type\": \"eq\",\n \"value\": 5,\n },\n {\n \"field\": \"boolean\",\n \"type\": \"eq\",\n \"value\": true,\n },\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": \"string\",\n \"type\": \"eq\",\n \"value\": \"excluded\",\n },\n },\n ],\n }\n `);\n });\n });\n\n describe(\"RDP properties\", () => {\n type TestRDPs = {\n reportCount: \"integer\";\n managerName: \"string\";\n };\n\n const mockObjectType = {\n type: \"object\" as const,\n apiName: \"TestObject\",\n __DefinitionMetadata: {\n type: \"object\" as const,\n apiName: \"TestObject\",\n displayName: \"Test Object\",\n description: undefined,\n properties: {\n department: { type: \"string\" as const },\n status: { type: \"string\" as const },\n },\n rid: \"test-rid\",\n primaryKeyApiName: \"id\",\n titleProperty: \"department\",\n links: {},\n primaryKeyType: \"string\" as const,\n icon: undefined,\n visibility: undefined,\n pluralDisplayName: \"Test Objects\",\n status: undefined,\n interfaceMap: {},\n inverseInterfaceMap: {},\n },\n };\n\n it(\"should handle RDP properties at top level\", () => {\n const whereClause: WhereClause<typeof mockObjectType, TestRDPs> = {\n department: \"Engineering\",\n reportCount: { $gte: 5 },\n managerName: \"John\",\n };\n\n const rdpNames = new Set([\"reportCount\", \"managerName\"]);\n\n const result = modernToLegacyWhereClause(\n whereClause,\n mockObjectType,\n rdpNames,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"department\",\n \"type\": \"eq\",\n \"value\": \"Engineering\",\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"reportCount\",\n \"type\": \"property\",\n },\n \"type\": \"gte\",\n \"value\": 5,\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"managerName\",\n \"type\": \"property\",\n },\n \"type\": \"eq\",\n \"value\": \"John\",\n },\n ],\n }\n `);\n });\n\n it(\"should handle RDP properties in $and clauses\", () => {\n const whereClause: WhereClause<typeof mockObjectType, TestRDPs> = {\n $and: [\n { department: \"Engineering\" },\n { reportCount: { $gte: 5 } },\n ],\n };\n\n const rdpNames = new Set([\"reportCount\"]);\n\n const result = modernToLegacyWhereClause(\n whereClause,\n mockObjectType,\n rdpNames,\n );\n\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"department\",\n \"type\": \"eq\",\n \"value\": \"Engineering\",\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"reportCount\",\n \"type\": \"property\",\n },\n \"type\": \"gte\",\n \"value\": 5,\n },\n ],\n }\n `);\n });\n\n it(\"should handle complex nested structures with RDP\", () => {\n const whereClause: WhereClause<typeof mockObjectType, TestRDPs> = {\n department: \"Engineering\",\n $and: [\n {\n $or: [\n { status: \"active\" },\n { reportCount: { $gte: 10 } },\n ],\n },\n {\n managerName: { $ne: \"Admin\" },\n },\n ],\n };\n\n const rdpNames = new Set([\"reportCount\", \"managerName\"]);\n\n const result = modernToLegacyWhereClause(\n whereClause,\n mockObjectType,\n rdpNames,\n );\n\n // The actual structure flattens the nested $and differently\n expect(result).toMatchInlineSnapshot(`\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"field\": \"department\",\n \"type\": \"eq\",\n \"value\": \"Engineering\",\n },\n {\n \"type\": \"and\",\n \"value\": [\n {\n \"type\": \"or\",\n \"value\": [\n {\n \"field\": \"status\",\n \"type\": \"eq\",\n \"value\": \"active\",\n },\n {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"reportCount\",\n \"type\": \"property\",\n },\n \"type\": \"gte\",\n \"value\": 10,\n },\n ],\n },\n {\n \"type\": \"not\",\n \"value\": {\n \"field\": undefined,\n \"propertyIdentifier\": {\n \"apiName\": \"managerName\",\n \"type\": \"property\",\n },\n \"type\": \"eq\",\n \"value\": \"Admin\",\n },\n },\n ],\n },\n ],\n }\n `);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -101,7 +101,7 @@ export class ObjectSetListenerWebsocket {
101
101
  });
102
102
  !(client.baseUrl.startsWith("https://") || client.baseUrl.startsWith("http://")) ? process.env.NODE_ENV !== "production" ? invariant(false, "Stack must be a URL") : invariant(false) : void 0;
103
103
  }
104
- async subscribe(objectType, objectSet, listener, properties = []) {
104
+ async subscribe(objectType, objectSet, listener, properties = [], shouldLoadRids = false) {
105
105
  const objOrInterfaceDef = objectType.type === "object" ? await this.#client.ontologyProvider.getObjectDefinition(objectType.apiName) : await this.#client.ontologyProvider.getInterfaceDefinition(objectType.apiName);
106
106
  let objectProperties = [];
107
107
  let referenceProperties = [];
@@ -120,7 +120,8 @@ export class ObjectSetListenerWebsocket {
120
120
  // Since we don't have a real subscription id yet but we need to keep
121
121
  // track of this reference, we can just use a random uuid.
122
122
  subscriptionId: `TMP-${nextUuid()}}`,
123
- interfaceApiName: objOrInterfaceDef.type === "object" ? undefined : objOrInterfaceDef.apiName
123
+ interfaceApiName: objOrInterfaceDef.type === "object" ? undefined : objOrInterfaceDef.apiName,
124
+ loadRids: shouldLoadRids
124
125
  };
125
126
  this.#subscriptions.set(sub.subscriptionId, sub);
126
127
 
@@ -188,7 +189,10 @@ export class ObjectSetListenerWebsocket {
188
189
  return {
189
190
  objectSet: objectSet,
190
191
  propertySet: requestedProperties,
191
- referenceSet: requestedReferenceProperties
192
+ referenceSet: requestedReferenceProperties,
193
+ objectLoadingResponseOptions: {
194
+ shouldLoadObjectRids: true
195
+ }
192
196
  };
193
197
  })
194
198
  };
@@ -377,9 +381,14 @@ export class ObjectSetListenerWebsocket {
377
381
  }
378
382
  const osdkObjectArray = await this.#client.objectFactory2(this.#client, [o.object], sub.interfaceApiName, {}, undefined, false, undefined, false, await this.#fetchInterfaceMapping(o.object.__apiName, sub.interfaceApiName));
379
383
  const singleOsdkObject = osdkObjectArray[0] ?? undefined;
380
- return singleOsdkObject != null ? {
384
+ const rid = singleOsdkObject["$rid"];
385
+ return singleOsdkObject != null ? rid === undefined ? {
381
386
  object: singleOsdkObject,
382
387
  state: o.state
388
+ } : {
389
+ object: singleOsdkObject,
390
+ state: o.state,
391
+ rid: rid
383
392
  } : undefined;
384
393
  }));
385
394
  for (const osdkObject of osdkObjects) {
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","ExponentialBackoff","MINIMUM_RECONNECT_DELAY_MS","EXPONENTIAL_BACKOFF_INITIAL_DELAY_MS","EXPONENTIAL_BACKOFF_MAX_DELAY_MS","EXPONENTIAL_BACKOFF_MULTIPLIER","EXPONENTIAL_BACKOFF_JITTER_FACTOR","WEBSOCKET_IDLE_DISCONNECT_DELAY_MS","WEBSOCKET_HEARTBEAT_INTERVAL_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","onSuccessfulSubscription","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","backoff","isFirstConnection","logger","pendingSubscriptions","Map","subscriptions","endedSubscriptions","Set","maybeDisconnectTimeout","heartbeatInterval","constructor","minimumReconnectDelayMs","initialDelayMs","maxDelayMs","multiplier","jitterFactor","child","msgPrefix","baseUrl","startsWith","process","env","NODE_ENV","subscribe","objectType","objectSet","listener","properties","objOrInterfaceDef","type","ontologyProvider","getObjectDefinition","apiName","getInterfaceDefinition","objectProperties","referenceProperties","length","Object","keys","filter","p","primaryKeyPropertyName","undefined","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","nextUuid","interfaceApiName","initiateSubscribe","unsubscribe","#initiateSubscribe","debug","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","tryCatchOnError","#sendSubscribeMessage","readySubs","values","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#unsubscribe","newStatus","delete","add","clearTimeout","setTimeout","size","cycleWebsocket","#ensureWebsocket","tokenProvider","url","constructWebsocketUrl","ontologyRid","token","delay","calculateDelay","attempt","getAttempt","Promise","resolve","Date","now","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","Error","String","#onOpen","reset","clearInterval","setInterval","message","data","parse","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","objectFactory2","__apiName","__primaryKey","primaryKey","property","value","fetchInterfaceMapping","singleOsdkObject","object","state","osdkObjects","keysToDelete","key","includes","osdkObject","#fetchInterfaceMapping","objectTypeApiName","interfaceMap","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","has","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s","#tryCatchOnError","subscriptionClosed","onErrorError","console","base","URL","protocol","replace","uuidCounter","toString","padStart"],"sources":["ObjectSetListenerWebsocket.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 Logger,\n ObjectOrInterfaceDefinition,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n ObjectSet,\n ObjectSetStreamSubscribeRequest,\n ObjectSetStreamSubscribeRequests,\n ObjectSetSubscribeResponses,\n ObjectSetUpdates,\n ObjectState,\n RefreshObjectSet,\n StreamMessage,\n SubscriptionClosed,\n} from \"@osdk/foundry.ontologies\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport type { ClientCacheKey, MinimalClient } from \"../MinimalClientContext.js\";\nimport { ExponentialBackoff } from \"../util/exponentialBackoff.js\";\n\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\nconst EXPONENTIAL_BACKOFF_INITIAL_DELAY_MS = 1000;\nconst EXPONENTIAL_BACKOFF_MAX_DELAY_MS = 60000;\nconst EXPONENTIAL_BACKOFF_MULTIPLIER = 2;\nconst EXPONENTIAL_BACKOFF_JITTER_FACTOR = 0.3;\nconst WEBSOCKET_IDLE_DISCONNECT_DELAY_MS = 15000;\nconst WEBSOCKET_HEARTBEAT_INTERVAL_MS = 45 * 1000;\n\n/** Noop function to reduce conditional checks */\nfunction doNothing() {}\n\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n {\n onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing,\n onSuccessfulSubscription = doNothing,\n }: ObjectSetSubscription.Listener<Q, P>,\n): Required<ObjectSetSubscription.Listener<Q, P>> {\n return { onChange, onError, onOutOfDate, onSuccessfulSubscription };\n}\n\ninterface Subscription<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n> {\n listener: Required<ObjectSetSubscription.Listener<Q, P>>;\n requestedProperties: Array<P>;\n requestedReferenceProperties: Array<P>;\n objectSet: ObjectSet;\n\n subscriptionId: string;\n isReady?: boolean;\n status:\n | \"preparing\"\n | \"subscribed\"\n | \"done\"\n | \"expired\"\n | \"error\"\n | \"reconnecting\";\n\n interfaceApiName?: string;\n primaryKeyPropertyName?: string;\n}\n\nfunction isReady<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n sub: Subscription<Q, P>,\n): sub is Subscription<Q, P> & { temporaryObjectSetId: string } {\n return sub.isReady != null;\n}\n\nfunction subscriptionIsDone(sub: Subscription<any, any>) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap<\n ClientCacheKey,\n ObjectSetListenerWebsocket\n >();\n readonly MINIMUM_RECONNECT_DELAY_MS: number;\n\n // FIXME\n static getInstance(client: MinimalClient): ObjectSetListenerWebsocket {\n let instance = ObjectSetListenerWebsocket.#instances.get(\n client.clientCacheKey,\n );\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(\n client.clientCacheKey,\n instance,\n );\n }\n return instance;\n }\n\n #ws: WebSocket | undefined;\n #lastWsConnect = 0;\n #client: MinimalClient;\n #backoff: ExponentialBackoff;\n #isFirstConnection = true;\n\n #logger?: Logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map<\n string,\n Subscription<any, any>[]\n >();\n\n /**\n * Map of subscriptionId to Subscription. Note: the subscriptionId may be\n * temporary and not the actual subscriptionId from the server.\n */\n #subscriptions = new Map<\n string,\n Subscription<any, any>\n >();\n\n #endedSubscriptions = new Set<\n string\n >();\n\n #maybeDisconnectTimeout: ReturnType<typeof setTimeout> | undefined;\n #heartbeatInterval: ReturnType<typeof setInterval> | undefined;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(\n client: MinimalClient,\n {\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS,\n } = {},\n ) {\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#backoff = new ExponentialBackoff({\n initialDelayMs: EXPONENTIAL_BACKOFF_INITIAL_DELAY_MS,\n maxDelayMs: EXPONENTIAL_BACKOFF_MAX_DELAY_MS,\n multiplier: EXPONENTIAL_BACKOFF_MULTIPLIER,\n jitterFactor: EXPONENTIAL_BACKOFF_JITTER_FACTOR,\n });\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \",\n });\n invariant(\n client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"),\n \"Stack must be a URL\",\n );\n }\n\n async subscribe<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n >(\n objectType: ObjectOrInterfaceDefinition,\n objectSet: ObjectSet,\n listener: ObjectSetSubscription.Listener<Q, P>,\n properties: Array<P> = [],\n ): Promise<() => void> {\n const objOrInterfaceDef = objectType.type === \"object\"\n ? await this.#client.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n )\n : await this.#client.ontologyProvider.getInterfaceDefinition(\n objectType.apiName,\n );\n\n let objectProperties: Array<P> = [];\n let referenceProperties: Array<P> = [];\n\n if (properties.length === 0) {\n properties = Object.keys(objOrInterfaceDef.properties) as Array<P>;\n }\n\n objectProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type !== \"geotimeSeriesReference\"\n );\n\n referenceProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type === \"geotimeSeriesReference\"\n );\n\n const sub: Subscription<Q, P> = {\n listener: fillOutListener<Q, P>(listener),\n objectSet,\n primaryKeyPropertyName: objOrInterfaceDef.type === \"interface\"\n ? undefined\n : objOrInterfaceDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${nextUuid()}}`,\n interfaceApiName: objOrInterfaceDef.type === \"object\"\n ? undefined\n : objOrInterfaceDef.apiName,\n };\n\n this.#subscriptions.set(sub.subscriptionId, sub);\n\n // actually prepares the subscription, ensures the ws is ready, and sends\n // a subscribe message. We don't want to block on this.\n void this.#initiateSubscribe(sub);\n\n return () => {\n this.#unsubscribe(sub);\n };\n }\n\n /**\n * Called at least once for every subscription.\n *\n * - Resets pending expiry\n * - Recreates temporary object set\n * - Triggers a full subscribe message\n *\n * @returns\n */\n async #initiateSubscribe(sub: Subscription<any, any>) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"#initiateSubscribe()\");\n }\n\n try {\n await this.#ensureWebsocket();\n\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n } catch (error) {\n this.#logger?.error(error, \"Error in #initiateSubscribe\");\n this.#tryCatchOnError(sub, true, error);\n }\n }\n\n #sendSubscribeMessage() {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"#sendSubscribeMessage()\");\n }\n // If two calls to `.subscribe()` happen at once (or if the connection is reset),\n // we may have multiple subscriptions that don't have a subscriptionId yet,\n // so we filter those out.\n const readySubs = [...this.#subscriptions.values()].filter(isReady);\n\n const id = nextUuid();\n // responses come back as an array of subIds, so we need to know the sources\n this.#pendingSubscriptions.set(id, readySubs);\n\n // every subscribe message \"overwrites\" the previous ones that are not\n // re-included, so we have to reconstitute the entire list of subscriptions\n const subscribe: ObjectSetStreamSubscribeRequests = {\n id,\n requests: readySubs.map<ObjectSetStreamSubscribeRequest>((\n {\n objectSet,\n requestedProperties,\n requestedReferenceProperties,\n interfaceApiName,\n },\n ) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n };\n }),\n };\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\n { payload: subscribe },\n \"sending subscribe message\",\n );\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n\n #unsubscribe<Q extends ObjectOrInterfaceDefinition>(\n sub: Subscription<Q, any>,\n newStatus: \"done\" | \"error\" = \"done\",\n ) {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n\n sub.status = newStatus;\n\n // make sure listeners do nothing now\n sub.listener = fillOutListener<Q, any>({});\n\n this.#subscriptions.delete(sub.subscriptionId);\n this.#endedSubscriptions.add(sub.subscriptionId);\n this.#sendSubscribeMessage();\n\n // If we have no more subscriptions, we can disconnect the websocket\n // however we should wait a bit to see if we get any more subscriptions.\n // For example, when switching between react views, you may unsubscribe\n // in the old view and subscribe in the new view. We don't need to re-establish\n // the websocket connection in that case.\n if (this.#maybeDisconnectTimeout) {\n // We reset the timeout on every unsubscribe so its always at least 15s from\n // the last time we are empty. E.g.:\n // - 0s: Subscribe(A)\n // - 10s: Unsubscribe(A)\n // - 11s: Subscribe(B)\n // - 20s: Unsubscribe(B)\n // If we do not clear out the timeout we would disconnect at 25s but that would only be\n // 5s after the last subscription was removed instead of at 35s for the desired 15s.\n clearTimeout(this.#maybeDisconnectTimeout);\n }\n this.#maybeDisconnectTimeout = setTimeout(() => {\n this.#maybeDisconnectTimeout = undefined;\n if (this.#subscriptions.size === 0) {\n this.#cycleWebsocket();\n }\n }, WEBSOCKET_IDLE_DISCONNECT_DELAY_MS);\n }\n\n async #ensureWebsocket() {\n if (this.#ws == null) {\n const { baseUrl, tokenProvider } = this.#client;\n const url = constructWebsocketUrl(\n baseUrl,\n await this.#client.ontologyRid,\n );\n\n const token = await tokenProvider();\n\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // Only apply exponential backoff delay on reconnection attempts, not the first connection\n if (!this.#isFirstConnection) {\n const delay = this.#backoff.calculateDelay();\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\n { delay, attempt: this.#backoff.getAttempt() },\n \"Waiting before reconnect\",\n );\n }\n await new Promise((resolve) => {\n setTimeout(resolve, delay);\n });\n }\n\n this.#lastWsConnect = Date.now();\n\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise<void>((resolve, reject) => {\n function cleanup() {\n ws.removeEventListener(\"open\", open);\n ws.removeEventListener(\"error\", error);\n ws.removeEventListener(\"close\", cleanup);\n }\n function open() {\n cleanup();\n resolve();\n }\n function error(evt: unknown) {\n cleanup();\n reject(new Error(String(evt)));\n }\n ws.addEventListener(\"open\", open);\n ws.addEventListener(\"error\", error);\n ws.addEventListener(\"close\", cleanup);\n });\n }\n }\n }\n\n #onOpen = () => {\n // Mark that we've successfully connected at least once\n this.#isFirstConnection = false;\n // Reset backoff on successful connection\n this.#backoff.reset();\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n\n // Start heartbeat to keep connection alive\n if (this.#heartbeatInterval) {\n clearInterval(this.#heartbeatInterval);\n }\n this.#heartbeatInterval = setInterval(() => {\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n }, WEBSOCKET_HEARTBEAT_INTERVAL_MS);\n };\n\n #onMessage = async (message: WebSocket.MessageEvent): Promise<void> => {\n const data = JSON.parse(String(message.data)) as StreamMessage;\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n await this.#handleMessage_objectSetChanged(data);\n return;\n\n case \"refreshObjectSet\":\n this.#handleMessage_refreshObjectSet(data);\n return;\n\n case \"subscribeResponses\":\n this.#handleMessage_subscribeResponses(data);\n return;\n\n case \"subscriptionClosed\": {\n this.#handleMessage_subscriptionClosed(data);\n return;\n }\n\n default:\n const _: never = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n\n #handleMessage_objectSetChanged = async (\n payload: ObjectSetUpdates,\n ) => {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null) return;\n\n const objectUpdates = payload.updates.filter((update) =>\n update.type === \"object\"\n );\n const referenceUpdates = payload.updates.filter((update) =>\n update.type === \"reference\"\n );\n const osdkObjectsWithReferenceUpdates = await Promise.all(\n referenceUpdates.map(async (o) => {\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [{\n __apiName: o.objectType,\n __primaryKey: sub.primaryKeyPropertyName != null\n ? o.primaryKey[sub.primaryKeyPropertyName]\n : undefined,\n ...o.primaryKey,\n [o.property]: o.value,\n }],\n sub.interfaceApiName,\n {},\n undefined,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.objectType,\n sub.interfaceApiName,\n ),\n );\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject as Osdk.Instance<any, never, any>,\n state: \"ADDED_OR_UPDATED\" as ObjectState,\n }\n : undefined;\n }),\n );\n\n for (const update of osdkObjectsWithReferenceUpdates) {\n if (update != null) {\n try {\n sub.listener.onChange?.(update);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) =>\n sub.requestedReferenceProperties.includes(key)\n );\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [o.object],\n sub.interfaceApiName,\n {},\n undefined,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.object.__apiName,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n };\n\n async #fetchInterfaceMapping(\n objectTypeApiName: string,\n interfaceApiName: string | undefined,\n ): Promise<Record<string, Record<string, Record<string, string>>>> {\n if (interfaceApiName == null) return {};\n const interfaceMap = (await this.#client.ontologyProvider\n .getObjectDefinition(objectTypeApiName)).interfaceMap;\n return {\n [interfaceApiName]: {\n [objectTypeApiName]: interfaceMap[interfaceApiName],\n },\n };\n }\n\n #handleMessage_refreshObjectSet = (payload: RefreshObjectSet) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n try {\n sub.listener.onOutOfDate();\n } catch (error) {\n this.#logger?.error(error, \"Error in onOutOfDate callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n };\n\n #handleMessage_subscribeResponses = (\n payload: ObjectSetSubscribeResponses,\n ) => {\n const { id, responses } = payload;\n\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\n this.#pendingSubscriptions.delete(id);\n\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n\n switch (response.type) {\n case \"error\":\n this.#tryCatchOnError(sub, true, response.errors);\n this.#unsubscribe(sub, \"error\");\n break;\n\n case \"qos\":\n // the server has requested that we tear down our websocket and reconnect to help load balance\n this.#cycleWebsocket();\n break;\n\n case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n try {\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n else sub.listener.onSuccessfulSubscription();\n } catch (error) {\n this.#logger?.error(\n error,\n \"Error in onOutOfDate or onSuccessfulSubscription callback\",\n );\n this.#tryCatchOnError(sub, false, error);\n }\n break;\n default:\n this.#tryCatchOnError(sub, true, response);\n }\n }\n };\n\n #handleMessage_subscriptionClosed(payload: SubscriptionClosed) {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null && this.#endedSubscriptions.has(payload.id)) return;\n invariant(sub, `Expected subscription id ${payload.id}`);\n this.#tryCatchOnError(sub, true, payload.cause);\n this.#unsubscribe(sub, \"error\");\n }\n\n #onClose = (event: WebSocket.CloseEvent) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ event }, \"Received close event from ws\", event);\n }\n this.#cycleWebsocket();\n };\n\n #cycleWebsocket = () => {\n // Clear heartbeat interval\n if (this.#heartbeatInterval) {\n clearInterval(this.#heartbeatInterval);\n this.#heartbeatInterval = undefined;\n }\n\n if (this.#ws) {\n this.#ws.removeEventListener(\"open\", this.#onOpen);\n this.#ws.removeEventListener(\"message\", this.#onMessage);\n this.#ws.removeEventListener(\"close\", this.#onClose);\n\n if (\n this.#ws.readyState !== WebSocket.CLOSING\n && this.#ws.readyState !== WebSocket.CLOSED\n ) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process.env.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(\n s.status !== \"done\" && s.status !== \"error\",\n \"should not have done/error subscriptions still\",\n );\n }\n }\n\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n\n // we don't care about the result of this (we want cycleWebsocket to be fire and forget)\n // just that it happens\n void this.#ensureWebsocket();\n }\n };\n\n #tryCatchOnError = (\n sub: Subscription<any, any>,\n subscriptionClosed: boolean,\n error: any,\n ) => {\n try {\n sub.listener.onError({ subscriptionClosed: subscriptionClosed, error });\n } catch (onErrorError) {\n // eslint-disable-next-line no-console\n console.error(\n `Error encountered in an onError callback for an OSDK subscription`,\n onErrorError,\n );\n // eslint-disable-next-line no-console\n console.error(\n `This onError call was triggered by an error in another callback`,\n error,\n );\n // eslint-disable-next-line no-console\n console.error(\n `The subscription has been closed.`,\n error,\n );\n\n if (!subscriptionClosed) {\n this.#logger?.error(error, \"Error in onError callback\");\n this.#unsubscribe(sub, \"error\");\n this.#tryCatchOnError(sub, true, onErrorError);\n }\n }\n };\n}\n\n/** @internal */\nexport function constructWebsocketUrl(\n baseUrl: string,\n ontologyRid: string,\n) {\n const base = new URL(baseUrl);\n const url = new URL(\n `api/v2/ontologySubscriptions/ontologies/${ontologyRid}/streamSubscriptions`,\n base,\n );\n url.protocol = url.protocol.replace(\"https\", \"wss\");\n return url;\n}\n\nlet uuidCounter = 0;\n\nfunction nextUuid() {\n return `00000000-0000-0000-0000-${\n (uuidCounter++).toString().padStart(12, \"0\")\n }`;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","ExponentialBackoff","MINIMUM_RECONNECT_DELAY_MS","EXPONENTIAL_BACKOFF_INITIAL_DELAY_MS","EXPONENTIAL_BACKOFF_MAX_DELAY_MS","EXPONENTIAL_BACKOFF_MULTIPLIER","EXPONENTIAL_BACKOFF_JITTER_FACTOR","WEBSOCKET_IDLE_DISCONNECT_DELAY_MS","WEBSOCKET_HEARTBEAT_INTERVAL_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","onSuccessfulSubscription","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","backoff","isFirstConnection","logger","pendingSubscriptions","Map","subscriptions","endedSubscriptions","Set","maybeDisconnectTimeout","heartbeatInterval","constructor","minimumReconnectDelayMs","initialDelayMs","maxDelayMs","multiplier","jitterFactor","child","msgPrefix","baseUrl","startsWith","process","env","NODE_ENV","subscribe","objectType","objectSet","listener","properties","shouldLoadRids","objOrInterfaceDef","type","ontologyProvider","getObjectDefinition","apiName","getInterfaceDefinition","objectProperties","referenceProperties","length","Object","keys","filter","p","primaryKeyPropertyName","undefined","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","nextUuid","interfaceApiName","loadRids","initiateSubscribe","unsubscribe","#initiateSubscribe","debug","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","tryCatchOnError","#sendSubscribeMessage","readySubs","values","id","requests","map","propertySet","referenceSet","objectLoadingResponseOptions","shouldLoadObjectRids","payload","send","JSON","stringify","#unsubscribe","newStatus","delete","add","clearTimeout","setTimeout","size","cycleWebsocket","#ensureWebsocket","tokenProvider","url","constructWebsocketUrl","ontologyRid","token","delay","calculateDelay","attempt","getAttempt","Promise","resolve","Date","now","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","Error","String","#onOpen","reset","clearInterval","setInterval","message","data","parse","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","objectFactory2","__apiName","__primaryKey","primaryKey","property","value","fetchInterfaceMapping","singleOsdkObject","object","state","osdkObjects","keysToDelete","key","includes","rid","osdkObject","#fetchInterfaceMapping","objectTypeApiName","interfaceMap","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","has","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s","#tryCatchOnError","subscriptionClosed","onErrorError","console","base","URL","protocol","replace","uuidCounter","toString","padStart"],"sources":["ObjectSetListenerWebsocket.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 Logger,\n ObjectOrInterfaceDefinition,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n ObjectSet,\n ObjectSetStreamSubscribeRequest,\n ObjectSetStreamSubscribeRequests,\n ObjectSetSubscribeResponses,\n ObjectSetUpdates,\n ObjectState,\n RefreshObjectSet,\n StreamMessage,\n SubscriptionClosed,\n} from \"@osdk/foundry.ontologies\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport type { ClientCacheKey, MinimalClient } from \"../MinimalClientContext.js\";\nimport { ExponentialBackoff } from \"../util/exponentialBackoff.js\";\n\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\nconst EXPONENTIAL_BACKOFF_INITIAL_DELAY_MS = 1000;\nconst EXPONENTIAL_BACKOFF_MAX_DELAY_MS = 60000;\nconst EXPONENTIAL_BACKOFF_MULTIPLIER = 2;\nconst EXPONENTIAL_BACKOFF_JITTER_FACTOR = 0.3;\nconst WEBSOCKET_IDLE_DISCONNECT_DELAY_MS = 15000;\nconst WEBSOCKET_HEARTBEAT_INTERVAL_MS = 45 * 1000;\n\n/** Noop function to reduce conditional checks */\nfunction doNothing() {}\n\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n R extends boolean = false,\n>(\n {\n onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing,\n onSuccessfulSubscription = doNothing,\n }: ObjectSetSubscription.Listener<Q, P, R>,\n): Required<ObjectSetSubscription.Listener<Q, P, R>> {\n return { onChange, onError, onOutOfDate, onSuccessfulSubscription };\n}\n\ninterface Subscription<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n> {\n listener: Required<ObjectSetSubscription.Listener<Q, P>>;\n requestedProperties: Array<P>;\n requestedReferenceProperties: Array<P>;\n objectSet: ObjectSet;\n\n subscriptionId: string;\n isReady?: boolean;\n status:\n | \"preparing\"\n | \"subscribed\"\n | \"done\"\n | \"expired\"\n | \"error\"\n | \"reconnecting\";\n\n interfaceApiName?: string;\n primaryKeyPropertyName?: string;\n loadRids: boolean;\n}\n\nfunction isReady<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n sub: Subscription<Q, P>,\n): sub is Subscription<Q, P> & { temporaryObjectSetId: string } {\n return sub.isReady != null;\n}\n\nfunction subscriptionIsDone(sub: Subscription<any, any>) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap<\n ClientCacheKey,\n ObjectSetListenerWebsocket\n >();\n readonly MINIMUM_RECONNECT_DELAY_MS: number;\n\n // FIXME\n static getInstance(client: MinimalClient): ObjectSetListenerWebsocket {\n let instance = ObjectSetListenerWebsocket.#instances.get(\n client.clientCacheKey,\n );\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(\n client.clientCacheKey,\n instance,\n );\n }\n return instance;\n }\n\n #ws: WebSocket | undefined;\n #lastWsConnect = 0;\n #client: MinimalClient;\n #backoff: ExponentialBackoff;\n #isFirstConnection = true;\n\n #logger?: Logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map<\n string,\n Subscription<any, any>[]\n >();\n\n /**\n * Map of subscriptionId to Subscription. Note: the subscriptionId may be\n * temporary and not the actual subscriptionId from the server.\n */\n #subscriptions = new Map<\n string,\n Subscription<any, any>\n >();\n\n #endedSubscriptions = new Set<\n string\n >();\n\n #maybeDisconnectTimeout: ReturnType<typeof setTimeout> | undefined;\n #heartbeatInterval: ReturnType<typeof setInterval> | undefined;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(\n client: MinimalClient,\n {\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS,\n } = {},\n ) {\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#backoff = new ExponentialBackoff({\n initialDelayMs: EXPONENTIAL_BACKOFF_INITIAL_DELAY_MS,\n maxDelayMs: EXPONENTIAL_BACKOFF_MAX_DELAY_MS,\n multiplier: EXPONENTIAL_BACKOFF_MULTIPLIER,\n jitterFactor: EXPONENTIAL_BACKOFF_JITTER_FACTOR,\n });\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \",\n });\n invariant(\n client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"),\n \"Stack must be a URL\",\n );\n }\n\n async subscribe<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n >(\n objectType: ObjectOrInterfaceDefinition,\n objectSet: ObjectSet,\n listener: ObjectSetSubscription.Listener<Q, P>,\n properties: Array<P> = [],\n shouldLoadRids: boolean = false,\n ): Promise<() => void> {\n const objOrInterfaceDef = objectType.type === \"object\"\n ? await this.#client.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n )\n : await this.#client.ontologyProvider.getInterfaceDefinition(\n objectType.apiName,\n );\n\n let objectProperties: Array<P> = [];\n let referenceProperties: Array<P> = [];\n\n if (properties.length === 0) {\n properties = Object.keys(objOrInterfaceDef.properties) as Array<P>;\n }\n\n objectProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type !== \"geotimeSeriesReference\"\n );\n\n referenceProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type === \"geotimeSeriesReference\"\n );\n\n const sub: Subscription<Q, P> = {\n listener: fillOutListener<Q, P>(listener),\n objectSet,\n primaryKeyPropertyName: objOrInterfaceDef.type === \"interface\"\n ? undefined\n : objOrInterfaceDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${nextUuid()}}`,\n interfaceApiName: objOrInterfaceDef.type === \"object\"\n ? undefined\n : objOrInterfaceDef.apiName,\n loadRids: shouldLoadRids,\n };\n\n this.#subscriptions.set(sub.subscriptionId, sub);\n\n // actually prepares the subscription, ensures the ws is ready, and sends\n // a subscribe message. We don't want to block on this.\n void this.#initiateSubscribe(sub);\n\n return () => {\n this.#unsubscribe(sub);\n };\n }\n\n /**\n * Called at least once for every subscription.\n *\n * - Resets pending expiry\n * - Recreates temporary object set\n * - Triggers a full subscribe message\n *\n * @returns\n */\n async #initiateSubscribe(sub: Subscription<any, any>) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"#initiateSubscribe()\");\n }\n\n try {\n await this.#ensureWebsocket();\n\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n } catch (error) {\n this.#logger?.error(error, \"Error in #initiateSubscribe\");\n this.#tryCatchOnError(sub, true, error);\n }\n }\n\n #sendSubscribeMessage() {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"#sendSubscribeMessage()\");\n }\n // If two calls to `.subscribe()` happen at once (or if the connection is reset),\n // we may have multiple subscriptions that don't have a subscriptionId yet,\n // so we filter those out.\n const readySubs = [...this.#subscriptions.values()].filter(isReady);\n\n const id = nextUuid();\n // responses come back as an array of subIds, so we need to know the sources\n this.#pendingSubscriptions.set(id, readySubs);\n\n // every subscribe message \"overwrites\" the previous ones that are not\n // re-included, so we have to reconstitute the entire list of subscriptions\n const subscribe: ObjectSetStreamSubscribeRequests = {\n id,\n requests: readySubs.map<ObjectSetStreamSubscribeRequest>((\n {\n objectSet,\n requestedProperties,\n requestedReferenceProperties,\n interfaceApiName,\n },\n ) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n objectLoadingResponseOptions: { shouldLoadObjectRids: true },\n };\n }),\n };\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\n { payload: subscribe },\n \"sending subscribe message\",\n );\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n\n #unsubscribe<Q extends ObjectOrInterfaceDefinition>(\n sub: Subscription<Q, any>,\n newStatus: \"done\" | \"error\" = \"done\",\n ) {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n\n sub.status = newStatus;\n\n // make sure listeners do nothing now\n sub.listener = fillOutListener<Q, any>({});\n\n this.#subscriptions.delete(sub.subscriptionId);\n this.#endedSubscriptions.add(sub.subscriptionId);\n this.#sendSubscribeMessage();\n\n // If we have no more subscriptions, we can disconnect the websocket\n // however we should wait a bit to see if we get any more subscriptions.\n // For example, when switching between react views, you may unsubscribe\n // in the old view and subscribe in the new view. We don't need to re-establish\n // the websocket connection in that case.\n if (this.#maybeDisconnectTimeout) {\n // We reset the timeout on every unsubscribe so its always at least 15s from\n // the last time we are empty. E.g.:\n // - 0s: Subscribe(A)\n // - 10s: Unsubscribe(A)\n // - 11s: Subscribe(B)\n // - 20s: Unsubscribe(B)\n // If we do not clear out the timeout we would disconnect at 25s but that would only be\n // 5s after the last subscription was removed instead of at 35s for the desired 15s.\n clearTimeout(this.#maybeDisconnectTimeout);\n }\n this.#maybeDisconnectTimeout = setTimeout(() => {\n this.#maybeDisconnectTimeout = undefined;\n if (this.#subscriptions.size === 0) {\n this.#cycleWebsocket();\n }\n }, WEBSOCKET_IDLE_DISCONNECT_DELAY_MS);\n }\n\n async #ensureWebsocket() {\n if (this.#ws == null) {\n const { baseUrl, tokenProvider } = this.#client;\n const url = constructWebsocketUrl(\n baseUrl,\n await this.#client.ontologyRid,\n );\n\n const token = await tokenProvider();\n\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // Only apply exponential backoff delay on reconnection attempts, not the first connection\n if (!this.#isFirstConnection) {\n const delay = this.#backoff.calculateDelay();\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\n { delay, attempt: this.#backoff.getAttempt() },\n \"Waiting before reconnect\",\n );\n }\n await new Promise((resolve) => {\n setTimeout(resolve, delay);\n });\n }\n\n this.#lastWsConnect = Date.now();\n\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise<void>((resolve, reject) => {\n function cleanup() {\n ws.removeEventListener(\"open\", open);\n ws.removeEventListener(\"error\", error);\n ws.removeEventListener(\"close\", cleanup);\n }\n function open() {\n cleanup();\n resolve();\n }\n function error(evt: unknown) {\n cleanup();\n reject(new Error(String(evt)));\n }\n ws.addEventListener(\"open\", open);\n ws.addEventListener(\"error\", error);\n ws.addEventListener(\"close\", cleanup);\n });\n }\n }\n }\n\n #onOpen = () => {\n // Mark that we've successfully connected at least once\n this.#isFirstConnection = false;\n // Reset backoff on successful connection\n this.#backoff.reset();\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n\n // Start heartbeat to keep connection alive\n if (this.#heartbeatInterval) {\n clearInterval(this.#heartbeatInterval);\n }\n this.#heartbeatInterval = setInterval(() => {\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n }, WEBSOCKET_HEARTBEAT_INTERVAL_MS);\n };\n\n #onMessage = async (message: WebSocket.MessageEvent): Promise<void> => {\n const data = JSON.parse(String(message.data)) as StreamMessage;\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n await this.#handleMessage_objectSetChanged(data);\n return;\n\n case \"refreshObjectSet\":\n this.#handleMessage_refreshObjectSet(data);\n return;\n\n case \"subscribeResponses\":\n this.#handleMessage_subscribeResponses(data);\n return;\n\n case \"subscriptionClosed\": {\n this.#handleMessage_subscriptionClosed(data);\n return;\n }\n\n default:\n const _: never = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n\n #handleMessage_objectSetChanged = async (\n payload: ObjectSetUpdates,\n ) => {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null) return;\n\n const objectUpdates = payload.updates.filter((update) =>\n update.type === \"object\"\n );\n const referenceUpdates = payload.updates.filter((update) =>\n update.type === \"reference\"\n );\n const osdkObjectsWithReferenceUpdates = await Promise.all(\n referenceUpdates.map(async (o) => {\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [{\n __apiName: o.objectType,\n __primaryKey: sub.primaryKeyPropertyName != null\n ? o.primaryKey[sub.primaryKeyPropertyName]\n : undefined,\n ...o.primaryKey,\n [o.property]: o.value,\n }],\n sub.interfaceApiName,\n {},\n undefined,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.objectType,\n sub.interfaceApiName,\n ),\n );\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject as Osdk.Instance<any, never, any>,\n state: \"ADDED_OR_UPDATED\" as ObjectState,\n }\n : undefined;\n }),\n );\n\n for (const update of osdkObjectsWithReferenceUpdates) {\n if (update != null) {\n try {\n sub.listener.onChange?.(update);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) =>\n sub.requestedReferenceProperties.includes(key)\n );\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [o.object],\n sub.interfaceApiName,\n {},\n undefined,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.object.__apiName,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n\n const rid = singleOsdkObject[\"$rid\"] as string | undefined;\n\n return singleOsdkObject != null\n ? rid === undefined\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : {\n object: singleOsdkObject,\n state: o.state,\n rid: rid,\n }\n : undefined;\n }));\n\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n };\n\n async #fetchInterfaceMapping(\n objectTypeApiName: string,\n interfaceApiName: string | undefined,\n ): Promise<Record<string, Record<string, Record<string, string>>>> {\n if (interfaceApiName == null) return {};\n const interfaceMap = (await this.#client.ontologyProvider\n .getObjectDefinition(objectTypeApiName)).interfaceMap;\n return {\n [interfaceApiName]: {\n [objectTypeApiName]: interfaceMap[interfaceApiName],\n },\n };\n }\n\n #handleMessage_refreshObjectSet = (payload: RefreshObjectSet) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n try {\n sub.listener.onOutOfDate();\n } catch (error) {\n this.#logger?.error(error, \"Error in onOutOfDate callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n };\n\n #handleMessage_subscribeResponses = (\n payload: ObjectSetSubscribeResponses,\n ) => {\n const { id, responses } = payload;\n\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\n this.#pendingSubscriptions.delete(id);\n\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n\n switch (response.type) {\n case \"error\":\n this.#tryCatchOnError(sub, true, response.errors);\n this.#unsubscribe(sub, \"error\");\n break;\n\n case \"qos\":\n // the server has requested that we tear down our websocket and reconnect to help load balance\n this.#cycleWebsocket();\n break;\n\n case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n try {\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n else sub.listener.onSuccessfulSubscription();\n } catch (error) {\n this.#logger?.error(\n error,\n \"Error in onOutOfDate or onSuccessfulSubscription callback\",\n );\n this.#tryCatchOnError(sub, false, error);\n }\n break;\n default:\n this.#tryCatchOnError(sub, true, response);\n }\n }\n };\n\n #handleMessage_subscriptionClosed(payload: SubscriptionClosed) {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null && this.#endedSubscriptions.has(payload.id)) return;\n invariant(sub, `Expected subscription id ${payload.id}`);\n this.#tryCatchOnError(sub, true, payload.cause);\n this.#unsubscribe(sub, \"error\");\n }\n\n #onClose = (event: WebSocket.CloseEvent) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ event }, \"Received close event from ws\", event);\n }\n this.#cycleWebsocket();\n };\n\n #cycleWebsocket = () => {\n // Clear heartbeat interval\n if (this.#heartbeatInterval) {\n clearInterval(this.#heartbeatInterval);\n this.#heartbeatInterval = undefined;\n }\n\n if (this.#ws) {\n this.#ws.removeEventListener(\"open\", this.#onOpen);\n this.#ws.removeEventListener(\"message\", this.#onMessage);\n this.#ws.removeEventListener(\"close\", this.#onClose);\n\n if (\n this.#ws.readyState !== WebSocket.CLOSING\n && this.#ws.readyState !== WebSocket.CLOSED\n ) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process.env.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(\n s.status !== \"done\" && s.status !== \"error\",\n \"should not have done/error subscriptions still\",\n );\n }\n }\n\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n\n // we don't care about the result of this (we want cycleWebsocket to be fire and forget)\n // just that it happens\n void this.#ensureWebsocket();\n }\n };\n\n #tryCatchOnError = (\n sub: Subscription<any, any>,\n subscriptionClosed: boolean,\n error: any,\n ) => {\n try {\n sub.listener.onError({ subscriptionClosed: subscriptionClosed, error });\n } catch (onErrorError) {\n // eslint-disable-next-line no-console\n console.error(\n `Error encountered in an onError callback for an OSDK subscription`,\n onErrorError,\n );\n // eslint-disable-next-line no-console\n console.error(\n `This onError call was triggered by an error in another callback`,\n error,\n );\n // eslint-disable-next-line no-console\n console.error(\n `The subscription has been closed.`,\n error,\n );\n\n if (!subscriptionClosed) {\n this.#logger?.error(error, \"Error in onError callback\");\n this.#unsubscribe(sub, \"error\");\n this.#tryCatchOnError(sub, true, onErrorError);\n }\n }\n };\n}\n\n/** @internal */\nexport function constructWebsocketUrl(\n baseUrl: string,\n ontologyRid: string,\n) {\n const base = new URL(baseUrl);\n const url = new URL(\n `api/v2/ontologySubscriptions/ontologies/${ontologyRid}/streamSubscriptions`,\n base,\n );\n url.protocol = url.protocol.replace(\"https\", \"wss\");\n return url;\n}\n\nlet uuidCounter = 0;\n\nfunction nextUuid() {\n return `00000000-0000-0000-0000-${\n (uuidCounter++).toString().padStart(12, \"0\")\n }`;\n}\n"],"mappings":"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","ignoreList":[]}