@stati/core 1.1.0 → 1.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 (39) hide show
  1. package/README.md +19 -7
  2. package/dist/config/loader.d.ts.map +1 -1
  3. package/dist/config/loader.js +24 -2
  4. package/dist/core/build.d.ts +21 -15
  5. package/dist/core/build.d.ts.map +1 -1
  6. package/dist/core/build.js +141 -42
  7. package/dist/core/dev.d.ts.map +1 -1
  8. package/dist/core/dev.js +84 -18
  9. package/dist/core/invalidate.d.ts +67 -1
  10. package/dist/core/invalidate.d.ts.map +1 -1
  11. package/dist/core/invalidate.js +321 -4
  12. package/dist/core/isg/build-lock.d.ts +116 -0
  13. package/dist/core/isg/build-lock.d.ts.map +1 -0
  14. package/dist/core/isg/build-lock.js +245 -0
  15. package/dist/core/isg/builder.d.ts +51 -0
  16. package/dist/core/isg/builder.d.ts.map +1 -0
  17. package/dist/core/isg/builder.js +321 -0
  18. package/dist/core/isg/deps.d.ts +63 -0
  19. package/dist/core/isg/deps.d.ts.map +1 -0
  20. package/dist/core/isg/deps.js +332 -0
  21. package/dist/core/isg/hash.d.ts +48 -0
  22. package/dist/core/isg/hash.d.ts.map +1 -0
  23. package/dist/core/isg/hash.js +82 -0
  24. package/dist/core/isg/manifest.d.ts +47 -0
  25. package/dist/core/isg/manifest.d.ts.map +1 -0
  26. package/dist/core/isg/manifest.js +233 -0
  27. package/dist/core/isg/ttl.d.ts +101 -0
  28. package/dist/core/isg/ttl.d.ts.map +1 -0
  29. package/dist/core/isg/ttl.js +222 -0
  30. package/dist/core/isg/validation.d.ts +71 -0
  31. package/dist/core/isg/validation.d.ts.map +1 -0
  32. package/dist/core/isg/validation.js +226 -0
  33. package/dist/core/templates.d.ts.map +1 -1
  34. package/dist/core/templates.js +3 -2
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/types.d.ts +110 -20
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Error codes for ISG validation failures.
3
+ * These provide structured error identification for better debugging.
4
+ */
5
+ export var ISGValidationError;
6
+ (function (ISGValidationError) {
7
+ ISGValidationError["INVALID_TTL"] = "ISG_INVALID_TTL";
8
+ ISGValidationError["INVALID_MAX_AGE_CAP"] = "ISG_INVALID_MAX_AGE_CAP";
9
+ ISGValidationError["INVALID_AGING_RULE"] = "ISG_INVALID_AGING_RULE";
10
+ ISGValidationError["DUPLICATE_AGING_RULE"] = "ISG_DUPLICATE_AGING_RULE";
11
+ ISGValidationError["UNSORTED_AGING_RULES"] = "ISG_UNSORTED_AGING_RULES";
12
+ ISGValidationError["AGING_RULE_EXCEEDS_CAP"] = "ISG_AGING_RULE_EXCEEDS_CAP";
13
+ })(ISGValidationError || (ISGValidationError = {}));
14
+ /**
15
+ * Represents a validation error with context and actionable message.
16
+ */
17
+ export class ISGConfigurationError extends Error {
18
+ code;
19
+ field;
20
+ value;
21
+ constructor(code, field, value, message) {
22
+ super(message);
23
+ this.code = code;
24
+ this.field = field;
25
+ this.value = value;
26
+ this.name = 'ISGConfigurationError';
27
+ }
28
+ }
29
+ /**
30
+ * Validates ISG configuration and provides actionable error messages.
31
+ * Throws ISGConfigurationError for invalid configurations.
32
+ *
33
+ * @param config - ISG configuration to validate
34
+ * @throws {ISGConfigurationError} When configuration is invalid
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * try {
39
+ * validateISGConfig(userConfig.isg);
40
+ * } catch (error) {
41
+ * if (error instanceof ISGConfigurationError) {
42
+ * console.error(`${error.code}: ${error.message}`);
43
+ * console.error(`Field: ${error.field}, Value: ${error.value}`);
44
+ * }
45
+ * }
46
+ * ```
47
+ */
48
+ export function validateISGConfig(config) {
49
+ if (!config) {
50
+ return; // Config is optional
51
+ }
52
+ // Validate TTL seconds
53
+ if (config.ttlSeconds !== undefined) {
54
+ validateTTLSeconds(config.ttlSeconds);
55
+ }
56
+ // Validate max age cap
57
+ if (config.maxAgeCapDays !== undefined) {
58
+ validateMaxAgeCapDays(config.maxAgeCapDays);
59
+ }
60
+ // Validate aging rules
61
+ if (config.aging && Array.isArray(config.aging)) {
62
+ validateAgingRules(config.aging, config.maxAgeCapDays);
63
+ }
64
+ }
65
+ /**
66
+ * Validates TTL seconds value.
67
+ */
68
+ function validateTTLSeconds(ttlSeconds) {
69
+ if (typeof ttlSeconds !== 'number' || !Number.isInteger(ttlSeconds)) {
70
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, 'ttlSeconds', ttlSeconds, 'ttlSeconds must be a positive integer representing seconds. Example: 3600 (1 hour)');
71
+ }
72
+ if (ttlSeconds < 0) {
73
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, 'ttlSeconds', ttlSeconds, 'ttlSeconds cannot be negative. Use 0 for immediate expiration or a positive value.');
74
+ }
75
+ if (ttlSeconds > 365 * 24 * 3600) {
76
+ // More than 1 year
77
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, 'ttlSeconds', ttlSeconds, 'ttlSeconds is unusually large (>1 year). Consider using maxAgeCapDays for long-term caching.');
78
+ }
79
+ }
80
+ /**
81
+ * Validates max age cap days value.
82
+ */
83
+ function validateMaxAgeCapDays(maxAgeCapDays) {
84
+ if (typeof maxAgeCapDays !== 'number' || !Number.isInteger(maxAgeCapDays)) {
85
+ throw new ISGConfigurationError(ISGValidationError.INVALID_MAX_AGE_CAP, 'maxAgeCapDays', maxAgeCapDays, 'maxAgeCapDays must be a positive integer representing days. Example: 365 (1 year)');
86
+ }
87
+ if (maxAgeCapDays <= 0) {
88
+ throw new ISGConfigurationError(ISGValidationError.INVALID_MAX_AGE_CAP, 'maxAgeCapDays', maxAgeCapDays, 'maxAgeCapDays must be positive. Use a value like 30, 90, or 365 days.');
89
+ }
90
+ if (maxAgeCapDays > 3650) {
91
+ // More than 10 years
92
+ throw new ISGConfigurationError(ISGValidationError.INVALID_MAX_AGE_CAP, 'maxAgeCapDays', maxAgeCapDays, 'maxAgeCapDays is unusually large (>10 years). Consider if this is intended.');
93
+ }
94
+ }
95
+ /**
96
+ * Validates aging rules array.
97
+ */
98
+ function validateAgingRules(aging, maxAgeCapDays) {
99
+ const seenUntilDays = new Set();
100
+ for (let i = 0; i < aging.length; i++) {
101
+ const rule = aging[i];
102
+ // Skip invalid entries
103
+ if (!rule) {
104
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, `aging[${i}]`, rule, `Aging rule at index ${i} is null or undefined.`);
105
+ }
106
+ // Validate individual rule
107
+ validateAgingRule(rule, i);
108
+ // Check for duplicates
109
+ if (seenUntilDays.has(rule.untilDays)) {
110
+ throw new ISGConfigurationError(ISGValidationError.DUPLICATE_AGING_RULE, `aging[${i}].untilDays`, rule.untilDays, `Duplicate aging rule for ${rule.untilDays} days. Each untilDays value must be unique.`);
111
+ }
112
+ seenUntilDays.add(rule.untilDays);
113
+ // Check if rule exceeds max age cap
114
+ if (maxAgeCapDays !== undefined && rule.untilDays > maxAgeCapDays) {
115
+ throw new ISGConfigurationError(ISGValidationError.AGING_RULE_EXCEEDS_CAP, `aging[${i}].untilDays`, rule.untilDays, `Aging rule for ${rule.untilDays} days exceeds maxAgeCapDays (${maxAgeCapDays}). Rule will never be used.`);
116
+ }
117
+ }
118
+ // Check if rules are sorted by untilDays (ascending)
119
+ const sortedRules = [...aging].sort((a, b) => a.untilDays - b.untilDays);
120
+ for (let i = 0; i < aging.length; i++) {
121
+ if (aging[i]?.untilDays !== sortedRules[i]?.untilDays) {
122
+ throw new ISGConfigurationError(ISGValidationError.UNSORTED_AGING_RULES, 'aging', aging.map((r) => r.untilDays), 'Aging rules must be sorted by untilDays in ascending order. Sort rules from shortest to longest duration.');
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Validates a single aging rule.
128
+ */
129
+ function validateAgingRule(rule, index) {
130
+ if (!rule || typeof rule !== 'object') {
131
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, `aging[${index}]`, rule, 'Aging rule must be an object with untilDays and ttlSeconds properties.');
132
+ }
133
+ // Validate untilDays
134
+ if (typeof rule.untilDays !== 'number' ||
135
+ !Number.isInteger(rule.untilDays) ||
136
+ rule.untilDays <= 0) {
137
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, `aging[${index}].untilDays`, rule.untilDays, 'untilDays must be a positive integer representing days. Example: 7, 30, 90');
138
+ }
139
+ // Validate ttlSeconds
140
+ if (typeof rule.ttlSeconds !== 'number' ||
141
+ !Number.isInteger(rule.ttlSeconds) ||
142
+ rule.ttlSeconds < 0) {
143
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, `aging[${index}].ttlSeconds`, rule.ttlSeconds, 'ttlSeconds must be a non-negative integer representing seconds. Example: 3600 (1 hour)');
144
+ }
145
+ // Warn about unusually long TTL in aging rules
146
+ if (rule.ttlSeconds > 30 * 24 * 3600) {
147
+ // More than 30 days
148
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, `aging[${index}].ttlSeconds`, rule.ttlSeconds, `ttlSeconds in aging rule is unusually large (>30 days). Consider if this is intended for content up to ${rule.untilDays} days old.`);
149
+ }
150
+ }
151
+ /**
152
+ * Validates front-matter ISG overrides for a single page.
153
+ * Provides helpful error messages for invalid page-level configuration.
154
+ *
155
+ * @param frontMatter - Page front-matter object
156
+ * @param sourcePath - Path to source file for error context
157
+ * @throws {ISGConfigurationError} When front-matter overrides are invalid
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * try {
162
+ * validatePageISGOverrides(page.frontMatter, page.sourcePath);
163
+ * } catch (error) {
164
+ * console.error(`Error in ${page.sourcePath}: ${error.message}`);
165
+ * }
166
+ * ```
167
+ */
168
+ export function validatePageISGOverrides(frontMatter, sourcePath) {
169
+ // Validate page-level ttlSeconds override
170
+ if (frontMatter.ttlSeconds !== undefined) {
171
+ if (typeof frontMatter.ttlSeconds !== 'number' ||
172
+ !Number.isInteger(frontMatter.ttlSeconds) ||
173
+ frontMatter.ttlSeconds < 0) {
174
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, 'ttlSeconds', frontMatter.ttlSeconds, `Invalid ttlSeconds in front-matter of ${sourcePath}. Must be a non-negative integer.`);
175
+ }
176
+ }
177
+ // Validate page-level maxAgeCapDays override
178
+ if (frontMatter.maxAgeCapDays !== undefined) {
179
+ if (typeof frontMatter.maxAgeCapDays !== 'number' ||
180
+ !Number.isInteger(frontMatter.maxAgeCapDays) ||
181
+ frontMatter.maxAgeCapDays <= 0) {
182
+ throw new ISGConfigurationError(ISGValidationError.INVALID_MAX_AGE_CAP, 'maxAgeCapDays', frontMatter.maxAgeCapDays, `Invalid maxAgeCapDays in front-matter of ${sourcePath}. Must be a positive integer.`);
183
+ }
184
+ }
185
+ // Validate tags array
186
+ if (frontMatter.tags !== undefined) {
187
+ if (!Array.isArray(frontMatter.tags)) {
188
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, // Reusing closest error code
189
+ 'tags', frontMatter.tags, `Invalid tags in front-matter of ${sourcePath}. Must be an array of strings.`);
190
+ }
191
+ // Check that all tags are strings
192
+ frontMatter.tags.forEach((tag, index) => {
193
+ if (typeof tag !== 'string') {
194
+ throw new ISGConfigurationError(ISGValidationError.INVALID_AGING_RULE, `tags[${index}]`, tag, `Invalid tag at index ${index} in front-matter of ${sourcePath}. All tags must be strings.`);
195
+ }
196
+ });
197
+ }
198
+ }
199
+ /**
200
+ * Safely extracts numeric value from front-matter with validation.
201
+ * Used for TTL and max age cap overrides.
202
+ *
203
+ * @param value - Value from front-matter
204
+ * @param fieldName - Name of the field for error messages
205
+ * @param sourcePath - Source file path for error context
206
+ * @returns Validated number or undefined if not set
207
+ */
208
+ export function extractNumericOverride(value, fieldName, sourcePath) {
209
+ if (value === undefined || value === null) {
210
+ return undefined;
211
+ }
212
+ if (typeof value === 'number') {
213
+ if (!Number.isFinite(value) || value < 0) {
214
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, fieldName, value, `Invalid ${fieldName} in ${sourcePath}: must be a non-negative finite number.`);
215
+ }
216
+ return Math.floor(value); // Ensure integer
217
+ }
218
+ if (typeof value === 'string') {
219
+ const parsed = parseInt(value, 10);
220
+ if (Number.isNaN(parsed) || parsed < 0) {
221
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, fieldName, value, `Invalid ${fieldName} in ${sourcePath}: "${value}" is not a valid non-negative number.`);
222
+ }
223
+ return parsed;
224
+ }
225
+ throw new ISGConfigurationError(ISGValidationError.INVALID_TTL, fieldName, value, `Invalid ${fieldName} in ${sourcePath}: must be a number or numeric string.`);
226
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAK1B,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAkB,MAAM,aAAa,CAAC;AAgRnF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAS7D;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,GAAG,EACR,UAAU,CAAC,EAAE,OAAO,EAAE,EACtB,QAAQ,CAAC,EAAE,SAAS,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,CAkEjB"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAM1B,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAkB,MAAM,aAAa,CAAC;AAgRnF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAS7D;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,GAAG,EACR,UAAU,CAAC,EAAE,OAAO,EAAE,EACtB,QAAQ,CAAC,EAAE,SAAS,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,CAkEjB"}
@@ -1,5 +1,6 @@
1
1
  import { Eta } from 'eta';
2
2
  import { join, dirname, relative, basename } from 'path';
3
+ import { posix } from 'path';
3
4
  import fse from 'fs-extra';
4
5
  const { pathExists } = fse;
5
6
  import glob from 'fast-glob';
@@ -216,7 +217,7 @@ async function discoverLayout(pagePath, config, explicitLayout, isIndexPage) {
216
217
  if (await pathExists(indexLayoutPath)) {
217
218
  // Return relative path with forward slashes for Eta
218
219
  const relativePath = dir ? `${dir}/index.eta` : 'index.eta';
219
- return relativePath.replace(/\\/g, '/'); // Normalize to forward slashes
220
+ return posix.normalize(relativePath);
220
221
  }
221
222
  }
222
223
  // Then check for layout.eta as fallback
@@ -224,7 +225,7 @@ async function discoverLayout(pagePath, config, explicitLayout, isIndexPage) {
224
225
  if (await pathExists(layoutPath)) {
225
226
  // Return relative path with forward slashes for Eta
226
227
  const relativePath = dir ? `${dir}/layout.eta` : 'layout.eta';
227
- return relativePath.replace(/\\/g, '/'); // Normalize to forward slashes
228
+ return posix.normalize(relativePath);
228
229
  }
229
230
  }
230
231
  return null;
package/dist/index.d.ts CHANGED
@@ -22,6 +22,7 @@
22
22
  export type { StatiConfig, PageModel, FrontMatter, BuildContext, PageContext, BuildHooks, NavNode, ISGConfig, AgingRule, BuildStats, } from './types.js';
23
23
  export type { BuildOptions } from './core/build.js';
24
24
  export type { DevServerOptions } from './core/dev.js';
25
+ export type { InvalidationResult } from './core/invalidate.js';
25
26
  export { build } from './core/build.js';
26
27
  export { createDevServer } from './core/dev.js';
27
28
  export { loadConfig } from './config/loader.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAE7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAE7D"}
package/dist/types.d.ts CHANGED
@@ -44,6 +44,60 @@ export interface ISGConfig {
44
44
  /** Array of aging rules for progressive cache extension */
45
45
  aging?: AgingRule[];
46
46
  }
47
+ /**
48
+ * Cache entry for a single page in the ISG cache manifest.
49
+ * Contains all information needed to determine if a page needs rebuilding.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const entry: CacheEntry = {
54
+ * path: '/blog/my-post/index.html',
55
+ * inputsHash: 'sha256-abc123...',
56
+ * deps: ['/site/_layouts/post.eta', '/site/_partials/header.eta'],
57
+ * tags: ['blog', 'tutorial'],
58
+ * publishedAt: '2024-01-01T00:00:00.000Z',
59
+ * renderedAt: '2024-01-15T10:30:00.000Z',
60
+ * ttlSeconds: 21600,
61
+ * maxAgeCapDays: 365
62
+ * };
63
+ * ```
64
+ */
65
+ export interface CacheEntry {
66
+ /** Output path of the rendered page */
67
+ path: string;
68
+ /** Hash of page content and all dependencies */
69
+ inputsHash: string;
70
+ /** Array of file paths this page depends on (templates, partials) */
71
+ deps: string[];
72
+ /** Tags for invalidation and organization */
73
+ tags: string[];
74
+ /** ISO date when content was originally published */
75
+ publishedAt?: string;
76
+ /** ISO date when page was last rendered */
77
+ renderedAt: string;
78
+ /** Effective TTL for this page in seconds */
79
+ ttlSeconds: number;
80
+ /** Maximum age cap for this page in days */
81
+ maxAgeCapDays?: number;
82
+ }
83
+ /**
84
+ * ISG cache manifest containing all cached page entries.
85
+ * Persisted as JSON in .stati/cache/manifest.json
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const manifest: CacheManifest = {
90
+ * entries: {
91
+ * '/blog/post-1': { ... },
92
+ * '/about': { ... }
93
+ * }
94
+ * };
95
+ * ```
96
+ */
97
+ export interface CacheManifest {
98
+ /** Map of page URLs to their cache entries */
99
+ entries: Record<string, CacheEntry>;
100
+ }
47
101
  /**
48
102
  * Site-wide configuration settings.
49
103
  * Contains global metadata and URL configuration for the static site.
@@ -269,26 +323,50 @@ export interface PageModel {
269
323
  publishedAt?: Date;
270
324
  }
271
325
  /**
272
- * Logger interface for customizing build output.
273
- * Provides different log levels and formatting options for prettier CLI output.
326
+ * Logger interface for customizing build output and visualization.
327
+ * Provides comprehensive logging capabilities including basic log levels, build progress tracking,
328
+ * file operations, statistics display, and advanced tree-based rendering visualization.
274
329
  *
275
- * @example
330
+ * Core Methods (Required):
331
+ * - Basic logging: info, success, warning, error
332
+ * - Build progress: building, processing, stats
333
+ *
334
+ * Enhanced Methods (Optional):
335
+ * - Visual formatting: header, step, progress, divider
336
+ * - File operations: file, url, timing
337
+ * - Statistics: statsTable, navigationTree
338
+ * - Tree visualization: startRenderingTree, addTreeNode, updateTreeNode, showRenderingTree, clearRenderingTree
339
+ *
340
+ * @example Basic Logger Implementation
276
341
  * ```typescript
277
- * const customLogger: Logger = {
278
- * info: (msg) => console.log(chalk.blue('ℹ️ ' + msg)),
279
- * success: (msg) => console.log(chalk.green('✅ ' + msg)),
280
- * warning: (msg) => console.warn(chalk.yellow('⚠️ ' + msg)),
281
- * error: (msg) => console.error(chalk.red('❌ ' + msg)),
282
- * building: (msg) => console.log(chalk.cyan('🏗️ ' + msg)),
283
- * processing: (msg) => console.log(chalk.gray(' ' + msg)),
284
- * stats: (msg) => console.log(chalk.cyan('📊 ' + msg)),
342
+ * const basicLogger: Logger = {
343
+ * info: (msg) => console.log('\x1b[38;2;37;99;235mℹ️ ' + msg + '\x1b[0m'),
344
+ * success: (msg) => console.log('\x1b[38;2;22;163;74m✅ ' + msg + '\x1b[0m'),
345
+ * warning: (msg) => console.warn('\x1b[38;2;217;119;6m⚠️ ' + msg + '\x1b[0m'),
346
+ * error: (msg) => console.error('\x1b[38;2;220;38;38m❌ ' + msg + '\x1b[0m'),
347
+ * building: (msg) => console.log('\x1b[38;2;79;70;229m' + msg + '\x1b[0m'),
348
+ * processing: (msg) => console.log('\x1b[38;2;107;114;128m ' + msg + '\x1b[0m'),
349
+ * stats: (msg) => console.log('\x1b[38;2;8;145;178m📊 ' + msg + '\x1b[0m')
350
+ * };
351
+ * ```
352
+ *
353
+ * @example Enhanced Logger with Tree Visualization
354
+ * ```typescript
355
+ * const enhancedLogger: Logger = {
356
+ * // ... basic methods ...
285
357
  * header: (msg) => console.log(boxedMessage(msg)),
286
358
  * step: (step, total, msg) => console.log(`[${step}/${total}] ${msg}`),
287
359
  * progress: (current, total, msg) => console.log(progressBar(current, total) + ' ' + msg),
288
360
  * file: (op, path) => console.log(` 📄 ${op} ${path}`),
289
361
  * url: (label, url) => console.log(` 🔗 ${label}: ${url}`),
290
362
  * timing: (op, duration) => console.log(` ⏱️ ${op} completed in ${duration}ms`),
291
- * divider: (title) => console.log('─'.repeat(50) + ' ' + title)
363
+ * divider: (title) => console.log('─'.repeat(50) + ' ' + title),
364
+ * statsTable: (stats) => displayStatsTable(stats),
365
+ * startRenderingTree: (label) => initTree(label),
366
+ * addTreeNode: (parentId, id, label, status, metadata) => addNode(parentId, id, label, status, metadata),
367
+ * updateTreeNode: (id, status, metadata) => updateNode(id, status, metadata),
368
+ * showRenderingTree: () => renderTree(),
369
+ * clearRenderingTree: () => clearTree()
292
370
  * };
293
371
  * ```
294
372
  */
@@ -321,14 +399,6 @@ export interface Logger {
321
399
  timing?: (operation: string, duration: number) => void;
322
400
  /** Display a section divider (optional) */
323
401
  divider?: (title?: string) => void;
324
- /** Start a spinner for long operations (optional) */
325
- startSpinner?: (text: string, type?: 'building' | 'processing' | 'copying') => unknown;
326
- /** Stop a spinner with success (optional) */
327
- succeedSpinner?: (spinner: unknown, text?: string) => void;
328
- /** Stop a spinner with failure (optional) */
329
- failSpinner?: (spinner: unknown, text?: string) => void;
330
- /** Update spinner text (optional) */
331
- updateSpinner?: (spinner: unknown, text: string) => void;
332
402
  /** Display build statistics as a table (optional) */
333
403
  statsTable?: (stats: {
334
404
  totalPages: number;
@@ -340,6 +410,26 @@ export interface Logger {
340
410
  }) => void;
341
411
  /** Display navigation tree structure (optional) */
342
412
  navigationTree?: (navigation: NavNode[]) => void;
413
+ /** Initialize a rendering tree for build process visualization (optional) */
414
+ startRenderingTree?: (label: string) => void;
415
+ /** Add a step to the rendering tree (optional) */
416
+ addTreeNode?: (parentId: string, id: string, label: string, status?: 'pending' | 'running' | 'cached' | 'completed' | 'error', metadata?: {
417
+ timing?: number;
418
+ cacheHit?: boolean;
419
+ url?: string;
420
+ operation?: string;
421
+ }) => void;
422
+ /** Update a node in the rendering tree (optional) */
423
+ updateTreeNode?: (id: string, status: 'pending' | 'running' | 'cached' | 'completed' | 'error', metadata?: {
424
+ timing?: number;
425
+ cacheHit?: boolean;
426
+ url?: string;
427
+ operation?: string;
428
+ }) => void;
429
+ /** Render and display the current tree (optional) */
430
+ showRenderingTree?: () => void;
431
+ /** Clear the rendering tree (optional) */
432
+ clearRenderingTree?: () => void;
343
433
  }
344
434
  /**
345
435
  * Statistics collected during the build process.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stati/core",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",