repopo 0.10.0 → 0.13.0

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 (340) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +76 -77
  3. package/THIRD-PARTY-LICENSES.txt +232 -14
  4. package/bin/dev.js +5 -1
  5. package/esm/adapters/fluidFramework.d.ts +13 -9
  6. package/esm/adapters/fluidFramework.d.ts.map +1 -1
  7. package/esm/adapters/fluidFramework.js +20 -43
  8. package/esm/adapters/fluidFramework.js.map +1 -1
  9. package/esm/api.d.ts +64 -1
  10. package/esm/api.d.ts.map +1 -1
  11. package/esm/api.js +17 -1
  12. package/esm/api.js.map +1 -1
  13. package/esm/baseCommand.d.ts +1 -1
  14. package/esm/baseCommand.d.ts.map +1 -1
  15. package/esm/baseCommand.js +7 -10
  16. package/esm/baseCommand.js.map +1 -1
  17. package/esm/commands/check-native.d.ts +25 -0
  18. package/esm/commands/check-native.d.ts.map +1 -0
  19. package/esm/commands/check-native.js +156 -0
  20. package/esm/commands/check-native.js.map +1 -0
  21. package/esm/commands/check.d.ts +7 -34
  22. package/esm/commands/check.d.ts.map +1 -1
  23. package/esm/commands/check.js +76 -265
  24. package/esm/commands/check.js.map +1 -1
  25. package/esm/commands/list.d.ts.map +1 -1
  26. package/esm/commands/list.js +6 -6
  27. package/esm/commands/list.js.map +1 -1
  28. package/esm/concurrency.d.ts +3 -0
  29. package/esm/concurrency.d.ts.map +1 -0
  30. package/esm/concurrency.js +8 -0
  31. package/esm/concurrency.js.map +1 -0
  32. package/esm/config.d.ts +5 -39
  33. package/esm/config.d.ts.map +1 -1
  34. package/esm/config.js +3 -7
  35. package/esm/config.js.map +1 -1
  36. package/esm/context.d.ts +20 -3
  37. package/esm/context.d.ts.map +1 -1
  38. package/esm/context.js +18 -1
  39. package/esm/context.js.map +1 -1
  40. package/esm/executionContractError.d.ts +4 -0
  41. package/esm/executionContractError.d.ts.map +1 -0
  42. package/esm/executionContractError.js +4 -0
  43. package/esm/executionContractError.js.map +1 -0
  44. package/esm/fileCache.d.ts +12 -0
  45. package/esm/fileCache.d.ts.map +1 -0
  46. package/esm/fileCache.js +37 -0
  47. package/esm/fileCache.js.map +1 -0
  48. package/esm/filePaths.d.ts +2 -0
  49. package/esm/filePaths.d.ts.map +1 -0
  50. package/esm/filePaths.js +9 -0
  51. package/esm/filePaths.js.map +1 -0
  52. package/esm/generators.d.ts +0 -20
  53. package/esm/generators.d.ts.map +1 -1
  54. package/esm/generators.js.map +1 -1
  55. package/esm/index.d.ts +3 -11
  56. package/esm/index.d.ts.map +1 -1
  57. package/esm/index.js +3 -14
  58. package/esm/index.js.map +1 -1
  59. package/esm/makePolicy.d.ts +26 -79
  60. package/esm/makePolicy.d.ts.map +1 -1
  61. package/esm/makePolicy.js +51 -95
  62. package/esm/makePolicy.js.map +1 -1
  63. package/esm/perf.d.ts +10 -2
  64. package/esm/perf.d.ts.map +1 -1
  65. package/esm/perf.js +10 -9
  66. package/esm/perf.js.map +1 -1
  67. package/esm/policies/CargoLicenceValidated.d.ts +41 -0
  68. package/esm/policies/CargoLicenceValidated.d.ts.map +1 -0
  69. package/esm/policies/CargoLicenceValidated.js +47 -0
  70. package/esm/policies/CargoLicenceValidated.js.map +1 -0
  71. package/esm/policies/CargoLintsConfigured.d.ts +30 -0
  72. package/esm/policies/CargoLintsConfigured.d.ts.map +1 -0
  73. package/esm/policies/CargoLintsConfigured.js +65 -0
  74. package/esm/policies/CargoLintsConfigured.js.map +1 -0
  75. package/esm/policies/CargoLockPolicy.d.ts +34 -0
  76. package/esm/policies/CargoLockPolicy.d.ts.map +1 -0
  77. package/esm/policies/CargoLockPolicy.js +61 -0
  78. package/esm/policies/CargoLockPolicy.js.map +1 -0
  79. package/esm/policies/CargoTomlRequired.d.ts +34 -0
  80. package/esm/policies/CargoTomlRequired.d.ts.map +1 -0
  81. package/esm/policies/CargoTomlRequired.js +77 -0
  82. package/esm/policies/CargoTomlRequired.js.map +1 -0
  83. package/esm/policies/CargoTomlSorted.d.ts +20 -0
  84. package/esm/policies/CargoTomlSorted.d.ts.map +1 -0
  85. package/esm/policies/CargoTomlSorted.js +168 -0
  86. package/esm/policies/CargoTomlSorted.js.map +1 -0
  87. package/esm/policies/ConditionalScripts.d.ts +10 -8
  88. package/esm/policies/ConditionalScripts.d.ts.map +1 -1
  89. package/esm/policies/ConditionalScripts.js +27 -24
  90. package/esm/policies/ConditionalScripts.js.map +1 -1
  91. package/esm/policies/ExactScripts.d.ts +8 -6
  92. package/esm/policies/ExactScripts.d.ts.map +1 -1
  93. package/esm/policies/ExactScripts.js +18 -20
  94. package/esm/policies/ExactScripts.js.map +1 -1
  95. package/esm/policies/GleamDepVersions.d.ts +25 -0
  96. package/esm/policies/GleamDepVersions.d.ts.map +1 -0
  97. package/esm/policies/GleamDepVersions.js +67 -0
  98. package/esm/policies/GleamDepVersions.js.map +1 -0
  99. package/esm/policies/GleamDocExists.d.ts +24 -0
  100. package/esm/policies/GleamDocExists.d.ts.map +1 -0
  101. package/esm/policies/GleamDocExists.js +39 -0
  102. package/esm/policies/GleamDocExists.js.map +1 -0
  103. package/esm/policies/GleamInternalModulesConfigured.d.ts +21 -0
  104. package/esm/policies/GleamInternalModulesConfigured.d.ts.map +1 -0
  105. package/esm/policies/GleamInternalModulesConfigured.js +32 -0
  106. package/esm/policies/GleamInternalModulesConfigured.js.map +1 -0
  107. package/esm/policies/GleamLicenceConfigured.d.ts +29 -0
  108. package/esm/policies/GleamLicenceConfigured.d.ts.map +1 -0
  109. package/esm/policies/GleamLicenceConfigured.js +36 -0
  110. package/esm/policies/GleamLicenceConfigured.js.map +1 -0
  111. package/esm/policies/GleamManifestCommitted.d.ts +16 -0
  112. package/esm/policies/GleamManifestCommitted.d.ts.map +1 -0
  113. package/esm/policies/GleamManifestCommitted.js +27 -0
  114. package/esm/policies/GleamManifestCommitted.js.map +1 -0
  115. package/esm/policies/GleamMonorepoConsistency.d.ts +38 -0
  116. package/esm/policies/GleamMonorepoConsistency.d.ts.map +1 -0
  117. package/esm/policies/GleamMonorepoConsistency.js +74 -0
  118. package/esm/policies/GleamMonorepoConsistency.js.map +1 -0
  119. package/esm/policies/GleamNameRestrictions.d.ts +25 -0
  120. package/esm/policies/GleamNameRestrictions.d.ts.map +1 -0
  121. package/esm/policies/GleamNameRestrictions.js +44 -0
  122. package/esm/policies/GleamNameRestrictions.js.map +1 -0
  123. package/esm/policies/GleamNoPathDepsInPublished.d.ts +22 -0
  124. package/esm/policies/GleamNoPathDepsInPublished.d.ts.map +1 -0
  125. package/esm/policies/GleamNoPathDepsInPublished.js +43 -0
  126. package/esm/policies/GleamNoPathDepsInPublished.js.map +1 -0
  127. package/esm/policies/GleamPathDepsValid.d.ts +9 -0
  128. package/esm/policies/GleamPathDepsValid.d.ts.map +1 -0
  129. package/esm/policies/GleamPathDepsValid.js +59 -0
  130. package/esm/policies/GleamPathDepsValid.js.map +1 -0
  131. package/esm/policies/GleamProjectStructure.d.ts +32 -0
  132. package/esm/policies/GleamProjectStructure.d.ts.map +1 -0
  133. package/esm/policies/GleamProjectStructure.js +32 -0
  134. package/esm/policies/GleamProjectStructure.js.map +1 -0
  135. package/esm/policies/GleamSharedDependencyVersions.d.ts +37 -0
  136. package/esm/policies/GleamSharedDependencyVersions.d.ts.map +1 -0
  137. package/esm/policies/GleamSharedDependencyVersions.js +101 -0
  138. package/esm/policies/GleamSharedDependencyVersions.js.map +1 -0
  139. package/esm/policies/GleamTomlRequired.d.ts +30 -0
  140. package/esm/policies/GleamTomlRequired.d.ts.map +1 -0
  141. package/esm/policies/GleamTomlRequired.js +37 -0
  142. package/esm/policies/GleamTomlRequired.js.map +1 -0
  143. package/esm/policies/GleamTomlSorted.d.ts +20 -0
  144. package/esm/policies/GleamTomlSorted.d.ts.map +1 -0
  145. package/esm/policies/GleamTomlSorted.js +157 -0
  146. package/esm/policies/GleamTomlSorted.js.map +1 -0
  147. package/esm/policies/GleamVersionConstraint.d.ts +20 -0
  148. package/esm/policies/GleamVersionConstraint.d.ts.map +1 -0
  149. package/esm/policies/GleamVersionConstraint.js +68 -0
  150. package/esm/policies/GleamVersionConstraint.js.map +1 -0
  151. package/esm/policies/HtmlFileHeaders.d.ts +4 -2
  152. package/esm/policies/HtmlFileHeaders.d.ts.map +1 -1
  153. package/esm/policies/HtmlFileHeaders.js +2 -2
  154. package/esm/policies/HtmlFileHeaders.js.map +1 -1
  155. package/esm/policies/JsTsFileHeaders.d.ts +4 -2
  156. package/esm/policies/JsTsFileHeaders.d.ts.map +1 -1
  157. package/esm/policies/JsTsFileHeaders.js +1 -1
  158. package/esm/policies/JsTsFileHeaders.js.map +1 -1
  159. package/esm/policies/LicenseFileExists.d.ts +10 -4
  160. package/esm/policies/LicenseFileExists.d.ts.map +1 -1
  161. package/esm/policies/LicenseFileExists.js +27 -20
  162. package/esm/policies/LicenseFileExists.js.map +1 -1
  163. package/esm/policies/MutuallyExclusiveScripts.d.ts +8 -6
  164. package/esm/policies/MutuallyExclusiveScripts.d.ts.map +1 -1
  165. package/esm/policies/MutuallyExclusiveScripts.js +9 -13
  166. package/esm/policies/MutuallyExclusiveScripts.js.map +1 -1
  167. package/esm/policies/NoBuildDirectory.d.ts +15 -0
  168. package/esm/policies/NoBuildDirectory.d.ts.map +1 -0
  169. package/esm/policies/NoBuildDirectory.js +24 -0
  170. package/esm/policies/NoBuildDirectory.js.map +1 -0
  171. package/esm/policies/NoJsFileExtensions.d.ts +9 -3
  172. package/esm/policies/NoJsFileExtensions.d.ts.map +1 -1
  173. package/esm/policies/NoJsFileExtensions.js +9 -14
  174. package/esm/policies/NoJsFileExtensions.js.map +1 -1
  175. package/esm/policies/NoLargeBinaryFiles.d.ts +9 -4
  176. package/esm/policies/NoLargeBinaryFiles.d.ts.map +1 -1
  177. package/esm/policies/NoLargeBinaryFiles.js +10 -16
  178. package/esm/policies/NoLargeBinaryFiles.js.map +1 -1
  179. package/esm/policies/NoPrivateWorkspaceDependencies.d.ts +10 -6
  180. package/esm/policies/NoPrivateWorkspaceDependencies.d.ts.map +1 -1
  181. package/esm/policies/NoPrivateWorkspaceDependencies.js +12 -14
  182. package/esm/policies/NoPrivateWorkspaceDependencies.js.map +1 -1
  183. package/esm/policies/NoTargetArtifacts.d.ts +14 -0
  184. package/esm/policies/NoTargetArtifacts.d.ts.map +1 -0
  185. package/esm/policies/NoTargetArtifacts.js +37 -0
  186. package/esm/policies/NoTargetArtifacts.js.map +1 -0
  187. package/esm/policies/NoUnsafeWithoutJustification.d.ts +31 -0
  188. package/esm/policies/NoUnsafeWithoutJustification.d.ts.map +1 -0
  189. package/esm/policies/NoUnsafeWithoutJustification.js +79 -0
  190. package/esm/policies/NoUnsafeWithoutJustification.js.map +1 -0
  191. package/esm/policies/NoWildcardDependencies.d.ts +30 -0
  192. package/esm/policies/NoWildcardDependencies.d.ts.map +1 -0
  193. package/esm/policies/NoWildcardDependencies.js +83 -0
  194. package/esm/policies/NoWildcardDependencies.js.map +1 -0
  195. package/esm/policies/PackageAllowedScopes.d.ts +9 -5
  196. package/esm/policies/PackageAllowedScopes.d.ts.map +1 -1
  197. package/esm/policies/PackageAllowedScopes.js +15 -16
  198. package/esm/policies/PackageAllowedScopes.js.map +1 -1
  199. package/esm/policies/PackageEsmType.d.ts +7 -5
  200. package/esm/policies/PackageEsmType.d.ts.map +1 -1
  201. package/esm/policies/PackageEsmType.js +38 -36
  202. package/esm/policies/PackageEsmType.js.map +1 -1
  203. package/esm/policies/PackageFolderName.d.ts +8 -6
  204. package/esm/policies/PackageFolderName.d.ts.map +1 -1
  205. package/esm/policies/PackageFolderName.js +13 -16
  206. package/esm/policies/PackageFolderName.js.map +1 -1
  207. package/esm/policies/PackageJsonProperties.d.ts +5 -3
  208. package/esm/policies/PackageJsonProperties.d.ts.map +1 -1
  209. package/esm/policies/PackageJsonProperties.js +18 -21
  210. package/esm/policies/PackageJsonProperties.js.map +1 -1
  211. package/esm/policies/PackageJsonRepoDirectoryProperty.d.ts +2 -7
  212. package/esm/policies/PackageJsonRepoDirectoryProperty.d.ts.map +1 -1
  213. package/esm/policies/PackageJsonRepoDirectoryProperty.js +29 -42
  214. package/esm/policies/PackageJsonRepoDirectoryProperty.js.map +1 -1
  215. package/esm/policies/PackageJsonSorted.d.ts +2 -2
  216. package/esm/policies/PackageJsonSorted.d.ts.map +1 -1
  217. package/esm/policies/PackageJsonSorted.js +51 -31
  218. package/esm/policies/PackageJsonSorted.js.map +1 -1
  219. package/esm/policies/PackageLicense.d.ts +4 -4
  220. package/esm/policies/PackageLicense.d.ts.map +1 -1
  221. package/esm/policies/PackageLicense.js +32 -54
  222. package/esm/policies/PackageLicense.js.map +1 -1
  223. package/esm/policies/PackagePrivateField.d.ts +12 -8
  224. package/esm/policies/PackagePrivateField.d.ts.map +1 -1
  225. package/esm/policies/PackagePrivateField.js +34 -25
  226. package/esm/policies/PackagePrivateField.js.map +1 -1
  227. package/esm/policies/PackageReadme.d.ts +6 -5
  228. package/esm/policies/PackageReadme.d.ts.map +1 -1
  229. package/esm/policies/PackageReadme.js +24 -61
  230. package/esm/policies/PackageReadme.js.map +1 -1
  231. package/esm/policies/PackageScripts.d.ts +26 -22
  232. package/esm/policies/PackageScripts.d.ts.map +1 -1
  233. package/esm/policies/PackageScripts.js +42 -38
  234. package/esm/policies/PackageScripts.js.map +1 -1
  235. package/esm/policies/PackageTestScripts.d.ts +10 -6
  236. package/esm/policies/PackageTestScripts.d.ts.map +1 -1
  237. package/esm/policies/PackageTestScripts.js +17 -19
  238. package/esm/policies/PackageTestScripts.js.map +1 -1
  239. package/esm/policies/PublicApiDocumented.d.ts +21 -0
  240. package/esm/policies/PublicApiDocumented.d.ts.map +1 -0
  241. package/esm/policies/PublicApiDocumented.js +38 -0
  242. package/esm/policies/PublicApiDocumented.js.map +1 -0
  243. package/esm/policies/RequiredGitignorePatterns.d.ts +11 -4
  244. package/esm/policies/RequiredGitignorePatterns.d.ts.map +1 -1
  245. package/esm/policies/RequiredGitignorePatterns.js +29 -36
  246. package/esm/policies/RequiredGitignorePatterns.js.map +1 -1
  247. package/esm/policies/RequiredScripts.d.ts +9 -7
  248. package/esm/policies/RequiredScripts.d.ts.map +1 -1
  249. package/esm/policies/RequiredScripts.js +27 -26
  250. package/esm/policies/RequiredScripts.js.map +1 -1
  251. package/esm/policies/RustDocExists.d.ts +24 -0
  252. package/esm/policies/RustDocExists.d.ts.map +1 -0
  253. package/esm/policies/RustDocExists.js +49 -0
  254. package/esm/policies/RustDocExists.js.map +1 -0
  255. package/esm/policies/RustToolchainExists.d.ts +27 -0
  256. package/esm/policies/RustToolchainExists.d.ts.map +1 -0
  257. package/esm/policies/RustToolchainExists.js +28 -0
  258. package/esm/policies/RustToolchainExists.js.map +1 -0
  259. package/esm/policies/RustfmtConfigExists.d.ts +27 -0
  260. package/esm/policies/RustfmtConfigExists.d.ts.map +1 -0
  261. package/esm/policies/RustfmtConfigExists.js +28 -0
  262. package/esm/policies/RustfmtConfigExists.js.map +1 -0
  263. package/esm/policies/ScriptContains.d.ts +9 -7
  264. package/esm/policies/ScriptContains.d.ts.map +1 -1
  265. package/esm/policies/ScriptContains.js +9 -13
  266. package/esm/policies/ScriptContains.js.map +1 -1
  267. package/esm/policies/SharedDependencyVersions.d.ts +29 -0
  268. package/esm/policies/SharedDependencyVersions.d.ts.map +1 -0
  269. package/esm/policies/SharedDependencyVersions.js +143 -0
  270. package/esm/policies/SharedDependencyVersions.js.map +1 -0
  271. package/esm/policies/WorkspaceInheritance.d.ts +31 -0
  272. package/esm/policies/WorkspaceInheritance.d.ts.map +1 -0
  273. package/esm/policies/WorkspaceInheritance.js +93 -0
  274. package/esm/policies/WorkspaceInheritance.js.map +1 -0
  275. package/esm/policies/WorkspaceMembersValid.d.ts +27 -0
  276. package/esm/policies/WorkspaceMembersValid.d.ts.map +1 -0
  277. package/esm/policies/WorkspaceMembersValid.js +87 -0
  278. package/esm/policies/WorkspaceMembersValid.js.map +1 -0
  279. package/esm/policies/constants.d.ts +8 -0
  280. package/esm/policies/constants.d.ts.map +1 -1
  281. package/esm/policies/constants.js +9 -1
  282. package/esm/policies/constants.js.map +1 -1
  283. package/esm/policies.d.ts +43 -5
  284. package/esm/policies.d.ts.map +1 -1
  285. package/esm/policies.js +63 -6
  286. package/esm/policies.js.map +1 -1
  287. package/esm/policy.d.ts +65 -269
  288. package/esm/policy.d.ts.map +1 -1
  289. package/esm/policy.js +1 -122
  290. package/esm/policy.js.map +1 -1
  291. package/esm/policyDefiners/defineCargoPolicy.d.ts +82 -0
  292. package/esm/policyDefiners/defineCargoPolicy.d.ts.map +1 -0
  293. package/esm/policyDefiners/defineCargoPolicy.js +42 -0
  294. package/esm/policyDefiners/defineCargoPolicy.js.map +1 -0
  295. package/esm/policyDefiners/defineFileHeaderPolicy.d.ts +27 -14
  296. package/esm/policyDefiners/defineFileHeaderPolicy.d.ts.map +1 -1
  297. package/esm/policyDefiners/defineFileHeaderPolicy.js +19 -39
  298. package/esm/policyDefiners/defineFileHeaderPolicy.js.map +1 -1
  299. package/esm/policyDefiners/defineGleamPolicy.d.ts +81 -0
  300. package/esm/policyDefiners/defineGleamPolicy.d.ts.map +1 -0
  301. package/esm/policyDefiners/defineGleamPolicy.js +42 -0
  302. package/esm/policyDefiners/defineGleamPolicy.js.map +1 -0
  303. package/esm/policyDefiners/definePackagePolicy.d.ts +24 -13
  304. package/esm/policyDefiners/definePackagePolicy.d.ts.map +1 -1
  305. package/esm/policyDefiners/definePackagePolicy.js +9 -32
  306. package/esm/policyDefiners/definePackagePolicy.js.map +1 -1
  307. package/esm/policyDefiners/spdxValidator.d.ts +66 -0
  308. package/esm/policyDefiners/spdxValidator.d.ts.map +1 -0
  309. package/esm/policyDefiners/spdxValidator.js +139 -0
  310. package/esm/policyDefiners/spdxValidator.js.map +1 -0
  311. package/esm/policyDefiners/tomlParser.d.ts +8 -0
  312. package/esm/policyDefiners/tomlParser.d.ts.map +1 -0
  313. package/esm/policyDefiners/tomlParser.js +17 -0
  314. package/esm/policyDefiners/tomlParser.js.map +1 -0
  315. package/esm/policyExecution.d.ts +19 -0
  316. package/esm/policyExecution.d.ts.map +1 -0
  317. package/esm/policyExecution.js +224 -0
  318. package/esm/policyExecution.js.map +1 -0
  319. package/esm/repositoryFiles.d.ts +4 -0
  320. package/esm/repositoryFiles.d.ts.map +1 -0
  321. package/esm/repositoryFiles.js +8 -0
  322. package/esm/repositoryFiles.js.map +1 -0
  323. package/esm/runner.d.ts +85 -0
  324. package/esm/runner.d.ts.map +1 -0
  325. package/esm/runner.js +189 -0
  326. package/esm/runner.js.map +1 -0
  327. package/esm/settlePolicyPromise.d.ts +4 -0
  328. package/esm/settlePolicyPromise.d.ts.map +1 -0
  329. package/esm/settlePolicyPromise.js +10 -0
  330. package/esm/settlePolicyPromise.js.map +1 -0
  331. package/esm/tsdoc-metadata.json +1 -1
  332. package/esm/utils/safePaths.d.ts +9 -0
  333. package/esm/utils/safePaths.d.ts.map +1 -0
  334. package/esm/utils/safePaths.js +40 -0
  335. package/esm/utils/safePaths.js.map +1 -0
  336. package/oclif.manifest.json +117 -3
  337. package/package.json +66 -36
  338. package/scripts/benchmark.mjs +341 -0
  339. package/scripts/postinstall.mjs +154 -0
  340. package/sidecar/sidecar.mjs +399 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safePaths.d.ts","sourceRoot":"","sources":["../../src/utils/safePaths.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe1E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC5C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACd,MAAM,CAaR"}
@@ -0,0 +1,40 @@
1
+ import { isAbsolute, normalize, relative, resolve } from "pathe";
2
+ function normalizeRoot(root) {
3
+ return normalize(resolve(root));
4
+ }
5
+ function isPathWithinRoot(rootPath, candidatePath) {
6
+ const relativePath = normalize(relative(rootPath, candidatePath));
7
+ if (relativePath === "" || relativePath === ".") {
8
+ return true;
9
+ }
10
+ return (!isAbsolute(relativePath) &&
11
+ relativePath !== ".." &&
12
+ !relativePath.startsWith("../"));
13
+ }
14
+ /**
15
+ * Resolves a candidate file path against the repository root and verifies it does not escape that root.
16
+ */
17
+ export function resolveRepoFilePath(root, filePath) {
18
+ if (filePath.trim().length === 0) {
19
+ throw new Error("File path cannot be empty.");
20
+ }
21
+ const rootPath = normalizeRoot(root);
22
+ const candidatePath = normalize(resolve(rootPath, filePath));
23
+ if (!isPathWithinRoot(rootPath, candidatePath)) {
24
+ throw new Error(`File path must be within repository root. Received: ${filePath}`);
25
+ }
26
+ return candidatePath;
27
+ }
28
+ /**
29
+ * Converts an input path into a normalized repository-relative path after validating root containment.
30
+ */
31
+ export function normalizeRepoRelativeFilePath(root, filePath) {
32
+ const rootPath = normalizeRoot(root);
33
+ const absolutePath = resolveRepoFilePath(rootPath, filePath);
34
+ const relativePath = normalize(relative(rootPath, absolutePath)).replace(/\\/g, "/");
35
+ if (relativePath === "" || relativePath === ".") {
36
+ throw new Error("File path resolves to repository root instead of a file.");
37
+ }
38
+ return relativePath;
39
+ }
40
+ //# sourceMappingURL=safePaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safePaths.js","sourceRoot":"","sources":["../../src/utils/safePaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEjE,SAAS,aAAa,CAAC,IAAY;IAClC,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,aAAqB;IAChE,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAClE,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,CACN,CAAC,UAAU,CAAC,YAAY,CAAC;QACzB,YAAY,KAAK,IAAI;QACrB,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,QAAgB;IACjE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACd,uDAAuD,QAAQ,EAAE,CACjE,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC5C,IAAY,EACZ,QAAgB;IAEhB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CACvE,KAAK,EACL,GAAG,CACH,CAAC;IAEF,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC","sourcesContent":["import { isAbsolute, normalize, relative, resolve } from \"pathe\";\n\nfunction normalizeRoot(root: string): string {\n\treturn normalize(resolve(root));\n}\n\nfunction isPathWithinRoot(rootPath: string, candidatePath: string): boolean {\n\tconst relativePath = normalize(relative(rootPath, candidatePath));\n\tif (relativePath === \"\" || relativePath === \".\") {\n\t\treturn true;\n\t}\n\treturn (\n\t\t!isAbsolute(relativePath) &&\n\t\trelativePath !== \"..\" &&\n\t\t!relativePath.startsWith(\"../\")\n\t);\n}\n\n/**\n * Resolves a candidate file path against the repository root and verifies it does not escape that root.\n */\nexport function resolveRepoFilePath(root: string, filePath: string): string {\n\tif (filePath.trim().length === 0) {\n\t\tthrow new Error(\"File path cannot be empty.\");\n\t}\n\n\tconst rootPath = normalizeRoot(root);\n\tconst candidatePath = normalize(resolve(rootPath, filePath));\n\n\tif (!isPathWithinRoot(rootPath, candidatePath)) {\n\t\tthrow new Error(\n\t\t\t`File path must be within repository root. Received: ${filePath}`,\n\t\t);\n\t}\n\n\treturn candidatePath;\n}\n\n/**\n * Converts an input path into a normalized repository-relative path after validating root containment.\n */\nexport function normalizeRepoRelativeFilePath(\n\troot: string,\n\tfilePath: string,\n): string {\n\tconst rootPath = normalizeRoot(root);\n\tconst absolutePath = resolveRepoFilePath(rootPath, filePath);\n\tconst relativePath = normalize(relative(rootPath, absolutePath)).replace(\n\t\t/\\\\/g,\n\t\t\"/\",\n\t);\n\n\tif (relativePath === \"\" || relativePath === \".\") {\n\t\tthrow new Error(\"File path resolves to repository root instead of a file.\");\n\t}\n\n\treturn relativePath;\n}\n"]}
@@ -1,8 +1,114 @@
1
1
  {
2
2
  "commands": {
3
+ "check-native": {
4
+ "aliases": [],
5
+ "args": {},
6
+ "description": "Runs the Rust-based repopo-core engine with the Node.js sidecar. Rust handles file matching, scheduling and reporting; the sidecar shares per-policy contracts with 'check'. Repository policies always run with the full repository inventory, including with --stdin. With --fix, repository policies can modify files outside the stdin selection.",
7
+ "flags": {
8
+ "concurrency": {
9
+ "description": "Maximum concurrent files in read-only checks. Fixes remain sequential.",
10
+ "name": "concurrency",
11
+ "default": 8,
12
+ "hasDynamicHelp": false,
13
+ "multiple": false,
14
+ "type": "option"
15
+ },
16
+ "fix": {
17
+ "aliases": [
18
+ "resolve"
19
+ ],
20
+ "char": "f",
21
+ "description": "Fix errors if possible.",
22
+ "name": "fix",
23
+ "required": false,
24
+ "allowNo": false,
25
+ "type": "boolean"
26
+ },
27
+ "stdin": {
28
+ "description": "Read list of files from stdin.",
29
+ "name": "stdin",
30
+ "required": false,
31
+ "allowNo": false,
32
+ "type": "boolean"
33
+ },
34
+ "verbose": {
35
+ "char": "v",
36
+ "description": "Show verbose output including per-policy timing.",
37
+ "name": "verbose",
38
+ "required": false,
39
+ "allowNo": false,
40
+ "type": "boolean"
41
+ },
42
+ "quiet": {
43
+ "char": "q",
44
+ "description": "Suppress all output except errors.",
45
+ "name": "quiet",
46
+ "required": false,
47
+ "allowNo": false,
48
+ "type": "boolean"
49
+ },
50
+ "config": {
51
+ "char": "c",
52
+ "description": "Path to the config file.",
53
+ "name": "config",
54
+ "required": false,
55
+ "hasDynamicHelp": false,
56
+ "multiple": false,
57
+ "type": "option"
58
+ },
59
+ "sidecar-path": {
60
+ "description": "Path to the Node.js sidecar script.",
61
+ "env": "REPOPO_SIDECAR_PATH",
62
+ "name": "sidecar-path",
63
+ "required": false,
64
+ "hasDynamicHelp": false,
65
+ "multiple": false,
66
+ "type": "option"
67
+ },
68
+ "binary-path": {
69
+ "description": "Path to the repopo-core Rust binary.",
70
+ "env": "REPOPO_CORE_PATH",
71
+ "name": "binary-path",
72
+ "required": false,
73
+ "hasDynamicHelp": false,
74
+ "multiple": false,
75
+ "type": "option"
76
+ },
77
+ "runtime": {
78
+ "description": "JS runtime for the sidecar process (auto, node, bun).",
79
+ "env": "REPOPO_RUNTIME",
80
+ "name": "runtime",
81
+ "required": false,
82
+ "hasDynamicHelp": false,
83
+ "multiple": false,
84
+ "options": [
85
+ "auto",
86
+ "node",
87
+ "bun"
88
+ ],
89
+ "type": "option"
90
+ }
91
+ },
92
+ "hasDynamicHelp": false,
93
+ "hiddenAliases": [],
94
+ "id": "check-native",
95
+ "pluginAlias": "repopo",
96
+ "pluginName": "repopo",
97
+ "pluginType": "core",
98
+ "strict": true,
99
+ "summary": "Checks and applies policies using the Rust engine.",
100
+ "enableJsonFlag": false,
101
+ "isESM": true,
102
+ "relativePath": [
103
+ "esm",
104
+ "commands",
105
+ "check-native.js"
106
+ ]
107
+ },
3
108
  "check": {
4
109
  "aliases": [],
5
110
  "args": {},
111
+ "description": "File policies check selected files. Repository policies always run with the full repository file inventory, including with --stdin. With --fix, repository policies can modify files outside the stdin selection.",
6
112
  "flags": {
7
113
  "verbose": {
8
114
  "char": "v",
@@ -27,6 +133,14 @@
27
133
  "allowNo": false,
28
134
  "type": "boolean"
29
135
  },
136
+ "concurrency": {
137
+ "description": "Maximum concurrent files in read-only checks. Fixes remain sequential.",
138
+ "name": "concurrency",
139
+ "default": 8,
140
+ "hasDynamicHelp": false,
141
+ "multiple": false,
142
+ "type": "option"
143
+ },
30
144
  "fix": {
31
145
  "aliases": [
32
146
  "resolve"
@@ -46,7 +160,7 @@
46
160
  "type": "boolean"
47
161
  },
48
162
  "config": {
49
- "description": "The path to a configuration file.",
163
+ "description": "Path to configuration file.",
50
164
  "helpGroup": "CONFIGURATION",
51
165
  "hidden": true,
52
166
  "name": "config",
@@ -99,7 +213,7 @@
99
213
  "type": "boolean"
100
214
  },
101
215
  "config": {
102
- "description": "The path to a configuration file.",
216
+ "description": "Path to configuration file.",
103
217
  "helpGroup": "CONFIGURATION",
104
218
  "hidden": true,
105
219
  "name": "config",
@@ -125,5 +239,5 @@
125
239
  ]
126
240
  }
127
241
  },
128
- "version": "0.10.0"
242
+ "version": "0.13.0"
129
243
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "repopo",
3
- "version": "0.10.0",
3
+ "version": "0.13.0",
4
4
  "description": "Enforce policies on all or some of the files in a git repository.",
5
5
  "keywords": [
6
6
  "policy",
@@ -39,6 +39,8 @@
39
39
  "/bin",
40
40
  "/oclif.manifest.json",
41
41
  "/esm",
42
+ "/scripts",
43
+ "/sidecar",
42
44
  "/THIRD-PARTY-LICENSES.txt"
43
45
  ],
44
46
  "oclif": {
@@ -61,81 +63,109 @@
61
63
  "repositoryPrefix": "<%- repo %>/blob/main/packages/repopo/<%- commandPath %>"
62
64
  },
63
65
  "dependencies": {
64
- "@fluid-tools/build-infrastructure": "~0.63.0",
65
- "@oclif/core": "^4.8.0",
66
- "@oclif/plugin-help": "^6.2.36",
67
- "@rushstack/node-core-library": "^5.19.0",
68
- "consola": "^3.4.0",
69
- "defu": "^6.1.4",
70
- "effection": "^4.0.0",
71
- "jsonfile": "^6.2.0",
72
- "microdiff": "^1.5.0",
66
+ "@fluid-tools/build-infrastructure": "~0.68.0",
67
+ "@oclif/core": "^5.1.9",
68
+ "@oclif/plugin-help": "^7.0.5",
69
+ "@rushstack/node-core-library": "^5.25.1",
70
+ "@tylerbu/cli-api": "^0.11.0",
71
+ "@tylerbu/fundamentals": "^0.3.0",
72
+ "@tylerbu/lilconfig-loader-ts": "^0.1.3",
73
+ "consola": "^3.4.2",
74
+ "defu": "^6.1.7",
75
+ "effection": "^4.2.0",
76
+ "jsonfile": "^6.2.1",
77
+ "lilconfig": "^3.1.4",
78
+ "microdiff": "^1.6.0",
73
79
  "pathe": "^2.0.3",
74
80
  "picocolors": "^1.1.1",
75
- "picomatch": "^4.0.3",
76
- "resolve-workspace-root": "^2.0.0",
77
- "simple-git": "^3.30.0",
78
- "tinyglobby": "^0.2.15",
79
- "@tylerbu/cli-api": "^0.10.1",
80
- "@tylerbu/fundamentals": "^0.3.0"
81
+ "picomatch": "^4.0.7",
82
+ "resolve-workspace-root": "^2.0.1",
83
+ "simple-git": "^4.0.2",
84
+ "tinyglobby": "^0.2.17",
85
+ "type-fest": "^5.10.0"
81
86
  },
82
87
  "devDependencies": {
83
88
  "@biomejs/biome": "2.3.8",
84
- "@microsoft/api-extractor": "^7.56.0",
85
- "@oclif/plugin-command-snapshot": "^5.3.8",
86
- "@oclif/test": "^4.1.15",
89
+ "@microsoft/api-documenter": "^7.30.18",
90
+ "@microsoft/api-extractor": "^7.59.4",
91
+ "@oclif/plugin-command-snapshot": "^6.0.7",
92
+ "@oclif/test": "^5.0.3",
87
93
  "@types/jsonfile": "^6.1.4",
88
- "@types/node": "^20.19.25",
89
- "@types/picomatch": "^4.0.2",
94
+ "@types/node": "^26.6.5",
95
+ "@types/picomatch": "^4.0.3",
96
+ "@types/spdx-correct": "^3.1.3",
90
97
  "@types/tmp": "^0.2.6",
91
- "@vitest/coverage-v8": "^4.0.17",
92
- "generate-license-file": "^4.1.1",
93
- "oclif": "^4.22.50",
94
- "rimraf": "^6.1.2",
98
+ "@vitest/coverage-v8": "^5.0.5",
99
+ "generate-license-file": "^4.2.5",
100
+ "oclif": "^6.0.10",
101
+ "rimraf": "^6.1.3",
102
+ "smol-toml": "^1.9.1",
103
+ "spdx-correct": "^3.2.0",
95
104
  "tmp-promise": "^3.0.3",
96
105
  "ts-node": "^10.9.2",
97
- "type-fest": "^5.4.1",
98
- "typescript": "~5.9.3",
99
- "vitest": "^4.0.17"
106
+ "typescript": "~6.0.3",
107
+ "vitest": "^5.0.5"
100
108
  },
101
109
  "peerDependencies": {
102
- "sort-package-json": "*"
110
+ "smol-toml": "^1.0.0",
111
+ "sort-package-json": "*",
112
+ "spdx-correct": "^3.0.0"
103
113
  },
104
114
  "peerDependenciesMeta": {
115
+ "smol-toml": {
116
+ "optional": true
117
+ },
105
118
  "sort-package-json": {
106
119
  "optional": true
120
+ },
121
+ "spdx-correct": {
122
+ "optional": true
107
123
  }
108
124
  },
109
- "engines": {
110
- "node": ">=18.0.0"
111
- },
112
125
  "nx": {
113
126
  "targets": {
114
127
  "build": {
115
128
  "executor": "nx:noop"
116
129
  },
117
- "ci": {}
130
+ "ci": {},
131
+ "build:readme": {
132
+ "inputs": [
133
+ "sharedGlobals",
134
+ "{projectRoot}/package.json",
135
+ "{projectRoot}/oclif.manifest.json",
136
+ "{projectRoot}/README.md",
137
+ "{workspaceRoot}/packages/repopo-docs/src/content/docs/cli-reference.md"
138
+ ],
139
+ "outputs": [
140
+ "{projectRoot}/README.md",
141
+ "{projectRoot}/docs/**",
142
+ "{workspaceRoot}/packages/repopo-docs/src/content/docs/cli-reference.md"
143
+ ]
144
+ }
118
145
  }
119
146
  },
120
147
  "scripts": {
121
- "api:markdown": "api-documenter markdown -i _temp/api-extractor -o _temp/docs",
122
- "build:api": "api-extractor run --local",
148
+ "api:markdown": "rimraf _temp/docs && api-documenter markdown -i _temp/api-extractor/root -o _temp/docs/root && api-documenter markdown -i _temp/api-extractor/api -o _temp/docs/api && api-documenter markdown -i _temp/api-extractor/policies -o _temp/docs/policies",
149
+ "build:api": "rimraf _temp/api-extractor/root _temp/api-extractor/api _temp/api-extractor/policies && api-extractor run --local && api-extractor run --local --config api-extractor.api.json && api-extractor run --local --config api-extractor.policies.json",
123
150
  "build:compile": "tsc --project ./tsconfig.json",
124
151
  "build:manifest": "oclif manifest",
125
152
  "build:readme": "concurrently npm:readme:*",
153
+ "build:rust": "cargo build --manifest-path crates/core/Cargo.toml",
154
+ "build:rust:release": "cargo build --release --manifest-path crates/core/Cargo.toml",
126
155
  "check": "concurrently npm:check:format",
127
156
  "check:format": "biome check . --linter-enabled=false",
128
157
  "clean": "concurrently npm:clean:build npm:clean:manifest",
129
158
  "clean:build": "rimraf esm *.tsbuildinfo *.done.build.log",
130
159
  "clean:manifest": "rimraf oclif.manifest.json",
131
160
  "format": "biome check . --linter-enabled=false --write",
161
+ "postinstall": "node scripts/postinstall.mjs",
132
162
  "lint": "biome lint .",
133
163
  "lint:fix": "biome lint . --write",
134
164
  "readme:docs": "oclif readme --no-aliases --readme-path=../repopo-docs/src/content/docs/cli-reference.md",
135
165
  "readme:main": "oclif readme --no-aliases",
136
166
  "release:license": "generate-license-file -c ../../.generatelicensefile.cjs",
137
167
  "test": "vitest run",
138
- "test:coverage": "vitest run --coverage",
168
+ "test:coverage": "mkdir -p .coverage/vitest/.tmp && vitest run --coverage",
139
169
  "test:snapshots": "./bin/dev.js snapshot:compare --filepath test/commands/__snapshots__/commands.json",
140
170
  "test:watch": "vitest"
141
171
  }