@homepages/template-kit 0.2.0 → 0.3.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 (74) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +61 -17
  3. package/dist/base.css +9 -0
  4. package/dist/cli/check/config.js +37 -0
  5. package/dist/cli/check/css.js +117 -0
  6. package/dist/cli/check/diagnostics.js +32 -0
  7. package/dist/cli/check/index.js +87 -0
  8. package/dist/cli/check/loader.js +142 -0
  9. package/dist/cli/check/paths.js +15 -0
  10. package/dist/cli/check/relativize.js +18 -0
  11. package/dist/cli/check/render-invariants.js +24 -0
  12. package/dist/cli/check/resolve-tool.js +38 -0
  13. package/dist/cli/check/stages/deps.js +337 -0
  14. package/dist/cli/check/stages/lint.js +46 -0
  15. package/dist/cli/check/stages/render.js +101 -0
  16. package/dist/cli/check/stages/size.js +158 -0
  17. package/dist/cli/check/stages/tree.js +207 -0
  18. package/dist/cli/check/stages/typecheck.js +46 -0
  19. package/dist/cli/check/stages/validate/catalog-exhaustiveness.js +18 -0
  20. package/dist/cli/check/stages/validate/facts.js +18 -0
  21. package/dist/cli/check/stages/validate/formatter-contract.js +14 -0
  22. package/dist/cli/check/stages/validate/group-contract.js +21 -0
  23. package/dist/cli/check/stages/validate/index.js +66 -0
  24. package/dist/cli/check/stages/validate/list-scalar-contract.js +22 -0
  25. package/dist/cli/check/stages/validate/nav-contract.js +93 -0
  26. package/dist/cli/check/stages/validate/nested-slot-contract.js +12 -0
  27. package/dist/cli/check/stages/validate/object-list-contract.js +31 -0
  28. package/dist/cli/check/stages/validate/orchestrator.js +241 -0
  29. package/dist/cli/check/stages/validate/produced-by-contract.js +18 -0
  30. package/dist/cli/check/stages/validate/row-contract.js +31 -0
  31. package/dist/cli/check/stages/validate/select-contract.js +13 -0
  32. package/dist/cli/check/stages/validate/source-contract.js +21 -0
  33. package/dist/cli/check/stages/validate/variant-contract.js +15 -0
  34. package/dist/cli/check/workspace.js +86 -0
  35. package/dist/cli/theme/generate.js +43 -0
  36. package/dist/cli/theme/index.js +33 -0
  37. package/dist/cli/theme/load-theme.js +69 -0
  38. package/dist/cli.js +22 -4
  39. package/dist/contracts/fill-treatments.js +47 -0
  40. package/dist/design-system/theme.d.ts +30 -300
  41. package/dist/design-system/theme.js +112 -90
  42. package/dist/eslint/rules/no-hex.js +78 -6
  43. package/dist/eslint.js +1 -1
  44. package/dist/index.d.ts +2 -2
  45. package/dist/index.js +2 -2
  46. package/dist/package.js +1 -1
  47. package/dist/primitives/Image.js +1 -1
  48. package/dist/schema/fill-spec.d.ts +80 -590
  49. package/dist/schema/fixture-schema.d.ts +5 -81
  50. package/dist/schema/manifest.d.ts +39 -475
  51. package/dist/schema/resolve-section-ref.js +10 -0
  52. package/dist/schema/rows.js +10 -0
  53. package/dist/schema/section-nav.js +9 -0
  54. package/dist/schema/section-schema.d.ts +51 -437
  55. package/dist/schema/slot-types.d.ts +12 -16
  56. package/dist/styles.css +31 -88
  57. package/docs/INDEX.md +4 -3
  58. package/docs/check.md +121 -0
  59. package/docs/eslint.md +18 -8
  60. package/docs/llms.txt +21 -9
  61. package/docs/primitives.md +5 -0
  62. package/docs/rules/INDEX.md +11 -4
  63. package/docs/rules/bundle-binary-asset.md +102 -0
  64. package/docs/rules/fixtures-invalid.md +96 -0
  65. package/docs/rules/license-denied.md +11 -3
  66. package/docs/rules/manifest-invalid.md +99 -0
  67. package/docs/rules/no-hex.md +76 -10
  68. package/docs/rules/no-templates.md +87 -0
  69. package/docs/rules/parse-error.md +76 -0
  70. package/docs/rules/schema-invalid.md +96 -0
  71. package/docs/rules/size-section-css.md +2 -2
  72. package/docs/theme-and-css.md +155 -90
  73. package/package.json +4 -9
  74. package/tsconfig.json +1 -1
@@ -1,41 +1,170 @@
1
1
  ---
2
2
  purpose: The kit's two CSS entries, how a section's own CSS reaches the page, the TokenTheme a template supplies, and the breakpoint ladder.
3
3
  status: living
4
- related: [primitives.md, schema-system.md, eslint.md, rules/INDEX.md]
5
- updated: 2026-07-14
4
+ related: [primitives.md, schema-system.md, eslint.md, rules/INDEX.md, check.md]
5
+ updated: 2026-07-15
6
6
  ---
7
7
  # Theme and CSS
8
8
 
9
- The kit owns the **contract**: the Tailwind utility namespace (`text-ink`,
10
- `bg-surface-alt`, `rounded-md`), the breakpoint ladder, the reset gaps Tailwind's preflight leaves, and the section box
11
- model. Your template owns the **values** behind that namespace, declared once as a
12
- `TokenTheme`.
9
+ Your template owns its design system end to end — **the token names included**. You
10
+ declare the tokens your design actually has in a `TokenTheme`, and `template-kit theme`
11
+ compiles that one declaration into the Tailwind utilities that expose them. Declare a
12
+ colour named `lagoon` and `bg-lagoon` exists.
13
+
14
+ The kit owns only what is true of **every** template: the breakpoint ladder, the spacing
15
+ base unit, the motion defaults, the reset gaps Tailwind's preflight leaves, and the
16
+ section box model. It ships no colour, font, type, radius or shadow of its own, and there
17
+ is no shared file for you to edit to make a token of yours usable.
13
18
 
14
19
  Two CSS entries ship, and they are not interchangeable.
15
20
 
16
21
  | Entry | What it is | How it loads |
17
22
  |---|---|---|
18
- | `@homepages/template-kit/styles.css` | The Tailwind v4 `@theme inline` alias layer + the breakpoint ladder + `@source` registration of the kit's compiled JS | imported into **your Tailwind entry**, after Tailwind |
19
- | `@homepages/template-kit/base.css` | Cascade-layer order, the three reset gaps Tailwind's preflight leaves, `.tr-section`, and the motion tokens | its **own stylesheet** on the page — not part of the Tailwind entry |
23
+ | `@homepages/template-kit/styles.css` | The global Tailwind preamble: breakpoint ladder, `--spacing`, motion defaults, and `@source` registration of the kit's compiled JS | imported into **your Tailwind entry**, after Tailwind |
24
+ | `@homepages/template-kit/base.css` | Cascade-layer order, the three reset gaps Tailwind's preflight leaves, `.tr-section`, `.tr-image-frame`, and the motion tokens | its **own stylesheet** on the page — not part of the Tailwind entry |
20
25
 
21
- ## Import Tailwind exactly once
26
+ ## Your Tailwind entry
22
27
 
23
28
  ```css
24
29
  /* your CSS entry */
25
30
  @import "tailwindcss";
26
31
  @import "@homepages/template-kit/styles.css";
32
+ @import "./theme.css"; /* generated by `template-kit theme` from theme.ts */
27
33
  ```
28
34
 
29
- `styles.css` deliberately does **not** `@import "tailwindcss"` itself. Exactly one
30
- `@import "tailwindcss"` may exist per build graph — yours. Two double-emit Tailwind's
31
- preflight reset (`box-sizing` declared twice, several KB of duplicate base layer), and
32
- nothing errors to tell you.
35
+ Three constraints, all of them silent when broken:
36
+
37
+ - **Import Tailwind exactly once per build graph.** `styles.css` deliberately does not
38
+ `@import "tailwindcss"` itself yours does. Two double-emit Tailwind's preflight reset
39
+ (`box-sizing` declared twice, several KB of duplicate base layer), and nothing errors.
40
+ - **Your generated theme must be imported here, inside the Tailwind build graph.** It
41
+ contains an `@theme` block, which is a Tailwind directive: anywhere outside the graph it
42
+ is inert, and you get a stylesheet with no token utilities and no error explaining why.
43
+ - **Import it after `styles.css`**, so the kit's globals are in place before your tokens
44
+ land on top of them.
45
+
46
+ `styles.css` also carries an `@source` line registering the kit's own shipped `dist` for
47
+ Tailwind's class scan. That is how the utility classes baked into the kit's primitives
48
+ (`Image`'s `object-cover`, …) reach your compiled CSS; it also overrides Tailwind's default
49
+ exclusion of `node_modules`. You do not need to add a `@source` for the kit yourself.
50
+
51
+ ## `TokenTheme` — your template's design system
52
+
53
+ A template's `theme.ts` exports a `TokenTheme`: six open records of tokens, plus the
54
+ document defaults that dress the page. `theme.ts` is the file you write; run
55
+ `template-kit theme` to compile it into the `theme.css` your Tailwind entry imports
56
+ (see [Generating `theme.css`](#generating-themecss) below).
57
+
58
+ ```ts
59
+ import type { TokenTheme } from "@homepages/template-kit";
60
+
61
+ export const theme: TokenTheme = {
62
+ colors: { ink: "#111418", page: "#ffffff", "surface-alt": "#f4f4f5", lagoon: "#1c6e7d" },
63
+ fonts: { sans: '"Inter", system-ui, sans-serif', display: '"Canela", Georgia, serif' },
64
+ type: { base: "1rem", "2xl": "1.5rem", display: "clamp(2.5rem, 6vw, 4.5rem)" },
65
+ radii: { md: "6px", pill: "9999px" },
66
+ shadows: { card: "0 1px 2px rgb(0 0 0 / 0.06)" },
67
+ layout: { "container-max": "1280px", "header-height": "72px" },
68
+
69
+ // Optional font-loading block, emitted ahead of everything else.
70
+ fontFaces: '@import url("https://fonts.example/inter.css");',
71
+
72
+ // Which of YOUR tokens dress the document.
73
+ document: { font: "sans", color: "ink", background: "page", fontSize: "base" },
74
+ };
75
+ ```
76
+
77
+ Nothing is required to exist. Tailwind's own defaults survive underneath your tokens —
78
+ `text-2xl`, `rounded-lg`, `red-500` all still work — so a sparse theme is a working theme.
79
+ (The breakpoint ladder is the one exception: `sm:`, `xl:` and `2xl:` are deliberately
80
+ switched off. See below.)
81
+
82
+ ### Namespaces and the utilities they produce
83
+
84
+ Each record maps to one Tailwind theme namespace. A token's key is emitted **verbatim**
85
+ into both the custom property and the utility — no camelCase-to-kebab transform, so what
86
+ you type is what you get.
87
+
88
+ | Record | Custom property | Tailwind utilities | Example |
89
+ |---|---|---|---|
90
+ | `colors` | `--tr-color-<name>` | `bg-`, `text-`, `border-`, `ring-`, `fill-`, `stroke-`, … | `lagoon` → `bg-lagoon` |
91
+ | `fonts` | `--tr-font-<name>` | `font-<name>` | `display` → `font-display` |
92
+ | `type` | `--tr-text-<name>` | `text-<name>` | `2xl` → `text-2xl` |
93
+ | `radii` | `--tr-radius-<name>` | `rounded-<name>` | `pill` → `rounded-pill` |
94
+ | `shadows` | `--tr-shadow-<name>` | `shadow-<name>` | `card` → `shadow-card` |
95
+ | `layout` | `--tr-<name>` | *(none)* | `header-height` → `var(--tr-header-height)` |
96
+
97
+ `layout` has no Tailwind utility namespace, so its tokens get a `--tr-*` value and no
98
+ utility — reference them with `var()` from your own CSS.
99
+
100
+ ### Token names
101
+
102
+ Kebab-case: `[a-z0-9]` groups separated by single hyphens (`ink`, `ink-soft`, `bp2`).
103
+ `TokenNameSchema` is exported if you want to validate names yourself.
104
+
105
+ **One token, one utility.** Two utility names cannot share a token — if you want both
106
+ `bg-brand` and `bg-primary`, declare both.
107
+
108
+ ### The `document` block
109
+
110
+ Required. It names which of your **own** tokens dress the page — the `body` font-family,
111
+ colour, background, and font-size. `font` and `fontSize` resolve against `fonts` and
112
+ `type`; `color` and `background` resolve against `colors`.
113
+
114
+ Every reference is validated against your declared tokens, in its own group: a typo, or a
115
+ colour name where a font belongs, fails at parse rather than rendering an unthemed page in
116
+ silence.
117
+
118
+ ### Validation
119
+
120
+ `TokenThemeSchema` validates the object at runtime, and it is `.strict()` — an unknown
121
+ top-level key is an error rather than a silently-dead set of tokens.
122
+
123
+ ## Generating `theme.css`
33
124
 
34
- `styles.css` also carries `@source "./**/*.js"`, which registers the kit's own shipped
35
- `dist` for Tailwind's class scan. That is how the utility classes baked into the kit's
36
- primitives (`Image`'s `bg-surface-alt`, `object-cover`, …) reach your compiled CSS; it
37
- also overrides Tailwind's default exclusion of `node_modules`. You do not need to add a
38
- `@source` for the kit yourself.
125
+ `template-kit theme` loads `templates/<key>/theme.ts`, validates its `theme` export
126
+ against `TokenThemeSchema`, and writes `templates/<key>/theme.css` the file your
127
+ Tailwind entry imports.
128
+
129
+ ```bash
130
+ template-kit theme # infer the template from cwd, or the workspace's one template
131
+ template-kit theme <template> # generate one named template's theme.css, by its key
132
+ template-kit theme --all # generate every template in the workspace
133
+ ```
134
+
135
+ `theme.css` is generated — it opens with a header saying so, and it is not meant to be
136
+ hand-edited. Re-run `template-kit theme` after changing `theme.ts` and commit the
137
+ regenerated file alongside it.
138
+
139
+ A missing `theme.ts`, a `theme.ts` that doesn't export `theme`, or a `theme` that fails
140
+ `TokenThemeSchema` all fail the command with a message naming the file and the problem —
141
+ nothing is written in that case.
142
+
143
+ In order, the file it writes contains:
144
+
145
+ 1. your `fontFaces` block, if you set one;
146
+ 2. `@theme inline { --color-<name>: var(--tr-color-<name>); … }` — the alias layer, which
147
+ is what brings your token utilities into existence;
148
+ 3. `:root { --tr-color-<name>: <value>; … }` — the values behind those aliases;
149
+ 4. `body { … }` — your `document` defaults, written as `var()` indirections so a runtime
150
+ `:root` override still cascades to the page.
151
+
152
+ Deterministic: keys are sorted, so the same theme always content-hashes identically.
153
+
154
+ ## Colour in sections
155
+
156
+ A section carries no palette of its own, in server-rendered code or inside an island — the
157
+ `template-kit/no-hex` [lint rule](rules/no-hex.md) flags a hard-coded hex literal in a
158
+ colour context, and a CSS colour function anywhere, without exempting `"use client"` files
159
+ the way most of the preset's other rules do. Sections spend the theme's tokens; the theme
160
+ is where a colour is named.
161
+
162
+ For a colour the theme does not name — a hover, active, or pressed step, or a translucent
163
+ tint — derive it from the tokens that *are* named, with a `color-mix()` over theme-derived
164
+ arguments:
165
+ `hover:bg-[color-mix(in_srgb,var(--tr-color-primary)_80%,var(--tr-color-surface))]`. Such a
166
+ mix composes a colour out of the theme rather than stating one, and is the single colour
167
+ function `no-hex` allows — it carves out no other.
39
168
 
40
169
  ## How a section's CSS reaches the page
41
170
 
@@ -70,12 +199,10 @@ Two constraints follow directly, and both are enforced by lint:
70
199
 
71
200
  A published page loads, in order:
72
201
 
73
- 1. **`base.css`** — layer order, the reset gaps, `.tr-section`, motion tokens.
74
- 2. **Your compiled theme CSS** — the `:root` block that defines the `--tr-*` values
75
- *and* the `body` block that applies them (font-family, color, background, size),
76
- both produced by `compileThemeToCss`.
77
- 3. **Your compiled Tailwind bundle** — `@import "tailwindcss"` + `styles.css` + your
78
- section markup's utilities.
202
+ 1. **`base.css`** — layer order, the reset gaps, `.tr-section`, `.tr-image-frame`, motion
203
+ tokens.
204
+ 2. **Your compiled Tailwind bundle** your entry: `@import "tailwindcss"` + the kit's
205
+ `styles.css` + your compiled theme + the utilities your section markup uses.
79
206
 
80
207
  The layer order `base.css` declares is:
81
208
 
@@ -96,70 +223,9 @@ not make: `font-smoothing`, `button { cursor: pointer }` (Tailwind v4 leaves but
96
223
 
97
224
  Ship `base.css` without a Tailwind entry on the page and you get an unreset page.
98
225
 
99
- `base.css` references **no theme token**. Your fonts and colors reach the document
100
- through `compileThemeToCss`, which emits both the `:root` block that defines your tokens
101
- and the `body` block that applies them. Nothing global is opinionated about your brand.
102
-
103
- ## `TokenTheme` — your template's values
104
-
105
- A template's `theme.ts` exports a `TokenTheme`. `compileThemeToCss` turns it into the
106
- `:root { --tr-*: … }` block that defines your tokens **and** the `body` block that
107
- applies them (font-family, color, background, size) to the document — together, the
108
- CSS the template's bundle ships. Deterministic (stable key order, palette keys
109
- sorted), so the same theme always content-hashes identically.
110
-
111
- ```ts
112
- import { compileThemeToCss, type TokenTheme } from "@homepages/template-kit";
113
-
114
- export const theme: TokenTheme = {
115
- colors: { ink: "#111418", background: "#ffffff", /* …every role, see below */ },
116
- palette: { "brand-gold": "#c8a248" }, // optional escape hatch
117
- fonts: {
118
- body: '"Inter", system-ui, sans-serif',
119
- heading: '"Canela", Georgia, serif',
120
- numeric: '"Inter", system-ui, sans-serif',
121
- label: '"Inter", system-ui, sans-serif',
122
- fontFaces: '@import url("https://fonts.example/inter.css");', // optional, emitted before :root
123
- },
124
- type: { xs: "0.75rem", sm: "0.875rem", base: "1rem", /* lg xl 2xl 3xl 4xl 5xl display */ },
125
- radii: { sm: "2px", md: "6px", lg: "12px", full: "9999px" },
126
- shadows: { sm: "…", md: "…", lg: "…" },
127
- layout: { containerMax: "1280px", containerPad: "1.5rem", headerHeight: "72px" },
128
- };
129
-
130
- const css = compileThemeToCss(theme);
131
- ```
132
-
133
- `TokenThemeSchema` validates it at runtime; the object is `.strict()`, so an unknown key
134
- is an error rather than a silently-dead token. Every scale is **complete or invalid** —
135
- there are no defaults to fall back on.
136
-
137
- ### Color roles
138
-
139
- The role keys are fixed. Each maps 1:1 to a `--tr-color-*` variable, and the Tailwind
140
- utility is named after **the variable**, not the role key — so `surfaceAlt` is
141
- `bg-surface-alt`, and `primaryStrong` is `bg-primary-darker`. Read the mapping off the
142
- exported `COLOR_ROLE_VARS` (and `FONT_ROLE_VARS`, `TYPE_STEP_VARS`, `RADIUS_VARS`,
143
- `SHADOW_VARS`, `LAYOUT_VARS` for the other scales), or let your editor autocomplete the
144
- `ColorRole` union:
145
-
146
- | Role key | CSS variable | Utility |
147
- |---|---|---|
148
- | `ink` `inkSoft` `inkMute` | `--tr-color-ink[-soft|-mute]` | `text-ink`, `text-ink-soft`, `text-ink-mute` |
149
- | `background` `surface` `surfaceAlt` | `--tr-color-background` / `-surface` / `-surface-alt` | `bg-surface-alt`, … |
150
- | `border` `borderStrong` | `--tr-color-border[-strong]` | `border-border-strong`, … |
151
- | `primary` `primaryFg` `primaryStrong` | `--tr-color-primary` / `-primary-fg` / `-primary-darker` | `bg-primary`, `text-primary-fg`, `bg-primary-darker` |
152
- | `accent` `accentFg` `accentStrong` | `--tr-color-accent` / `-accent-contrast` / `-accent-strong` | `bg-accent`, `text-accent-contrast`, `bg-accent-strong` |
153
- | `overlay` `overlayStrong` `overlayLight` | `--tr-color-overlay[-strong|-light]` | `bg-overlay`, … |
154
- | `darkBg` `darkFg` `darkFgMute` `darkBorder` | `--tr-color-footer-bg` / `-footer-fg` / `-footer-fg-mute` / `-footer-divider` | `bg-footer-bg`, `text-footer-fg`, `border-footer-divider`, … |
155
-
156
- `palette` is the open escape hatch: each key becomes `--tr-color-<key>`. Sections normally
157
- use the semantic roles — reach for a brand swatch only when no role honestly fits.
158
-
159
- A section carries no palette of its own, in server-rendered code or inside an island —
160
- the `template-kit/no-hex` [lint rule](eslint.md#universal--no-island-exemption) bans a
161
- hard-coded hex literal or CSS color function in a color context and does not exempt
162
- `"use client"` files, unlike most of the preset's other rules.
226
+ `base.css` references **no design token of yours** nothing global is opinionated about
227
+ your brand. Its one tintable surface is the `Image` frame's placeholder fill; see
228
+ [`Image`](primitives.md#image--the-defensive-image-primitive).
163
229
 
164
230
  ## The breakpoint ladder
165
231
 
@@ -191,8 +257,7 @@ memory — enough to make it evict a live WebGL map's layer on scroll, blanking
191
257
  they stop consuming that memory.
192
258
 
193
259
  The kit does **not** apply this for you — it has a real cost (below), and only you know
194
- whether your page needs it. If it does, add the rule to the same CSS entry that does
195
- `@import "tailwindcss"; @import "@homepages/template-kit/styles.css";` — the third
260
+ whether your page needs it. If it does, add the rule to your Tailwind entry the second
196
261
  stylesheet the page loads:
197
262
 
198
263
  ```css
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homepages/template-kit",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Authoring kit for HomePages marketing-section templates: schema system, contract primitives, theme tokens, and the template-kit CLI.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -58,6 +58,7 @@
58
58
  "build": "tsdown",
59
59
  "typecheck": "tsc --noEmit",
60
60
  "lint": "eslint .",
61
+ "pretest": "node test/link-fixture-workspace.mjs",
61
62
  "test": "node --import tsx --test 'src/**/*.test.ts' 'src/**/*.test.tsx'",
62
63
  "lint:pkg": "publint --strict && attw --pack . --profile esm-only --exclude-entrypoints styles.css base.css",
63
64
  "verify:consumer": "node scripts/verify-consumer.mjs",
@@ -67,15 +68,9 @@
67
68
  "release": "changeset publish"
68
69
  },
69
70
  "peerDependencies": {
70
- "eslint": "^9.0.0",
71
71
  "react": "^19.0.0",
72
72
  "react-dom": "^19.0.0"
73
73
  },
74
- "peerDependenciesMeta": {
75
- "eslint": {
76
- "optional": true
77
- }
78
- },
79
74
  "devDependencies": {
80
75
  "@arethetypeswrong/cli": "^0.18.5",
81
76
  "@changesets/cli": "^2.29.8",
@@ -85,6 +80,7 @@
85
80
  "@types/node": "^20.17.10",
86
81
  "@types/react": "^19.0.0",
87
82
  "@types/react-dom": "^19.0.0",
83
+ "@typescript-eslint/parser": "^8.60.1",
88
84
  "esbuild": "^0.28.1",
89
85
  "eslint": "^9.39.4",
90
86
  "jsdom": "^26.1.0",
@@ -98,7 +94,6 @@
98
94
  "typescript-eslint": "^8.60.1"
99
95
  },
100
96
  "dependencies": {
101
- "@typescript-eslint/parser": "^8.60.1",
102
- "zod": "^3.23.8"
97
+ "zod": "^4.4.3"
103
98
  }
104
99
  }
package/tsconfig.json CHANGED
@@ -3,5 +3,5 @@
3
3
  "compilerOptions": {
4
4
  "noEmit": true
5
5
  },
6
- "exclude": ["node_modules", "dist", ".tmp-consumer"]
6
+ "exclude": ["node_modules", "dist", ".tmp-consumer", "test/fixtures"]
7
7
  }