@osdk/client 2.2.0-beta.9 → 2.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +370 -0
- package/build/browser/MinimalClientContext.js.map +1 -1
- package/build/browser/__unstable/ConjureSupport.js.map +1 -1
- package/build/browser/actions/ActionValidationError.js +1 -1
- package/build/browser/actions/ActionValidationError.js.map +1 -1
- package/build/browser/actions/actions.test.js +134 -89
- package/build/browser/actions/actions.test.js.map +1 -1
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +5 -1
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createClient.test.js +14 -6
- package/build/browser/createClient.test.js.map +1 -1
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/createMinimalClientHelper.js +25 -0
- package/build/browser/createMinimalClientHelper.js.map +1 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +36 -13
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js +133 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
- package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js +93 -0
- package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -0
- package/build/browser/fetchMetadata.js +1 -1
- package/build/browser/fetchMetadata.js.map +1 -1
- package/build/browser/fetchMetadata.test.js +11 -9
- package/build/browser/fetchMetadata.test.js.map +1 -1
- package/build/browser/index.js +0 -1
- package/build/browser/index.js.map +1 -1
- package/build/{esm/util/isOsdkBaseObject.js → browser/intellisense.test.helpers/showsObjectPropertyJsdoc.js} +9 -4
- package/build/browser/intellisense.test.helpers/showsObjectPropertyJsdoc.js.map +1 -0
- package/build/browser/intellisense.test.js +17 -1
- package/build/browser/intellisense.test.js.map +1 -1
- package/build/browser/logger/BaseLogger.js +59 -0
- package/build/browser/logger/BaseLogger.js.map +1 -0
- package/build/browser/logger/BrowserLogger.js +67 -0
- package/build/browser/logger/BrowserLogger.js.map +1 -0
- package/build/browser/logger/MinimalLogger.js +39 -0
- package/build/browser/logger/MinimalLogger.js.map +1 -0
- package/build/browser/logger/MinimalLogger.test.js +60 -0
- package/build/browser/logger/MinimalLogger.test.js.map +1 -0
- package/build/browser/logger/TestLogger.js +56 -0
- package/build/browser/logger/TestLogger.js.map +1 -0
- package/build/browser/object/attachment.test.js +20 -7
- package/build/browser/object/attachment.test.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +44 -33
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.js +4 -14
- package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +39 -33
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchPage.js +4 -3
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/geotimeseriesreference.test.js +56 -134
- package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
- package/build/browser/object/media.test.js +19 -14
- package/build/browser/object/media.test.js.map +1 -1
- package/build/browser/object/object.test.js +96 -89
- package/build/browser/object/object.test.js.map +1 -1
- package/build/browser/object/timeseries.test.js +119 -85
- package/build/browser/object/timeseries.test.js.map +1 -1
- package/build/browser/objectSet/InterfaceObjectSet.test.js +24 -20
- package/build/browser/objectSet/InterfaceObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSet.test.js +113 -19
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +2 -2
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +19 -12
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +2 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/observable/internal/ActionApplication.js +4 -4
- package/build/browser/observable/internal/ActionApplication.js.map +1 -1
- package/build/browser/observable/internal/BulkObjectLoader.js +93 -0
- package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -0
- package/build/browser/observable/internal/BulkObjectLoader.test.js +112 -0
- package/build/browser/observable/internal/BulkObjectLoader.test.js.map +1 -0
- package/build/browser/observable/internal/ListQuery.js +4 -1
- package/build/browser/observable/internal/ListQuery.js.map +1 -1
- package/build/browser/observable/internal/ObjectQuery.js +3 -6
- package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
- package/build/browser/observable/internal/OptimisticJob.js +1 -1
- package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/Store.js +2 -2
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +215 -206
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/objectMatchesWhereClause.js +0 -2
- package/build/browser/observable/internal/objectMatchesWhereClause.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js +4 -3
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/ontology/OntologyProvider.js.map +1 -1
- package/build/browser/ontology/StandardOntologyProvider.js +12 -5
- package/build/browser/ontology/StandardOntologyProvider.js.map +1 -1
- package/build/browser/ontology/StandardOntologyProvider.test.js +17 -16
- package/build/browser/ontology/StandardOntologyProvider.test.js.map +1 -1
- package/build/browser/ontology/loadFullObjectMetadata.js +0 -1
- package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/browser/ontology/loadQueryMetadata.js +5 -2
- package/build/browser/ontology/loadQueryMetadata.js.map +1 -1
- package/build/browser/public/internal.js +2 -0
- package/build/browser/public/internal.js.map +1 -1
- package/build/browser/public/unstable-do-not-use.js +1 -0
- package/build/browser/public/unstable-do-not-use.js.map +1 -1
- package/build/browser/public-utils/osdkConfig.js +49 -0
- package/build/browser/public-utils/osdkConfig.js.map +1 -0
- package/build/browser/{object/createObjectSpecifierFromPrimaryKey.js → public-utils/vite-env.d.ts} +2 -3
- package/build/browser/queries/applyQuery.js +6 -4
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/queries/queries.test.js +93 -27
- package/build/browser/queries/queries.test.js.map +1 -1
- package/build/browser/queries/types.js.map +1 -1
- package/build/browser/tsserver.js.map +1 -1
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/extractRdpDefinition.js +140 -0
- package/build/browser/util/extractRdpDefinition.js.map +1 -0
- package/build/browser/util/extractRdpDefinition.test.js +233 -0
- package/build/browser/util/extractRdpDefinition.test.js.map +1 -0
- package/build/browser/util/{isOsdkBaseObject.js → isObjectSpecifiersObject.js} +2 -2
- package/build/browser/util/isObjectSpecifiersObject.js.map +1 -0
- package/build/browser/util/isPoint.js +20 -0
- package/build/browser/util/isPoint.js.map +1 -0
- package/build/browser/util/objectSpecifierUtils.js +48 -0
- package/build/browser/util/objectSpecifierUtils.js.map +1 -0
- package/build/browser/util/objectSpecifierUtils.test.js +42 -0
- package/build/browser/util/objectSpecifierUtils.test.js.map +1 -0
- package/build/browser/util/toDataValue.js +6 -2
- package/build/browser/util/toDataValue.js.map +1 -1
- package/build/browser/util/toDataValue.test.js +37 -16
- package/build/browser/util/toDataValue.test.js.map +1 -1
- package/build/browser/util/toDataValueQueries.js +4 -6
- package/build/browser/util/toDataValueQueries.js.map +1 -1
- package/build/cjs/{Client-DBTcM9gB.d.cts → Client-CgL2LKN9.d.cts} +6 -7
- package/build/cjs/{chunk-MCQVHD2F.cjs → chunk-FKI2LO2O.cjs} +232 -68
- package/build/cjs/chunk-FKI2LO2O.cjs.map +1 -0
- package/build/cjs/{chunk-EY52J5Z4.cjs → chunk-W5PFESFR.cjs} +163 -34
- package/build/cjs/chunk-W5PFESFR.cjs.map +1 -0
- package/build/cjs/index.cjs +188 -166
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +4 -24
- package/build/cjs/public/internal.cjs +61 -7
- package/build/cjs/public/internal.cjs.map +1 -1
- package/build/cjs/public/internal.d.cts +50 -3
- package/build/cjs/public/unstable-do-not-use.cjs +224 -103
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +12 -3
- package/build/esm/MinimalClientContext.js.map +1 -1
- package/build/esm/__unstable/ConjureSupport.js.map +1 -1
- package/build/esm/actions/ActionValidationError.js +1 -1
- package/build/esm/actions/ActionValidationError.js.map +1 -1
- package/build/esm/actions/actions.test.js +134 -89
- package/build/esm/actions/actions.test.js.map +1 -1
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +5 -1
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createClient.test.js +14 -6
- package/build/esm/createClient.test.js.map +1 -1
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/createMinimalClientHelper.js +25 -0
- package/build/esm/createMinimalClientHelper.js.map +1 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +36 -13
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js +133 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
- package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js +93 -0
- package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -0
- package/build/esm/fetchMetadata.js +1 -1
- package/build/esm/fetchMetadata.js.map +1 -1
- package/build/esm/fetchMetadata.test.js +11 -9
- package/build/esm/fetchMetadata.test.js.map +1 -1
- package/build/esm/index.js +0 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/{util/isOsdkObject.js → intellisense.test.helpers/showsObjectPropertyJsdoc.js} +9 -4
- package/build/esm/intellisense.test.helpers/showsObjectPropertyJsdoc.js.map +1 -0
- package/build/esm/intellisense.test.js +17 -1
- package/build/esm/intellisense.test.js.map +1 -1
- package/build/esm/logger/BaseLogger.js +59 -0
- package/build/esm/logger/BaseLogger.js.map +1 -0
- package/build/esm/logger/BrowserLogger.js +67 -0
- package/build/esm/logger/BrowserLogger.js.map +1 -0
- package/build/esm/logger/MinimalLogger.js +39 -0
- package/build/esm/logger/MinimalLogger.js.map +1 -0
- package/build/esm/logger/MinimalLogger.test.js +60 -0
- package/build/esm/logger/MinimalLogger.test.js.map +1 -0
- package/build/esm/logger/TestLogger.js +56 -0
- package/build/esm/logger/TestLogger.js.map +1 -0
- package/build/esm/object/attachment.test.js +20 -7
- package/build/esm/object/attachment.test.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +44 -33
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.js +4 -14
- package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +39 -33
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchPage.js +4 -3
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/geotimeseriesreference.test.js +56 -134
- package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
- package/build/esm/object/media.test.js +19 -14
- package/build/esm/object/media.test.js.map +1 -1
- package/build/esm/object/object.test.js +96 -89
- package/build/esm/object/object.test.js.map +1 -1
- package/build/esm/object/timeseries.test.js +119 -85
- package/build/esm/object/timeseries.test.js.map +1 -1
- package/build/esm/objectSet/InterfaceObjectSet.test.js +24 -20
- package/build/esm/objectSet/InterfaceObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSet.test.js +113 -19
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +2 -2
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +19 -12
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +2 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/observable/internal/ActionApplication.js +4 -4
- package/build/esm/observable/internal/ActionApplication.js.map +1 -1
- package/build/esm/observable/internal/BulkObjectLoader.js +93 -0
- package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -0
- package/build/esm/observable/internal/BulkObjectLoader.test.js +112 -0
- package/build/esm/observable/internal/BulkObjectLoader.test.js.map +1 -0
- package/build/esm/observable/internal/ListQuery.js +4 -1
- package/build/esm/observable/internal/ListQuery.js.map +1 -1
- package/build/esm/observable/internal/ObjectQuery.js +3 -6
- package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
- package/build/esm/observable/internal/OptimisticJob.js +1 -1
- package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/Store.js +2 -2
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +215 -206
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/objectMatchesWhereClause.js +0 -2
- package/build/esm/observable/internal/objectMatchesWhereClause.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js +4 -3
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/ontology/OntologyProvider.js.map +1 -1
- package/build/esm/ontology/StandardOntologyProvider.js +12 -5
- package/build/esm/ontology/StandardOntologyProvider.js.map +1 -1
- package/build/esm/ontology/StandardOntologyProvider.test.js +17 -16
- package/build/esm/ontology/StandardOntologyProvider.test.js.map +1 -1
- package/build/esm/ontology/loadFullObjectMetadata.js +0 -1
- package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/esm/ontology/loadQueryMetadata.js +5 -2
- package/build/esm/ontology/loadQueryMetadata.js.map +1 -1
- package/build/esm/public/internal.js +2 -0
- package/build/esm/public/internal.js.map +1 -1
- package/build/esm/public/unstable-do-not-use.js +1 -0
- package/build/esm/public/unstable-do-not-use.js.map +1 -1
- package/build/esm/public-utils/osdkConfig.js +49 -0
- package/build/esm/public-utils/osdkConfig.js.map +1 -0
- package/build/esm/{object/createObjectSpecifierFromPrimaryKey.js → public-utils/vite-env.d.ts} +2 -3
- package/build/esm/queries/applyQuery.js +6 -4
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/queries/queries.test.js +93 -27
- package/build/esm/queries/queries.test.js.map +1 -1
- package/build/esm/queries/types.js.map +1 -1
- package/build/esm/tsserver.js.map +1 -1
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/extractRdpDefinition.js +140 -0
- package/build/esm/util/extractRdpDefinition.js.map +1 -0
- package/build/esm/util/extractRdpDefinition.test.js +233 -0
- package/build/esm/util/extractRdpDefinition.test.js.map +1 -0
- package/build/{browser/util/isOsdkObject.js → esm/util/isObjectSpecifiersObject.js} +2 -2
- package/build/esm/util/isObjectSpecifiersObject.js.map +1 -0
- package/build/esm/util/isPoint.js +20 -0
- package/build/esm/util/isPoint.js.map +1 -0
- package/build/esm/util/objectSpecifierUtils.js +48 -0
- package/build/esm/util/objectSpecifierUtils.js.map +1 -0
- package/build/esm/util/objectSpecifierUtils.test.js +42 -0
- package/build/esm/util/objectSpecifierUtils.test.js.map +1 -0
- package/build/esm/util/toDataValue.js +6 -2
- package/build/esm/util/toDataValue.js.map +1 -1
- package/build/esm/util/toDataValue.test.js +37 -16
- package/build/esm/util/toDataValue.test.js.map +1 -1
- package/build/esm/util/toDataValueQueries.js +4 -6
- package/build/esm/util/toDataValueQueries.js.map +1 -1
- package/build/types/MinimalClientContext.d.ts +1 -1
- package/build/types/MinimalClientContext.d.ts.map +1 -1
- package/build/types/__unstable/ConjureSupport.d.ts +2 -2
- package/build/types/actions/applyAction.d.ts +1 -2
- package/build/types/actions/applyAction.d.ts.map +1 -1
- package/build/types/createClient.d.ts +1 -1
- package/build/types/createClient.d.ts.map +1 -1
- package/build/types/createClient.test.d.ts +2 -1
- package/build/types/createClient.test.d.ts.map +1 -1
- package/build/types/createMinimalClientHelper.d.ts +1 -0
- package/build/types/createMinimalClientHelper.d.ts.map +1 -0
- package/build/types/derivedProperties/derivedPropertyDefinitionFactory.d.ts +1 -0
- package/build/types/derivedProperties/derivedPropertyDefinitionFactory.d.ts.map +1 -0
- package/build/types/index.d.ts +4 -6
- package/build/types/index.d.ts.map +1 -1
- package/build/types/intellisense.test.helpers/showsObjectPropertyJsdoc.d.ts +1 -0
- package/build/types/intellisense.test.helpers/showsObjectPropertyJsdoc.d.ts.map +1 -0
- package/build/types/logger/BaseLogger.d.ts +33 -0
- package/build/types/logger/BaseLogger.d.ts.map +1 -0
- package/build/types/logger/BrowserLogger.d.ts +9 -0
- package/build/types/logger/BrowserLogger.d.ts.map +1 -0
- package/build/types/logger/MinimalLogger.d.ts +9 -0
- package/build/types/logger/MinimalLogger.d.ts.map +1 -0
- package/build/types/logger/MinimalLogger.test.d.ts +1 -0
- package/build/types/logger/MinimalLogger.test.d.ts.map +1 -0
- package/build/types/logger/TestLogger.d.ts +14 -0
- package/build/types/logger/TestLogger.d.ts.map +1 -0
- package/build/types/object/convertWireToOsdkObjects.d.ts +4 -4
- package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
- package/build/types/object/fetchPage.d.ts.map +1 -1
- package/build/types/object/object.test.d.ts.map +1 -1
- package/build/types/objectSet/ObjectSet.test.d.ts.map +1 -1
- package/build/types/observable/internal/ActionApplication.d.ts +2 -2
- package/build/types/observable/internal/ActionApplication.d.ts.map +1 -1
- package/build/types/observable/internal/BulkObjectLoader.d.ts +8 -0
- package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -0
- package/build/types/observable/internal/BulkObjectLoader.test.d.ts +1 -0
- package/build/types/observable/internal/BulkObjectLoader.test.d.ts.map +1 -0
- package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
- package/build/types/observable/internal/Query.d.ts +2 -2
- package/build/types/observable/internal/Query.d.ts.map +1 -1
- package/build/types/observable/internal/Store.d.ts +2 -2
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts +1 -2
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/ontology/OntologyProvider.d.ts +1 -1
- package/build/types/ontology/OntologyProvider.d.ts.map +1 -1
- package/build/types/ontology/loadQueryMetadata.d.ts +1 -1
- package/build/types/ontology/loadQueryMetadata.d.ts.map +1 -1
- package/build/types/public/internal.d.ts +2 -0
- package/build/types/public/internal.d.ts.map +1 -1
- package/build/types/public/unstable-do-not-use.d.ts +4 -2
- package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
- package/build/types/public-utils/osdkConfig.d.ts +8 -0
- package/build/types/public-utils/osdkConfig.d.ts.map +1 -0
- package/build/types/public-utils/vite-env.d.d.ts +3 -0
- package/build/types/public-utils/vite-env.d.d.ts.map +1 -0
- package/build/types/queries/applyQuery.d.ts +2 -2
- package/build/types/queries/applyQuery.d.ts.map +1 -1
- package/build/types/queries/types.d.ts +1 -1
- package/build/types/queries/types.d.ts.map +1 -1
- package/build/types/tsserver.d.ts +1 -1
- package/build/types/tsserver.d.ts.map +1 -1
- package/build/types/util/extractRdpDefinition.d.ts +4 -0
- package/build/types/util/extractRdpDefinition.d.ts.map +1 -0
- package/build/types/util/extractRdpDefinition.test.d.ts +1 -0
- package/build/types/util/extractRdpDefinition.test.d.ts.map +1 -0
- package/build/types/util/isObjectSpecifiersObject.d.ts +5 -0
- package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -0
- package/build/types/util/isPoint.d.ts +1 -0
- package/build/types/util/isPoint.d.ts.map +1 -0
- package/build/types/util/objectSpecifierUtils.d.ts +24 -0
- package/build/types/util/objectSpecifierUtils.d.ts.map +1 -0
- package/build/types/util/objectSpecifierUtils.test.d.ts +1 -0
- package/build/types/util/objectSpecifierUtils.test.d.ts.map +1 -0
- package/package.json +19 -18
- package/build/browser/Logger.js +0 -2
- package/build/browser/Logger.js.map +0 -1
- package/build/browser/object/createObjectSpecifierFromPrimaryKey.js.map +0 -1
- package/build/browser/util/isOsdkBaseObject.js.map +0 -1
- package/build/browser/util/isOsdkObject.js.map +0 -1
- package/build/cjs/chunk-EY52J5Z4.cjs.map +0 -1
- package/build/cjs/chunk-MCQVHD2F.cjs.map +0 -1
- package/build/cjs/chunk-Q7SFCCGT.cjs +0 -11
- package/build/cjs/chunk-Q7SFCCGT.cjs.map +0 -1
- package/build/cjs/graphql-RGM5SRWV.cjs +0 -10532
- package/build/cjs/graphql-RGM5SRWV.cjs.map +0 -1
- package/build/esm/Logger.js +0 -2
- package/build/esm/Logger.js.map +0 -1
- package/build/esm/object/createObjectSpecifierFromPrimaryKey.js.map +0 -1
- package/build/esm/util/isOsdkBaseObject.js.map +0 -1
- package/build/esm/util/isOsdkObject.js.map +0 -1
- package/build/types/Logger.d.ts +0 -17
- package/build/types/Logger.d.ts.map +0 -1
- package/build/types/object/createObjectSpecifierFromPrimaryKey.d.ts +0 -2
- package/build/types/object/createObjectSpecifierFromPrimaryKey.d.ts.map +0 -1
- package/build/types/util/isOsdkBaseObject.d.ts +0 -2
- package/build/types/util/isOsdkBaseObject.d.ts.map +0 -1
- package/build/types/util/isOsdkObject.d.ts +0 -2
- package/build/types/util/isOsdkObject.d.ts.map +0 -1
|
@@ -14,21 +14,21 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import { apiServer, stubData } from "@osdk/shared.test";
|
|
17
|
+
import { editTodo, Employee, FooInterface, Todo } from "@osdk/client.test.ontology";
|
|
18
|
+
import { ActionTypeBuilder, FauxFoundry, ontologies, startNodeApiServer, stubData } from "@osdk/shared.test";
|
|
20
19
|
import chalk from "chalk";
|
|
20
|
+
import invariant from "tiny-invariant";
|
|
21
21
|
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi, vitest } from "vitest";
|
|
22
|
+
import { ActionValidationError } from "../../actions/ActionValidationError.js";
|
|
22
23
|
import { createClient } from "../../createClient.js";
|
|
23
|
-
import {
|
|
24
|
-
import { createObjectSet } from "../../objectSet/createObjectSet.js";
|
|
25
|
-
import { InterfaceDefinitions } from "../../ontology/OntologyProvider.js";
|
|
24
|
+
import { TestLogger } from "../../logger/TestLogger.js";
|
|
26
25
|
import { createOptimisticId } from "./OptimisticId.js";
|
|
27
26
|
import { runOptimisticJob } from "./OptimisticJob.js";
|
|
28
27
|
import { invalidateList, Store } from "./Store.js";
|
|
29
|
-
import { applyCustomMatchers, createClientMockHelper, createDefer,
|
|
28
|
+
import { applyCustomMatchers, createClientMockHelper, createDefer, expectNoMoreCalls, expectSingleListCallAndClear, expectSingleObjectCallAndClear, getObject, mockListSubCallback, mockSingleSubCallback, objectPayloadContaining, updateList, updateObject, waitForCall } from "./testUtils.js";
|
|
29
|
+
const JOHN_DOE_ID = 50030;
|
|
30
30
|
const defer = createDefer();
|
|
31
|
-
const logger =
|
|
31
|
+
const logger = new TestLogger();
|
|
32
32
|
beforeAll(() => {
|
|
33
33
|
vi.setConfig({
|
|
34
34
|
fakeTimers: {
|
|
@@ -59,6 +59,42 @@ function testStage(s) {
|
|
|
59
59
|
console.log(chalk.bgYellow(`Test Stage: ${s}`));
|
|
60
60
|
}
|
|
61
61
|
applyCustomMatchers();
|
|
62
|
+
function setupOntology(fauxFoundry) {
|
|
63
|
+
const fauxOntology = fauxFoundry.getDefaultOntology();
|
|
64
|
+
ontologies.addEmployeeOntology(fauxOntology);
|
|
65
|
+
fauxFoundry.getDefaultOntology().registerObjectType(stubData.todoWithLinkTypes);
|
|
66
|
+
fauxFoundry.getDefaultOntology().registerActionType(stubData.editTodo.actionTypeV2, (b, payload) => {
|
|
67
|
+
const {
|
|
68
|
+
id,
|
|
69
|
+
...other
|
|
70
|
+
} = payload.parameters;
|
|
71
|
+
b.modifyObject(Todo.apiName, id, {
|
|
72
|
+
...other
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function setupSomeEmployees(fauxFoundry) {
|
|
77
|
+
const dataStore = fauxFoundry.getDefaultDataStore();
|
|
78
|
+
dataStore.registerObject(Employee, {
|
|
79
|
+
employeeId: 1
|
|
80
|
+
});
|
|
81
|
+
dataStore.registerObject(Employee, {
|
|
82
|
+
employeeId: 2
|
|
83
|
+
});
|
|
84
|
+
dataStore.registerObject(Employee, {
|
|
85
|
+
$apiName: "Employee",
|
|
86
|
+
employeeId: 3
|
|
87
|
+
});
|
|
88
|
+
dataStore.registerObject(Employee, {
|
|
89
|
+
$apiName: "Employee",
|
|
90
|
+
employeeId: 4
|
|
91
|
+
});
|
|
92
|
+
dataStore.registerObject(Employee, {
|
|
93
|
+
$apiName: "Employee",
|
|
94
|
+
employeeId: JOHN_DOE_ID,
|
|
95
|
+
fullName: "John Doe"
|
|
96
|
+
});
|
|
97
|
+
}
|
|
62
98
|
describe(Store, () => {
|
|
63
99
|
describe("with mock server", () => {
|
|
64
100
|
let client;
|
|
@@ -66,23 +102,27 @@ describe(Store, () => {
|
|
|
66
102
|
let employeesAsServerReturns;
|
|
67
103
|
let mutatedEmployees;
|
|
68
104
|
beforeAll(async () => {
|
|
69
|
-
|
|
70
|
-
client = createClient("https://stack.palantir.com", $ontologyRid, async () => "myAccessToken", {
|
|
105
|
+
const testSetup = startNodeApiServer(new FauxFoundry("https://stack.palantir.com/"), createClient, {
|
|
71
106
|
logger
|
|
72
107
|
});
|
|
108
|
+
({
|
|
109
|
+
client
|
|
110
|
+
} = testSetup);
|
|
111
|
+
setupOntology(testSetup.fauxFoundry);
|
|
112
|
+
setupSomeEmployees(testSetup.fauxFoundry);
|
|
73
113
|
employeesAsServerReturns = (await client(Employee).fetchPage()).data;
|
|
74
114
|
mutatedEmployees = [employeesAsServerReturns[0], employeesAsServerReturns[1].$clone({
|
|
75
115
|
fullName: "foo"
|
|
76
116
|
}), ...employeesAsServerReturns.slice(2)];
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
117
|
+
return () => {
|
|
118
|
+
testSetup.apiServer.close();
|
|
119
|
+
};
|
|
80
120
|
});
|
|
81
121
|
beforeEach(() => {
|
|
82
122
|
cache = new Store(client);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
123
|
+
return () => {
|
|
124
|
+
cache = undefined;
|
|
125
|
+
};
|
|
86
126
|
});
|
|
87
127
|
it("basic single object works", async () => {
|
|
88
128
|
const emp = employeesAsServerReturns[0];
|
|
@@ -362,11 +402,11 @@ describe(Store, () => {
|
|
|
362
402
|
subFn2.error.mockClear();
|
|
363
403
|
});
|
|
364
404
|
const likeEmployee50030 = expect.objectContaining({
|
|
365
|
-
$primaryKey:
|
|
405
|
+
$primaryKey: JOHN_DOE_ID,
|
|
366
406
|
fullName: "John Doe"
|
|
367
407
|
});
|
|
368
408
|
it("fetches and updates twice", async () => {
|
|
369
|
-
defer(cache.observeObject(Employee,
|
|
409
|
+
defer(cache.observeObject(Employee, JOHN_DOE_ID, {
|
|
370
410
|
mode: "force"
|
|
371
411
|
}, subFn1));
|
|
372
412
|
expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(objectPayloadContaining({
|
|
@@ -382,7 +422,7 @@ describe(Store, () => {
|
|
|
382
422
|
}));
|
|
383
423
|
const firstLoad = subFn1.next.mock.lastCall?.[0];
|
|
384
424
|
subFn1.next.mockClear();
|
|
385
|
-
defer(cache.observeObject(Employee,
|
|
425
|
+
defer(cache.observeObject(Employee, JOHN_DOE_ID, {
|
|
386
426
|
mode: "force"
|
|
387
427
|
}, subFn2));
|
|
388
428
|
expectSingleObjectCallAndClear(subFn1, likeEmployee50030, "loading");
|
|
@@ -409,13 +449,13 @@ describe(Store, () => {
|
|
|
409
449
|
subFn.complete.mockClear();
|
|
410
450
|
subFn.next.mockClear();
|
|
411
451
|
subFn.error.mockClear();
|
|
412
|
-
sub = defer(cache.observeObject(Employee,
|
|
452
|
+
sub = defer(cache.observeObject(Employee, JOHN_DOE_ID, {
|
|
413
453
|
mode: "offline"
|
|
414
454
|
}, subFn));
|
|
415
455
|
expectSingleObjectCallAndClear(subFn, undefined, "init");
|
|
416
456
|
});
|
|
417
457
|
it("does basic observation and unsubscribe", async () => {
|
|
418
|
-
const emp = employeesAsServerReturns
|
|
458
|
+
const emp = employeesAsServerReturns.find(x => x.$primaryKey === JOHN_DOE_ID);
|
|
419
459
|
|
|
420
460
|
// force an update
|
|
421
461
|
updateObject(cache, emp);
|
|
@@ -437,7 +477,7 @@ describe(Store, () => {
|
|
|
437
477
|
expect(subFn.next).not.toHaveBeenCalled();
|
|
438
478
|
});
|
|
439
479
|
it("observes with list update", async () => {
|
|
440
|
-
const emp = employeesAsServerReturns
|
|
480
|
+
const emp = employeesAsServerReturns.find(x => x.$primaryKey === JOHN_DOE_ID);
|
|
441
481
|
|
|
442
482
|
// force an update
|
|
443
483
|
updateObject(cache, emp.$clone({
|
|
@@ -496,7 +536,7 @@ describe(Store, () => {
|
|
|
496
536
|
status: "loaded"
|
|
497
537
|
});
|
|
498
538
|
await waitForCall(ifaceSub);
|
|
499
|
-
expectSingleListCallAndClear(ifaceSub, employeesAsServerReturns
|
|
539
|
+
expectSingleListCallAndClear(ifaceSub, employeesAsServerReturns, {
|
|
500
540
|
status: "loaded"
|
|
501
541
|
});
|
|
502
542
|
expectNoMoreCalls(listSub1);
|
|
@@ -630,32 +670,91 @@ describe(Store, () => {
|
|
|
630
670
|
});
|
|
631
671
|
describe("with mock client", () => {
|
|
632
672
|
let client;
|
|
633
|
-
let
|
|
673
|
+
let apiServer;
|
|
674
|
+
let fauxFoundry;
|
|
634
675
|
let store;
|
|
676
|
+
beforeAll(async () => {
|
|
677
|
+
const testSetup = startNodeApiServer(new FauxFoundry("https://stack.palantir.com/", undefined, {
|
|
678
|
+
logger
|
|
679
|
+
}), createClient, {
|
|
680
|
+
logger
|
|
681
|
+
});
|
|
682
|
+
({
|
|
683
|
+
client,
|
|
684
|
+
apiServer,
|
|
685
|
+
fauxFoundry
|
|
686
|
+
} = testSetup);
|
|
687
|
+
setupOntology(testSetup.fauxFoundry);
|
|
688
|
+
return () => {
|
|
689
|
+
testSetup.apiServer.close();
|
|
690
|
+
};
|
|
691
|
+
});
|
|
692
|
+
beforeEach(() => {
|
|
693
|
+
apiServer.resetHandlers();
|
|
694
|
+
});
|
|
635
695
|
beforeEach(async () => {
|
|
636
|
-
mockClient = createClientMockHelper();
|
|
637
|
-
client = mockClient.client;
|
|
638
696
|
store = new Store(client);
|
|
639
697
|
});
|
|
640
698
|
it("properly fires error handler for a list", async () => {
|
|
641
|
-
const error = new Error("A faux error");
|
|
642
|
-
mockClient.mockFetchPageOnce().reject(error);
|
|
643
699
|
const sub = mockListSubCallback();
|
|
644
700
|
store.observeList({
|
|
645
701
|
type: Employee,
|
|
646
|
-
where: {
|
|
702
|
+
where: {
|
|
703
|
+
aBadPropertyThatDoesNotExist: "aBadValue"
|
|
704
|
+
},
|
|
647
705
|
orderBy: {}
|
|
648
706
|
}, sub);
|
|
649
707
|
await waitForCall(sub.error, 1);
|
|
650
708
|
expect(sub.error).toHaveBeenCalled();
|
|
651
709
|
expect(sub.next).not.toHaveBeenCalled();
|
|
652
710
|
});
|
|
711
|
+
describe("batching", () => {
|
|
712
|
+
it("groups requests for single objects", async () => {
|
|
713
|
+
fauxFoundry.getDefaultDataStore().registerObject(Employee, {
|
|
714
|
+
$apiName: "Employee",
|
|
715
|
+
employeeId: 0
|
|
716
|
+
});
|
|
717
|
+
fauxFoundry.getDefaultDataStore().registerObject(Employee, {
|
|
718
|
+
$apiName: "Employee",
|
|
719
|
+
employeeId: 1
|
|
720
|
+
});
|
|
721
|
+
const a = mockSingleSubCallback();
|
|
722
|
+
const b = mockSingleSubCallback();
|
|
723
|
+
defer(store.observeObject(Employee, 0, {}, a));
|
|
724
|
+
defer(store.observeObject(Employee, 1, {}, b));
|
|
725
|
+
await a.expectLoadingAndLoaded({
|
|
726
|
+
loading: objectPayloadContaining({
|
|
727
|
+
status: "loading",
|
|
728
|
+
object: undefined
|
|
729
|
+
}),
|
|
730
|
+
loaded: objectPayloadContaining({
|
|
731
|
+
object: expect.objectContaining({
|
|
732
|
+
$primaryKey: 0
|
|
733
|
+
})
|
|
734
|
+
})
|
|
735
|
+
});
|
|
736
|
+
await b.expectLoadingAndLoaded({
|
|
737
|
+
loading: objectPayloadContaining({
|
|
738
|
+
status: "loading",
|
|
739
|
+
object: undefined
|
|
740
|
+
}),
|
|
741
|
+
loaded: objectPayloadContaining({
|
|
742
|
+
object: expect.objectContaining({
|
|
743
|
+
$primaryKey: 1
|
|
744
|
+
})
|
|
745
|
+
})
|
|
746
|
+
});
|
|
747
|
+
});
|
|
748
|
+
});
|
|
653
749
|
describe("actions", () => {
|
|
750
|
+
beforeEach(() => {
|
|
751
|
+
fauxFoundry.getDefaultDataStore().clear();
|
|
752
|
+
});
|
|
654
753
|
it("properly invalidates objects", async () => {
|
|
655
|
-
|
|
656
|
-
mockClient.mockFetchOneOnce().resolve({
|
|
754
|
+
fauxFoundry.getDefaultDataStore().registerObject(Todo, {
|
|
657
755
|
$apiName: "Todo",
|
|
658
|
-
|
|
756
|
+
id: 0,
|
|
757
|
+
text: "og title"
|
|
659
758
|
});
|
|
660
759
|
const todoSubFn = mockSingleSubCallback();
|
|
661
760
|
defer(store.observeObject(Todo, 0, {}, todoSubFn));
|
|
@@ -672,22 +771,10 @@ describe(Store, () => {
|
|
|
672
771
|
});
|
|
673
772
|
|
|
674
773
|
// at this point we have an observation properly set up
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
objectType: "Todo",
|
|
678
|
-
primaryKey: 0
|
|
679
|
-
}]
|
|
680
|
-
});
|
|
681
|
-
|
|
682
|
-
// after we apply the action, the object is invalidated and gets re-requested
|
|
683
|
-
mockClient.mockFetchOneOnce().resolve({
|
|
684
|
-
$primaryKey: 0,
|
|
685
|
-
$apiName: "Todo",
|
|
774
|
+
await store.applyAction(editTodo, {
|
|
775
|
+
id: 0,
|
|
686
776
|
text: "hello there kind sir"
|
|
687
777
|
});
|
|
688
|
-
await store.applyAction(createOffice, {
|
|
689
|
-
officeId: "whatever"
|
|
690
|
-
});
|
|
691
778
|
await todoSubFn.expectLoadingAndLoaded({
|
|
692
779
|
loading: objectPayloadContaining({
|
|
693
780
|
status: "loading"
|
|
@@ -700,15 +787,17 @@ describe(Store, () => {
|
|
|
700
787
|
});
|
|
701
788
|
});
|
|
702
789
|
it("rolls back optimistic updates on error", async () => {
|
|
703
|
-
const fauxObject = {
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
$title: "does not matter"
|
|
708
|
-
};
|
|
790
|
+
const fauxObject = expect.objectContaining({
|
|
791
|
+
id: 0,
|
|
792
|
+
text: "does not matter"
|
|
793
|
+
});
|
|
709
794
|
|
|
710
|
-
//
|
|
711
|
-
|
|
795
|
+
// set the object in the "backend"
|
|
796
|
+
fauxFoundry.getDefaultDataStore().registerObject(Todo, {
|
|
797
|
+
$apiName: "Todo",
|
|
798
|
+
id: 0,
|
|
799
|
+
text: "does not matter"
|
|
800
|
+
});
|
|
712
801
|
const todoSubFn = mockSingleSubCallback();
|
|
713
802
|
defer(store.observeObject(Todo, 0, {}, todoSubFn));
|
|
714
803
|
await todoSubFn.expectLoadingAndLoaded({
|
|
@@ -723,94 +812,53 @@ describe(Store, () => {
|
|
|
723
812
|
isOptimistic: false
|
|
724
813
|
})
|
|
725
814
|
});
|
|
815
|
+
const object = store.getValue(store.getCacheKey("object", "Todo", 0))?.value;
|
|
816
|
+
!object ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
726
817
|
|
|
727
818
|
// at this point we have an observation properly set up
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
officeId: "whatever"
|
|
819
|
+
await expect(store.applyAction(editTodo, {
|
|
820
|
+
id: "not an id that exists"
|
|
731
821
|
}, {
|
|
732
822
|
optimisticUpdate: ctx => {
|
|
733
|
-
ctx.updateObject({
|
|
734
|
-
...fauxObject,
|
|
823
|
+
ctx.updateObject(object.$clone({
|
|
735
824
|
text: "optimistic"
|
|
736
|
-
});
|
|
825
|
+
}));
|
|
737
826
|
}
|
|
827
|
+
})).rejects.toThrow(ActionValidationError);
|
|
828
|
+
await waitForCall(todoSubFn, 2);
|
|
829
|
+
await todoSubFn.expectLoadingAndLoaded({
|
|
830
|
+
loading: objectPayloadContaining({
|
|
831
|
+
status: "loading",
|
|
832
|
+
object: expect.objectContaining({
|
|
833
|
+
id: 0,
|
|
834
|
+
text: "optimistic"
|
|
835
|
+
}),
|
|
836
|
+
isOptimistic: true
|
|
837
|
+
}),
|
|
838
|
+
loaded: objectPayloadContaining({
|
|
839
|
+
object: fauxObject,
|
|
840
|
+
status: "loaded",
|
|
841
|
+
isOptimistic: false
|
|
842
|
+
})
|
|
738
843
|
});
|
|
739
|
-
await waitForCall(todoSubFn, 1);
|
|
740
|
-
expect(todoSubFn.next).toHaveBeenCalledExactlyOnceWith(objectPayloadContaining({
|
|
741
|
-
object: {
|
|
742
|
-
...fauxObject,
|
|
743
|
-
text: "optimistic"
|
|
744
|
-
},
|
|
745
|
-
status: "loading",
|
|
746
|
-
isOptimistic: true
|
|
747
|
-
}));
|
|
748
|
-
todoSubFn.next.mockClear();
|
|
749
|
-
|
|
750
|
-
// let the action error out
|
|
751
|
-
applyActionResult.reject("an error thrown");
|
|
752
|
-
await expect(actionPromise).rejects.toThrow("an error thrown");
|
|
753
|
-
|
|
754
|
-
// back to the original object
|
|
755
|
-
await waitForCall(todoSubFn, 1);
|
|
756
|
-
expect(todoSubFn.next).toHaveBeenCalledExactlyOnceWith(objectPayloadContaining({
|
|
757
|
-
object: fauxObject,
|
|
758
|
-
status: "loaded",
|
|
759
|
-
isOptimistic: false
|
|
760
|
-
}));
|
|
761
844
|
});
|
|
762
845
|
});
|
|
763
846
|
describe("orderBy", async () => {
|
|
764
|
-
const ontologyProvider = {
|
|
765
|
-
getObjectDefinition: async () => {
|
|
766
|
-
return {
|
|
767
|
-
...wireObjectTypeFullMetadataToSdkObjectMetadata(stubData.todoWithLinkTypes, true),
|
|
768
|
-
[InterfaceDefinitions]: {}
|
|
769
|
-
};
|
|
770
|
-
},
|
|
771
|
-
getActionDefinition() {
|
|
772
|
-
throw new Error("not implemented");
|
|
773
|
-
},
|
|
774
|
-
getInterfaceDefinition() {
|
|
775
|
-
throw new Error("not implemented");
|
|
776
|
-
},
|
|
777
|
-
getQueryDefinition() {
|
|
778
|
-
throw new Error("not implemented");
|
|
779
|
-
}
|
|
780
|
-
};
|
|
781
|
-
const minimalClient = createMinimalClient({
|
|
782
|
-
ontologyRid: "ri.whatever"
|
|
783
|
-
}, "https://localhost:8080", () => Promise.resolve("token"), {
|
|
784
|
-
logger
|
|
785
|
-
}, fetch, createObjectSet, () => () => ontologyProvider);
|
|
786
|
-
async function createObject(type, x) {
|
|
787
|
-
return (await minimalClient.objectFactory2(minimalClient, [{
|
|
788
|
-
...x,
|
|
789
|
-
$apiName: type.apiName,
|
|
790
|
-
$objectType: type.apiName,
|
|
791
|
-
$objectSpecifier: `${type.apiName}:${x.$primaryKey}`
|
|
792
|
-
}], undefined))[0];
|
|
793
|
-
}
|
|
794
847
|
let nextPk = 0;
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
const fauxObjectC = await createObject(Todo, {
|
|
810
|
-
$primaryKey: nextPk,
|
|
811
|
-
$title: "c",
|
|
812
|
-
id: nextPk,
|
|
813
|
-
text: "c"
|
|
848
|
+
let fauxObjectA;
|
|
849
|
+
let fauxObjectB;
|
|
850
|
+
let fauxObjectC;
|
|
851
|
+
beforeAll(async () => {
|
|
852
|
+
fauxFoundry.getDefaultDataStore().clear();
|
|
853
|
+
[fauxObjectA, fauxObjectB, fauxObjectC] = await Promise.all(["a", "b", "c"].map(text => {
|
|
854
|
+
const id = nextPk++;
|
|
855
|
+
fauxFoundry.getDefaultDataStore().registerObject(Todo, {
|
|
856
|
+
$apiName: "Todo",
|
|
857
|
+
id,
|
|
858
|
+
text
|
|
859
|
+
});
|
|
860
|
+
return client(Todo).fetchOne(id);
|
|
861
|
+
}));
|
|
814
862
|
});
|
|
815
863
|
const noWhereNoOrderBy = {
|
|
816
864
|
type: Todo,
|
|
@@ -865,14 +913,11 @@ describe(Store, () => {
|
|
|
865
913
|
expectSingleListCallAndClear(subListOrdered, [fauxObjectA, fauxObjectB, fauxObjectC]);
|
|
866
914
|
});
|
|
867
915
|
it("produces proper results with optimistic updates and successful action", async () => {
|
|
868
|
-
const optimisticallyMutatedA =
|
|
869
|
-
...fauxObjectA,
|
|
916
|
+
const optimisticallyMutatedA = fauxObjectA.$clone({
|
|
870
917
|
text: "optimistic"
|
|
871
918
|
});
|
|
872
919
|
const pkForOptimistic = nextPk++;
|
|
873
|
-
const optimisticallyCreatedObjectD =
|
|
874
|
-
"$primaryKey": pkForOptimistic,
|
|
875
|
-
"$title": "d",
|
|
920
|
+
const optimisticallyCreatedObjectD = expect.objectContaining({
|
|
876
921
|
"text": "d",
|
|
877
922
|
id: pkForOptimistic
|
|
878
923
|
});
|
|
@@ -888,10 +933,6 @@ describe(Store, () => {
|
|
|
888
933
|
expectSingleListCallAndClear(subListOrdered, [fauxObjectA, fauxObjectB]);
|
|
889
934
|
testStage("Start");
|
|
890
935
|
|
|
891
|
-
// the optimistic job will call createObject which triggers the `objectFactory2` of the
|
|
892
|
-
// cache context.
|
|
893
|
-
mockClient.mockObjectFactory2Once().resolve([optimisticallyCreatedObjectD]);
|
|
894
|
-
|
|
895
936
|
// Perform something optimistic.
|
|
896
937
|
const removeOptimisticResult = runOptimisticJob(store, b => {
|
|
897
938
|
b.createObject(Todo, pkForOptimistic, {
|
|
@@ -933,26 +974,18 @@ describe(Store, () => {
|
|
|
933
974
|
// I think these are named backwards
|
|
934
975
|
it("produces proper results with optimistic updates and rollback", async () => {
|
|
935
976
|
const pkForOptimistic = nextPk++;
|
|
936
|
-
const optimisticallyCreatedObjectD =
|
|
977
|
+
const optimisticallyCreatedObjectD = expect.objectContaining({
|
|
937
978
|
"$primaryKey": pkForOptimistic,
|
|
938
|
-
"$title":
|
|
939
|
-
|
|
979
|
+
"$title": undefined,
|
|
980
|
+
// FIXME once this is calculated by optimistic then this needs to be the right value
|
|
981
|
+
"text": "d optimistic",
|
|
940
982
|
id: pkForOptimistic
|
|
941
983
|
});
|
|
942
|
-
const optimisticallyMutatedA =
|
|
943
|
-
...fauxObjectA,
|
|
984
|
+
const optimisticallyMutatedA = fauxObjectA.$clone({
|
|
944
985
|
text: "optimistic"
|
|
945
986
|
});
|
|
946
987
|
testStage("Initial Setup");
|
|
947
988
|
|
|
948
|
-
// later we will "create" this object
|
|
949
|
-
const createdObjectD = await createObject(Todo, {
|
|
950
|
-
"$primaryKey": 9000,
|
|
951
|
-
"$title": "d prime",
|
|
952
|
-
"text": "d prime",
|
|
953
|
-
id: 9000
|
|
954
|
-
});
|
|
955
|
-
|
|
956
989
|
// for whatever reason, the first list is loaded as [B, A]
|
|
957
990
|
updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);
|
|
958
991
|
await waitForCall(subListUnordered, 1);
|
|
@@ -963,19 +996,33 @@ describe(Store, () => {
|
|
|
963
996
|
expectSingleListCallAndClear(subListOrdered, [fauxObjectA, fauxObjectB]);
|
|
964
997
|
testStage("Optimistic Creation");
|
|
965
998
|
|
|
999
|
+
// create the weirdest action ever. It always creates a Todo with
|
|
1000
|
+
// a new primary key and the text "d" and updates A
|
|
1001
|
+
const {
|
|
1002
|
+
actionDefinition: crazyAction,
|
|
1003
|
+
actionTypeV2: crazyActionTypeV2
|
|
1004
|
+
} = new ActionTypeBuilder("asdf").addParameter("foo", "string").build();
|
|
1005
|
+
fauxFoundry.getDefaultOntology().registerActionType(crazyActionTypeV2, batch => {
|
|
1006
|
+
const idForD = nextPk++;
|
|
1007
|
+
batch.addObject(Todo.apiName, idForD, {
|
|
1008
|
+
id: idForD,
|
|
1009
|
+
text: "d"
|
|
1010
|
+
});
|
|
1011
|
+
batch.modifyObject(fauxObjectA.$apiName, fauxObjectA.$primaryKey, {
|
|
1012
|
+
text: "a prime",
|
|
1013
|
+
$title: "a prime" // FIXME we shouldn't have to set this, it can be calculated
|
|
1014
|
+
});
|
|
1015
|
+
});
|
|
1016
|
+
|
|
966
1017
|
// the optimistic job will call createObject which triggers the `objectFactory2` of the
|
|
967
1018
|
// cache context.
|
|
968
1019
|
|
|
969
|
-
|
|
970
|
-
const
|
|
971
|
-
testStage("Apply Action");
|
|
972
|
-
const actionPromise = store.applyAction(createOffice, {
|
|
973
|
-
officeId: "5"
|
|
974
|
-
}, {
|
|
1020
|
+
// Perform something optimistic.
|
|
1021
|
+
const pActionResult = store.applyAction(crazyAction, {}, {
|
|
975
1022
|
optimisticUpdate: b => {
|
|
976
|
-
b.createObject(Todo,
|
|
977
|
-
id:
|
|
978
|
-
text: "d"
|
|
1023
|
+
b.createObject(Todo, pkForOptimistic, {
|
|
1024
|
+
id: pkForOptimistic,
|
|
1025
|
+
text: "d optimistic"
|
|
979
1026
|
});
|
|
980
1027
|
b.updateObject(optimisticallyMutatedA);
|
|
981
1028
|
}
|
|
@@ -996,53 +1043,15 @@ describe(Store, () => {
|
|
|
996
1043
|
isOptimistic: true
|
|
997
1044
|
});
|
|
998
1045
|
testStage("Resolve Action");
|
|
999
|
-
const modifiedObjectA =
|
|
1000
|
-
...fauxObjectA,
|
|
1046
|
+
const modifiedObjectA = fauxObjectA.$clone({
|
|
1001
1047
|
text: "a prime"
|
|
1002
1048
|
});
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
//
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
// The action will complete and then revalidate in order...
|
|
1009
|
-
mockClient.mockFetchOneOnce(modifiedObjectA.$primaryKey).resolve(modifiedObjectA);
|
|
1010
|
-
mockClient.mockFetchOneOnce(createdObjectD.$primaryKey).resolve(createdObjectD);
|
|
1011
|
-
|
|
1012
|
-
// this order matters!
|
|
1013
|
-
// but now we don't need them because we just update lists instead of revalidate when we can
|
|
1014
|
-
// const plainList = mockClient.mockFetchPageOnce<Todo>();
|
|
1015
|
-
// const orderedList = mockClient.mockFetchPageOnce<Todo>();
|
|
1016
|
-
|
|
1017
|
-
mockedApplyAction.resolve({
|
|
1018
|
-
addedObjects: [{
|
|
1019
|
-
objectType: "Todo",
|
|
1020
|
-
primaryKey: createdObjectD.id
|
|
1021
|
-
}],
|
|
1022
|
-
modifiedObjects: [{
|
|
1023
|
-
objectType: "Todo",
|
|
1024
|
-
primaryKey: fauxObjectA.$primaryKey
|
|
1025
|
-
}]
|
|
1026
|
-
});
|
|
1027
|
-
|
|
1028
|
-
// plainList.resolve({
|
|
1029
|
-
// nextPageToken: undefined,
|
|
1030
|
-
// totalCount: "4",
|
|
1031
|
-
// data: [fauxObjectB, fauxObjectC, modifiedObjectA, createdObjectD],
|
|
1032
|
-
// });
|
|
1033
|
-
|
|
1034
|
-
// orderedList.resolve({
|
|
1035
|
-
// nextPageToken: undefined,
|
|
1036
|
-
// totalCount: "4",
|
|
1037
|
-
// data: [modifiedObjectA, fauxObjectC, createdObjectD],
|
|
1038
|
-
// });
|
|
1039
|
-
|
|
1040
|
-
await actionPromise;
|
|
1049
|
+
const pkForD = (await pActionResult).addedObjects?.[0].primaryKey;
|
|
1050
|
+
!(typeof pkForD === "number") ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
1051
|
+
// load this without the cache for comparisons
|
|
1052
|
+
const createdObjectD = await client(Todo).fetchOne(pkForD);
|
|
1041
1053
|
await waitForCall(subListUnordered, 1);
|
|
1042
|
-
|
|
1043
|
-
expectSingleListCallAndClear(subListUnordered, [fauxObjectB,
|
|
1044
|
-
// fauxObjectC,
|
|
1045
|
-
modifiedObjectA, createdObjectD], {
|
|
1054
|
+
expectSingleListCallAndClear(subListUnordered, [fauxObjectB, modifiedObjectA, createdObjectD], {
|
|
1046
1055
|
isOptimistic: false
|
|
1047
1056
|
});
|
|
1048
1057
|
await waitForCall(subListOrdered, 1);
|