@krate/core 0.3.0 → 0.4.0-beta.2

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/bin/krate CHANGED
Binary file
package/dist/config.d.ts CHANGED
@@ -11,11 +11,12 @@
11
11
  * outDir: "dist",
12
12
  * plugins: [
13
13
  * sitemap({ baseUrl: "https://example.com" }),
14
- * docs({ contentDir: "content/docs", title: "Docs" }),
14
+ * docs({ contentDir: "src/content/docs", title: "Docs" }),
15
15
  * ],
16
16
  * });
17
17
  * ```
18
18
  */
19
+ import type { DocsSearchOptions, DocsSidebarItem, DocsThemeDescriptor, DocsThemeOptions } from "@krate/plugin";
19
20
  export interface DevServerConfig {
20
21
  /** Dev server port (default: 3000). */
21
22
  port?: number;
@@ -84,35 +85,26 @@ export interface RobotsConfig {
84
85
  disallow?: string;
85
86
  sitemap?: string;
86
87
  }
87
- export interface DocsSidebarItem {
88
- title?: string;
89
- url?: string;
90
- children?: DocsSidebarItem[];
91
- }
92
- export interface DocsSearchOptions {
93
- /**
94
- * Turn the search bar on/off (default: true).
95
- */
96
- enabled?: boolean;
97
- /**
98
- * Index backend. "docfind" (default) builds a WASM search index with the
99
- * documents embedded in-process at build time; "json" uses the classic
100
- * search-index.json. The client falls back to JSON automatically when the
101
- * WASM index is unavailable.
102
- */
103
- engine?: "docfind" | "json";
104
- /**
105
- * Max number of results shown (default: 8).
106
- */
107
- maxResults?: number;
108
- }
109
88
  export interface DocsPluginOptions {
110
89
  /** Directory of markdown/mdx docs, relative to project root. */
111
90
  contentDir?: string;
112
91
  /** Site title shown in the docs layout. */
113
92
  title?: string;
114
- /** Path to a layout component, relative to project root. */
93
+ /**
94
+ * Path to a layout component, relative to project root. The layout receives
95
+ * a single {@link DocsLayoutProps} object and owns the docs chrome (navbar,
96
+ * sidebar, TOC, breadcrumbs, prev/next, social links).
97
+ */
115
98
  layout?: string;
99
+ /**
100
+ * Docs theme — the component every generated docs page is rendered through.
101
+ * Like {@link layout}: a root-relative file path (`./` or `/`) or an npm
102
+ * package name (a docs theme installed from a registry) — or a theme
103
+ * descriptor returned by a theme factory (bare object). `theme` and
104
+ * `layout` are aliases: set only one unless both resolve to the same
105
+ * component.
106
+ */
107
+ theme?: DocsThemeDescriptor<DocsThemeOptions> | string;
116
108
  /** Custom sidebar override. */
117
109
  sidebar?: DocsSidebarItem[];
118
110
  /** Social links rendered in the docs layout. */
@@ -122,7 +114,13 @@ export interface DocsPluginOptions {
122
114
  }[];
123
115
  /** Search bar configuration (docfind WASM search). */
124
116
  search?: DocsSearchOptions;
117
+ /**
118
+ * Base URL for "Edit this page" links (e.g. a GitHub blob URL). The per-page
119
+ * frontmatter `editUrl` key overrides it.
120
+ */
121
+ editLinkBase?: string;
125
122
  }
123
+ export type { DocsHeadTag, DocsHero, DocsLayoutProps, DocsSearchOptions, DocsSidebarItem, DocsThemeDescriptor, DocsThemeOptions, } from "@krate/plugin";
126
124
  export interface SitemapPluginOptions {
127
125
  /** e.g. "https://example.com" (falls back to `seo.baseUrl`). */
128
126
  baseUrl: string;
@@ -160,6 +158,33 @@ export interface KrateConfig {
160
158
  runtimeDirs?: string[];
161
159
  pathAliases?: Record<string, string[]>;
162
160
  tsBaseDir?: string;
161
+ /**
162
+ * Output mode. Default (`undefined`) allows request-time rendering
163
+ * (SSR/ISR/streaming and dynamic route fallbacks). `"static"` produces a
164
+ * fully static build: dynamic routes render only the params returned by
165
+ * `generateStaticParams`, unknown params 404, and SSR/ISR/streaming are
166
+ * disabled. A page can opt back in with `export const dynamicParams = true`.
167
+ */
168
+ output?: "static";
169
+ /**
170
+ * Compiler-enforced quality gates. When configured, `krate build` runs the
171
+ * rules and fails on findings at or above `failOn`; `krate check` runs the
172
+ * same rules on an existing build. Categories run by default only when a
173
+ * `checks` object is present.
174
+ */
175
+ checks?: ChecksConfig;
176
+ /**
177
+ * Typed content collections. Either a plain object or `defineContent({...})`:
178
+ *
179
+ * ```ts
180
+ * export default defineConfig({
181
+ * content: defineContent({
182
+ * blog: { dir: "src/content/blog", schema: { title: "string" } },
183
+ * }),
184
+ * });
185
+ * ```
186
+ */
187
+ content?: ContentConfig;
163
188
  /** Optional validation function called at build time with the loaded config. */
164
189
  validate?: (config: KrateConfig) => void | Promise<void>;
165
190
  }
@@ -177,4 +202,79 @@ export declare function sitemap(options: SitemapPluginOptions): PluginConfig;
177
202
  * content directory.
178
203
  */
179
204
  export declare function docs(options?: DocsPluginOptions): PluginConfig;
205
+ /** Shorthand field types accepted in a collection schema. */
206
+ export type ContentFieldType = "string" | "number" | "boolean" | "string[]" | "number[]" | "date";
207
+ /** Object form of a schema field. */
208
+ export interface ContentField {
209
+ type: ContentFieldType;
210
+ /** Require the field to be present in frontmatter (default: false). */
211
+ required?: boolean;
212
+ }
213
+ /** One field: a shorthand type string or a {@link ContentField} object. */
214
+ export type ContentFieldSpec = ContentFieldType | ContentField;
215
+ /** A single content collection. */
216
+ export interface ContentCollection {
217
+ /** Directory containing the collection's markdown/mdx entries, relative to
218
+ * the project root (default: `src/content/<name>`). */
219
+ dir?: string;
220
+ /** Frontmatter schema; each key maps to a field spec. */
221
+ schema?: Record<string, ContentFieldSpec>;
222
+ }
223
+ /** The shape passed to {@link defineContent}. */
224
+ export type ContentConfig = Record<string, ContentCollection>;
225
+ /**
226
+ * Define typed content collections. Optional identity helper — you can also
227
+ * pass a plain object to `defineConfig({ content: {...} })`; it exists purely
228
+ * for type-checking and editor assistance.
229
+ *
230
+ * Krate validates each entry's frontmatter against the schema at build time and
231
+ * generates typed declarations (`.krate/types/content.d.ts`).
232
+ *
233
+ * ```ts
234
+ * import { defineConfig, defineContent } from "@krate/core";
235
+ *
236
+ * export default defineConfig({
237
+ * content: defineContent({
238
+ * blog: {
239
+ * dir: "src/content/blog",
240
+ * schema: {
241
+ * title: "string",
242
+ * order: { type: "number", required: true },
243
+ * tags: "string[]",
244
+ * },
245
+ * },
246
+ * }),
247
+ * });
248
+ * ```
249
+ */
250
+ export declare function defineContent(config: ContentConfig): ContentConfig;
251
+ /** Severity for a check rule or category. `false` disables it. */
252
+ export type CheckSeverity = "error" | "warning" | "off" | boolean;
253
+ /** Built-in check rule IDs. */
254
+ export type CheckRuleId = "a11y/img-alt" | "a11y/heading-order" | "a11y/accessible-name" | "seo/title" | "seo/description" | "seo/canonical" | "seo/og" | "seo/lang" | "perf/js-budget" | "perf/image-dims";
255
+ export interface ChecksConfig {
256
+ /** Master switch (default: true when `checks` is present). */
257
+ enabled?: boolean;
258
+ /** Accessibility rules. `false` turns the category off. */
259
+ a11y?: CheckSeverity;
260
+ /** SEO rules. */
261
+ seo?: CheckSeverity;
262
+ /** Performance-budget rules. */
263
+ perf?: CheckSeverity;
264
+ /** Per-rule severity overrides, keyed by rule ID. */
265
+ rules?: Partial<Record<CheckRuleId, CheckSeverity>>;
266
+ /** Rule IDs to suppress entirely. */
267
+ ignore?: CheckRuleId[];
268
+ /** Per-route budgets. `js` is the client-JS budget in kilobytes. */
269
+ budget?: {
270
+ js?: number;
271
+ };
272
+ /** Minimum severity that fails `krate check` / the build (default "error"). */
273
+ failOn?: "error" | "warning";
274
+ /**
275
+ * Paths (relative to the project root) to JS/TS modules that export a custom
276
+ * `check(page, krate)` rule. Runs in the embedded QuickJS runtime.
277
+ */
278
+ custom?: string[];
279
+ }
180
280
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -11,7 +11,7 @@
11
11
  * outDir: "dist",
12
12
  * plugins: [
13
13
  * sitemap({ baseUrl: "https://example.com" }),
14
- * docs({ contentDir: "content/docs", title: "Docs" }),
14
+ * docs({ contentDir: "src/content/docs", title: "Docs" }),
15
15
  * ],
16
16
  * });
17
17
  * ```
@@ -36,3 +36,31 @@ export function sitemap(options) {
36
36
  export function docs(options = {}) {
37
37
  return { name: "docs", order: 10, options };
38
38
  }
39
+ /**
40
+ * Define typed content collections. Optional identity helper — you can also
41
+ * pass a plain object to `defineConfig({ content: {...} })`; it exists purely
42
+ * for type-checking and editor assistance.
43
+ *
44
+ * Krate validates each entry's frontmatter against the schema at build time and
45
+ * generates typed declarations (`.krate/types/content.d.ts`).
46
+ *
47
+ * ```ts
48
+ * import { defineConfig, defineContent } from "@krate/core";
49
+ *
50
+ * export default defineConfig({
51
+ * content: defineContent({
52
+ * blog: {
53
+ * dir: "src/content/blog",
54
+ * schema: {
55
+ * title: "string",
56
+ * order: { type: "number", required: true },
57
+ * tags: "string[]",
58
+ * },
59
+ * },
60
+ * }),
61
+ * });
62
+ * ```
63
+ */
64
+ export function defineContent(config) {
65
+ return config;
66
+ }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export { defineConfig, docs, sitemap } from "./config.js";
2
- export type { KrateConfig, PluginConfig, DevServerConfig, TailwindConfig, CSPConfig, MarkdownConfig, SSRConfig, RedirectConfig, RewriteConfig, SEOConfig, RobotsConfig, DocsPluginOptions, DocsSidebarItem, SitemapPluginOptions, RuntimeName, } from "./config.js";
1
+ export { defineConfig, docs, sitemap, defineContent } from "./config.js";
2
+ export type { KrateConfig, PluginConfig, DevServerConfig, TailwindConfig, CSPConfig, MarkdownConfig, SSRConfig, RedirectConfig, RewriteConfig, SEOConfig, RobotsConfig, DocsPluginOptions, DocsSidebarItem, DocsSearchOptions, DocsThemeDescriptor, DocsThemeOptions, SitemapPluginOptions, RuntimeName, ContentConfig, ContentCollection, ContentField, ContentFieldSpec, ContentFieldType, ChecksConfig, CheckSeverity, CheckRuleId, } from "./config.js";
3
+ export type { DocsLayoutProps } from "./config.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,WAAW,GACZ,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export { defineConfig, docs, sitemap } from "./config.js";
1
+ export { defineConfig, docs, sitemap, defineContent } from "./config.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krate/core",
3
- "version": "0.3.0",
3
+ "version": "0.4.0-beta.2",
4
4
  "description": "The Krate CLI — a Go-native static site generator with signal-based reactivity.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -36,18 +36,21 @@
36
36
  "dist",
37
37
  "install.js"
38
38
  ],
39
+ "dependencies": {
40
+ "@krate/plugin": "0.4.0-beta.2"
41
+ },
39
42
  "devDependencies": {
40
43
  "@types/node": "^20.19.43",
41
44
  "typescript": "^5.5.0"
42
45
  },
43
46
  "optionalDependencies": {
44
- "@krate/core-darwin-arm64": "0.3.0",
45
- "@krate/core-darwin-x64": "0.3.0",
46
- "@krate/core-linux-arm64": "0.3.0",
47
- "@krate/core-linux-x64": "0.3.0",
48
- "@krate/core-linux-x64-musl": "0.3.0",
49
- "@krate/core-win32-arm64": "0.3.0",
50
- "@krate/core-win32-x64": "0.3.0"
47
+ "@krate/core-darwin-arm64": "0.4.0-beta.2",
48
+ "@krate/core-darwin-x64": "0.4.0-beta.2",
49
+ "@krate/core-linux-arm64": "0.4.0-beta.2",
50
+ "@krate/core-linux-x64": "0.4.0-beta.2",
51
+ "@krate/core-linux-x64-musl": "0.4.0-beta.2",
52
+ "@krate/core-win32-arm64": "0.4.0-beta.2",
53
+ "@krate/core-win32-x64": "0.4.0-beta.2"
51
54
  },
52
55
  "scripts": {
53
56
  "build": "tsc",