nuxt-openapi-hyperfetch 0.3.81-beta → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +220 -212
- package/dist/generators/components/connector-generator/templates.js +67 -17
- package/dist/generators/components/schema-analyzer/intent-detector.js +1 -12
- package/dist/generators/components/schema-analyzer/openapi-reader.js +10 -1
- package/dist/generators/components/schema-analyzer/resource-grouper.js +7 -0
- package/dist/generators/components/schema-analyzer/schema-field-mapper.js +1 -22
- package/dist/generators/components/schema-analyzer/types.d.ts +10 -0
- package/dist/generators/connectors/generator.d.ts +12 -0
- package/dist/generators/connectors/generator.js +115 -0
- package/dist/generators/connectors/runtime/connector-types.d.ts +147 -0
- package/dist/generators/connectors/runtime/connector-types.js +10 -0
- package/dist/generators/connectors/runtime/useCreateConnector.d.ts +26 -0
- package/dist/generators/connectors/runtime/useCreateConnector.js +156 -0
- package/dist/generators/connectors/runtime/useDeleteConnector.d.ts +30 -0
- package/dist/generators/connectors/runtime/useDeleteConnector.js +143 -0
- package/dist/generators/connectors/runtime/useGetAllConnector.d.ts +25 -0
- package/dist/generators/connectors/runtime/useGetAllConnector.js +127 -0
- package/dist/generators/connectors/runtime/useGetConnector.d.ts +15 -0
- package/dist/generators/connectors/runtime/useGetConnector.js +99 -0
- package/dist/generators/connectors/runtime/useUpdateConnector.d.ts +34 -0
- package/dist/generators/connectors/runtime/useUpdateConnector.js +211 -0
- package/dist/generators/connectors/runtime/zod-error-merger.d.ts +23 -0
- package/dist/generators/connectors/runtime/zod-error-merger.js +106 -0
- package/dist/generators/connectors/templates.d.ts +4 -0
- package/dist/generators/connectors/templates.js +376 -0
- package/dist/generators/connectors/types.d.ts +37 -0
- package/dist/generators/connectors/types.js +7 -0
- package/dist/generators/shared/runtime/useDeleteConnector.js +4 -2
- package/dist/generators/shared/runtime/useDetailConnector.d.ts +0 -1
- package/dist/generators/shared/runtime/useDetailConnector.js +9 -20
- package/dist/generators/shared/runtime/useFormConnector.js +4 -3
- package/dist/generators/use-async-data/runtime/useApiAsyncData.js +14 -5
- package/dist/generators/use-async-data/templates.js +20 -16
- package/dist/generators/use-fetch/templates.js +1 -1
- package/dist/index.js +1 -16
- package/dist/module/index.js +2 -3
- package/package.json +4 -3
- package/src/cli/prompts.ts +1 -7
- package/src/generators/components/connector-generator/templates.ts +97 -22
- package/src/generators/components/schema-analyzer/intent-detector.ts +1 -16
- package/src/generators/components/schema-analyzer/openapi-reader.ts +14 -1
- package/src/generators/components/schema-analyzer/resource-grouper.ts +9 -0
- package/src/generators/components/schema-analyzer/schema-field-mapper.ts +1 -26
- package/src/generators/components/schema-analyzer/types.ts +11 -0
- package/src/generators/connectors/generator.ts +137 -0
- package/src/generators/connectors/runtime/connector-types.ts +207 -0
- package/src/generators/connectors/runtime/useCreateConnector.ts +199 -0
- package/src/generators/connectors/runtime/useDeleteConnector.ts +179 -0
- package/src/generators/connectors/runtime/useGetAllConnector.ts +151 -0
- package/src/generators/connectors/runtime/useGetConnector.ts +120 -0
- package/src/generators/connectors/runtime/useUpdateConnector.ts +257 -0
- package/src/generators/connectors/runtime/zod-error-merger.ts +119 -0
- package/src/generators/connectors/templates.ts +481 -0
- package/src/generators/connectors/types.ts +39 -0
- package/src/generators/shared/runtime/useDeleteConnector.ts +4 -2
- package/src/generators/shared/runtime/useDetailConnector.ts +8 -19
- package/src/generators/shared/runtime/useFormConnector.ts +4 -3
- package/src/generators/use-async-data/runtime/useApiAsyncData.ts +16 -5
- package/src/generators/use-async-data/templates.ts +24 -16
- package/src/generators/use-fetch/templates.ts +1 -1
- package/src/index.ts +2 -19
- package/src/module/index.ts +2 -5
- package/docs/generated-components.md +0 -615
- package/docs/headless-composables-ui.md +0 -569
|
@@ -15,7 +15,6 @@ function generateFileHeader(): string {
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
/* eslint-disable */
|
|
18
|
-
// @ts-nocheck
|
|
19
18
|
`;
|
|
20
19
|
}
|
|
21
20
|
|
|
@@ -123,6 +122,18 @@ function generateImports(method: MethodInfo, apiImportPath: string, isRaw: boole
|
|
|
123
122
|
imports += `import { useApiAsyncData, type ApiAsyncDataOptions } from '../runtime/useApiAsyncData';`;
|
|
124
123
|
}
|
|
125
124
|
|
|
125
|
+
// Vue imports needed by the generated function body
|
|
126
|
+
const vueImports: string[] = ['shallowRef'];
|
|
127
|
+
if (method.requestType) {
|
|
128
|
+
vueImports.push('isRef');
|
|
129
|
+
}
|
|
130
|
+
if (method.hasBody || method.hasQueryParams || method.pathParams.length > 0) {
|
|
131
|
+
vueImports.push('computed');
|
|
132
|
+
}
|
|
133
|
+
const vueTypeImports = method.requestType ? ['Ref', 'ComputedRef'] : [];
|
|
134
|
+
const allVueImports = [...vueImports, ...vueTypeImports.map((t) => `type ${t}`)].join(', ');
|
|
135
|
+
imports += `\nimport { ${allVueImports} } from 'vue';`;
|
|
136
|
+
|
|
126
137
|
return imports;
|
|
127
138
|
}
|
|
128
139
|
|
|
@@ -170,26 +181,23 @@ function generateFunctionBody(
|
|
|
170
181
|
? `ReturnType<typeof ${wrapperFunction}<${responseType}, DataT, PickT, Options>>`
|
|
171
182
|
: `ReturnType<typeof ${wrapperFunction}<${responseType}, Options>>`;
|
|
172
183
|
|
|
173
|
-
const pInit = hasParams ? `\n const p = shallowRef(params)` : '';
|
|
184
|
+
const pInit = hasParams ? `\n const p = isRef(params) ? params : shallowRef(params)` : '';
|
|
174
185
|
|
|
175
186
|
const argsExtraction = hasParams
|
|
176
187
|
? ` const _hasKey = typeof args[0] === 'string'\n const params = _hasKey ? args[1] : args[0]\n const options = _hasKey ? { cacheKey: args[0], ...args[2] } : args[1]`
|
|
177
188
|
: ` const _hasKey = typeof args[0] === 'string'\n const options = _hasKey ? { cacheKey: args[0], ...args[1] } : args[0]`;
|
|
178
189
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
export function ${composableName}(...args: any[]) {
|
|
190
|
-
${argsExtraction}${pInit}
|
|
191
|
-
return ${wrapperCall}(${key}, ${url}, ${fetchOptions})
|
|
192
|
-
}`;
|
|
190
|
+
const genericTypeParams = `<\n DataT = ${responseType},\n PickT extends ReadonlyArray<string> | undefined = undefined,\n Options extends ${optionsType} = ${optionsDefaultType}\n>`;
|
|
191
|
+
|
|
192
|
+
const refParamsStr = hasParams
|
|
193
|
+
? `params: Ref<${method.requestType}> | ComputedRef<${method.requestType}>, ${optionsArg}`
|
|
194
|
+
: '';
|
|
195
|
+
|
|
196
|
+
const refOverloads = hasParams
|
|
197
|
+
? `\nexport function ${composableName}${genericTypeParams}(${refParamsStr}): ${returnType}\nexport function ${composableName}${genericTypeParams}(key: string, ${refParamsStr}): ${returnType}`
|
|
198
|
+
: '';
|
|
199
|
+
|
|
200
|
+
return `${description}export function ${composableName}${genericTypeParams}(${args}): ${returnType}\nexport function ${composableName}${genericTypeParams}(key: string, ${args}): ${returnType}${refOverloads}\nexport function ${composableName}(...args: any[]) {\n${argsExtraction}${pInit}\n return ${wrapperCall}(${key}, ${url}, ${fetchOptions})\n}`;
|
|
193
201
|
}
|
|
194
202
|
|
|
195
203
|
/**
|
|
@@ -126,7 +126,7 @@ function generateFunctionBody(method: MethodInfo, options?: GenerateOptions): st
|
|
|
126
126
|
|
|
127
127
|
const description = method.description ? `/**\n * ${method.description}\n */\n` : '';
|
|
128
128
|
|
|
129
|
-
const pInit = hasParams ? `\n const p = shallowRef(params)` : '';
|
|
129
|
+
const pInit = hasParams ? `\n const p = isRef(params) ? params : shallowRef(params)` : '';
|
|
130
130
|
|
|
131
131
|
return `${description}export const ${method.composableName} = <
|
|
132
132
|
DataT = ${responseType},
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import * as p from '@clack/prompts';
|
|
4
|
-
import { existsSync } from 'fs';
|
|
5
|
-
import * as path from 'path';
|
|
6
4
|
import { generateOpenApiFiles, generateHeyApiFiles, checkJavaInstalled } from './generate.js';
|
|
7
5
|
import { generateUseFetchComposables } from './generators/use-fetch/generator.js';
|
|
8
6
|
import { generateUseAsyncDataComposables } from './generators/use-async-data/generator.js';
|
|
9
7
|
import { generateNuxtServerRoutes } from './generators/nuxt-server/generator.js';
|
|
10
|
-
import { generateConnectors } from './generators/
|
|
8
|
+
import { generateConnectors } from './generators/connectors/generator.js';
|
|
11
9
|
import {
|
|
12
10
|
promptInitialInputs,
|
|
13
11
|
promptInputPath,
|
|
@@ -114,7 +112,7 @@ program
|
|
|
114
112
|
: config.generator === 'heyapi'
|
|
115
113
|
? 'heyapi'
|
|
116
114
|
: config.backend;
|
|
117
|
-
|
|
115
|
+
|
|
118
116
|
const backend = await promptGeneratorBackend(resolvedBackend);
|
|
119
117
|
|
|
120
118
|
// Check Java availability when official backend is selected
|
|
@@ -209,7 +207,6 @@ program
|
|
|
209
207
|
const spinner = p.spinner();
|
|
210
208
|
spinner.start(`Generating ${composable}...`);
|
|
211
209
|
|
|
212
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
213
210
|
const generateOptions = { baseUrl: config.baseUrl, backend };
|
|
214
211
|
|
|
215
212
|
try {
|
|
@@ -240,7 +237,6 @@ program
|
|
|
240
237
|
break;
|
|
241
238
|
case 'nuxtServer':
|
|
242
239
|
if (!config.dryRun) {
|
|
243
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
244
240
|
await generateNuxtServerRoutes(outputPath, serverRoutePath, { enableBff, backend });
|
|
245
241
|
spinner.stop(`✓ Generated Nuxt server routes`);
|
|
246
242
|
} else {
|
|
@@ -255,19 +251,6 @@ program
|
|
|
255
251
|
}
|
|
256
252
|
|
|
257
253
|
// Generate headless connectors if requested (requires useAsyncData)
|
|
258
|
-
if (generateConnectorsFlag) {
|
|
259
|
-
// Check zod is available in the user's project by probing their node_modules,
|
|
260
|
-
// not via import() which resolves from the CLI's own context (npx sandbox).
|
|
261
|
-
const zodPath = path.resolve(process.cwd(), 'node_modules', 'zod');
|
|
262
|
-
if (!existsSync(zodPath)) {
|
|
263
|
-
p.log.warn(
|
|
264
|
-
'Skipping connectors: "zod" is not installed in this project.\n' +
|
|
265
|
-
' Run: npm install zod'
|
|
266
|
-
);
|
|
267
|
-
generateConnectorsFlag = false;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
254
|
if (generateConnectorsFlag) {
|
|
272
255
|
const spinner = p.spinner();
|
|
273
256
|
spinner.start('Generating headless UI connectors...');
|
package/src/module/index.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { checkJavaInstalled } from '../generate.js';
|
|
|
5
5
|
import { generateUseFetchComposables } from '../generators/use-fetch/generator.js';
|
|
6
6
|
import { generateUseAsyncDataComposables } from '../generators/use-async-data/generator.js';
|
|
7
7
|
import { generateNuxtServerRoutes } from '../generators/nuxt-server/generator.js';
|
|
8
|
-
import { generateConnectors } from '../generators/
|
|
8
|
+
import { generateConnectors } from '../generators/connectors/generator.js';
|
|
9
9
|
import { createConsoleLogger } from '../cli/logger.js';
|
|
10
10
|
import type { ModuleOptions } from './types.js';
|
|
11
11
|
|
|
@@ -103,10 +103,7 @@ export default defineNuxtModule<ModuleOptions>({
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// 3. Generate headless connectors if requested (requires useAsyncData)
|
|
106
|
-
if (
|
|
107
|
-
options.createUseAsyncDataConnectors &&
|
|
108
|
-
selectedGenerators.includes('useAsyncData')
|
|
109
|
-
) {
|
|
106
|
+
if (options.createUseAsyncDataConnectors && selectedGenerators.includes('useAsyncData')) {
|
|
110
107
|
const connectorsOutputDir = path.join(composablesOutputDir, 'connectors');
|
|
111
108
|
await generateConnectors(
|
|
112
109
|
{
|