nuxt-openapi-hyperfetch 1.0.3 → 1.0.4
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 +105 -48
- package/dist/cli/config.d.ts +15 -49
- package/dist/cli/config.js +42 -6
- package/dist/config/connectors.d.ts +6 -0
- package/dist/config/connectors.js +26 -0
- package/dist/config/types.d.ts +62 -0
- package/dist/config/types.js +1 -0
- package/dist/generators/connectors/config-resolver.d.ts +3 -0
- package/dist/generators/connectors/config-resolver.js +207 -0
- package/dist/generators/connectors/generator.js +3 -1
- package/dist/generators/connectors/templates.js +6 -2
- package/dist/generators/connectors/types.d.ts +3 -0
- package/dist/index.js +27 -10
- package/dist/module/index.js +11 -3
- package/dist/module/types.d.ts +4 -4
- package/docs/QUICK-START.md +44 -4
- package/package.json +14 -8
- package/src/cli/config.ts +61 -57
- package/src/config/connectors.ts +48 -0
- package/src/config/types.ts +67 -0
- package/src/generators/connectors/config-resolver.ts +303 -0
- package/src/generators/connectors/generator.ts +3 -1
- package/src/generators/connectors/templates.ts +5 -2
- package/src/generators/connectors/types.ts +4 -0
- package/src/index.ts +41 -12
- package/src/module/index.ts +18 -3
- package/src/module/types.ts +4 -4
package/src/index.ts
CHANGED
|
@@ -17,7 +17,15 @@ import {
|
|
|
17
17
|
} from './cli/prompts.js';
|
|
18
18
|
import { MESSAGES } from './cli/messages.js';
|
|
19
19
|
import { displayLogo } from './cli/logo.js';
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
loadConfig,
|
|
22
|
+
mergeConfig,
|
|
23
|
+
parseTags,
|
|
24
|
+
parseGenerators,
|
|
25
|
+
normalizeGenerators,
|
|
26
|
+
type ComposableGeneratorType,
|
|
27
|
+
} from './cli/config.js';
|
|
28
|
+
import { hasConnectorsConfig } from './config/connectors.js';
|
|
21
29
|
|
|
22
30
|
const program = new Command();
|
|
23
31
|
|
|
@@ -54,7 +62,7 @@ program
|
|
|
54
62
|
.option('--dry-run', 'Preview changes without writing files', false)
|
|
55
63
|
.option('-v, --verbose', 'Enable verbose logging', false)
|
|
56
64
|
.option('--watch', 'Watch mode - regenerate on file changes', false)
|
|
57
|
-
.option('--generators <types>', 'Generators to use: useFetch,useAsyncData,nuxtServer')
|
|
65
|
+
.option('--generators <types>', 'Generators to use: useFetch,useAsyncData,nuxtServer,connectors')
|
|
58
66
|
.option('--connectors', 'Generate headless UI connectors on top of useAsyncData', false)
|
|
59
67
|
.option('--server-route-path <path>', 'Server route path (for nuxtServer mode)')
|
|
60
68
|
.option('--enable-bff', 'Enable BFF pattern (for nuxtServer mode)', false)
|
|
@@ -127,19 +135,28 @@ program
|
|
|
127
135
|
}
|
|
128
136
|
|
|
129
137
|
// 1. Determine composables to generate FIRST
|
|
130
|
-
let composables:
|
|
138
|
+
let composables: ComposableGeneratorType[];
|
|
139
|
+
let generateConnectorsFlag = false;
|
|
140
|
+
const connectorsConfigured = hasConnectorsConfig(config.connectors);
|
|
131
141
|
|
|
132
142
|
if (config.generators) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
143
|
+
const normalized = normalizeGenerators(
|
|
144
|
+
config.generators,
|
|
145
|
+
config.createUseAsyncDataConnectors
|
|
136
146
|
);
|
|
147
|
+
composables = normalized.composables;
|
|
148
|
+
generateConnectorsFlag = normalized.generateConnectors;
|
|
137
149
|
if (config.verbose) {
|
|
138
150
|
console.log(`Using generators from config: ${composables.join(', ')}`);
|
|
139
151
|
}
|
|
140
152
|
} else {
|
|
141
153
|
const result = await promptComposablesSelection();
|
|
142
|
-
|
|
154
|
+
const normalized = normalizeGenerators(
|
|
155
|
+
result.composables,
|
|
156
|
+
config.createUseAsyncDataConnectors
|
|
157
|
+
);
|
|
158
|
+
composables = normalized.composables;
|
|
159
|
+
generateConnectorsFlag = normalized.generateConnectors;
|
|
143
160
|
}
|
|
144
161
|
|
|
145
162
|
if (composables.length === 0) {
|
|
@@ -165,13 +182,24 @@ program
|
|
|
165
182
|
outputPath = config.output ?? './swagger';
|
|
166
183
|
}
|
|
167
184
|
|
|
168
|
-
// 3. Ask whether to generate headless connectors (only if
|
|
169
|
-
let generateConnectorsFlag = false;
|
|
185
|
+
// 3. Ask whether to generate headless connectors (only if still unresolved)
|
|
170
186
|
if (composables.includes('useAsyncData')) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
187
|
+
const hasExplicitConnectorsInGenerators =
|
|
188
|
+
config.generators?.includes('connectors') ?? false;
|
|
189
|
+
const shouldPromptConnectors =
|
|
190
|
+
!generateConnectorsFlag &&
|
|
191
|
+
config.createUseAsyncDataConnectors === undefined &&
|
|
192
|
+
!hasExplicitConnectorsInGenerators &&
|
|
193
|
+
!connectorsConfigured;
|
|
194
|
+
|
|
195
|
+
if (shouldPromptConnectors) {
|
|
174
196
|
generateConnectorsFlag = await promptConnectors();
|
|
197
|
+
} else if (connectorsConfigured) {
|
|
198
|
+
generateConnectorsFlag = true;
|
|
199
|
+
} else if (config.createUseAsyncDataConnectors !== undefined) {
|
|
200
|
+
generateConnectorsFlag = config.createUseAsyncDataConnectors;
|
|
201
|
+
} else if (hasExplicitConnectorsInGenerators) {
|
|
202
|
+
generateConnectorsFlag = true;
|
|
175
203
|
}
|
|
176
204
|
}
|
|
177
205
|
|
|
@@ -261,6 +289,7 @@ program
|
|
|
261
289
|
outputDir: `${composablesOutputDir}/connectors`,
|
|
262
290
|
composablesRelDir: '../use-async-data/composables',
|
|
263
291
|
runtimeRelDir: '../../runtime',
|
|
292
|
+
connectorsConfig: config.connectors,
|
|
264
293
|
});
|
|
265
294
|
spinner.stop('✓ Generated headless UI connectors');
|
|
266
295
|
} else {
|
package/src/module/index.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { generateUseAsyncDataComposables } from '../generators/use-async-data/ge
|
|
|
7
7
|
import { generateNuxtServerRoutes } from '../generators/nuxt-server/generator.js';
|
|
8
8
|
import { generateConnectors } from '../generators/connectors/generator.js';
|
|
9
9
|
import { createConsoleLogger } from '../cli/logger.js';
|
|
10
|
+
import { normalizeGenerators } from '../cli/config.js';
|
|
11
|
+
import { isConnectorsRequested } from '../config/connectors.js';
|
|
10
12
|
import type { ModuleOptions } from './types.js';
|
|
11
13
|
|
|
12
14
|
export default defineNuxtModule<ModuleOptions>({
|
|
@@ -39,7 +41,13 @@ export default defineNuxtModule<ModuleOptions>({
|
|
|
39
41
|
const resolvedInput = path.resolve(nuxt.options.rootDir, options.input);
|
|
40
42
|
const resolvedOutput = path.resolve(nuxt.options.rootDir, options.output!);
|
|
41
43
|
const composablesOutputDir = path.join(resolvedOutput, 'composables');
|
|
42
|
-
const
|
|
44
|
+
const normalized = normalizeGenerators(
|
|
45
|
+
options.generators ?? ['useFetch', 'useAsyncData'],
|
|
46
|
+
options.createUseAsyncDataConnectors
|
|
47
|
+
);
|
|
48
|
+
const selectedGenerators = normalized.composables;
|
|
49
|
+
const generateConnectorsFlag = normalized.generateConnectors;
|
|
50
|
+
const connectorsRequested = isConnectorsRequested(options);
|
|
43
51
|
const backend = options.backend ?? 'heyapi';
|
|
44
52
|
const logger = createConsoleLogger();
|
|
45
53
|
|
|
@@ -103,7 +111,10 @@ export default defineNuxtModule<ModuleOptions>({
|
|
|
103
111
|
}
|
|
104
112
|
|
|
105
113
|
// 3. Generate headless connectors if requested (requires useAsyncData)
|
|
106
|
-
if (
|
|
114
|
+
if (
|
|
115
|
+
(generateConnectorsFlag || connectorsRequested) &&
|
|
116
|
+
selectedGenerators.includes('useAsyncData')
|
|
117
|
+
) {
|
|
107
118
|
const connectorsOutputDir = path.join(composablesOutputDir, 'connectors');
|
|
108
119
|
await generateConnectors(
|
|
109
120
|
{
|
|
@@ -111,6 +122,7 @@ export default defineNuxtModule<ModuleOptions>({
|
|
|
111
122
|
outputDir: connectorsOutputDir,
|
|
112
123
|
composablesRelDir: '../use-async-data/composables',
|
|
113
124
|
runtimeRelDir: '../../runtime',
|
|
125
|
+
connectorsConfig: options.connectors,
|
|
114
126
|
},
|
|
115
127
|
logger
|
|
116
128
|
);
|
|
@@ -142,7 +154,10 @@ export default defineNuxtModule<ModuleOptions>({
|
|
|
142
154
|
if (selectedGenerators.includes('useAsyncData')) {
|
|
143
155
|
addImportsDir(path.join(composablesOutputDir, 'use-async-data', 'composables'));
|
|
144
156
|
}
|
|
145
|
-
if (
|
|
157
|
+
if (
|
|
158
|
+
(generateConnectorsFlag || connectorsRequested) &&
|
|
159
|
+
selectedGenerators.includes('useAsyncData')
|
|
160
|
+
) {
|
|
146
161
|
addImportsDir(path.join(composablesOutputDir, 'connectors'));
|
|
147
162
|
}
|
|
148
163
|
}
|
package/src/module/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GeneratorConfig } from '../
|
|
1
|
+
import type { GeneratorConfig } from '../config/types.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Configuration options for the nuxt-openapi-hyperfetch Nuxt module.
|
|
@@ -30,9 +30,9 @@ export interface ModuleOptions extends GeneratorConfig {
|
|
|
30
30
|
enableAutoImport?: boolean;
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
33
|
+
* Backward-compatible connectors flag.
|
|
34
|
+
* Prefer `generators: ['connectors']` so module and CLI behave the same.
|
|
35
|
+
* When true, connectors are generated and useAsyncData is added automatically.
|
|
36
36
|
* @default false
|
|
37
37
|
*/
|
|
38
38
|
createUseAsyncDataConnectors?: boolean;
|