@feiyoug/skill-lab 0.0.1 → 0.0.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 (465) hide show
  1. package/README.md +20 -21
  2. package/esm/analyzer/astgrep/client.d.ts +20 -8
  3. package/esm/analyzer/astgrep/client.d.ts.map +1 -1
  4. package/esm/analyzer/astgrep/client.js +58 -31
  5. package/esm/analyzer/config/default.d.ts +8 -0
  6. package/esm/analyzer/config/default.d.ts.map +1 -0
  7. package/esm/analyzer/config/default.js +91 -0
  8. package/esm/analyzer/config/helpers.d.ts +8 -0
  9. package/esm/analyzer/config/helpers.d.ts.map +1 -0
  10. package/esm/analyzer/config/helpers.js +72 -0
  11. package/esm/analyzer/config/mod.d.ts +4 -0
  12. package/esm/analyzer/config/mod.d.ts.map +1 -0
  13. package/esm/analyzer/config/mod.js +3 -0
  14. package/esm/analyzer/config/types.d.ts +58 -0
  15. package/esm/analyzer/config/types.d.ts.map +1 -0
  16. package/esm/analyzer/{config.js → config/types.js} +0 -28
  17. package/esm/analyzer/logging.d.ts +3 -0
  18. package/esm/analyzer/logging.d.ts.map +1 -0
  19. package/esm/analyzer/logging.js +6 -0
  20. package/esm/analyzer/mod.d.ts +12 -5
  21. package/esm/analyzer/mod.d.ts.map +1 -1
  22. package/esm/analyzer/mod.js +25 -12
  23. package/esm/analyzer/result.d.ts +35 -0
  24. package/esm/analyzer/result.d.ts.map +1 -0
  25. package/esm/analyzer/result.js +311 -0
  26. package/esm/analyzer/rules/bash/commands/mod.d.ts +1 -0
  27. package/esm/analyzer/rules/bash/commands/mod.d.ts.map +1 -1
  28. package/esm/analyzer/rules/bash/commands/mod.js +3 -0
  29. package/esm/analyzer/rules/bash/commands/pip.d.ts +3 -0
  30. package/esm/analyzer/rules/bash/commands/pip.d.ts.map +1 -0
  31. package/esm/analyzer/rules/bash/commands/pip.js +14 -0
  32. package/esm/analyzer/rules/bash/extractFileRefs.d.ts +1 -1
  33. package/esm/analyzer/rules/bash/extractFileRefs.d.ts.map +1 -1
  34. package/esm/analyzer/rules/bash/extractFileRefs.js +2 -2
  35. package/esm/analyzer/rules/bash/inline-command-classifier.d.ts +1 -1
  36. package/esm/analyzer/rules/bash/inline-command-classifier.d.ts.map +1 -1
  37. package/esm/analyzer/rules/bash/inline-command-classifier.js +4 -4
  38. package/esm/analyzer/rules/javascript/extractFileRefs.d.ts +3 -4
  39. package/esm/analyzer/rules/javascript/extractFileRefs.d.ts.map +1 -1
  40. package/esm/analyzer/rules/javascript/extractFileRefs.js +3 -4
  41. package/esm/analyzer/rules/markdown/extractCodeBlocks.d.ts.map +1 -1
  42. package/esm/analyzer/rules/markdown/extractCodeBlocks.js +6 -3
  43. package/esm/analyzer/rules/markdown/extractFileRefs.d.ts.map +1 -1
  44. package/esm/analyzer/rules/markdown/extractFileRefs.js +2 -0
  45. package/esm/analyzer/rules/python/extractFileRefs.d.ts +1 -1
  46. package/esm/analyzer/rules/python/extractFileRefs.d.ts.map +1 -1
  47. package/esm/analyzer/rules/python/extractFileRefs.js +2 -2
  48. package/esm/analyzer/steps/001-discovery/discover-files.d.ts +4 -0
  49. package/esm/analyzer/steps/001-discovery/discover-files.d.ts.map +1 -1
  50. package/esm/analyzer/steps/001-discovery/discover-files.js +18 -2
  51. package/esm/analyzer/steps/001-discovery/mod.d.ts.map +1 -1
  52. package/esm/analyzer/steps/001-discovery/mod.js +39 -9
  53. package/esm/analyzer/steps/002-permissions/mod.d.ts.map +1 -1
  54. package/esm/analyzer/steps/002-permissions/mod.js +156 -73
  55. package/esm/analyzer/steps/002-permissions/scan-file.d.ts +1 -1
  56. package/esm/analyzer/steps/002-permissions/scan-file.d.ts.map +1 -1
  57. package/esm/analyzer/steps/002-permissions/scan-file.js +40 -5
  58. package/esm/analyzer/steps/002-permissions/seed-frontmatter.js +2 -2
  59. package/esm/analyzer/steps/003-risks/dep-risks.d.ts +3 -0
  60. package/esm/analyzer/steps/003-risks/dep-risks.d.ts.map +1 -0
  61. package/esm/analyzer/steps/003-risks/dep-risks.js +74 -0
  62. package/esm/analyzer/steps/003-risks/helpers.d.ts +1 -0
  63. package/esm/analyzer/steps/003-risks/helpers.d.ts.map +1 -1
  64. package/esm/analyzer/steps/003-risks/helpers.js +1 -0
  65. package/esm/analyzer/steps/003-risks/mod.d.ts +3 -2
  66. package/esm/analyzer/steps/003-risks/mod.d.ts.map +1 -1
  67. package/esm/analyzer/steps/003-risks/mod.js +41 -4
  68. package/esm/analyzer/steps/003-risks/policy.d.ts +7 -0
  69. package/esm/analyzer/steps/003-risks/policy.d.ts.map +1 -0
  70. package/esm/analyzer/steps/003-risks/policy.js +23 -0
  71. package/esm/analyzer/steps/003-risks/rule-mapped.d.ts +2 -2
  72. package/esm/analyzer/steps/003-risks/rule-mapped.d.ts.map +1 -1
  73. package/esm/analyzer/steps/003-risks/rule-mapped.js +83 -2
  74. package/esm/analyzer/steps/003-risks/scoring.d.ts +9 -1
  75. package/esm/analyzer/steps/003-risks/scoring.d.ts.map +1 -1
  76. package/esm/analyzer/steps/003-risks/scoring.js +55 -42
  77. package/esm/analyzer/treesitter/client.d.ts +31 -0
  78. package/esm/analyzer/treesitter/client.d.ts.map +1 -0
  79. package/esm/analyzer/{treesiter → treesitter}/client.js +43 -39
  80. package/esm/analyzer/treesitter/registry.d.ts +73 -0
  81. package/esm/analyzer/treesitter/registry.d.ts.map +1 -0
  82. package/esm/analyzer/treesitter/registry.js +165 -0
  83. package/esm/analyzer/types.d.ts +14 -28
  84. package/esm/analyzer/types.d.ts.map +1 -1
  85. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/deps.d.ts +3 -0
  86. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/deps.d.ts.map +1 -0
  87. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/deps.js +3 -0
  88. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/mod.d.ts +93 -0
  89. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/mod.d.ts.map +1 -0
  90. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/mod.js +297 -0
  91. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/multi.d.ts +84 -0
  92. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/multi.d.ts.map +1 -0
  93. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/multi.js +268 -0
  94. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/time.d.ts +18 -0
  95. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/time.d.ts.map +1 -0
  96. package/esm/deps/jsr.io/@deno-library/progress/1.5.1/time.js +45 -0
  97. package/esm/deps/jsr.io/@std/fmt/1.0.3/colors.d.ts +700 -0
  98. package/esm/deps/jsr.io/@std/fmt/1.0.3/colors.d.ts.map +1 -0
  99. package/esm/deps/jsr.io/@std/fmt/1.0.3/colors.js +903 -0
  100. package/esm/deps/jsr.io/@std/io/0.225.0/types.d.ts +146 -0
  101. package/esm/deps/jsr.io/@std/io/0.225.0/types.d.ts.map +1 -0
  102. package/esm/deps/jsr.io/@std/io/0.225.0/types.js +15 -0
  103. package/esm/deps/jsr.io/@std/io/0.225.0/write_all.d.ts +51 -0
  104. package/esm/deps/jsr.io/@std/io/0.225.0/write_all.d.ts.map +1 -0
  105. package/esm/deps/jsr.io/@std/io/0.225.0/write_all.js +61 -0
  106. package/esm/shared/deep_merge.d.ts +12 -0
  107. package/esm/shared/deep_merge.d.ts.map +1 -0
  108. package/esm/shared/deep_merge.js +49 -0
  109. package/esm/shared/mod.d.ts +1 -0
  110. package/esm/shared/mod.d.ts.map +1 -1
  111. package/esm/shared/mod.js +1 -0
  112. package/esm/shared/types/filetypes.d.ts +2 -2
  113. package/esm/shared/types/filetypes.d.ts.map +1 -1
  114. package/esm/shared/types/permissions.d.ts +1 -1
  115. package/esm/shared/types/permissions.d.ts.map +1 -1
  116. package/esm/shared/types/risks.d.ts +4 -1
  117. package/esm/shared/types/risks.d.ts.map +1 -1
  118. package/esm/skillreader/types.d.ts +2 -2
  119. package/esm/skillreader/types.d.ts.map +1 -1
  120. package/esm/skillreader/types.js +2 -2
  121. package/package.json +1 -1
  122. package/script/analyzer/astgrep/client.d.ts +20 -8
  123. package/script/analyzer/astgrep/client.d.ts.map +1 -1
  124. package/script/analyzer/astgrep/client.js +58 -64
  125. package/script/analyzer/config/default.d.ts +8 -0
  126. package/script/analyzer/config/default.d.ts.map +1 -0
  127. package/script/analyzer/config/default.js +94 -0
  128. package/script/analyzer/config/helpers.d.ts +8 -0
  129. package/script/analyzer/config/helpers.d.ts.map +1 -0
  130. package/script/analyzer/config/helpers.js +76 -0
  131. package/script/analyzer/config/mod.d.ts +4 -0
  132. package/script/analyzer/config/mod.d.ts.map +1 -0
  133. package/script/analyzer/config/mod.js +21 -0
  134. package/script/analyzer/config/types.d.ts +58 -0
  135. package/script/analyzer/config/types.d.ts.map +1 -0
  136. package/script/analyzer/{config.js → config/types.js} +1 -29
  137. package/script/analyzer/logging.d.ts +3 -0
  138. package/script/analyzer/logging.d.ts.map +1 -0
  139. package/script/analyzer/logging.js +9 -0
  140. package/script/analyzer/mod.d.ts +12 -5
  141. package/script/analyzer/mod.d.ts.map +1 -1
  142. package/script/analyzer/mod.js +35 -20
  143. package/script/analyzer/result.d.ts +35 -0
  144. package/script/analyzer/result.d.ts.map +1 -0
  145. package/script/analyzer/result.js +315 -0
  146. package/script/analyzer/rules/bash/commands/mod.d.ts +1 -0
  147. package/script/analyzer/rules/bash/commands/mod.d.ts.map +1 -1
  148. package/script/analyzer/rules/bash/commands/mod.js +3 -0
  149. package/script/analyzer/rules/bash/commands/pip.d.ts +3 -0
  150. package/script/analyzer/rules/bash/commands/pip.d.ts.map +1 -0
  151. package/script/analyzer/rules/bash/commands/pip.js +17 -0
  152. package/script/analyzer/rules/bash/extractFileRefs.d.ts +1 -1
  153. package/script/analyzer/rules/bash/extractFileRefs.d.ts.map +1 -1
  154. package/script/analyzer/rules/bash/extractFileRefs.js +2 -2
  155. package/script/analyzer/rules/bash/inline-command-classifier.d.ts +1 -1
  156. package/script/analyzer/rules/bash/inline-command-classifier.d.ts.map +1 -1
  157. package/script/analyzer/rules/bash/inline-command-classifier.js +4 -4
  158. package/script/analyzer/rules/javascript/extractFileRefs.d.ts +3 -4
  159. package/script/analyzer/rules/javascript/extractFileRefs.d.ts.map +1 -1
  160. package/script/analyzer/rules/javascript/extractFileRefs.js +3 -4
  161. package/script/analyzer/rules/markdown/extractCodeBlocks.d.ts.map +1 -1
  162. package/script/analyzer/rules/markdown/extractCodeBlocks.js +6 -3
  163. package/script/analyzer/rules/markdown/extractFileRefs.d.ts.map +1 -1
  164. package/script/analyzer/rules/markdown/extractFileRefs.js +2 -0
  165. package/script/analyzer/rules/python/extractFileRefs.d.ts +1 -1
  166. package/script/analyzer/rules/python/extractFileRefs.d.ts.map +1 -1
  167. package/script/analyzer/rules/python/extractFileRefs.js +2 -2
  168. package/script/analyzer/steps/001-discovery/discover-files.d.ts +4 -0
  169. package/script/analyzer/steps/001-discovery/discover-files.d.ts.map +1 -1
  170. package/script/analyzer/steps/001-discovery/discover-files.js +18 -2
  171. package/script/analyzer/steps/001-discovery/mod.d.ts.map +1 -1
  172. package/script/analyzer/steps/001-discovery/mod.js +77 -11
  173. package/script/analyzer/steps/002-permissions/mod.d.ts.map +1 -1
  174. package/script/analyzer/steps/002-permissions/mod.js +194 -75
  175. package/script/analyzer/steps/002-permissions/scan-file.d.ts +1 -1
  176. package/script/analyzer/steps/002-permissions/scan-file.d.ts.map +1 -1
  177. package/script/analyzer/steps/002-permissions/scan-file.js +40 -5
  178. package/script/analyzer/steps/002-permissions/seed-frontmatter.js +3 -3
  179. package/script/analyzer/steps/003-risks/dep-risks.d.ts +3 -0
  180. package/script/analyzer/steps/003-risks/dep-risks.d.ts.map +1 -0
  181. package/script/analyzer/steps/003-risks/dep-risks.js +77 -0
  182. package/script/analyzer/steps/003-risks/helpers.d.ts +1 -0
  183. package/script/analyzer/steps/003-risks/helpers.d.ts.map +1 -1
  184. package/script/analyzer/steps/003-risks/helpers.js +1 -0
  185. package/script/analyzer/steps/003-risks/mod.d.ts +3 -2
  186. package/script/analyzer/steps/003-risks/mod.d.ts.map +1 -1
  187. package/script/analyzer/steps/003-risks/mod.js +77 -4
  188. package/script/analyzer/steps/003-risks/policy.d.ts +7 -0
  189. package/script/analyzer/steps/003-risks/policy.d.ts.map +1 -0
  190. package/script/analyzer/steps/003-risks/policy.js +29 -0
  191. package/script/analyzer/steps/003-risks/rule-mapped.d.ts +2 -2
  192. package/script/analyzer/steps/003-risks/rule-mapped.d.ts.map +1 -1
  193. package/script/analyzer/steps/003-risks/rule-mapped.js +83 -2
  194. package/script/analyzer/steps/003-risks/scoring.d.ts +9 -1
  195. package/script/analyzer/steps/003-risks/scoring.d.ts.map +1 -1
  196. package/script/analyzer/steps/003-risks/scoring.js +55 -42
  197. package/script/analyzer/treesitter/client.d.ts +31 -0
  198. package/script/analyzer/treesitter/client.d.ts.map +1 -0
  199. package/script/analyzer/treesitter/client.js +136 -0
  200. package/script/analyzer/treesitter/registry.d.ts +73 -0
  201. package/script/analyzer/treesitter/registry.d.ts.map +1 -0
  202. package/script/analyzer/treesitter/registry.js +206 -0
  203. package/script/analyzer/types.d.ts +14 -28
  204. package/script/analyzer/types.d.ts.map +1 -1
  205. package/script/deps/jsr.io/@deno-library/progress/1.5.1/deps.d.ts +3 -0
  206. package/script/deps/jsr.io/@deno-library/progress/1.5.1/deps.d.ts.map +1 -0
  207. package/script/deps/jsr.io/@deno-library/progress/1.5.1/deps.js +10 -0
  208. package/script/deps/jsr.io/@deno-library/progress/1.5.1/mod.d.ts +93 -0
  209. package/script/deps/jsr.io/@deno-library/progress/1.5.1/mod.d.ts.map +1 -0
  210. package/script/deps/jsr.io/@deno-library/progress/1.5.1/mod.js +334 -0
  211. package/script/deps/jsr.io/@deno-library/progress/1.5.1/multi.d.ts +84 -0
  212. package/script/deps/jsr.io/@deno-library/progress/1.5.1/multi.d.ts.map +1 -0
  213. package/script/deps/jsr.io/@deno-library/progress/1.5.1/multi.js +305 -0
  214. package/script/deps/jsr.io/@deno-library/progress/1.5.1/time.d.ts +18 -0
  215. package/script/deps/jsr.io/@deno-library/progress/1.5.1/time.d.ts.map +1 -0
  216. package/script/deps/jsr.io/@deno-library/progress/1.5.1/time.js +48 -0
  217. package/script/deps/jsr.io/@std/fmt/1.0.3/colors.d.ts +700 -0
  218. package/script/deps/jsr.io/@std/fmt/1.0.3/colors.d.ts.map +1 -0
  219. package/script/deps/jsr.io/@std/fmt/1.0.3/colors.js +986 -0
  220. package/script/deps/jsr.io/@std/io/0.225.0/types.d.ts +146 -0
  221. package/script/deps/jsr.io/@std/io/0.225.0/types.d.ts.map +1 -0
  222. package/script/deps/jsr.io/@std/io/0.225.0/types.js +18 -0
  223. package/script/deps/jsr.io/@std/io/0.225.0/write_all.d.ts +51 -0
  224. package/script/deps/jsr.io/@std/io/0.225.0/write_all.d.ts.map +1 -0
  225. package/script/deps/jsr.io/@std/io/0.225.0/write_all.js +65 -0
  226. package/script/shared/deep_merge.d.ts +12 -0
  227. package/script/shared/deep_merge.d.ts.map +1 -0
  228. package/script/shared/deep_merge.js +53 -0
  229. package/script/shared/mod.d.ts +1 -0
  230. package/script/shared/mod.d.ts.map +1 -1
  231. package/script/shared/mod.js +1 -0
  232. package/script/shared/types/filetypes.d.ts +2 -2
  233. package/script/shared/types/filetypes.d.ts.map +1 -1
  234. package/script/shared/types/permissions.d.ts +1 -1
  235. package/script/shared/types/permissions.d.ts.map +1 -1
  236. package/script/shared/types/risks.d.ts +4 -1
  237. package/script/shared/types/risks.d.ts.map +1 -1
  238. package/script/skillreader/types.d.ts +2 -2
  239. package/script/skillreader/types.d.ts.map +1 -1
  240. package/script/skillreader/types.js +2 -2
  241. package/src/_dnt.polyfills.ts +27 -0
  242. package/src/_dnt.shims.ts +64 -0
  243. package/src/analyzer/astgrep/client.ts +184 -0
  244. package/src/analyzer/astgrep/mod.ts +2 -0
  245. package/src/analyzer/config/default.ts +98 -0
  246. package/src/analyzer/config/helpers.ts +107 -0
  247. package/src/analyzer/config/mod.ts +3 -0
  248. package/src/analyzer/config/types.ts +103 -0
  249. package/src/analyzer/logging.ts +8 -0
  250. package/src/analyzer/mod.ts +118 -0
  251. package/src/analyzer/result.ts +393 -0
  252. package/src/analyzer/rules/bash/astTypes.ts +5 -0
  253. package/src/analyzer/rules/bash/commands/bd.ts +23 -0
  254. package/src/analyzer/rules/bash/commands/cron.ts +21 -0
  255. package/src/analyzer/rules/bash/commands/docker.ts +37 -0
  256. package/src/analyzer/rules/bash/commands/eval.ts +52 -0
  257. package/src/analyzer/rules/bash/commands/generic.ts +16 -0
  258. package/src/analyzer/rules/bash/commands/gh.ts +21 -0
  259. package/src/analyzer/rules/bash/commands/git.ts +28 -0
  260. package/src/analyzer/rules/bash/commands/mod.ts +38 -0
  261. package/src/analyzer/rules/bash/commands/node.ts +64 -0
  262. package/src/analyzer/rules/bash/commands/openspec.ts +16 -0
  263. package/src/analyzer/rules/bash/commands/pip.ts +16 -0
  264. package/src/analyzer/rules/bash/commands/sudo.ts +21 -0
  265. package/src/analyzer/rules/bash/destructive.ts +28 -0
  266. package/src/analyzer/rules/bash/extractFileRefs.ts +101 -0
  267. package/src/analyzer/rules/bash/filesystem.ts +50 -0
  268. package/src/analyzer/rules/bash/injection.ts +21 -0
  269. package/src/analyzer/rules/bash/inline-command-classifier.ts +94 -0
  270. package/src/analyzer/rules/bash/mod.ts +23 -0
  271. package/src/analyzer/rules/bash/network.ts +64 -0
  272. package/src/analyzer/rules/bash/secret-detection.ts +43 -0
  273. package/src/analyzer/rules/javascript/astTypes.ts +8 -0
  274. package/src/analyzer/rules/javascript/extractFileRefs.ts +131 -0
  275. package/src/analyzer/rules/javascript/filesystem.ts +28 -0
  276. package/src/analyzer/rules/javascript/injection.ts +21 -0
  277. package/src/analyzer/rules/javascript/mod.ts +26 -0
  278. package/src/analyzer/rules/javascript/network.ts +27 -0
  279. package/src/analyzer/rules/javascript/secret-detection.ts +68 -0
  280. package/src/analyzer/rules/javascript/subprocess.ts +16 -0
  281. package/src/analyzer/rules/markdown/astTypes.ts +35 -0
  282. package/src/analyzer/rules/markdown/extractCodeBlocks.ts +101 -0
  283. package/src/analyzer/rules/markdown/extractFileRefs.ts +179 -0
  284. package/src/analyzer/rules/markdown/mod.ts +12 -0
  285. package/src/analyzer/rules/mod.ts +77 -0
  286. package/src/analyzer/rules/python/astTypes.ts +9 -0
  287. package/src/analyzer/rules/python/extractFileRefs.ts +92 -0
  288. package/src/analyzer/rules/python/mod.ts +15 -0
  289. package/src/analyzer/rules/python/network.ts +26 -0
  290. package/src/analyzer/rules/python/secret-detection.ts +30 -0
  291. package/src/analyzer/rules/shared/file-refs.ts +38 -0
  292. package/src/analyzer/rules/shared/network-evaluators.ts +107 -0
  293. package/src/analyzer/rules/shared/prompt-injection.ts +48 -0
  294. package/src/analyzer/rules/shared/secret-evaluators.ts +13 -0
  295. package/src/analyzer/rules/text/mod.ts +12 -0
  296. package/src/analyzer/rules/typescript/mod.ts +7 -0
  297. package/src/analyzer/steps/001-discovery/discover-files.ts +211 -0
  298. package/src/analyzer/steps/001-discovery/filter-files.ts +72 -0
  299. package/src/analyzer/steps/001-discovery/mod.ts +103 -0
  300. package/src/analyzer/steps/002-permissions/mod.ts +329 -0
  301. package/src/analyzer/steps/002-permissions/scan-file.ts +258 -0
  302. package/src/analyzer/steps/002-permissions/seed-frontmatter.ts +66 -0
  303. package/src/analyzer/steps/002-permissions/synthesize.ts +42 -0
  304. package/src/analyzer/steps/003-risks/dep-risks.ts +89 -0
  305. package/src/analyzer/steps/003-risks/helpers.ts +41 -0
  306. package/src/analyzer/steps/003-risks/mod.ts +86 -0
  307. package/src/analyzer/steps/003-risks/policy.ts +38 -0
  308. package/src/analyzer/steps/003-risks/rule-mapped.ts +206 -0
  309. package/src/analyzer/steps/003-risks/scoring.ts +117 -0
  310. package/src/analyzer/steps/mod.ts +3 -0
  311. package/src/analyzer/treesitter/client.ts +120 -0
  312. package/src/analyzer/treesitter/registry.ts +198 -0
  313. package/src/analyzer/types.ts +78 -0
  314. package/src/analyzer/utils/code-block-path.ts +33 -0
  315. package/src/analyzer/utils/id-generator.ts +59 -0
  316. package/src/analyzer/utils/secret-validator.ts +29 -0
  317. package/src/analyzer/utils/url-parser.ts +25 -0
  318. package/src/deps/jsr.io/@deno-library/progress/1.5.1/deps.ts +3 -0
  319. package/src/deps/jsr.io/@deno-library/progress/1.5.1/mod.ts +265 -0
  320. package/src/deps/jsr.io/@deno-library/progress/1.5.1/multi.ts +250 -0
  321. package/src/deps/jsr.io/@deno-library/progress/1.5.1/time.ts +69 -0
  322. package/src/deps/jsr.io/@std/fmt/1.0.3/colors.ts +1004 -0
  323. package/src/deps/jsr.io/@std/internal/1.0.12/_os.ts +15 -0
  324. package/src/deps/jsr.io/@std/internal/1.0.12/os.ts +7 -0
  325. package/src/deps/jsr.io/@std/io/0.225.0/types.ts +157 -0
  326. package/src/deps/jsr.io/@std/io/0.225.0/write_all.ts +65 -0
  327. package/src/deps/jsr.io/@std/path/1.1.4/_common/assert_path.ts +10 -0
  328. package/src/deps/jsr.io/@std/path/1.1.4/_common/basename.ts +53 -0
  329. package/src/deps/jsr.io/@std/path/1.1.4/_common/common.ts +26 -0
  330. package/src/deps/jsr.io/@std/path/1.1.4/_common/constants.ts +49 -0
  331. package/src/deps/jsr.io/@std/path/1.1.4/_common/dirname.ts +9 -0
  332. package/src/deps/jsr.io/@std/path/1.1.4/_common/format.ts +25 -0
  333. package/src/deps/jsr.io/@std/path/1.1.4/_common/from_file_url.ts +12 -0
  334. package/src/deps/jsr.io/@std/path/1.1.4/_common/glob_to_reg_exp.ts +295 -0
  335. package/src/deps/jsr.io/@std/path/1.1.4/_common/normalize.ts +9 -0
  336. package/src/deps/jsr.io/@std/path/1.1.4/_common/normalize_string.ts +74 -0
  337. package/src/deps/jsr.io/@std/path/1.1.4/_common/relative.ts +10 -0
  338. package/src/deps/jsr.io/@std/path/1.1.4/_common/strip_trailing_separators.ts +25 -0
  339. package/src/deps/jsr.io/@std/path/1.1.4/_common/to_file_url.ts +17 -0
  340. package/src/deps/jsr.io/@std/path/1.1.4/basename.ts +37 -0
  341. package/src/deps/jsr.io/@std/path/1.1.4/common.ts +35 -0
  342. package/src/deps/jsr.io/@std/path/1.1.4/constants.ts +18 -0
  343. package/src/deps/jsr.io/@std/path/1.1.4/dirname.ts +30 -0
  344. package/src/deps/jsr.io/@std/path/1.1.4/extname.ts +29 -0
  345. package/src/deps/jsr.io/@std/path/1.1.4/format.ts +30 -0
  346. package/src/deps/jsr.io/@std/path/1.1.4/from_file_url.ts +30 -0
  347. package/src/deps/jsr.io/@std/path/1.1.4/glob_to_regexp.ts +94 -0
  348. package/src/deps/jsr.io/@std/path/1.1.4/is_absolute.ts +30 -0
  349. package/src/deps/jsr.io/@std/path/1.1.4/is_glob.ts +49 -0
  350. package/src/deps/jsr.io/@std/path/1.1.4/join.ts +31 -0
  351. package/src/deps/jsr.io/@std/path/1.1.4/join_globs.ts +42 -0
  352. package/src/deps/jsr.io/@std/path/1.1.4/mod.ts +217 -0
  353. package/src/deps/jsr.io/@std/path/1.1.4/normalize.ts +33 -0
  354. package/src/deps/jsr.io/@std/path/1.1.4/normalize_glob.ts +45 -0
  355. package/src/deps/jsr.io/@std/path/1.1.4/parse.ts +44 -0
  356. package/src/deps/jsr.io/@std/path/1.1.4/posix/_util.ts +10 -0
  357. package/src/deps/jsr.io/@std/path/1.1.4/posix/basename.ts +62 -0
  358. package/src/deps/jsr.io/@std/path/1.1.4/posix/constants.ts +15 -0
  359. package/src/deps/jsr.io/@std/path/1.1.4/posix/dirname.ts +72 -0
  360. package/src/deps/jsr.io/@std/path/1.1.4/posix/extname.ts +96 -0
  361. package/src/deps/jsr.io/@std/path/1.1.4/posix/format.ts +31 -0
  362. package/src/deps/jsr.io/@std/path/1.1.4/posix/from_file_url.ts +25 -0
  363. package/src/deps/jsr.io/@std/path/1.1.4/posix/glob_to_regexp.ts +94 -0
  364. package/src/deps/jsr.io/@std/path/1.1.4/posix/is_absolute.ts +25 -0
  365. package/src/deps/jsr.io/@std/path/1.1.4/posix/join.ts +46 -0
  366. package/src/deps/jsr.io/@std/path/1.1.4/posix/join_globs.ts +45 -0
  367. package/src/deps/jsr.io/@std/path/1.1.4/posix/normalize.ts +63 -0
  368. package/src/deps/jsr.io/@std/path/1.1.4/posix/normalize_glob.ts +43 -0
  369. package/src/deps/jsr.io/@std/path/1.1.4/posix/parse.ts +121 -0
  370. package/src/deps/jsr.io/@std/path/1.1.4/posix/relative.ts +103 -0
  371. package/src/deps/jsr.io/@std/path/1.1.4/posix/resolve.ts +71 -0
  372. package/src/deps/jsr.io/@std/path/1.1.4/posix/to_file_url.ts +32 -0
  373. package/src/deps/jsr.io/@std/path/1.1.4/posix/to_namespaced_path.ts +21 -0
  374. package/src/deps/jsr.io/@std/path/1.1.4/relative.ts +32 -0
  375. package/src/deps/jsr.io/@std/path/1.1.4/resolve.ts +32 -0
  376. package/src/deps/jsr.io/@std/path/1.1.4/to_file_url.ts +30 -0
  377. package/src/deps/jsr.io/@std/path/1.1.4/to_namespaced_path.ts +31 -0
  378. package/src/deps/jsr.io/@std/path/1.1.4/types.ts +40 -0
  379. package/src/deps/jsr.io/@std/path/1.1.4/windows/_util.ts +28 -0
  380. package/src/deps/jsr.io/@std/path/1.1.4/windows/basename.ts +54 -0
  381. package/src/deps/jsr.io/@std/path/1.1.4/windows/constants.ts +15 -0
  382. package/src/deps/jsr.io/@std/path/1.1.4/windows/dirname.ts +118 -0
  383. package/src/deps/jsr.io/@std/path/1.1.4/windows/extname.ts +90 -0
  384. package/src/deps/jsr.io/@std/path/1.1.4/windows/format.ts +31 -0
  385. package/src/deps/jsr.io/@std/path/1.1.4/windows/from_file_url.ts +34 -0
  386. package/src/deps/jsr.io/@std/path/1.1.4/windows/glob_to_regexp.ts +92 -0
  387. package/src/deps/jsr.io/@std/path/1.1.4/windows/is_absolute.ts +40 -0
  388. package/src/deps/jsr.io/@std/path/1.1.4/windows/join.ts +78 -0
  389. package/src/deps/jsr.io/@std/path/1.1.4/windows/join_globs.ts +46 -0
  390. package/src/deps/jsr.io/@std/path/1.1.4/windows/normalize.ts +136 -0
  391. package/src/deps/jsr.io/@std/path/1.1.4/windows/normalize_glob.ts +43 -0
  392. package/src/deps/jsr.io/@std/path/1.1.4/windows/parse.ts +184 -0
  393. package/src/deps/jsr.io/@std/path/1.1.4/windows/relative.ts +128 -0
  394. package/src/deps/jsr.io/@std/path/1.1.4/windows/resolve.ts +178 -0
  395. package/src/deps/jsr.io/@std/path/1.1.4/windows/to_file_url.ts +38 -0
  396. package/src/deps/jsr.io/@std/path/1.1.4/windows/to_namespaced_path.ts +60 -0
  397. package/src/deps/jsr.io/@std/yaml/1.0.11/_chars.ts +55 -0
  398. package/src/deps/jsr.io/@std/yaml/1.0.11/_dumper_state.ts +841 -0
  399. package/src/deps/jsr.io/@std/yaml/1.0.11/_loader_state.ts +1780 -0
  400. package/src/deps/jsr.io/@std/yaml/1.0.11/_schema.ts +183 -0
  401. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/binary.ts +127 -0
  402. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/bool.ts +37 -0
  403. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/float.ts +112 -0
  404. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/int.ts +174 -0
  405. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/map.ts +17 -0
  406. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/merge.ts +13 -0
  407. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/nil.ts +27 -0
  408. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/omap.ts +30 -0
  409. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/pairs.ts +22 -0
  410. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/regexp.ts +33 -0
  411. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/seq.ts +13 -0
  412. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/set.ts +17 -0
  413. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/str.ts +12 -0
  414. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/timestamp.ts +101 -0
  415. package/src/deps/jsr.io/@std/yaml/1.0.11/_type/undefined.ts +23 -0
  416. package/src/deps/jsr.io/@std/yaml/1.0.11/_type.ts +49 -0
  417. package/src/deps/jsr.io/@std/yaml/1.0.11/_utils.ts +16 -0
  418. package/src/deps/jsr.io/@std/yaml/1.0.11/mod.ts +54 -0
  419. package/src/deps/jsr.io/@std/yaml/1.0.11/parse.ts +128 -0
  420. package/src/deps/jsr.io/@std/yaml/1.0.11/stringify.ts +118 -0
  421. package/src/shared/deep_merge.ts +73 -0
  422. package/src/shared/mod.ts +2 -0
  423. package/src/shared/types/filetypes.ts +101 -0
  424. package/src/shared/types/findings.ts +7 -0
  425. package/src/shared/types/mod.ts +6 -0
  426. package/src/shared/types/permissions.ts +17 -0
  427. package/src/shared/types/references.ts +62 -0
  428. package/src/shared/types/risks.ts +72 -0
  429. package/src/shared/types/syntaxNode.ts +7 -0
  430. package/src/skillreader/cloudStorage/mod.ts +170 -0
  431. package/src/skillreader/factory.ts +71 -0
  432. package/src/skillreader/fs/git.ts +153 -0
  433. package/src/skillreader/fs/mod.ts +84 -0
  434. package/src/skillreader/github/base.ts +162 -0
  435. package/src/skillreader/github/githubApi.ts +40 -0
  436. package/src/skillreader/github/githubRaw.ts +24 -0
  437. package/src/skillreader/github/mod.ts +45 -0
  438. package/src/skillreader/github/utils.ts +40 -0
  439. package/src/skillreader/manifest.ts +67 -0
  440. package/src/skillreader/mod.ts +26 -0
  441. package/src/skillreader/types.ts +150 -0
  442. package/src/skillreader/utils/frontmatter-parser.ts +72 -0
  443. package/src/skillreader/utils/http-range.ts +38 -0
  444. package/src/skillreader/utils/mod.ts +12 -0
  445. package/esm/analyzer/astgrep/registry.d.ts +0 -18
  446. package/esm/analyzer/astgrep/registry.d.ts.map +0 -1
  447. package/esm/analyzer/astgrep/registry.js +0 -71
  448. package/esm/analyzer/config.d.ts +0 -27
  449. package/esm/analyzer/config.d.ts.map +0 -1
  450. package/esm/analyzer/steps/003-risks/output.d.ts +0 -3
  451. package/esm/analyzer/steps/003-risks/output.d.ts.map +0 -1
  452. package/esm/analyzer/steps/003-risks/output.js +0 -16
  453. package/esm/analyzer/treesiter/client.d.ts +0 -26
  454. package/esm/analyzer/treesiter/client.d.ts.map +0 -1
  455. package/script/analyzer/astgrep/registry.d.ts +0 -18
  456. package/script/analyzer/astgrep/registry.d.ts.map +0 -1
  457. package/script/analyzer/astgrep/registry.js +0 -109
  458. package/script/analyzer/config.d.ts +0 -27
  459. package/script/analyzer/config.d.ts.map +0 -1
  460. package/script/analyzer/steps/003-risks/output.d.ts +0 -3
  461. package/script/analyzer/steps/003-risks/output.d.ts.map +0 -1
  462. package/script/analyzer/steps/003-risks/output.js +0 -19
  463. package/script/analyzer/treesiter/client.d.ts +0 -26
  464. package/script/analyzer/treesiter/client.d.ts.map +0 -1
  465. package/script/analyzer/treesiter/client.js +0 -165
@@ -0,0 +1,295 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Options for {@linkcode globToRegExp}, {@linkcode joinGlobs},
6
+ * {@linkcode normalizeGlob} and {@linkcode expandGlob}.
7
+ */
8
+ export interface GlobOptions {
9
+ /** Extended glob syntax.
10
+ * See https://www.linuxjournal.com/content/bash-extended-globbing.
11
+ *
12
+ * @default {true}
13
+ */
14
+ extended?: boolean;
15
+ /** Globstar syntax.
16
+ * See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option.
17
+ * If false, `**` is treated like `*`.
18
+ *
19
+ * @default {true}
20
+ */
21
+ globstar?: boolean;
22
+ /**
23
+ * Whether globstar should be case-insensitive.
24
+ *
25
+ * @default {false}
26
+ */
27
+ caseInsensitive?: boolean;
28
+ }
29
+
30
+ const REG_EXP_ESCAPE_CHARS = [
31
+ "!",
32
+ "$",
33
+ "(",
34
+ ")",
35
+ "*",
36
+ "+",
37
+ ".",
38
+ "=",
39
+ "?",
40
+ "[",
41
+ "\\",
42
+ "^",
43
+ "{",
44
+ "|",
45
+ ] as const;
46
+ const RANGE_ESCAPE_CHARS = ["-", "\\", "]"] as const;
47
+
48
+ type RegExpEscapeChar = typeof REG_EXP_ESCAPE_CHARS[number];
49
+ type RangeEscapeChar = typeof RANGE_ESCAPE_CHARS[number];
50
+ type EscapeChar = RegExpEscapeChar | RangeEscapeChar;
51
+
52
+ export interface GlobConstants {
53
+ sep: string;
54
+ sepMaybe: string;
55
+ seps: string[];
56
+ globstar: string;
57
+ wildcard: string;
58
+ escapePrefix: string;
59
+ }
60
+
61
+ export function _globToRegExp(
62
+ c: GlobConstants,
63
+ glob: string,
64
+ {
65
+ extended = true,
66
+ globstar: globstarOption = true,
67
+ // os = osType,
68
+ caseInsensitive = false,
69
+ }: GlobOptions = {},
70
+ ): RegExp {
71
+ if (glob === "") {
72
+ return /(?!)/;
73
+ }
74
+
75
+ // Remove trailing separators.
76
+ let newLength = glob.length;
77
+ for (; newLength > 1 && c.seps.includes(glob[newLength - 1]!); newLength--);
78
+ glob = glob.slice(0, newLength);
79
+
80
+ let regExpString = "";
81
+
82
+ // Terminates correctly. Trust that `j` is incremented every iteration.
83
+ for (let j = 0; j < glob.length;) {
84
+ let segment = "";
85
+ const groupStack: string[] = [];
86
+ let inRange = false;
87
+ let inEscape = false;
88
+ let endsWithSep = false;
89
+ let i = j;
90
+
91
+ // Terminates with `i` at the non-inclusive end of the current segment.
92
+ for (
93
+ ;
94
+ i < glob.length &&
95
+ !(c.seps.includes(glob[i]!) && groupStack.length === 0);
96
+ i++
97
+ ) {
98
+ if (inEscape) {
99
+ inEscape = false;
100
+ const escapeChars = (inRange
101
+ ? RANGE_ESCAPE_CHARS
102
+ : REG_EXP_ESCAPE_CHARS) as unknown as EscapeChar[];
103
+ segment += escapeChars.includes(glob[i]! as EscapeChar)
104
+ ? `\\${glob[i]}`
105
+ : glob[i];
106
+ continue;
107
+ }
108
+
109
+ if (glob[i] === c.escapePrefix) {
110
+ inEscape = true;
111
+ continue;
112
+ }
113
+
114
+ if (glob[i] === "[") {
115
+ if (!inRange) {
116
+ inRange = true;
117
+ segment += "[";
118
+ if (glob[i + 1] === "!") {
119
+ i++;
120
+ segment += "^";
121
+ } else if (glob[i + 1] === "^") {
122
+ i++;
123
+ segment += "\\^";
124
+ }
125
+ continue;
126
+ } else if (glob[i + 1] === ":") {
127
+ let k = i + 1;
128
+ let value = "";
129
+ while (glob[k + 1] !== undefined && glob[k + 1] !== ":") {
130
+ value += glob[k + 1];
131
+ k++;
132
+ }
133
+ if (glob[k + 1] === ":" && glob[k + 2] === "]") {
134
+ i = k + 2;
135
+ if (value === "alnum") segment += "\\dA-Za-z";
136
+ else if (value === "alpha") segment += "A-Za-z";
137
+ else if (value === "ascii") segment += "\x00-\x7F";
138
+ else if (value === "blank") segment += "\t ";
139
+ else if (value === "cntrl") segment += "\x00-\x1F\x7F";
140
+ else if (value === "digit") segment += "\\d";
141
+ else if (value === "graph") segment += "\x21-\x7E";
142
+ else if (value === "lower") segment += "a-z";
143
+ else if (value === "print") segment += "\x20-\x7E";
144
+ else if (value === "punct") {
145
+ segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~";
146
+ } else if (value === "space") segment += "\\s\v";
147
+ else if (value === "upper") segment += "A-Z";
148
+ else if (value === "word") segment += "\\w";
149
+ else if (value === "xdigit") segment += "\\dA-Fa-f";
150
+ continue;
151
+ }
152
+ }
153
+ }
154
+
155
+ if (glob[i] === "]" && inRange) {
156
+ inRange = false;
157
+ segment += "]";
158
+ continue;
159
+ }
160
+
161
+ if (inRange) {
162
+ segment += glob[i];
163
+ continue;
164
+ }
165
+
166
+ if (
167
+ glob[i] === ")" && groupStack.length > 0 &&
168
+ groupStack[groupStack.length - 1] !== "BRACE"
169
+ ) {
170
+ segment += ")";
171
+ const type = groupStack.pop()!;
172
+ if (type === "!") {
173
+ segment += c.wildcard;
174
+ } else if (type !== "@") {
175
+ segment += type;
176
+ }
177
+ continue;
178
+ }
179
+
180
+ if (
181
+ glob[i] === "|" && groupStack.length > 0 &&
182
+ groupStack[groupStack.length - 1] !== "BRACE"
183
+ ) {
184
+ segment += "|";
185
+ continue;
186
+ }
187
+
188
+ if (glob[i] === "+" && extended && glob[i + 1] === "(") {
189
+ i++;
190
+ groupStack.push("+");
191
+ segment += "(?:";
192
+ continue;
193
+ }
194
+
195
+ if (glob[i] === "@" && extended && glob[i + 1] === "(") {
196
+ i++;
197
+ groupStack.push("@");
198
+ segment += "(?:";
199
+ continue;
200
+ }
201
+
202
+ if (glob[i] === "?") {
203
+ if (extended && glob[i + 1] === "(") {
204
+ i++;
205
+ groupStack.push("?");
206
+ segment += "(?:";
207
+ } else {
208
+ segment += ".";
209
+ }
210
+ continue;
211
+ }
212
+
213
+ if (glob[i] === "!" && extended && glob[i + 1] === "(") {
214
+ i++;
215
+ groupStack.push("!");
216
+ segment += "(?!";
217
+ continue;
218
+ }
219
+
220
+ if (glob[i] === "{") {
221
+ groupStack.push("BRACE");
222
+ segment += "(?:";
223
+ continue;
224
+ }
225
+
226
+ if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") {
227
+ groupStack.pop();
228
+ segment += ")";
229
+ continue;
230
+ }
231
+
232
+ if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") {
233
+ segment += "|";
234
+ continue;
235
+ }
236
+
237
+ if (glob[i] === "*") {
238
+ if (extended && glob[i + 1] === "(") {
239
+ i++;
240
+ groupStack.push("*");
241
+ segment += "(?:";
242
+ } else {
243
+ const prevChar = glob[i - 1];
244
+ let numStars = 1;
245
+ while (glob[i + 1] === "*") {
246
+ i++;
247
+ numStars++;
248
+ }
249
+ const nextChar = glob[i + 1];
250
+ if (
251
+ globstarOption && numStars === 2 &&
252
+ [...c.seps, undefined].includes(prevChar) &&
253
+ [...c.seps, undefined].includes(nextChar)
254
+ ) {
255
+ segment += c.globstar;
256
+ endsWithSep = true;
257
+ } else {
258
+ segment += c.wildcard;
259
+ }
260
+ }
261
+ continue;
262
+ }
263
+
264
+ segment += REG_EXP_ESCAPE_CHARS.includes(glob[i]! as RegExpEscapeChar)
265
+ ? `\\${glob[i]}`
266
+ : glob[i];
267
+ }
268
+
269
+ // Check for unclosed groups or a dangling backslash.
270
+ if (groupStack.length > 0 || inRange || inEscape) {
271
+ // Parse failure. Take all characters from this segment literally.
272
+ segment = "";
273
+ for (const c of glob.slice(j, i)) {
274
+ segment += REG_EXP_ESCAPE_CHARS.includes(c as RegExpEscapeChar)
275
+ ? `\\${c}`
276
+ : c;
277
+ endsWithSep = false;
278
+ }
279
+ }
280
+
281
+ regExpString += segment;
282
+ if (!endsWithSep) {
283
+ regExpString += i < glob.length ? c.sep : c.sepMaybe;
284
+ endsWithSep = true;
285
+ }
286
+
287
+ // Terminates with `i` at the start of the next segment.
288
+ while (c.seps.includes(glob[i]!)) i++;
289
+
290
+ j = i;
291
+ }
292
+
293
+ regExpString = `^${regExpString}$`;
294
+ return new RegExp(regExpString, caseInsensitive ? "i" : "");
295
+ }
@@ -0,0 +1,9 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { assertPath } from "./assert_path.js";
5
+
6
+ export function assertArg(path: string) {
7
+ assertPath(path);
8
+ if (path.length === 0) return ".";
9
+ }
@@ -0,0 +1,74 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // Copyright the Browserify authors. MIT License.
3
+ // Ported from https://github.com/browserify/path-browserify/
4
+ // This module is browser compatible.
5
+
6
+ import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./constants.js";
7
+
8
+ // Resolves . and .. elements in a path with directory names
9
+ export function normalizeString(
10
+ path: string,
11
+ allowAboveRoot: boolean,
12
+ separator: string,
13
+ isPathSeparator: (code: number) => boolean,
14
+ ): string {
15
+ let res = "";
16
+ let lastSegmentLength = 0;
17
+ let lastSlash = -1;
18
+ let dots = 0;
19
+ let code: number | undefined;
20
+ for (let i = 0; i <= path.length; ++i) {
21
+ if (i < path.length) code = path.charCodeAt(i);
22
+ else if (isPathSeparator(code!)) break;
23
+ else code = CHAR_FORWARD_SLASH;
24
+
25
+ if (isPathSeparator(code!)) {
26
+ if (lastSlash === i - 1 || dots === 1) {
27
+ // NOOP
28
+ } else if (lastSlash !== i - 1 && dots === 2) {
29
+ if (
30
+ res.length < 2 ||
31
+ lastSegmentLength !== 2 ||
32
+ res.charCodeAt(res.length - 1) !== CHAR_DOT ||
33
+ res.charCodeAt(res.length - 2) !== CHAR_DOT
34
+ ) {
35
+ if (res.length > 2) {
36
+ const lastSlashIndex = res.lastIndexOf(separator);
37
+ if (lastSlashIndex === -1) {
38
+ res = "";
39
+ lastSegmentLength = 0;
40
+ } else {
41
+ res = res.slice(0, lastSlashIndex);
42
+ lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
43
+ }
44
+ lastSlash = i;
45
+ dots = 0;
46
+ continue;
47
+ } else if (res.length === 2 || res.length === 1) {
48
+ res = "";
49
+ lastSegmentLength = 0;
50
+ lastSlash = i;
51
+ dots = 0;
52
+ continue;
53
+ }
54
+ }
55
+ if (allowAboveRoot) {
56
+ if (res.length > 0) res += `${separator}..`;
57
+ else res = "..";
58
+ lastSegmentLength = 2;
59
+ }
60
+ } else {
61
+ if (res.length > 0) res += separator + path.slice(lastSlash + 1, i);
62
+ else res = path.slice(lastSlash + 1, i);
63
+ lastSegmentLength = i - lastSlash - 1;
64
+ }
65
+ lastSlash = i;
66
+ dots = 0;
67
+ } else if (code === CHAR_DOT && dots !== -1) {
68
+ ++dots;
69
+ } else {
70
+ dots = -1;
71
+ }
72
+ }
73
+ return res;
74
+ }
@@ -0,0 +1,10 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { assertPath } from "./assert_path.js";
5
+
6
+ export function assertArgs(from: string, to: string) {
7
+ assertPath(from);
8
+ assertPath(to);
9
+ if (from === to) return "";
10
+ }
@@ -0,0 +1,25 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // Copyright the Browserify authors. MIT License.
3
+ // Ported from https://github.com/browserify/path-browserify/
4
+ // This module is browser compatible.
5
+
6
+ export function stripTrailingSeparators(
7
+ segment: string,
8
+ isSep: (char: number) => boolean,
9
+ ): string {
10
+ if (segment.length <= 1) {
11
+ return segment;
12
+ }
13
+
14
+ let end = segment.length;
15
+
16
+ for (let i = segment.length - 1; i > 0; i--) {
17
+ if (isSep(segment.charCodeAt(i))) {
18
+ end = i;
19
+ } else {
20
+ break;
21
+ }
22
+ }
23
+
24
+ return segment.slice(0, end);
25
+ }
@@ -0,0 +1,17 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ const WHITESPACE_ENCODINGS: Record<string, string> = {
5
+ "\u0009": "%09",
6
+ "\u000A": "%0A",
7
+ "\u000B": "%0B",
8
+ "\u000C": "%0C",
9
+ "\u000D": "%0D",
10
+ "\u0020": "%20",
11
+ };
12
+
13
+ export function encodeWhitespace(string: string): string {
14
+ return string.replaceAll(/[\s]/g, (c) => {
15
+ return WHITESPACE_ENCODINGS[c] ?? c;
16
+ });
17
+ }
@@ -0,0 +1,37 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { isWindows } from "../../internal/1.0.12/os.js";
5
+ import { basename as posixBasename } from "./posix/basename.js";
6
+ import { basename as windowsBasename } from "./windows/basename.js";
7
+
8
+ /**
9
+ * Return the last portion of a path.
10
+ *
11
+ * The trailing directory separators are ignored, and optional suffix is
12
+ * removed.
13
+ *
14
+ * @example Usage
15
+ * ```ts
16
+ * import { basename } from "@std/path/basename";
17
+ * import { assertEquals } from "@std/assert";
18
+ *
19
+ * if (Deno.build.os === "windows") {
20
+ * assertEquals(basename("C:\\user\\Documents\\image.png"), "image.png");
21
+ * assertEquals(basename(new URL("file:///C:/user/Documents/image.png")), "image.png");
22
+ * } else {
23
+ * assertEquals(basename("/home/user/Documents/image.png"), "image.png");
24
+ * assertEquals(basename(new URL("file:///home/user/Documents/image.png")), "image.png");
25
+ * }
26
+ * ```
27
+ *
28
+ * @param path Path to extract the name from.
29
+ * @param suffix Suffix to remove from extracted name.
30
+ *
31
+ * @returns The basename of the path.
32
+ */
33
+ export function basename(path: string | URL, suffix = ""): string {
34
+ return isWindows
35
+ ? windowsBasename(path, suffix)
36
+ : posixBasename(path, suffix);
37
+ }
@@ -0,0 +1,35 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { common as _common } from "./_common/common.js";
5
+ import { SEPARATOR } from "./constants.js";
6
+
7
+ /**
8
+ * Determines the common path from a set of paths for the given OS.
9
+ *
10
+ * @param paths Paths to search for common path.
11
+ * @returns The common path.
12
+ *
13
+ * @example Usage
14
+ * ```ts
15
+ * import { common } from "@std/path/common";
16
+ * import { assertEquals } from "@std/assert";
17
+ *
18
+ * if (Deno.build.os === "windows") {
19
+ * const path = common([
20
+ * "C:\\deno\\std\\path\\mod.ts",
21
+ * "C:\\deno\\std\\fs\\mod.ts"
22
+ * ]);
23
+ * assertEquals(path, "C:\\deno\\std\\");
24
+ * } else {
25
+ * const path = common([
26
+ * "./deno/std/path/mod.ts",
27
+ * "./deno/std/fs/mod.ts"
28
+ * ]);
29
+ * assertEquals(path, "./deno/std/");
30
+ * }
31
+ * ```
32
+ */
33
+ export function common(paths: string[]): string {
34
+ return _common(paths, SEPARATOR);
35
+ }
@@ -0,0 +1,18 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+ import { isWindows } from "../../internal/1.0.12/os.js";
4
+
5
+ /**
6
+ * The character used to separate entries in the PATH environment variable.
7
+ * On Windows, this is `;`. On all other platforms, this is `:`.
8
+ */
9
+ export const DELIMITER = isWindows ? ";" as const : ":" as const;
10
+ /**
11
+ * The character used to separate components of a file path.
12
+ * On Windows, this is `\`. On all other platforms, this is `/`.
13
+ */
14
+ export const SEPARATOR = isWindows ? "\\" as const : "/" as const;
15
+ /**
16
+ * A regular expression that matches one or more path separators.
17
+ */
18
+ export const SEPARATOR_PATTERN = isWindows ? /[\\/]+/ : /\/+/;
@@ -0,0 +1,30 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { isWindows } from "../../internal/1.0.12/os.js";
5
+ import { dirname as posixDirname } from "./posix/dirname.js";
6
+ import { dirname as windowsDirname } from "./windows/dirname.js";
7
+
8
+ /**
9
+ * Return the directory path of a path.
10
+ *
11
+ * @example Usage
12
+ * ```ts
13
+ * import { dirname } from "@std/path/dirname";
14
+ * import { assertEquals } from "@std/assert";
15
+ *
16
+ * if (Deno.build.os === "windows") {
17
+ * assertEquals(dirname("C:\\home\\user\\Documents\\image.png"), "C:\\home\\user\\Documents");
18
+ * assertEquals(dirname(new URL("file:///C:/home/user/Documents/image.png")), "C:\\home\\user\\Documents");
19
+ * } else {
20
+ * assertEquals(dirname("/home/user/Documents/image.png"), "/home/user/Documents");
21
+ * assertEquals(dirname(new URL("file:///home/user/Documents/image.png")), "/home/user/Documents");
22
+ * }
23
+ * ```
24
+ *
25
+ * @param path Path to extract the directory from.
26
+ * @returns The directory path.
27
+ */
28
+ export function dirname(path: string | URL): string {
29
+ return isWindows ? windowsDirname(path) : posixDirname(path);
30
+ }
@@ -0,0 +1,29 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { isWindows } from "../../internal/1.0.12/os.js";
5
+ import { extname as posixExtname } from "./posix/extname.js";
6
+ import { extname as windowsExtname } from "./windows/extname.js";
7
+ /**
8
+ * Return the extension of the path with leading period (".").
9
+ *
10
+ * @example Usage
11
+ * ```ts
12
+ * import { extname } from "@std/path/extname";
13
+ * import { assertEquals } from "@std/assert";
14
+ *
15
+ * if (Deno.build.os === "windows") {
16
+ * assertEquals(extname("C:\\home\\user\\Documents\\image.png"), ".png");
17
+ * assertEquals(extname(new URL("file:///C:/home/user/Documents/image.png")), ".png");
18
+ * } else {
19
+ * assertEquals(extname("/home/user/Documents/image.png"), ".png");
20
+ * assertEquals(extname(new URL("file:///home/user/Documents/image.png")), ".png");
21
+ * }
22
+ * ```
23
+ *
24
+ * @param path Path with extension.
25
+ * @returns The file extension. E.g. returns `.ts` for `file.ts`.
26
+ */
27
+ export function extname(path: string | URL): string {
28
+ return isWindows ? windowsExtname(path) : posixExtname(path);
29
+ }
@@ -0,0 +1,30 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { isWindows } from "../../internal/1.0.12/os.js";
5
+ import { format as posixFormat } from "./posix/format.js";
6
+ import { format as windowsFormat } from "./windows/format.js";
7
+ import type { ParsedPath } from "./types.js";
8
+
9
+ /**
10
+ * Generate a path from a {@linkcode ParsedPath} object. It does the
11
+ * opposite of {@linkcode https://jsr.io/@std/path/doc/~/parse | parse()}.
12
+ *
13
+ * @example Usage
14
+ * ```ts
15
+ * import { format } from "@std/path/format";
16
+ * import { assertEquals } from "@std/assert";
17
+ *
18
+ * if (Deno.build.os === "windows") {
19
+ * assertEquals(format({ dir: "C:\\path\\to", base: "script.ts" }), "C:\\path\\to\\script.ts");
20
+ * } else {
21
+ * assertEquals(format({ dir: "/path/to/dir", base: "script.ts" }), "/path/to/dir/script.ts");
22
+ * }
23
+ * ```
24
+ *
25
+ * @param pathObject Object with path components.
26
+ * @returns The formatted path.
27
+ */
28
+ export function format(pathObject: Partial<ParsedPath>): string {
29
+ return isWindows ? windowsFormat(pathObject) : posixFormat(pathObject);
30
+ }
@@ -0,0 +1,30 @@
1
+ // Copyright 2018-2025 the Deno authors. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { isWindows } from "../../internal/1.0.12/os.js";
5
+ import { fromFileUrl as posixFromFileUrl } from "./posix/from_file_url.js";
6
+ import { fromFileUrl as windowsFromFileUrl } from "./windows/from_file_url.js";
7
+
8
+ /**
9
+ * Converts a file URL to a path string.
10
+ *
11
+ * @example Usage
12
+ * ```ts
13
+ * import { fromFileUrl } from "@std/path/from-file-url";
14
+ * import { assertEquals } from "@std/assert";
15
+ *
16
+ * if (Deno.build.os === "windows") {
17
+ * assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo");
18
+ * assertEquals(fromFileUrl("file:///C:/Users/foo"), "C:\\Users\\foo");
19
+ * assertEquals(fromFileUrl("file://localhost/home/foo"), "\\home\\foo");
20
+ * } else {
21
+ * assertEquals(fromFileUrl("file:///home/foo"), "/home/foo");
22
+ * }
23
+ * ```
24
+ *
25
+ * @param url The file URL to convert to a path.
26
+ * @returns The path string.
27
+ */
28
+ export function fromFileUrl(url: string | URL): string {
29
+ return isWindows ? windowsFromFileUrl(url) : posixFromFileUrl(url);
30
+ }