@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","useMutation","renderHook","waitFor","ClientDataManager","DataSourceProvider","jsx","_jsx","describe","dataManager","beforeEach","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","mutationFn","_mutationFn","_callee12","_callee12$","_context12","result","current","mutate","undefined","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,511 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/regeneratorRuntime";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { renderHook, waitFor } from '@testing-library/react';
|
|
5
|
+
import { ClientDataManager } from '../ClientDataManager';
|
|
6
|
+
import { DataSourceProvider } from '../DataSourceProvider';
|
|
7
|
+
import { useQueryData } from '../hooks/useQueryData';
|
|
8
|
+
import { makePlainQueryDataSource } from '../impl/plain/factory';
|
|
9
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
describe('Normalization Configuration Integration', function () {
|
|
11
|
+
var queryClient;
|
|
12
|
+
var dataManager;
|
|
13
|
+
beforeEach(function () {
|
|
14
|
+
dataManager = new ClientDataManager({
|
|
15
|
+
normalizerConfig: {
|
|
16
|
+
devLogging: false
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
queryClient = dataManager.queryClient;
|
|
20
|
+
});
|
|
21
|
+
afterEach(function () {
|
|
22
|
+
var _dataManager$queryNor;
|
|
23
|
+
(_dataManager$queryNor = dataManager.queryNormalizer) === null || _dataManager$queryNor === void 0 || _dataManager$queryNor.unsubscribe();
|
|
24
|
+
queryClient.clear();
|
|
25
|
+
});
|
|
26
|
+
describe('ClientDataManager configuration', function () {
|
|
27
|
+
it('should use custom getNormalizationObjectKey from config', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
28
|
+
var customGetKey, customDataManager, queryKey, normalized;
|
|
29
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
30
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
31
|
+
case 0:
|
|
32
|
+
customGetKey = jest.fn(function (obj) {
|
|
33
|
+
return "custom:".concat(obj.id);
|
|
34
|
+
});
|
|
35
|
+
customDataManager = new ClientDataManager({
|
|
36
|
+
normalizerConfig: {
|
|
37
|
+
getNormalizationObjectKey: customGetKey,
|
|
38
|
+
devLogging: false
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
customDataManager.queryNormalizer.subscribe();
|
|
42
|
+
queryKey = ['users'];
|
|
43
|
+
_context2.next = 6;
|
|
44
|
+
return customDataManager.queryClient.fetchQuery({
|
|
45
|
+
queryKey: queryKey,
|
|
46
|
+
queryFn: function () {
|
|
47
|
+
var _queryFn = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
48
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
49
|
+
while (1) switch (_context.prev = _context.next) {
|
|
50
|
+
case 0:
|
|
51
|
+
return _context.abrupt("return", [{
|
|
52
|
+
id: '1',
|
|
53
|
+
name: 'User 1'
|
|
54
|
+
}]);
|
|
55
|
+
case 1:
|
|
56
|
+
case "end":
|
|
57
|
+
return _context.stop();
|
|
58
|
+
}
|
|
59
|
+
}, _callee);
|
|
60
|
+
}));
|
|
61
|
+
function queryFn() {
|
|
62
|
+
return _queryFn.apply(this, arguments);
|
|
63
|
+
}
|
|
64
|
+
return queryFn;
|
|
65
|
+
}(),
|
|
66
|
+
normalize: true
|
|
67
|
+
});
|
|
68
|
+
case 6:
|
|
69
|
+
normalized = customDataManager.queryNormalizer.getNormalizedData();
|
|
70
|
+
expect(normalized.objects['@@custom:1']).toBeDefined();
|
|
71
|
+
expect(customGetKey).toHaveBeenCalled();
|
|
72
|
+
customDataManager.queryNormalizer.unsubscribe();
|
|
73
|
+
customDataManager.queryClient.clear();
|
|
74
|
+
case 11:
|
|
75
|
+
case "end":
|
|
76
|
+
return _context2.stop();
|
|
77
|
+
}
|
|
78
|
+
}, _callee2);
|
|
79
|
+
})));
|
|
80
|
+
it('should use custom getArrayType from config', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
|
|
81
|
+
var customGetArrayType, customDataManager, queryKey;
|
|
82
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
83
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
84
|
+
case 0:
|
|
85
|
+
customGetArrayType = jest.fn(function (_ref3) {
|
|
86
|
+
var arrayKey = _ref3.arrayKey;
|
|
87
|
+
return "custom:".concat(arrayKey);
|
|
88
|
+
});
|
|
89
|
+
customDataManager = new ClientDataManager({
|
|
90
|
+
normalizerConfig: {
|
|
91
|
+
getArrayType: customGetArrayType,
|
|
92
|
+
devLogging: false
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
customDataManager.queryNormalizer.subscribe();
|
|
96
|
+
queryKey = ['items'];
|
|
97
|
+
_context4.next = 6;
|
|
98
|
+
return customDataManager.queryClient.fetchQuery({
|
|
99
|
+
queryKey: queryKey,
|
|
100
|
+
queryFn: function () {
|
|
101
|
+
var _queryFn2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
102
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
103
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
104
|
+
case 0:
|
|
105
|
+
return _context3.abrupt("return", {
|
|
106
|
+
items: [{
|
|
107
|
+
id: '1',
|
|
108
|
+
name: 'Item 1'
|
|
109
|
+
}]
|
|
110
|
+
});
|
|
111
|
+
case 1:
|
|
112
|
+
case "end":
|
|
113
|
+
return _context3.stop();
|
|
114
|
+
}
|
|
115
|
+
}, _callee3);
|
|
116
|
+
}));
|
|
117
|
+
function queryFn() {
|
|
118
|
+
return _queryFn2.apply(this, arguments);
|
|
119
|
+
}
|
|
120
|
+
return queryFn;
|
|
121
|
+
}(),
|
|
122
|
+
normalize: true
|
|
123
|
+
});
|
|
124
|
+
case 6:
|
|
125
|
+
expect(customGetArrayType).toHaveBeenCalled();
|
|
126
|
+
customDataManager.queryNormalizer.unsubscribe();
|
|
127
|
+
customDataManager.queryClient.clear();
|
|
128
|
+
case 9:
|
|
129
|
+
case "end":
|
|
130
|
+
return _context4.stop();
|
|
131
|
+
}
|
|
132
|
+
}, _callee4);
|
|
133
|
+
})));
|
|
134
|
+
});
|
|
135
|
+
describe('Query-level normalization control', function () {
|
|
136
|
+
it('should normalize when query has normalize: true', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
|
|
137
|
+
var queryKey, normalized;
|
|
138
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
139
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
140
|
+
case 0:
|
|
141
|
+
dataManager.queryNormalizer.subscribe();
|
|
142
|
+
queryKey = ['users-normalized'];
|
|
143
|
+
_context6.next = 4;
|
|
144
|
+
return dataManager.queryClient.fetchQuery({
|
|
145
|
+
queryKey: queryKey,
|
|
146
|
+
queryFn: function () {
|
|
147
|
+
var _queryFn3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
148
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
149
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
150
|
+
case 0:
|
|
151
|
+
return _context5.abrupt("return", [{
|
|
152
|
+
id: '1',
|
|
153
|
+
name: 'User 1'
|
|
154
|
+
}]);
|
|
155
|
+
case 1:
|
|
156
|
+
case "end":
|
|
157
|
+
return _context5.stop();
|
|
158
|
+
}
|
|
159
|
+
}, _callee5);
|
|
160
|
+
}));
|
|
161
|
+
function queryFn() {
|
|
162
|
+
return _queryFn3.apply(this, arguments);
|
|
163
|
+
}
|
|
164
|
+
return queryFn;
|
|
165
|
+
}(),
|
|
166
|
+
normalize: true
|
|
167
|
+
});
|
|
168
|
+
case 4:
|
|
169
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data SHOULD be normalized
|
|
170
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
171
|
+
case 6:
|
|
172
|
+
case "end":
|
|
173
|
+
return _context6.stop();
|
|
174
|
+
}
|
|
175
|
+
}, _callee6);
|
|
176
|
+
})));
|
|
177
|
+
it('should NOT normalize when query has normalize: false', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
|
|
178
|
+
var queryKey, normalized;
|
|
179
|
+
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
180
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
181
|
+
case 0:
|
|
182
|
+
dataManager.queryNormalizer.subscribe();
|
|
183
|
+
queryKey = ['users-not-normalized'];
|
|
184
|
+
_context8.next = 4;
|
|
185
|
+
return dataManager.queryClient.fetchQuery({
|
|
186
|
+
queryKey: queryKey,
|
|
187
|
+
queryFn: function () {
|
|
188
|
+
var _queryFn4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
|
|
189
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
190
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
191
|
+
case 0:
|
|
192
|
+
return _context7.abrupt("return", [{
|
|
193
|
+
id: '2',
|
|
194
|
+
name: 'User 2'
|
|
195
|
+
}]);
|
|
196
|
+
case 1:
|
|
197
|
+
case "end":
|
|
198
|
+
return _context7.stop();
|
|
199
|
+
}
|
|
200
|
+
}, _callee7);
|
|
201
|
+
}));
|
|
202
|
+
function queryFn() {
|
|
203
|
+
return _queryFn4.apply(this, arguments);
|
|
204
|
+
}
|
|
205
|
+
return queryFn;
|
|
206
|
+
}(),
|
|
207
|
+
normalize: false
|
|
208
|
+
});
|
|
209
|
+
case 4:
|
|
210
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data should NOT be normalized
|
|
211
|
+
expect(normalized.objects['@@2']).toBeUndefined();
|
|
212
|
+
case 6:
|
|
213
|
+
case "end":
|
|
214
|
+
return _context8.stop();
|
|
215
|
+
}
|
|
216
|
+
}, _callee8);
|
|
217
|
+
})));
|
|
218
|
+
it('should normalize by default when normalize option is not provided', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
|
|
219
|
+
var queryKey, normalized;
|
|
220
|
+
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
221
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
222
|
+
case 0:
|
|
223
|
+
dataManager.queryNormalizer.subscribe();
|
|
224
|
+
queryKey = ['users-default'];
|
|
225
|
+
_context10.next = 4;
|
|
226
|
+
return dataManager.queryClient.fetchQuery({
|
|
227
|
+
queryKey: queryKey,
|
|
228
|
+
queryFn: function () {
|
|
229
|
+
var _queryFn5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
|
|
230
|
+
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
231
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
232
|
+
case 0:
|
|
233
|
+
return _context9.abrupt("return", [{
|
|
234
|
+
id: '3',
|
|
235
|
+
name: 'User 3'
|
|
236
|
+
}]);
|
|
237
|
+
case 1:
|
|
238
|
+
case "end":
|
|
239
|
+
return _context9.stop();
|
|
240
|
+
}
|
|
241
|
+
}, _callee9);
|
|
242
|
+
}));
|
|
243
|
+
function queryFn() {
|
|
244
|
+
return _queryFn5.apply(this, arguments);
|
|
245
|
+
}
|
|
246
|
+
return queryFn;
|
|
247
|
+
}()
|
|
248
|
+
});
|
|
249
|
+
case 4:
|
|
250
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data SHOULD be normalized (default behavior is now true)
|
|
251
|
+
expect(normalized.objects['@@3']).toBeDefined();
|
|
252
|
+
case 6:
|
|
253
|
+
case "end":
|
|
254
|
+
return _context10.stop();
|
|
255
|
+
}
|
|
256
|
+
}, _callee10);
|
|
257
|
+
})));
|
|
258
|
+
});
|
|
259
|
+
describe('DataSourceProvider integration', function () {
|
|
260
|
+
it('should auto-subscribe queryNormalizer on mount', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {
|
|
261
|
+
var wrapper, dataSource, _renderHook, result, normalized;
|
|
262
|
+
return _regeneratorRuntime().wrap(function _callee12$(_context12) {
|
|
263
|
+
while (1) switch (_context12.prev = _context12.next) {
|
|
264
|
+
case 0:
|
|
265
|
+
wrapper = function wrapper(_ref8) {
|
|
266
|
+
var children = _ref8.children;
|
|
267
|
+
return /*#__PURE__*/_jsx(DataSourceProvider, {
|
|
268
|
+
dataManager: dataManager,
|
|
269
|
+
children: children
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
dataSource = makePlainQueryDataSource({
|
|
273
|
+
name: 'users',
|
|
274
|
+
fetch: function () {
|
|
275
|
+
var _fetch = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
|
|
276
|
+
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
277
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
278
|
+
case 0:
|
|
279
|
+
return _context11.abrupt("return", [{
|
|
280
|
+
id: '1',
|
|
281
|
+
name: 'User 1'
|
|
282
|
+
}]);
|
|
283
|
+
case 1:
|
|
284
|
+
case "end":
|
|
285
|
+
return _context11.stop();
|
|
286
|
+
}
|
|
287
|
+
}, _callee11);
|
|
288
|
+
}));
|
|
289
|
+
function fetch() {
|
|
290
|
+
return _fetch.apply(this, arguments);
|
|
291
|
+
}
|
|
292
|
+
return fetch;
|
|
293
|
+
}(),
|
|
294
|
+
options: {
|
|
295
|
+
normalize: true
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
_renderHook = renderHook(function () {
|
|
299
|
+
return useQueryData(dataSource, {});
|
|
300
|
+
}, {
|
|
301
|
+
wrapper: wrapper
|
|
302
|
+
}), result = _renderHook.result;
|
|
303
|
+
_context12.next = 5;
|
|
304
|
+
return waitFor(function () {
|
|
305
|
+
return expect(result.current.status).toBe('success');
|
|
306
|
+
});
|
|
307
|
+
case 5:
|
|
308
|
+
normalized = dataManager.queryNormalizer.getNormalizedData(); // Data should be normalized because DataSourceProvider subscribes automatically
|
|
309
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
310
|
+
case 7:
|
|
311
|
+
case "end":
|
|
312
|
+
return _context12.stop();
|
|
313
|
+
}
|
|
314
|
+
}, _callee12);
|
|
315
|
+
})));
|
|
316
|
+
it('should work with multiple queries', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee15() {
|
|
317
|
+
var wrapper, dataSource1, dataSource2, _renderHook2, result1, _renderHook3, result2, normalized;
|
|
318
|
+
return _regeneratorRuntime().wrap(function _callee15$(_context15) {
|
|
319
|
+
while (1) switch (_context15.prev = _context15.next) {
|
|
320
|
+
case 0:
|
|
321
|
+
wrapper = function wrapper(_ref10) {
|
|
322
|
+
var children = _ref10.children;
|
|
323
|
+
return /*#__PURE__*/_jsx(DataSourceProvider, {
|
|
324
|
+
dataManager: dataManager,
|
|
325
|
+
children: children
|
|
326
|
+
});
|
|
327
|
+
};
|
|
328
|
+
dataSource1 = makePlainQueryDataSource({
|
|
329
|
+
name: 'users',
|
|
330
|
+
fetch: function () {
|
|
331
|
+
var _fetch2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee13() {
|
|
332
|
+
return _regeneratorRuntime().wrap(function _callee13$(_context13) {
|
|
333
|
+
while (1) switch (_context13.prev = _context13.next) {
|
|
334
|
+
case 0:
|
|
335
|
+
return _context13.abrupt("return", [{
|
|
336
|
+
id: '1',
|
|
337
|
+
name: 'User 1'
|
|
338
|
+
}]);
|
|
339
|
+
case 1:
|
|
340
|
+
case "end":
|
|
341
|
+
return _context13.stop();
|
|
342
|
+
}
|
|
343
|
+
}, _callee13);
|
|
344
|
+
}));
|
|
345
|
+
function fetch() {
|
|
346
|
+
return _fetch2.apply(this, arguments);
|
|
347
|
+
}
|
|
348
|
+
return fetch;
|
|
349
|
+
}(),
|
|
350
|
+
options: {
|
|
351
|
+
normalize: true
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
dataSource2 = makePlainQueryDataSource({
|
|
355
|
+
name: 'posts',
|
|
356
|
+
fetch: function () {
|
|
357
|
+
var _fetch3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee14() {
|
|
358
|
+
return _regeneratorRuntime().wrap(function _callee14$(_context14) {
|
|
359
|
+
while (1) switch (_context14.prev = _context14.next) {
|
|
360
|
+
case 0:
|
|
361
|
+
return _context14.abrupt("return", [{
|
|
362
|
+
id: '2',
|
|
363
|
+
title: 'Post 1'
|
|
364
|
+
}]);
|
|
365
|
+
case 1:
|
|
366
|
+
case "end":
|
|
367
|
+
return _context14.stop();
|
|
368
|
+
}
|
|
369
|
+
}, _callee14);
|
|
370
|
+
}));
|
|
371
|
+
function fetch() {
|
|
372
|
+
return _fetch3.apply(this, arguments);
|
|
373
|
+
}
|
|
374
|
+
return fetch;
|
|
375
|
+
}(),
|
|
376
|
+
options: {
|
|
377
|
+
normalize: true
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
_renderHook2 = renderHook(function () {
|
|
381
|
+
return useQueryData(dataSource1, {});
|
|
382
|
+
}, {
|
|
383
|
+
wrapper: wrapper
|
|
384
|
+
}), result1 = _renderHook2.result;
|
|
385
|
+
_renderHook3 = renderHook(function () {
|
|
386
|
+
return useQueryData(dataSource2, {});
|
|
387
|
+
}, {
|
|
388
|
+
wrapper: wrapper
|
|
389
|
+
}), result2 = _renderHook3.result;
|
|
390
|
+
_context15.next = 7;
|
|
391
|
+
return waitFor(function () {
|
|
392
|
+
expect(result1.current.status).toBe('success');
|
|
393
|
+
expect(result2.current.status).toBe('success');
|
|
394
|
+
});
|
|
395
|
+
case 7:
|
|
396
|
+
normalized = dataManager.queryNormalizer.getNormalizedData();
|
|
397
|
+
expect(normalized.objects['@@1']).toBeDefined();
|
|
398
|
+
expect(normalized.objects['@@2']).toBeDefined();
|
|
399
|
+
case 10:
|
|
400
|
+
case "end":
|
|
401
|
+
return _context15.stop();
|
|
402
|
+
}
|
|
403
|
+
}, _callee15);
|
|
404
|
+
})));
|
|
405
|
+
});
|
|
406
|
+
describe('Optimistic updates configuration', function () {
|
|
407
|
+
it('should enable optimistic updates when configured', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee16() {
|
|
408
|
+
var dmWithOptimistic, queryKey, initialData, data;
|
|
409
|
+
return _regeneratorRuntime().wrap(function _callee16$(_context16) {
|
|
410
|
+
while (1) switch (_context16.prev = _context16.next) {
|
|
411
|
+
case 0:
|
|
412
|
+
dmWithOptimistic = new ClientDataManager({
|
|
413
|
+
normalizerConfig: {
|
|
414
|
+
devLogging: false,
|
|
415
|
+
optimistic: true
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
expect(dmWithOptimistic.queryNormalizer).toBeDefined();
|
|
419
|
+
dmWithOptimistic.queryNormalizer.subscribe();
|
|
420
|
+
queryKey = ['users'];
|
|
421
|
+
initialData = [{
|
|
422
|
+
id: '1',
|
|
423
|
+
name: 'Old'
|
|
424
|
+
}];
|
|
425
|
+
dmWithOptimistic.queryClient.setQueryData(queryKey, initialData);
|
|
426
|
+
dmWithOptimistic.normalizer.setQuery(JSON.stringify(queryKey), initialData);
|
|
427
|
+
|
|
428
|
+
// Manual optimistic update via setNormalizedData
|
|
429
|
+
dmWithOptimistic.queryNormalizer.setNormalizedData({
|
|
430
|
+
id: '1',
|
|
431
|
+
name: 'New'
|
|
432
|
+
});
|
|
433
|
+
data = dmWithOptimistic.queryClient.getQueryData(queryKey);
|
|
434
|
+
expect(data[0].name).toBe('New');
|
|
435
|
+
dmWithOptimistic.queryNormalizer.unsubscribe();
|
|
436
|
+
dmWithOptimistic.queryClient.clear();
|
|
437
|
+
case 12:
|
|
438
|
+
case "end":
|
|
439
|
+
return _context16.stop();
|
|
440
|
+
}
|
|
441
|
+
}, _callee16);
|
|
442
|
+
})));
|
|
443
|
+
it('should work with optimistic config object', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee17() {
|
|
444
|
+
var dmWithOptimisticConfig;
|
|
445
|
+
return _regeneratorRuntime().wrap(function _callee17$(_context17) {
|
|
446
|
+
while (1) switch (_context17.prev = _context17.next) {
|
|
447
|
+
case 0:
|
|
448
|
+
dmWithOptimisticConfig = new ClientDataManager({
|
|
449
|
+
normalizerConfig: {
|
|
450
|
+
devLogging: false,
|
|
451
|
+
optimistic: {
|
|
452
|
+
autoCalculateRollback: true,
|
|
453
|
+
devLogging: false
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
expect(dmWithOptimisticConfig.queryNormalizer).toBeDefined();
|
|
458
|
+
expect(dmWithOptimisticConfig.normalizer).toBeDefined();
|
|
459
|
+
dmWithOptimisticConfig.queryClient.clear();
|
|
460
|
+
case 4:
|
|
461
|
+
case "end":
|
|
462
|
+
return _context17.stop();
|
|
463
|
+
}
|
|
464
|
+
}, _callee17);
|
|
465
|
+
})));
|
|
466
|
+
});
|
|
467
|
+
describe('Invalidate configuration', function () {
|
|
468
|
+
it('should support invalidate option in global config', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee18() {
|
|
469
|
+
var dmWithInvalidate;
|
|
470
|
+
return _regeneratorRuntime().wrap(function _callee18$(_context18) {
|
|
471
|
+
while (1) switch (_context18.prev = _context18.next) {
|
|
472
|
+
case 0:
|
|
473
|
+
dmWithInvalidate = new ClientDataManager({
|
|
474
|
+
normalizerConfig: {
|
|
475
|
+
devLogging: false,
|
|
476
|
+
invalidate: true
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
expect(dmWithInvalidate.queryNormalizer).toBeDefined();
|
|
480
|
+
expect(dmWithInvalidate.normalizer).toBeDefined();
|
|
481
|
+
dmWithInvalidate.queryClient.clear();
|
|
482
|
+
case 4:
|
|
483
|
+
case "end":
|
|
484
|
+
return _context18.stop();
|
|
485
|
+
}
|
|
486
|
+
}, _callee18);
|
|
487
|
+
})));
|
|
488
|
+
it('should support both optimistic and invalidate options', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee19() {
|
|
489
|
+
var dmWithBoth;
|
|
490
|
+
return _regeneratorRuntime().wrap(function _callee19$(_context19) {
|
|
491
|
+
while (1) switch (_context19.prev = _context19.next) {
|
|
492
|
+
case 0:
|
|
493
|
+
dmWithBoth = new ClientDataManager({
|
|
494
|
+
normalizerConfig: {
|
|
495
|
+
devLogging: false,
|
|
496
|
+
optimistic: true,
|
|
497
|
+
invalidate: true
|
|
498
|
+
}
|
|
499
|
+
});
|
|
500
|
+
expect(dmWithBoth.queryNormalizer).toBeDefined();
|
|
501
|
+
expect(dmWithBoth.normalizer).toBeDefined();
|
|
502
|
+
dmWithBoth.queryClient.clear();
|
|
503
|
+
case 4:
|
|
504
|
+
case "end":
|
|
505
|
+
return _context19.stop();
|
|
506
|
+
}
|
|
507
|
+
}, _callee19);
|
|
508
|
+
})));
|
|
509
|
+
});
|
|
510
|
+
});
|
|
511
|
+
// #sourceMappingURL=threeLevelIntegration.test.js.map
|