@stati/core 1.6.1 → 1.6.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/README.md CHANGED
@@ -13,20 +13,28 @@ npm install @stati/core
13
13
  ### Basic Setup
14
14
 
15
15
  ```typescript
16
- import { build, createDevServer, defineConfig } from '@stati/core';
16
+ import { build, createDevServer, defineConfig, loadConfig } from '@stati/core';
17
17
 
18
18
  // Define configuration
19
19
  const config = defineConfig({
20
- site: './site',
21
- output: './dist',
22
- public: './public',
20
+ srcDir: './site',
21
+ outDir: './dist',
22
+ staticDir: './public',
23
+ site: {
24
+ title: 'My Site',
25
+ baseUrl: 'https://example.com',
26
+ },
23
27
  });
24
28
 
25
- // Build site
26
- await build(config);
29
+ // Load configuration and build site
30
+ await build({
31
+ clean: false,
32
+ force: false,
33
+ includeDrafts: false,
34
+ });
27
35
 
28
36
  // Or start development server
29
- const server = await createDevServer(config, {
37
+ const server = await createDevServer({
30
38
  port: 3000,
31
39
  open: true,
32
40
  });
@@ -35,41 +43,67 @@ const server = await createDevServer(config, {
35
43
  ### Configuration
36
44
 
37
45
  ```typescript
38
- import { defineConfig } from '@stati/core/config';
46
+ import { defineConfig } from '@stati/core';
39
47
 
40
48
  export default defineConfig({
41
- // Site source directory
42
- site: './site',
49
+ // Source directory for content files
50
+ srcDir: './site',
43
51
 
44
52
  // Output directory for built site
45
- output: './dist',
53
+ outDir: './dist',
46
54
 
47
55
  // Static assets directory
48
- public: './public',
56
+ staticDir: './public',
49
57
 
50
58
  // Site metadata
51
- meta: {
59
+ site: {
52
60
  title: 'My Site',
53
- description: 'A great static site',
54
- url: 'https://example.com',
61
+ baseUrl: 'https://example.com',
55
62
  },
56
63
 
57
64
  // Markdown configuration
58
65
  markdown: {
59
- plugins: ['markdown-it-anchor'],
60
- options: {
61
- html: true,
62
- linkify: true,
63
- typographer: true,
66
+ plugins: ['anchor'],
67
+ configure: (md) => {
68
+ md.set({
69
+ html: true,
70
+ linkify: true,
71
+ typographer: true,
72
+ });
64
73
  },
65
74
  },
66
75
 
67
- // Template configuration
68
- templates: {
69
- engine: 'eta',
70
- options: {
71
- views: './site',
72
- cache: true,
76
+ // Eta template configuration
77
+ eta: {
78
+ filters: {
79
+ // Custom template filters
80
+ },
81
+ },
82
+
83
+ // Incremental Static Generation
84
+ isg: {
85
+ enabled: true,
86
+ ttlSeconds: 3600,
87
+ maxAgeCapDays: 30,
88
+ },
89
+
90
+ // Development server options
91
+ dev: {
92
+ port: 3000,
93
+ host: 'localhost',
94
+ open: false,
95
+ },
96
+
97
+ // Build lifecycle hooks
98
+ hooks: {
99
+ beforeAll: async (ctx) => {
100
+ console.log(`Building ${ctx.pages.length} pages`);
101
+ },
102
+ beforeRender: async (ctx) => {
103
+ // Custom pre-render logic
104
+ },
105
+ afterRender: async (ctx) => {
106
+ // Custom post-render logic
73
107
  },
74
108
  },
75
109
  });
@@ -79,7 +113,7 @@ export default defineConfig({
79
113
 
80
114
  ### Core Functions
81
115
 
82
- #### `build(options: BuildOptions): Promise<void>`
116
+ #### `build(options: BuildOptions): Promise<BuildStats>`
83
117
 
84
118
  Build a static site.
85
119
 
@@ -87,23 +121,25 @@ Build a static site.
87
121
  import { build } from '@stati/core';
88
122
 
89
123
  await build({
90
- config: './stati.config.js',
91
- force: false,
92
- clean: false,
93
- includeDrafts: false,
124
+ force: false, // Force rebuild of all pages
125
+ clean: false, // Clean output directory before build
126
+ includeDrafts: false, // Include draft pages in build
127
+ configPath: './stati.config.js', // Custom config file path
94
128
  });
95
129
  ```
96
130
 
97
- #### `createDevServer(config: StatiConfig, options: DevServerOptions): Promise<DevServer>`
131
+ #### `createDevServer(options: DevServerOptions): Promise<DevServer>`
98
132
 
99
133
  Create a development server with live reload.
100
134
 
101
135
  ```typescript
102
136
  import { createDevServer } from '@stati/core';
103
137
 
104
- const server = await createDevServer(config, {
138
+ const server = await createDevServer({
105
139
  port: 3000,
140
+ host: 'localhost',
106
141
  open: true,
142
+ configPath: './stati.config.js',
107
143
  });
108
144
  ```
109
145
 
@@ -140,13 +176,24 @@ await invalidate();
140
176
  Define a type-safe configuration with full TypeScript support.
141
177
 
142
178
  ```typescript
143
- import { defineConfig } from '@stati/core/config';
179
+ import { defineConfig } from '@stati/core';
144
180
 
145
181
  export default defineConfig({
146
182
  // Your configuration here
147
183
  });
148
184
  ```
149
185
 
186
+ #### `loadConfig(cwd?: string): Promise<StatiConfig>`
187
+
188
+ Load and validate Stati configuration from the project directory.
189
+
190
+ ```typescript
191
+ import { loadConfig } from '@stati/core';
192
+
193
+ const config = await loadConfig(); // Load from current directory
194
+ const config2 = await loadConfig('/path/to/project'); // Load from specific directory
195
+ ```
196
+
150
197
  ## Types
151
198
 
152
199
  The package exports comprehensive TypeScript types:
@@ -156,11 +203,16 @@ import type {
156
203
  StatiConfig,
157
204
  BuildOptions,
158
205
  DevServerOptions,
159
- InvalidateOptions,
160
- Page,
161
- Navigation,
162
- MarkdownOptions,
163
- TemplateOptions,
206
+ InvalidationResult,
207
+ PageModel,
208
+ FrontMatter,
209
+ BuildContext,
210
+ PageContext,
211
+ BuildHooks,
212
+ NavNode,
213
+ ISGConfig,
214
+ AgingRule,
215
+ BuildStats,
164
216
  } from '@stati/core/types';
165
217
  ```
166
218
 
@@ -22,6 +22,8 @@ export declare const CONFIG_FILE_BASE = "stati.config";
22
22
  export declare const CONFIG_FILE_PATTERNS: string[];
23
23
  /** Default development server port */
24
24
  export declare const DEFAULT_DEV_PORT = 3000;
25
+ /** Default preview server port */
26
+ export declare const DEFAULT_PREVIEW_PORT = 4000;
25
27
  /** Default development server host */
26
28
  export declare const DEFAULT_DEV_HOST = "localhost";
27
29
  /** Default development server base URL */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,iDAAiD;AACjD,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,+CAA+C;AAC/C,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,sCAAsC;AACtC,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,iCAAiC;AACjC,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC,4DAA4D;AAC5D,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,kCAAkC;AAClC,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAIjD,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,iCAAkC,CAAC;AAEtE,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,UAEhC,CAAC;AAIF,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,0BAAmD,CAAC;AAIrF,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAI9C,4BAA4B;AAC5B,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,0BAA0B;AAC1B,eAAO,MAAM,gBAAgB,QAA0B,CAAC;AAExD,yBAAyB;AACzB,eAAO,MAAM,eAAe,QAAwB,CAAC;AAErD,0BAA0B;AAC1B,eAAO,MAAM,gBAAgB,QAAsB,CAAC;AAEpD,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAI3D,oDAAoD;AACpD,eAAO,MAAM,aAAa,QAAyB,CAAC;AAEpD,iDAAiD;AACjD,eAAO,MAAM,cAAc,QAA0B,CAAC;AAEtD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,QAAmB,CAAC;AAE3C,iDAAiD;AACjD,eAAO,MAAM,WAAW,QAAuB,CAAC;AAEhD,uCAAuC;AACvC,eAAO,MAAM,WAAW,QAAsB,CAAC;AAE/C,2CAA2C;AAC3C,eAAO,MAAM,SAAS,QAAkB,CAAC;AAEzC,6CAA6C;AAC7C,eAAO,MAAM,UAAU,QAAmB,CAAC;AAI3C,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAEzC,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,+BAA+B;AAC/B,eAAO,MAAM,eAAe,eAAgC,CAAC;AAE7D,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAIvC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,8CAA8C;AAC9C,eAAO,MAAM,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,iDAAiD;AACjD,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,+CAA+C;AAC/C,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,sCAAsC;AACtC,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,iCAAiC;AACjC,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC,4DAA4D;AAC5D,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,kCAAkC;AAClC,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAIjD,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,iCAAkC,CAAC;AAEtE,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,UAEhC,CAAC;AAIF,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,kCAAkC;AAClC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,0BAAmD,CAAC;AAIrF,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAI9C,4BAA4B;AAC5B,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,0BAA0B;AAC1B,eAAO,MAAM,gBAAgB,QAA0B,CAAC;AAExD,yBAAyB;AACzB,eAAO,MAAM,eAAe,QAAwB,CAAC;AAErD,0BAA0B;AAC1B,eAAO,MAAM,gBAAgB,QAAsB,CAAC;AAEpD,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAI3D,oDAAoD;AACpD,eAAO,MAAM,aAAa,QAAyB,CAAC;AAEpD,iDAAiD;AACjD,eAAO,MAAM,cAAc,QAA0B,CAAC;AAEtD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,QAAmB,CAAC;AAE3C,iDAAiD;AACjD,eAAO,MAAM,WAAW,QAAuB,CAAC;AAEhD,uCAAuC;AACvC,eAAO,MAAM,WAAW,QAAsB,CAAC;AAE/C,2CAA2C;AAC3C,eAAO,MAAM,SAAS,QAAkB,CAAC;AAEzC,6CAA6C;AAC7C,eAAO,MAAM,UAAU,QAAmB,CAAC;AAI3C,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAEzC,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,+BAA+B;AAC/B,eAAO,MAAM,eAAe,eAAgC,CAAC;AAE7D,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAIvC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,8CAA8C;AAC9C,eAAO,MAAM,cAAc,UAAU,CAAC"}
package/dist/constants.js CHANGED
@@ -25,6 +25,8 @@ export const CONFIG_FILE_PATTERNS = CONFIG_FILE_EXTENSIONS.map((ext) => `${CONFI
25
25
  // === Development Server Constants ===
26
26
  /** Default development server port */
27
27
  export const DEFAULT_DEV_PORT = 3000;
28
+ /** Default preview server port */
29
+ export const DEFAULT_PREVIEW_PORT = 4000;
28
30
  /** Default development server host */
29
31
  export const DEFAULT_DEV_HOST = 'localhost';
30
32
  /** Default development server base URL */
@@ -1,9 +1,14 @@
1
1
  import type { Logger } from '../types/index.js';
2
2
  export interface PreviewServerOptions {
3
+ /** Port for preview server (default: 4000) */
3
4
  port?: number;
5
+ /** Host for preview server (default: 'localhost') */
4
6
  host?: string;
7
+ /** Whether to open browser automatically (default: false) */
5
8
  open?: boolean;
9
+ /** Path to config file */
6
10
  configPath?: string;
11
+ /** Logger instance */
7
12
  logger?: Logger;
8
13
  }
9
14
  export interface PreviewServer {
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/core/preview.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAyBD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CA2JxB"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/core/preview.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAyBD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CA2JxB"}
@@ -4,7 +4,7 @@ import { readFile } from 'fs/promises';
4
4
  import { loadConfig } from '../config/loader.js';
5
5
  import { resolveDevPaths } from './utils/paths.js';
6
6
  import { resolvePrettyUrl } from './utils/server.js';
7
- import { DEFAULT_DEV_PORT, DEFAULT_DEV_HOST } from '../constants.js';
7
+ import { DEFAULT_PREVIEW_PORT, DEFAULT_DEV_HOST } from '../constants.js';
8
8
  /**
9
9
  * Loads and validates configuration for the preview server.
10
10
  */
@@ -27,7 +27,7 @@ async function loadPreviewConfig(configPath, logger) {
27
27
  * without live reload functionality, perfect for previewing the production build.
28
28
  */
29
29
  export async function createPreviewServer(options = {}) {
30
- const { port = DEFAULT_DEV_PORT, host = DEFAULT_DEV_HOST, open = false, configPath, logger = {
30
+ const { port = DEFAULT_PREVIEW_PORT, host = DEFAULT_DEV_HOST, open = false, configPath, logger = {
31
31
  info: () => { },
32
32
  success: () => { },
33
33
  error: (msg) => console.error(msg),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stati/core",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",