veryfront 0.0.80 → 0.0.82

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 (54) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/cache/backend.d.ts +20 -0
  3. package/esm/src/cache/backend.d.ts.map +1 -1
  4. package/esm/src/cache/backend.js +57 -0
  5. package/esm/src/cache/hash.d.ts +107 -0
  6. package/esm/src/cache/hash.d.ts.map +1 -0
  7. package/esm/src/cache/hash.js +166 -0
  8. package/esm/src/cache/index.d.ts +3 -0
  9. package/esm/src/cache/index.d.ts.map +1 -1
  10. package/esm/src/cache/index.js +3 -0
  11. package/esm/src/cache/module-cache.d.ts +82 -0
  12. package/esm/src/cache/module-cache.d.ts.map +1 -0
  13. package/esm/src/cache/module-cache.js +214 -0
  14. package/esm/src/cache/multi-tier.d.ts +177 -0
  15. package/esm/src/cache/multi-tier.d.ts.map +1 -0
  16. package/esm/src/cache/multi-tier.js +352 -0
  17. package/esm/src/cli/templates/integration-loader.d.ts.map +1 -1
  18. package/esm/src/cli/templates/integration-loader.js +2 -4
  19. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
  20. package/esm/src/modules/react-loader/ssr-module-loader/loader.js +121 -14
  21. package/esm/src/observability/tracing/span-names.d.ts +2 -0
  22. package/esm/src/observability/tracing/span-names.d.ts.map +1 -1
  23. package/esm/src/observability/tracing/span-names.js +2 -0
  24. package/esm/src/rendering/orchestrator/module-loader/cache.d.ts +10 -2
  25. package/esm/src/rendering/orchestrator/module-loader/cache.d.ts.map +1 -1
  26. package/esm/src/rendering/orchestrator/module-loader/cache.js +11 -6
  27. package/esm/src/rendering/orchestrator/module-loader/index.d.ts.map +1 -1
  28. package/esm/src/rendering/orchestrator/module-loader/index.js +72 -77
  29. package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
  30. package/esm/src/transforms/esm/http-cache.js +6 -29
  31. package/esm/src/transforms/esm/transform-cache.d.ts +25 -0
  32. package/esm/src/transforms/esm/transform-cache.d.ts.map +1 -1
  33. package/esm/src/transforms/esm/transform-cache.js +45 -0
  34. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
  35. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +2 -36
  36. package/esm/src/utils/constants/cache.d.ts +4 -0
  37. package/esm/src/utils/constants/cache.d.ts.map +1 -1
  38. package/esm/src/utils/constants/cache.js +14 -1
  39. package/package.json +1 -1
  40. package/src/deno.js +1 -1
  41. package/src/src/cache/backend.ts +62 -0
  42. package/src/src/cache/hash.ts +205 -0
  43. package/src/src/cache/index.ts +3 -0
  44. package/src/src/cache/module-cache.ts +252 -0
  45. package/src/src/cache/multi-tier.ts +503 -0
  46. package/src/src/cli/templates/integration-loader.ts +2 -8
  47. package/src/src/modules/react-loader/ssr-module-loader/loader.ts +137 -18
  48. package/src/src/observability/tracing/span-names.ts +2 -0
  49. package/src/src/rendering/orchestrator/module-loader/cache.ts +14 -8
  50. package/src/src/rendering/orchestrator/module-loader/index.ts +94 -89
  51. package/src/src/transforms/esm/http-cache.ts +12 -32
  52. package/src/src/transforms/esm/transform-cache.ts +53 -0
  53. package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +2 -40
  54. package/src/src/utils/constants/cache.ts +21 -1
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.0.80",
3
+ "version": "0.0.82",
4
4
  "nodeModulesDir": "auto",
5
5
  "exclude": [
6
6
  "npm/",
@@ -121,6 +121,26 @@ export declare function isApiCacheAvailable(env?: RuntimeEnv): boolean;
121
121
  * Preference: API (production) > Redis (local/OSS) > Memory (fallback)
122
122
  */
123
123
  export declare function createCacheBackend(config?: CacheBackendConfig): Promise<CacheBackend>;
124
+ /**
125
+ * Check if a cache backend supports distributed (cross-pod) caching.
126
+ *
127
+ * Use this instead of checking `backend.type === "memory"` directly,
128
+ * which is a leaky abstraction that exposes implementation details.
129
+ */
130
+ export declare function isDistributedBackend(backend: CacheBackend): boolean;
131
+ /**
132
+ * Create a lazy-initialized distributed cache accessor.
133
+ *
134
+ * This encapsulates the common pattern of:
135
+ * 1. Lazy-init a cache backend via Singleflight
136
+ * 2. Skip if memory-only (not useful for cross-pod sharing)
137
+ * 3. Return null if init fails
138
+ *
139
+ * @param factory - Function that creates the cache backend
140
+ * @param name - Log prefix for debug messages
141
+ * @returns A function that returns the distributed cache backend or null
142
+ */
143
+ export declare function createDistributedCacheAccessor(factory: () => Promise<CacheBackend>, name: string): () => Promise<CacheBackend | null>;
124
144
  /** Convenience wrappers for common cache patterns. */
125
145
  export declare const CacheBackends: {
126
146
  /** Transform cache for compiled code. */
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/src/cache/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/src/cache/backend.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA0C,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAkCnG,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAE1C,6BAA6B;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzC,uDAAuD;IACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAE/D,uDAAuD;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE,qDAAqD;IACrD,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF,8BAA8B;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,8CAA8C;IAC9C,YAAY,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhD,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,6CAA6C;AAC7C,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,KAAK,CAA2D;IACxE,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,SAA2B;IAIjD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAuB7D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB9C,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,6EAA6E;AAC7E,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,SAAc;IAInC,OAAO,CAAC,SAAS;IAIjB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAqB7D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBrD;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAC,CAAa;IACzB,OAAO,CAAC,cAAc,CAAC;gBAEX,OAAO,GAAE;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,6CAA6C;QAC7C,GAAG,CAAC,EAAE,UAAU,CAAC;QACjB,4EAA4E;QAC5E,kBAAkB,CAAC,EAAE,MAAM,CAAC;KACxB;IAkBN,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;YAIR,OAAO;IAmEf,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IA4BnE,6EAA6E;YAC/D,eAAe;IAKvB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAMrD;AAED,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9C,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAc7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCzF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACpC,IAAI,EAAE,MAAM,GACX,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmCpC;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa;IACxB,yCAAyC;;IAGzC,qGAAqG;;IAGrG,oCAAoC;;IAGpC,uCAAuC;;IAGvC,+CAA+C;;IAG/C;2FACuF;;IAIvF,qEAAqE;;CAEtE,CAAC"}
@@ -449,6 +449,63 @@ export function createCacheBackend(config = {}) {
449
449
  "cache.preferred_backend": preferredBackend ?? "auto",
450
450
  });
451
451
  }
452
+ /**
453
+ * Check if a cache backend supports distributed (cross-pod) caching.
454
+ *
455
+ * Use this instead of checking `backend.type === "memory"` directly,
456
+ * which is a leaky abstraction that exposes implementation details.
457
+ */
458
+ export function isDistributedBackend(backend) {
459
+ return backend.type !== "memory";
460
+ }
461
+ /**
462
+ * Create a lazy-initialized distributed cache accessor.
463
+ *
464
+ * This encapsulates the common pattern of:
465
+ * 1. Lazy-init a cache backend via Singleflight
466
+ * 2. Skip if memory-only (not useful for cross-pod sharing)
467
+ * 3. Return null if init fails
468
+ *
469
+ * @param factory - Function that creates the cache backend
470
+ * @param name - Log prefix for debug messages
471
+ * @returns A function that returns the distributed cache backend or null
472
+ */
473
+ export function createDistributedCacheAccessor(factory, name) {
474
+ let backend;
475
+ const singleflight = new (class {
476
+ promise = null;
477
+ do(fn) {
478
+ if (!this.promise) {
479
+ this.promise = fn().finally(() => {
480
+ this.promise = null;
481
+ });
482
+ }
483
+ return this.promise;
484
+ }
485
+ })();
486
+ return () => {
487
+ if (backend !== undefined)
488
+ return Promise.resolve(backend);
489
+ return singleflight.do(async () => {
490
+ try {
491
+ const b = await factory();
492
+ if (!isDistributedBackend(b)) {
493
+ backend = null;
494
+ logger.debug(`[${name}] No distributed cache available (memory only)`);
495
+ return null;
496
+ }
497
+ backend = b;
498
+ logger.debug(`[${name}] Distributed cache initialized`, { type: b.type });
499
+ return b;
500
+ }
501
+ catch (error) {
502
+ logger.debug(`[${name}] Failed to initialize distributed cache`, { error });
503
+ backend = null;
504
+ return null;
505
+ }
506
+ });
507
+ };
508
+ }
452
509
  /** Convenience wrappers for common cache patterns. */
453
510
  export const CacheBackends = {
454
511
  /** Transform cache for compiled code. */
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Cache key types for different cache domains.
3
+ * Using type prefixes prevents collisions between different caches.
4
+ */
5
+ export type CacheKeyType = "http" | "mod" | "esm" | "render" | "mdx" | "css" | "file" | "config";
6
+ /**
7
+ * Fast, synchronous hash function for cache keys.
8
+ *
9
+ * Uses DJB2 algorithm - good distribution, very fast.
10
+ * Returns a positive number suitable for string conversion.
11
+ *
12
+ * @param input - String to hash
13
+ * @returns Positive integer hash
14
+ */
15
+ export declare function fastHash(input: string): number;
16
+ /**
17
+ * Convert a hash number to a compact string representation.
18
+ *
19
+ * Uses base36 for compact output (0-9, a-z).
20
+ */
21
+ export declare function hashToString(hash: number): string;
22
+ /**
23
+ * Fast synchronous hash that returns a string.
24
+ *
25
+ * Combines fastHash + hashToString for convenience.
26
+ */
27
+ export declare function hashString(input: string): string;
28
+ /**
29
+ * Generate a cache key with type prefix.
30
+ *
31
+ * Format: `{type}:{hash}`
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * getCacheKey("http", "https://esm.sh/react@18.3.1")
36
+ * // Returns: "http:1abc2def"
37
+ *
38
+ * getCacheKey("mod", "pages/index.tsx")
39
+ * // Returns: "mod:xyz789"
40
+ * ```
41
+ */
42
+ export declare function getCacheKey(type: CacheKeyType, input: string): string;
43
+ /**
44
+ * Generate a versioned cache key with type prefix.
45
+ *
46
+ * Format: `{type}:v{version}:{hash}`
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * getVersionedCacheKey("mod", 12, "pages/index.tsx:abc123")
51
+ * // Returns: "mod:v12:xyz789"
52
+ * ```
53
+ */
54
+ export declare function getVersionedCacheKey(type: CacheKeyType, version: number | string, input: string): string;
55
+ /**
56
+ * Generate a cache key with multiple components.
57
+ *
58
+ * Useful for keys that depend on multiple inputs.
59
+ * Components are joined with colons before hashing.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * getCompoundCacheKey("mod", ["projectId", "filePath", "contentHash"])
64
+ * // Returns: "mod:abc123"
65
+ * ```
66
+ */
67
+ export declare function getCompoundCacheKey(type: CacheKeyType, components: string[]): string;
68
+ /**
69
+ * Parse a cache key into its components.
70
+ *
71
+ * @returns The type prefix and hash, or null if invalid format
72
+ */
73
+ export declare function parseCacheKey(key: string): {
74
+ type: string;
75
+ hash: string;
76
+ version?: string;
77
+ } | null;
78
+ /**
79
+ * SHA-256 async hash for content-addressed keys.
80
+ *
81
+ * Use this when you need cryptographic strength (e.g., content hashes).
82
+ * For cache keys where speed matters more, use hashString().
83
+ */
84
+ export declare function sha256Hash(input: string): Promise<string>;
85
+ /**
86
+ * Short SHA-256 hash (8 characters).
87
+ *
88
+ * Good balance between collision resistance and key length.
89
+ */
90
+ export declare function sha256Short(input: string): Promise<string>;
91
+ /**
92
+ * Generate HTTP bundle filename from URL.
93
+ *
94
+ * Consistent with existing http-cache.ts format: `http-{hash}.mjs`
95
+ */
96
+ export declare function getHttpBundleFilename(normalizedUrl: string): string;
97
+ /**
98
+ * Extract hash from HTTP bundle filename.
99
+ *
100
+ * @returns The hash string, or null if not a valid bundle filename
101
+ */
102
+ export declare function parseHttpBundleFilename(filename: string): string | null;
103
+ /**
104
+ * Check if a value looks like a cache key.
105
+ */
106
+ export declare function isCacheKey(value: string): boolean;
107
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/src/cache/hash.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,KAAK,GACL,KAAK,GACL,QAAQ,GACR,KAAK,GACL,KAAK,GACL,MAAM,GACN,QAAQ,CAAC;AAEb;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,KAAK,EAAE,MAAM,GACZ,MAAM,CAGR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAGpF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,GACV;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBzD;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/D;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Standardized Cache Hashing Utilities
3
+ *
4
+ * Provides consistent hashing for cache keys across the codebase.
5
+ * All cache keys should use these utilities to ensure:
6
+ * - Consistent format with type prefixes
7
+ * - Collision resistance between different cache types
8
+ * - Easy debugging and key parsing
9
+ *
10
+ * Key format: `{type}:{hash}` or `{type}:{version}:{hash}`
11
+ *
12
+ * @module cache/hash
13
+ */
14
+ import * as dntShim from "../../_dnt.shims.js";
15
+ import { simpleHash } from "../utils/hash-utils.js";
16
+ /**
17
+ * Fast, synchronous hash function for cache keys.
18
+ *
19
+ * Uses DJB2 algorithm - good distribution, very fast.
20
+ * Returns a positive number suitable for string conversion.
21
+ *
22
+ * @param input - String to hash
23
+ * @returns Positive integer hash
24
+ */
25
+ export function fastHash(input) {
26
+ let hash = 5381;
27
+ for (let i = 0; i < input.length; i++) {
28
+ hash = ((hash << 5) + hash) ^ input.charCodeAt(i);
29
+ }
30
+ return hash >>> 0; // Convert to unsigned 32-bit
31
+ }
32
+ /**
33
+ * Convert a hash number to a compact string representation.
34
+ *
35
+ * Uses base36 for compact output (0-9, a-z).
36
+ */
37
+ export function hashToString(hash) {
38
+ return hash.toString(36);
39
+ }
40
+ /**
41
+ * Fast synchronous hash that returns a string.
42
+ *
43
+ * Combines fastHash + hashToString for convenience.
44
+ */
45
+ export function hashString(input) {
46
+ return hashToString(fastHash(input));
47
+ }
48
+ /**
49
+ * Generate a cache key with type prefix.
50
+ *
51
+ * Format: `{type}:{hash}`
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * getCacheKey("http", "https://esm.sh/react@18.3.1")
56
+ * // Returns: "http:1abc2def"
57
+ *
58
+ * getCacheKey("mod", "pages/index.tsx")
59
+ * // Returns: "mod:xyz789"
60
+ * ```
61
+ */
62
+ export function getCacheKey(type, input) {
63
+ const hash = hashString(input);
64
+ return `${type}:${hash}`;
65
+ }
66
+ /**
67
+ * Generate a versioned cache key with type prefix.
68
+ *
69
+ * Format: `{type}:v{version}:{hash}`
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * getVersionedCacheKey("mod", 12, "pages/index.tsx:abc123")
74
+ * // Returns: "mod:v12:xyz789"
75
+ * ```
76
+ */
77
+ export function getVersionedCacheKey(type, version, input) {
78
+ const hash = hashString(input);
79
+ return `${type}:v${version}:${hash}`;
80
+ }
81
+ /**
82
+ * Generate a cache key with multiple components.
83
+ *
84
+ * Useful for keys that depend on multiple inputs.
85
+ * Components are joined with colons before hashing.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * getCompoundCacheKey("mod", ["projectId", "filePath", "contentHash"])
90
+ * // Returns: "mod:abc123"
91
+ * ```
92
+ */
93
+ export function getCompoundCacheKey(type, components) {
94
+ const combined = components.join(":");
95
+ return getCacheKey(type, combined);
96
+ }
97
+ /**
98
+ * Parse a cache key into its components.
99
+ *
100
+ * @returns The type prefix and hash, or null if invalid format
101
+ */
102
+ export function parseCacheKey(key) {
103
+ const parts = key.split(":");
104
+ if (parts.length < 2)
105
+ return null;
106
+ const type = parts[0];
107
+ const rest = parts.slice(1);
108
+ // Check for version: type:vN:hash
109
+ if (rest[0]?.startsWith("v") && /^v\d+$/.test(rest[0])) {
110
+ return {
111
+ type,
112
+ version: rest[0].slice(1),
113
+ hash: rest.slice(1).join(":"),
114
+ };
115
+ }
116
+ return {
117
+ type,
118
+ hash: rest.join(":"),
119
+ };
120
+ }
121
+ /**
122
+ * SHA-256 async hash for content-addressed keys.
123
+ *
124
+ * Use this when you need cryptographic strength (e.g., content hashes).
125
+ * For cache keys where speed matters more, use hashString().
126
+ */
127
+ export async function sha256Hash(input) {
128
+ const data = new TextEncoder().encode(input);
129
+ const hashBuffer = await dntShim.crypto.subtle.digest("SHA-256", data);
130
+ return Array.from(new Uint8Array(hashBuffer))
131
+ .map((b) => b.toString(16).padStart(2, "0"))
132
+ .join("");
133
+ }
134
+ /**
135
+ * Short SHA-256 hash (8 characters).
136
+ *
137
+ * Good balance between collision resistance and key length.
138
+ */
139
+ export async function sha256Short(input) {
140
+ const full = await sha256Hash(input);
141
+ return full.slice(0, 8);
142
+ }
143
+ /**
144
+ * Generate HTTP bundle filename from URL.
145
+ *
146
+ * Consistent with existing http-cache.ts format: `http-{hash}.mjs`
147
+ */
148
+ export function getHttpBundleFilename(normalizedUrl) {
149
+ const hash = simpleHash(normalizedUrl);
150
+ return `http-${hash}.mjs`;
151
+ }
152
+ /**
153
+ * Extract hash from HTTP bundle filename.
154
+ *
155
+ * @returns The hash string, or null if not a valid bundle filename
156
+ */
157
+ export function parseHttpBundleFilename(filename) {
158
+ const match = filename.match(/^http-(\d+)\.mjs$/);
159
+ return match?.[1] ?? null;
160
+ }
161
+ /**
162
+ * Check if a value looks like a cache key.
163
+ */
164
+ export function isCacheKey(value) {
165
+ return /^[a-z]+:[a-z0-9]+/.test(value);
166
+ }
@@ -1,4 +1,7 @@
1
1
  export * from "./backend.js";
2
+ export * from "./multi-tier.js";
3
+ export * from "./module-cache.js";
4
+ export * from "./hash.js";
2
5
  export { type CacheKeyContext, extractCacheKeyContext, getContentHashKey, getCurrentCacheKeyContext, getProjectScopedKey, getProjectScopedKeyAlways, type MultiProjectRequestContext, runWithCacheKeyContext, tryGetCacheKeyContext, } from "./cache-key-builder.js";
3
6
  export { buildComponentCacheKey, buildConfigCacheKey, buildContentHashCacheKey, buildDirCacheKeyPrefix, buildErrorPageCacheKey, buildFileCacheKeyPrefix, buildFileListCacheKey, buildFileOperationCacheKey, buildGitHubBytesCacheKey, buildGitHubContentCacheKey, buildGitHubDirCacheKey, buildGitHubResolveCacheKey, buildGitHubStatCacheKey, buildGitHubTreeCacheKey, buildLayoutComponentCacheKey, buildModuleResolveCacheKey, buildModuleTransformCacheKey, buildProxyManagerCacheKey, buildRedisFileCacheKey, buildRedisSSRModuleKey, buildRedisTransformKey, buildRenderCacheKey, buildRenderCachePrefix, buildSSRModuleCacheKey, buildSSRModuleProjectKey, buildStatCacheKeyPrefix, buildTransformCacheKey, CacheKeyPrefix, cacheRegistry, createCacheKeyFilter, deleteAllKeysForProject, deleteAllKeysForProjectAsync, type FileOperationContext, type FileSourceType, getAllKeysForProject, getAllKeysForProjectAsync, getCacheKeyVersion, parseRenderCacheKey, } from "./keys.js";
4
7
  export { type CacheStore, extractProjectIdFromKey, isKeyForProject, LRUCacheStore, MapCacheStore, registerLRUCache, registerMapCache, } from "./registry.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EACL,KAAK,eAAe,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,UAAU,EACf,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAE1B,OAAO,EACL,KAAK,eAAe,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,UAAU,EACf,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
@@ -1,4 +1,7 @@
1
1
  export * from "./backend.js";
2
+ export * from "./multi-tier.js";
3
+ export * from "./module-cache.js";
4
+ export * from "./hash.js";
2
5
  export { extractCacheKeyContext, getContentHashKey, getCurrentCacheKeyContext, getProjectScopedKey, getProjectScopedKeyAlways, runWithCacheKeyContext, tryGetCacheKeyContext, } from "./cache-key-builder.js";
3
6
  export { buildComponentCacheKey, buildConfigCacheKey, buildContentHashCacheKey, buildDirCacheKeyPrefix, buildErrorPageCacheKey, buildFileCacheKeyPrefix, buildFileListCacheKey, buildFileOperationCacheKey, buildGitHubBytesCacheKey, buildGitHubContentCacheKey, buildGitHubDirCacheKey, buildGitHubResolveCacheKey, buildGitHubStatCacheKey, buildGitHubTreeCacheKey, buildLayoutComponentCacheKey, buildModuleResolveCacheKey, buildModuleTransformCacheKey, buildProxyManagerCacheKey, buildRedisFileCacheKey, buildRedisSSRModuleKey, buildRedisTransformKey, buildRenderCacheKey, buildRenderCachePrefix, buildSSRModuleCacheKey, buildSSRModuleProjectKey, buildStatCacheKeyPrefix, buildTransformCacheKey, CacheKeyPrefix, cacheRegistry, createCacheKeyFilter, deleteAllKeysForProject, deleteAllKeysForProjectAsync, getAllKeysForProject, getAllKeysForProjectAsync, getCacheKeyVersion, parseRenderCacheKey, } from "./keys.js";
4
7
  export { extractProjectIdFromKey, isKeyForProject, LRUCacheStore, MapCacheStore, registerLRUCache, registerMapCache, } from "./registry.js";
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Pod-Level Module Cache Singleton
3
+ *
4
+ * Provides shared module caches that persist across all RenderPipeline instances
5
+ * within a pod. This dramatically improves cache hit rates for unchanged modules
6
+ * compared to per-request caches.
7
+ *
8
+ * Features:
9
+ * - LRU eviction to bound memory usage
10
+ * - TTL-based expiration to pick up source changes
11
+ * - Automatic registration with cache registry for debugging
12
+ * - Project-scoped invalidation support
13
+ *
14
+ * @module cache/module-cache
15
+ */
16
+ import { LRUCache } from "../utils/lru-wrapper.js";
17
+ /**
18
+ * Cache statistics for monitoring.
19
+ */
20
+ interface ModuleCacheStats {
21
+ moduleCache: {
22
+ size: number;
23
+ maxEntries: number;
24
+ ttlMs: number;
25
+ };
26
+ esmCache: {
27
+ size: number;
28
+ maxEntries: number;
29
+ ttlMs: number;
30
+ };
31
+ }
32
+ /**
33
+ * Get or create the pod-level module cache.
34
+ *
35
+ * The cache is created lazily on first access and persists for the pod's lifetime.
36
+ * Uses LRU eviction and TTL-based expiration.
37
+ */
38
+ export declare function getModuleCache(): LRUCache<string, string>;
39
+ /**
40
+ * Get or create the pod-level ESM cache.
41
+ *
42
+ * Used for caching ESM resolution results (specifier → URL mappings).
43
+ */
44
+ export declare function getEsmCache(): LRUCache<string, string>;
45
+ /**
46
+ * Create a Map-compatible interface for the module cache.
47
+ *
48
+ * This provides backward compatibility with code expecting Map<string, string>.
49
+ * The underlying storage is the pod-level LRU cache singleton.
50
+ */
51
+ export declare function createModuleCache(): Map<string, string>;
52
+ /**
53
+ * Create a Map-compatible interface for the ESM cache.
54
+ *
55
+ * This provides backward compatibility with code expecting Map<string, string>.
56
+ */
57
+ export declare function createEsmCache(): Map<string, string>;
58
+ /**
59
+ * Get statistics about the module caches.
60
+ */
61
+ export declare function getModuleCacheStats(): ModuleCacheStats;
62
+ /**
63
+ * Clear all module caches.
64
+ *
65
+ * Used for invalidation when project content changes.
66
+ */
67
+ export declare function clearModuleCaches(): void;
68
+ /**
69
+ * Clear module cache entries for a specific project.
70
+ *
71
+ * @param projectId - The project ID to clear entries for
72
+ * @returns Number of entries cleared
73
+ */
74
+ export declare function clearModuleCacheForProject(projectId: string): number;
75
+ /**
76
+ * Destroy the module caches and cleanup resources.
77
+ *
78
+ * Should be called on server shutdown.
79
+ */
80
+ export declare function destroyModuleCaches(): void;
81
+ export {};
82
+ //# sourceMappingURL=module-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-cache.d.ts","sourceRoot":"","sources":["../../../src/src/cache/module-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AA0BnD;;GAEG;AACH,UAAU,gBAAgB;IACxB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBtD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGpD;AAyDD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAatD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBpE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}