Skip to content

Commit 3e23e4f

Browse files
authored
Merge pull request #45 from rtk-incubator/rtkq-0.3-support
RTK Query 0.3 support
2 parents 1edadd8 + c52d6f7 commit 3e23e4f

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

src/generate.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,42 @@ export async function generateApi(
121121
),
122122
]);
123123

124+
const isUsingFetchBaseQuery = baseQuery === 'fetchBaseQuery';
125+
126+
function getBasePackageImportsFromOptions() {
127+
return hooks
128+
? {
129+
...(isUsingFetchBaseQuery ? { fetchBaseQuery: 'fetchBaseQuery' } : {}),
130+
}
131+
: {
132+
createApi: 'createApi',
133+
...(isUsingFetchBaseQuery ? { fetchBaseQuery: 'fetchBaseQuery' } : {}),
134+
};
135+
}
136+
137+
const hasBasePackageImports = Object.keys(getBasePackageImportsFromOptions()).length > 0;
138+
124139
const sourceCode = printer.printNode(
125140
ts.EmitHint.Unspecified,
126141
factory.createSourceFile(
127142
[
128-
generateImportNode('@rtk-incubator/rtk-query', {
129-
createApi: 'createApi',
130-
...(baseQuery === 'fetchBaseQuery' ? { fetchBaseQuery: 'fetchBaseQuery' } : {}),
131-
}),
143+
// If hooks are specified, we need to import them from the react entry point in RTKQ >= 0.3
144+
...(hooks
145+
? [
146+
generateImportNode('@rtk-incubator/rtk-query/react', {
147+
createApi: 'createApi',
148+
}),
149+
]
150+
: []),
151+
...(hasBasePackageImports
152+
? [generateImportNode('@rtk-incubator/rtk-query', getBasePackageImportsFromOptions())]
153+
: []),
132154
...(customBaseQueryNode ? [customBaseQueryNode] : []),
133155
generateCreateApiCall({
134156
exportName,
135157
reducerPath,
136158
createApiFn: factory.createIdentifier('createApi'),
137-
baseQuery: baseQuery === 'fetchBaseQuery' ? fetchBaseQueryCall : factory.createIdentifier(baseQuery),
159+
baseQuery: isUsingFetchBaseQuery ? fetchBaseQueryCall : factory.createIdentifier(baseQuery),
138160
entityTypes: generateEntityTypes({ v3Doc, operationDefinitions }),
139161
endpointDefinitions: factory.createObjectLiteralExpression(
140162
operationDefinitions.map((operationDefinition) =>

test/__snapshots__/cli.test.ts.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,8 @@ export type User = {
497497
`;
498498

499499
exports[`CLI options testing should generate react hooks as a part of the output 1`] = `
500-
import { createApi, fetchBaseQuery } from "@rtk-incubator/rtk-query";
500+
import { createApi } from "@rtk-incubator/rtk-query/react";
501+
import { fetchBaseQuery } from "@rtk-incubator/rtk-query";
501502
export const api = createApi({
502503
baseQuery: fetchBaseQuery({ baseUrl: "/api/v3" }),
503504
entityTypes: [],

test/cli.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ describe('CLI options testing', () => {
8888
expect(numberOfHooks).toEqual(expectedHooks.length);
8989
});
9090

91+
it('should contain the right imports when using hooks and a custom base query', async () => {
92+
const result = await cli(
93+
['-h', `--baseQuery`, `test/fixtures/customBaseQuery.ts:anotherNamedBaseQuery`, `./test/fixtures/petstore.json`],
94+
'.'
95+
);
96+
97+
expect(result.stdout).toContain(`import { createApi } from \"@rtk-incubator/rtk-query/react\";`);
98+
expect(result.stdout).toContain(`import { anotherNamedBaseQuery } from \"test/fixtures/customBaseQuery\";`);
99+
});
100+
91101
it('should call fetchBaseQuery with the url provided to --baseUrl', async () => {
92102
const result = await cli([`--baseUrl`, `http://swagger.io`, `./test/fixtures/petstore.json`], '.');
93103

0 commit comments

Comments
 (0)