@adonisjs/assembler 8.0.0-next.14 → 8.0.0-next.16

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.
@@ -1,445 +1,8 @@
1
1
  import {
2
- findImport,
3
- inspectClass,
4
- inspectClassMethods,
5
- inspectMethodArguments,
6
- nodeToPlainText,
7
- searchValidatorDirectUsage
8
- } from "../../../chunk-TIKQQRMX.js";
9
- import {
10
- VirtualFileSystem,
11
- debug_default,
12
- isRelative
13
- } from "../../../chunk-7ANGUQDV.js";
14
-
15
- // src/code_scanners/routes_scanner/main.ts
16
- import { cliui } from "@poppinss/cliui";
17
- import string2 from "@poppinss/utils/string";
18
- import { parseImports } from "parse-imports";
19
- import StringBuilder from "@poppinss/utils/string_builder";
20
-
21
- // src/paths_resolver.ts
22
- import { fileURLToPath } from "url";
23
- var PathsResolver = class {
24
- /**
25
- * Cache of resolved paths to avoid resolving the same specifier multiple times
26
- */
27
- #resolvedPaths = {};
28
- /**
29
- * The resolver function used to resolve import specifiers
30
- */
31
- #resolver = (specifier) => import.meta.resolve(specifier);
32
- /**
33
- * Define a custom resolver that resolves a path
34
- *
35
- * The custom resolver function will be used instead of the default
36
- * import.meta.resolve() for resolving import specifiers.
37
- *
38
- * @param resolver - Function that takes a specifier and returns resolved path
39
- */
40
- use(resolver) {
41
- this.#resolver = resolver;
42
- }
43
- /**
44
- * Resolve import specifier to an absolute file path
45
- *
46
- * This method caches resolved paths to improve performance on repeated
47
- * resolutions. Relative paths are not supported and will throw an error.
48
- *
49
- * @param specifier - The import specifier to resolve (must not be relative)
50
- * @returns The resolved absolute file path
51
- * @throws Error when attempting to resolve relative paths
52
- *
53
- * @example
54
- * const path = resolver.resolve('#app/models/user')
55
- * const path2 = resolver.resolve('@/utils/helper')
56
- */
57
- resolve(specifier) {
58
- if (isRelative(specifier)) {
59
- throw new Error("Cannot resolve relative paths using PathsResolver");
60
- }
61
- const cacheKey = specifier;
62
- const cached = this.#resolvedPaths[cacheKey];
63
- if (cached) {
64
- return cached;
65
- }
66
- this.#resolvedPaths[cacheKey] = fileURLToPath(this.#resolver(specifier));
67
- return this.#resolvedPaths[cacheKey];
68
- }
69
- };
70
-
71
- // src/code_scanners/routes_scanner/validator_extractor.ts
72
- import { relative } from "path";
73
- import string from "@poppinss/utils/string";
74
- import { fileURLToPath as fileURLToPath2, pathToFileURL } from "url";
75
- async function extractValidators(appRoot, vfs, controller) {
76
- const root = await vfs.get(controller.path);
77
- const fileContents = root.text();
78
- const controllerClass = inspectClass(root);
79
- if (!controllerClass) {
80
- debug_default(`No class defined within the "%s"`, controller.import.specifier);
81
- return;
82
- }
83
- const method = inspectClassMethods(controllerClass).find((e) => {
84
- return e.find({
85
- rule: { kind: "property_identifier", regex: `\\b${controller.method}\\b` }
86
- });
87
- });
88
- if (!method) {
89
- debug_default(`Unable to find "%s" method in "%s"`, controller.method, controller.import.specifier);
90
- return;
91
- }
92
- const validationCalls = inspectMethodArguments(method, ["request.validateUsing", "vine.validate"]).map((node) => {
93
- const firstArg = node.find({
94
- rule: { any: [{ kind: "identifier" }, { kind: "member_expression" }] }
95
- });
96
- if (!firstArg) {
97
- return;
98
- }
99
- return nodeToPlainText(firstArg);
100
- }).filter((node) => node !== void 0).concat(searchValidatorDirectUsage(method).map((node) => nodeToPlainText(node)));
101
- if (!validationCalls.length) {
102
- debug_default(
103
- `Unable to detect any validation calls in "%s.%s" method`,
104
- controller.import.specifier,
105
- controller.method
106
- );
107
- return;
108
- }
109
- const controllerName = controllerClass.find({ rule: { kind: "type_identifier" } }).text();
110
- const controllerURL = pathToFileURL(controller.path);
111
- const imports = await Promise.all(
112
- validationCalls.map(async (validationCall) => {
113
- const validatorNamespace = validationCall.split(".")[0];
114
- if (validatorNamespace === controllerName) {
115
- return {
116
- name: validationCall,
117
- import: {
118
- specifier: controller.import.specifier,
119
- type: "default",
120
- value: controllerName
121
- }
122
- };
123
- }
124
- const importCall = await findImport(fileContents, validationCall);
125
- if (!importCall) {
126
- debug_default(
127
- 'Unable to find import for "%s" used by "%s.%s" method',
128
- validationCall,
129
- controller.import.specifier,
130
- controller.method
131
- );
132
- return null;
133
- }
134
- return {
135
- name: validationCall,
136
- import: {
137
- specifier: isRelative(importCall.specifier) ? string.toUnixSlash(
138
- relative(appRoot, fileURLToPath2(new URL(importCall.specifier, controllerURL)))
139
- ) : importCall.specifier,
140
- type: importCall.clause.type,
141
- value: importCall.clause.value
142
- }
143
- };
144
- })
145
- );
146
- return imports.filter((value) => !!value);
147
- }
148
-
149
- // src/code_scanners/routes_scanner/main.ts
150
- var RoutesScanner = class {
151
- /**
152
- * The root of the application from where we will resolve
153
- * paths.
154
- */
155
- #appRoot;
156
- /**
157
- * Collection of routes by their controller file path. This helps
158
- * us re-compute request types when the controller is changed.
159
- */
160
- #controllerRoutes = {};
161
- /**
162
- * Collection of scanned routes
163
- */
164
- #scannedRoutes = [];
165
- /**
166
- * A custom method to self compute the response type for a route. Return
167
- * undefined to fallback to the default behavior
168
- */
169
- #computeResponseTypes;
170
- /**
171
- * A custom method to self compute the request type for a route. Return
172
- * undefined to fallback to the default behavior
173
- */
174
- #computeRequestTypes;
175
- /**
176
- * A custom method to self extract the validators from the route controller.
177
- * Return undefined to fallback to the default behavior.
178
- */
179
- #extractValidators;
180
- /**
181
- * CLI UI instance to log colorful messages and progress information
182
- */
183
- ui = cliui();
184
- /**
185
- * The paths resolver is used to convert subpath and package
186
- * imports to absolute paths
187
- */
188
- pathsResolver = new PathsResolver();
189
- /**
190
- * The rules to apply when scanning routes
191
- */
192
- rules = {
193
- skip: [],
194
- request: {},
195
- response: {}
196
- };
197
- /**
198
- * Create a new RoutesScanner instance
199
- *
200
- * @param appRoot - The root directory of the application
201
- * @param rulesCollection - Collection of rules to apply during scanning
202
- */
203
- constructor(appRoot, rulesCollection) {
204
- this.#appRoot = appRoot;
205
- rulesCollection.forEach((rules) => {
206
- this.rules.skip = this.rules.skip.concat(rules.skip);
207
- Object.assign(this.rules.request, rules.request);
208
- Object.assign(this.rules.response, rules.response);
209
- });
210
- this.rules.skip = Array.from(/* @__PURE__ */ new Set([...this.rules.skip]));
211
- }
212
- /**
213
- * Assumes the validators are from VineJS and computes the request types from them
214
- *
215
- * This method generates TypeScript type definitions for request validation
216
- * by analyzing VineJS validators and creating Infer types.
217
- *
218
- * @param route - The scanned route with validators
219
- * @returns Request type definition or undefined
220
- */
221
- #prepareRequestTypes(route) {
222
- if (!route.validators) {
223
- return;
224
- }
225
- const schemas = route.validators.reduce((result, validator) => {
226
- const validatorExport = validator.import.type === "default" ? ".default" : validator.import.type === "named" ? `.${validator.import.value}` : "";
227
- const [, ...segments] = validator.name.split(".");
228
- const namespace = segments.map((segment) => `['${segment}']`).join("");
229
- result.push(
230
- `Infer<(typeof import('${validator.import.specifier}')${validatorExport})${namespace}>`
231
- );
232
- return result;
233
- }, []);
234
- return {
235
- type: schemas.join("|"),
236
- imports: [`import { Infer } from '@vinejs/vine/types'`]
237
- };
238
- }
239
- /**
240
- * Inspects the controller reference and fetches its import specifier
241
- * and the controller name from it.
242
- */
243
- async #inspectControllerSpecifier(importExpression, method) {
244
- const imports = [...await parseImports(importExpression)];
245
- const importedModule = imports.find(
246
- ($import) => $import.isDynamicImport && $import.moduleSpecifier.value
247
- );
248
- if (!importedModule || importedModule.moduleSpecifier.type !== "package" || !importedModule.moduleSpecifier.value) {
249
- return null;
250
- }
251
- const specifier = importedModule.moduleSpecifier.value;
252
- const name = new StringBuilder(specifier.split("/").pop()).removeSuffix("Controller").pascalCase().suffix("Controller").toString();
253
- return {
254
- name,
255
- method: method ?? "handle",
256
- path: string2.toUnixSlash(this.pathsResolver.resolve(specifier)),
257
- import: {
258
- specifier,
259
- type: "default",
260
- value: name
261
- }
262
- };
263
- }
264
- /**
265
- * Defines the response type for the route
266
- */
267
- async #setResponse(route, controller) {
268
- const responseType = await this.#computeResponseTypes?.(route, controller, this);
269
- route.response = responseType ?? {
270
- type: `ReturnType<import('${controller.import.specifier}').default['${controller.method}']>`,
271
- imports: []
272
- };
273
- }
274
- /**
275
- * Defines the request type for the route
276
- */
277
- async #setRequest(route, controller, vfs) {
278
- route.validators = await this.#extractValidators?.(route, controller, this) ?? await extractValidators(this.#appRoot, vfs, controller);
279
- route.request = await this.#computeRequestTypes?.(route, controller, this) ?? this.#prepareRequestTypes(route);
280
- }
281
- /**
282
- * Scans a route that is not using a controller
283
- */
284
- #processRouteWithoutController(route) {
285
- if (!route.name) {
286
- debug_default(`skipping route "%s" scanning. Missing a controller reference`, route.name);
287
- return;
288
- }
289
- const scannedRoute = {
290
- name: route.name,
291
- domain: route.domain,
292
- methods: route.methods,
293
- pattern: route.pattern,
294
- tokens: route.tokens,
295
- request: this.rules.request[route.name],
296
- response: this.rules.response[route.name]
297
- };
298
- this.#scannedRoutes.push(scannedRoute);
299
- }
300
- /**
301
- * Scans a route that is using a controller reference
302
- */
303
- async #processRouteWithController(route, vfs) {
304
- const controller = await this.#inspectControllerSpecifier(
305
- route.controllerReference.importExpression,
306
- route.controllerReference.method
307
- );
308
- if (!controller) {
309
- return this.#processRouteWithoutController(route);
310
- }
311
- const routeName = route.name ?? new StringBuilder(controller.name).removeSuffix("Controller").snakeCase().suffix(`.${string2.snakeCase(controller.method)}`).toString();
312
- if (this.rules.skip.includes(routeName)) {
313
- return;
314
- }
315
- const scannedRoute = {
316
- name: routeName,
317
- domain: route.domain,
318
- methods: route.methods,
319
- pattern: route.pattern,
320
- tokens: route.tokens,
321
- request: this.rules.request[routeName],
322
- response: this.rules.response[routeName],
323
- controller
324
- };
325
- this.#scannedRoutes.push(scannedRoute);
326
- if (!scannedRoute.request || !scannedRoute.response) {
327
- this.#controllerRoutes[controller.path] ??= [];
328
- this.#controllerRoutes[controller.path].push(scannedRoute);
329
- if (!scannedRoute.response) {
330
- await this.#setResponse(scannedRoute, controller);
331
- }
332
- if (!scannedRoute.request) {
333
- await this.#setRequest(scannedRoute, controller, vfs);
334
- }
335
- }
336
- }
337
- /**
338
- * Processing a given route list item and further scan it to
339
- * fetch the controller, request and response types.
340
- */
341
- async #processRoute(route, vfs) {
342
- if (route.name && this.rules.skip.includes(route.name)) {
343
- return;
344
- }
345
- if (!route.controllerReference) {
346
- this.#processRouteWithoutController(route);
347
- return;
348
- }
349
- await this.#processRouteWithController(
350
- route,
351
- vfs
352
- );
353
- }
354
- /**
355
- * Register a callback to self compute the response types for
356
- * a given route. The callback will be executed for all
357
- * the routes and you must return undefined to fallback
358
- * to the default behavior of detecting types
359
- *
360
- * @param callback - Function to compute response types for routes
361
- * @returns This RoutesScanner instance for method chaining
362
- */
363
- defineResponse(callback) {
364
- this.#computeResponseTypes = callback;
365
- return this;
366
- }
367
- /**
368
- * Register a callback to self compute the request types for
369
- * a given route. The callback will be executed for all
370
- * the routes and you must return undefined to fallback
371
- * to the default behavior of detecting types
372
- *
373
- * @param callback - Function to compute request types for routes
374
- * @returns This RoutesScanner instance for method chaining
375
- */
376
- defineRequest(callback) {
377
- this.#computeRequestTypes = callback;
378
- return this;
379
- }
380
- /**
381
- * Register a callback to extract validators from the route controller
382
- *
383
- * @param callback - Function to extract validators from controllers
384
- * @returns This RoutesScanner instance for method chaining
385
- */
386
- extractValidators(callback) {
387
- this.#extractValidators = callback;
388
- return this;
389
- }
390
- /**
391
- * Returns the scanned routes
392
- *
393
- * @returns Array of scanned routes with their metadata
394
- */
395
- getScannedRoutes() {
396
- return this.#scannedRoutes;
397
- }
398
- /**
399
- * Returns an array of controllers bound to the provided
400
- * routes
401
- *
402
- * @returns Array of controller's absolute paths
403
- */
404
- getControllers() {
405
- return Object.keys(this.#controllerRoutes);
406
- }
407
- /**
408
- * Invalidating a controller will trigger computing the validators,
409
- * request types and the response types.
410
- *
411
- * @param controllerPath - Path to the controller file to invalidate
412
- */
413
- async invalidate(controllerPath) {
414
- const controllerRoutes = this.#controllerRoutes[controllerPath];
415
- if (!controllerRoutes) {
416
- return;
417
- }
418
- for (let scannedRoute of controllerRoutes) {
419
- if (scannedRoute.controller) {
420
- const vfs = new VirtualFileSystem(this.#appRoot);
421
- await this.#setResponse(scannedRoute, scannedRoute.controller);
422
- await this.#setRequest(scannedRoute, scannedRoute.controller, vfs);
423
- }
424
- }
425
- }
426
- /**
427
- * Scans an array of Route list items and fetches their validators,
428
- * controllers, and request/response types.
429
- *
430
- * This is the main method that processes all routes and extracts
431
- * their type information for code generation purposes.
432
- *
433
- * @param routes - Array of route list items to scan
434
- */
435
- async scan(routes) {
436
- const vfs = new VirtualFileSystem(this.#appRoot);
437
- for (let route of routes) {
438
- await this.#processRoute(route, vfs);
439
- }
440
- vfs.invalidate();
441
- }
442
- };
2
+ RoutesScanner
3
+ } from "../../../chunk-WG7JQZUU.js";
4
+ import "../../../chunk-TIKQQRMX.js";
5
+ import "../../../chunk-HRE5L24F.js";
443
6
  export {
444
7
  RoutesScanner
445
8
  };
@@ -1,15 +1,16 @@
1
- import type tsStatic from 'typescript';
2
1
  import type { DevServerOptions } from './types/common.ts';
3
2
  /**
4
- * Exposes the API to start the development server in HMR, watch or static mode.
3
+ * Exposes the API to start the development server in HMR, watch or static mode
5
4
  *
6
5
  * In HMR mode, the DevServer will exec the "bin/server.ts" file and let hot-hook
7
6
  * manage the changes using hot module reloading.
8
7
  *
9
- * In watch mode, the DevServer will start an internal watcher and restarts the after
10
- * every file change. The files must be part of the TypeScript project (via tsconfig.json),
8
+ * In watch mode, the DevServer will start an internal watcher and restarts the server
9
+ * after every file change. The files must be part of the TypeScript project (via tsconfig.json),
11
10
  * or registered as metaFiles.
12
11
  *
12
+ * In static mode, the server runs without file watching or hot reloading.
13
+ *
13
14
  * @example
14
15
  * const devServer = new DevServer(cwd, { hmr: true, hooks: [] })
15
16
  * await devServer.start(ts)
@@ -41,7 +42,12 @@ export declare class DevServer {
41
42
  useColors(colorsToUse: import("@poppinss/colors/types").Colors): void;
42
43
  };
43
44
  /**
44
- * The mode in which the DevServer is running.
45
+ * The mode in which the DevServer is running
46
+ *
47
+ * Returns the current operating mode of the development server:
48
+ * - 'hmr': Hot Module Reloading enabled
49
+ * - 'watch': File system watching with full restarts
50
+ * - 'static': No file watching or hot reloading
45
51
  */
46
52
  get mode(): "hmr" | "watch" | "static";
47
53
  /**
@@ -68,36 +74,76 @@ export declare class DevServer {
68
74
  */
69
75
  constructor(cwd: URL, options: DevServerOptions);
70
76
  /**
71
- * Add listener to get notified when dev server is closed
77
+ * Adds listener to get notified when dev server is closed
78
+ *
79
+ * Registers a callback function that will be invoked when the development
80
+ * server's child process exits. The callback receives the exit code.
72
81
  *
73
82
  * @param callback - Function to call when dev server closes
74
83
  * @returns This DevServer instance for method chaining
84
+ *
85
+ * @example
86
+ * devServer.onClose((exitCode) => {
87
+ * console.log(`Server closed with exit code: ${exitCode}`)
88
+ * })
75
89
  */
76
90
  onClose(callback: (exitCode: number) => any): this;
77
91
  /**
78
- * Add listener to get notified when dev server encounters an error
92
+ * Adds listener to get notified when dev server encounters an error
93
+ *
94
+ * Registers a callback function that will be invoked when the development
95
+ * server's child process encounters an error or fails to start.
79
96
  *
80
97
  * @param callback - Function to call when dev server encounters an error
81
98
  * @returns This DevServer instance for method chaining
99
+ *
100
+ * @example
101
+ * devServer.onError((error) => {
102
+ * console.error('Dev server error:', error.message)
103
+ * })
82
104
  */
83
105
  onError(callback: (error: any) => any): this;
84
106
  /**
85
- * Close watchers and the running child process
107
+ * Closes watchers and terminates the running child process
108
+ *
109
+ * Cleans up keyboard shortcuts, stops file system watchers, and kills
110
+ * the HTTP server child process. This should be called when shutting down
111
+ * the development server.
112
+ *
113
+ * @example
114
+ * await devServer.close()
86
115
  */
87
116
  close(): Promise<void>;
88
117
  /**
89
- * Start the development server in static or HMR mode
118
+ * Starts the development server in static or HMR mode
119
+ *
120
+ * Initializes the server and starts the HTTP server. The mode is determined
121
+ * by the `hmr` option in DevServerOptions. In HMR mode, hot-hook is configured
122
+ * to enable hot module reloading.
90
123
  *
91
124
  * @param ts - TypeScript module reference
125
+ *
126
+ * @example
127
+ * const devServer = new DevServer(cwd, { hmr: true, hooks: [] })
128
+ * await devServer.start(ts)
92
129
  */
93
- start(ts: typeof tsStatic): Promise<void>;
130
+ start(): Promise<void>;
94
131
  /**
95
- * Start the development server in watch mode and restart on file changes
132
+ * Starts the development server in watch mode and restarts on file changes
133
+ *
134
+ * Initializes the server, starts the HTTP server, and sets up a file system
135
+ * watcher that monitors for changes. When files are added, modified, or deleted,
136
+ * the server automatically restarts. The watcher respects TypeScript project
137
+ * configuration and metaFiles settings.
96
138
  *
97
139
  * @param ts - TypeScript module reference
98
140
  * @param options - Watch options including polling mode
141
+ *
142
+ * @example
143
+ * const devServer = new DevServer(cwd, { hooks: [] })
144
+ * await devServer.startAndWatch(ts, { poll: false })
99
145
  */
100
- startAndWatch(ts: typeof tsStatic, options?: {
146
+ startAndWatch(options?: {
101
147
  poll: boolean;
102
148
  }): Promise<void>;
103
149
  }
@@ -1,4 +1,4 @@
1
- import type tsStatic from 'typescript';
1
+ import { type TsConfigResult } from 'get-tsconfig';
2
2
  import { type InspectedFile, type AssemblerRcFile } from './types/common.ts';
3
3
  /**
4
4
  * Exposes an intutive API to run actions when different kind of files
@@ -83,7 +83,7 @@ export declare class FileSystem {
83
83
  * @param tsConfig - Parsed TypeScript configuration
84
84
  * @param rcFile - AdonisJS RC file configuration
85
85
  */
86
- constructor(cwd: string, tsConfig: tsStatic.ParsedCommandLine, rcFile: AssemblerRcFile);
86
+ constructor(cwd: string, tsConfig: TsConfigResult, rcFile: AssemblerRcFile);
87
87
  /**
88
88
  * Returns true if the file should be watched. Chokidar sends
89
89
  * absolute unix paths to the ignored callback.
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IndexGenerator
3
- } from "../../chunk-TWCIFDZF.js";
4
- import "../../chunk-7ANGUQDV.js";
3
+ } from "../../chunk-YFDLKKOA.js";
4
+ import "../../chunk-HRE5L24F.js";
5
5
  export {
6
6
  IndexGenerator
7
7
  };
@@ -13,6 +13,7 @@
13
13
  */
14
14
  export declare class PathsResolver {
15
15
  #private;
16
+ constructor(appRoot: string);
16
17
  /**
17
18
  * Define a custom resolver that resolves a path
18
19
  *
@@ -1,4 +1,3 @@
1
- import type tsStatic from 'typescript';
2
1
  import type { TestRunnerOptions } from './types/common.ts';
3
2
  /**
4
3
  * Exposes the API to run Japa tests and optionally watch for file
@@ -111,7 +110,7 @@ export declare class TestRunner {
111
110
  * @param ts - TypeScript module reference for parsing configuration
112
111
  * @param options - Watch options including polling mode for file system monitoring
113
112
  */
114
- runAndWatch(ts: typeof tsStatic, options?: {
113
+ runAndWatch(options?: {
115
114
  poll: boolean;
116
115
  }): Promise<void>;
117
116
  }
@@ -174,12 +174,9 @@ export type RoutesListItem = {
174
174
  domain: string;
175
175
  /** HTTP methods accepted by this route */
176
176
  methods: string[];
177
- /** Controller reference information (if controller-based route) */
178
- controllerReference?: {
179
- /** Dynamic import expression for the controller */
180
- importExpression: string;
181
- /** Specific controller method to call */
182
- method?: string;
177
+ handler: Function | {
178
+ method: string;
179
+ importExpression: string | null;
183
180
  };
184
181
  /** Parsed route tokens for URI construction */
185
182
  tokens: {
@@ -1,6 +1,7 @@
1
1
  import Hooks from '@poppinss/hooks';
2
2
  import type tsStatic from 'typescript';
3
3
  import { type ChokidarOptions } from 'chokidar';
4
+ import { type TsConfigResult } from 'get-tsconfig';
4
5
  import type { RunScriptOptions } from './types/common.ts';
5
6
  import { type AllHooks, type HookParams } from './types/hooks.ts';
6
7
  /**
@@ -10,11 +11,14 @@ import { type AllHooks, type HookParams } from './types/hooks.ts';
10
11
  * handling diagnostic errors and returning a parsed configuration that can be
11
12
  * used by other TypeScript operations.
12
13
  *
14
+ * @deprecated While we are experimenting with the readTsConfig method
15
+ *
13
16
  * @param cwd - The current working directory URL or string path
14
17
  * @param ts - TypeScript module reference
15
18
  * @returns Parsed TypeScript configuration or undefined if parsing failed
16
19
  */
17
20
  export declare function parseConfig(cwd: URL | string, ts: typeof tsStatic): tsStatic.ParsedCommandLine | undefined;
21
+ export declare function readTsConfig(cwd: string): TsConfigResult | null;
18
22
  /**
19
23
  * Runs a Node.js script as a child process and inherits the stdio streams
20
24
  *
@@ -36,7 +40,7 @@ export declare function runNode(cwd: string | URL, options: RunScriptOptions): i
36
40
  buffer: false;
37
41
  stdio: "pipe" | "inherit";
38
42
  env: {
39
- TZ?: string;
43
+ TZ?: string | undefined;
40
44
  FORCE_COLOR?: string | undefined;
41
45
  };
42
46
  }>;
@@ -58,7 +62,7 @@ export declare function run(cwd: string | URL, options: Omit<RunScriptOptions, '
58
62
  buffer: false;
59
63
  stdio: "pipe" | "inherit";
60
64
  env: {
61
- TZ?: string;
65
+ TZ?: string | undefined;
62
66
  FORCE_COLOR?: string | undefined;
63
67
  };
64
68
  }>;