create-warlock 5.31.0 → 5.33.0

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +78 -25
  3. package/esm/commands/create-new-app/index.mjs +2 -2
  4. package/esm/commands/create-new-app/index.mjs.map +1 -1
  5. package/esm/commands/create-new-app/types.d.mts +14 -9
  6. package/esm/commands/create-warlock-app/index.mjs +1 -1
  7. package/esm/commands/create-warlock-app/index.mjs.map +1 -1
  8. package/esm/features/agent-kit-targets.mjs +1 -1
  9. package/esm/features/agent-kit-targets.mjs.map +1 -1
  10. package/esm/features/database-drivers.mjs +1 -1
  11. package/esm/features/features-map.mjs +1 -1
  12. package/esm/flags/assert-package-manager.mjs +1 -1
  13. package/esm/flags/definitions.mjs +3 -3
  14. package/esm/flags/definitions.mjs.map +1 -1
  15. package/esm/flags/seed-from-flags.mjs +2 -2
  16. package/esm/flags/seed-from-flags.mjs.map +1 -1
  17. package/esm/helpers/app.mjs +34 -12
  18. package/esm/helpers/app.mjs.map +1 -1
  19. package/esm/helpers/exec.mjs +1 -1
  20. package/esm/helpers/insert-import.mjs +1 -1
  21. package/esm/helpers/insert-import.mjs.map +1 -1
  22. package/esm/helpers/paths.mjs.map +1 -1
  23. package/esm/helpers/warlock-versions.mjs +1 -1
  24. package/esm/index.d.mts +3 -5
  25. package/esm/index.mjs +1 -3
  26. package/esm/index.mjs.map +1 -1
  27. package/esm/prompts/ask-lint-toolchain.mjs +2 -2
  28. package/esm/prompts/ask-lint-toolchain.mjs.map +1 -1
  29. package/esm/summary.mjs +2 -2
  30. package/esm/summary.mjs.map +1 -1
  31. package/esm/ui/banner.mjs +1 -1
  32. package/llms-full.txt +79 -10
  33. package/package.json +2 -2
  34. package/skills/create-a-warlock-project/SKILL.md +79 -10
  35. package/templates/toolchains/oxc/.oxfmtignore +2 -0
  36. package/templates/toolchains/oxc/.oxfmtrc.json +4 -1
  37. package/templates/warlock/.prettierrc.json +3 -1
  38. package/templates/warlock/README.md +13 -0
  39. package/templates/warlock/package.json +4 -4
  40. package/templates/warlock/skills/code-standards/SKILL.md +1 -1
  41. package/templates/warlock/src/app/auth/controllers/login.controller.ts +1 -1
  42. package/templates/warlock/src/app/contact/controllers/contact.controller.ts +1 -1
  43. package/templates/warlock/src/app/locale/controllers/locale.controller.ts +1 -1
  44. package/templates/warlock/src/app/posts/controllers/create-new-post.controller.ts +1 -1
  45. package/templates/warlock/src/app/posts/controllers/update-post.controller.ts +1 -1
  46. package/templates/warlock/src/app/posts/models/post/post.model.ts +1 -1
  47. package/templates/warlock/src/app/posts/schema/create-post.schema.ts +1 -1
  48. package/templates/warlock/src/app/posts/schema/update-post.schema.ts +1 -1
  49. package/templates/warlock/src/app/users/controllers/create-new-user.controller.ts +1 -1
  50. package/templates/warlock/src/app/users/controllers/list-users.controller.ts +1 -1
  51. package/templates/warlock/src/app/users/models/user/user.model.ts +1 -1
  52. package/templates/warlock/src/app/users/schema/create-user.schema.ts +1 -1
  53. package/templates/warlock/src/app/users/schema/list-users.schema.ts +1 -1
  54. package/templates/warlock/src/config/storage.ts +1 -1
  55. package/templates/warlock/src/web/assets.d.ts +2 -0
  56. package/templates/warlock/src/web/home/components/contact-form-controls.tsx +1 -1
  57. package/templates/warlock/src/web/home/components/hero-section.tsx +1 -0
  58. package/templates/warlock/tsconfig.json +1 -1
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "@clack/prompts": "^0.8.2",
15
15
  "@mongez/copper": "^2.1.3",
16
- "@warlock.js/fs": "5.31.0",
16
+ "@warlock.js/fs": "5.33.0",
17
17
  "@mongez/reinforcements": "^4.0.2",
18
18
  "cross-spawn": "^7.0.3",
19
19
  "rimraf": "^6.0.1",
@@ -22,7 +22,7 @@
22
22
  "engines": {
23
23
  "node": ">=22.15"
24
24
  },
25
- "version": "5.31.0",
25
+ "version": "5.33.0",
26
26
  "type": "module",
27
27
  "main": "./esm/index.mjs",
28
28
  "module": "./esm/index.mjs",
@@ -55,7 +55,7 @@ Because almost every choice defaults silently, `create-warlock` prints what it
55
55
  decided right after scaffolding, e.g.:
56
56
 
57
57
  ```
58
- Using npm · database: none · lint: eslint · agent-kit targets: claude
58
+ Using npm · database: none · lint: oxc · agent-kit targets: claude
59
59
  Features: none
60
60
  change these — package manager: --pm, database: --db/--no-db, agents: --agents,
61
61
  features: --features, ai: --ai, lint: --lint, git: --git/--no-git, jwt: --jwt/--no-jwt — or
@@ -72,7 +72,7 @@ Features: none
72
72
  | `--no-db` | no | — | Opt out of a database — shorthand for `--db=none`. |
73
73
  | `--pm` | yes | inferred (`npm_config_user_agent` / system) | Package manager — must be one of `npm` / `yarn` / `pnpm` / `bun`; anything else is rejected before scaffolding starts. |
74
74
  | `--features` | yes (CSV) | none, or `["web"]` when `--stack=web` and `--features` is not given | Comma-separated optional feature keys. An explicit `--features` always wins over the `--stack` default. |
75
- | `--lint` | yes | `eslint` | `oxc` (Oxlint/Oxfmt) or `eslint` (ESLint/Prettier); unknown or missing values fail before writes. |
75
+ | `--lint` | yes | `oxc` | `oxc` (Oxlint/Oxfmt) or `eslint` (ESLint/Prettier, deprecated); unknown or missing values fail before writes. |
76
76
  | `--ai` | yes (CSV) | none | Comma-separated AI provider keys (auto-pulls `@warlock.js/ai`). |
77
77
  | `--agents` | yes (CSV) | `claude` | Comma-separated `agent-kit` targets — see below. |
78
78
  | `--git` / `--no-git` | no | off | Initialize a Git repo (`git init` + `main` branch + initial commit). |
@@ -201,13 +201,18 @@ a total count; the success screen shows the complete list.
201
201
 
202
202
  ## Choose the linter and formatter
203
203
 
204
- `--lint=eslint` is the default. `--lint=oxc` (also `--lint oxc`) installs exact
204
+ `--lint=oxc` is the default. It also accepts `--lint oxc` and installs exact
205
205
  `oxlint@1.88.0` and `oxfmt@0.73.0` versions, emits `.oxlintrc.json` and
206
206
  `.oxfmtrc.json`, and removes the template's ESLint/Prettier configs and dependencies.
207
- The custom wizard prompts for the same choice; a flag preselects it.
207
+ Pass `--lint=eslint` to opt in to ESLint/Prettier. The custom wizard prompts for
208
+ the same choice; a flag preselects it.
208
209
 
209
210
  ```bash
210
- npm create warlock@latest my-app -- --lint=oxc --yes
211
+ # Default: Oxlint + Oxfmt, TypeScript 7.0.2
212
+ npm create warlock@latest my-app -- --yes
213
+
214
+ # Explicit opt-in: ESLint + Prettier, TypeScript 6.0.3
215
+ npm create warlock@latest my-eslint-app -- --lint=eslint --yes
211
216
  ```
212
217
 
213
218
  Both choices provide `lint`/`format` and non-mutating `lint:check`/`format:check`
@@ -218,13 +223,77 @@ Oxc config enables `devServer.healthCheckers: { eslint: false, oxlint: true }` a
218
223
  leaves TypeScript health checks enabled. Style matches the template's 100-column,
219
224
  double-quote, semicolon and trailing-comma settings. Import sorting is on in
220
225
  `.oxfmtrc.json`, kept to one block like the ESLint toolchain's
221
- `prettier-plugin-organize-imports`:
226
+ `@ianvs/prettier-plugin-sort-imports`:
222
227
 
223
228
  ```json
224
- { "sortImports": { "newlinesBetween": false } }
229
+ { "sortImports": { "newlinesBetween": false, "internalPattern": ["app/", "web/", "@shared/"] } }
225
230
  ```
226
231
 
227
- `format` (`oxfmt --write ./src`) orders built-ins, then packages, then relative
228
- imports. Oxfmt does not delete unused imports, so remove them from Oxlint's
229
- `no-unused-vars` diagnostics. Scripts in both toolchains call local binaries
232
+ `format` (`npm run format`) orders built-ins, packages, internal aliases,
233
+ then relative imports. Neither formatter deletes unused imports. ESLint reports
234
+ them through `unused-imports/no-unused-imports`; Oxlint uses `no-unused-vars`.
235
+ Scripts in both toolchains call local binaries
230
236
  (`eslint --fix ./src --max-warnings=0`, `tsc --noEmit`), never `npx`.
237
+
238
+ ## TypeScript 7 in 5.32
239
+
240
+ Default Oxlint/Oxfmt projects pin `typescript` to `7.0.2`; `tsc` is the native Go compiler.
241
+ The template uses `module: "ESNext"`, `moduleResolution: "bundler"`, explicit
242
+ Node types, and `paths` relative to its tsconfig, without `baseUrl`.
243
+ Existing apps must remove `baseUrl`, rebase alias targets, and replace
244
+ `moduleResolution: "node"` / `"node10"` before typechecking.
245
+
246
+ Explicit `--lint=eslint` projects pin `typescript` to **6.0.3**, the newest version
247
+ supported by typescript-eslint. Its parser requires the JavaScript compiler API
248
+ removed in TypeScript 7, and its declared peer range is `>=4.8.4 <6.1.0`
249
+ ([parser package metadata](https://registry.npmjs.org/@typescript-eslint/parser/8.71.2)).
250
+ Both modes use the same tsconfig settings above, which are valid in TypeScript 6.
251
+ ESLint mode prints a deprecation warning naming removal in 5.34.0 and the Oxc migration command. Both modes install with every supported package manager.
252
+
253
+ ### Prettier import order in ESLint mode
254
+
255
+ The ESLint scaffold’s `@ianvs/prettier-plugin-sort-imports` uses Babel instead of
256
+ the compiler API. Keep these options in `.prettierrc.json`:
257
+
258
+ ```json
259
+ {
260
+ "plugins": ["@ianvs/prettier-plugin-sort-imports"],
261
+ "importOrder": ["<BUILTIN_MODULES>", "<THIRD_PARTY_MODULES>", "^(app|web|@shared)/", "^[.]"],
262
+ "importOrderParserPlugins": ["typescript", "jsx", "decorators"]
263
+ }
264
+ ```
265
+
266
+ Leave `importOrderTypeScriptVersion` at its default to keep type and value imports
267
+ separate. Run `npm run format`, then `npm run lint:check`; formatting preserves
268
+ unused imports, and `npm run lint` can apply ESLint’s unused-import fixes.
269
+
270
+ ## Migrate to Oxlint and Oxfmt in 5.33
271
+
272
+ ESLint + Prettier are deprecated in 5.33.0 and will be removed in **5.34.0**.
273
+ New apps should use `--lint=oxc`. To migrate an existing app, install the new
274
+ core release and `ts-morph`, then run:
275
+
276
+ ```bash
277
+ npx warlock upgrade --from 5.32 --to 5.33.0 --dry-run
278
+ npx warlock upgrade --from 5.32 --to 5.33.0
279
+ npm install
280
+ npm run format
281
+ npm run lint:check
282
+ npx warlock check
283
+ ```
284
+
285
+ Review every reported `file:line`: customized configs are preserved and need
286
+ manual translation before removal. The codemod installs the template's Oxlint
287
+ and Oxfmt versions and pins TypeScript to 7.0.2. It replaces standard lint/format
288
+ scripts, removes legacy dependencies, and deletes only recognized generated
289
+ configs. A generated `.prettierignore` becomes `.oxfmtignore`. Existing Oxc
290
+ configs are preserved. `--dry-run --json` reports the same planned changes
291
+ without writing files.
292
+
293
+ Explicit deprecated ESLint scaffolds set `devServer.healthCheckers.eslint: true`;
294
+ existing apps must set this themselves to retain background ESLint checking.
295
+
296
+ Oxc formatting scripts explicitly read `.gitignore` and `.oxfmtignore`. Oxfmt
297
+ 0.73 otherwise defaults to `.prettierignore` (`oxfmt --help`); the explicit
298
+ paths make migrated ignore rules effective. The package template format gate
299
+ also defaults to Oxfmt; `--lint=eslint` is its deprecated compatibility mode.
@@ -0,0 +1,2 @@
1
+ node_modules
2
+ dist
@@ -7,6 +7,9 @@
7
7
  "arrowParens": "always",
8
8
  "trailingComma": "all",
9
9
  "endOfLine": "lf",
10
- "sortImports": { "newlinesBetween": false },
10
+ "sortImports": {
11
+ "newlinesBetween": false,
12
+ "internalPattern": ["app/", "web/", "@shared/"]
13
+ },
11
14
  "ignorePatterns": ["node_modules/", "dist/"]
12
15
  }
@@ -6,5 +6,7 @@
6
6
  "arrowParens": "always",
7
7
  "trailingComma": "all",
8
8
  "endOfLine": "lf",
9
- "plugins": ["prettier-plugin-organize-imports"]
9
+ "plugins": ["@ianvs/prettier-plugin-sort-imports"],
10
+ "importOrder": ["<BUILTIN_MODULES>", "<THIRD_PARTY_MODULES>", "^(app|web|@shared)/", "^[.]"],
11
+ "importOrderParserPlugins": ["typescript", "jsx", "decorators"]
10
12
  }
@@ -148,3 +148,16 @@ This project ships instructions and skills for AI coding agents:
148
148
 
149
149
  - [Documentation](https://warlock.js.org)
150
150
  - [Changelog](https://warlock.js.org/changelog)
151
+
152
+ ## TypeScript 7 in 5.32
153
+
154
+ New projects pin `typescript` to `7.0.2`; `tsc` is the native Go compiler.
155
+ The template uses `module: "ESNext"`, `moduleResolution: "bundler"`, explicit
156
+ Node types, and `paths` relative to its tsconfig, without `baseUrl`.
157
+ Existing apps must remove `baseUrl`, rebase alias targets, and replace
158
+ `moduleResolution: "node"` / `"node10"` before typechecking.
159
+
160
+ Use the Oxlint/Oxfmt lint mode with TS7. The optional ESLint scaffold is retained,
161
+ but typescript-eslint's parser requires the removed JavaScript compiler API and
162
+ does not support TS7. ESLint mode is scheduled for deprecation in 5.33 and removal
163
+ in 5.34. A parser's bundled older TypeScript is separate from the app's native `tsc`.
@@ -20,13 +20,13 @@
20
20
  "gen.r": "warlock generate.repository",
21
21
  "gen.rs": "warlock generate.resource",
22
22
  "lint": "eslint --fix ./src --max-warnings=0",
23
- "format": "prettier --write \"./src/**/*.{js,jsx,ts,tsx,css,md,json}\" --config ./.prettierrc.json",
23
+ "format": "node -e \"console.warn('Deprecated: Prettier support is removed in 5.34.0; migrate with npx warlock upgrade --from 5.32 --to 5.33.0.')\" && prettier --write \"./src/**/*.{js,jsx,ts,tsx,css,md,json}\" --config ./.prettierrc.json",
24
24
  "tsc": "warlock generate.typings && tsc --noEmit",
25
25
  "postinstall": "agent-kit init && agent-kit sync || echo \"warning: AI agent skills were NOT synced, so coding agents will not see the @warlock.js skills. Run the skills:sync script.\"",
26
26
  "skills:sync": "agent-kit sync",
27
27
  "skills:watch": "agent-kit watch",
28
28
  "lint:check": "eslint ./src --max-warnings=0",
29
- "format:check": "prettier --check \"./src/**/*.{js,jsx,ts,tsx,css,md,json}\" --config ./.prettierrc.json"
29
+ "format:check": "node -e \"console.warn('Deprecated: Prettier support is removed in 5.34.0; migrate with npx warlock upgrade --from 5.32 --to 5.33.0.')\" && prettier --check \"./src/**/*.{js,jsx,ts,tsx,css,md,json}\" --config ./.prettierrc.json"
30
30
  },
31
31
  "dependencies": {
32
32
  "@mongez/reinforcements": "^4.0.2",
@@ -43,6 +43,7 @@
43
43
  "dayjs": "^1.11.19"
44
44
  },
45
45
  "devDependencies": {
46
+ "@ianvs/prettier-plugin-sort-imports": "^4.7.1",
46
47
  "@mongez/agent-kit": "^1.3.1",
47
48
  "@types/node": "^25.0.3",
48
49
  "@types/prettier": "^3.0.0",
@@ -53,8 +54,7 @@
53
54
  "eslint-plugin-prettier": "^5.5.4",
54
55
  "eslint-plugin-unused-imports": "^4.3.0",
55
56
  "prettier": "^3.7.4",
56
- "prettier-plugin-organize-imports": "^4.3.0",
57
- "typescript": "^5.9.3",
57
+ "typescript": "7.0.2",
58
58
  "vitest": "4.0.5"
59
59
  }
60
60
  }
@@ -574,7 +574,7 @@ For ESLint, consider enabling these additional rules:
574
574
  - `curly` — enforces braces (§ 4.4)
575
575
  - `no-console` — enforces § 8
576
576
 
577
- Match the selected formatter config: `.prettierrc.json` or `.oxfmtrc.json`. Both use 100 columns, double quotes, semicolons and trailing commas. Oxfmt does not run `prettier-plugin-organize-imports`; maintain import order and remove unused imports separately, then run the linter.
577
+ Match the selected formatter config: `.prettierrc.json` or `.oxfmtrc.json`. Both use 100 columns, double quotes, semicolons and trailing commas. Prettier uses `@ianvs/prettier-plugin-sort-imports` (Babel, independent of TypeScript); it sorts built-ins, packages, aliases (`app/*`, `web/*`, `@shared/*`) and relatives in one block while preserving separate type imports. Oxfmt sorts imports through its own configuration. Both retain unused imports: ESLint reports them through `unused-imports/no-unused-imports`, and Oxlint through `no-unused-vars`. Run the formatter, then the linter.
578
578
 
579
579
  ---
580
580
 
@@ -1,5 +1,5 @@
1
1
  import { type Request, type RequestHandler } from "@warlock.js/core";
2
- import { type LoginSchema, loginSchema } from "../schema/login.schema";
2
+ import { loginSchema, type LoginSchema } from "../schema/login.schema";
3
3
  import { loginService } from "../services/auth.service";
4
4
 
5
5
  /**
@@ -1,6 +1,6 @@
1
- import { contactSchema } from "@shared/contact.schema";
2
1
  import { type Request, type RequestHandler } from "@warlock.js/core";
3
2
  import { type Infer } from "@warlock.js/seal";
3
+ import { contactSchema } from "@shared/contact.schema";
4
4
 
5
5
  export type ContactSchema = Infer.Output<typeof contactSchema>;
6
6
 
@@ -1,5 +1,5 @@
1
- import { localeSchema, type LocaleSchema } from "@shared/locale.schema";
2
1
  import { type Request, type RequestHandler } from "@warlock.js/core";
2
+ import { localeSchema, type LocaleSchema } from "@shared/locale.schema";
3
3
 
4
4
  /** POST /api/locale — persists the visitor's locale preference in a cookie. */
5
5
  export const localeController: RequestHandler<Request<LocaleSchema>> = async ({
@@ -1,6 +1,6 @@
1
1
  import { type GuardedRequestHandler } from "app/auth/requests/guarded.request";
2
2
  import { Post } from "../models/post/post.model";
3
- import { type CreatePostSchema, createPostSchema } from "../schema/create-post.schema";
3
+ import { createPostSchema, type CreatePostSchema } from "../schema/create-post.schema";
4
4
 
5
5
  export const createNewPostController: GuardedRequestHandler<CreatePostSchema> = async ({
6
6
  request,
@@ -1,6 +1,6 @@
1
1
  import { type GuardedRequestHandler } from "app/auth/requests/guarded.request";
2
2
  import { Post } from "../models/post/post.model";
3
- import { type UpdatePostSchema, updatePostSchema } from "../schema/update-post.schema";
3
+ import { updatePostSchema, type UpdatePostSchema } from "../schema/update-post.schema";
4
4
 
5
5
  export const updatePostController: GuardedRequestHandler<UpdatePostSchema> = async ({
6
6
  request,
@@ -1,6 +1,6 @@
1
1
  import { Model, RegisterModel } from "@warlock.js/cascade";
2
2
  import { useComputedSlug } from "@warlock.js/core";
3
- import { type Infer, v } from "@warlock.js/seal";
3
+ import { v, type Infer } from "@warlock.js/seal";
4
4
  import { PostResource } from "app/posts/resources/post.resource";
5
5
 
6
6
  export const postSchema = v.object({
@@ -1,4 +1,4 @@
1
- import { type Infer, v } from "@warlock.js/seal";
1
+ import { v, type Infer } from "@warlock.js/seal";
2
2
 
3
3
  export const createPostSchema = v.object({
4
4
  title: v.string(),
@@ -1,4 +1,4 @@
1
- import { type Infer, v } from "@warlock.js/seal";
1
+ import { v, type Infer } from "@warlock.js/seal";
2
2
 
3
3
  export const updatePostSchema = v.object({
4
4
  title: v.string(),
@@ -1,6 +1,6 @@
1
1
  import { type GuardedRequestHandler } from "app/auth/requests/guarded.request";
2
2
  import { User } from "../models/user";
3
- import { type CreateUserSchema, createUserSchema } from "../schema/create-user.schema";
3
+ import { createUserSchema, type CreateUserSchema } from "../schema/create-user.schema";
4
4
 
5
5
  export const createNewUserController: GuardedRequestHandler<CreateUserSchema> = async ({
6
6
  request,
@@ -1,6 +1,6 @@
1
1
  import { type GuardedRequestHandler } from "app/auth/requests/guarded.request";
2
2
  import { usersRepository } from "../repositories/users.repository";
3
- import { type ListUsersSchema, listUsersSchema } from "../schema/list-users.schema";
3
+ import { listUsersSchema, type ListUsersSchema } from "../schema/list-users.schema";
4
4
 
5
5
  export const listUsersController: GuardedRequestHandler<ListUsersSchema> = async ({
6
6
  request,
@@ -1,7 +1,7 @@
1
1
  import { Auth } from "@warlock.js/auth";
2
2
  import { RegisterModel } from "@warlock.js/cascade";
3
3
  import { useHashedPassword } from "@warlock.js/core";
4
- import { type Infer, v } from "@warlock.js/seal";
4
+ import { v, type Infer } from "@warlock.js/seal";
5
5
  import { UserResource } from "app/users/resources/user.resource";
6
6
 
7
7
  export const userSchema = v.object({
@@ -1,4 +1,4 @@
1
- import { type Infer, v } from "@warlock.js/seal";
1
+ import { v, type Infer } from "@warlock.js/seal";
2
2
  import { User } from "../models/user";
3
3
 
4
4
  export const createUserSchema = v.object({
@@ -1,4 +1,4 @@
1
- import { type Infer, v } from "@warlock.js/seal";
1
+ import { v, type Infer } from "@warlock.js/seal";
2
2
 
3
3
  /**
4
4
  * Query parameters the user list accepts. Unknown keys are stripped, so a
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  env,
3
- type StorageConfigurations,
4
3
  storageConfigurations,
5
4
  uploadsPath,
5
+ type StorageConfigurations,
6
6
  } from "@warlock.js/core";
7
7
 
8
8
  const storageOptions: StorageConfigurations = {
@@ -0,0 +1,2 @@
1
+ /** Styles imported by the web build are loaded for their side effects. */
2
+ declare module "*.css" {}
@@ -1,4 +1,4 @@
1
- import { type FormControlProps, useFormControl, useSubmitButton } from "@mongez/react-form";
1
+ import { useFormControl, useSubmitButton, type FormControlProps } from "@mongez/react-form";
2
2
  import { type ReactNode } from "react";
3
3
 
4
4
  type ContactFieldProps = FormControlProps & {
@@ -1,4 +1,5 @@
1
1
  import { RuntimePreview } from "./runtime-preview";
2
+
2
3
  type HeroSectionProps = { statusMessage: string };
3
4
  export function HeroSection({ statusMessage }: HeroSectionProps) {
4
5
  return (
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ "types": ["node"],
3
4
  "target": "ESNext",
4
5
  "lib": ["esnext", "dom"],
5
6
  "allowJs": false,
@@ -7,7 +8,6 @@
7
8
  "experimentalDecorators": false,
8
9
  "esModuleInterop": true,
9
10
  "allowSyntheticDefaultImports": true,
10
- "downlevelIteration": true,
11
11
  "strict": true,
12
12
  "forceConsistentCasingInFileNames": true,
13
13
  "noFallthroughCasesInSwitch": true,