forgeos 0.1.0-alpha.0 → 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +9 -1
- package/AGENTS.md +6 -1
- package/CHANGELOG.md +30 -0
- package/CONTRIBUTING.md +22 -1
- package/README.md +30 -3
- package/bin/forge.mjs +4 -3
- package/package.json +3 -1
- package/packages/eslint-plugin-forge/index.ts +15 -15
- package/packages/eslint-plugin-forge/package.json +10 -10
- package/packages/eslint-plugin-forge/src/check-source.ts +95 -95
- package/packages/eslint-plugin-forge/src/load-artifacts.ts +24 -24
- package/packages/eslint-plugin-forge/src/rule-no-forge-guard-violation.ts +93 -93
- package/src/forge/_generated/actionSubscriptions.json +2 -2
- package/src/forge/_generated/actionSubscriptions.ts +3 -3
- package/src/forge/_generated/agentAdapterManifest.json +2 -2
- package/src/forge/_generated/agentAdapterManifest.ts +3 -3
- package/src/forge/_generated/agentContract.json +2 -2
- package/src/forge/_generated/agentContract.ts +6786 -2
- package/src/forge/_generated/agentQuickstart.md +1 -1
- package/src/forge/_generated/aiContext.ts +1 -1
- package/src/forge/_generated/aiModels.json +1 -1
- package/src/forge/_generated/aiModels.ts +1 -1
- package/src/forge/_generated/aiProviders.json +1 -1
- package/src/forge/_generated/aiProviders.ts +1 -1
- package/src/forge/_generated/aiRegistry.json +2 -2
- package/src/forge/_generated/aiRegistry.ts +3 -3
- package/src/forge/_generated/api.json +2 -2
- package/src/forge/_generated/api.ts +1 -1
- package/src/forge/_generated/appGraph.json +2 -2
- package/src/forge/_generated/appGraph.ts +1297 -1141
- package/src/forge/_generated/appMap.md +1 -1
- package/src/forge/_generated/artifactManifest.json +2 -2
- package/src/forge/_generated/artifactManifest.ts +2 -2
- package/src/forge/_generated/authClaims.json +1 -1
- package/src/forge/_generated/authClaims.ts +1 -1
- package/src/forge/_generated/authConfig.json +1 -1
- package/src/forge/_generated/authConfig.ts +1 -1
- package/src/forge/_generated/authContext.ts +1 -1
- package/src/forge/_generated/authRegistry.json +1 -1
- package/src/forge/_generated/authRegistry.ts +1 -1
- package/src/forge/_generated/buildInfo.json +2 -2
- package/src/forge/_generated/buildInfo.ts +4 -4
- package/src/forge/_generated/capabilityMap.json +2 -2
- package/src/forge/_generated/capabilityMap.md +1 -1
- package/src/forge/_generated/capabilityMap.ts +2 -2
- package/src/forge/_generated/client.ts +1 -1
- package/src/forge/_generated/clientApi.ts +1 -1
- package/src/forge/_generated/clientManifest.json +2 -2
- package/src/forge/_generated/clientManifest.ts +3 -3
- package/src/forge/_generated/clientTypes.ts +1 -1
- package/src/forge/_generated/configRegistry.json +1 -1
- package/src/forge/_generated/configRegistry.ts +1 -1
- package/src/forge/_generated/dataGraph.json +2 -2
- package/src/forge/_generated/dataGraph.ts +3 -3
- package/src/forge/_generated/db.json +1 -1
- package/src/forge/_generated/db.ts +1 -1
- package/src/forge/_generated/dbSecurityManifest.json +1 -1
- package/src/forge/_generated/dbSecurityManifest.ts +1 -1
- package/src/forge/_generated/dbSessionContext.json +1 -1
- package/src/forge/_generated/dbSessionContext.ts +1 -1
- package/src/forge/_generated/deployManifest.json +2 -2
- package/src/forge/_generated/deployManifest.ts +7 -7
- package/src/forge/_generated/devManifest.json +2 -2
- package/src/forge/_generated/devManifest.ts +3 -3
- package/src/forge/_generated/envSchema.json +1 -1
- package/src/forge/_generated/envSchema.ts +1 -1
- package/src/forge/_generated/frontendGraph.json +1 -1
- package/src/forge/_generated/frontendGraph.ts +1 -1
- package/src/forge/_generated/importGuards.json +2 -2
- package/src/forge/_generated/importGuards.ts +35 -1
- package/src/forge/_generated/index.ts +1 -1
- package/src/forge/_generated/liveProductionManifest.json +1 -1
- package/src/forge/_generated/liveProductionManifest.ts +1 -1
- package/src/forge/_generated/liveProtocol.json +1 -1
- package/src/forge/_generated/liveProtocol.ts +1 -1
- package/src/forge/_generated/liveQueryRegistry.json +2 -2
- package/src/forge/_generated/liveQueryRegistry.ts +3 -3
- package/src/forge/_generated/liveTransportConfig.json +1 -1
- package/src/forge/_generated/liveTransportConfig.ts +1 -1
- package/src/forge/_generated/makeRegistry.json +2 -2
- package/src/forge/_generated/makeRegistry.ts +2 -2
- package/src/forge/_generated/makeTemplates.json +1 -1
- package/src/forge/_generated/makeTemplates.ts +1 -1
- package/src/forge/_generated/mockMap.json +1 -1
- package/src/forge/_generated/mockMap.ts +1 -1
- package/src/forge/_generated/operationPlaybooks.md +7 -5
- package/src/forge/_generated/packageGraph.json +2 -2
- package/src/forge/_generated/packageGraph.ts +90964 -14284
- package/src/forge/_generated/packageUpgradeRegistry.json +2 -2
- package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
- package/src/forge/_generated/permissionMatrix.json +2 -2
- package/src/forge/_generated/permissionMatrix.ts +3 -3
- package/src/forge/_generated/policyRegistry.json +2 -2
- package/src/forge/_generated/policyRegistry.ts +3 -3
- package/src/forge/_generated/queryRegistry.json +2 -2
- package/src/forge/_generated/queryRegistry.ts +3 -3
- package/src/forge/_generated/react.d.ts +1 -1
- package/src/forge/_generated/react.ts +1 -1
- package/src/forge/_generated/reactManifest.json +2 -2
- package/src/forge/_generated/reactManifest.ts +3 -3
- package/src/forge/_generated/releaseManifest.json +2 -2
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/_generated/rlsPolicies.json +1 -1
- package/src/forge/_generated/rlsPolicies.sql +1 -1
- package/src/forge/_generated/rlsPolicies.ts +1 -1
- package/src/forge/_generated/runtimeGraph.json +2 -2
- package/src/forge/_generated/runtimeGraph.ts +3 -3
- package/src/forge/_generated/runtimeMatrix.json +2 -2
- package/src/forge/_generated/runtimeMatrix.ts +106177 -7917
- package/src/forge/_generated/runtimeRegistry.ts +1 -1
- package/src/forge/_generated/runtimeRules.md +1 -1
- package/src/forge/_generated/secretRegistry.json +1 -1
- package/src/forge/_generated/secretRegistry.ts +1 -1
- package/src/forge/_generated/secretsContext.ts +1 -1
- package/src/forge/_generated/serverApi.ts +1 -1
- package/src/forge/_generated/sourceMapManifest.json +2 -2
- package/src/forge/_generated/sourceMapManifest.ts +2 -2
- package/src/forge/_generated/sqlPlan.json +1 -1
- package/src/forge/_generated/sqlPlan.ts +1 -1
- package/src/forge/_generated/subscriptionManifest.json +2 -2
- package/src/forge/_generated/subscriptionManifest.ts +3 -3
- package/src/forge/_generated/symbolicationManifest.json +2 -2
- package/src/forge/_generated/symbolicationManifest.ts +2 -2
- package/src/forge/_generated/telemetryRegistry.json +2 -2
- package/src/forge/_generated/telemetryRegistry.ts +3 -3
- package/src/forge/_generated/telemetrySinks.json +2 -2
- package/src/forge/_generated/telemetrySinks.ts +2 -2
- package/src/forge/_generated/tenantScope.json +2 -2
- package/src/forge/_generated/tenantScope.ts +3 -3
- package/src/forge/_generated/testGraph.json +2 -2
- package/src/forge/_generated/testGraph.ts +129 -75
- package/src/forge/_generated/testPlanRegistry.json +2 -2
- package/src/forge/_generated/testPlanRegistry.ts +2 -2
- package/src/forge/_generated/uiRoutes.json +1 -1
- package/src/forge/_generated/uiRoutes.ts +1 -1
- package/src/forge/_generated/uiScenarios.json +1 -1
- package/src/forge/_generated/uiScenarios.ts +1 -1
- package/src/forge/_generated/uiTestManifest.json +2 -2
- package/src/forge/_generated/uiTestManifest.ts +2 -2
- package/src/forge/_generated/workflowRegistry.json +2 -2
- package/src/forge/_generated/workflowRegistry.ts +3 -3
- package/src/forge/_generated/workflowSubscriptions.json +2 -2
- package/src/forge/_generated/workflowSubscriptions.ts +3 -3
- package/src/forge/cli/commands.ts +861 -861
- package/src/forge/cli/deps.ts +178 -11
- package/src/forge/cli/dev.ts +32 -5
- package/src/forge/cli/index.ts +7 -7
- package/src/forge/cli/main.ts +54 -54
- package/src/forge/cli/new.ts +29 -1
- package/src/forge/cli/output.ts +97 -97
- package/src/forge/cli/parse.ts +679 -673
- package/src/forge/cli/version.ts +1 -1
- package/src/forge/compiler/agent-contract/build.ts +28 -0
- package/src/forge/compiler/agent-contract/types.ts +16 -0
- package/src/forge/compiler/app-graph/build.ts +112 -112
- package/src/forge/compiler/app-graph/classify.ts +10 -10
- package/src/forge/compiler/app-graph/dup-symbol.ts +29 -29
- package/src/forge/compiler/app-graph/extract.ts +123 -123
- package/src/forge/compiler/app-graph/forge-apis.ts +29 -29
- package/src/forge/compiler/app-graph/index.ts +11 -11
- package/src/forge/compiler/app-graph/module-graph.ts +316 -316
- package/src/forge/compiler/app-graph/parser.ts +119 -119
- package/src/forge/compiler/app-graph/symbols.ts +48 -48
- package/src/forge/compiler/app-graph/tsconfig-hash.ts +62 -62
- package/src/forge/compiler/app-graph/types.ts +43 -43
- package/src/forge/compiler/app-graph/versions.ts +14 -14
- package/src/forge/compiler/cache/index.ts +17 -17
- package/src/forge/compiler/cache/key.ts +46 -46
- package/src/forge/compiler/cache/scheduler.ts +72 -72
- package/src/forge/compiler/cache/store.ts +78 -78
- package/src/forge/compiler/classifier/capabilities.ts +78 -78
- package/src/forge/compiler/classifier/classify.ts +113 -113
- package/src/forge/compiler/classifier/contexts.ts +188 -188
- package/src/forge/compiler/classifier/index.ts +18 -18
- package/src/forge/compiler/classifier/runtime-matrix.ts +45 -45
- package/src/forge/compiler/classifier/secrets.ts +41 -41
- package/src/forge/compiler/classifier/signals.ts +129 -129
- package/src/forge/compiler/diagnostics/codes.ts +125 -120
- package/src/forge/compiler/diagnostics/create.ts +87 -87
- package/src/forge/compiler/diagnostics/index.ts +41 -41
- package/src/forge/compiler/emitter/artifact-kind.ts +14 -14
- package/src/forge/compiler/emitter/barrel.ts +38 -38
- package/src/forge/compiler/emitter/constants.ts +7 -7
- package/src/forge/compiler/emitter/emit.ts +234 -237
- package/src/forge/compiler/emitter/index.ts +24 -24
- package/src/forge/compiler/emitter/lock.ts +61 -61
- package/src/forge/compiler/emitter/render.ts +73 -73
- package/src/forge/compiler/guards/artifacts.ts +96 -96
- package/src/forge/compiler/guards/check-import-guards.ts +106 -106
- package/src/forge/compiler/guards/index.ts +11 -11
- package/src/forge/compiler/guards/propagate-contexts.ts +57 -57
- package/src/forge/compiler/index.ts +17 -17
- package/src/forge/compiler/integration/add.ts +493 -493
- package/src/forge/compiler/integration/index.ts +17 -17
- package/src/forge/compiler/integration/plan.ts +279 -279
- package/src/forge/compiler/integration/render.ts +189 -189
- package/src/forge/compiler/integration/snapshot.ts +52 -52
- package/src/forge/compiler/orchestrator/discover.ts +214 -214
- package/src/forge/compiler/orchestrator/guards.ts +5 -5
- package/src/forge/compiler/orchestrator/index.ts +27 -27
- package/src/forge/compiler/orchestrator/manifest.ts +69 -69
- package/src/forge/compiler/orchestrator/orphans.ts +51 -51
- package/src/forge/compiler/orchestrator/plan.ts +804 -804
- package/src/forge/compiler/orchestrator/run.ts +178 -178
- package/src/forge/compiler/orchestrator/serialize.ts +859 -859
- package/src/forge/compiler/orchestrator/types.ts +23 -23
- package/src/forge/compiler/orchestrator/verify.ts +35 -35
- package/src/forge/compiler/package-graph/capabilities-stub.ts +33 -33
- package/src/forge/compiler/package-graph/checksum.ts +107 -97
- package/src/forge/compiler/package-graph/compiler.ts +444 -363
- package/src/forge/compiler/package-graph/constants.ts +4 -4
- package/src/forge/compiler/package-graph/exports-discovery.ts +91 -84
- package/src/forge/compiler/package-graph/extract-dts.ts +32 -32
- package/src/forge/compiler/package-graph/index.ts +24 -24
- package/src/forge/compiler/package-graph/jsdoc.ts +50 -50
- package/src/forge/compiler/package-graph/oracle.ts +326 -0
- package/src/forge/compiler/package-graph/read-file.ts +21 -21
- package/src/forge/compiler/package-graph/resolve.ts +131 -127
- package/src/forge/compiler/package-manager/adapter.ts +232 -232
- package/src/forge/compiler/package-manager/commands.ts +47 -47
- package/src/forge/compiler/package-manager/detect.ts +65 -65
- package/src/forge/compiler/package-manager/executor.ts +29 -29
- package/src/forge/compiler/package-manager/index.ts +22 -22
- package/src/forge/compiler/package-manager/parse-spec.ts +16 -16
- package/src/forge/compiler/package-manager/version.ts +20 -20
- package/src/forge/compiler/primitives/compare.ts +26 -26
- package/src/forge/compiler/primitives/hash.ts +42 -33
- package/src/forge/compiler/primitives/header.ts +43 -43
- package/src/forge/compiler/primitives/index.ts +45 -45
- package/src/forge/compiler/primitives/paths.ts +24 -24
- package/src/forge/compiler/primitives/serialize.ts +66 -66
- package/src/forge/compiler/primitives/sort.ts +87 -87
- package/src/forge/compiler/recipes/definitions.ts +269 -269
- package/src/forge/compiler/recipes/helpers.ts +37 -37
- package/src/forge/compiler/recipes/index.ts +21 -21
- package/src/forge/compiler/recipes/registry.ts +87 -87
- package/src/forge/compiler/sandbox/artifact-sanitize.ts +26 -26
- package/src/forge/compiler/sandbox/backends/child.ts +123 -123
- package/src/forge/compiler/sandbox/backends/docker.ts +173 -173
- package/src/forge/compiler/sandbox/index.ts +51 -51
- package/src/forge/compiler/sandbox/inspect.ts +143 -143
- package/src/forge/compiler/sandbox/inspector-entry.ts +115 -115
- package/src/forge/compiler/sandbox/limits.ts +31 -31
- package/src/forge/compiler/sandbox/scrub-env.ts +60 -60
- package/src/forge/compiler/sandbox/secret-scan.ts +54 -54
- package/src/forge/compiler/sandbox/serialize.ts +106 -106
- package/src/forge/compiler/sandbox/types.ts +7 -7
- package/src/forge/compiler/types/app-graph.ts +71 -71
- package/src/forge/compiler/types/capability.ts +29 -29
- package/src/forge/compiler/types/classification.ts +9 -9
- package/src/forge/compiler/types/cli.ts +85 -85
- package/src/forge/compiler/types/diagnostic.ts +2 -2
- package/src/forge/compiler/types/emit.ts +25 -25
- package/src/forge/compiler/types/import-guards.ts +19 -19
- package/src/forge/compiler/types/index.ts +98 -98
- package/src/forge/compiler/types/integration.ts +25 -25
- package/src/forge/compiler/types/json.ts +3 -3
- package/src/forge/compiler/types/lock.ts +37 -37
- package/src/forge/compiler/types/package-graph.ts +122 -77
- package/src/forge/compiler/types/runtime-matrix.ts +16 -16
- package/src/forge/compiler/types/runtime.ts +30 -30
- package/src/forge/compiler/types/sandbox.ts +24 -24
- package/src/forge/dev/server.ts +16 -2
- package/src/forge/refactor/index.ts +10 -2
- package/src/forge/refactor/runtime-rename.ts +598 -0
- package/src/forge/runtime/executor.ts +3 -2
- package/src/forge/runtime/live/live-query-runner.ts +2 -1
- package/src/forge/runtime/outbox/process.ts +2 -1
- package/src/forge/runtime/query/run-query.ts +2 -1
- package/src/forge/runtime/runner/run-entry.ts +2 -1
- package/src/forge/runtime/telemetry/sinks/posthog.ts +4 -5
- package/src/forge/runtime/telemetry/sinks/sentry.ts +4 -5
- package/src/forge/runtime/workflows/resolve-step.ts +2 -1
- package/src/forge/version.ts +3 -0
- package/templates/b2b-support-web/src/actions/captureTicketCreated.ts +7 -2
- package/templates/b2b-support-web/src/commands/closeTicket.ts +6 -1
- package/templates/b2b-support-web/src/commands/createTicket.ts +8 -2
- package/templates/b2b-support-web/src/queries/getTicket.ts +8 -1
- package/templates/b2b-support-web/web/components/CreateTicketForm.tsx +1 -2
- package/templates/b2b-support-web/web/components/PolicyDeniedDemo.tsx +1 -2
- package/templates/b2b-support-web/web/components/TicketList.tsx +1 -2
- package/templates/b2b-support-web/web/components/TraceDetails.tsx +1 -1
- package/templates/b2b-support-web/web/lib/forge.ts +1 -0
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
import Parser from "tree-sitter";
|
|
2
|
-
import TypeScript from "tree-sitter-typescript";
|
|
3
|
-
import { createDiagnostic } from "../diagnostics/create.ts";
|
|
4
|
-
import type { Diagnostic } from "../types/diagnostic.ts";
|
|
5
|
-
import type { ForgeSymbol, SourceFile } from "../types/app-graph.ts";
|
|
6
|
-
import { normalizePath } from "../primitives/paths.ts";
|
|
7
|
-
import { extractSymbolsFromTree } from "./extract.ts";
|
|
8
|
-
import type { ParseInvalidationKey, RawSymbol } from "./types.ts";
|
|
9
|
-
import { parseInvalidationKeyEquals } from "./types.ts";
|
|
10
|
-
|
|
11
|
-
const tsParser = new Parser();
|
|
12
|
-
tsParser.setLanguage(TypeScript.typescript as unknown as Parser.Language);
|
|
13
|
-
|
|
14
|
-
const tsxParser = new Parser();
|
|
15
|
-
tsxParser.setLanguage(TypeScript.tsx as unknown as Parser.Language);
|
|
16
|
-
|
|
17
|
-
function parserForFile(path: string): Parser {
|
|
18
|
-
return path.endsWith(".tsx") ? tsxParser : tsParser;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function priorSymbolsToRaw(symbols: ForgeSymbol[]): RawSymbol[] {
|
|
22
|
-
return symbols.map((symbol) => ({
|
|
23
|
-
kind: symbol.kind,
|
|
24
|
-
name: symbol.name,
|
|
25
|
-
qualifiedName: symbol.qualifiedName,
|
|
26
|
-
file: symbol.file,
|
|
27
|
-
span: symbol.span,
|
|
28
|
-
exportPath:
|
|
29
|
-
typeof symbol.meta.exportPath === "string" ? symbol.meta.exportPath : "",
|
|
30
|
-
sourceSlice:
|
|
31
|
-
typeof symbol.meta.sourceSlice === "string" ? symbol.meta.sourceSlice : "",
|
|
32
|
-
}));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function groupPriorSymbolsByFile(
|
|
36
|
-
priorSymbols: ForgeSymbol[],
|
|
37
|
-
): Map<string, ForgeSymbol[]> {
|
|
38
|
-
const byFile = new Map<string, ForgeSymbol[]>();
|
|
39
|
-
for (const symbol of priorSymbols) {
|
|
40
|
-
const list = byFile.get(symbol.file) ?? [];
|
|
41
|
-
list.push(symbol);
|
|
42
|
-
byFile.set(symbol.file, list);
|
|
43
|
-
}
|
|
44
|
-
return byFile;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function priorFileContentHash(
|
|
48
|
-
priorSymbols: ForgeSymbol[],
|
|
49
|
-
file: string,
|
|
50
|
-
): string | undefined {
|
|
51
|
-
const match = priorSymbols.find((symbol) => symbol.file === file);
|
|
52
|
-
if (!match) {
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
|
-
// All symbols from the same file share the same slice hash basis; use meta when present.
|
|
56
|
-
const fromMeta = match.meta.fileContentHash;
|
|
57
|
-
return typeof fromMeta === "string" ? fromMeta : undefined;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface IncrementalParseResult {
|
|
61
|
-
symbols: RawSymbol[];
|
|
62
|
-
diagnostics: Diagnostic[];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function incrementalParse(
|
|
66
|
-
sources: SourceFile[],
|
|
67
|
-
priorSymbols: ForgeSymbol[] | undefined,
|
|
68
|
-
priorInvalidation: ParseInvalidationKey | undefined,
|
|
69
|
-
currentInvalidation: ParseInvalidationKey,
|
|
70
|
-
): IncrementalParseResult {
|
|
71
|
-
const diagnostics: Diagnostic[] = [];
|
|
72
|
-
const allSymbols: RawSymbol[] = [];
|
|
73
|
-
const globalInvalidated =
|
|
74
|
-
priorInvalidation === undefined ||
|
|
75
|
-
!parseInvalidationKeyEquals(priorInvalidation, currentInvalidation);
|
|
76
|
-
|
|
77
|
-
const priorByFile = priorSymbols
|
|
78
|
-
? groupPriorSymbolsByFile(priorSymbols)
|
|
79
|
-
: new Map<string, ForgeSymbol[]>();
|
|
80
|
-
|
|
81
|
-
for (const source of sources) {
|
|
82
|
-
const normalizedFile = normalizePath(source.path);
|
|
83
|
-
const priorForFile = priorByFile.get(normalizedFile);
|
|
84
|
-
const priorHash = priorSymbols
|
|
85
|
-
? priorFileContentHash(priorSymbols, normalizedFile)
|
|
86
|
-
: undefined;
|
|
87
|
-
|
|
88
|
-
const fileUnchanged =
|
|
89
|
-
!globalInvalidated &&
|
|
90
|
-
priorForFile !== undefined &&
|
|
91
|
-
priorHash === source.contentHash;
|
|
92
|
-
|
|
93
|
-
if (fileUnchanged) {
|
|
94
|
-
allSymbols.push(...priorSymbolsToRaw(priorForFile));
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
try {
|
|
99
|
-
const tree = parserForFile(normalizedFile).parse(source.text);
|
|
100
|
-
const extracted = extractSymbolsFromTree(
|
|
101
|
-
tree.rootNode,
|
|
102
|
-
normalizedFile,
|
|
103
|
-
source.text,
|
|
104
|
-
);
|
|
105
|
-
allSymbols.push(...extracted);
|
|
106
|
-
} catch {
|
|
107
|
-
diagnostics.push(
|
|
108
|
-
createDiagnostic({
|
|
109
|
-
severity: "warning",
|
|
110
|
-
code: "FORGE_UNPARSEABLE_FILE",
|
|
111
|
-
message: `cannot parse source file: ${normalizedFile}`,
|
|
112
|
-
file: normalizedFile,
|
|
113
|
-
}),
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return { symbols: allSymbols, diagnostics };
|
|
119
|
-
}
|
|
1
|
+
import Parser from "tree-sitter";
|
|
2
|
+
import TypeScript from "tree-sitter-typescript";
|
|
3
|
+
import { createDiagnostic } from "../diagnostics/create.ts";
|
|
4
|
+
import type { Diagnostic } from "../types/diagnostic.ts";
|
|
5
|
+
import type { ForgeSymbol, SourceFile } from "../types/app-graph.ts";
|
|
6
|
+
import { normalizePath } from "../primitives/paths.ts";
|
|
7
|
+
import { extractSymbolsFromTree } from "./extract.ts";
|
|
8
|
+
import type { ParseInvalidationKey, RawSymbol } from "./types.ts";
|
|
9
|
+
import { parseInvalidationKeyEquals } from "./types.ts";
|
|
10
|
+
|
|
11
|
+
const tsParser = new Parser();
|
|
12
|
+
tsParser.setLanguage(TypeScript.typescript as unknown as Parser.Language);
|
|
13
|
+
|
|
14
|
+
const tsxParser = new Parser();
|
|
15
|
+
tsxParser.setLanguage(TypeScript.tsx as unknown as Parser.Language);
|
|
16
|
+
|
|
17
|
+
function parserForFile(path: string): Parser {
|
|
18
|
+
return path.endsWith(".tsx") ? tsxParser : tsParser;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function priorSymbolsToRaw(symbols: ForgeSymbol[]): RawSymbol[] {
|
|
22
|
+
return symbols.map((symbol) => ({
|
|
23
|
+
kind: symbol.kind,
|
|
24
|
+
name: symbol.name,
|
|
25
|
+
qualifiedName: symbol.qualifiedName,
|
|
26
|
+
file: symbol.file,
|
|
27
|
+
span: symbol.span,
|
|
28
|
+
exportPath:
|
|
29
|
+
typeof symbol.meta.exportPath === "string" ? symbol.meta.exportPath : "",
|
|
30
|
+
sourceSlice:
|
|
31
|
+
typeof symbol.meta.sourceSlice === "string" ? symbol.meta.sourceSlice : "",
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function groupPriorSymbolsByFile(
|
|
36
|
+
priorSymbols: ForgeSymbol[],
|
|
37
|
+
): Map<string, ForgeSymbol[]> {
|
|
38
|
+
const byFile = new Map<string, ForgeSymbol[]>();
|
|
39
|
+
for (const symbol of priorSymbols) {
|
|
40
|
+
const list = byFile.get(symbol.file) ?? [];
|
|
41
|
+
list.push(symbol);
|
|
42
|
+
byFile.set(symbol.file, list);
|
|
43
|
+
}
|
|
44
|
+
return byFile;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function priorFileContentHash(
|
|
48
|
+
priorSymbols: ForgeSymbol[],
|
|
49
|
+
file: string,
|
|
50
|
+
): string | undefined {
|
|
51
|
+
const match = priorSymbols.find((symbol) => symbol.file === file);
|
|
52
|
+
if (!match) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
// All symbols from the same file share the same slice hash basis; use meta when present.
|
|
56
|
+
const fromMeta = match.meta.fileContentHash;
|
|
57
|
+
return typeof fromMeta === "string" ? fromMeta : undefined;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface IncrementalParseResult {
|
|
61
|
+
symbols: RawSymbol[];
|
|
62
|
+
diagnostics: Diagnostic[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function incrementalParse(
|
|
66
|
+
sources: SourceFile[],
|
|
67
|
+
priorSymbols: ForgeSymbol[] | undefined,
|
|
68
|
+
priorInvalidation: ParseInvalidationKey | undefined,
|
|
69
|
+
currentInvalidation: ParseInvalidationKey,
|
|
70
|
+
): IncrementalParseResult {
|
|
71
|
+
const diagnostics: Diagnostic[] = [];
|
|
72
|
+
const allSymbols: RawSymbol[] = [];
|
|
73
|
+
const globalInvalidated =
|
|
74
|
+
priorInvalidation === undefined ||
|
|
75
|
+
!parseInvalidationKeyEquals(priorInvalidation, currentInvalidation);
|
|
76
|
+
|
|
77
|
+
const priorByFile = priorSymbols
|
|
78
|
+
? groupPriorSymbolsByFile(priorSymbols)
|
|
79
|
+
: new Map<string, ForgeSymbol[]>();
|
|
80
|
+
|
|
81
|
+
for (const source of sources) {
|
|
82
|
+
const normalizedFile = normalizePath(source.path);
|
|
83
|
+
const priorForFile = priorByFile.get(normalizedFile);
|
|
84
|
+
const priorHash = priorSymbols
|
|
85
|
+
? priorFileContentHash(priorSymbols, normalizedFile)
|
|
86
|
+
: undefined;
|
|
87
|
+
|
|
88
|
+
const fileUnchanged =
|
|
89
|
+
!globalInvalidated &&
|
|
90
|
+
priorForFile !== undefined &&
|
|
91
|
+
priorHash === source.contentHash;
|
|
92
|
+
|
|
93
|
+
if (fileUnchanged) {
|
|
94
|
+
allSymbols.push(...priorSymbolsToRaw(priorForFile));
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
try {
|
|
99
|
+
const tree = parserForFile(normalizedFile).parse(source.text);
|
|
100
|
+
const extracted = extractSymbolsFromTree(
|
|
101
|
+
tree.rootNode,
|
|
102
|
+
normalizedFile,
|
|
103
|
+
source.text,
|
|
104
|
+
);
|
|
105
|
+
allSymbols.push(...extracted);
|
|
106
|
+
} catch {
|
|
107
|
+
diagnostics.push(
|
|
108
|
+
createDiagnostic({
|
|
109
|
+
severity: "warning",
|
|
110
|
+
code: "FORGE_UNPARSEABLE_FILE",
|
|
111
|
+
message: `cannot parse source file: ${normalizedFile}`,
|
|
112
|
+
file: normalizedFile,
|
|
113
|
+
}),
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return { symbols: allSymbols, diagnostics };
|
|
119
|
+
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { deriveStableSymbolId, hashStable } from "../primitives/hash.ts";
|
|
2
|
-
import type { ForgeSymbol } from "../types/app-graph.ts";
|
|
3
|
-
import type { SourceFile } from "../types/app-graph.ts";
|
|
4
|
-
import type { RawSymbol } from "./types.ts";
|
|
5
|
-
|
|
6
|
-
export function rawToForgeSymbol(
|
|
7
|
-
raw: RawSymbol,
|
|
8
|
-
fileContentHash: string,
|
|
9
|
-
): ForgeSymbol {
|
|
10
|
-
const id = deriveStableSymbolId({
|
|
11
|
-
kind: raw.kind,
|
|
12
|
-
canonicalModulePath: raw.file,
|
|
13
|
-
qualifiedName: raw.qualifiedName,
|
|
14
|
-
exportPath: raw.exportPath,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const slice = raw.sourceSlice || "";
|
|
18
|
-
const contentHash = slice.length > 0 ? hashStable(slice) : fileContentHash;
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
id,
|
|
22
|
-
kind: raw.kind,
|
|
23
|
-
name: raw.name,
|
|
24
|
-
qualifiedName: raw.qualifiedName,
|
|
25
|
-
file: raw.file,
|
|
26
|
-
span: raw.span,
|
|
27
|
-
contentHash,
|
|
28
|
-
meta: {
|
|
29
|
-
exportPath: raw.exportPath,
|
|
30
|
-
fileContentHash,
|
|
31
|
-
...(slice.length > 0 ? { sourceSlice: slice } : {}),
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function buildForgeSymbols(
|
|
37
|
-
rawSymbols: RawSymbol[],
|
|
38
|
-
sources: SourceFile[],
|
|
39
|
-
): ForgeSymbol[] {
|
|
40
|
-
const hashByFile = new Map<string, string>();
|
|
41
|
-
for (const source of sources) {
|
|
42
|
-
hashByFile.set(source.path, source.contentHash);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return rawSymbols.map((raw) =>
|
|
46
|
-
rawToForgeSymbol(raw, hashByFile.get(raw.file) ?? ""),
|
|
47
|
-
);
|
|
48
|
-
}
|
|
1
|
+
import { deriveStableSymbolId, hashStable } from "../primitives/hash.ts";
|
|
2
|
+
import type { ForgeSymbol } from "../types/app-graph.ts";
|
|
3
|
+
import type { SourceFile } from "../types/app-graph.ts";
|
|
4
|
+
import type { RawSymbol } from "./types.ts";
|
|
5
|
+
|
|
6
|
+
export function rawToForgeSymbol(
|
|
7
|
+
raw: RawSymbol,
|
|
8
|
+
fileContentHash: string,
|
|
9
|
+
): ForgeSymbol {
|
|
10
|
+
const id = deriveStableSymbolId({
|
|
11
|
+
kind: raw.kind,
|
|
12
|
+
canonicalModulePath: raw.file,
|
|
13
|
+
qualifiedName: raw.qualifiedName,
|
|
14
|
+
exportPath: raw.exportPath,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const slice = raw.sourceSlice || "";
|
|
18
|
+
const contentHash = slice.length > 0 ? hashStable(slice) : fileContentHash;
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
id,
|
|
22
|
+
kind: raw.kind,
|
|
23
|
+
name: raw.name,
|
|
24
|
+
qualifiedName: raw.qualifiedName,
|
|
25
|
+
file: raw.file,
|
|
26
|
+
span: raw.span,
|
|
27
|
+
contentHash,
|
|
28
|
+
meta: {
|
|
29
|
+
exportPath: raw.exportPath,
|
|
30
|
+
fileContentHash,
|
|
31
|
+
...(slice.length > 0 ? { sourceSlice: slice } : {}),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function buildForgeSymbols(
|
|
37
|
+
rawSymbols: RawSymbol[],
|
|
38
|
+
sources: SourceFile[],
|
|
39
|
+
): ForgeSymbol[] {
|
|
40
|
+
const hashByFile = new Map<string, string>();
|
|
41
|
+
for (const source of sources) {
|
|
42
|
+
hashByFile.set(source.path, source.contentHash);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return rawSymbols.map((raw) =>
|
|
46
|
+
rawToForgeSymbol(raw, hashByFile.get(raw.file) ?? ""),
|
|
47
|
+
);
|
|
48
|
+
}
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
import { canonicalJson } from "../primitives/serialize.ts";
|
|
3
|
-
import { hashStable } from "../primitives/hash.ts";
|
|
4
|
-
|
|
5
|
-
const RELEVANT_COMPILER_OPTIONS: (keyof ts.CompilerOptions)[] = [
|
|
6
|
-
"baseUrl",
|
|
7
|
-
"paths",
|
|
8
|
-
"module",
|
|
9
|
-
"moduleResolution",
|
|
10
|
-
"target",
|
|
11
|
-
"jsx",
|
|
12
|
-
"allowJs",
|
|
13
|
-
"resolveJsonModule",
|
|
14
|
-
"esModuleInterop",
|
|
15
|
-
"strict",
|
|
16
|
-
"rootDir",
|
|
17
|
-
"outDir",
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
export function hashTsCompilerOptions(options: ts.CompilerOptions): string {
|
|
21
|
-
const relevant: Record<string, unknown> = {};
|
|
22
|
-
for (const key of RELEVANT_COMPILER_OPTIONS) {
|
|
23
|
-
const value = options[key];
|
|
24
|
-
if (value !== undefined) {
|
|
25
|
-
relevant[key] = value;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return hashStable(canonicalJson(relevant));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function loadTsconfig(
|
|
32
|
-
workspaceRoot: string,
|
|
33
|
-
tsconfigPath?: string,
|
|
34
|
-
): ts.ParsedCommandLine {
|
|
35
|
-
const configPath =
|
|
36
|
-
tsconfigPath ?? ts.findConfigFile(workspaceRoot, ts.sys.fileExists, "tsconfig.json");
|
|
37
|
-
|
|
38
|
-
if (!configPath) {
|
|
39
|
-
return {
|
|
40
|
-
options: {},
|
|
41
|
-
fileNames: [],
|
|
42
|
-
errors: [],
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const read = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
47
|
-
return ts.parseJsonConfigFileContent(
|
|
48
|
-
read.config,
|
|
49
|
-
ts.sys,
|
|
50
|
-
workspaceRoot,
|
|
51
|
-
undefined,
|
|
52
|
-
configPath,
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function hashTsconfigForWorkspace(
|
|
57
|
-
workspaceRoot: string,
|
|
58
|
-
tsconfigPath?: string,
|
|
59
|
-
): string {
|
|
60
|
-
const parsed = loadTsconfig(workspaceRoot, tsconfigPath);
|
|
61
|
-
return hashTsCompilerOptions(parsed.options);
|
|
62
|
-
}
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { canonicalJson } from "../primitives/serialize.ts";
|
|
3
|
+
import { hashStable } from "../primitives/hash.ts";
|
|
4
|
+
|
|
5
|
+
const RELEVANT_COMPILER_OPTIONS: (keyof ts.CompilerOptions)[] = [
|
|
6
|
+
"baseUrl",
|
|
7
|
+
"paths",
|
|
8
|
+
"module",
|
|
9
|
+
"moduleResolution",
|
|
10
|
+
"target",
|
|
11
|
+
"jsx",
|
|
12
|
+
"allowJs",
|
|
13
|
+
"resolveJsonModule",
|
|
14
|
+
"esModuleInterop",
|
|
15
|
+
"strict",
|
|
16
|
+
"rootDir",
|
|
17
|
+
"outDir",
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export function hashTsCompilerOptions(options: ts.CompilerOptions): string {
|
|
21
|
+
const relevant: Record<string, unknown> = {};
|
|
22
|
+
for (const key of RELEVANT_COMPILER_OPTIONS) {
|
|
23
|
+
const value = options[key];
|
|
24
|
+
if (value !== undefined) {
|
|
25
|
+
relevant[key] = value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return hashStable(canonicalJson(relevant));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function loadTsconfig(
|
|
32
|
+
workspaceRoot: string,
|
|
33
|
+
tsconfigPath?: string,
|
|
34
|
+
): ts.ParsedCommandLine {
|
|
35
|
+
const configPath =
|
|
36
|
+
tsconfigPath ?? ts.findConfigFile(workspaceRoot, ts.sys.fileExists, "tsconfig.json");
|
|
37
|
+
|
|
38
|
+
if (!configPath) {
|
|
39
|
+
return {
|
|
40
|
+
options: {},
|
|
41
|
+
fileNames: [],
|
|
42
|
+
errors: [],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const read = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
47
|
+
return ts.parseJsonConfigFileContent(
|
|
48
|
+
read.config,
|
|
49
|
+
ts.sys,
|
|
50
|
+
workspaceRoot,
|
|
51
|
+
undefined,
|
|
52
|
+
configPath,
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function hashTsconfigForWorkspace(
|
|
57
|
+
workspaceRoot: string,
|
|
58
|
+
tsconfigPath?: string,
|
|
59
|
+
): string {
|
|
60
|
+
const parsed = loadTsconfig(workspaceRoot, tsconfigPath);
|
|
61
|
+
return hashTsCompilerOptions(parsed.options);
|
|
62
|
+
}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import type { ForgeKind } from "../types/app-graph.ts";
|
|
2
|
-
import { APP_GRAPH_ANALYZER_VERSION } from "./versions.ts";
|
|
3
|
-
|
|
4
|
-
/** Symbol extracted from tree-sitter before stable-id assignment. */
|
|
5
|
-
export interface RawSymbol {
|
|
6
|
-
kind: ForgeKind;
|
|
7
|
-
name: string;
|
|
8
|
-
qualifiedName: string;
|
|
9
|
-
file: string;
|
|
10
|
-
span: { start: number; end: number };
|
|
11
|
-
exportPath: string;
|
|
12
|
-
sourceSlice: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** Factors that invalidate cached per-file parse results. */
|
|
16
|
-
export interface ParseInvalidationKey {
|
|
17
|
-
schemaVersion: string;
|
|
18
|
-
grammarVersion: string;
|
|
19
|
-
classifierVersion: string;
|
|
20
|
-
tsconfigHash: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function parseInvalidationKeyEquals(
|
|
24
|
-
a: ParseInvalidationKey,
|
|
25
|
-
b: ParseInvalidationKey,
|
|
26
|
-
): boolean {
|
|
27
|
-
return (
|
|
28
|
-
a.schemaVersion === b.schemaVersion &&
|
|
29
|
-
a.grammarVersion === b.grammarVersion &&
|
|
30
|
-
a.classifierVersion === b.classifierVersion &&
|
|
31
|
-
a.tsconfigHash === b.tsconfigHash
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function buildAnalyzerVersion(key: ParseInvalidationKey): string {
|
|
36
|
-
return [
|
|
37
|
-
APP_GRAPH_ANALYZER_VERSION,
|
|
38
|
-
`schema:${key.schemaVersion}`,
|
|
39
|
-
`grammar:${key.grammarVersion}`,
|
|
40
|
-
`classifier:${key.classifierVersion}`,
|
|
41
|
-
`tsconfig:${key.tsconfigHash}`,
|
|
42
|
-
].join("+");
|
|
43
|
-
}
|
|
1
|
+
import type { ForgeKind } from "../types/app-graph.ts";
|
|
2
|
+
import { APP_GRAPH_ANALYZER_VERSION } from "./versions.ts";
|
|
3
|
+
|
|
4
|
+
/** Symbol extracted from tree-sitter before stable-id assignment. */
|
|
5
|
+
export interface RawSymbol {
|
|
6
|
+
kind: ForgeKind;
|
|
7
|
+
name: string;
|
|
8
|
+
qualifiedName: string;
|
|
9
|
+
file: string;
|
|
10
|
+
span: { start: number; end: number };
|
|
11
|
+
exportPath: string;
|
|
12
|
+
sourceSlice: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Factors that invalidate cached per-file parse results. */
|
|
16
|
+
export interface ParseInvalidationKey {
|
|
17
|
+
schemaVersion: string;
|
|
18
|
+
grammarVersion: string;
|
|
19
|
+
classifierVersion: string;
|
|
20
|
+
tsconfigHash: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function parseInvalidationKeyEquals(
|
|
24
|
+
a: ParseInvalidationKey,
|
|
25
|
+
b: ParseInvalidationKey,
|
|
26
|
+
): boolean {
|
|
27
|
+
return (
|
|
28
|
+
a.schemaVersion === b.schemaVersion &&
|
|
29
|
+
a.grammarVersion === b.grammarVersion &&
|
|
30
|
+
a.classifierVersion === b.classifierVersion &&
|
|
31
|
+
a.tsconfigHash === b.tsconfigHash
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function buildAnalyzerVersion(key: ParseInvalidationKey): string {
|
|
36
|
+
return [
|
|
37
|
+
APP_GRAPH_ANALYZER_VERSION,
|
|
38
|
+
`schema:${key.schemaVersion}`,
|
|
39
|
+
`grammar:${key.grammarVersion}`,
|
|
40
|
+
`classifier:${key.classifierVersion}`,
|
|
41
|
+
`tsconfig:${key.tsconfigHash}`,
|
|
42
|
+
].join("+");
|
|
43
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/** AppGraph model schema version. */
|
|
2
|
-
export const APP_GRAPH_SCHEMA_VERSION = "1.0.0";
|
|
3
|
-
|
|
4
|
-
/** AppGraph analyzer / classifier toolchain version. */
|
|
5
|
-
export const APP_GRAPH_ANALYZER_VERSION = "0.1.0";
|
|
6
|
-
|
|
7
|
-
/** tree-sitter-typescript grammar package version (invalidates parse cache). */
|
|
8
|
-
export const TREE_SITTER_GRAMMAR_VERSION = "0.23.2";
|
|
9
|
-
|
|
10
|
-
/** Forge builder API → ForgeKind classifier version. */
|
|
11
|
-
export const FORGE_CLASSIFIER_VERSION = "0.1.1";
|
|
12
|
-
|
|
13
|
-
/** Generation orchestrator version (recorded on emitted AppGraph). */
|
|
14
|
-
export
|
|
1
|
+
/** AppGraph model schema version. */
|
|
2
|
+
export const APP_GRAPH_SCHEMA_VERSION = "1.0.0";
|
|
3
|
+
|
|
4
|
+
/** AppGraph analyzer / classifier toolchain version. */
|
|
5
|
+
export const APP_GRAPH_ANALYZER_VERSION = "0.1.0";
|
|
6
|
+
|
|
7
|
+
/** tree-sitter-typescript grammar package version (invalidates parse cache). */
|
|
8
|
+
export const TREE_SITTER_GRAMMAR_VERSION = "0.23.2";
|
|
9
|
+
|
|
10
|
+
/** Forge builder API → ForgeKind classifier version. */
|
|
11
|
+
export const FORGE_CLASSIFIER_VERSION = "0.1.1";
|
|
12
|
+
|
|
13
|
+
/** Generation orchestrator version (recorded on emitted AppGraph). */
|
|
14
|
+
export { GENERATOR_VERSION } from "../../version.ts";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export {
|
|
2
|
-
buildPackageCacheKey,
|
|
3
|
-
serializePackageCacheKey,
|
|
4
|
-
fingerprintPackageCacheKey,
|
|
5
|
-
cacheKeysEqual,
|
|
6
|
-
lockfileHashAffectsCache,
|
|
7
|
-
} from "./key.ts";
|
|
8
|
-
export {
|
|
9
|
-
PackageCacheStore,
|
|
10
|
-
forgeCacheDiscardedMessage,
|
|
11
|
-
} from "./store.ts";
|
|
12
|
-
export type { CacheEntry } from "./store.ts";
|
|
13
|
-
export {
|
|
14
|
-
runWithConcurrency,
|
|
15
|
-
runWithConcurrencyTracked,
|
|
16
|
-
ConcurrencyTracker,
|
|
17
|
-
} from "./scheduler.ts";
|
|
1
|
+
export {
|
|
2
|
+
buildPackageCacheKey,
|
|
3
|
+
serializePackageCacheKey,
|
|
4
|
+
fingerprintPackageCacheKey,
|
|
5
|
+
cacheKeysEqual,
|
|
6
|
+
lockfileHashAffectsCache,
|
|
7
|
+
} from "./key.ts";
|
|
8
|
+
export {
|
|
9
|
+
PackageCacheStore,
|
|
10
|
+
forgeCacheDiscardedMessage,
|
|
11
|
+
} from "./store.ts";
|
|
12
|
+
export type { CacheEntry } from "./store.ts";
|
|
13
|
+
export {
|
|
14
|
+
runWithConcurrency,
|
|
15
|
+
runWithConcurrencyTracked,
|
|
16
|
+
ConcurrencyTracker,
|
|
17
|
+
} from "./scheduler.ts";
|