code-languages 1.40.11 → 1.42.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 (416) hide show
  1. package/README.md +136 -39
  2. package/dist/{api-Cvg4BdaR.d.cts → api-D10hZgSz.d.cts} +78 -6
  3. package/dist/{api-BlQoDQtF.d.ts → api-DfKZeygA.d.ts} +78 -6
  4. package/dist/api.cjs +3214 -1208
  5. package/dist/api.d.cts +3 -3
  6. package/dist/api.d.ts +3 -3
  7. package/dist/api.js +3214 -1209
  8. package/dist/detect-slugs.cjs +165 -40
  9. package/dist/detect-slugs.d.cts +2 -1
  10. package/dist/detect-slugs.d.ts +2 -1
  11. package/dist/detect-slugs.js +165 -41
  12. package/dist/detect.cjs +1719 -88
  13. package/dist/detect.d.cts +14 -2
  14. package/dist/detect.d.ts +14 -2
  15. package/dist/detect.js +1718 -89
  16. package/dist/i18n.d.cts +1 -1
  17. package/dist/i18n.d.ts +1 -1
  18. package/dist/index.cjs +3354 -1243
  19. package/dist/index.d.cts +47 -13277
  20. package/dist/index.d.ts +47 -13277
  21. package/dist/index.js +3310 -1203
  22. package/dist/languages/actionscript.cjs +2 -1
  23. package/dist/languages/actionscript.d.cts +1 -0
  24. package/dist/languages/actionscript.d.ts +1 -0
  25. package/dist/languages/actionscript.js +2 -1
  26. package/dist/languages/algol.cjs +2 -1
  27. package/dist/languages/algol.d.cts +1 -0
  28. package/dist/languages/algol.d.ts +1 -0
  29. package/dist/languages/algol.js +2 -1
  30. package/dist/languages/alloy.cjs +52 -0
  31. package/dist/languages/alloy.d.cts +49 -0
  32. package/dist/languages/alloy.d.ts +49 -0
  33. package/dist/languages/alloy.js +50 -0
  34. package/dist/languages/angelscript.cjs +1 -1
  35. package/dist/languages/angelscript.js +1 -1
  36. package/dist/languages/ante.cjs +1 -0
  37. package/dist/languages/ante.d.cts +1 -0
  38. package/dist/languages/ante.d.ts +1 -0
  39. package/dist/languages/ante.js +1 -0
  40. package/dist/languages/assembly.cjs +1 -0
  41. package/dist/languages/assembly.d.cts +1 -0
  42. package/dist/languages/assembly.d.ts +1 -0
  43. package/dist/languages/assembly.js +1 -0
  44. package/dist/languages/assemblyscript.cjs +3 -0
  45. package/dist/languages/assemblyscript.d.cts +3 -0
  46. package/dist/languages/assemblyscript.d.ts +3 -0
  47. package/dist/languages/assemblyscript.js +3 -0
  48. package/dist/languages/austral.cjs +2 -1
  49. package/dist/languages/austral.d.cts +1 -0
  50. package/dist/languages/austral.d.ts +1 -0
  51. package/dist/languages/austral.js +2 -1
  52. package/dist/languages/bcpl.cjs +2 -1
  53. package/dist/languages/bcpl.d.cts +1 -0
  54. package/dist/languages/bcpl.d.ts +1 -0
  55. package/dist/languages/bcpl.js +2 -1
  56. package/dist/languages/bibtex.cjs +1 -1
  57. package/dist/languages/bibtex.js +1 -1
  58. package/dist/languages/bosque.cjs +2 -1
  59. package/dist/languages/bosque.d.cts +1 -0
  60. package/dist/languages/bosque.d.ts +1 -0
  61. package/dist/languages/bosque.js +2 -1
  62. package/dist/languages/brainfuck.cjs +1 -1
  63. package/dist/languages/brainfuck.js +1 -1
  64. package/dist/languages/c3.cjs +56 -0
  65. package/dist/languages/c3.d.cts +53 -0
  66. package/dist/languages/c3.d.ts +53 -0
  67. package/dist/languages/c3.js +54 -0
  68. package/dist/languages/carbon.cjs +1 -0
  69. package/dist/languages/carbon.d.cts +1 -0
  70. package/dist/languages/carbon.d.ts +1 -0
  71. package/dist/languages/carbon.js +1 -0
  72. package/dist/languages/clarity.cjs +56 -0
  73. package/dist/languages/clarity.d.cts +53 -0
  74. package/dist/languages/clarity.d.ts +53 -0
  75. package/dist/languages/clarity.js +54 -0
  76. package/dist/languages/cobol.cjs +1 -1
  77. package/dist/languages/cobol.js +1 -1
  78. package/dist/languages/coffeescript.cjs +3 -0
  79. package/dist/languages/coffeescript.d.cts +3 -0
  80. package/dist/languages/coffeescript.d.ts +3 -0
  81. package/dist/languages/coffeescript.js +3 -0
  82. package/dist/languages/coq.cjs +1 -0
  83. package/dist/languages/coq.d.cts +1 -0
  84. package/dist/languages/coq.d.ts +1 -0
  85. package/dist/languages/coq.js +1 -0
  86. package/dist/languages/cpp.cjs +4 -0
  87. package/dist/languages/cpp.d.cts +4 -0
  88. package/dist/languages/cpp.d.ts +4 -0
  89. package/dist/languages/cpp.js +4 -0
  90. package/dist/languages/csharp.cjs +1 -0
  91. package/dist/languages/csharp.d.cts +1 -0
  92. package/dist/languages/csharp.d.ts +1 -0
  93. package/dist/languages/csharp.js +1 -0
  94. package/dist/languages/cwl.cjs +52 -0
  95. package/dist/languages/cwl.d.cts +49 -0
  96. package/dist/languages/cwl.d.ts +49 -0
  97. package/dist/languages/cwl.js +50 -0
  98. package/dist/languages/cython.cjs +4 -0
  99. package/dist/languages/cython.d.cts +4 -0
  100. package/dist/languages/cython.d.ts +4 -0
  101. package/dist/languages/cython.js +4 -0
  102. package/dist/languages/dart.cjs +3 -0
  103. package/dist/languages/dart.d.cts +3 -0
  104. package/dist/languages/dart.d.ts +3 -0
  105. package/dist/languages/dart.js +3 -0
  106. package/dist/languages/dax.cjs +1 -1
  107. package/dist/languages/dax.js +1 -1
  108. package/dist/languages/dockerfile.cjs +1 -0
  109. package/dist/languages/dockerfile.d.cts +1 -0
  110. package/dist/languages/dockerfile.d.ts +1 -0
  111. package/dist/languages/dockerfile.js +1 -0
  112. package/dist/languages/edgeql.cjs +53 -0
  113. package/dist/languages/edgeql.d.cts +50 -0
  114. package/dist/languages/edgeql.d.ts +50 -0
  115. package/dist/languages/edgeql.js +51 -0
  116. package/dist/languages/elm.cjs +3 -0
  117. package/dist/languages/elm.d.cts +3 -0
  118. package/dist/languages/elm.d.ts +3 -0
  119. package/dist/languages/elm.js +3 -0
  120. package/dist/languages/emacs-lisp.cjs +57 -0
  121. package/dist/languages/emacs-lisp.d.cts +54 -0
  122. package/dist/languages/emacs-lisp.d.ts +54 -0
  123. package/dist/languages/emacs-lisp.js +55 -0
  124. package/dist/languages/erb.cjs +1 -1
  125. package/dist/languages/erb.js +1 -1
  126. package/dist/languages/faust.cjs +55 -0
  127. package/dist/languages/faust.d.cts +52 -0
  128. package/dist/languages/faust.d.ts +52 -0
  129. package/dist/languages/faust.js +53 -0
  130. package/dist/languages/fe.cjs +1 -0
  131. package/dist/languages/fe.d.cts +1 -0
  132. package/dist/languages/fe.d.ts +1 -0
  133. package/dist/languages/fe.js +1 -0
  134. package/dist/languages/fennel.cjs +3 -0
  135. package/dist/languages/fennel.d.cts +3 -0
  136. package/dist/languages/fennel.d.ts +3 -0
  137. package/dist/languages/fennel.js +3 -0
  138. package/dist/languages/flix.cjs +53 -0
  139. package/dist/languages/flix.d.cts +50 -0
  140. package/dist/languages/flix.d.ts +50 -0
  141. package/dist/languages/flix.js +51 -0
  142. package/dist/languages/fql.cjs +1 -1
  143. package/dist/languages/fql.js +1 -1
  144. package/dist/languages/fsharp.cjs +1 -0
  145. package/dist/languages/fsharp.d.cts +1 -0
  146. package/dist/languages/fsharp.d.ts +1 -0
  147. package/dist/languages/fsharp.js +1 -0
  148. package/dist/languages/futhark.cjs +56 -0
  149. package/dist/languages/futhark.d.cts +53 -0
  150. package/dist/languages/futhark.d.ts +53 -0
  151. package/dist/languages/futhark.js +54 -0
  152. package/dist/languages/gcode.cjs +1 -1
  153. package/dist/languages/gcode.js +1 -1
  154. package/dist/languages/gettext.cjs +1 -1
  155. package/dist/languages/gettext.js +1 -1
  156. package/dist/languages/gleam.cjs +3 -0
  157. package/dist/languages/gleam.d.cts +3 -0
  158. package/dist/languages/gleam.d.ts +3 -0
  159. package/dist/languages/gleam.js +3 -0
  160. package/dist/languages/go.cjs +1 -0
  161. package/dist/languages/go.d.cts +1 -0
  162. package/dist/languages/go.d.ts +1 -0
  163. package/dist/languages/go.js +1 -0
  164. package/dist/languages/hack.cjs +4 -1
  165. package/dist/languages/hack.d.cts +3 -0
  166. package/dist/languages/hack.d.ts +3 -0
  167. package/dist/languages/hack.js +4 -1
  168. package/dist/languages/haxe.cjs +3 -0
  169. package/dist/languages/haxe.d.cts +3 -0
  170. package/dist/languages/haxe.d.ts +3 -0
  171. package/dist/languages/haxe.js +3 -0
  172. package/dist/languages/hocon.cjs +1 -1
  173. package/dist/languages/hocon.js +1 -1
  174. package/dist/languages/io.cjs +1 -1
  175. package/dist/languages/io.js +1 -1
  176. package/dist/languages/j.cjs +52 -0
  177. package/dist/languages/j.d.cts +49 -0
  178. package/dist/languages/j.d.ts +49 -0
  179. package/dist/languages/j.js +50 -0
  180. package/dist/languages/javascript.cjs +1 -0
  181. package/dist/languages/javascript.d.cts +1 -0
  182. package/dist/languages/javascript.d.ts +1 -0
  183. package/dist/languages/javascript.js +1 -0
  184. package/dist/languages/jcl.cjs +52 -0
  185. package/dist/languages/jcl.d.cts +49 -0
  186. package/dist/languages/jcl.d.ts +49 -0
  187. package/dist/languages/jcl.js +50 -0
  188. package/dist/languages/jq.cjs +52 -0
  189. package/dist/languages/jq.d.cts +49 -0
  190. package/dist/languages/jq.d.ts +49 -0
  191. package/dist/languages/jq.js +50 -0
  192. package/dist/languages/json5.cjs +3 -0
  193. package/dist/languages/json5.d.cts +3 -0
  194. package/dist/languages/json5.d.ts +3 -0
  195. package/dist/languages/json5.js +3 -0
  196. package/dist/languages/jsonc.cjs +3 -0
  197. package/dist/languages/jsonc.d.cts +3 -0
  198. package/dist/languages/jsonc.d.ts +3 -0
  199. package/dist/languages/jsonc.js +3 -0
  200. package/dist/languages/kotlin.cjs +1 -0
  201. package/dist/languages/kotlin.d.cts +1 -0
  202. package/dist/languages/kotlin.d.ts +1 -0
  203. package/dist/languages/kotlin.js +1 -0
  204. package/dist/languages/less.cjs +4 -0
  205. package/dist/languages/less.d.cts +4 -0
  206. package/dist/languages/less.d.ts +4 -0
  207. package/dist/languages/less.js +4 -0
  208. package/dist/languages/lex.cjs +53 -0
  209. package/dist/languages/lex.d.cts +50 -0
  210. package/dist/languages/lex.d.ts +50 -0
  211. package/dist/languages/lex.js +51 -0
  212. package/dist/languages/linkerscript.cjs +1 -1
  213. package/dist/languages/linkerscript.js +1 -1
  214. package/dist/languages/lobster.cjs +1 -1
  215. package/dist/languages/lobster.js +1 -1
  216. package/dist/languages/luau.cjs +3 -0
  217. package/dist/languages/luau.d.cts +3 -0
  218. package/dist/languages/luau.d.ts +3 -0
  219. package/dist/languages/luau.js +3 -0
  220. package/dist/languages/markdown.cjs +1 -0
  221. package/dist/languages/markdown.d.cts +1 -0
  222. package/dist/languages/markdown.d.ts +1 -0
  223. package/dist/languages/markdown.js +1 -0
  224. package/dist/languages/mdx.cjs +3 -0
  225. package/dist/languages/mdx.d.cts +3 -0
  226. package/dist/languages/mdx.d.ts +3 -0
  227. package/dist/languages/mdx.js +3 -0
  228. package/dist/languages/modula-2.cjs +1 -1
  229. package/dist/languages/modula-2.js +1 -1
  230. package/dist/languages/nim.cjs +3 -0
  231. package/dist/languages/nim.d.cts +3 -0
  232. package/dist/languages/nim.d.ts +3 -0
  233. package/dist/languages/nim.js +3 -0
  234. package/dist/languages/noir.cjs +54 -0
  235. package/dist/languages/noir.d.cts +51 -0
  236. package/dist/languages/noir.d.ts +51 -0
  237. package/dist/languages/noir.js +52 -0
  238. package/dist/languages/nushell.cjs +1 -1
  239. package/dist/languages/nushell.js +1 -1
  240. package/dist/languages/oberon.cjs +1 -1
  241. package/dist/languages/oberon.js +1 -1
  242. package/dist/languages/objective-c.cjs +4 -0
  243. package/dist/languages/objective-c.d.cts +4 -0
  244. package/dist/languages/objective-c.d.ts +4 -0
  245. package/dist/languages/objective-c.js +4 -0
  246. package/dist/languages/pl-i.cjs +1 -1
  247. package/dist/languages/pl-i.js +1 -1
  248. package/dist/languages/plpgsql.cjs +3 -0
  249. package/dist/languages/plpgsql.d.cts +3 -0
  250. package/dist/languages/plpgsql.d.ts +3 -0
  251. package/dist/languages/plpgsql.js +3 -0
  252. package/dist/languages/plsql.cjs +3 -0
  253. package/dist/languages/plsql.d.cts +3 -0
  254. package/dist/languages/plsql.d.ts +3 -0
  255. package/dist/languages/plsql.js +3 -0
  256. package/dist/languages/postscript.cjs +1 -1
  257. package/dist/languages/postscript.js +1 -1
  258. package/dist/languages/powerquery.cjs +1 -1
  259. package/dist/languages/powerquery.js +1 -1
  260. package/dist/languages/powershell.cjs +1 -0
  261. package/dist/languages/powershell.d.cts +1 -0
  262. package/dist/languages/powershell.d.ts +1 -0
  263. package/dist/languages/powershell.js +1 -0
  264. package/dist/languages/properties.cjs +53 -0
  265. package/dist/languages/properties.d.cts +50 -0
  266. package/dist/languages/properties.d.ts +50 -0
  267. package/dist/languages/properties.js +51 -0
  268. package/dist/languages/protobuf.cjs +1 -0
  269. package/dist/languages/protobuf.d.cts +1 -0
  270. package/dist/languages/protobuf.d.ts +1 -0
  271. package/dist/languages/protobuf.js +1 -0
  272. package/dist/languages/prql.cjs +56 -0
  273. package/dist/languages/prql.d.cts +53 -0
  274. package/dist/languages/prql.d.ts +53 -0
  275. package/dist/languages/prql.js +54 -0
  276. package/dist/languages/purescript.cjs +3 -0
  277. package/dist/languages/purescript.d.cts +3 -0
  278. package/dist/languages/purescript.d.ts +3 -0
  279. package/dist/languages/purescript.js +3 -0
  280. package/dist/languages/python.cjs +1 -0
  281. package/dist/languages/python.d.cts +1 -0
  282. package/dist/languages/python.d.ts +1 -0
  283. package/dist/languages/python.js +1 -0
  284. package/dist/languages/q.cjs +53 -0
  285. package/dist/languages/q.d.cts +50 -0
  286. package/dist/languages/q.d.ts +50 -0
  287. package/dist/languages/q.js +51 -0
  288. package/dist/languages/raku.cjs +1 -0
  289. package/dist/languages/raku.d.cts +1 -0
  290. package/dist/languages/raku.d.ts +1 -0
  291. package/dist/languages/raku.js +1 -0
  292. package/dist/languages/reasonml.cjs +3 -0
  293. package/dist/languages/reasonml.d.cts +3 -0
  294. package/dist/languages/reasonml.d.ts +3 -0
  295. package/dist/languages/reasonml.js +3 -0
  296. package/dist/languages/renpy.cjs +53 -0
  297. package/dist/languages/renpy.d.cts +50 -0
  298. package/dist/languages/renpy.d.ts +50 -0
  299. package/dist/languages/renpy.js +51 -0
  300. package/dist/languages/rescript.cjs +3 -0
  301. package/dist/languages/rescript.d.cts +3 -0
  302. package/dist/languages/rescript.d.ts +3 -0
  303. package/dist/languages/rescript.js +3 -0
  304. package/dist/languages/restructuredtext.cjs +1 -0
  305. package/dist/languages/restructuredtext.d.cts +1 -0
  306. package/dist/languages/restructuredtext.d.ts +1 -0
  307. package/dist/languages/restructuredtext.js +1 -0
  308. package/dist/languages/rexx.cjs +52 -0
  309. package/dist/languages/rexx.d.cts +49 -0
  310. package/dist/languages/rexx.d.ts +49 -0
  311. package/dist/languages/rexx.js +50 -0
  312. package/dist/languages/ruby.cjs +1 -0
  313. package/dist/languages/ruby.d.cts +1 -0
  314. package/dist/languages/ruby.d.ts +1 -0
  315. package/dist/languages/ruby.js +1 -0
  316. package/dist/languages/scss.cjs +4 -0
  317. package/dist/languages/scss.d.cts +4 -0
  318. package/dist/languages/scss.d.ts +4 -0
  319. package/dist/languages/scss.js +4 -0
  320. package/dist/languages/simula.cjs +2 -1
  321. package/dist/languages/simula.d.cts +1 -0
  322. package/dist/languages/simula.d.ts +1 -0
  323. package/dist/languages/simula.js +2 -1
  324. package/dist/languages/slang.cjs +55 -0
  325. package/dist/languages/slang.d.cts +52 -0
  326. package/dist/languages/slang.d.ts +52 -0
  327. package/dist/languages/slang.js +53 -0
  328. package/dist/languages/smithy.cjs +53 -0
  329. package/dist/languages/smithy.d.cts +50 -0
  330. package/dist/languages/smithy.d.ts +50 -0
  331. package/dist/languages/smithy.js +51 -0
  332. package/dist/languages/snobol.cjs +2 -1
  333. package/dist/languages/snobol.d.cts +1 -0
  334. package/dist/languages/snobol.d.ts +1 -0
  335. package/dist/languages/snobol.js +2 -1
  336. package/dist/languages/spark.cjs +1 -1
  337. package/dist/languages/spark.js +1 -1
  338. package/dist/languages/spss.cjs +1 -1
  339. package/dist/languages/spss.js +1 -1
  340. package/dist/languages/squirrel.cjs +1 -1
  341. package/dist/languages/squirrel.js +1 -1
  342. package/dist/languages/stylus.cjs +4 -0
  343. package/dist/languages/stylus.d.cts +4 -0
  344. package/dist/languages/stylus.d.ts +4 -0
  345. package/dist/languages/stylus.js +4 -0
  346. package/dist/languages/supercollider.cjs +54 -0
  347. package/dist/languages/supercollider.d.cts +51 -0
  348. package/dist/languages/supercollider.d.ts +51 -0
  349. package/dist/languages/supercollider.js +52 -0
  350. package/dist/languages/svelte.cjs +3 -0
  351. package/dist/languages/svelte.d.cts +3 -0
  352. package/dist/languages/svelte.d.ts +3 -0
  353. package/dist/languages/svelte.js +3 -0
  354. package/dist/languages/sway.cjs +54 -0
  355. package/dist/languages/sway.d.cts +51 -0
  356. package/dist/languages/sway.d.ts +51 -0
  357. package/dist/languages/sway.js +52 -0
  358. package/dist/languages/tcsh.cjs +1 -1
  359. package/dist/languages/tcsh.js +1 -1
  360. package/dist/languages/tex.cjs +1 -0
  361. package/dist/languages/tex.d.cts +1 -0
  362. package/dist/languages/tex.d.ts +1 -0
  363. package/dist/languages/tex.js +1 -0
  364. package/dist/languages/tsql.cjs +3 -0
  365. package/dist/languages/tsql.d.cts +3 -0
  366. package/dist/languages/tsql.d.ts +3 -0
  367. package/dist/languages/tsql.js +3 -0
  368. package/dist/languages/typescript.cjs +5 -0
  369. package/dist/languages/typescript.d.cts +5 -0
  370. package/dist/languages/typescript.d.ts +5 -0
  371. package/dist/languages/typescript.js +5 -0
  372. package/dist/languages/typespec.cjs +57 -0
  373. package/dist/languages/typespec.d.cts +54 -0
  374. package/dist/languages/typespec.d.ts +54 -0
  375. package/dist/languages/typespec.js +55 -0
  376. package/dist/languages/v.cjs +3 -0
  377. package/dist/languages/v.d.cts +3 -0
  378. package/dist/languages/v.d.ts +3 -0
  379. package/dist/languages/v.js +3 -0
  380. package/dist/languages/vale.cjs +2 -1
  381. package/dist/languages/vale.d.cts +1 -0
  382. package/dist/languages/vale.d.ts +1 -0
  383. package/dist/languages/vale.js +2 -1
  384. package/dist/languages/vba.cjs +4 -1
  385. package/dist/languages/vba.d.cts +3 -0
  386. package/dist/languages/vba.d.ts +3 -0
  387. package/dist/languages/vba.js +4 -1
  388. package/dist/languages/vbscript.cjs +56 -0
  389. package/dist/languages/vbscript.d.cts +53 -0
  390. package/dist/languages/vbscript.d.ts +53 -0
  391. package/dist/languages/vbscript.js +54 -0
  392. package/dist/languages/verse.cjs +1 -1
  393. package/dist/languages/verse.js +1 -1
  394. package/dist/languages/vimscript.cjs +54 -0
  395. package/dist/languages/vimscript.d.cts +51 -0
  396. package/dist/languages/vimscript.d.ts +51 -0
  397. package/dist/languages/vimscript.js +52 -0
  398. package/dist/languages/visual-basic.cjs +1 -0
  399. package/dist/languages/visual-basic.d.cts +1 -0
  400. package/dist/languages/visual-basic.d.ts +1 -0
  401. package/dist/languages/visual-basic.js +1 -0
  402. package/dist/languages/webassembly.cjs +1 -0
  403. package/dist/languages/webassembly.d.cts +1 -0
  404. package/dist/languages/webassembly.d.ts +1 -0
  405. package/dist/languages/webassembly.js +1 -0
  406. package/dist/languages/yacc.cjs +55 -0
  407. package/dist/languages/yacc.d.cts +50 -0
  408. package/dist/languages/yacc.d.ts +50 -0
  409. package/dist/languages/yacc.js +53 -0
  410. package/dist/{registry-p4uQJ2gP.d.cts → registry-DftZRMv6.d.cts} +132 -51
  411. package/dist/{registry-p4uQJ2gP.d.ts → registry-DftZRMv6.d.ts} +132 -51
  412. package/dist/shebang-Be8JBsB_.d.cts +17 -0
  413. package/dist/shebang-wOz_EqIy.d.ts +17 -0
  414. package/dist/{types-B0_wjl_Q.d.cts → types-BRDmsib7.d.cts} +25 -1
  415. package/dist/{types-B0_wjl_Q.d.ts → types-BRDmsib7.d.ts} +25 -1
  416. package/package.json +147 -10
@@ -1,5 +1,72 @@
1
1
  'use strict';
2
2
 
3
+ // src/domain/detection/match.ts
4
+ var pathSegmentPattern = /[/\\]/;
5
+ var indexCache = /* @__PURE__ */ new WeakMap();
6
+ var getBasename = (filename) => {
7
+ const parts = filename.trim().split(pathSegmentPattern);
8
+ return parts.at(-1).toLowerCase();
9
+ };
10
+ var addIndexKey = (index, key, match) => {
11
+ const matches = index.get(key);
12
+ if (matches) {
13
+ matches.push(match);
14
+ } else {
15
+ index.set(key, [match]);
16
+ }
17
+ };
18
+ var buildDetectionIndex = (entries) => {
19
+ const index = /* @__PURE__ */ new Map();
20
+ entries.forEach((entry, entryIndex) => {
21
+ for (const extension of entry.extensions) {
22
+ const normalizedExtension = extension.toLowerCase();
23
+ const match = { entry, index: entryIndex, matchLength: extension.length };
24
+ if (normalizedExtension.startsWith(".")) {
25
+ addIndexKey(index, normalizedExtension, match);
26
+ } else {
27
+ addIndexKey(index, normalizedExtension, match);
28
+ addIndexKey(index, `.${normalizedExtension}`, match);
29
+ }
30
+ }
31
+ });
32
+ return index;
33
+ };
34
+ var getDetectionIndex = (entries) => {
35
+ let index = indexCache.get(entries);
36
+ if (!index) {
37
+ index = buildDetectionIndex(entries);
38
+ indexCache.set(entries, index);
39
+ }
40
+ return index;
41
+ };
42
+ var getLookupKeys = (basename) => {
43
+ const keys = [basename];
44
+ for (let position = basename.indexOf("."); position !== -1; position = basename.indexOf(".", position + 1)) {
45
+ const suffix = basename.slice(position);
46
+ if (suffix !== basename) {
47
+ keys.push(suffix);
48
+ }
49
+ }
50
+ return keys;
51
+ };
52
+ var detectMatchingEntries = (entries, filename) => {
53
+ const basename = getBasename(filename);
54
+ if (!basename) {
55
+ return [];
56
+ }
57
+ const index = getDetectionIndex(entries);
58
+ const bestMatches = /* @__PURE__ */ new Map();
59
+ for (const key of getLookupKeys(basename)) {
60
+ for (const match of index.get(key) ?? []) {
61
+ const existing = bestMatches.get(match.index);
62
+ if (!existing || match.matchLength > existing.matchLength) {
63
+ bestMatches.set(match.index, match);
64
+ }
65
+ }
66
+ }
67
+ return [...bestMatches.values()].sort((first, second) => second.matchLength - first.matchLength || first.index - second.index).map(({ entry }) => entry);
68
+ };
69
+
3
70
  // src/domain/language/registry.ts
4
71
  var languageIndex = [
5
72
  { slug: "abap", extensions: [".abap"] },
@@ -7,46 +74,49 @@ var languageIndex = [
7
74
  { slug: "ada", extensions: [".adb", ".ads", ".ada"] },
8
75
  { slug: "agda", extensions: [".agda", ".lagda", ".lagda.md", ".lagda.rst", ".lagda.tex"] },
9
76
  { slug: "algol", extensions: [".alg", ".algol"] },
77
+ { slug: "alloy", extensions: [".als"] },
10
78
  { slug: "ampl", extensions: [".mod", ".dat", ".run"] },
79
+ { slug: "angelscript", extensions: [".as", ".angelscript"] },
11
80
  { slug: "ante", extensions: [".ante"] },
12
81
  { slug: "antlr", extensions: [".g4"] },
13
82
  { slug: "apex", extensions: [".cls", ".trigger"] },
14
83
  { slug: "apl", extensions: [".apl", ".dyalog"] },
15
84
  { slug: "applescript", extensions: [".applescript", ".scpt", ".scptd"] },
16
- { slug: "arduino", extensions: [".ino", ".pde"] },
17
85
  { slug: "aql", extensions: [".aql"] },
86
+ { slug: "arduino", extensions: [".ino", ".pde"] },
18
87
  { slug: "asciidoc", extensions: [".adoc", ".asciidoc", ".asc"] },
19
88
  { slug: "asp", extensions: [".asp", ".aspx", ".ascx", ".ashx", ".asmx", ".master"] },
20
89
  { slug: "assembly", extensions: [".asm", ".s", ".S", ".inc"] },
21
90
  { slug: "assemblyscript", extensions: [".as"] },
22
- { slug: "angelscript", extensions: [".as", ".angelscript"] },
23
91
  { slug: "astro", extensions: [".astro"] },
24
92
  { slug: "austral", extensions: [".aum", ".aui"] },
25
93
  { slug: "autohotkey", extensions: [".ahk", ".ah2"] },
26
94
  { slug: "avro-idl", extensions: [".avdl"] },
27
95
  { slug: "awk", extensions: [".awk"] },
28
96
  { slug: "ballerina", extensions: [".bal"] },
29
- { slug: "basic", extensions: [".bas", ".bi", ".bb"] },
30
97
  {
31
98
  slug: "bash",
32
99
  extensions: [".sh", ".bash", ".bashrc", ".bash_profile", ".bash_login", ".profile"]
33
100
  },
101
+ { slug: "basic", extensions: [".bas", ".bi", ".bb"] },
34
102
  { slug: "batch", extensions: [".bat", ".cmd"] },
35
103
  { slug: "bazel", extensions: ["BUILD.bazel", "WORKSPACE", "WORKSPACE.bazel", "MODULE.bazel"] },
36
104
  { slug: "bcpl", extensions: [".bcpl"] },
37
- { slug: "bicep", extensions: [".bicep", ".bicepparam"] },
38
105
  { slug: "bibtex", extensions: [".bib", ".bibtex"] },
106
+ { slug: "bicep", extensions: [".bicep", ".bicepparam"] },
39
107
  { slug: "blade", extensions: [".blade.php"] },
40
108
  { slug: "bosque", extensions: [".bsq"] },
41
109
  { slug: "bqn", extensions: [".bqn"] },
42
110
  { slug: "brainfuck", extensions: [".bf", ".b"] },
43
111
  { slug: "c", extensions: [".c", ".h"] },
112
+ { slug: "c3", extensions: [".c3", ".c3i"] },
44
113
  { slug: "cairo", extensions: [".cairo"] },
45
114
  { slug: "capnproto", extensions: [".capnp"] },
46
115
  { slug: "carbon", extensions: [".carbon"] },
47
116
  { slug: "cel", extensions: [".cel"] },
48
117
  { slug: "chapel", extensions: [".chpl"] },
49
118
  { slug: "circom", extensions: [".circom"] },
119
+ { slug: "clarity", extensions: [".clar"] },
50
120
  { slug: "clojure", extensions: [".clj", ".cljs", ".cljc", ".edn", ".bb"] },
51
121
  { slug: "cmake", extensions: ["CMakeLists.txt", ".cmake"] },
52
122
  { slug: "cobol", extensions: [".cob", ".cbl", ".cobol", ".cpy"] },
@@ -54,13 +124,14 @@ var languageIndex = [
54
124
  { slug: "coldfusion", extensions: [".cfm", ".cfml", ".cfc"] },
55
125
  { slug: "coq", extensions: [".v"] },
56
126
  { slug: "cpp", extensions: [".cpp", ".cc", ".cxx", ".h", ".hpp", ".hh", ".hxx"] },
57
- { slug: "crystal", extensions: [".cr"] },
58
127
  { slug: "cql", extensions: [".cql"] },
128
+ { slug: "crystal", extensions: [".cr"] },
59
129
  { slug: "csharp", extensions: [".cs", ".csx"] },
60
130
  { slug: "css", extensions: [".css"] },
61
131
  { slug: "cuda", extensions: [".cu", ".cuh"] },
62
132
  { slug: "cue", extensions: [".cue"] },
63
133
  { slug: "curry", extensions: [".curry", ".lcurry"] },
134
+ { slug: "cwl", extensions: [".cwl"] },
64
135
  { slug: "cypher", extensions: [".cypher", ".cyp"] },
65
136
  { slug: "cython", extensions: [".pyx", ".pxd", ".pxi"] },
66
137
  { slug: "d", extensions: [".d", ".di"] },
@@ -72,41 +143,46 @@ var languageIndex = [
72
143
  { slug: "dockerfile", extensions: ["Dockerfile", ".dockerfile"] },
73
144
  { slug: "dot", extensions: [".dot", ".gv"] },
74
145
  { slug: "earthly", extensions: ["Earthfile"] },
146
+ { slug: "edgeql", extensions: [".edgeql"] },
75
147
  { slug: "editorconfig", extensions: [".editorconfig"] },
76
148
  { slug: "eiffel", extensions: [".e"] },
77
149
  { slug: "ejs", extensions: [".ejs"] },
78
150
  { slug: "elixir", extensions: [".ex", ".exs", ".eex", ".leex", ".heex"] },
79
151
  { slug: "elm", extensions: [".elm"] },
152
+ { slug: "emacs-lisp", extensions: [".el"] },
80
153
  { slug: "erb", extensions: [".erb", ".rhtml", ".html.erb"] },
81
154
  {
82
155
  slug: "erlang",
83
156
  extensions: [".erl", ".hrl", ".app.src", ".escript", ".xrl", ".yrl", "rebar.config"]
84
157
  },
85
158
  { slug: "factor", extensions: [".factor"] },
159
+ { slug: "faust", extensions: [".dsp"] },
86
160
  { slug: "fe", extensions: [".fe"] },
87
161
  { slug: "fennel", extensions: [".fnl"] },
88
162
  { slug: "fish", extensions: [".fish"] },
89
163
  { slug: "flatbuffers", extensions: [".fbs"] },
164
+ { slug: "flix", extensions: [".flix"] },
90
165
  { slug: "flux", extensions: [".flux"] },
91
166
  { slug: "forth", extensions: [".fs", ".fth", ".forth", ".4th"] },
92
167
  {
93
168
  slug: "fortran",
94
169
  extensions: [".f", ".for", ".ftn", ".f90", ".f95", ".f03", ".f08", ".f18", ".f23"]
95
170
  },
96
- { slug: "freemarker", extensions: [".ftl", ".ftlh", ".ftlx"] },
97
171
  { slug: "fql", extensions: [".fql"] },
172
+ { slug: "freemarker", extensions: [".ftl", ".ftlh", ".ftlx"] },
98
173
  { slug: "fsharp", extensions: [".fs", ".fsi", ".fsx", ".fsscript"] },
99
174
  { slug: "fstar", extensions: [".fst", ".fsti"] },
100
- { slug: "gdscript", extensions: [".gd"] },
175
+ { slug: "futhark", extensions: [".fut"] },
101
176
  { slug: "gcode", extensions: [".gcode", ".gco", ".nc", ".cnc", ".tap"] },
177
+ { slug: "gdscript", extensions: [".gd"] },
102
178
  { slug: "gettext", extensions: [".po", ".pot"] },
103
179
  { slug: "git", extensions: [".git", ".gitignore", ".gitattributes", ".gitmodules", ".gitkeep"] },
104
180
  { slug: "gleam", extensions: [".gleam"] },
105
- { slug: "gml", extensions: [".gml"] },
106
181
  {
107
182
  slug: "glsl",
108
183
  extensions: [".glsl", ".vert", ".frag", ".geom", ".tesc", ".tese", ".comp", ".vs", ".fs"]
109
184
  },
185
+ { slug: "gml", extensions: [".gml"] },
110
186
  { slug: "go", extensions: [".go"] },
111
187
  { slug: "gradle", extensions: [".gradle", ".gradle.kts"] },
112
188
  { slug: "grain", extensions: [".gr"] },
@@ -130,11 +206,14 @@ var languageIndex = [
130
206
  { slug: "ink-narrative", extensions: [".ink"] },
131
207
  { slug: "io", extensions: [".io"] },
132
208
  { slug: "isabelle", extensions: [".thy"] },
209
+ { slug: "j", extensions: [".ijs"] },
133
210
  { slug: "janet", extensions: [".janet", ".jdn"] },
134
211
  { slug: "java", extensions: [".java"] },
135
212
  { slug: "javascript", extensions: [".js", ".mjs", ".cjs", ".jsx"] },
213
+ { slug: "jcl", extensions: [".jcl"] },
136
214
  { slug: "jinja", extensions: [".jinja", ".jinja2", ".j2"] },
137
215
  { slug: "jmespath", extensions: [".jmespath", ".jp"] },
216
+ { slug: "jq", extensions: [".jq"] },
138
217
  { slug: "json", extensions: [".json"] },
139
218
  { slug: "json5", extensions: [".json5"] },
140
219
  { slug: "jsonata", extensions: [".jsonata"] },
@@ -150,9 +229,10 @@ var languageIndex = [
150
229
  { slug: "kql", extensions: [".kql"] },
151
230
  { slug: "lean", extensions: [".lean"] },
152
231
  { slug: "less", extensions: [".less"] },
232
+ { slug: "lex", extensions: [".l", ".lex"] },
153
233
  { slug: "ligo", extensions: [".ligo", ".mligo", ".religo", ".jsligo"] },
154
- { slug: "liquid", extensions: [".liquid"] },
155
234
  { slug: "linkerscript", extensions: [".ld", ".lds", ".x"] },
235
+ { slug: "liquid", extensions: [".liquid"] },
156
236
  { slug: "lisp", extensions: [".lisp", ".lsp", ".cl", ".asd"] },
157
237
  { slug: "llvm-ir", extensions: [".ll", ".bc"] },
158
238
  { slug: "lobster", extensions: [".lobster"] },
@@ -167,13 +247,13 @@ var languageIndex = [
167
247
  { slug: "matlab", extensions: [".m", ".mlx"] },
168
248
  { slug: "maxima", extensions: [".mac", ".wxm"] },
169
249
  { slug: "mdx", extensions: [".mdx"] },
250
+ { slug: "mercury", extensions: [".m"] },
170
251
  { slug: "mermaid", extensions: [".mmd", ".mermaid"] },
171
252
  { slug: "meson", extensions: ["meson.build", "meson_options.txt", "meson.options", ".wrap"] },
172
- { slug: "mercury", extensions: [".m"] },
173
253
  { slug: "metal", extensions: [".metal"] },
174
254
  { slug: "modelica", extensions: [".mo"] },
175
- { slug: "mojo", extensions: [".mojo"] },
176
255
  { slug: "modula-2", extensions: [".mod", ".def"] },
256
+ { slug: "mojo", extensions: [".mojo"] },
177
257
  { slug: "moonbit", extensions: [".mbt"] },
178
258
  { slug: "move", extensions: [".move"] },
179
259
  { slug: "mumps", extensions: [".mac", ".int", ".ro", ".mro"] },
@@ -184,12 +264,13 @@ var languageIndex = [
184
264
  { slug: "nickel", extensions: [".ncl"] },
185
265
  { slug: "nim", extensions: [".nim", ".nims", ".nimble"] },
186
266
  { slug: "nix", extensions: [".nix"] },
267
+ { slug: "noir", extensions: [".nr"] },
187
268
  { slug: "nunjucks", extensions: [".njk", ".nunjucks"] },
188
269
  { slug: "nushell", extensions: [".nu"] },
270
+ { slug: "oberon", extensions: [".ob", ".mod"] },
189
271
  { slug: "objective-c", extensions: [".m", ".mm"] },
190
272
  { slug: "ocaml", extensions: [".ml", ".mli", ".mll", ".mly", ".mlt", ".eliom", ".eliomi"] },
191
273
  { slug: "octave", extensions: [".m", ".octave"] },
192
- { slug: "oberon", extensions: [".ob", ".mod"] },
193
274
  { slug: "odin", extensions: [".odin"] },
194
275
  { slug: "openapi", extensions: [".openapi.json", ".openapi.yaml", ".openapi.yml"] },
195
276
  { slug: "opencl", extensions: [".cl", ".clh"] },
@@ -199,8 +280,8 @@ var languageIndex = [
199
280
  { slug: "perl", extensions: [".pl", ".pm", ".pod", ".t", ".psgi"] },
200
281
  { slug: "php", extensions: [".php", ".phtml", ".php3", ".php4", ".php5", ".phps"] },
201
282
  { slug: "pine-script", extensions: [".pine"] },
202
- { slug: "pl-i", extensions: [".pli", ".pl1"] },
203
283
  { slug: "pkl", extensions: [".pkl"] },
284
+ { slug: "pl-i", extensions: [".pli", ".pl1"] },
204
285
  { slug: "plantuml", extensions: [".puml", ".plantuml", ".iuml"] },
205
286
  { slug: "plpgsql", extensions: [".pgsql", ".plpgsql"] },
206
287
  { slug: "plsql", extensions: [".pls", ".pks", ".pkb", ".plsql"] },
@@ -212,24 +293,29 @@ var languageIndex = [
212
293
  { slug: "processing", extensions: [".pde"] },
213
294
  { slug: "prolog", extensions: [".pl", ".pro", ".prolog", ".P"] },
214
295
  { slug: "promql", extensions: [".promql"] },
296
+ { slug: "properties", extensions: [".properties"] },
215
297
  { slug: "protobuf", extensions: [".proto"] },
298
+ { slug: "prql", extensions: [".prql"] },
216
299
  { slug: "pug", extensions: [".pug", ".jade"] },
217
300
  { slug: "puppet", extensions: [".pp", ".epp"] },
218
301
  { slug: "purescript", extensions: [".purs"] },
219
302
  { slug: "python", extensions: [".py", ".pyw"] },
220
- { slug: "qml", extensions: [".qml", ".qmltypes", ".qmlproject"] },
303
+ { slug: "q", extensions: [".q", ".k"] },
221
304
  { slug: "qmake", extensions: [".pri", ".prf"] },
305
+ { slug: "qml", extensions: [".qml", ".qmltypes", ".qmlproject"] },
222
306
  { slug: "qsharp", extensions: [".qs"] },
223
307
  { slug: "r", extensions: [".r", ".R", ".rmd", ".Rmd", ".qmd", ".Rprofile"] },
224
308
  { slug: "racket", extensions: [".rkt", ".rktd", ".rktl", ".scrbl"] },
225
309
  { slug: "raku", extensions: [".raku", ".rakumod", ".rakudoc", ".rakutest", ".p6", ".pm6"] },
226
310
  { slug: "razor", extensions: [".cshtml", ".razor"] },
311
+ { slug: "reasonml", extensions: [".re", ".rei"] },
227
312
  { slug: "rebol", extensions: [".r", ".reb", ".rebol"] },
228
313
  { slug: "red", extensions: [".red", ".reds"] },
229
- { slug: "reasonml", extensions: [".re", ".rei"] },
230
314
  { slug: "rego", extensions: [".rego"] },
315
+ { slug: "renpy", extensions: [".rpy", ".rpym"] },
231
316
  { slug: "rescript", extensions: [".res", ".resi"] },
232
317
  { slug: "restructuredtext", extensions: [".rst", ".rest"] },
318
+ { slug: "rexx", extensions: [".rexx", ".rex"] },
233
319
  { slug: "roc", extensions: [".roc"] },
234
320
  { slug: "rpg", extensions: [".rpg", ".rpgle", ".sqlrpgle", ".clle", ".dspf"] },
235
321
  {
@@ -243,14 +329,16 @@ var languageIndex = [
243
329
  { slug: "scss", extensions: [".scss", ".sass"] },
244
330
  { slug: "self", extensions: [".self"] },
245
331
  { slug: "simula", extensions: [".sim", ".simula"] },
332
+ { slug: "slang", extensions: [".slang"] },
246
333
  { slug: "smalltalk", extensions: [".st"] },
247
334
  { slug: "smarty", extensions: [".tpl", ".smarty"] },
335
+ { slug: "smithy", extensions: [".smithy"] },
248
336
  { slug: "snakemake", extensions: [".smk", "Snakefile"] },
249
337
  { slug: "snobol", extensions: [".sno", ".snobol"] },
250
338
  { slug: "solidity", extensions: [".sol"] },
251
339
  { slug: "soql", extensions: [".soql"] },
252
- { slug: "sparql", extensions: [".sparql", ".rq"] },
253
340
  { slug: "spark", extensions: [".spark", ".adb", ".ads"] },
341
+ { slug: "sparql", extensions: [".sparql", ".rq"] },
254
342
  { slug: "spl", extensions: [".spl"] },
255
343
  { slug: "spss", extensions: [".sps", ".spss"] },
256
344
  { slug: "sql", extensions: [".sql"] },
@@ -259,9 +347,11 @@ var languageIndex = [
259
347
  { slug: "starlark", extensions: [".bzl", ".star", ".sky"] },
260
348
  { slug: "stata", extensions: [".do", ".ado", ".mata"] },
261
349
  { slug: "stylus", extensions: [".styl"] },
350
+ { slug: "supercollider", extensions: [".scd", ".sc"] },
262
351
  { slug: "svelte", extensions: [".svelte"] },
263
352
  { slug: "svg", extensions: [".svg", ".svgz"] },
264
353
  { slug: "svn", extensions: [".svn", "svnserve.conf"] },
354
+ { slug: "sway", extensions: [".sw"] },
265
355
  { slug: "swift", extensions: [".swift"] },
266
356
  { slug: "tcl", extensions: [".tcl", ".tm", ".test"] },
267
357
  { slug: "tcsh", extensions: [".tcsh", ".csh", ".tcshrc", ".cshrc"] },
@@ -275,21 +365,24 @@ var languageIndex = [
275
365
  { slug: "twee", extensions: [".tw", ".twee", ".tw2"] },
276
366
  { slug: "twig", extensions: [".twig"] },
277
367
  { slug: "typescript", extensions: [".ts", ".tsx", ".mts", ".cts"] },
368
+ { slug: "typespec", extensions: [".tsp"] },
278
369
  { slug: "typst", extensions: [".typ"] },
279
370
  { slug: "unison", extensions: [".u", ".uu"] },
280
371
  { slug: "v", extensions: [".v", ".vsh"] },
281
372
  { slug: "vala", extensions: [".vala", ".vapi"] },
282
- { slug: "vba", extensions: [".bas", ".cls", ".frm", ".vba"] },
283
373
  { slug: "vale", extensions: [".vale"] },
374
+ { slug: "vba", extensions: [".bas", ".cls", ".frm", ".vba"] },
375
+ { slug: "vbscript", extensions: [".vbs", ".vbe"] },
284
376
  { slug: "velocity", extensions: [".vm", ".vtl"] },
285
377
  { slug: "verilog", extensions: [".v", ".vh", ".sv", ".svh"] },
286
378
  { slug: "verse", extensions: [".verse"] },
287
379
  { slug: "vhdl", extensions: [".vhd", ".vhdl"] },
380
+ { slug: "vimscript", extensions: [".vim", ".vimrc", ".gvimrc"] },
288
381
  { slug: "visual-basic", extensions: [".vb"] },
289
382
  { slug: "vue", extensions: [".vue"] },
290
383
  { slug: "vyper", extensions: [".vy"] },
291
- { slug: "webassembly", extensions: [".wasm", ".wat"] },
292
384
  { slug: "wdl", extensions: [".wdl"] },
385
+ { slug: "webassembly", extensions: [".wasm", ".wat"] },
293
386
  { slug: "wgsl", extensions: [".wgsl"] },
294
387
  { slug: "wren", extensions: [".wren"] },
295
388
  { slug: "xaml", extensions: [".xaml", ".baml"] },
@@ -297,6 +390,7 @@ var languageIndex = [
297
390
  { slug: "xpath", extensions: [".xpath", ".xpth"] },
298
391
  { slug: "xquery", extensions: [".xq", ".xql", ".xqm", ".xquery", ".xqy"] },
299
392
  { slug: "xslt", extensions: [".xsl", ".xslt"] },
393
+ { slug: "yacc", extensions: [".y", ".yacc"] },
300
394
  { slug: "yaml", extensions: [".yaml", ".yml"] },
301
395
  { slug: "yara", extensions: [".yar", ".yara"] },
302
396
  { slug: "zeek", extensions: [".zeek", ".bro"] },
@@ -308,31 +402,61 @@ var languageIndex = [
308
402
  }
309
403
  ];
310
404
 
311
- // src/domain/detection/match.ts
312
- var pathSegmentPattern = /[/\\]/;
313
- var getBasename = (filename) => {
314
- const parts = filename.trim().split(pathSegmentPattern);
315
- return parts.at(-1).toLowerCase();
405
+ // src/domain/detection/shebang.ts
406
+ var SHEBANG_INTERPRETERS = {
407
+ awk: "awk",
408
+ bash: "bash",
409
+ bun: "javascript",
410
+ crystal: "crystal",
411
+ csh: "tcsh",
412
+ dash: "bash",
413
+ deno: "typescript",
414
+ elixir: "elixir",
415
+ escript: "erlang",
416
+ expect: "tcl",
417
+ fish: "fish",
418
+ gawk: "awk",
419
+ groovy: "groovy",
420
+ guile: "scheme",
421
+ janet: "janet",
422
+ julia: "julia",
423
+ ksh: "bash",
424
+ lua: "lua",
425
+ mawk: "awk",
426
+ nawk: "awk",
427
+ node: "javascript",
428
+ nodejs: "javascript",
429
+ nu: "nushell",
430
+ osascript: "applescript",
431
+ perl: "perl",
432
+ php: "php",
433
+ pwsh: "powershell",
434
+ python: "python",
435
+ racket: "racket",
436
+ raku: "raku",
437
+ rscript: "r",
438
+ ruby: "ruby",
439
+ scala: "scala",
440
+ sh: "bash",
441
+ tclsh: "tcl",
442
+ tcsh: "tcsh",
443
+ wish: "tcl",
444
+ zsh: "zsh"
316
445
  };
317
- var matchesExtension = (basename, extension) => {
318
- const normalizedExtension = extension.toLowerCase();
319
- if (normalizedExtension.startsWith(".")) {
320
- return basename.endsWith(normalizedExtension);
446
+ var trailingVersionPattern = /[-.]?\d[\d.]*$/;
447
+ var lookupInterpreter = (interpreter) => SHEBANG_INTERPRETERS[interpreter] ?? SHEBANG_INTERPRETERS[interpreter.replace(trailingVersionPattern, "")];
448
+ var detectLanguageSlugByShebang = (content) => {
449
+ if (!content.startsWith("#!")) {
450
+ return void 0;
321
451
  }
322
- return basename === normalizedExtension || basename.endsWith(`.${normalizedExtension}`);
323
- };
324
- var detectMatchingEntries = (entries, filename) => {
325
- const basename = getBasename(filename);
326
- if (!basename) {
327
- return [];
452
+ const newlineIndex = content.search(/\r?\n/);
453
+ const firstLine = newlineIndex === -1 ? content : content.slice(0, newlineIndex);
454
+ const parts = firstLine.slice(2).trim().split(/\s+/);
455
+ let interpreter = parts[0]?.split("/").at(-1)?.toLowerCase();
456
+ if (interpreter === "env") {
457
+ interpreter = parts.slice(1).find((argument) => !argument.startsWith("-"))?.split("/").at(-1)?.toLowerCase();
328
458
  }
329
- return entries.map((entry, index) => ({
330
- entry,
331
- index,
332
- matchLength: Math.max(
333
- ...entry.extensions.filter((extension) => matchesExtension(basename, extension)).map((extension) => extension.length)
334
- )
335
- })).filter(({ matchLength }) => Number.isFinite(matchLength)).sort((first, second) => second.matchLength - first.matchLength || first.index - second.index).map(({ entry }) => entry);
459
+ return interpreter ? lookupInterpreter(interpreter) : void 0;
336
460
  };
337
461
 
338
462
  // src/domain/detection/detect-slugs.ts
@@ -351,5 +475,6 @@ var detectProjectLanguages = (filenames) => {
351
475
  };
352
476
 
353
477
  exports.detectLanguageSlug = detectLanguageSlug;
478
+ exports.detectLanguageSlugByShebang = detectLanguageSlugByShebang;
354
479
  exports.detectLanguageSlugs = detectLanguageSlugs;
355
480
  exports.detectProjectLanguages = detectProjectLanguages;
@@ -1,4 +1,5 @@
1
- import { L as LanguageSlug } from './registry-p4uQJ2gP.cjs';
1
+ import { L as LanguageSlug } from './registry-DftZRMv6.cjs';
2
+ export { d as detectLanguageSlugByShebang } from './shebang-Be8JBsB_.cjs';
2
3
 
3
4
  interface ProjectLanguageDetection {
4
5
  /** Detected language slug. */
@@ -1,4 +1,5 @@
1
- import { L as LanguageSlug } from './registry-p4uQJ2gP.js';
1
+ import { L as LanguageSlug } from './registry-DftZRMv6.js';
2
+ export { d as detectLanguageSlugByShebang } from './shebang-wOz_EqIy.js';
2
3
 
3
4
  interface ProjectLanguageDetection {
4
5
  /** Detected language slug. */