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.
Files changed (283) hide show
  1. package/.npmignore +9 -1
  2. package/AGENTS.md +6 -1
  3. package/CHANGELOG.md +30 -0
  4. package/CONTRIBUTING.md +22 -1
  5. package/README.md +30 -3
  6. package/bin/forge.mjs +4 -3
  7. package/package.json +3 -1
  8. package/packages/eslint-plugin-forge/index.ts +15 -15
  9. package/packages/eslint-plugin-forge/package.json +10 -10
  10. package/packages/eslint-plugin-forge/src/check-source.ts +95 -95
  11. package/packages/eslint-plugin-forge/src/load-artifacts.ts +24 -24
  12. package/packages/eslint-plugin-forge/src/rule-no-forge-guard-violation.ts +93 -93
  13. package/src/forge/_generated/actionSubscriptions.json +2 -2
  14. package/src/forge/_generated/actionSubscriptions.ts +3 -3
  15. package/src/forge/_generated/agentAdapterManifest.json +2 -2
  16. package/src/forge/_generated/agentAdapterManifest.ts +3 -3
  17. package/src/forge/_generated/agentContract.json +2 -2
  18. package/src/forge/_generated/agentContract.ts +6786 -2
  19. package/src/forge/_generated/agentQuickstart.md +1 -1
  20. package/src/forge/_generated/aiContext.ts +1 -1
  21. package/src/forge/_generated/aiModels.json +1 -1
  22. package/src/forge/_generated/aiModels.ts +1 -1
  23. package/src/forge/_generated/aiProviders.json +1 -1
  24. package/src/forge/_generated/aiProviders.ts +1 -1
  25. package/src/forge/_generated/aiRegistry.json +2 -2
  26. package/src/forge/_generated/aiRegistry.ts +3 -3
  27. package/src/forge/_generated/api.json +2 -2
  28. package/src/forge/_generated/api.ts +1 -1
  29. package/src/forge/_generated/appGraph.json +2 -2
  30. package/src/forge/_generated/appGraph.ts +1297 -1141
  31. package/src/forge/_generated/appMap.md +1 -1
  32. package/src/forge/_generated/artifactManifest.json +2 -2
  33. package/src/forge/_generated/artifactManifest.ts +2 -2
  34. package/src/forge/_generated/authClaims.json +1 -1
  35. package/src/forge/_generated/authClaims.ts +1 -1
  36. package/src/forge/_generated/authConfig.json +1 -1
  37. package/src/forge/_generated/authConfig.ts +1 -1
  38. package/src/forge/_generated/authContext.ts +1 -1
  39. package/src/forge/_generated/authRegistry.json +1 -1
  40. package/src/forge/_generated/authRegistry.ts +1 -1
  41. package/src/forge/_generated/buildInfo.json +2 -2
  42. package/src/forge/_generated/buildInfo.ts +4 -4
  43. package/src/forge/_generated/capabilityMap.json +2 -2
  44. package/src/forge/_generated/capabilityMap.md +1 -1
  45. package/src/forge/_generated/capabilityMap.ts +2 -2
  46. package/src/forge/_generated/client.ts +1 -1
  47. package/src/forge/_generated/clientApi.ts +1 -1
  48. package/src/forge/_generated/clientManifest.json +2 -2
  49. package/src/forge/_generated/clientManifest.ts +3 -3
  50. package/src/forge/_generated/clientTypes.ts +1 -1
  51. package/src/forge/_generated/configRegistry.json +1 -1
  52. package/src/forge/_generated/configRegistry.ts +1 -1
  53. package/src/forge/_generated/dataGraph.json +2 -2
  54. package/src/forge/_generated/dataGraph.ts +3 -3
  55. package/src/forge/_generated/db.json +1 -1
  56. package/src/forge/_generated/db.ts +1 -1
  57. package/src/forge/_generated/dbSecurityManifest.json +1 -1
  58. package/src/forge/_generated/dbSecurityManifest.ts +1 -1
  59. package/src/forge/_generated/dbSessionContext.json +1 -1
  60. package/src/forge/_generated/dbSessionContext.ts +1 -1
  61. package/src/forge/_generated/deployManifest.json +2 -2
  62. package/src/forge/_generated/deployManifest.ts +7 -7
  63. package/src/forge/_generated/devManifest.json +2 -2
  64. package/src/forge/_generated/devManifest.ts +3 -3
  65. package/src/forge/_generated/envSchema.json +1 -1
  66. package/src/forge/_generated/envSchema.ts +1 -1
  67. package/src/forge/_generated/frontendGraph.json +1 -1
  68. package/src/forge/_generated/frontendGraph.ts +1 -1
  69. package/src/forge/_generated/importGuards.json +2 -2
  70. package/src/forge/_generated/importGuards.ts +35 -1
  71. package/src/forge/_generated/index.ts +1 -1
  72. package/src/forge/_generated/liveProductionManifest.json +1 -1
  73. package/src/forge/_generated/liveProductionManifest.ts +1 -1
  74. package/src/forge/_generated/liveProtocol.json +1 -1
  75. package/src/forge/_generated/liveProtocol.ts +1 -1
  76. package/src/forge/_generated/liveQueryRegistry.json +2 -2
  77. package/src/forge/_generated/liveQueryRegistry.ts +3 -3
  78. package/src/forge/_generated/liveTransportConfig.json +1 -1
  79. package/src/forge/_generated/liveTransportConfig.ts +1 -1
  80. package/src/forge/_generated/makeRegistry.json +2 -2
  81. package/src/forge/_generated/makeRegistry.ts +2 -2
  82. package/src/forge/_generated/makeTemplates.json +1 -1
  83. package/src/forge/_generated/makeTemplates.ts +1 -1
  84. package/src/forge/_generated/mockMap.json +1 -1
  85. package/src/forge/_generated/mockMap.ts +1 -1
  86. package/src/forge/_generated/operationPlaybooks.md +7 -5
  87. package/src/forge/_generated/packageGraph.json +2 -2
  88. package/src/forge/_generated/packageGraph.ts +90964 -14284
  89. package/src/forge/_generated/packageUpgradeRegistry.json +2 -2
  90. package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
  91. package/src/forge/_generated/permissionMatrix.json +2 -2
  92. package/src/forge/_generated/permissionMatrix.ts +3 -3
  93. package/src/forge/_generated/policyRegistry.json +2 -2
  94. package/src/forge/_generated/policyRegistry.ts +3 -3
  95. package/src/forge/_generated/queryRegistry.json +2 -2
  96. package/src/forge/_generated/queryRegistry.ts +3 -3
  97. package/src/forge/_generated/react.d.ts +1 -1
  98. package/src/forge/_generated/react.ts +1 -1
  99. package/src/forge/_generated/reactManifest.json +2 -2
  100. package/src/forge/_generated/reactManifest.ts +3 -3
  101. package/src/forge/_generated/releaseManifest.json +2 -2
  102. package/src/forge/_generated/releaseManifest.ts +3 -3
  103. package/src/forge/_generated/rlsPolicies.json +1 -1
  104. package/src/forge/_generated/rlsPolicies.sql +1 -1
  105. package/src/forge/_generated/rlsPolicies.ts +1 -1
  106. package/src/forge/_generated/runtimeGraph.json +2 -2
  107. package/src/forge/_generated/runtimeGraph.ts +3 -3
  108. package/src/forge/_generated/runtimeMatrix.json +2 -2
  109. package/src/forge/_generated/runtimeMatrix.ts +106177 -7917
  110. package/src/forge/_generated/runtimeRegistry.ts +1 -1
  111. package/src/forge/_generated/runtimeRules.md +1 -1
  112. package/src/forge/_generated/secretRegistry.json +1 -1
  113. package/src/forge/_generated/secretRegistry.ts +1 -1
  114. package/src/forge/_generated/secretsContext.ts +1 -1
  115. package/src/forge/_generated/serverApi.ts +1 -1
  116. package/src/forge/_generated/sourceMapManifest.json +2 -2
  117. package/src/forge/_generated/sourceMapManifest.ts +2 -2
  118. package/src/forge/_generated/sqlPlan.json +1 -1
  119. package/src/forge/_generated/sqlPlan.ts +1 -1
  120. package/src/forge/_generated/subscriptionManifest.json +2 -2
  121. package/src/forge/_generated/subscriptionManifest.ts +3 -3
  122. package/src/forge/_generated/symbolicationManifest.json +2 -2
  123. package/src/forge/_generated/symbolicationManifest.ts +2 -2
  124. package/src/forge/_generated/telemetryRegistry.json +2 -2
  125. package/src/forge/_generated/telemetryRegistry.ts +3 -3
  126. package/src/forge/_generated/telemetrySinks.json +2 -2
  127. package/src/forge/_generated/telemetrySinks.ts +2 -2
  128. package/src/forge/_generated/tenantScope.json +2 -2
  129. package/src/forge/_generated/tenantScope.ts +3 -3
  130. package/src/forge/_generated/testGraph.json +2 -2
  131. package/src/forge/_generated/testGraph.ts +129 -75
  132. package/src/forge/_generated/testPlanRegistry.json +2 -2
  133. package/src/forge/_generated/testPlanRegistry.ts +2 -2
  134. package/src/forge/_generated/uiRoutes.json +1 -1
  135. package/src/forge/_generated/uiRoutes.ts +1 -1
  136. package/src/forge/_generated/uiScenarios.json +1 -1
  137. package/src/forge/_generated/uiScenarios.ts +1 -1
  138. package/src/forge/_generated/uiTestManifest.json +2 -2
  139. package/src/forge/_generated/uiTestManifest.ts +2 -2
  140. package/src/forge/_generated/workflowRegistry.json +2 -2
  141. package/src/forge/_generated/workflowRegistry.ts +3 -3
  142. package/src/forge/_generated/workflowSubscriptions.json +2 -2
  143. package/src/forge/_generated/workflowSubscriptions.ts +3 -3
  144. package/src/forge/cli/commands.ts +861 -861
  145. package/src/forge/cli/deps.ts +178 -11
  146. package/src/forge/cli/dev.ts +32 -5
  147. package/src/forge/cli/index.ts +7 -7
  148. package/src/forge/cli/main.ts +54 -54
  149. package/src/forge/cli/new.ts +29 -1
  150. package/src/forge/cli/output.ts +97 -97
  151. package/src/forge/cli/parse.ts +679 -673
  152. package/src/forge/cli/version.ts +1 -1
  153. package/src/forge/compiler/agent-contract/build.ts +28 -0
  154. package/src/forge/compiler/agent-contract/types.ts +16 -0
  155. package/src/forge/compiler/app-graph/build.ts +112 -112
  156. package/src/forge/compiler/app-graph/classify.ts +10 -10
  157. package/src/forge/compiler/app-graph/dup-symbol.ts +29 -29
  158. package/src/forge/compiler/app-graph/extract.ts +123 -123
  159. package/src/forge/compiler/app-graph/forge-apis.ts +29 -29
  160. package/src/forge/compiler/app-graph/index.ts +11 -11
  161. package/src/forge/compiler/app-graph/module-graph.ts +316 -316
  162. package/src/forge/compiler/app-graph/parser.ts +119 -119
  163. package/src/forge/compiler/app-graph/symbols.ts +48 -48
  164. package/src/forge/compiler/app-graph/tsconfig-hash.ts +62 -62
  165. package/src/forge/compiler/app-graph/types.ts +43 -43
  166. package/src/forge/compiler/app-graph/versions.ts +14 -14
  167. package/src/forge/compiler/cache/index.ts +17 -17
  168. package/src/forge/compiler/cache/key.ts +46 -46
  169. package/src/forge/compiler/cache/scheduler.ts +72 -72
  170. package/src/forge/compiler/cache/store.ts +78 -78
  171. package/src/forge/compiler/classifier/capabilities.ts +78 -78
  172. package/src/forge/compiler/classifier/classify.ts +113 -113
  173. package/src/forge/compiler/classifier/contexts.ts +188 -188
  174. package/src/forge/compiler/classifier/index.ts +18 -18
  175. package/src/forge/compiler/classifier/runtime-matrix.ts +45 -45
  176. package/src/forge/compiler/classifier/secrets.ts +41 -41
  177. package/src/forge/compiler/classifier/signals.ts +129 -129
  178. package/src/forge/compiler/diagnostics/codes.ts +125 -120
  179. package/src/forge/compiler/diagnostics/create.ts +87 -87
  180. package/src/forge/compiler/diagnostics/index.ts +41 -41
  181. package/src/forge/compiler/emitter/artifact-kind.ts +14 -14
  182. package/src/forge/compiler/emitter/barrel.ts +38 -38
  183. package/src/forge/compiler/emitter/constants.ts +7 -7
  184. package/src/forge/compiler/emitter/emit.ts +234 -237
  185. package/src/forge/compiler/emitter/index.ts +24 -24
  186. package/src/forge/compiler/emitter/lock.ts +61 -61
  187. package/src/forge/compiler/emitter/render.ts +73 -73
  188. package/src/forge/compiler/guards/artifacts.ts +96 -96
  189. package/src/forge/compiler/guards/check-import-guards.ts +106 -106
  190. package/src/forge/compiler/guards/index.ts +11 -11
  191. package/src/forge/compiler/guards/propagate-contexts.ts +57 -57
  192. package/src/forge/compiler/index.ts +17 -17
  193. package/src/forge/compiler/integration/add.ts +493 -493
  194. package/src/forge/compiler/integration/index.ts +17 -17
  195. package/src/forge/compiler/integration/plan.ts +279 -279
  196. package/src/forge/compiler/integration/render.ts +189 -189
  197. package/src/forge/compiler/integration/snapshot.ts +52 -52
  198. package/src/forge/compiler/orchestrator/discover.ts +214 -214
  199. package/src/forge/compiler/orchestrator/guards.ts +5 -5
  200. package/src/forge/compiler/orchestrator/index.ts +27 -27
  201. package/src/forge/compiler/orchestrator/manifest.ts +69 -69
  202. package/src/forge/compiler/orchestrator/orphans.ts +51 -51
  203. package/src/forge/compiler/orchestrator/plan.ts +804 -804
  204. package/src/forge/compiler/orchestrator/run.ts +178 -178
  205. package/src/forge/compiler/orchestrator/serialize.ts +859 -859
  206. package/src/forge/compiler/orchestrator/types.ts +23 -23
  207. package/src/forge/compiler/orchestrator/verify.ts +35 -35
  208. package/src/forge/compiler/package-graph/capabilities-stub.ts +33 -33
  209. package/src/forge/compiler/package-graph/checksum.ts +107 -97
  210. package/src/forge/compiler/package-graph/compiler.ts +444 -363
  211. package/src/forge/compiler/package-graph/constants.ts +4 -4
  212. package/src/forge/compiler/package-graph/exports-discovery.ts +91 -84
  213. package/src/forge/compiler/package-graph/extract-dts.ts +32 -32
  214. package/src/forge/compiler/package-graph/index.ts +24 -24
  215. package/src/forge/compiler/package-graph/jsdoc.ts +50 -50
  216. package/src/forge/compiler/package-graph/oracle.ts +326 -0
  217. package/src/forge/compiler/package-graph/read-file.ts +21 -21
  218. package/src/forge/compiler/package-graph/resolve.ts +131 -127
  219. package/src/forge/compiler/package-manager/adapter.ts +232 -232
  220. package/src/forge/compiler/package-manager/commands.ts +47 -47
  221. package/src/forge/compiler/package-manager/detect.ts +65 -65
  222. package/src/forge/compiler/package-manager/executor.ts +29 -29
  223. package/src/forge/compiler/package-manager/index.ts +22 -22
  224. package/src/forge/compiler/package-manager/parse-spec.ts +16 -16
  225. package/src/forge/compiler/package-manager/version.ts +20 -20
  226. package/src/forge/compiler/primitives/compare.ts +26 -26
  227. package/src/forge/compiler/primitives/hash.ts +42 -33
  228. package/src/forge/compiler/primitives/header.ts +43 -43
  229. package/src/forge/compiler/primitives/index.ts +45 -45
  230. package/src/forge/compiler/primitives/paths.ts +24 -24
  231. package/src/forge/compiler/primitives/serialize.ts +66 -66
  232. package/src/forge/compiler/primitives/sort.ts +87 -87
  233. package/src/forge/compiler/recipes/definitions.ts +269 -269
  234. package/src/forge/compiler/recipes/helpers.ts +37 -37
  235. package/src/forge/compiler/recipes/index.ts +21 -21
  236. package/src/forge/compiler/recipes/registry.ts +87 -87
  237. package/src/forge/compiler/sandbox/artifact-sanitize.ts +26 -26
  238. package/src/forge/compiler/sandbox/backends/child.ts +123 -123
  239. package/src/forge/compiler/sandbox/backends/docker.ts +173 -173
  240. package/src/forge/compiler/sandbox/index.ts +51 -51
  241. package/src/forge/compiler/sandbox/inspect.ts +143 -143
  242. package/src/forge/compiler/sandbox/inspector-entry.ts +115 -115
  243. package/src/forge/compiler/sandbox/limits.ts +31 -31
  244. package/src/forge/compiler/sandbox/scrub-env.ts +60 -60
  245. package/src/forge/compiler/sandbox/secret-scan.ts +54 -54
  246. package/src/forge/compiler/sandbox/serialize.ts +106 -106
  247. package/src/forge/compiler/sandbox/types.ts +7 -7
  248. package/src/forge/compiler/types/app-graph.ts +71 -71
  249. package/src/forge/compiler/types/capability.ts +29 -29
  250. package/src/forge/compiler/types/classification.ts +9 -9
  251. package/src/forge/compiler/types/cli.ts +85 -85
  252. package/src/forge/compiler/types/diagnostic.ts +2 -2
  253. package/src/forge/compiler/types/emit.ts +25 -25
  254. package/src/forge/compiler/types/import-guards.ts +19 -19
  255. package/src/forge/compiler/types/index.ts +98 -98
  256. package/src/forge/compiler/types/integration.ts +25 -25
  257. package/src/forge/compiler/types/json.ts +3 -3
  258. package/src/forge/compiler/types/lock.ts +37 -37
  259. package/src/forge/compiler/types/package-graph.ts +122 -77
  260. package/src/forge/compiler/types/runtime-matrix.ts +16 -16
  261. package/src/forge/compiler/types/runtime.ts +30 -30
  262. package/src/forge/compiler/types/sandbox.ts +24 -24
  263. package/src/forge/dev/server.ts +16 -2
  264. package/src/forge/refactor/index.ts +10 -2
  265. package/src/forge/refactor/runtime-rename.ts +598 -0
  266. package/src/forge/runtime/executor.ts +3 -2
  267. package/src/forge/runtime/live/live-query-runner.ts +2 -1
  268. package/src/forge/runtime/outbox/process.ts +2 -1
  269. package/src/forge/runtime/query/run-query.ts +2 -1
  270. package/src/forge/runtime/runner/run-entry.ts +2 -1
  271. package/src/forge/runtime/telemetry/sinks/posthog.ts +4 -5
  272. package/src/forge/runtime/telemetry/sinks/sentry.ts +4 -5
  273. package/src/forge/runtime/workflows/resolve-step.ts +2 -1
  274. package/src/forge/version.ts +3 -0
  275. package/templates/b2b-support-web/src/actions/captureTicketCreated.ts +7 -2
  276. package/templates/b2b-support-web/src/commands/closeTicket.ts +6 -1
  277. package/templates/b2b-support-web/src/commands/createTicket.ts +8 -2
  278. package/templates/b2b-support-web/src/queries/getTicket.ts +8 -1
  279. package/templates/b2b-support-web/web/components/CreateTicketForm.tsx +1 -2
  280. package/templates/b2b-support-web/web/components/PolicyDeniedDemo.tsx +1 -2
  281. package/templates/b2b-support-web/web/components/TicketList.tsx +1 -2
  282. package/templates/b2b-support-web/web/components/TraceDetails.tsx +1 -1
  283. package/templates/b2b-support-web/web/lib/forge.ts +1 -0
@@ -1,4 +1,4 @@
1
- export const PACKAGE_GRAPH_SCHEMA_VERSION = "1.0.0";
2
- export const PACKAGE_ANALYZER_VERSION = "0.1.1";
3
- export const GENERATOR_VERSION = "0.0.0";
4
- export const DEFAULT_PATTERN_EXPANSION_LIMIT = 50;
1
+ export const PACKAGE_GRAPH_SCHEMA_VERSION = "1.0.0";
2
+ export const PACKAGE_ANALYZER_VERSION = "0.2.0";
3
+ export { GENERATOR_VERSION } from "../../version.ts";
4
+ export const DEFAULT_PATTERN_EXPANSION_LIMIT = 50;
@@ -1,84 +1,91 @@
1
- import { join, posix } from "node:path";
2
- import { nodeFileSystem } from "../fs/index.ts";
3
- import { compareBytes } from "../primitives/compare.ts";
4
- import { DEFAULT_PATTERN_EXPANSION_LIMIT } from "./constants.ts";
5
-
6
- export interface DiscoveredSubpath {
7
- subpath: string;
8
- patternBacked: boolean;
9
- }
10
-
11
- export function discoverSubpathsFromExports(
12
- exportsField: unknown,
13
- ): DiscoveredSubpath[] {
14
- if (exportsField == null) {
15
- return [{ subpath: ".", patternBacked: false }];
16
- }
17
-
18
- if (typeof exportsField === "string") {
19
- return [{ subpath: ".", patternBacked: false }];
20
- }
21
-
22
- if (typeof exportsField !== "object" || Array.isArray(exportsField)) {
23
- return [{ subpath: ".", patternBacked: false }];
24
- }
25
-
26
- const entries: DiscoveredSubpath[] = [];
27
- for (const key of Object.keys(exportsField as Record<string, unknown>)) {
28
- const normalized = key === "." ? "." : key.startsWith("./") ? key : `./${key}`;
29
- const patternBacked = normalized.endsWith("/*");
30
- entries.push({ subpath: normalized, patternBacked });
31
- }
32
-
33
- entries.sort((a, b) => compareBytes(a.subpath, b.subpath));
34
- return entries;
35
- }
36
-
37
- export function expandPatternSubpaths(
38
- installPath: string,
39
- patternSubpath: string,
40
- limit: number = DEFAULT_PATTERN_EXPANSION_LIMIT,
41
- ): string[] {
42
- if (!patternSubpath.endsWith("/*")) {
43
- return [patternSubpath];
44
- }
45
-
46
- const prefix = patternSubpath.slice(0, -2);
47
- const relativePrefix = prefix.startsWith("./") ? prefix.slice(2) : prefix;
48
- const baseDir = join(installPath, relativePrefix);
49
-
50
- let files: string[];
51
- try {
52
- files = listFilesRecursive(baseDir);
53
- } catch {
54
- return [];
55
- }
56
-
57
- const expanded: string[] = [];
58
- for (const file of files) {
59
- const rel = posix.join(prefix, file);
60
- expanded.push(rel.startsWith("./") ? rel : `./${rel}`);
61
- if (expanded.length >= limit) {
62
- break;
63
- }
64
- }
65
-
66
- expanded.sort(compareBytes);
67
- return expanded;
68
- }
69
-
70
- function listFilesRecursive(dir: string, relative = ""): string[] {
71
- const files: string[] = [];
72
-
73
- for (const entry of nodeFileSystem.readDir(dir)) {
74
- const full = join(dir, entry.name);
75
- const rel = relative ? posix.join(relative, entry.name) : entry.name;
76
- if (entry.isDirectory) {
77
- files.push(...listFilesRecursive(full, rel));
78
- } else {
79
- files.push(rel);
80
- }
81
- }
82
-
83
- return files;
84
- }
1
+ import { join, posix } from "node:path";
2
+ import { nodeFileSystem } from "../fs/index.ts";
3
+ import { compareBytes } from "../primitives/compare.ts";
4
+ import { DEFAULT_PATTERN_EXPANSION_LIMIT } from "./constants.ts";
5
+
6
+ export interface DiscoveredSubpath {
7
+ subpath: string;
8
+ patternBacked: boolean;
9
+ }
10
+
11
+ export function discoverSubpathsFromExports(
12
+ exportsField: unknown,
13
+ ): DiscoveredSubpath[] {
14
+ if (exportsField == null) {
15
+ return [{ subpath: ".", patternBacked: false }];
16
+ }
17
+
18
+ if (typeof exportsField === "string") {
19
+ return [{ subpath: ".", patternBacked: false }];
20
+ }
21
+
22
+ if (typeof exportsField !== "object" || Array.isArray(exportsField)) {
23
+ return [{ subpath: ".", patternBacked: false }];
24
+ }
25
+
26
+ const entries: DiscoveredSubpath[] = [];
27
+ for (const key of Object.keys(exportsField as Record<string, unknown>)) {
28
+ const normalized = key === "." ? "." : key.startsWith("./") ? key : `./${key}`;
29
+ const patternBacked = normalized.endsWith("/*");
30
+ entries.push({ subpath: normalized, patternBacked });
31
+ }
32
+
33
+ entries.sort((a, b) => compareBytes(a.subpath, b.subpath));
34
+ return entries;
35
+ }
36
+
37
+ export function expandPatternSubpaths(
38
+ installPath: string,
39
+ patternSubpath: string,
40
+ limit: number = DEFAULT_PATTERN_EXPANSION_LIMIT,
41
+ ): string[] {
42
+ if (!patternSubpath.endsWith("/*")) {
43
+ return [patternSubpath];
44
+ }
45
+
46
+ const prefix = patternSubpath.slice(0, -2);
47
+ const relativePrefix = prefix.startsWith("./") ? prefix.slice(2) : prefix;
48
+ const baseDir = join(installPath, relativePrefix);
49
+
50
+ let files: string[];
51
+ try {
52
+ files = listFilesRecursive(baseDir);
53
+ } catch {
54
+ return [];
55
+ }
56
+
57
+ const declarationFiles = files.filter(isDeclarationFile);
58
+ const candidates = declarationFiles.length > 0 ? declarationFiles : files;
59
+
60
+ const expanded: string[] = [];
61
+ for (const file of candidates) {
62
+ const rel = posix.join(prefix, file);
63
+ expanded.push(rel.startsWith("./") ? rel : `./${rel}`);
64
+ if (expanded.length >= limit) {
65
+ break;
66
+ }
67
+ }
68
+
69
+ expanded.sort(compareBytes);
70
+ return expanded;
71
+ }
72
+
73
+ function isDeclarationFile(path: string): boolean {
74
+ return path.endsWith(".d.ts") || path.endsWith(".d.cts") || path.endsWith(".d.mts");
75
+ }
76
+
77
+ function listFilesRecursive(dir: string, relative = ""): string[] {
78
+ const files: string[] = [];
79
+
80
+ for (const entry of nodeFileSystem.readDir(dir)) {
81
+ const full = join(dir, entry.name);
82
+ const rel = relative ? posix.join(relative, entry.name) : entry.name;
83
+ if (entry.isDirectory) {
84
+ files.push(...listFilesRecursive(full, rel));
85
+ } else {
86
+ files.push(rel);
87
+ }
88
+ }
89
+
90
+ return files;
91
+ }
@@ -1,32 +1,32 @@
1
- import type { ExportSignature } from "../types/package-graph.ts";
2
- import { compareExports } from "../primitives/sort.ts";
3
- import { readTextFile } from "./read-file.ts";
4
- import type { ResolutionMode } from "../types/runtime.ts";
5
- import {
6
- DtsSignatureExtractor,
7
- normalizeSignatureText,
8
- } from "./dts-extractor.ts";
9
-
10
- export { normalizeSignatureText };
11
-
12
- export function extractDtsSignatures(
13
- dtsPath: string,
14
- packageName: string,
15
- entrypoint: string,
16
- mode: ResolutionMode,
17
- ): ExportSignature[] {
18
- const extractor = new DtsSignatureExtractor(mode);
19
- return extractor.extract(dtsPath, packageName, entrypoint);
20
- }
21
-
22
- export function canParseDtsFile(dtsPath: string, mode: ResolutionMode): boolean {
23
- try {
24
- readTextFile(dtsPath);
25
- const exports = extractDtsSignatures(dtsPath, "probe", ".", mode);
26
- return exports.length >= 0;
27
- } catch {
28
- return false;
29
- }
30
- }
31
-
32
- export { compareExports, DtsSignatureExtractor };
1
+ import type { ExportSignature } from "../types/package-graph.ts";
2
+ import { compareExports } from "../primitives/sort.ts";
3
+ import { readTextFile } from "./read-file.ts";
4
+ import type { ResolutionMode } from "../types/runtime.ts";
5
+ import {
6
+ DtsSignatureExtractor,
7
+ normalizeSignatureText,
8
+ } from "./dts-extractor.ts";
9
+
10
+ export { normalizeSignatureText };
11
+
12
+ export function extractDtsSignatures(
13
+ dtsPath: string,
14
+ packageName: string,
15
+ entrypoint: string,
16
+ mode: ResolutionMode,
17
+ ): ExportSignature[] {
18
+ const extractor = new DtsSignatureExtractor(mode);
19
+ return extractor.extract(dtsPath, packageName, entrypoint);
20
+ }
21
+
22
+ export function canParseDtsFile(dtsPath: string, mode: ResolutionMode): boolean {
23
+ try {
24
+ readTextFile(dtsPath);
25
+ const exports = extractDtsSignatures(dtsPath, "probe", ".", mode);
26
+ return exports.length >= 0;
27
+ } catch {
28
+ return false;
29
+ }
30
+ }
31
+
32
+ export { compareExports, DtsSignatureExtractor };
@@ -7,27 +7,27 @@ export {
7
7
  PackageGraphCompiler,
8
8
  recomputeFromInputs,
9
9
  } from "./compiler.ts";
10
- export type {
11
- BuildOptions,
12
- AnalyzeResult,
13
- BuildResult,
14
- } from "./compiler.ts";
15
- export {
16
- resolveEntrypointTypes,
17
- moduleSpecifierForSubpath,
18
- createResolutionCompilerOptions,
19
- typesPackageName,
20
- } from "./resolve.ts";
21
- export {
22
- discoverSubpathsFromExports,
23
- expandPatternSubpaths,
24
- } from "./exports-discovery.ts";
25
- export { extractDtsSignatures, normalizeSignatureText } from "./extract-dts.ts";
26
- export { extractJsDoc, extractExamples } from "./jsdoc.ts";
27
- export {
28
- hashPackageJson,
29
- hashDtsFiles,
30
- computeContentChecksum,
31
- } from "./checksum.ts";
32
- export { setReadFileTracker } from "./read-file.ts";
33
- export type { ReadFileTracker } from "./read-file.ts";
10
+ export type {
11
+ BuildOptions,
12
+ AnalyzeResult,
13
+ BuildResult,
14
+ } from "./compiler.ts";
15
+ export {
16
+ resolveEntrypointTypes,
17
+ moduleSpecifierForSubpath,
18
+ createResolutionCompilerOptions,
19
+ typesPackageName,
20
+ } from "./resolve.ts";
21
+ export {
22
+ discoverSubpathsFromExports,
23
+ expandPatternSubpaths,
24
+ } from "./exports-discovery.ts";
25
+ export { extractDtsSignatures, normalizeSignatureText } from "./extract-dts.ts";
26
+ export { extractJsDoc, extractExamples } from "./jsdoc.ts";
27
+ export {
28
+ hashPackageJson,
29
+ hashDtsFiles,
30
+ computeContentChecksum,
31
+ } from "./checksum.ts";
32
+ export { setReadFileTracker } from "./read-file.ts";
33
+ export type { ReadFileTracker } from "./read-file.ts";
@@ -1,6 +1,6 @@
1
- import ts from "typescript";
2
- import type { JsDoc } from "../types/package-graph.ts";
3
-
1
+ import ts from "typescript";
2
+ import type { JsDoc } from "../types/package-graph.ts";
3
+
4
4
  function tagText(tag: ts.JSDocTag): string {
5
5
  if (typeof tag.comment === "string") {
6
6
  return tag.comment.trim();
@@ -13,50 +13,50 @@ function tagText(tag: ts.JSDocTag): string {
13
13
  }
14
14
  return "";
15
15
  }
16
-
17
- export function extractJsDoc(
18
- symbol: ts.Symbol,
19
- checker: ts.TypeChecker,
20
- ): JsDoc | null {
21
- const parts = symbol.getDocumentationComment(checker);
22
- const summary = ts.displayPartsToString(parts).trim();
23
-
24
- const tags: { tag: string; text: string }[] = [];
25
- for (const decl of symbol.declarations ?? []) {
26
- for (const tag of ts.getJSDocTags(decl)) {
27
- tags.push({
28
- tag: tag.tagName.text,
29
- text: tagText(tag),
30
- });
31
- }
32
- }
33
-
34
- if (summary.length === 0 && tags.length === 0) {
35
- return null;
36
- }
37
-
38
- tags.sort((a, b) => {
39
- const tagCmp = a.tag.localeCompare(b.tag);
40
- if (tagCmp !== 0) return tagCmp;
41
- return a.text.localeCompare(b.text);
42
- });
43
-
44
- return { summary, tags };
45
- }
46
-
47
- export function extractExamples(jsdoc: JsDoc | null): string[] {
48
- if (jsdoc == null) {
49
- return [];
50
- }
51
-
52
- const examples = jsdoc.tags
53
- .filter((tag) => tag.tag.toLowerCase() === "example")
54
- .map((tag) => normalizeExample(tag.text))
55
- .filter((text) => text.length > 0);
56
-
57
- return [...new Set(examples)].sort((a, b) => a.localeCompare(b));
58
- }
59
-
60
- function normalizeExample(text: string): string {
61
- return text.replace(/\r\n/g, "\n").trim();
62
- }
16
+
17
+ export function extractJsDoc(
18
+ symbol: ts.Symbol,
19
+ checker: ts.TypeChecker,
20
+ ): JsDoc | null {
21
+ const parts = symbol.getDocumentationComment(checker);
22
+ const summary = ts.displayPartsToString(parts).trim();
23
+
24
+ const tags: { tag: string; text: string }[] = [];
25
+ for (const decl of symbol.declarations ?? []) {
26
+ for (const tag of ts.getJSDocTags(decl)) {
27
+ tags.push({
28
+ tag: tag.tagName.text,
29
+ text: tagText(tag),
30
+ });
31
+ }
32
+ }
33
+
34
+ if (summary.length === 0 && tags.length === 0) {
35
+ return null;
36
+ }
37
+
38
+ tags.sort((a, b) => {
39
+ const tagCmp = a.tag.localeCompare(b.tag);
40
+ if (tagCmp !== 0) return tagCmp;
41
+ return a.text.localeCompare(b.text);
42
+ });
43
+
44
+ return { summary, tags };
45
+ }
46
+
47
+ export function extractExamples(jsdoc: JsDoc | null): string[] {
48
+ if (jsdoc == null) {
49
+ return [];
50
+ }
51
+
52
+ const examples = jsdoc.tags
53
+ .filter((tag) => tag.tag.toLowerCase() === "example")
54
+ .map((tag) => normalizeExample(tag.text))
55
+ .filter((text) => text.length > 0);
56
+
57
+ return [...new Set(examples)].sort((a, b) => a.localeCompare(b));
58
+ }
59
+
60
+ function normalizeExample(text: string): string {
61
+ return text.replace(/\r\n/g, "\n").trim();
62
+ }