veryfront 0.1.1243 → 0.1.1244
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/esm/cli/commands/clean/command.d.ts.map +1 -1
- package/esm/cli/commands/clean/command.js +30 -1
- package/esm/cli/commands/dev/command.d.ts +10 -5
- package/esm/cli/commands/dev/command.d.ts.map +1 -1
- package/esm/cli/commands/dev/command.js +13 -5
- package/esm/deno.d.ts +2 -0
- package/esm/deno.js +7 -5
- package/esm/src/cache/backend.d.ts +1 -1
- package/esm/src/cache/backend.d.ts.map +1 -1
- package/esm/src/cache/backend.js +1 -1
- package/esm/src/cache/backends/disk.d.ts +23 -0
- package/esm/src/cache/backends/disk.d.ts.map +1 -1
- package/esm/src/cache/backends/disk.js +112 -2
- package/esm/src/cache/backends/factory.d.ts +31 -2
- package/esm/src/cache/backends/factory.d.ts.map +1 -1
- package/esm/src/cache/backends/factory.js +84 -23
- package/esm/src/cache/backends/index.d.ts +1 -1
- package/esm/src/cache/backends/index.d.ts.map +1 -1
- package/esm/src/cache/backends/index.js +1 -1
- package/esm/src/cache/distributed-cache-init.d.ts.map +1 -1
- package/esm/src/cache/distributed-cache-init.js +5 -2
- package/esm/src/cache/index.d.ts +1 -0
- package/esm/src/cache/index.d.ts.map +1 -1
- package/esm/src/cache/index.js +2 -0
- package/esm/src/cache/keys/builders/render.d.ts +11 -2
- package/esm/src/cache/keys/builders/render.d.ts.map +1 -1
- package/esm/src/cache/keys/builders/render.js +12 -3
- package/esm/src/cache/keys/index.d.ts +1 -0
- package/esm/src/cache/keys/index.d.ts.map +1 -1
- package/esm/src/cache/keys/index.js +1 -0
- package/esm/src/cache/keys/render-compile-mode.d.ts +17 -0
- package/esm/src/cache/keys/render-compile-mode.d.ts.map +1 -0
- package/esm/src/cache/keys/render-compile-mode.js +20 -0
- package/esm/src/cache/keys/utils.d.ts +2 -0
- package/esm/src/cache/keys/utils.d.ts.map +1 -1
- package/esm/src/cache/keys/utils.js +8 -0
- package/esm/src/data/data-fetcher.d.ts.map +1 -1
- package/esm/src/data/data-fetcher.js +6 -1
- package/esm/src/html/hydration-script-builder/hydration-runtime.generated.js +1 -1
- package/esm/src/html/hydration-script-builder/prod-path.d.ts +1 -0
- package/esm/src/html/hydration-script-builder/prod-path.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-path.js +3 -0
- package/esm/src/html/hydration-script-builder/prod-runtime-selection.d.ts +8 -3
- package/esm/src/html/hydration-script-builder/prod-runtime-selection.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-runtime-selection.js +13 -10
- package/esm/src/html/hydration-script-builder/prod-scripts.js +2 -2
- package/esm/src/html/nonce-injection.js +2 -2
- package/esm/src/integrations/index.d.ts +3 -0
- package/esm/src/integrations/index.d.ts.map +1 -1
- package/esm/src/integrations/index.js +2 -0
- package/esm/src/integrations/salesforce-service-account.d.ts +32 -0
- package/esm/src/integrations/salesforce-service-account.d.ts.map +1 -0
- package/esm/src/integrations/salesforce-service-account.js +601 -0
- package/esm/src/modules/react-loader/component-loader.d.ts +2 -2
- package/esm/src/modules/react-loader/component-loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/component-loader.js +5 -1
- package/esm/src/modules/react-loader/ssr-module-loader/cache/memory.d.ts +3 -2
- package/esm/src/modules/react-loader/ssr-module-loader/cache/memory.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/cache/memory.js +30 -10
- package/esm/src/modules/react-loader/ssr-module-loader/cache/redis.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/cache/redis.js +11 -3
- package/esm/src/modules/react-loader/ssr-module-loader/concurrency/index.d.ts +1 -0
- package/esm/src/modules/react-loader/ssr-module-loader/concurrency/index.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/concurrency/semaphore.d.ts +18 -0
- package/esm/src/modules/react-loader/ssr-module-loader/concurrency/semaphore.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/concurrency/semaphore.js +15 -5
- package/esm/src/modules/react-loader/ssr-module-loader/constants.d.ts +15 -0
- package/esm/src/modules/react-loader/ssr-module-loader/constants.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/constants.js +23 -1
- package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts +21 -2
- package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/loader.js +327 -155
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.js +8 -1
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-dependency-validator.d.ts +19 -4
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-dependency-validator.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-dependency-validator.js +41 -10
- package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts +2 -0
- package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/vf-module-resolver.d.ts +6 -0
- package/esm/src/modules/react-loader/ssr-module-loader/vf-module-resolver.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/vf-module-resolver.js +1 -0
- package/esm/src/modules/react-loader/types.d.ts +13 -1
- package/esm/src/modules/react-loader/types.d.ts.map +1 -1
- package/esm/src/modules/react-loader/unified-loader.d.ts +2 -2
- package/esm/src/modules/react-loader/unified-loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/unified-loader.js +1 -1
- package/esm/src/modules/server/module-server.d.ts +2 -1
- package/esm/src/modules/server/module-server.d.ts.map +1 -1
- package/esm/src/modules/server/module-server.js +1 -1
- package/esm/src/platform/compat/http/pinned-fetch.d.ts +1 -1
- package/esm/src/rendering/app-reserved.d.ts +8 -2
- package/esm/src/rendering/app-reserved.d.ts.map +1 -1
- package/esm/src/rendering/app-reserved.js +12 -6
- package/esm/src/rendering/component-handling.d.ts +21 -2
- package/esm/src/rendering/component-handling.d.ts.map +1 -1
- package/esm/src/rendering/component-handling.js +24 -11
- package/esm/src/rendering/context/render-context.d.ts +23 -0
- package/esm/src/rendering/context/render-context.d.ts.map +1 -1
- package/esm/src/rendering/context/render-context.js +10 -2
- package/esm/src/rendering/factories/service-factories.d.ts +1 -1
- package/esm/src/rendering/factories/service-factories.d.ts.map +1 -1
- package/esm/src/rendering/factories/service-factories.js +4 -1
- package/esm/src/rendering/layouts/index.d.ts +1 -1
- package/esm/src/rendering/layouts/index.d.ts.map +1 -1
- package/esm/src/rendering/layouts/layout-applicator.d.ts +20 -1
- package/esm/src/rendering/layouts/layout-applicator.d.ts.map +1 -1
- package/esm/src/rendering/layouts/layout-applicator.js +30 -9
- package/esm/src/rendering/layouts/utils/applicator.d.ts +3 -2
- package/esm/src/rendering/layouts/utils/applicator.d.ts.map +1 -1
- package/esm/src/rendering/layouts/utils/applicator.js +42 -6
- package/esm/src/rendering/layouts/utils/component-loader.d.ts +53 -6
- package/esm/src/rendering/layouts/utils/component-loader.d.ts.map +1 -1
- package/esm/src/rendering/layouts/utils/component-loader.js +35 -11
- package/esm/src/rendering/orchestrator/html-types.d.ts +6 -0
- package/esm/src/rendering/orchestrator/html-types.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.d.ts +11 -0
- package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.js +41 -4
- package/esm/src/rendering/orchestrator/layout.d.ts +16 -2
- package/esm/src/rendering/orchestrator/layout.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/layout.js +38 -6
- package/esm/src/rendering/orchestrator/lifecycle.d.ts +8 -0
- package/esm/src/rendering/orchestrator/lifecycle.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/lifecycle.js +4 -1
- package/esm/src/rendering/orchestrator/module-loader/index.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-loader/index.js +5 -3
- package/esm/src/rendering/orchestrator/module-loader/module-cache-lookup.d.ts +3 -1
- package/esm/src/rendering/orchestrator/module-loader/module-cache-lookup.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-loader/module-cache-lookup.js +4 -4
- package/esm/src/rendering/orchestrator/module-loader/module-persistence.d.ts +2 -0
- package/esm/src/rendering/orchestrator/module-loader/module-persistence.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-loader/module-persistence.js +6 -1
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/pipeline.js +6 -4
- package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/ssr-orchestrator.js +1 -1
- package/esm/src/rendering/orchestrator/ssr.d.ts +1 -0
- package/esm/src/rendering/orchestrator/ssr.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/ssr.js +9 -0
- package/esm/src/rendering/orchestrator/types.d.ts +7 -0
- package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
- package/esm/src/rendering/page-renderer.d.ts +21 -0
- package/esm/src/rendering/page-renderer.d.ts.map +1 -1
- package/esm/src/rendering/page-renderer.js +13 -3
- package/esm/src/rendering/page-rendering.d.ts +2 -0
- package/esm/src/rendering/page-rendering.d.ts.map +1 -1
- package/esm/src/rendering/page-rendering.js +3 -0
- package/esm/src/rendering/renderer.d.ts.map +1 -1
- package/esm/src/rendering/renderer.js +3 -1
- package/esm/src/rendering/rsc/server-renderer/rsc-renderer.d.ts.map +1 -1
- package/esm/src/rendering/rsc/server-renderer/rsc-renderer.js +4 -1
- package/esm/src/rendering/ssr/component-registry.d.ts +5 -3
- package/esm/src/rendering/ssr/component-registry.d.ts.map +1 -1
- package/esm/src/rendering/ssr/component-registry.js +12 -7
- package/esm/src/security/http/outbound-fetch.d.ts +3 -1
- package/esm/src/security/http/outbound-fetch.d.ts.map +1 -1
- package/esm/src/security/http/outbound-fetch.js +1 -0
- package/esm/src/security/sandbox/worker-egress-guard.d.ts +8 -0
- package/esm/src/security/sandbox/worker-egress-guard.d.ts.map +1 -1
- package/esm/src/security/sandbox/worker-egress-guard.js +17 -0
- package/esm/src/server/context/enriched-context.d.ts.map +1 -1
- package/esm/src/server/context/enriched-context.js +6 -2
- package/esm/src/server/dev-server/cache-context.d.ts +7 -0
- package/esm/src/server/dev-server/cache-context.d.ts.map +1 -0
- package/esm/src/server/dev-server/cache-context.js +10 -0
- package/esm/src/server/dev-server/server.d.ts.map +1 -1
- package/esm/src/server/dev-server/server.js +27 -24
- package/esm/src/server/handlers/request/ssr/error-page-fallback.js +3 -1
- package/esm/src/server/handlers/request/ssr/not-found-fallback.d.ts.map +1 -1
- package/esm/src/server/handlers/request/ssr/not-found-fallback.js +16 -2
- package/esm/src/server/services/rsc/orchestrators/manifest-handler.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/manifest-handler.js +4 -1
- package/esm/src/server/services/rsc/orchestrators/render-handler.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/render-handler.js +1 -0
- package/esm/src/transforms/esm/http-cache-helpers.d.ts +22 -5
- package/esm/src/transforms/esm/http-cache-helpers.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache-helpers.js +41 -5
- package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache.js +14 -2
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts +35 -0
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +22 -1
- package/esm/src/transforms/mdx/esm-module-loader/loader-helpers.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/loader-helpers.js +5 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.d.ts +18 -3
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.js +29 -11
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/http-fallback.d.ts +2 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/http-fallback.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/http-fallback.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +2 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +6 -2
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.js +2 -2
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/persistence.d.ts +2 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/persistence.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/persistence.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/source-transform.d.ts +6 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/source-transform.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/source-transform.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/types.d.ts +13 -0
- package/esm/src/transforms/mdx/esm-module-loader/types.d.ts.map +1 -1
- package/esm/src/transforms/mdx/index.d.ts +6 -0
- package/esm/src/transforms/mdx/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/index.js +2 -1
- package/esm/src/transforms/pipeline/context.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/context.js +4 -1
- package/esm/src/transforms/pipeline/stages/browser-server-exports-strip.d.ts +20 -0
- package/esm/src/transforms/pipeline/stages/browser-server-exports-strip.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/stages/browser-server-exports-strip.js +274 -21
- package/esm/src/utils/cache-dir.d.ts +8 -0
- package/esm/src/utils/cache-dir.d.ts.map +1 -1
- package/esm/src/utils/cache-dir.js +11 -1
- package/esm/src/utils/singleflight.d.ts +7 -0
- package/esm/src/utils/singleflight.d.ts.map +1 -1
- package/esm/src/utils/singleflight.js +80 -22
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/clean/command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/clean/command.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCvE"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { join } from "../../../src/platform/compat/path/index.js";
|
|
2
2
|
import { getConfig } from "../../../src/config/index.js";
|
|
3
|
-
import { runtime } from "../../../src/platform/index.js";
|
|
3
|
+
import { getEnv, runtime } from "../../../src/platform/index.js";
|
|
4
4
|
import { cliLogger } from "../../utils/index.js";
|
|
5
5
|
import { DEFAULT_CACHE_DIR } from "../../../src/utils/constants/server.js";
|
|
6
|
+
import { getProjectCacheDir } from "../../../src/utils/cache-dir.js";
|
|
6
7
|
import { CacheCoordinator } from "../../../src/rendering/index.js";
|
|
7
8
|
import { FilesystemCacheStore, KVCacheStore, MemoryCacheStore, RedisCacheStore, } from "../../../src/rendering/index.js";
|
|
8
9
|
import { createFileSystem } from "../../../src/platform/index.js";
|
|
@@ -52,6 +53,29 @@ async function cleanDirectory(path) {
|
|
|
52
53
|
cliLogger.error(`Failed to clean directory ${path}:`, error);
|
|
53
54
|
}
|
|
54
55
|
}
|
|
56
|
+
function getFrameworkCacheDirectories(projectDir) {
|
|
57
|
+
const frameworkRoots = new Set([
|
|
58
|
+
getProjectCacheDir(projectDir),
|
|
59
|
+
getEnv("VERYFRONT_CACHE_DIR"),
|
|
60
|
+
getEnv("VF_CACHE_DIR"),
|
|
61
|
+
].filter((root) => !!root));
|
|
62
|
+
const directories = new Set();
|
|
63
|
+
for (const root of frameworkRoots) {
|
|
64
|
+
for (const namespace of [
|
|
65
|
+
"veryfront-mdx-esm",
|
|
66
|
+
"veryfront-http-bundle",
|
|
67
|
+
"veryfront-files",
|
|
68
|
+
"veryfront-modules",
|
|
69
|
+
"veryfront-cycle-manifests",
|
|
70
|
+
]) {
|
|
71
|
+
directories.add(join(root, namespace));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const diskRoot = getEnv("VF_DISK_CACHE_DIR");
|
|
75
|
+
if (diskRoot)
|
|
76
|
+
directories.add(join(diskRoot, "veryfront-files"));
|
|
77
|
+
return [...directories];
|
|
78
|
+
}
|
|
55
79
|
async function cleanCacheStore(projectDir) {
|
|
56
80
|
try {
|
|
57
81
|
const adapter = await runtime.get();
|
|
@@ -70,6 +94,11 @@ async function cleanCacheStore(projectDir) {
|
|
|
70
94
|
await coordinator.destroy();
|
|
71
95
|
}
|
|
72
96
|
await cleanDirectory(join(projectDir, cacheDir));
|
|
97
|
+
// The framework cache root is separate from the render cache store and
|
|
98
|
+
// holds the compiled modules a dev server keeps across restarts, so a
|
|
99
|
+
// cache clean that leaves them in place is not a clean. Remove only
|
|
100
|
+
// Veryfront-owned directories because other tools can share `.cache`.
|
|
101
|
+
await Promise.all(getFrameworkCacheDirectories(projectDir).map(cleanDirectory));
|
|
73
102
|
}
|
|
74
103
|
catch (error) {
|
|
75
104
|
cliLogger.error("Failed to clean cache store:", error);
|
|
@@ -64,7 +64,7 @@ export declare function startDevServerOnFreePort<T>(requestedPort: number, start
|
|
|
64
64
|
port: number;
|
|
65
65
|
}>;
|
|
66
66
|
/**
|
|
67
|
-
* Clears the shared on-disk ESM caches, but only if
|
|
67
|
+
* Clears the shared on-disk ESM caches, but only if they are safe to remove.
|
|
68
68
|
*
|
|
69
69
|
* The caches live under the project's `.cache` directory, which every dev
|
|
70
70
|
* server rooted at that project shares. A taken dev port is the signal that one
|
|
@@ -73,10 +73,15 @@ export declare function startDevServerOnFreePort<T>(requestedPort: number, start
|
|
|
73
73
|
* the second `veryfront dev` falls forward to a free port and starts on a cache
|
|
74
74
|
* it did not just destroy.
|
|
75
75
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
76
|
+
* The clear is also skipped when the project keeps a persistent local dev
|
|
77
|
+
* cache. That cache stores compiled modules that reference these files, so
|
|
78
|
+
* removing them makes every entry fail validation and turns each restart cold
|
|
79
|
+
* again. Run `veryfront clean --cache` to reset both.
|
|
80
|
+
*
|
|
81
|
+
* Returns whether the clear ran. Takes `clear`, `probe`, and `persists` as
|
|
82
|
+
* parameters so the decision can be tested without booting a dev server, the
|
|
83
|
+
* same seam `startDevServerOnFreePort` uses.
|
|
79
84
|
*/
|
|
80
|
-
export declare function clearLocalCachesIfPortFree(requestedPort: number, clear?: () => Promise<void>, probe?: (port: number) => Promise<boolean
|
|
85
|
+
export declare function clearLocalCachesIfPortFree(requestedPort: number, clear?: () => Promise<void>, probe?: (port: number) => Promise<boolean>, persists?: () => boolean): Promise<boolean>;
|
|
81
86
|
export declare function devCommand(options: DevOptions): Promise<DevCommandResult>;
|
|
82
87
|
//# sourceMappingURL=command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dev/command.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dev/command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,OAAO,EAAE,KAAK,YAAY,EAA2B,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM1F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAQD,wBAAsB,cAAc,CAClC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAQvE;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,WAAW,CAEb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBtC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,KAAK,GAAE,MAAM,OAAO,CAAC,IAAI,CAAuB,EAChD,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAmB,EAC3D,QAAQ,GAAE,MAAM,OAAuC,GACtD,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6TzE"}
|
|
@@ -9,6 +9,7 @@ import { getConfig } from "../../../src/config/index.js";
|
|
|
9
9
|
import { getEnvironmentConfig } from "../../../src/config/index.js";
|
|
10
10
|
import { startDevServer } from "../../../src/server/index.js";
|
|
11
11
|
import { clearAllLocalCaches } from "../../../src/transforms/mdx/esm-module-loader/cache/index.js";
|
|
12
|
+
import { isPersistentLocalCacheEnabled } from "../../../src/cache/index.js";
|
|
12
13
|
import { validateProviderConfig } from "../../../src/discovery/index.js";
|
|
13
14
|
import { brand, devShortcuts, dim, error as errorColor, formatDuration, warning } from "../../ui/index.js";
|
|
14
15
|
import { exitProcess, isTTY, isVerbose, registerTerminationSignals } from "../../utils/index.js";
|
|
@@ -79,7 +80,7 @@ export async function startDevServerOnFreePort(requestedPort, start) {
|
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
82
|
/**
|
|
82
|
-
* Clears the shared on-disk ESM caches, but only if
|
|
83
|
+
* Clears the shared on-disk ESM caches, but only if they are safe to remove.
|
|
83
84
|
*
|
|
84
85
|
* The caches live under the project's `.cache` directory, which every dev
|
|
85
86
|
* server rooted at that project shares. A taken dev port is the signal that one
|
|
@@ -88,13 +89,20 @@ export async function startDevServerOnFreePort(requestedPort, start) {
|
|
|
88
89
|
* the second `veryfront dev` falls forward to a free port and starts on a cache
|
|
89
90
|
* it did not just destroy.
|
|
90
91
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
92
|
+
* The clear is also skipped when the project keeps a persistent local dev
|
|
93
|
+
* cache. That cache stores compiled modules that reference these files, so
|
|
94
|
+
* removing them makes every entry fail validation and turns each restart cold
|
|
95
|
+
* again. Run `veryfront clean --cache` to reset both.
|
|
96
|
+
*
|
|
97
|
+
* Returns whether the clear ran. Takes `clear`, `probe`, and `persists` as
|
|
98
|
+
* parameters so the decision can be tested without booting a dev server, the
|
|
99
|
+
* same seam `startDevServerOnFreePort` uses.
|
|
94
100
|
*/
|
|
95
|
-
export async function clearLocalCachesIfPortFree(requestedPort, clear = clearAllLocalCaches, probe = isPortAvailable) {
|
|
101
|
+
export async function clearLocalCachesIfPortFree(requestedPort, clear = clearAllLocalCaches, probe = isPortAvailable, persists = isPersistentLocalCacheEnabled) {
|
|
96
102
|
if (!await probe(requestedPort))
|
|
97
103
|
return false;
|
|
104
|
+
if (persists())
|
|
105
|
+
return false;
|
|
98
106
|
await clear();
|
|
99
107
|
return true;
|
|
100
108
|
}
|
package/esm/deno.d.ts
CHANGED
|
@@ -160,6 +160,7 @@ declare namespace _default {
|
|
|
160
160
|
"veryfront/utils/import-lockfile": string;
|
|
161
161
|
"veryfront/utils/env-loader": string;
|
|
162
162
|
"veryfront/utils/logger": string;
|
|
163
|
+
"veryfront/utils/cache-dir": string;
|
|
163
164
|
"veryfront/utils/package-client": string;
|
|
164
165
|
"veryfront/proxy/main": string;
|
|
165
166
|
"veryfront/proxy/handler": string;
|
|
@@ -476,6 +477,7 @@ declare namespace _default {
|
|
|
476
477
|
"lint:skipped-tests": string;
|
|
477
478
|
"lint:cwd-relative-test-reads": string;
|
|
478
479
|
"lint:anti-slop": string;
|
|
480
|
+
"lint:render-mode-defaults": string;
|
|
479
481
|
"lint:dnt-meta-properties": string;
|
|
480
482
|
"test:scripts": string;
|
|
481
483
|
"test:sentry-runtime-packages": string;
|
package/esm/deno.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1244",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"nodeModulesDir": "auto",
|
|
6
6
|
"minimumDependencyAge": {
|
|
@@ -230,6 +230,7 @@ export default {
|
|
|
230
230
|
"veryfront/utils/import-lockfile": "./src/utils/import-lockfile.ts",
|
|
231
231
|
"veryfront/utils/env-loader": "./src/utils/env-loader.ts",
|
|
232
232
|
"veryfront/utils/logger": "./src/utils/logger/index.ts",
|
|
233
|
+
"veryfront/utils/cache-dir": "./src/utils/cache-dir.ts",
|
|
233
234
|
"veryfront/utils/package-client": "./src/utils/package-client.ts",
|
|
234
235
|
"veryfront/proxy/main": "./src/proxy/main.ts",
|
|
235
236
|
"veryfront/proxy/handler": "./src/proxy/handler.ts",
|
|
@@ -499,12 +500,12 @@ export default {
|
|
|
499
500
|
"build:storybook": "npm --prefix storybook run build-storybook",
|
|
500
501
|
"storybook:check": "deno test --no-lock --config=scripts/test.deno.json --no-check --allow-read scripts/storybook/storybook-workbench.test.ts",
|
|
501
502
|
"lint": "DENO_NO_PACKAGE_JSON=1 deno lint && deno lint --config=scripts/test.deno.json scripts/test/ scripts/build/dnt-meta-property-safety.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.ts scripts/build/dnt-polyfill.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/prepare-framework-sources.test.ts && deno lint --config=scripts/codemods/deno.json scripts/codemods/",
|
|
502
|
-
"lint:ci": "deno task lint && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:client-bundle && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:secret-scanning-config && deno task lint:skipped-tests && deno task lint:chat-ratchets && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:esm-sh-codemod && deno task lint:test-typecheck && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:dnt-meta-properties && deno task storybook:check && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:public:check && deno test --frozen --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run=bash scripts/ci/setup-deno-workflow.test.ts scripts/ci/prepare-rc-build.test.ts scripts/build/generated-artifact-checks.test.ts scripts/release.test.ts",
|
|
503
|
+
"lint:ci": "deno task lint && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:client-bundle && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:secret-scanning-config && deno task lint:skipped-tests && deno task lint:chat-ratchets && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:esm-sh-codemod && deno task lint:test-typecheck && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:render-mode-defaults && deno task lint:dnt-meta-properties && deno task storybook:check && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:public:check && deno test --frozen --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run=bash scripts/ci/setup-deno-workflow.test.ts scripts/ci/prepare-rc-build.test.ts scripts/build/generated-artifact-checks.test.ts scripts/release.test.ts",
|
|
503
504
|
"fmt": "deno fmt src/ cli/ react/ templates/ && deno fmt --config=scripts/test.deno.json scripts/test/ scripts/build/dnt-meta-property-safety.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.ts scripts/build/dnt-polyfill.test.ts scripts/build/prepare-framework-sources.test.ts && deno fmt --config=scripts/codemods/deno.json scripts/codemods/",
|
|
504
505
|
"fmt:check": "deno fmt --check src/ cli/ react/ templates/ && deno fmt --check --config=scripts/test.deno.json scripts/test/ scripts/build/dnt-meta-property-safety.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.ts scripts/build/dnt-polyfill.test.ts scripts/build/prepare-framework-sources.test.ts && deno fmt --check --config=scripts/codemods/deno.json scripts/codemods/",
|
|
505
506
|
"typecheck": "deno task generate:manifests:check && deno check src/index.ts cli/main.ts src/server/index.ts src/routing/api/index.ts src/rendering/index.ts src/platform/index.ts src/platform/adapters/index.ts src/build/index.ts src/build/production-build/index.ts src/transforms/index.ts src/config/index.ts src/utils/index.ts src/data/index.ts src/security/index.ts src/middleware/index.ts src/server/handlers/dev/index.ts src/server/handlers/request/api/index.ts src/rendering/cache/index.ts src/rendering/cache/stores/index.ts src/rendering/rsc/actions/index.ts src/html/index.ts src/html/hydration-script-builder/runtime/main.ts src/modules/index.ts src/proxy/main.ts src/react/components/ui/index.ts src/chat/index.ts src/markdown/index.ts src/mdx/index.ts src/fs/index.ts src/oauth/index.ts src/agent/index.ts src/agent/service/route-export.check.ts src/eval/index.ts src/tool/index.ts src/workflow/index.ts src/prompt/index.ts src/resource/index.ts src/runs/index.ts src/mcp/index.ts src/provider/index.ts",
|
|
506
|
-
"verify": "deno task generate:manifests:check && deno task fmt:check && deno task lint && deno task lint:style && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:chat-ratchets && deno task lint:esm-sh-codemod && deno task lint:cli-boundary && deno task lint:wildcard-exports && deno task lint:barrel-jsdoc && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:skipped-tests && deno task lint:ban-zod && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:validate && deno task typecheck && deno task typecheck:consumer && deno task test && deno task test:scripts && deno task test:e2e:binary",
|
|
507
|
-
"verify:quick": "deno task generate:manifests:check && deno task fmt:check && deno task lint && deno task lint:style && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:chat-ratchets && deno task lint:esm-sh-codemod && deno task lint:cli-boundary && deno task lint:wildcard-exports && deno task lint:barrel-jsdoc && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:skipped-tests && deno task lint:ban-zod && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:validate && deno task typecheck",
|
|
507
|
+
"verify": "deno task generate:manifests:check && deno task fmt:check && deno task lint && deno task lint:style && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:chat-ratchets && deno task lint:esm-sh-codemod && deno task lint:cli-boundary && deno task lint:wildcard-exports && deno task lint:barrel-jsdoc && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:skipped-tests && deno task lint:ban-zod && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:render-mode-defaults && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:validate && deno task typecheck && deno task typecheck:consumer && deno task test && deno task test:scripts && deno task test:e2e:binary",
|
|
508
|
+
"verify:quick": "deno task generate:manifests:check && deno task fmt:check && deno task lint && deno task lint:style && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:chat-ratchets && deno task lint:esm-sh-codemod && deno task lint:cli-boundary && deno task lint:wildcard-exports && deno task lint:barrel-jsdoc && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:skipped-tests && deno task lint:ban-zod && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:render-mode-defaults && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:validate && deno task typecheck",
|
|
508
509
|
"typecheck:consumer": "deno run --allow-read --allow-run --allow-env --allow-write scripts/typecheck/run-consumer-typecheck.ts",
|
|
509
510
|
"codemod:chat": "deno run --frozen --config=scripts/codemods/deno.json --allow-read --allow-write --allow-env=BABEL_TYPES_8_BREAKING scripts/codemods/migrate-chat-composition.ts",
|
|
510
511
|
"codemod:esm-sh": "deno run --frozen --config=scripts/codemods/deno.json --allow-read --allow-write --allow-env=BABEL_TYPES_8_BREAKING scripts/codemods/migrate-esm-sh-imports.ts",
|
|
@@ -552,8 +553,9 @@ export default {
|
|
|
552
553
|
"lint:skipped-tests": "deno run --allow-read scripts/lint/check-skipped-tests-baseline.ts",
|
|
553
554
|
"lint:cwd-relative-test-reads": "deno run --allow-read scripts/lint/audit-cwd-relative-test-reads.ts",
|
|
554
555
|
"lint:anti-slop": "deno run --allow-read scripts/lint/audit-anti-slop.ts",
|
|
556
|
+
"lint:render-mode-defaults": "deno run --allow-read scripts/lint/audit-render-mode-defaults.ts",
|
|
555
557
|
"lint:dnt-meta-properties": "deno run --config=scripts/test.deno.json --frozen --allow-read scripts/build/dnt-meta-property-safety.ts",
|
|
556
|
-
"test:scripts": "deno test --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run scripts/build/feature-files-detection.test.ts scripts/ci/prepare-rc-build.test.ts scripts/ci/publish-npm-packages.test.ts scripts/ci/setup-deno-workflow.test.ts scripts/build/compile-binary.test.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.test.ts scripts/build/generate-sbom.test.ts scripts/build/generated-artifact-checks.test.ts scripts/build/npm-dependency-sources.test.ts scripts/build/npm-extension-package-metadata.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/npm-react-shims.test.ts scripts/build/npm-runtime-helper-contract.test.ts scripts/build/prepare-framework-sources.test.ts scripts/build/report-artifact-sizes.test.ts scripts/build/run-generate.test.ts scripts/docs/docs-coverage.test.ts scripts/docs/generate-api-reference.test.ts scripts/docs/guide-validation.test.ts scripts/lint/audit-chat-composability.test.ts scripts/lint/audit-rfc-status.test.ts scripts/lint/audit-core-deps.test.ts scripts/lint/audit-cwd-relative-test-reads.test.ts scripts/lint/audit-cross-runtime-jsr.test.ts scripts/lint/audit-dependency-boundaries.test.ts scripts/lint/audit-extension-capabilities.test.ts scripts/lint/audit-extension-contracts.test.ts scripts/lint/audit-deps.test.ts scripts/lint/check-module-boundaries.test.ts scripts/lint/lint-config.test.ts scripts/lint/ban-test-only.test.ts scripts/lint/check-sanitizer-baseline.test.ts scripts/lint/check-skipped-tests-baseline.test.ts scripts/lint/audit-anti-slop.test.ts scripts/lint/check-test-typecheck-baseline.test.ts scripts/lint/check-coverage.test.ts scripts/security/audit-npm.test.ts scripts/security/secret-scanning-config.test.ts scripts/security/submit-dependency-snapshot.test.ts scripts/test/template-runtime-e2e.test.ts && deno task test:tool-search-live",
|
|
558
|
+
"test:scripts": "deno test --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run scripts/build/feature-files-detection.test.ts scripts/ci/prepare-rc-build.test.ts scripts/ci/publish-npm-packages.test.ts scripts/ci/setup-deno-workflow.test.ts scripts/build/compile-binary.test.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.test.ts scripts/build/generate-sbom.test.ts scripts/build/generated-artifact-checks.test.ts scripts/build/npm-dependency-sources.test.ts scripts/build/npm-extension-package-metadata.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/npm-react-shims.test.ts scripts/build/npm-runtime-helper-contract.test.ts scripts/build/prepare-framework-sources.test.ts scripts/build/report-artifact-sizes.test.ts scripts/build/run-generate.test.ts scripts/docs/docs-coverage.test.ts scripts/docs/generate-api-reference.test.ts scripts/docs/guide-validation.test.ts scripts/lint/audit-chat-composability.test.ts scripts/lint/audit-rfc-status.test.ts scripts/lint/audit-core-deps.test.ts scripts/lint/audit-cwd-relative-test-reads.test.ts scripts/lint/audit-cross-runtime-jsr.test.ts scripts/lint/audit-dependency-boundaries.test.ts scripts/lint/audit-extension-capabilities.test.ts scripts/lint/audit-extension-contracts.test.ts scripts/lint/audit-deps.test.ts scripts/lint/check-module-boundaries.test.ts scripts/lint/lint-config.test.ts scripts/lint/ban-test-only.test.ts scripts/lint/check-sanitizer-baseline.test.ts scripts/lint/check-skipped-tests-baseline.test.ts scripts/lint/audit-anti-slop.test.ts scripts/lint/audit-render-mode-defaults.test.ts scripts/lint/check-test-typecheck-baseline.test.ts scripts/lint/check-coverage.test.ts scripts/security/audit-npm.test.ts scripts/security/secret-scanning-config.test.ts scripts/security/submit-dependency-snapshot.test.ts scripts/test/template-runtime-e2e.test.ts && deno task test:tool-search-live",
|
|
557
559
|
"test:sentry-runtime-packages": "deno test --config=scripts/test.deno.json --no-check --no-lock --allow-read --allow-write --allow-run --allow-env=DENO_DIR,HOME,XDG_CACHE_HOME,LOCALAPPDATA,USERPROFILE scripts/build/sentry-runtime-packages.test.ts",
|
|
558
560
|
"test:tool-search-live": "VF_DISABLE_LRU_INTERVAL=1 deno test --no-check -A tests/agent/verify-tool-search-live.test.ts",
|
|
559
561
|
"test:cross-runtime": "deno run --allow-all src/platform/compat/cross-runtime.test.ts",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module cache/backend
|
|
12
12
|
*/
|
|
13
|
-
export { ApiCacheBackend, type CacheBackendConfig, CacheBackends, createCacheBackend, createDistributedCacheAccessor, createDistributedCodeCacheAccessor, createTokenizingGateway, isApiCacheAvailable, isDiskCacheConfigured, isDistributedBackend, MemoryCacheBackend, RedisCacheBackend, } from "./backends/index.js";
|
|
13
|
+
export { ApiCacheBackend, type CacheBackendConfig, CacheBackends, createCacheBackend, createDistributedCacheAccessor, createDistributedCodeCacheAccessor, createTokenizingGateway, isApiCacheAvailable, isDiskCacheConfigured, isDistributedBackend, isLocalDevDiskCacheEnabled, isPersistentLocalCacheEnabled, localDevCodeCacheBackend, MemoryCacheBackend, RedisCacheBackend, } from "./backends/index.js";
|
|
14
14
|
export { assertCacheReadMaximumBytes, assertCacheValueWithinLimit, CacheValueTooLargeError, captureBoundedCacheRead, readCacheValueWithinLimit, } from "./bounded-read.js";
|
|
15
15
|
export { buildRevisionedCacheKey, isRevisionedCacheBackend, isRevisionedCacheKey, MAX_REVISIONED_CACHE_SOURCE_KEY_LENGTH, requireCacheExchangeResult, REVISIONED_CACHE_KEY_PREFIX, snapshotCacheRevisionResult, } from "./capabilities.js";
|
|
16
16
|
export { MAX_CACHE_REVISION_LENGTH } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/src/cache/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,aAAa,EACb,kBAAkB,EAClB,8BAA8B,EAC9B,kCAAkC,EAClC,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,sCAAsC,EACtC,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/src/cache/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,aAAa,EACb,kBAAkB,EAClB,8BAA8B,EAC9B,kCAAkC,EAClC,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,sCAAsC,EACtC,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/esm/src/cache/backend.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* @module cache/backend
|
|
12
12
|
*/
|
|
13
13
|
// Re-export everything from the backends barrel
|
|
14
|
-
export { ApiCacheBackend, CacheBackends, createCacheBackend, createDistributedCacheAccessor, createDistributedCodeCacheAccessor, createTokenizingGateway, isApiCacheAvailable, isDiskCacheConfigured, isDistributedBackend, MemoryCacheBackend, RedisCacheBackend, } from "./backends/index.js";
|
|
14
|
+
export { ApiCacheBackend, CacheBackends, createCacheBackend, createDistributedCacheAccessor, createDistributedCodeCacheAccessor, createTokenizingGateway, isApiCacheAvailable, isDiskCacheConfigured, isDistributedBackend, isLocalDevDiskCacheEnabled, isPersistentLocalCacheEnabled, localDevCodeCacheBackend, MemoryCacheBackend, RedisCacheBackend, } from "./backends/index.js";
|
|
15
15
|
export { assertCacheReadMaximumBytes, assertCacheValueWithinLimit, CacheValueTooLargeError, captureBoundedCacheRead, readCacheValueWithinLimit, } from "./bounded-read.js";
|
|
16
16
|
export { buildRevisionedCacheKey, isRevisionedCacheBackend, isRevisionedCacheKey, MAX_REVISIONED_CACHE_SOURCE_KEY_LENGTH, requireCacheExchangeResult, REVISIONED_CACHE_KEY_PREFIX, snapshotCacheRevisionResult, } from "./capabilities.js";
|
|
17
17
|
// Re-export types
|
|
@@ -17,12 +17,35 @@ export declare class DiskCacheBackend implements CacheBackend {
|
|
|
17
17
|
private readonly maxValueBytes;
|
|
18
18
|
private readonly maxFileBytes;
|
|
19
19
|
private mutationTail;
|
|
20
|
+
private writesUntilExpiryPrune;
|
|
21
|
+
private expiryPruneOffset;
|
|
20
22
|
constructor(baseDir?: string, keyPrefix?: string, maxValueBytes?: number);
|
|
21
23
|
private filePath;
|
|
22
24
|
private ensureDir;
|
|
23
25
|
private withMutation;
|
|
24
26
|
private readFramedFile;
|
|
25
27
|
private readEnvelopeWithinValueLimit;
|
|
28
|
+
/**
|
|
29
|
+
* Remove a cache file, but only while it still holds the expired entry.
|
|
30
|
+
*
|
|
31
|
+
* Dev servers and build steps share a project cache, so another process can
|
|
32
|
+
* replace the pathname between the expiry check and the deletion. Deleting by
|
|
33
|
+
* pathname would then remove that fresh entry. The file is claimed with an
|
|
34
|
+
* atomic rename and revalidated on the claimed inode instead, and a claim
|
|
35
|
+
* that turns out to hold a fresh entry is linked back under its original
|
|
36
|
+
* name. Both the write-time sweep and the read-time cleanup go through this,
|
|
37
|
+
* so neither can delete a write that won the race.
|
|
38
|
+
*/
|
|
39
|
+
private removeExpiredEntryFile;
|
|
40
|
+
/**
|
|
41
|
+
* Drop an entry a read found expired.
|
|
42
|
+
*
|
|
43
|
+
* Queued on the mutation tail so it cannot interleave with this instance's
|
|
44
|
+
* own writes, and so a caller can flush it by awaiting any later operation.
|
|
45
|
+
*/
|
|
46
|
+
private expireEntry;
|
|
47
|
+
private pruneExpiredEntries;
|
|
48
|
+
private maybePruneExpiredEntries;
|
|
26
49
|
get(key: string): Promise<string | null>;
|
|
27
50
|
getWithinLimit(key: string, maximumBytes: number): Promise<string | null>;
|
|
28
51
|
getRemainingTtlSeconds(key: string): Promise<number | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disk.d.ts","sourceRoot":"","sources":["../../../../src/src/cache/backends/disk.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"disk.d.ts","sourceRoot":"","sources":["../../../../src/src/cache/backends/disk.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuShD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,iBAAiB,CAAK;gBAG5B,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,SAA0B;YAc3B,QAAQ;YAIR,SAAS;YAKT,YAAY;YAcZ,cAAc;YAyEd,4BAA4B;IAoB1C;;;;;;;;;;OAUG;YACW,sBAAsB;IAkCpC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;YAML,mBAAmB;YA+BnB,wBAAwB;IAShC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsCxC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBzE,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa3D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqDrD"}
|
|
@@ -14,6 +14,8 @@ const MAX_CACHE_KEY_CODE_UNITS = 64 * 1024;
|
|
|
14
14
|
const KEY_DIGEST_LOG_CHARS = 12;
|
|
15
15
|
const MAX_CACHE_NAMESPACE_BYTES = 240;
|
|
16
16
|
const MAX_DIRECTORY_SCAN_ENTRIES = 100_000;
|
|
17
|
+
const EXPIRY_PRUNE_BATCH_SIZE = 256;
|
|
18
|
+
const EXPIRY_PRUNE_WRITE_INTERVAL = 32;
|
|
17
19
|
const DEFAULT_MAX_VALUE_BYTES = 64 * 1024 * 1024;
|
|
18
20
|
const MAX_CONFIGURED_VALUE_BYTES = 512 * 1024 * 1024;
|
|
19
21
|
const FRAME_HEADER_BYTES = 40;
|
|
@@ -261,6 +263,8 @@ export class DiskCacheBackend {
|
|
|
261
263
|
maxValueBytes;
|
|
262
264
|
maxFileBytes;
|
|
263
265
|
mutationTail = Promise.resolve();
|
|
266
|
+
writesUntilExpiryPrune = 1;
|
|
267
|
+
expiryPruneOffset = 0;
|
|
264
268
|
constructor(baseDir, keyPrefix, maxValueBytes = DEFAULT_MAX_VALUE_BYTES) {
|
|
265
269
|
const base = join(baseDir ?? getCacheBaseDir(), CACHE_SUBDIR);
|
|
266
270
|
this.dir = keyPrefix ? join(base, encodeCacheNamespace(keyPrefix)) : base;
|
|
@@ -362,6 +366,105 @@ export class DiskCacheBackend {
|
|
|
362
366
|
throw error;
|
|
363
367
|
}
|
|
364
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* Remove a cache file, but only while it still holds the expired entry.
|
|
371
|
+
*
|
|
372
|
+
* Dev servers and build steps share a project cache, so another process can
|
|
373
|
+
* replace the pathname between the expiry check and the deletion. Deleting by
|
|
374
|
+
* pathname would then remove that fresh entry. The file is claimed with an
|
|
375
|
+
* atomic rename and revalidated on the claimed inode instead, and a claim
|
|
376
|
+
* that turns out to hold a fresh entry is linked back under its original
|
|
377
|
+
* name. Both the write-time sweep and the read-time cleanup go through this,
|
|
378
|
+
* so neither can delete a write that won the race.
|
|
379
|
+
*/
|
|
380
|
+
async removeExpiredEntryFile(filePath) {
|
|
381
|
+
const { link, rename, unlink } = await fsPromises;
|
|
382
|
+
const claimPath = `${filePath}.prune.${dntShim.crypto.randomUUID()}`;
|
|
383
|
+
try {
|
|
384
|
+
await rename(filePath, claimPath);
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
// Another process already replaced or removed the entry.
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
let restoreClaim = true;
|
|
391
|
+
try {
|
|
392
|
+
const claimed = await this.readFramedFile(claimPath, undefined, undefined, false);
|
|
393
|
+
if (claimed.expiresAt !== undefined && Date.now() >= claimed.expiresAt) {
|
|
394
|
+
await unlink(claimPath);
|
|
395
|
+
restoreClaim = false;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
// An unreadable claim is restored rather than deleted: the pathname may
|
|
400
|
+
// now hold a fresh entry this process never validated.
|
|
401
|
+
}
|
|
402
|
+
if (!restoreClaim)
|
|
403
|
+
return;
|
|
404
|
+
let discardClaim = false;
|
|
405
|
+
try {
|
|
406
|
+
await link(claimPath, filePath);
|
|
407
|
+
discardClaim = true;
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
// A newer writer already owns the pathname, so its entry wins.
|
|
411
|
+
if (error.code === "EEXIST")
|
|
412
|
+
discardClaim = true;
|
|
413
|
+
}
|
|
414
|
+
if (discardClaim)
|
|
415
|
+
await unlink(claimPath).catch(() => { });
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Drop an entry a read found expired.
|
|
419
|
+
*
|
|
420
|
+
* Queued on the mutation tail so it cannot interleave with this instance's
|
|
421
|
+
* own writes, and so a caller can flush it by awaiting any later operation.
|
|
422
|
+
*/
|
|
423
|
+
expireEntry(key) {
|
|
424
|
+
return this.withMutation(async () => {
|
|
425
|
+
await this.removeExpiredEntryFile(await this.filePath(key));
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
async pruneExpiredEntries() {
|
|
429
|
+
const { opendir } = await fsPromises;
|
|
430
|
+
const directory = await opendir(this.dir);
|
|
431
|
+
let scanned = 0;
|
|
432
|
+
let eligible = 0;
|
|
433
|
+
let processed = 0;
|
|
434
|
+
for await (const entry of directory) {
|
|
435
|
+
scanned++;
|
|
436
|
+
if (scanned > MAX_DIRECTORY_SCAN_ENTRIES)
|
|
437
|
+
break;
|
|
438
|
+
if (!entry.isFile() || !CACHE_FILE_PATTERN.test(entry.name))
|
|
439
|
+
continue;
|
|
440
|
+
if (eligible++ < this.expiryPruneOffset)
|
|
441
|
+
continue;
|
|
442
|
+
if (processed >= EXPIRY_PRUNE_BATCH_SIZE)
|
|
443
|
+
break;
|
|
444
|
+
processed++;
|
|
445
|
+
const filePath = join(this.dir, entry.name);
|
|
446
|
+
try {
|
|
447
|
+
const envelope = await this.readFramedFile(filePath, undefined, undefined, false);
|
|
448
|
+
if (envelope.expiresAt !== undefined && Date.now() >= envelope.expiresAt) {
|
|
449
|
+
await this.removeExpiredEntryFile(filePath);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
// Cache files are disposable and may be replaced by another process.
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
this.expiryPruneOffset = processed < EXPIRY_PRUNE_BATCH_SIZE
|
|
457
|
+
? 0
|
|
458
|
+
: this.expiryPruneOffset + processed;
|
|
459
|
+
}
|
|
460
|
+
async maybePruneExpiredEntries() {
|
|
461
|
+
if (this.writesUntilExpiryPrune > 0) {
|
|
462
|
+
this.writesUntilExpiryPrune--;
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
this.writesUntilExpiryPrune = EXPIRY_PRUNE_WRITE_INTERVAL - 1;
|
|
466
|
+
await this.pruneExpiredEntries();
|
|
467
|
+
}
|
|
365
468
|
async get(key) {
|
|
366
469
|
try {
|
|
367
470
|
await this.mutationTail;
|
|
@@ -380,7 +483,7 @@ export class DiskCacheBackend {
|
|
|
380
483
|
return null;
|
|
381
484
|
}
|
|
382
485
|
if (envelope.expiresAt !== undefined && Date.now() >= envelope.expiresAt) {
|
|
383
|
-
this.
|
|
486
|
+
this.expireEntry(key).catch(async (cleanupError) => {
|
|
384
487
|
logger.debug("[DiskCache] Expired entry cleanup failed", {
|
|
385
488
|
keyDigest: await logKeyDigest(key),
|
|
386
489
|
error: cleanupError instanceof Error ? cleanupError.message : String(cleanupError),
|
|
@@ -409,7 +512,7 @@ export class DiskCacheBackend {
|
|
|
409
512
|
if (!envelope || envelope.key !== key)
|
|
410
513
|
return null;
|
|
411
514
|
if (envelope.expiresAt !== undefined && Date.now() >= envelope.expiresAt) {
|
|
412
|
-
void this.
|
|
515
|
+
void this.expireEntry(key);
|
|
413
516
|
return null;
|
|
414
517
|
}
|
|
415
518
|
if (envelope.value === undefined)
|
|
@@ -470,6 +573,8 @@ export class DiskCacheBackend {
|
|
|
470
573
|
const { writeFile, rename, unlink } = await fsPromises;
|
|
471
574
|
try {
|
|
472
575
|
await writeFile(tmpPath, content, { flag: "wx", mode: 0o600 });
|
|
576
|
+
// This atomic replacement is also the commit point used by expiry
|
|
577
|
+
// pruning. The pruner claims and revalidates whichever entry wins it.
|
|
473
578
|
await rename(tmpPath, filePath);
|
|
474
579
|
}
|
|
475
580
|
catch (error) {
|
|
@@ -480,6 +585,11 @@ export class DiskCacheBackend {
|
|
|
480
585
|
});
|
|
481
586
|
throw error;
|
|
482
587
|
}
|
|
588
|
+
await this.maybePruneExpiredEntries().catch((error) => {
|
|
589
|
+
logger.debug("[DiskCache] Expired entry pruning failed", {
|
|
590
|
+
error: error instanceof Error ? error.message : String(error),
|
|
591
|
+
});
|
|
592
|
+
});
|
|
483
593
|
});
|
|
484
594
|
}
|
|
485
595
|
async del(key) {
|
|
@@ -10,9 +10,38 @@ export interface CacheBackendConfig {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function isApiCacheAvailable(): boolean;
|
|
12
12
|
export declare function isDiskCacheConfigured(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Whether a local dev server must keep compiled code on disk.
|
|
15
|
+
*
|
|
16
|
+
* A local dev server has no hosted API cache and no Redis, so its code caches
|
|
17
|
+
* live in memory and every restart recompiles the whole import tree. The disk
|
|
18
|
+
* backend keeps that work under the project cache directory, so a restart
|
|
19
|
+
* stays warm with no setup.
|
|
20
|
+
*
|
|
21
|
+
* This never changes a hosted or production runtime: the API and Redis
|
|
22
|
+
* backends are resolved first, an explicit `VF_CACHE_BACKEND` always wins, and
|
|
23
|
+
* anything other than a development environment keeps its current backend.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isLocalDevDiskCacheEnabled(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Whether this runtime has a cache that outlives the process.
|
|
28
|
+
*
|
|
29
|
+
* Servers use this to decide whether to run the distributed-cache
|
|
30
|
+
* initializers at startup. Without initialization the SSR module cache stays
|
|
31
|
+
* disabled and the loader skips both reads and writes, so a gate that only
|
|
32
|
+
* checks the explicit disk configuration leaves the local dev cache inert.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isPersistentLocalCacheEnabled(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Backend preference for caches that hold compiled code.
|
|
37
|
+
*
|
|
38
|
+
* Returns `undefined` outside local dev so the normal API, Redis, disk, memory
|
|
39
|
+
* resolution order applies unchanged.
|
|
40
|
+
*/
|
|
41
|
+
export declare function localDevCodeCacheBackend(): CacheBackendConfig["preferredBackend"];
|
|
13
42
|
export declare function createCacheBackend(config?: CacheBackendConfig): Promise<CacheBackend>;
|
|
14
43
|
export declare function isDistributedBackend(backend: CacheBackend): boolean;
|
|
15
|
-
export declare function createDistributedCacheAccessor(factory: () => Promise<CacheBackend>, name: string): () => Promise<CacheBackend | null>;
|
|
44
|
+
export declare function createDistributedCacheAccessor(factory: () => Promise<CacheBackend>, name: string, getScopeKey?: () => string): () => Promise<CacheBackend | null>;
|
|
16
45
|
export declare const CacheBackends: {
|
|
17
46
|
transform: () => Promise<CacheBackend>;
|
|
18
47
|
file: () => Promise<CacheBackend>;
|
|
@@ -41,6 +70,6 @@ export declare const CacheBackends: {
|
|
|
41
70
|
* Create a distributed cache accessor that returns a TokenizingCacheGateway.
|
|
42
71
|
* This wraps createDistributedCacheAccessor with automatic gateway creation.
|
|
43
72
|
*/
|
|
44
|
-
export declare function createDistributedCodeCacheAccessor(factory: () => Promise<CacheBackend>, name: string): () => Promise<TokenizingCacheGateway | null>;
|
|
73
|
+
export declare function createDistributedCodeCacheAccessor(factory: () => Promise<CacheBackend>, name: string, getScopeKey?: () => string): () => Promise<TokenizingCacheGateway | null>;
|
|
45
74
|
export { createTokenizingGateway };
|
|
46
75
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/src/cache/backends/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/src/cache/backends/factory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAWlC,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAGpD;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,CASjF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiDzF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAEnE;AAWD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACpC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,MAAM,GACzB,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0DpC;AAED,eAAO,MAAM,aAAa;;;;;;;;;IAgBxB;;;;;;;;;;;;OAYG;sBAEK,MAAM,WACJ,kBAAkB,KACzB,OAAO,CAAC,sBAAsB,CAAC;CAInC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACpC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,MAAM,GACzB,MAAM,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAQ9C;AAGD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|