Generate TanStack Query options from AWS SDK clients
npm install aws-tanstack-queryGenerate type-safe TanStack Query options from AWS SDK v3 clients.
``bash`
npm install aws-tanstack-query
Create a generate.ts file:
`typescript
import { SmithyTanStackQuery, generate } from 'aws-tanstack-query';
const dynamodb = new SmithyTanStackQuery({
name: 'DynamoDB',
client: '@aws-sdk/client-dynamodb',
outDir: './src/generated/dynamodb',
});
await generate([dynamodb]);
`
Run it:
`bash`
npx tsx generate.tsor
bun run generate.ts
This generates type-safe query options you can use directly with TanStack Query:
`typescript
import { useQuery, useMutation } from '@tanstack/react-query';
import { getItemQueryOptions, putItemMutationOptions, dynamoDBKeys } from './generated/dynamodb';
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
// Queries
function useGetItem(tableName: string, key: Record
return useQuery(
getItemQueryOptions({
client,
input: { TableName: tableName, Key: key },
})
);
}
// Mutations with invalidation
function usePutItem() {
const queryClient = useQueryClient();
return useMutation({
...putItemMutationOptions({ client }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: dynamoDBKeys.all });
},
});
}
`
`typescript
new SmithyTanStackQuery({
// Required
name: 'DynamoDB', // Service name for generated code
client: '@aws-sdk/client-dynamodb', // AWS SDK package name
outDir: './src/generated/dynamodb', // Output directory
// Optional
include: ['Get', 'Put', 'Query'], // Glob patterns to include
exclude: ['Backup'], // Glob patterns to exclude
mutations: true, // Generate mutations (default: true)
queryKeyPrefix: ['aws', 'dynamodb'], // Custom query key prefix
format: true, // Format with Prettier (default: true)
});
`
`typescript
import { SmithyTanStackQuery, generate } from 'aws-tanstack-query';
const dynamodb = new SmithyTanStackQuery({
name: 'DynamoDB',
client: '@aws-sdk/client-dynamodb',
outDir: './src/generated/dynamodb',
});
const s3 = new SmithyTanStackQuery({
name: 'S3',
client: '@aws-sdk/client-s3',
outDir: './src/generated/s3',
});
await generate([dynamodb, s3]);
`
``
src/generated/dynamodb/
├── index.ts # Re-exports everything
├── query-keys.ts # Query key factory (dynamoDBKeys)
├── queries.ts # queryOptions for read operations
├── mutations.ts # mutationOptions for write operations
└── create-queries.ts # Factory function
You can also use the CLI:
`bashCreate a config file
npx aws-tanstack-query init
MIT