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