Skip to content

Commit 3992c73

Browse files
authored
refactor(types): avoid DeepPartial (#3888)
1 parent 077b79b commit 3992c73

10 files changed

Lines changed: 48 additions & 52 deletions

File tree

src/build/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ export async function writeTypes(nitro: Nitro) {
190190
if (nitro.options.typescript.generateTsConfig) {
191191
const tsConfigPath = resolve(
192192
generatedTypesDir,
193-
nitro.options.typescript.tsconfigPath
193+
nitro.options.typescript.tsconfigPath || "tsconfig.json"
194194
);
195195
const tsconfigDir = dirname(tsConfigPath);
196196
const tsConfig: TSConfig = defu(nitro.options.typescript.tsConfig, {

src/config/resolvers/database.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { NitroOptions } from "nitro/types";
22

33
export async function resolveDatabaseOptions(options: NitroOptions) {
44
if (options.experimental.database && options.imports) {
5+
options.imports.presets ??= [];
56
options.imports.presets.push({
67
from: "nitro/database",
78
imports: ["useDatabase"],

src/config/resolvers/runtime-config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export function normalizeRuntimeConfig(config: NitroConfig) {
2424
},
2525
} as NitroRuntimeConfig
2626
);
27+
runtimeConfig.nitro ??= {};
2728
runtimeConfig.nitro.routeRules = config.routeRules;
2829
checkSerializableRuntimeConfig(runtimeConfig);
2930
return runtimeConfig as NitroRuntimeConfig;

src/dev/server.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,10 @@ export class NitroDevServer extends NitroDevApp implements RunnerRPCHooks {
9191
}
9292
});
9393

94-
if (nitro.options.devServer.watch.length > 0) {
94+
const devWatch = nitro.options.devServer.watch;
95+
if (devWatch && devWatch.length > 0) {
9596
const debouncedReload = debounce(() => this.reload());
96-
this.#watcher = watch(
97-
nitro.options.devServer.watch,
98-
nitro.options.watchOptions
99-
);
97+
this.#watcher = watch(devWatch, nitro.options.watchOptions);
10098
this.#watcher.on("add", debouncedReload).on("change", debouncedReload);
10199
}
102100
}

src/prerender/prerender.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,11 @@ export async function prerender(nitro: Nitro) {
147147
}
148148

149149
// Check for explicitly ignored routes
150-
for (const pattern of nitro.options.prerender.ignore) {
151-
if (matchesIgnorePattern(route, pattern)) {
152-
return false;
150+
if (nitro.options.prerender.ignore) {
151+
for (const pattern of nitro.options.prerender.ignore) {
152+
if (matchesIgnorePattern(route, pattern)) {
153+
return false;
154+
}
153155
}
154156
}
155157

@@ -322,7 +324,7 @@ export async function prerender(nitro: Nitro) {
322324
dataBuff!.toString("utf8"),
323325
route,
324326
res,
325-
nitro.options.prerender.crawlLinks
327+
nitro.options.prerender.crawlLinks ?? false
326328
);
327329
for (const _link of extractedLinks) {
328330
if (canPrerender(_link)) {
@@ -345,7 +347,7 @@ export async function prerender(nitro: Nitro) {
345347
);
346348

347349
await runParallel(routes, generateRoute, {
348-
concurrency: nitro.options.prerender.concurrency,
350+
concurrency: nitro.options.prerender.concurrency || 1,
349351
interval: nitro.options.prerender.interval,
350352
});
351353

src/presets/vercel/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export interface VercelServerlessFunctionConfig {
110110
}
111111

112112
export interface VercelOptions {
113-
config: VercelBuildConfigV3;
113+
config?: VercelBuildConfigV3;
114114

115115
/**
116116
* If you have enabled skew protection in the Vercel dashboard, it will

src/runtime/internal/routes/scalar.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import { useRuntimeConfig } from "../runtime-config.ts";
55
// Served as /_scalar
66
export default defineHandler((event) => {
77
const runtimeConfig = useRuntimeConfig();
8-
const title = runtimeConfig.nitro.openAPI?.meta?.title || "API Reference";
9-
const description = runtimeConfig.nitro.openAPI?.meta?.description || "";
8+
const title = runtimeConfig.nitro?.openAPI?.meta?.title || "API Reference";
9+
const description = runtimeConfig.nitro?.openAPI?.meta?.description || "";
1010
const openAPIEndpoint =
11-
runtimeConfig.nitro.openAPI?.route || "./_openapi.json";
11+
runtimeConfig.nitro?.openAPI?.route || "./_openapi.json";
1212

1313
// https://github.com/scalar/scalar
14-
const _config = runtimeConfig.nitro.openAPI?.ui
14+
const _config = runtimeConfig.nitro?.openAPI?.ui
1515
?.scalar as ApiReferenceConfiguration;
1616
const scalarConfig: ApiReferenceConfiguration = {
1717
..._config,

src/runtime/internal/routes/swagger.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { useRuntimeConfig } from "../runtime-config.ts";
66

77
export default defineHandler((event) => {
88
const runtimeConfig = useRuntimeConfig();
9-
const title = runtimeConfig.nitro.openAPI?.meta?.title || "API Reference";
10-
const description = runtimeConfig.nitro.openAPI?.meta?.description || "";
9+
const title = runtimeConfig.nitro?.openAPI?.meta?.title || "API Reference";
10+
const description = runtimeConfig.nitro?.openAPI?.meta?.description || "";
1111
const openAPIEndpoint =
12-
runtimeConfig.nitro.openAPI?.route || "./_openapi.json";
12+
runtimeConfig.nitro?.openAPI?.route || "./_openapi.json";
1313

1414
const CDN_BASE = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@^5";
1515
event.res.headers.set("Content-Type", "text/html");

src/types/_utils.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ export type ExcludeFunctions<G extends Record<string, any>> = Pick<
1616
{ [P in keyof G]: NonNullable<G[P]> extends Function ? never : P }[keyof G]
1717
>;
1818

19-
export type DeepPartial<T> = T extends (...args: never) => any
20-
? T
21-
: T extends Record<string, any>
22-
? { [P in keyof T]?: DeepPartial<T[P]> }
23-
: T;
24-
2519
export type KebabCase<
2620
T extends string,
2721
A extends string = "",

src/types/config.ts

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import type { Preset as UnenvPreset } from "unenv";
2222
import type { UnimportPluginOptions } from "unimport/unplugin";
2323
import type { BuiltinDriverName } from "unstorage";
2424
import type { UnwasmPluginOptions } from "unwasm/plugin";
25-
import type { DeepPartial } from "./_utils.ts";
2625
import type {
2726
EventHandlerFormat,
2827
NitroDevEventHandler,
@@ -95,12 +94,12 @@ export interface NitroOptions extends PresetOptions {
9594
*
9695
* By default this feature will be enabled if there is at least one nitro plugin.
9796
*/
98-
runtimeHooks: boolean;
97+
runtimeHooks?: boolean;
9998

10099
/**
101100
* Enable WebSocket support
102101
*/
103-
websocket: boolean;
102+
websocket?: boolean;
104103
};
105104

106105
/**
@@ -157,15 +156,15 @@ export interface NitroOptions extends PresetOptions {
157156
tsconfigPaths?: boolean;
158157
};
159158
future: {
160-
nativeSWR: boolean;
159+
nativeSWR?: boolean;
161160
};
162161
serverAssets: ServerAssetDir[];
163162
publicAssets: PublicAssetDir[];
164163

165-
imports: UnimportPluginOptions | false;
164+
imports: Partial<UnimportPluginOptions> | false;
166165
modules?: NitroModuleInput[];
167166
plugins: string[];
168-
tasks: { [name: string]: { handler: string; description: string } };
167+
tasks: { [name: string]: { handler?: string; description?: string } };
169168
scheduledTasks: { [cron: string]: string | string[] };
170169
virtual: Record<string, string | (() => string | Promise<string>)>;
171170
compressPublicAssets: boolean | CompressOptions;
@@ -174,17 +173,17 @@ export interface NitroOptions extends PresetOptions {
174173
// Dev
175174
dev: boolean;
176175
devServer: {
177-
port: number;
178-
hostname: string;
179-
watch: string[];
176+
port?: number;
177+
hostname?: string;
178+
watch?: string[];
180179
};
181180
watchOptions: ChokidarOptions;
182181
devProxy: Record<string, string | ProxyServerOptions>;
183182

184183
// Logging
185184
logging: {
186-
compressedSizes: boolean;
187-
buildSuccess: boolean;
185+
compressedSizes?: boolean;
186+
buildSuccess?: boolean;
188187
};
189188

190189
// Routing
@@ -207,26 +206,26 @@ export interface NitroOptions extends PresetOptions {
207206
/**
208207
* Prerender HTML routes within subfolders (`/test` would produce `/test/index.html`)
209208
*/
210-
autoSubfolderIndex: boolean;
211-
concurrency: number;
212-
interval: number;
213-
crawlLinks: boolean;
214-
failOnError: boolean;
215-
ignore: Array<
209+
autoSubfolderIndex?: boolean;
210+
concurrency?: number;
211+
interval?: number;
212+
crawlLinks?: boolean;
213+
failOnError?: boolean;
214+
ignore?: Array<
216215
string | RegExp | ((path: string) => undefined | null | boolean)
217216
>;
218-
ignoreUnprefixedPublicAssets: boolean;
219-
routes: string[];
217+
ignoreUnprefixedPublicAssets?: boolean;
218+
routes?: string[];
220219
/**
221220
* Amount of retries. Pass Infinity to retry indefinitely.
222221
* @default 3
223222
*/
224-
retry: number;
223+
retry?: number;
225224
/**
226225
* Delay between each retry in ms.
227226
* @default 500
228227
*/
229-
retryDelay: number;
228+
retryDelay?: number;
230229
};
231230

232231
// Rollup
@@ -266,12 +265,12 @@ export interface NitroOptions extends PresetOptions {
266265
*
267266
* Default is `tsconfig.json` (`node_modules/.nitro/types/tsconfig.json`)
268267
*/
269-
tsconfigPath: string;
268+
tsconfigPath?: string;
270269
};
271270
hooks: NestedHooks<NitroHooks>;
272271
commands: {
273-
preview: string;
274-
deploy: string;
272+
preview?: string;
273+
deploy?: string;
275274
};
276275

277276
// Framework
@@ -289,7 +288,7 @@ export interface NitroOptions extends PresetOptions {
289288
*/
290289
export interface NitroConfig
291290
extends
292-
DeepPartial<
291+
Partial<
293292
Omit<
294293
NitroOptions,
295294
| "routeRules"
@@ -302,6 +301,7 @@ export interface NitroConfig
302301
| "_c12"
303302
| "serverEntry"
304303
| "renderer"
304+
| "output"
305305
>
306306
>,
307307
C12InputConfig<NitroConfig> {
@@ -314,6 +314,7 @@ export interface NitroConfig
314314
serverDir?: boolean | "./" | "./server" | (string & {});
315315
serverEntry?: string | NitroOptions["serverEntry"];
316316
renderer?: false | NitroOptions["renderer"];
317+
output?: Partial<NitroOptions["output"]>;
317318
}
318319

319320
// ------------------------------------------------------------
@@ -388,8 +389,7 @@ export interface NitroRuntimeConfigApp {
388389
}
389390

390391
export interface NitroRuntimeConfig {
391-
app: NitroRuntimeConfigApp;
392-
nitro: {
392+
nitro?: {
393393
envPrefix?: string;
394394
envExpansion?: boolean;
395395
routeRules?: {

0 commit comments

Comments
 (0)