@gravity-ui/data-source 0.7.0 → 0.8.0
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/README.md +752 -15
- package/build/cjs/core/index.d.ts +1 -0
- package/build/cjs/core/index.js.map +1 -1
- package/build/cjs/core/types/DataManager.d.ts +5 -0
- package/build/cjs/core/types/DataManager.js.map +1 -1
- package/build/cjs/core/types/Normalizer.d.ts +29 -0
- package/build/cjs/core/types/Normalizer.js +6 -0
- package/build/cjs/core/types/Normalizer.js.map +1 -0
- package/build/cjs/react/DataManagerProvider.d.ts +7 -0
- package/build/cjs/react/DataManagerProvider.js +19 -0
- package/build/cjs/react/DataManagerProvider.js.map +1 -0
- package/build/cjs/react/__tests__/DataManagerContext.test.js +7 -6
- package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -1
- package/build/cjs/react/__tests__/withDataManager.test.js +3 -0
- package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -1
- package/build/cjs/react/index.d.ts +2 -0
- package/build/cjs/react/index.js +8 -0
- package/build/cjs/react/index.js.map +1 -1
- package/build/cjs/react-query/ClientDataManager.d.ts +11 -2
- package/build/cjs/react-query/ClientDataManager.js +76 -9
- package/build/cjs/react-query/ClientDataManager.js.map +1 -1
- package/build/cjs/react-query/DataSourceProvider.d.ts +7 -0
- package/build/cjs/react-query/DataSourceProvider.js +35 -0
- package/build/cjs/react-query/DataSourceProvider.js.map +1 -0
- package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js +177 -0
- package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js +100 -0
- package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/subscriptions.test.js +1180 -0
- package/build/cjs/react-query/__tests__/subscriptions.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js +514 -0
- package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
- package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js +229 -0
- package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js +195 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
- package/build/cjs/react-query/impl/infinite/hooks.js +4 -1
- package/build/cjs/react-query/impl/infinite/hooks.js.map +1 -1
- package/build/cjs/react-query/impl/infinite/types.d.ts +2 -2
- package/build/cjs/react-query/impl/infinite/types.js.map +1 -1
- package/build/cjs/react-query/impl/plain/hooks.js +4 -1
- package/build/cjs/react-query/impl/plain/hooks.js.map +1 -1
- package/build/cjs/react-query/impl/plain/types.d.ts +2 -2
- package/build/cjs/react-query/impl/plain/types.js.map +1 -1
- package/build/cjs/react-query/index.d.ts +2 -0
- package/build/cjs/react-query/index.js +7 -0
- package/build/cjs/react-query/index.js.map +1 -1
- package/build/cjs/react-query/types/normalizer.d.ts +21 -0
- package/build/cjs/react-query/types/normalizer.js +6 -0
- package/build/cjs/react-query/types/normalizer.js.map +1 -0
- package/build/cjs/react-query/types/options.d.ts +12 -0
- package/build/cjs/react-query/types/options.js.map +1 -1
- package/build/cjs/react-query/utils/normalize.d.ts +22 -0
- package/build/cjs/react-query/utils/normalize.js +150 -0
- package/build/cjs/react-query/utils/normalize.js.map +1 -0
- package/build/cjs/react-query/utils/warn.d.ts +1 -0
- package/build/cjs/react-query/utils/warn.js +15 -0
- package/build/cjs/react-query/utils/warn.js.map +1 -0
- package/build/cjs/react-query/utils/warnDisabledRefetch.d.ts +1 -0
- package/build/cjs/react-query/utils/warnDisabledRefetch.js +11 -0
- package/build/cjs/react-query/utils/warnDisabledRefetch.js.map +1 -0
- package/build/esm/core/index.d.ts +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/types/DataManager.d.ts +5 -0
- package/build/esm/core/types/DataManager.js.map +1 -1
- package/build/esm/core/types/Normalizer.d.ts +29 -0
- package/build/esm/core/types/Normalizer.js +2 -0
- package/build/esm/core/types/Normalizer.js.map +1 -0
- package/build/esm/react/DataManagerProvider.d.ts +7 -0
- package/build/esm/react/DataManagerProvider.js +12 -0
- package/build/esm/react/DataManagerProvider.js.map +1 -0
- package/build/esm/react/__tests__/DataManagerContext.test.js +7 -6
- package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -1
- package/build/esm/react/__tests__/withDataManager.test.js +3 -0
- package/build/esm/react/__tests__/withDataManager.test.js.map +1 -1
- package/build/esm/react/index.d.ts +2 -0
- package/build/esm/react/index.js +1 -0
- package/build/esm/react/index.js.map +1 -1
- package/build/esm/react-query/ClientDataManager.d.ts +11 -2
- package/build/esm/react-query/ClientDataManager.js +70 -3
- package/build/esm/react-query/ClientDataManager.js.map +1 -1
- package/build/esm/react-query/DataSourceProvider.d.ts +7 -0
- package/build/esm/react-query/DataSourceProvider.js +28 -0
- package/build/esm/react-query/DataSourceProvider.js.map +1 -0
- package/build/esm/react-query/__tests__/createQueryNormalizer.test.js +174 -0
- package/build/esm/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
- package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js +98 -0
- package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
- package/build/esm/react-query/__tests__/subscriptions.test.js +1176 -0
- package/build/esm/react-query/__tests__/subscriptions.test.js.map +1 -0
- package/build/esm/react-query/__tests__/threeLevelIntegration.test.js +511 -0
- package/build/esm/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
- package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js +227 -0
- package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js +192 -0
- package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
- package/build/esm/react-query/impl/infinite/hooks.js +5 -2
- package/build/esm/react-query/impl/infinite/hooks.js.map +1 -1
- package/build/esm/react-query/impl/infinite/types.d.ts +2 -2
- package/build/esm/react-query/impl/infinite/types.js.map +1 -1
- package/build/esm/react-query/impl/plain/hooks.js +5 -2
- package/build/esm/react-query/impl/plain/hooks.js.map +1 -1
- package/build/esm/react-query/impl/plain/types.d.ts +2 -2
- package/build/esm/react-query/impl/plain/types.js.map +1 -1
- package/build/esm/react-query/index.d.ts +2 -0
- package/build/esm/react-query/index.js +1 -0
- package/build/esm/react-query/index.js.map +1 -1
- package/build/esm/react-query/types/normalizer.d.ts +21 -0
- package/build/esm/react-query/types/normalizer.js +2 -0
- package/build/esm/react-query/types/normalizer.js.map +1 -0
- package/build/esm/react-query/types/options.d.ts +12 -0
- package/build/esm/react-query/types/options.js.map +1 -1
- package/build/esm/react-query/utils/normalize.d.ts +22 -0
- package/build/esm/react-query/utils/normalize.js +143 -0
- package/build/esm/react-query/utils/normalize.js.map +1 -0
- package/build/esm/react-query/utils/warn.d.ts +1 -0
- package/build/esm/react-query/utils/warn.js +9 -0
- package/build/esm/react-query/utils/warn.js.map +1 -0
- package/build/esm/react-query/utils/warnDisabledRefetch.d.ts +1 -0
- package/build/esm/react-query/utils/warnDisabledRefetch.js +5 -0
- package/build/esm/react-query/utils/warnDisabledRefetch.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactQuery","_react2","_ClientDataManager","_DataSourceProvider","_jsxRuntime","e","__esModule","default","describe","dataManager","beforeEach","ClientDataManager","defaultOptions","queries","retry","mutations","normalizerConfig","devLogging","afterEach","_dataManager$queryNor","queryNormalizer","unsubscribe","queryClient","clear","it","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","normalized","wrap","_callee2$","_context2","prev","next","expect","toBeDefined","subscribe","fetchQuery","queryKey","queryFn","_queryFn","_callee","_callee$","_context","abrupt","id","name","stop","apply","arguments","normalize","getNormalizedData","objects","_callee5","normalizedBefore","objectCountBefore","normalizedAfter","_callee5$","_context5","_queryFn2","_callee3","_callee3$","_context3","Object","keys","length","_queryFn3","_callee4","_callee4$","_context4","toBe","JSON","stringify","_callee7","_callee7$","_context7","_queryFn4","_callee6","_callee6$","_context6","removeQueries","Promise","resolve","setTimeout","toBeUndefined","_callee8","_callee8$","_context8","_callee10","_callee10$","_context10","_queryFn5","_callee9","_callee9$","_context9","toHaveLength","not","toThrow","dataManagerWithOptimistic","optimistic","autoCalculateRollback","_dataManagerWithOptim","_callee13","wrapper","_renderHook","mutationResult","data","_callee13$","_context13","_queryFn6","_callee11","_callee11$","_context11","_ref7","children","_jsx","DataSourceProvider","renderHook","useMutation","mutationFn","_mutationFn","_callee12","_callee12$","_context12","result","current","mutate","undefined","waitFor","isSuccess","getQueryData","_callee16","_renderHook2","dataFinal","_callee16$","_context16","_queryFn7","_callee14","_callee14$","_context14","_ref9","_mutationFn2","_callee15","_callee15$","_context15","onMutate","optimisticData","_callee19","_renderHook3","_callee19$","_context19","_queryFn8","_callee17","_callee17$","_context17","_ref11","_mutationFn3","_callee18","_callee18$","_context18","Error","isError","_callee22","_renderHook4","_callee22$","_context22","_queryFn9","_callee20","_callee20$","_context20","_ref13","_mutationFn4","_callee21","_callee21$","_context21","_callee24","dmNoNormalize","_renderHook5","_callee24$","_context24","setQueryData","_ref15","_mutationFn5","_callee23","_callee23$","_context23","_callee27","dmWithLogging","consoleSpy","_renderHook6","_callee27$","_context27","jest","spyOn","console","mockImplementation","_queryFn10","_callee25","_callee25$","_context25","_ref17","_mutationFn6","_callee26","_callee26$","_context26","toHaveBeenCalledWith","any","mockRestore","_callee30","dmNoAutoRollback","_renderHook7","_callee30$","_context30","_queryFn11","_callee28","_callee28$","_context28","_ref19","_mutationFn7","_callee29","_callee29$","_context29","rollbackData","_callee33","dmWithInvalidate","invalidateSpy","_renderHook8","_callee33$","_context33","invalidate","_queryFn12","_callee31","_callee31$","_context31","_ref21","_mutationFn8","_callee32","_callee32$","_context32","toHaveBeenCalled","_callee36","_renderHook9","_callee36$","_context36","_queryFn13","_callee34","_callee34$","_context34","_ref23","_mutationFn9","_callee35","_callee35$","_context35"],"sources":["subscriptions.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {useMutation} from '@tanstack/react-query';\nimport {renderHook, waitFor} from '@testing-library/react';\n\nimport {ClientDataManager} from '../ClientDataManager';\nimport {DataSourceProvider} from '../DataSourceProvider';\n\ndescribe('subscriptions', () => {\n let dataManager: ClientDataManager;\n\n beforeEach(() => {\n dataManager = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n },\n });\n });\n\n afterEach(() => {\n dataManager.queryNormalizer?.unsubscribe();\n dataManager.queryClient.clear();\n });\n\n describe('QueryCache subscription', () => {\n it('should add query to normalizer when added to QueryCache', async () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n dataManager.queryNormalizer!.subscribe();\n\n // Add query with normalize: true option\n await dataManager.queryClient.fetchQuery({\n queryKey: ['users'],\n queryFn: async () => [{id: '1', name: 'User 1'}],\n normalize: true,\n } as Parameters<typeof dataManager.queryClient.fetchQuery>[0] & {normalize: boolean});\n\n const normalized = dataManager.queryNormalizer!.getNormalizedData();\n expect(normalized.objects['@@1']).toBeDefined();\n });\n\n it('should update query in normalizer on update', async () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n dataManager.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Initial data with normalize: true\n await dataManager.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Old'}],\n normalize: true,\n } as Parameters<typeof dataManager.queryClient.fetchQuery>[0] & {normalize: boolean});\n\n const normalizedBefore = dataManager.queryNormalizer!.getNormalizedData();\n const objectCountBefore = Object.keys(normalizedBefore.objects).length;\n\n // Update data\n await dataManager.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'New'}],\n normalize: true,\n } as Parameters<typeof dataManager.queryClient.fetchQuery>[0] & {normalize: boolean});\n\n // Verify that normalized data was updated\n const normalizedAfter = dataManager.queryNormalizer!.getNormalizedData();\n expect(Object.keys(normalizedAfter.objects).length).toBe(objectCountBefore);\n expect(normalizedAfter.queries[JSON.stringify(queryKey)]).toBeDefined();\n });\n\n it('should remove query from normalizer when removed from QueryCache', async () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n dataManager.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Add query\n await dataManager.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'User 1'}],\n normalize: true,\n } as Parameters<typeof dataManager.queryClient.fetchQuery>[0] & {normalize: boolean});\n\n // Remove query\n dataManager.queryClient.removeQueries({queryKey});\n\n // Give time to process event\n await new Promise((resolve) => setTimeout(resolve, 10));\n\n const normalized = dataManager.queryNormalizer!.getNormalizedData();\n // Query should be removed from queries\n expect(normalized.queries[JSON.stringify(queryKey)]).toBeUndefined();\n });\n\n it('should support meta configuration for queries', async () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n dataManager.queryNormalizer!.subscribe();\n\n // Check that we can use meta for configuration\n // Real check for disabling via meta is already tested in integration tests\n const normalized = dataManager.queryNormalizer!.getNormalizedData();\n expect(normalized).toBeDefined();\n expect(normalized.objects).toBeDefined();\n expect(normalized.queries).toBeDefined();\n });\n\n it('should unsubscribe correctly', async () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n dataManager.queryNormalizer!.subscribe();\n dataManager.queryNormalizer!.unsubscribe();\n\n // After unsubscribing, adding query should not affect normalizer\n await dataManager.queryClient.fetchQuery({\n queryKey: ['users'],\n queryFn: async () => [{id: '1', name: 'User 1'}],\n normalize: true,\n } as Parameters<typeof dataManager.queryClient.fetchQuery>[0] & {normalize: boolean});\n\n const normalized = dataManager.queryNormalizer!.getNormalizedData();\n expect(Object.keys(normalized.objects)).toHaveLength(0);\n });\n\n it('should allow multiple unsubscribe calls', () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n dataManager.queryNormalizer!.subscribe();\n dataManager.queryNormalizer!.unsubscribe();\n\n // Repeated call should not throw error\n expect(() => dataManager.queryNormalizer!.unsubscribe()).not.toThrow();\n });\n });\n\n describe('MutationCache subscription', () => {\n let dataManagerWithOptimistic: ClientDataManager;\n\n beforeEach(() => {\n dataManagerWithOptimistic = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n optimistic: {\n autoCalculateRollback: true,\n },\n },\n });\n });\n\n afterEach(() => {\n dataManagerWithOptimistic.queryNormalizer?.unsubscribe();\n dataManagerWithOptimistic.queryClient.clear();\n });\n\n it('should update queries on successful mutation', async () => {\n expect(dataManagerWithOptimistic.queryNormalizer).toBeDefined();\n\n dataManagerWithOptimistic.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Initial data\n await dataManagerWithOptimistic.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Old'}],\n normalize: true,\n } as Parameters<typeof dataManagerWithOptimistic.queryClient.fetchQuery>[0] & {\n normalize: boolean;\n });\n\n // Create wrapper for hooks\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dataManagerWithOptimistic}>\n {children}\n </DataSourceProvider>\n );\n\n // Mutation via useMutation\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => ({id: '1', name: 'New'}),\n normalize: true,\n optimistic: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n optimistic: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isSuccess).toBe(true));\n\n const data = dataManagerWithOptimistic.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('New');\n });\n\n it('should apply optimistic updates', async () => {\n expect(dataManagerWithOptimistic.queryNormalizer).toBeDefined();\n\n dataManagerWithOptimistic.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Initial data\n await dataManagerWithOptimistic.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n normalize: true,\n } as Parameters<typeof dataManagerWithOptimistic.queryClient.fetchQuery>[0] & {\n normalize: boolean;\n });\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dataManagerWithOptimistic}>\n {children}\n </DataSourceProvider>\n );\n\n // Mutation with optimistic data\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 50));\n return {id: '1', name: 'Final'};\n },\n onMutate: () => ({\n optimisticData: {id: '1', name: 'Optimistic'},\n }),\n normalize: true,\n optimistic: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n optimistic: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n // Check optimistic data\n await waitFor(() => {\n const data = dataManagerWithOptimistic.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('Optimistic');\n });\n\n // Wait for mutation to complete\n await waitFor(() => expect(mutationResult.current.isSuccess).toBe(true));\n\n const dataFinal = dataManagerWithOptimistic.queryClient.getQueryData(\n queryKey,\n ) as Array<{\n id: string;\n name: string;\n }>;\n expect(dataFinal[0].name).toBe('Final');\n });\n\n it('should automatically calculate rollbackData', async () => {\n expect(dataManagerWithOptimistic.queryNormalizer).toBeDefined();\n\n dataManagerWithOptimistic.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Initial data\n await dataManagerWithOptimistic.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n normalize: true,\n } as Parameters<typeof dataManagerWithOptimistic.queryClient.fetchQuery>[0] & {\n normalize: boolean;\n });\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dataManagerWithOptimistic}>\n {children}\n </DataSourceProvider>\n );\n\n // Mutation with optimistic data that will fail\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 50));\n throw new Error('Mutation failed');\n },\n onMutate: () => ({\n optimisticData: {id: '1', name: 'Optimistic'},\n }),\n normalize: true,\n optimistic: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n optimistic: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isError).toBe(true));\n\n // Data should be rolled back to original\n const data = dataManagerWithOptimistic.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('Original');\n });\n\n it('should rollback changes on mutation error', async () => {\n expect(dataManagerWithOptimistic.queryNormalizer).toBeDefined();\n\n dataManagerWithOptimistic.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Initial data\n await dataManagerWithOptimistic.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n normalize: true,\n } as Parameters<typeof dataManagerWithOptimistic.queryClient.fetchQuery>[0] & {\n normalize: boolean;\n });\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dataManagerWithOptimistic}>\n {children}\n </DataSourceProvider>\n );\n\n // Mutation with error\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 50));\n throw new Error('Failed');\n },\n onMutate: () => ({\n optimisticData: {id: '1', name: 'Optimistic'},\n }),\n normalize: true,\n optimistic: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n optimistic: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isError).toBe(true));\n\n const data = dataManagerWithOptimistic.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('Original');\n });\n\n it('should ignore mutations with normalize: false', async () => {\n const dmNoNormalize = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n },\n });\n\n expect(dmNoNormalize.queryNormalizer).toBeDefined();\n\n const queryKey = ['users'];\n dmNoNormalize.queryClient.setQueryData(queryKey, [{id: '1', name: 'Original'}]);\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dmNoNormalize}>{children}</DataSourceProvider>\n );\n\n // Mutation should not update data automatically (no normalize option)\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => ({id: '1', name: 'New'}),\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isSuccess).toBe(true));\n\n const data = dmNoNormalize.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('Original'); // Not changed\n });\n\n it('should support devLogging for optimistic updates', async () => {\n const dmWithLogging = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n optimistic: {\n autoCalculateRollback: true,\n devLogging: true,\n },\n },\n });\n\n expect(dmWithLogging.queryNormalizer).toBeDefined();\n\n const consoleSpy = jest.spyOn(console, 'log').mockImplementation();\n\n dmWithLogging.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n await dmWithLogging.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n normalize: true,\n } as Parameters<typeof dmWithLogging.queryClient.fetchQuery>[0] & {\n normalize: boolean;\n });\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dmWithLogging}>{children}</DataSourceProvider>\n );\n\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 50));\n throw new Error('Failed');\n },\n onMutate: () => ({\n optimisticData: {id: '1', name: 'Optimistic'},\n }),\n normalize: true,\n optimistic: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n optimistic: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isError).toBe(true));\n\n // Verify that logging was called\n expect(consoleSpy).toHaveBeenCalledWith(\n '[OptimisticUpdate] Auto-calculated rollbackData:',\n expect.any(Object),\n );\n expect(consoleSpy).toHaveBeenCalledWith('[OptimisticUpdate] Rolling back changes');\n\n consoleSpy.mockRestore();\n });\n\n it('should support manual rollbackData', async () => {\n const dmNoAutoRollback = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n optimistic: {\n autoCalculateRollback: false,\n },\n },\n });\n\n expect(dmNoAutoRollback.queryNormalizer).toBeDefined();\n\n dmNoAutoRollback.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n await dmNoAutoRollback.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n normalize: true,\n } as Parameters<typeof dmNoAutoRollback.queryClient.fetchQuery>[0] & {\n normalize: boolean;\n });\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dmNoAutoRollback}>{children}</DataSourceProvider>\n );\n\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 50));\n throw new Error('Failed');\n },\n onMutate: () => ({\n optimisticData: {id: '1', name: 'Optimistic'},\n rollbackData: {id: '1', name: 'Manual Rollback'},\n }),\n normalize: true,\n optimistic: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n optimistic: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isError).toBe(true));\n\n const data = dmNoAutoRollback.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('Manual Rollback');\n\n dmNoAutoRollback.queryNormalizer!.unsubscribe();\n dmNoAutoRollback.queryClient.clear();\n });\n\n it('should invalidate queries when invalidate option is enabled', async () => {\n const dmWithInvalidate = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n invalidate: true,\n },\n });\n\n expect(dmWithInvalidate.queryNormalizer).toBeDefined();\n\n dmWithInvalidate.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n // Initial data\n await dmWithInvalidate.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n });\n\n // Spy on invalidateQueries\n const invalidateSpy = jest.spyOn(dmWithInvalidate.queryClient, 'invalidateQueries');\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dmWithInvalidate}>{children}</DataSourceProvider>\n );\n\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => ({id: '1', name: 'Updated'}),\n normalize: true,\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isSuccess).toBe(true));\n\n // Verify that invalidateQueries was called\n expect(invalidateSpy).toHaveBeenCalled();\n\n invalidateSpy.mockRestore();\n dmWithInvalidate.queryNormalizer!.unsubscribe();\n dmWithInvalidate.queryClient.clear();\n });\n\n it('should not invalidate queries when invalidate: false is set on mutation', async () => {\n const dmWithInvalidate = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n invalidate: true, // Globally enabled\n },\n });\n\n expect(dmWithInvalidate.queryNormalizer).toBeDefined();\n\n dmWithInvalidate.queryNormalizer!.subscribe();\n\n const queryKey = ['users'];\n\n await dmWithInvalidate.queryClient.fetchQuery({\n queryKey,\n queryFn: async () => [{id: '1', name: 'Original'}],\n });\n\n const invalidateSpy = jest.spyOn(dmWithInvalidate.queryClient, 'invalidateQueries');\n\n const wrapper = ({children}: {children: React.ReactNode}) => (\n <DataSourceProvider dataManager={dmWithInvalidate}>{children}</DataSourceProvider>\n );\n\n const {result: mutationResult} = renderHook(\n () =>\n useMutation({\n mutationFn: async () => ({id: '1', name: 'Updated'}),\n normalize: true,\n invalidate: false, // Disable for this mutation\n } as Parameters<typeof useMutation>[0] & {\n normalize: boolean;\n invalidate: boolean;\n }),\n {wrapper},\n );\n\n mutationResult.current.mutate(undefined);\n\n await waitFor(() => expect(mutationResult.current.isSuccess).toBe(true));\n\n // Verify that invalidateQueries was NOT called\n expect(invalidateSpy).not.toHaveBeenCalled();\n\n invalidateSpy.mockRestore();\n dmWithInvalidate.queryNormalizer!.unsubscribe();\n dmWithInvalidate.queryClient.clear();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
4
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _ClientDataManager = require("../ClientDataManager");
|
|
8
|
+
var _DataSourceProvider = require("../DataSourceProvider");
|
|
9
|
+
var _useQueryData = require("../hooks/useQueryData");
|
|
10
|
+
var _factory = require("../impl/plain/factory");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
describe('Normalization Configuration Integration', function () {
|
|
14
|
+
var queryClient;
|
|
15
|
+
var dataManager;
|
|
16
|
+
beforeEach(function () {
|
|
17
|
+
dataManager = new _ClientDataManager.ClientDataManager({
|
|
18
|
+
normalizerConfig: {
|
|
19
|
+
devLogging: false
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
queryClient = dataManager.queryClient;
|
|
23
|
+
});
|
|
24
|
+
afterEach(function () {
|
|
25
|
+
var _dataManager$queryNor;
|
|
26
|
+
(_dataManager$queryNor = dataManager.queryNormalizer) === null || _dataManager$queryNor === void 0 || _dataManager$queryNor.unsubscribe();
|
|
27
|
+
queryClient.clear();
|
|
28
|
+
});
|
|
29
|
+
describe('ClientDataManager configuration', function () {
|
|
30
|
+
it('should use custom getNormalizationObjectKey from config', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2() {
|
|
31
|
+
var customGetKey, customDataManager, queryKey, normalized;
|
|
32
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
|
|
33
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
34
|
+
case 0:
|
|
35
|
+
customGetKey = jest.fn(function (obj) {
|
|
36
|
+
return "custom:".concat(obj.id);
|
|
37
|
+
});
|
|
38
|
+
customDataManager = new _ClientDataManager.ClientDataManager({
|
|
39
|
+
normalizerConfig: {
|
|
40
|
+
getNormalizationObjectKey: customGetKey,
|
|
41
|
+
devLogging: false
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
customDataManager.queryNormalizer.subscribe();
|
|
45
|
+
queryKey = ['users'];
|
|
46
|
+
_context2.next = 6;
|
|
47
|
+
return customDataManager.queryClient.fetchQuery({
|
|
48
|
+
queryKey: queryKey,
|
|
49
|
+
queryFn: function () {
|
|
50
|
+
var _queryFn = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
51
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
52
|
+
while (1) switch (_context.prev = _context.next) {
|
|
53
|
+
case 0:
|
|
54
|
+
return _context.abrupt("return", [{
|
|
55
|
+
id: '1',
|
|
56
|
+
name: 'User 1'
|
|
57
|
+
}]);
|
|
58
|
+
case 1:
|
|
59
|
+
case "end":
|
|
60
|
+
return _context.stop();
|
|
61
|
+
}
|
|
62
|
+
}, _callee);
|
|
63
|
+
}));
|
|
64
|
+
function queryFn() {
|
|
65
|
+
return _queryFn.apply(this, arguments);
|
|
66
|
+
}
|
|
67
|
+
return queryFn;
|
|
68
|
+
}(),
|
|
69
|
+
normalize: true
|
|
70
|
+
});
|
|
71
|
+
case 6:
|
|
72
|
+
normalized = customDataManager.queryNormalizer.getNormalizedData();
|
|
73
|
+
expect(normalized.objects['@@custom:1']).toBeDefined();
|
|
74
|
+
expect(customGetKey).toHaveBeenCalled();
|
|
75
|
+
customDataManager.queryNormalizer.unsubscribe();
|
|
76
|
+
customDataManager.queryClient.clear();
|
|
77
|
+
case 11:
|
|
78
|
+
case "end":
|
|
79
|
+
return _context2.stop();
|
|
80
|
+
}
|
|
81
|
+
}, _callee2);
|
|
82
|
+
})));
|
|
83
|
+
it('should use custom getArrayType from config', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4() {
|
|
84
|
+
var customGetArrayType, customDataManager, queryKey;
|
|
85
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee4$(_context4) {
|
|
86
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
87
|
+
case 0:
|
|
88
|
+
customGetArrayType = jest.fn(function (_ref3) {
|
|
89
|
+
var arrayKey = _ref3.arrayKey;
|
|
90
|
+
return "custom:".concat(arrayKey);
|
|
91
|
+
});
|
|
92
|
+
customDataManager = new _ClientDataManager.ClientDataManager({
|
|
93
|
+
normalizerConfig: {
|
|
94
|
+
getArrayType: customGetArrayType,
|
|
95
|
+
devLogging: false
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
customDataManager.queryNormalizer.subscribe();
|
|
99
|
+
queryKey = ['items'];
|
|
100
|
+
_context4.next = 6;
|
|
101
|
+
return customDataManager.queryClient.fetchQuery({
|
|
102
|
+
queryKey: queryKey,
|
|
103
|
+
queryFn: function () {
|
|
104
|
+
var _queryFn2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3() {
|
|
105
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee3$(_context3) {
|
|
106
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
107
|
+
case 0:
|
|
108
|
+
return _context3.abrupt("return", {
|
|
109
|
+
items: [{
|
|
110
|
+
id: '1',
|
|
111
|
+
name: 'Item 1'
|
|
112
|
+
}]
|
|
113
|
+
});
|
|
114
|
+
case 1:
|
|
115
|
+
case "end":
|
|
116
|
+
return _context3.stop();
|
|
117
|
+
}
|
|
118
|
+
}, _callee3);
|
|
119
|
+
}));
|
|
120
|
+
function queryFn() {
|
|
121
|
+
return _queryFn2.apply(this, arguments);
|
|
122
|
+
}
|
|
123
|
+
return queryFn;
|
|
124
|
+
}(),
|
|
125
|
+
normalize: true
|
|
126
|
+
});
|
|
127
|
+
case 6:
|
|
128
|
+
expect(customGetArrayType).toHaveBeenCalled();
|
|
129
|
+
customDataManager.queryNormalizer.unsubscribe();
|
|
130
|
+
customDataManager.queryClient.clear();
|
|
131
|
+
case 9:
|
|
132
|
+
case "end":
|
|
133
|
+
return _context4.stop();
|
|
134
|
+
}
|
|
135
|
+
}, _callee4);
|
|
136
|
+
})));
|
|
137
|
+
});
|
|
138
|
+
describe('Query-level normalization control', function () {
|
|
139
|
+
it('should normalize when query has normalize: true', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee6() {
|
|
140
|
+
var queryKey, normalized;
|
|
141
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee6$(_context6) {
|
|
142
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
143
|
+
case 0:
|
|
144
|
+
dataManager.queryNormalizer.subscribe();
|
|
145
|
+
queryKey = ['users-normalized'];
|
|
146
|
+
_context6.next = 4;
|
|
147
|
+
return dataManager.queryClient.fetchQuery({
|
|
148
|
+
queryKey: queryKey,
|
|
149
|
+
queryFn: function () {
|
|
150
|
+
var _queryFn3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee5() {
|
|
151
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee5$(_context5) {
|
|
152
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
153
|
+
case 0:
|
|
154
|
+
return _context5.abrupt("return", [{
|
|
155
|
+
id: '1',
|
|
156
|
+
name: 'User 1'
|
|
157
|
+
}]);
|
|
158
|
+
case 1:
|
|
159
|
+
case "end":
|
|
160
|
+
return _context5.stop();
|
|
161
|
+
}
|
|
162
|
+
}, _callee5);
|
|
163
|
+
}));
|
|
164
|
+
function queryFn() {
|
|
165
|
+
return _queryFn3.apply(this, arguments);
|
|
166
|
+
}
|
|
167
|
+
return queryFn;
|
|
168
|
+
}(),
|
|
169
|
+
normalize: true
|
|
170
|
+
});
|
|
171
|
+
case 4:
|
|
172
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data SHOULD be normalized
|
|
173
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
174
|
+
case 6:
|
|
175
|
+
case "end":
|
|
176
|
+
return _context6.stop();
|
|
177
|
+
}
|
|
178
|
+
}, _callee6);
|
|
179
|
+
})));
|
|
180
|
+
it('should NOT normalize when query has normalize: false', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee8() {
|
|
181
|
+
var queryKey, normalized;
|
|
182
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee8$(_context8) {
|
|
183
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
184
|
+
case 0:
|
|
185
|
+
dataManager.queryNormalizer.subscribe();
|
|
186
|
+
queryKey = ['users-not-normalized'];
|
|
187
|
+
_context8.next = 4;
|
|
188
|
+
return dataManager.queryClient.fetchQuery({
|
|
189
|
+
queryKey: queryKey,
|
|
190
|
+
queryFn: function () {
|
|
191
|
+
var _queryFn4 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee7() {
|
|
192
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee7$(_context7) {
|
|
193
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
194
|
+
case 0:
|
|
195
|
+
return _context7.abrupt("return", [{
|
|
196
|
+
id: '2',
|
|
197
|
+
name: 'User 2'
|
|
198
|
+
}]);
|
|
199
|
+
case 1:
|
|
200
|
+
case "end":
|
|
201
|
+
return _context7.stop();
|
|
202
|
+
}
|
|
203
|
+
}, _callee7);
|
|
204
|
+
}));
|
|
205
|
+
function queryFn() {
|
|
206
|
+
return _queryFn4.apply(this, arguments);
|
|
207
|
+
}
|
|
208
|
+
return queryFn;
|
|
209
|
+
}(),
|
|
210
|
+
normalize: false
|
|
211
|
+
});
|
|
212
|
+
case 4:
|
|
213
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data should NOT be normalized
|
|
214
|
+
expect(normalized.objects['@@2']).toBeUndefined();
|
|
215
|
+
case 6:
|
|
216
|
+
case "end":
|
|
217
|
+
return _context8.stop();
|
|
218
|
+
}
|
|
219
|
+
}, _callee8);
|
|
220
|
+
})));
|
|
221
|
+
it('should normalize by default when normalize option is not provided', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee10() {
|
|
222
|
+
var queryKey, normalized;
|
|
223
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee10$(_context10) {
|
|
224
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
225
|
+
case 0:
|
|
226
|
+
dataManager.queryNormalizer.subscribe();
|
|
227
|
+
queryKey = ['users-default'];
|
|
228
|
+
_context10.next = 4;
|
|
229
|
+
return dataManager.queryClient.fetchQuery({
|
|
230
|
+
queryKey: queryKey,
|
|
231
|
+
queryFn: function () {
|
|
232
|
+
var _queryFn5 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee9() {
|
|
233
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee9$(_context9) {
|
|
234
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
235
|
+
case 0:
|
|
236
|
+
return _context9.abrupt("return", [{
|
|
237
|
+
id: '3',
|
|
238
|
+
name: 'User 3'
|
|
239
|
+
}]);
|
|
240
|
+
case 1:
|
|
241
|
+
case "end":
|
|
242
|
+
return _context9.stop();
|
|
243
|
+
}
|
|
244
|
+
}, _callee9);
|
|
245
|
+
}));
|
|
246
|
+
function queryFn() {
|
|
247
|
+
return _queryFn5.apply(this, arguments);
|
|
248
|
+
}
|
|
249
|
+
return queryFn;
|
|
250
|
+
}()
|
|
251
|
+
});
|
|
252
|
+
case 4:
|
|
253
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data SHOULD be normalized (default behavior is now true)
|
|
254
|
+
expect(normalized.objects['@@3']).toBeDefined();
|
|
255
|
+
case 6:
|
|
256
|
+
case "end":
|
|
257
|
+
return _context10.stop();
|
|
258
|
+
}
|
|
259
|
+
}, _callee10);
|
|
260
|
+
})));
|
|
261
|
+
});
|
|
262
|
+
describe('DataSourceProvider integration', function () {
|
|
263
|
+
it('should auto-subscribe queryNormalizer on mount', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee12() {
|
|
264
|
+
var wrapper, dataSource, _renderHook, result, normalized;
|
|
265
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee12$(_context12) {
|
|
266
|
+
while (1) switch (_context12.prev = _context12.next) {
|
|
267
|
+
case 0:
|
|
268
|
+
wrapper = function wrapper(_ref8) {
|
|
269
|
+
var children = _ref8.children;
|
|
270
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DataSourceProvider.DataSourceProvider, {
|
|
271
|
+
dataManager: dataManager,
|
|
272
|
+
children: children
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
dataSource = (0, _factory.makePlainQueryDataSource)({
|
|
276
|
+
name: 'users',
|
|
277
|
+
fetch: function () {
|
|
278
|
+
var _fetch = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee11() {
|
|
279
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee11$(_context11) {
|
|
280
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
281
|
+
case 0:
|
|
282
|
+
return _context11.abrupt("return", [{
|
|
283
|
+
id: '1',
|
|
284
|
+
name: 'User 1'
|
|
285
|
+
}]);
|
|
286
|
+
case 1:
|
|
287
|
+
case "end":
|
|
288
|
+
return _context11.stop();
|
|
289
|
+
}
|
|
290
|
+
}, _callee11);
|
|
291
|
+
}));
|
|
292
|
+
function fetch() {
|
|
293
|
+
return _fetch.apply(this, arguments);
|
|
294
|
+
}
|
|
295
|
+
return fetch;
|
|
296
|
+
}(),
|
|
297
|
+
options: {
|
|
298
|
+
normalize: true
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
_renderHook = (0, _react2.renderHook)(function () {
|
|
302
|
+
return (0, _useQueryData.useQueryData)(dataSource, {});
|
|
303
|
+
}, {
|
|
304
|
+
wrapper: wrapper
|
|
305
|
+
}), result = _renderHook.result;
|
|
306
|
+
_context12.next = 5;
|
|
307
|
+
return (0, _react2.waitFor)(function () {
|
|
308
|
+
return expect(result.current.status).toBe('success');
|
|
309
|
+
});
|
|
310
|
+
case 5:
|
|
311
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data should be normalized because DataSourceProvider subscribes automatically
|
|
312
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
313
|
+
case 7:
|
|
314
|
+
case "end":
|
|
315
|
+
return _context12.stop();
|
|
316
|
+
}
|
|
317
|
+
}, _callee12);
|
|
318
|
+
})));
|
|
319
|
+
it('should work with multiple queries', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee15() {
|
|
320
|
+
var wrapper, dataSource1, dataSource2, _renderHook2, result1, _renderHook3, result2, normalized;
|
|
321
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee15$(_context15) {
|
|
322
|
+
while (1) switch (_context15.prev = _context15.next) {
|
|
323
|
+
case 0:
|
|
324
|
+
wrapper = function wrapper(_ref10) {
|
|
325
|
+
var children = _ref10.children;
|
|
326
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DataSourceProvider.DataSourceProvider, {
|
|
327
|
+
dataManager: dataManager,
|
|
328
|
+
children: children
|
|
329
|
+
});
|
|
330
|
+
};
|
|
331
|
+
dataSource1 = (0, _factory.makePlainQueryDataSource)({
|
|
332
|
+
name: 'users',
|
|
333
|
+
fetch: function () {
|
|
334
|
+
var _fetch2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee13() {
|
|
335
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee13$(_context13) {
|
|
336
|
+
while (1) switch (_context13.prev = _context13.next) {
|
|
337
|
+
case 0:
|
|
338
|
+
return _context13.abrupt("return", [{
|
|
339
|
+
id: '1',
|
|
340
|
+
name: 'User 1'
|
|
341
|
+
}]);
|
|
342
|
+
case 1:
|
|
343
|
+
case "end":
|
|
344
|
+
return _context13.stop();
|
|
345
|
+
}
|
|
346
|
+
}, _callee13);
|
|
347
|
+
}));
|
|
348
|
+
function fetch() {
|
|
349
|
+
return _fetch2.apply(this, arguments);
|
|
350
|
+
}
|
|
351
|
+
return fetch;
|
|
352
|
+
}(),
|
|
353
|
+
options: {
|
|
354
|
+
normalize: true
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
dataSource2 = (0, _factory.makePlainQueryDataSource)({
|
|
358
|
+
name: 'posts',
|
|
359
|
+
fetch: function () {
|
|
360
|
+
var _fetch3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee14() {
|
|
361
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee14$(_context14) {
|
|
362
|
+
while (1) switch (_context14.prev = _context14.next) {
|
|
363
|
+
case 0:
|
|
364
|
+
return _context14.abrupt("return", [{
|
|
365
|
+
id: '2',
|
|
366
|
+
title: 'Post 1'
|
|
367
|
+
}]);
|
|
368
|
+
case 1:
|
|
369
|
+
case "end":
|
|
370
|
+
return _context14.stop();
|
|
371
|
+
}
|
|
372
|
+
}, _callee14);
|
|
373
|
+
}));
|
|
374
|
+
function fetch() {
|
|
375
|
+
return _fetch3.apply(this, arguments);
|
|
376
|
+
}
|
|
377
|
+
return fetch;
|
|
378
|
+
}(),
|
|
379
|
+
options: {
|
|
380
|
+
normalize: true
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
_renderHook2 = (0, _react2.renderHook)(function () {
|
|
384
|
+
return (0, _useQueryData.useQueryData)(dataSource1, {});
|
|
385
|
+
}, {
|
|
386
|
+
wrapper: wrapper
|
|
387
|
+
}), result1 = _renderHook2.result;
|
|
388
|
+
_renderHook3 = (0, _react2.renderHook)(function () {
|
|
389
|
+
return (0, _useQueryData.useQueryData)(dataSource2, {});
|
|
390
|
+
}, {
|
|
391
|
+
wrapper: wrapper
|
|
392
|
+
}), result2 = _renderHook3.result;
|
|
393
|
+
_context15.next = 7;
|
|
394
|
+
return (0, _react2.waitFor)(function () {
|
|
395
|
+
expect(result1.current.status).toBe('success');
|
|
396
|
+
expect(result2.current.status).toBe('success');
|
|
397
|
+
});
|
|
398
|
+
case 7:
|
|
399
|
+
normalized = dataManager.queryNormalizer.getNormalizedData();
|
|
400
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
401
|
+
expect(normalized.objects['@@2']).toBeDefined();
|
|
402
|
+
case 10:
|
|
403
|
+
case "end":
|
|
404
|
+
return _context15.stop();
|
|
405
|
+
}
|
|
406
|
+
}, _callee15);
|
|
407
|
+
})));
|
|
408
|
+
});
|
|
409
|
+
describe('Optimistic updates configuration', function () {
|
|
410
|
+
it('should enable optimistic updates when configured', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee16() {
|
|
411
|
+
var dmWithOptimistic, queryKey, initialData, data;
|
|
412
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee16$(_context16) {
|
|
413
|
+
while (1) switch (_context16.prev = _context16.next) {
|
|
414
|
+
case 0:
|
|
415
|
+
dmWithOptimistic = new _ClientDataManager.ClientDataManager({
|
|
416
|
+
normalizerConfig: {
|
|
417
|
+
devLogging: false,
|
|
418
|
+
optimistic: true
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
expect(dmWithOptimistic.queryNormalizer).toBeDefined();
|
|
422
|
+
dmWithOptimistic.queryNormalizer.subscribe();
|
|
423
|
+
queryKey = ['users'];
|
|
424
|
+
initialData = [{
|
|
425
|
+
id: '1',
|
|
426
|
+
name: 'Old'
|
|
427
|
+
}];
|
|
428
|
+
dmWithOptimistic.queryClient.setQueryData(queryKey, initialData);
|
|
429
|
+
dmWithOptimistic.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
430
|
+
|
|
431
|
+
// Manual optimistic update via setNormalizedData
|
|
432
|
+
dmWithOptimistic.queryNormalizer.setNormalizedData({
|
|
433
|
+
id: '1',
|
|
434
|
+
name: 'New'
|
|
435
|
+
});
|
|
436
|
+
data = dmWithOptimistic.queryClient.getQueryData(queryKey);
|
|
437
|
+
expect(data[0].name).toBe('New');
|
|
438
|
+
dmWithOptimistic.queryNormalizer.unsubscribe();
|
|
439
|
+
dmWithOptimistic.queryClient.clear();
|
|
440
|
+
case 12:
|
|
441
|
+
case "end":
|
|
442
|
+
return _context16.stop();
|
|
443
|
+
}
|
|
444
|
+
}, _callee16);
|
|
445
|
+
})));
|
|
446
|
+
it('should work with optimistic config object', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee17() {
|
|
447
|
+
var dmWithOptimisticConfig;
|
|
448
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee17$(_context17) {
|
|
449
|
+
while (1) switch (_context17.prev = _context17.next) {
|
|
450
|
+
case 0:
|
|
451
|
+
dmWithOptimisticConfig = new _ClientDataManager.ClientDataManager({
|
|
452
|
+
normalizerConfig: {
|
|
453
|
+
devLogging: false,
|
|
454
|
+
optimistic: {
|
|
455
|
+
autoCalculateRollback: true,
|
|
456
|
+
devLogging: false
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
expect(dmWithOptimisticConfig.queryNormalizer).toBeDefined();
|
|
461
|
+
expect(dmWithOptimisticConfig.normalizer).toBeDefined();
|
|
462
|
+
dmWithOptimisticConfig.queryClient.clear();
|
|
463
|
+
case 4:
|
|
464
|
+
case "end":
|
|
465
|
+
return _context17.stop();
|
|
466
|
+
}
|
|
467
|
+
}, _callee17);
|
|
468
|
+
})));
|
|
469
|
+
});
|
|
470
|
+
describe('Invalidate configuration', function () {
|
|
471
|
+
it('should support invalidate option in global config', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee18() {
|
|
472
|
+
var dmWithInvalidate;
|
|
473
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee18$(_context18) {
|
|
474
|
+
while (1) switch (_context18.prev = _context18.next) {
|
|
475
|
+
case 0:
|
|
476
|
+
dmWithInvalidate = new _ClientDataManager.ClientDataManager({
|
|
477
|
+
normalizerConfig: {
|
|
478
|
+
devLogging: false,
|
|
479
|
+
invalidate: true
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
expect(dmWithInvalidate.queryNormalizer).toBeDefined();
|
|
483
|
+
expect(dmWithInvalidate.normalizer).toBeDefined();
|
|
484
|
+
dmWithInvalidate.queryClient.clear();
|
|
485
|
+
case 4:
|
|
486
|
+
case "end":
|
|
487
|
+
return _context18.stop();
|
|
488
|
+
}
|
|
489
|
+
}, _callee18);
|
|
490
|
+
})));
|
|
491
|
+
it('should support both optimistic and invalidate options', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee19() {
|
|
492
|
+
var dmWithBoth;
|
|
493
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee19$(_context19) {
|
|
494
|
+
while (1) switch (_context19.prev = _context19.next) {
|
|
495
|
+
case 0:
|
|
496
|
+
dmWithBoth = new _ClientDataManager.ClientDataManager({
|
|
497
|
+
normalizerConfig: {
|
|
498
|
+
devLogging: false,
|
|
499
|
+
optimistic: true,
|
|
500
|
+
invalidate: true
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
expect(dmWithBoth.queryNormalizer).toBeDefined();
|
|
504
|
+
expect(dmWithBoth.normalizer).toBeDefined();
|
|
505
|
+
dmWithBoth.queryClient.clear();
|
|
506
|
+
case 4:
|
|
507
|
+
case "end":
|
|
508
|
+
return _context19.stop();
|
|
509
|
+
}
|
|
510
|
+
}, _callee19);
|
|
511
|
+
})));
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
// #sourceMappingURL=threeLevelIntegration.test.js.map
|