@ttsc/unplugin 0.34.1 → 0.34.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 (262) hide show
  1. package/README.md +1 -0
  2. package/lib/api.js +4 -0
  3. package/lib/api.js.map +1 -1
  4. package/lib/api.mjs +2 -0
  5. package/lib/api.mjs.map +1 -1
  6. package/lib/core/bridge/TtscProjectRecord.d.cts +4 -1
  7. package/lib/core/bridge/TtscProjectRecord.d.mts +4 -1
  8. package/lib/core/bridge/TtscProjectRecord.d.ts +4 -1
  9. package/lib/core/bridge/projectRecordArgumentsMatch.d.cts +18 -0
  10. package/lib/core/bridge/projectRecordArgumentsMatch.d.mts +18 -0
  11. package/lib/core/bridge/projectRecordArgumentsMatch.d.ts +18 -0
  12. package/lib/core/bridge/projectRecordArgumentsMatch.js +36 -0
  13. package/lib/core/bridge/projectRecordArgumentsMatch.js.map +1 -0
  14. package/lib/core/bridge/projectRecordArgumentsMatch.mjs +34 -0
  15. package/lib/core/bridge/projectRecordArgumentsMatch.mjs.map +1 -0
  16. package/lib/core/bridge/projectRecordMoved.d.cts +14 -12
  17. package/lib/core/bridge/projectRecordMoved.d.mts +14 -12
  18. package/lib/core/bridge/projectRecordMoved.d.ts +14 -12
  19. package/lib/core/bridge/projectRecordMoved.js +17 -12
  20. package/lib/core/bridge/projectRecordMoved.js.map +1 -1
  21. package/lib/core/bridge/projectRecordMoved.mjs +17 -12
  22. package/lib/core/bridge/projectRecordMoved.mjs.map +1 -1
  23. package/lib/core/bridge/readProjectRecordFile.d.cts +4 -3
  24. package/lib/core/bridge/readProjectRecordFile.d.mts +4 -3
  25. package/lib/core/bridge/readProjectRecordFile.d.ts +4 -3
  26. package/lib/core/bridge/readProjectRecordFile.js +26 -3
  27. package/lib/core/bridge/readProjectRecordFile.js.map +1 -1
  28. package/lib/core/bridge/readProjectRecordFile.mjs +26 -3
  29. package/lib/core/bridge/readProjectRecordFile.mjs.map +1 -1
  30. package/lib/core/bridge/refreshProjectRecordFile.d.cts +3 -2
  31. package/lib/core/bridge/refreshProjectRecordFile.d.mts +3 -2
  32. package/lib/core/bridge/refreshProjectRecordFile.d.ts +3 -2
  33. package/lib/core/bridge/refreshProjectRecordFile.js +9 -3
  34. package/lib/core/bridge/refreshProjectRecordFile.js.map +1 -1
  35. package/lib/core/bridge/refreshProjectRecordFile.mjs +9 -3
  36. package/lib/core/bridge/refreshProjectRecordFile.mjs.map +1 -1
  37. package/lib/core/bridge/refreshProjectRecordFiles.d.cts +1 -1
  38. package/lib/core/bridge/refreshProjectRecordFiles.d.mts +1 -1
  39. package/lib/core/bridge/refreshProjectRecordFiles.d.ts +1 -1
  40. package/lib/core/bridge/refreshProjectRecordFiles.js +2 -2
  41. package/lib/core/bridge/refreshProjectRecordFiles.js.map +1 -1
  42. package/lib/core/bridge/refreshProjectRecordFiles.mjs +2 -2
  43. package/lib/core/bridge/refreshProjectRecordFiles.mjs.map +1 -1
  44. package/lib/core/index.d.cts +2 -0
  45. package/lib/core/index.d.mts +2 -0
  46. package/lib/core/index.d.ts +2 -0
  47. package/lib/core/index.js +4 -0
  48. package/lib/core/index.js.map +1 -1
  49. package/lib/core/index.mjs +2 -0
  50. package/lib/core/index.mjs.map +1 -1
  51. package/lib/core/next/next.js +5 -2
  52. package/lib/core/next/next.js.map +1 -1
  53. package/lib/core/next/next.mjs +5 -2
  54. package/lib/core/next/next.mjs.map +1 -1
  55. package/lib/core/options/ResolvedTtscUnpluginOptions.d.cts +2 -0
  56. package/lib/core/options/ResolvedTtscUnpluginOptions.d.mts +2 -0
  57. package/lib/core/options/ResolvedTtscUnpluginOptions.d.ts +2 -0
  58. package/lib/core/options/TtscUnpluginOptions.d.cts +8 -0
  59. package/lib/core/options/TtscUnpluginOptions.d.mts +8 -0
  60. package/lib/core/options/TtscUnpluginOptions.d.ts +8 -0
  61. package/lib/core/options/resolveOptions.d.cts +4 -3
  62. package/lib/core/options/resolveOptions.d.mts +4 -3
  63. package/lib/core/options/resolveOptions.d.ts +4 -3
  64. package/lib/core/options/resolveOptions.js +5 -3
  65. package/lib/core/options/resolveOptions.js.map +1 -1
  66. package/lib/core/options/resolveOptions.mjs +5 -3
  67. package/lib/core/options/resolveOptions.mjs.map +1 -1
  68. package/lib/core/rollup/rollupDeliveryOptions.d.cts +6 -6
  69. package/lib/core/rollup/rollupDeliveryOptions.d.mts +6 -6
  70. package/lib/core/rollup/rollupDeliveryOptions.d.ts +6 -6
  71. package/lib/core/rollup/rollupDeliveryOptions.js +9 -6
  72. package/lib/core/rollup/rollupDeliveryOptions.js.map +1 -1
  73. package/lib/core/rollup/rollupDeliveryOptions.mjs +9 -6
  74. package/lib/core/rollup/rollupDeliveryOptions.mjs.map +1 -1
  75. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.d.cts +10 -0
  76. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.d.mts +10 -0
  77. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.d.ts +10 -0
  78. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.js +13 -0
  79. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.js.map +1 -0
  80. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.mjs +11 -0
  81. package/lib/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.mjs.map +1 -0
  82. package/lib/core/transform/cache/TtscCachedProjectTransform.d.cts +6 -0
  83. package/lib/core/transform/cache/TtscCachedProjectTransform.d.mts +6 -0
  84. package/lib/core/transform/cache/TtscCachedProjectTransform.d.ts +6 -0
  85. package/lib/core/transform/cache/createTransformCacheKey.d.cts +11 -8
  86. package/lib/core/transform/cache/createTransformCacheKey.d.mts +11 -8
  87. package/lib/core/transform/cache/createTransformCacheKey.d.ts +11 -8
  88. package/lib/core/transform/cache/createTransformCacheKey.js +11 -8
  89. package/lib/core/transform/cache/createTransformCacheKey.js.map +1 -1
  90. package/lib/core/transform/cache/createTransformCacheKey.mjs +11 -8
  91. package/lib/core/transform/cache/createTransformCacheKey.mjs.map +1 -1
  92. package/lib/core/transform/generation/TtscCompilerMembershipHint.d.cts +20 -0
  93. package/lib/core/transform/generation/TtscCompilerMembershipHint.d.mts +20 -0
  94. package/lib/core/transform/generation/TtscCompilerMembershipHint.d.ts +20 -0
  95. package/lib/core/transform/generation/applyCompilerMembership.d.cts +15 -0
  96. package/lib/core/transform/generation/applyCompilerMembership.d.mts +15 -0
  97. package/lib/core/transform/generation/applyCompilerMembership.d.ts +15 -0
  98. package/lib/core/transform/generation/applyCompilerMembership.js +41 -0
  99. package/lib/core/transform/generation/applyCompilerMembership.js.map +1 -0
  100. package/lib/core/transform/generation/applyCompilerMembership.mjs +39 -0
  101. package/lib/core/transform/generation/applyCompilerMembership.mjs.map +1 -0
  102. package/lib/core/transform/generation/captureTransformGeneration.d.cts +7 -0
  103. package/lib/core/transform/generation/captureTransformGeneration.d.mts +7 -0
  104. package/lib/core/transform/generation/captureTransformGeneration.d.ts +7 -0
  105. package/lib/core/transform/generation/captureTransformGeneration.js +20 -7
  106. package/lib/core/transform/generation/captureTransformGeneration.js.map +1 -1
  107. package/lib/core/transform/generation/captureTransformGeneration.mjs +20 -7
  108. package/lib/core/transform/generation/captureTransformGeneration.mjs.map +1 -1
  109. package/lib/core/transform/generation/onlyLearnedCompileFacts.d.cts +5 -5
  110. package/lib/core/transform/generation/onlyLearnedCompileFacts.d.mts +5 -5
  111. package/lib/core/transform/generation/onlyLearnedCompileFacts.d.ts +5 -5
  112. package/lib/core/transform/generation/onlyLearnedCompileFacts.js +7 -5
  113. package/lib/core/transform/generation/onlyLearnedCompileFacts.js.map +1 -1
  114. package/lib/core/transform/generation/onlyLearnedCompileFacts.mjs +7 -5
  115. package/lib/core/transform/generation/onlyLearnedCompileFacts.mjs.map +1 -1
  116. package/lib/core/transform/generation/primeCompilerMembership.d.cts +22 -0
  117. package/lib/core/transform/generation/primeCompilerMembership.d.mts +22 -0
  118. package/lib/core/transform/generation/primeCompilerMembership.d.ts +22 -0
  119. package/lib/core/transform/generation/primeCompilerMembership.js +32 -0
  120. package/lib/core/transform/generation/primeCompilerMembership.js.map +1 -0
  121. package/lib/core/transform/generation/primeCompilerMembership.mjs +30 -0
  122. package/lib/core/transform/generation/primeCompilerMembership.mjs.map +1 -0
  123. package/lib/core/transform/generation/selectReportedMembershipPolicy.d.cts +7 -7
  124. package/lib/core/transform/generation/selectReportedMembershipPolicy.d.mts +7 -7
  125. package/lib/core/transform/generation/selectReportedMembershipPolicy.d.ts +7 -7
  126. package/lib/core/transform/generation/selectReportedMembershipPolicy.js +43 -9
  127. package/lib/core/transform/generation/selectReportedMembershipPolicy.js.map +1 -1
  128. package/lib/core/transform/generation/selectReportedMembershipPolicy.mjs +43 -9
  129. package/lib/core/transform/generation/selectReportedMembershipPolicy.mjs.map +1 -1
  130. package/lib/core/transform/generation/transformProject.d.cts +7 -0
  131. package/lib/core/transform/generation/transformProject.d.mts +7 -0
  132. package/lib/core/transform/generation/transformProject.d.ts +7 -0
  133. package/lib/core/transform/generation/transformProject.js +3 -0
  134. package/lib/core/transform/generation/transformProject.js.map +1 -1
  135. package/lib/core/transform/generation/transformProject.mjs +3 -0
  136. package/lib/core/transform/generation/transformProject.mjs.map +1 -1
  137. package/lib/core/transform/project/isPossibleProgramFileName.d.cts +13 -11
  138. package/lib/core/transform/project/isPossibleProgramFileName.d.mts +13 -11
  139. package/lib/core/transform/project/isPossibleProgramFileName.d.ts +13 -11
  140. package/lib/core/transform/project/isPossibleProgramFileName.js +21 -13
  141. package/lib/core/transform/project/isPossibleProgramFileName.js.map +1 -1
  142. package/lib/core/transform/project/isPossibleProgramFileName.mjs +21 -13
  143. package/lib/core/transform/project/isPossibleProgramFileName.mjs.map +1 -1
  144. package/lib/core/transform/session/sharedCompileIdentity.d.cts +8 -5
  145. package/lib/core/transform/session/sharedCompileIdentity.d.mts +8 -5
  146. package/lib/core/transform/session/sharedCompileIdentity.d.ts +8 -5
  147. package/lib/core/transform/session/sharedCompileIdentity.js +8 -5
  148. package/lib/core/transform/session/sharedCompileIdentity.js.map +1 -1
  149. package/lib/core/transform/session/sharedCompileIdentity.mjs +8 -5
  150. package/lib/core/transform/session/sharedCompileIdentity.mjs.map +1 -1
  151. package/lib/core/transform/transformTtsc.js +18 -0
  152. package/lib/core/transform/transformTtsc.js.map +1 -1
  153. package/lib/core/transform/transformTtsc.mjs +18 -0
  154. package/lib/core/transform/transformTtsc.mjs.map +1 -1
  155. package/lib/core/transform/tsconfig/TtscCompilerArgumentsWitness.d.cts +19 -0
  156. package/lib/core/transform/tsconfig/TtscCompilerArgumentsWitness.d.mts +19 -0
  157. package/lib/core/transform/tsconfig/TtscCompilerArgumentsWitness.d.ts +19 -0
  158. package/lib/core/transform/tsconfig/captureCompilerArguments.d.cts +14 -0
  159. package/lib/core/transform/tsconfig/captureCompilerArguments.d.mts +14 -0
  160. package/lib/core/transform/tsconfig/captureCompilerArguments.d.ts +14 -0
  161. package/lib/core/transform/tsconfig/captureCompilerArguments.js +26 -0
  162. package/lib/core/transform/tsconfig/captureCompilerArguments.js.map +1 -0
  163. package/lib/core/transform/tsconfig/captureCompilerArguments.mjs +24 -0
  164. package/lib/core/transform/tsconfig/captureCompilerArguments.mjs.map +1 -0
  165. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.d.cts +13 -0
  166. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.d.mts +13 -0
  167. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.d.ts +13 -0
  168. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.js +23 -0
  169. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.js.map +1 -0
  170. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.mjs +21 -0
  171. package/lib/core/transform/tsconfig/compilerEnvironmentIdentity.mjs.map +1 -0
  172. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.d.cts +17 -0
  173. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.d.mts +17 -0
  174. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.d.ts +17 -0
  175. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.js +57 -0
  176. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.js.map +1 -0
  177. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.mjs +55 -0
  178. package/lib/core/transform/tsconfig/resolveCompilerEnvironment.mjs.map +1 -0
  179. package/lib/core/transform/tsconfig/transformScratchEnvironment.d.cts +6 -6
  180. package/lib/core/transform/tsconfig/transformScratchEnvironment.d.mts +6 -6
  181. package/lib/core/transform/tsconfig/transformScratchEnvironment.d.ts +6 -6
  182. package/lib/core/transform/tsconfig/transformScratchEnvironment.js +7 -7
  183. package/lib/core/transform/tsconfig/transformScratchEnvironment.js.map +1 -1
  184. package/lib/core/transform/tsconfig/transformScratchEnvironment.mjs +7 -7
  185. package/lib/core/transform/tsconfig/transformScratchEnvironment.mjs.map +1 -1
  186. package/lib/core/transform/watch/notifyProjectRecord.js +3 -0
  187. package/lib/core/transform/watch/notifyProjectRecord.js.map +1 -1
  188. package/lib/core/transform/watch/notifyProjectRecord.mjs +3 -0
  189. package/lib/core/transform/watch/notifyProjectRecord.mjs.map +1 -1
  190. package/lib/core/tsconfig/ITtscProjectMembershipPolicy.d.cts +14 -1
  191. package/lib/core/tsconfig/ITtscProjectMembershipPolicy.d.mts +14 -1
  192. package/lib/core/tsconfig/ITtscProjectMembershipPolicy.d.ts +14 -1
  193. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.d.cts +4 -3
  194. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.d.mts +4 -3
  195. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.d.ts +4 -3
  196. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.js +36 -6
  197. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.js.map +1 -1
  198. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.mjs +36 -6
  199. package/lib/core/tsconfig/mergeMembershipPolicyOverlay.mjs.map +1 -1
  200. package/lib/core/tsconfig/readProjectMembershipPolicy.d.cts +3 -2
  201. package/lib/core/tsconfig/readProjectMembershipPolicy.d.mts +3 -2
  202. package/lib/core/tsconfig/readProjectMembershipPolicy.d.ts +3 -2
  203. package/lib/core/tsconfig/readProjectMembershipPolicy.js +49 -15
  204. package/lib/core/tsconfig/readProjectMembershipPolicy.js.map +1 -1
  205. package/lib/core/tsconfig/readProjectMembershipPolicy.mjs +49 -15
  206. package/lib/core/tsconfig/readProjectMembershipPolicy.mjs.map +1 -1
  207. package/lib/core/tsconfig/resolveMembershipInputExtensions.d.cts +16 -0
  208. package/lib/core/tsconfig/resolveMembershipInputExtensions.d.mts +16 -0
  209. package/lib/core/tsconfig/resolveMembershipInputExtensions.d.ts +16 -0
  210. package/lib/core/tsconfig/resolveMembershipInputExtensions.js +45 -0
  211. package/lib/core/tsconfig/resolveMembershipInputExtensions.js.map +1 -0
  212. package/lib/core/tsconfig/resolveMembershipInputExtensions.mjs +43 -0
  213. package/lib/core/tsconfig/resolveMembershipInputExtensions.mjs.map +1 -0
  214. package/lib/core/turbopack/turbopack.d.cts +2 -2
  215. package/lib/core/turbopack/turbopack.d.mts +2 -2
  216. package/lib/core/turbopack/turbopack.d.ts +2 -2
  217. package/lib/core/turbopack/turbopack.js +15 -7
  218. package/lib/core/turbopack/turbopack.js.map +1 -1
  219. package/lib/core/turbopack/turbopack.mjs +15 -7
  220. package/lib/core/turbopack/turbopack.mjs.map +1 -1
  221. package/lib/core/unplugin.js +21 -8
  222. package/lib/core/unplugin.js.map +1 -1
  223. package/lib/core/unplugin.mjs +21 -8
  224. package/lib/core/unplugin.mjs.map +1 -1
  225. package/package.json +3 -3
  226. package/src/core/bridge/TtscProjectRecord.ts +4 -1
  227. package/src/core/bridge/projectRecordArgumentsMatch.ts +37 -0
  228. package/src/core/bridge/projectRecordMoved.ts +17 -11
  229. package/src/core/bridge/readProjectRecordFile.ts +39 -3
  230. package/src/core/bridge/refreshProjectRecordFile.ts +9 -2
  231. package/src/core/bridge/refreshProjectRecordFiles.ts +7 -1
  232. package/src/core/index.ts +2 -0
  233. package/src/core/next/next.ts +18 -2
  234. package/src/core/options/ResolvedTtscUnpluginOptions.ts +3 -0
  235. package/src/core/options/TtscUnpluginOptions.ts +9 -0
  236. package/src/core/options/resolveOptions.ts +5 -3
  237. package/src/core/rollup/rollupDeliveryOptions.ts +9 -5
  238. package/src/core/transform/cache/TRANSFORM_CACHE_MEMBERSHIP_POLICIES.ts +14 -0
  239. package/src/core/transform/cache/TtscCachedProjectTransform.ts +7 -0
  240. package/src/core/transform/cache/createTransformCacheKey.ts +13 -8
  241. package/src/core/transform/generation/TtscCompilerMembershipHint.ts +24 -0
  242. package/src/core/transform/generation/applyCompilerMembership.ts +44 -0
  243. package/src/core/transform/generation/captureTransformGeneration.ts +43 -10
  244. package/src/core/transform/generation/onlyLearnedCompileFacts.ts +7 -5
  245. package/src/core/transform/generation/primeCompilerMembership.ts +39 -0
  246. package/src/core/transform/generation/selectReportedMembershipPolicy.ts +59 -13
  247. package/src/core/transform/generation/transformProject.ts +12 -0
  248. package/src/core/transform/project/isPossibleProgramFileName.ts +28 -15
  249. package/src/core/transform/session/sharedCompileIdentity.ts +10 -5
  250. package/src/core/transform/transformTtsc.ts +21 -0
  251. package/src/core/transform/tsconfig/TtscCompilerArgumentsWitness.ts +19 -0
  252. package/src/core/transform/tsconfig/captureCompilerArguments.ts +25 -0
  253. package/src/core/transform/tsconfig/compilerEnvironmentIdentity.ts +20 -0
  254. package/src/core/transform/tsconfig/resolveCompilerEnvironment.ts +61 -0
  255. package/src/core/transform/tsconfig/transformScratchEnvironment.ts +7 -6
  256. package/src/core/transform/watch/notifyProjectRecord.ts +3 -0
  257. package/src/core/tsconfig/ITtscProjectMembershipPolicy.ts +15 -1
  258. package/src/core/tsconfig/mergeMembershipPolicyOverlay.ts +31 -6
  259. package/src/core/tsconfig/readProjectMembershipPolicy.ts +61 -17
  260. package/src/core/tsconfig/resolveMembershipInputExtensions.ts +45 -0
  261. package/src/core/turbopack/turbopack.ts +27 -7
  262. package/src/core/unplugin.ts +34 -9
@@ -3,6 +3,7 @@ import { JAVASCRIPT_INPUT_EXTENSIONS } from "./JAVASCRIPT_INPUT_EXTENSIONS";
3
3
  import { OUTPUT_DIRECTORY_OPTIONS } from "./OUTPUT_DIRECTORY_OPTIONS";
4
4
  import { flattenDirectoryExclusionOrigins } from "./flattenDirectoryExclusionOrigins";
5
5
  import { resolveConfigDirTemplatePath } from "./resolveConfigDirTemplatePath";
6
+ import { resolveMembershipInputExtensions } from "./resolveMembershipInputExtensions";
6
7
 
7
8
  /**
8
9
  * Apply the caller's compiler-options overlay on top of a policy read from the
@@ -14,9 +15,10 @@ import { resolveConfigDirTemplatePath } from "./resolveConfigDirTemplatePath";
14
15
  * turns it off gets the narrower rule for the same reason.
15
16
  *
16
17
  * @evidence contracts/common.md#principled-implementation
17
- * Explicit boolean overlays update extension admission and output path
18
- * overlays update their own exclusion provenance. Null removes an output
19
- * directory; missing legacy provenance preserves explicit exclusions.
18
+ * Extension option provenance preserves explicit false and null clearing
19
+ * while recomputing implicit JavaScript and JSON defaults. Mapper suffixes
20
+ * remain independent. Output paths update their own exclusion provenance;
21
+ * missing legacy provenance preserves authored extension/exclusion lists.
20
22
  *
21
23
  * @evidence contracts/common.md#clear-and-simple-design
22
24
  * The operation clones extension and exclusion state rather than mutating
@@ -65,8 +67,27 @@ export function mergeMembershipPolicyOverlay(
65
67
  }
66
68
  }
67
69
  };
68
- applyFlag("allowJs", JAVASCRIPT_INPUT_EXTENSIONS);
69
- applyFlag("resolveJsonModule", [".json"]);
70
+ const extensionOptionOrigins =
71
+ policy.extensionOptionOrigins === undefined
72
+ ? undefined
73
+ : { ...policy.extensionOptionOrigins };
74
+ if (extensionOptionOrigins === undefined) {
75
+ applyFlag("allowJs", JAVASCRIPT_INPUT_EXTENSIONS);
76
+ applyFlag("resolveJsonModule", [".json"]);
77
+ } else {
78
+ for (const key of ["allowJs", "checkJs", "resolveJsonModule"] as const) {
79
+ if (!Object.hasOwn(compilerOptions, key)) continue;
80
+ const value = compilerOptions[key];
81
+ if (value === null) delete extensionOptionOrigins[key];
82
+ else if (typeof value === "boolean") extensionOptionOrigins[key] = value;
83
+ }
84
+ for (const key of ["module", "moduleResolution"] as const) {
85
+ if (!Object.hasOwn(compilerOptions, key)) continue;
86
+ const value = compilerOptions[key];
87
+ if (value === null) delete extensionOptionOrigins[key];
88
+ else if (typeof value === "string") extensionOptionOrigins[key] = value;
89
+ }
90
+ }
70
91
 
71
92
  const inheritedOrigins = policy.directoryExclusionOrigins;
72
93
  const directoryExclusionOrigins: {
@@ -98,7 +119,11 @@ export function mergeMembershipPolicyOverlay(
98
119
  excludedDirectories: flattenDirectoryExclusionOrigins(
99
120
  directoryExclusionOrigins,
100
121
  ),
101
- inputExtensions: [...inputExtensions],
122
+ extensionOptionOrigins,
123
+ inputExtensions:
124
+ extensionOptionOrigins === undefined
125
+ ? [...inputExtensions]
126
+ : resolveMembershipInputExtensions(extensionOptionOrigins),
102
127
  sources: policy.sources,
103
128
  useCaseSensitiveFileNames: policy.useCaseSensitiveFileNames,
104
129
  };
@@ -1,8 +1,6 @@
1
1
  import path from "node:path";
2
2
 
3
- import { TYPESCRIPT_TRANSFORM_EXTENSIONS } from "../source/TYPESCRIPT_TRANSFORM_EXTENSIONS";
4
3
  import type { ITtscProjectMembershipPolicy } from "./ITtscProjectMembershipPolicy";
5
- import { JAVASCRIPT_INPUT_EXTENSIONS } from "./JAVASCRIPT_INPUT_EXTENSIONS";
6
4
  import { OUTPUT_DIRECTORY_OPTIONS } from "./OUTPUT_DIRECTORY_OPTIONS";
7
5
  import { TsconfigReadTransaction } from "./TsconfigReadTransaction";
8
6
  import { absolutizePathsTarget } from "./absolutizePathsTarget";
@@ -11,6 +9,7 @@ import { findDeclaredValue } from "./findDeclaredValue";
11
9
  import { flattenDirectoryExclusionOrigins } from "./flattenDirectoryExclusionOrigins";
12
10
  import { normalizeTypeScriptPathSeparators } from "./normalizeTypeScriptPathSeparators";
13
11
  import { resolveConfigDirTemplatePath } from "./resolveConfigDirTemplatePath";
12
+ import { resolveMembershipInputExtensions } from "./resolveMembershipInputExtensions";
14
13
  import { resolveNativeRootPath } from "./resolveNativeRootPath";
15
14
  import { resolveRealPath } from "./resolveRealPath";
16
15
 
@@ -28,7 +27,8 @@ const DEFAULT_INCLUDE_SPEC = "**/*";
28
27
  * root matcher still applies extension, package and hidden-path admission; this
29
28
  * policy does not enumerate every dependency in the compiler program.
30
29
  *
31
- * `allowJs` and `resolveJsonModule` extend root-discovery suffixes, not the
30
+ * `allowJs` (implicitly enabled by `checkJs`), effective `resolveJsonModule`
31
+ * and literal content mapper extensions prime root-discovery suffixes, not the
32
32
  * complete set of imported or externally observed program inputs. `outDir`,
33
33
  * `declarationDir`, and plain `exclude` entries supply conservative directory
34
34
  * exclusions for that discovery walk. TypeScript supplies the two output
@@ -51,7 +51,7 @@ const DEFAULT_INCLUDE_SPEC = "**/*";
51
51
  *
52
52
  * @evidence contracts/common.md#clear-and-simple-design
53
53
  * Shared declaration readers own inheritance; this operation assembles one
54
- * policy and keeps exclusion provenance so overlays can change output defaults.
54
+ * policy and keeps extension and exclusion provenance so overlays can recompute defaults. Own null options clear inherited declarations before default resolution.
55
55
  *
56
56
  * @evidence contracts/portability.md#os-neutral-implementation
57
57
  * Node native paths anchor config-derived patterns; regular and native
@@ -117,25 +117,60 @@ export function readProjectMembershipPolicy(
117
117
  nativepath: resolveNativeRootPath(configDir),
118
118
  },
119
119
  };
120
- const flag = (key: string): boolean =>
120
+ const option = (key: string): unknown =>
121
121
  findDeclaredValue(
122
122
  resolved,
123
123
  (parsed) => {
124
- const value = (parsed as { compilerOptions?: Record<string, unknown> })
125
- .compilerOptions?.[key];
126
- return typeof value === "boolean" ? value : undefined;
124
+ const options = (
125
+ parsed as { compilerOptions?: Record<string, unknown> }
126
+ ).compilerOptions;
127
+ // Boxing null stops inheritance: upstream clears the inherited value.
128
+ return options !== null &&
129
+ typeof options === "object" &&
130
+ Object.hasOwn(options, key)
131
+ ? { value: options[key] }
132
+ : undefined;
127
133
  },
128
134
  new Set(),
129
135
  sources,
130
136
  configs,
131
- )?.value === true;
132
-
133
- const inputExtensions = [...TYPESCRIPT_TRANSFORM_EXTENSIONS];
134
- if (flag("allowJs")) {
135
- inputExtensions.push(...JAVASCRIPT_INPUT_EXTENSIONS);
136
- }
137
- if (flag("resolveJsonModule")) {
138
- inputExtensions.push(".json");
137
+ )?.value.value;
138
+ const booleanOption = (key: string): boolean | undefined => {
139
+ const value = option(key);
140
+ return typeof value === "boolean" ? value : undefined;
141
+ };
142
+ const stringOption = (key: string): string | undefined => {
143
+ const value = option(key);
144
+ return typeof value === "string" ? value : undefined;
145
+ };
146
+ const extensions = new Set<string>();
147
+ const mappers =
148
+ findDeclaredValue(
149
+ resolved,
150
+ (parsed) => {
151
+ if (!Object.prototype.hasOwnProperty.call(parsed, "contentMappers"))
152
+ return undefined;
153
+ const value = (parsed as { contentMappers?: unknown }).contentMappers;
154
+ return Array.isArray(value) ? value : [];
155
+ },
156
+ new Set(),
157
+ sources,
158
+ configs,
159
+ )?.value ?? [];
160
+ for (const mapper of mappers) {
161
+ const declaredExtensions =
162
+ mapper !== null && typeof mapper === "object"
163
+ ? (mapper as { extensions?: unknown }).extensions
164
+ : undefined;
165
+ if (!Array.isArray(declaredExtensions)) continue;
166
+ for (const extension of declaredExtensions)
167
+ if (
168
+ typeof extension === "string" &&
169
+ extension.length > 1 &&
170
+ extension.startsWith(".") &&
171
+ !/[\\/]/.test(extension)
172
+ )
173
+ extensions.add(extension);
139
174
  }
140
175
 
141
176
  const directoryExclusionOrigins: {
@@ -221,13 +256,22 @@ export function readProjectMembershipPolicy(
221
256
  );
222
257
  }
223
258
  }
259
+ const extensionOptionOrigins = {
260
+ allowJs: booleanOption("allowJs"),
261
+ checkJs: booleanOption("checkJs"),
262
+ resolveJsonModule: booleanOption("resolveJsonModule"),
263
+ module: stringOption("module"),
264
+ moduleResolution: stringOption("moduleResolution"),
265
+ mapperExtensions: [...extensions],
266
+ };
224
267
  return {
225
268
  rootFileSpecs,
226
269
  directoryExclusionOrigins,
227
270
  excludedDirectories: flattenDirectoryExclusionOrigins(
228
271
  directoryExclusionOrigins,
229
272
  ),
230
- inputExtensions,
273
+ extensionOptionOrigins,
274
+ inputExtensions: resolveMembershipInputExtensions(extensionOptionOrigins),
231
275
  sources: [...sources],
232
276
  };
233
277
  }
@@ -0,0 +1,45 @@
1
+ import { TYPESCRIPT_TRANSFORM_EXTENSIONS } from "../source/TYPESCRIPT_TRANSFORM_EXTENSIONS";
2
+ import type { ITtscProjectMembershipPolicy } from "./ITtscProjectMembershipPolicy";
3
+ import { JAVASCRIPT_INPUT_EXTENSIONS } from "./JAVASCRIPT_INPUT_EXTENSIONS";
4
+
5
+ /**
6
+ * Prime suffix admission from explicit options and pinned TypeScript-Go
7
+ * defaults. Native membership reports still decide whether a primed walk was
8
+ * valid.
9
+ *
10
+ * @evidence contracts/common.md#principled-implementation Pinned 7.0 and 7.1 GetAllowJS, GetResolveJsonModule and GetModuleResolutionKind define these defaults: allowJs overrides checkJs; Node20/NodeNext enable implicit JSON; other modules use effective Bundler resolution unless Node16/18 or an explicit modern node resolution applies.
11
+ * @evidence contracts/common.md#clear-and-simple-design One pure resolver serves config inheritance and compiler-option overlays; declared mapper suffixes are unioned independently of built-in flags.
12
+ * @evidence contracts/common.md#prohibited-implementation-shortcuts Constants describe upstream option semantics for supported targets, without consumer names or treating prediction as a native proof.
13
+ * @evidence contracts/common.md#meaningful-documentation Prose states the provisional role and native authority; the origins type documents missing options and mapper ownership.
14
+ * @evidenceExclude contracts/portability.md#os-neutral-implementation Only compiler option labels and extension strings are interpreted; no filesystem path or process boundary is crossed.
15
+ * @evidence contracts/performance.md#efficient-algorithms Fixed option branches and one Set union cost O(mapper suffix count and text); output storage follows unique suffixes.
16
+ * @evidenceExclude contracts/performance.md#reuse-equivalent-work Resolves one supplied option value without coordinating requests or retaining a memo.
17
+ * @evidenceExclude contracts/performance.md#bound-retention-and-release-resources The returned array transfers to the caller; no handle or history is retained.
18
+ */
19
+ export function resolveMembershipInputExtensions(
20
+ origins: NonNullable<ITtscProjectMembershipPolicy["extensionOptionOrigins"]>,
21
+ ): string[] {
22
+ const extensions = new Set(TYPESCRIPT_TRANSFORM_EXTENSIONS);
23
+ if (origins.allowJs ?? origins.checkJs)
24
+ for (const extension of JAVASCRIPT_INPUT_EXTENSIONS)
25
+ extensions.add(extension);
26
+ const module = origins.module?.toLowerCase();
27
+ const resolution = origins.moduleResolution?.toLowerCase();
28
+ const modernResolution =
29
+ resolution === "node16" ||
30
+ resolution === "nodenext" ||
31
+ resolution === "bundler";
32
+ const bundler = modernResolution
33
+ ? resolution === "bundler"
34
+ : module !== "node16" &&
35
+ module !== "node18" &&
36
+ module !== "node20" &&
37
+ module !== "nodenext";
38
+ if (
39
+ origins.resolveJsonModule ??
40
+ (module === "node20" || module === "nodenext" || bundler)
41
+ )
42
+ extensions.add(".json");
43
+ for (const extension of origins.mapperExtensions) extensions.add(extension);
44
+ return [...extensions];
45
+ }
@@ -10,6 +10,8 @@ import { TtscCompileFailureError } from "../transform/errors/TtscCompileFailureE
10
10
  import { readTtscTransformSession } from "../transform/session/readTtscTransformSession";
11
11
  import { shareTtscTransformCache } from "../transform/session/shareTtscTransformCache";
12
12
  import { transformTtsc } from "../transform/transformTtsc";
13
+ import { captureCompilerArguments } from "../transform/tsconfig/captureCompilerArguments";
14
+ import { resolveCompilerEnvironment } from "../transform/tsconfig/resolveCompilerEnvironment";
13
15
  import type { TtscProjectRegistration } from "../transform/watch/TtscProjectRegistration";
14
16
  import type { TtscTransformHooks } from "../transform/watch/TtscTransformHooks";
15
17
  import type { TtscTurbopackLoaderContext } from "./TtscTurbopackLoaderContext";
@@ -39,7 +41,9 @@ let bridge: HostWatchBridge | undefined;
39
41
  * The tool directories whose record inventory this worker has attempted for a
40
42
  * one-shot build, for a loader wired by hand, without `withTtsc`.
41
43
  */
42
- const refreshed = new Set<string>();
44
+ const refreshed = new Map<string, string>();
45
+ /** Last invocation admitted to the watching worker's record inventory. */
46
+ let bridgeArgumentsIdentity: string | undefined;
43
47
 
44
48
  /**
45
49
  * Standalone webpack-loader entrypoint for Turbopack.
@@ -93,7 +97,7 @@ const refreshed = new Set<string>();
93
97
  * Inclusion and shallow option/hook adaptation retain path/own-key text work.
94
98
  * Shared transform validation pays current native identity, byte/list/graph
95
99
  * proofs and compiler misses/map delivery; it is not one constant lookup.
96
- * First inventory per tool root adds record parse/replay/IO, while watching
100
+ * First inventory per tool root and changed invocation adds record parse/replay/IO, while watching
97
101
  * registration adds qualified observer work and error modules serialize errors.
98
102
  * @evidence contracts/performance.md#reuse-equivalent-work
99
103
  * A worker cache shares validated project generations across loader calls;
@@ -101,7 +105,7 @@ const refreshed = new Set<string>();
101
105
  * boundary every hit qualifies current producer proofs before selecting output;
102
106
  * native observer authority may avoid rereading proven unchanged populations.
103
107
  * @evidence contracts/performance.md#bound-retention-and-release-resources
104
- * The worker owns its cache, bridge and refreshed-root set for its lifetime.
108
+ * The worker owns its cache, bridge and refreshed-root identity map for its lifetime.
105
109
  * Turbopack exposes no loader teardown hook, so native live resources rely on
106
110
  * worker lifetime rather than this function's explicit join/close. Persistent
107
111
  * session storage has its own pruning owner; no count/byte cap or descendant
@@ -149,6 +153,9 @@ export function turbopack(
149
153
  const projectRoot = this.rootContext ?? process.cwd();
150
154
  const toolDirectory = hostToolDirectory(projectRoot);
151
155
  const loaderOptions = bindings.readOptions();
156
+ const compilerArguments = captureCompilerArguments(
157
+ resolveCompilerEnvironment(loaderOptions.runExternalCode),
158
+ ).identity;
152
159
  // Turbopack gives a loader no build start, so the records are proven at the
153
160
  // process's first delivery. A watching worker's bridge takes every record as
154
161
  // it opens, proving them as it does, and observes the projects the worker
@@ -162,12 +169,25 @@ export function turbopack(
162
169
  if (watching && addDependency !== undefined) {
163
170
  if (bridge === undefined) {
164
171
  bridge = openHostWatchBridge(projectRoot);
165
- refreshProjectRecordFiles(toolDirectory, bridge);
172
+ }
173
+ if (bridgeArgumentsIdentity !== compilerArguments) {
174
+ bridgeArgumentsIdentity = compilerArguments;
175
+ refreshProjectRecordFiles(
176
+ toolDirectory,
177
+ bridge,
178
+ undefined,
179
+ compilerArguments,
180
+ );
166
181
  }
167
182
  bridgeStartedAt = bridge.begin();
168
- } else if (!refreshed.has(toolDirectory)) {
169
- refreshed.add(toolDirectory);
170
- refreshProjectRecordFiles(toolDirectory);
183
+ } else if (refreshed.get(toolDirectory) !== compilerArguments) {
184
+ refreshed.set(toolDirectory, compilerArguments);
185
+ refreshProjectRecordFiles(
186
+ toolDirectory,
187
+ undefined,
188
+ undefined,
189
+ compilerArguments,
190
+ );
171
191
  }
172
192
  const hooks: TtscTransformHooks = {
173
193
  exactPath: true,
@@ -36,6 +36,9 @@ import { resetTtscTransformCache } from "./transform/cache/resetTtscTransformCac
36
36
  import { sharedBuildTransformCache } from "./transform/cache/sharedBuildTransformCache";
37
37
  import { hostDeclaresPolling } from "./transform/tracker/hostDeclaresPolling";
38
38
  import { transformTtsc } from "./transform/transformTtsc";
39
+ import { captureCompilerArguments } from "./transform/tsconfig/captureCompilerArguments";
40
+ import { compilerEnvironmentIdentity } from "./transform/tsconfig/compilerEnvironmentIdentity";
41
+ import { resolveCompilerEnvironment } from "./transform/tsconfig/resolveCompilerEnvironment";
39
42
  import { isHostWrapperQuery } from "./transform/utils/isHostWrapperQuery";
40
43
  import { stripQuery } from "./transform/utils/stripQuery";
41
44
  import type { TtscProjectRegistration } from "./transform/watch/TtscProjectRegistration";
@@ -96,6 +99,7 @@ const unpluginFactory: UnpluginFactory<
96
99
  // channel cannot observe, opened by the session's first watching delivery
97
100
  // and closed where the session ends (samchon/ttsc#1388).
98
101
  let bridge: HostWatchBridge | undefined;
102
+ let recordArgumentsIdentity: string | undefined;
99
103
  // The bridge's change sequence when the current pass opened. A pass proves
100
104
  // the generation once, at its first delivery, and serves every later module
101
105
  // of the pass from it, so a delivery may carry a state a change since the
@@ -176,13 +180,28 @@ const unpluginFactory: UnpluginFactory<
176
180
  (context.getNativeBuildContext?.() !== undefined ||
177
181
  context.meta?.rollupVersion === undefined);
178
182
  // The options a delivery to Rollup is compiled under, read again once the
179
- // aliases Vite resolves change.
180
- let deliveryOptions: { aliases: unknown; identity: string } | undefined;
183
+ // aliases Vite resolves or the effective compiler argument transport change.
184
+ let deliveryOptions:
185
+ | { aliases: unknown; environment: string; identity: string }
186
+ | undefined;
181
187
  const currentDeliveryOptions = (): string => {
182
- if (deliveryOptions === undefined || deliveryOptions.aliases !== aliases)
188
+ const compilerEnvironment = resolveCompilerEnvironment(
189
+ options.runExternalCode,
190
+ );
191
+ const environment = compilerEnvironmentIdentity(compilerEnvironment);
192
+ if (
193
+ deliveryOptions === undefined ||
194
+ deliveryOptions.aliases !== aliases ||
195
+ deliveryOptions.environment !== environment
196
+ )
183
197
  deliveryOptions = {
184
198
  aliases,
185
- identity: rollupDeliveryOptions(options, createAliasPaths(aliases)),
199
+ environment,
200
+ identity: rollupDeliveryOptions(
201
+ options,
202
+ createAliasPaths(aliases),
203
+ compilerEnvironment,
204
+ ),
186
205
  };
187
206
  return deliveryOptions.identity;
188
207
  };
@@ -494,7 +513,8 @@ const unpluginFactory: UnpluginFactory<
494
513
  // opens for its first pass and takes every record, so a project the
495
514
  // host restores whole from its cache, with no delivery in this
496
515
  // process, is observed from then on; a later pass of that session
497
- // has the bridge observing already, and a one-shot host proves the
516
+ // has the bridge observing already; changed compiler arguments require
517
+ // a new inventory too. A one-shot host proves the
498
518
  // records at each start. A host whose cache the adapter answers module
499
519
  // by module, or that keeps none, has nothing for either to cover.
500
520
  const opening = bridge === undefined;
@@ -506,12 +526,17 @@ const unpluginFactory: UnpluginFactory<
506
526
  );
507
527
  }
508
528
  passStartedAt = bridge?.begin();
509
- if (opening && restoresUnanswered(this)) {
529
+ if (restoresUnanswered(this)) {
530
+ const identity = captureCompilerArguments(
531
+ resolveCompilerEnvironment(options.runExternalCode),
532
+ ).identity;
533
+ const argumentsChanged = recordArgumentsIdentity !== identity;
534
+ recordArgumentsIdentity = identity;
510
535
  // Below the root, and in the fallback a host that cannot write there
511
536
  // keeps its records in (samchon/ttsc#1480).
512
- for (const directory of recordDirectories()) {
513
- refreshProjectRecordFiles(directory, bridge);
514
- }
537
+ if (opening || argumentsChanged)
538
+ for (const directory of recordDirectories())
539
+ refreshProjectRecordFiles(directory, bridge, undefined, identity);
515
540
  }
516
541
  }
517
542
  },