@ccview/server 0.1.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 (306) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +43 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/plugins/db.d.ts +9 -0
  6. package/dist/plugins/db.d.ts.map +1 -0
  7. package/dist/plugins/db.js +8 -0
  8. package/dist/plugins/db.js.map +1 -0
  9. package/dist/routes/analytics.d.ts +4 -0
  10. package/dist/routes/analytics.d.ts.map +1 -0
  11. package/dist/routes/analytics.js +59 -0
  12. package/dist/routes/analytics.js.map +1 -0
  13. package/dist/routes/config.d.ts +4 -0
  14. package/dist/routes/config.d.ts.map +1 -0
  15. package/dist/routes/config.js +119 -0
  16. package/dist/routes/config.js.map +1 -0
  17. package/dist/routes/projects.d.ts +4 -0
  18. package/dist/routes/projects.d.ts.map +1 -0
  19. package/dist/routes/projects.js +46 -0
  20. package/dist/routes/projects.js.map +1 -0
  21. package/dist/routes/sessions.d.ts +4 -0
  22. package/dist/routes/sessions.d.ts.map +1 -0
  23. package/dist/routes/sessions.js +66 -0
  24. package/dist/routes/sessions.js.map +1 -0
  25. package/dist/routes/sync.d.ts +4 -0
  26. package/dist/routes/sync.d.ts.map +1 -0
  27. package/dist/routes/sync.js +49 -0
  28. package/dist/routes/sync.js.map +1 -0
  29. package/package.json +35 -0
  30. package/web-dist/assets/abap-DsBKuouk.js +1 -0
  31. package/web-dist/assets/actionscript-3-D_z4Izcz.js +1 -0
  32. package/web-dist/assets/ada-727ZlQH0.js +1 -0
  33. package/web-dist/assets/andromeeda-C3khCPGq.js +1 -0
  34. package/web-dist/assets/angular-html-LfdN0zeE.js +1 -0
  35. package/web-dist/assets/angular-ts-CKsD7JZE.js +1 -0
  36. package/web-dist/assets/apache-Dn00JSTd.js +1 -0
  37. package/web-dist/assets/apex-COJ4H7py.js +1 -0
  38. package/web-dist/assets/apl-BBq3IX1j.js +1 -0
  39. package/web-dist/assets/applescript-Bu5BbsvL.js +1 -0
  40. package/web-dist/assets/ara-7O62HKoU.js +1 -0
  41. package/web-dist/assets/asciidoc-BPT9niGB.js +1 -0
  42. package/web-dist/assets/asm-Dhn9LcZ4.js +1 -0
  43. package/web-dist/assets/astro-CqkE3fuf.js +1 -0
  44. package/web-dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  45. package/web-dist/assets/awk-eg146-Ew.js +1 -0
  46. package/web-dist/assets/ayu-dark-Cv9koXgw.js +1 -0
  47. package/web-dist/assets/ballerina-Du268qiB.js +1 -0
  48. package/web-dist/assets/bat-fje9CFhw.js +1 -0
  49. package/web-dist/assets/beancount-BwXTMy5W.js +1 -0
  50. package/web-dist/assets/berry-3xVqZejG.js +1 -0
  51. package/web-dist/assets/bibtex-xW4inM5L.js +1 -0
  52. package/web-dist/assets/bicep-DHo0CJ0O.js +1 -0
  53. package/web-dist/assets/blade-a8OxSdnT.js +1 -0
  54. package/web-dist/assets/bsl-Dgyn0ogV.js +1 -0
  55. package/web-dist/assets/c-C3t2pwGQ.js +1 -0
  56. package/web-dist/assets/cadence-DNquZEk8.js +1 -0
  57. package/web-dist/assets/cairo--RitsXJZ.js +1 -0
  58. package/web-dist/assets/catppuccin-frappe-CD_QflpE.js +1 -0
  59. package/web-dist/assets/catppuccin-latte-DRW-0cLl.js +1 -0
  60. package/web-dist/assets/catppuccin-macchiato-C-_shW-Y.js +1 -0
  61. package/web-dist/assets/catppuccin-mocha-LGGdnPYs.js +1 -0
  62. package/web-dist/assets/clarity-BHOwM8T6.js +1 -0
  63. package/web-dist/assets/clojure-DxSadP1t.js +1 -0
  64. package/web-dist/assets/cmake-DbXoA79R.js +1 -0
  65. package/web-dist/assets/cobol-PTqiYgYu.js +1 -0
  66. package/web-dist/assets/codeowners-Bp6g37R7.js +1 -0
  67. package/web-dist/assets/codeql-sacFqUAJ.js +1 -0
  68. package/web-dist/assets/coffee-dyiR41kL.js +1 -0
  69. package/web-dist/assets/common-lisp-C7gG9l05.js +1 -0
  70. package/web-dist/assets/coq-Dsg_Bt_b.js +1 -0
  71. package/web-dist/assets/cpp-BksuvNSY.js +1 -0
  72. package/web-dist/assets/crystal-DtDmRg-F.js +1 -0
  73. package/web-dist/assets/csharp-D9R-vmeu.js +1 -0
  74. package/web-dist/assets/css-BPhBrDlE.js +1 -0
  75. package/web-dist/assets/csv-B0qRVHPH.js +1 -0
  76. package/web-dist/assets/cue-DtFQj3wx.js +1 -0
  77. package/web-dist/assets/cypher-m2LEI-9-.js +1 -0
  78. package/web-dist/assets/d-BoXegm-a.js +1 -0
  79. package/web-dist/assets/dark-plus-C3mMm8J8.js +1 -0
  80. package/web-dist/assets/dart-B9wLZaAG.js +1 -0
  81. package/web-dist/assets/dax-ClGRhx96.js +1 -0
  82. package/web-dist/assets/desktop-DEIpsLCJ.js +1 -0
  83. package/web-dist/assets/diff-BgYniUM_.js +1 -0
  84. package/web-dist/assets/docker-COcR7UxN.js +1 -0
  85. package/web-dist/assets/dotenv-BjQB5zDj.js +1 -0
  86. package/web-dist/assets/dracula-BzJJZx-M.js +1 -0
  87. package/web-dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  88. package/web-dist/assets/dream-maker-C-nORZOA.js +1 -0
  89. package/web-dist/assets/edge-D5gP-w-T.js +1 -0
  90. package/web-dist/assets/elixir-CLiX3zqd.js +1 -0
  91. package/web-dist/assets/elm-CmHSxxaM.js +1 -0
  92. package/web-dist/assets/emacs-lisp-BX77sIaO.js +1 -0
  93. package/web-dist/assets/erb-BYTLMnw6.js +1 -0
  94. package/web-dist/assets/erlang-B-DoSBHF.js +1 -0
  95. package/web-dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  96. package/web-dist/assets/everforest-light-C8M2exoo.js +1 -0
  97. package/web-dist/assets/fennel-bCA53EVm.js +1 -0
  98. package/web-dist/assets/fish-w-ucz2PV.js +1 -0
  99. package/web-dist/assets/fluent-Dayu4EKP.js +1 -0
  100. package/web-dist/assets/fortran-fixed-form-TqA4NnZg.js +1 -0
  101. package/web-dist/assets/fortran-free-form-DKXYxT9g.js +1 -0
  102. package/web-dist/assets/fsharp-XplgxFYe.js +1 -0
  103. package/web-dist/assets/gdresource-BHYsBjWJ.js +1 -0
  104. package/web-dist/assets/gdscript-DfxzS6Rs.js +1 -0
  105. package/web-dist/assets/gdshader-SKMF96pI.js +1 -0
  106. package/web-dist/assets/genie-ajMbGru0.js +1 -0
  107. package/web-dist/assets/gherkin--30QC5Em.js +1 -0
  108. package/web-dist/assets/git-commit-i4q6IMui.js +1 -0
  109. package/web-dist/assets/git-rebase-B-v9cOL2.js +1 -0
  110. package/web-dist/assets/github-dark-DHJKELXO.js +1 -0
  111. package/web-dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  112. package/web-dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  113. package/web-dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  114. package/web-dist/assets/github-light-DAi9KRSo.js +1 -0
  115. package/web-dist/assets/github-light-default-D7oLnXFd.js +1 -0
  116. package/web-dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  117. package/web-dist/assets/gleam-B430Bg39.js +1 -0
  118. package/web-dist/assets/glimmer-js-D-cwc0-E.js +1 -0
  119. package/web-dist/assets/glimmer-ts-pgjy16dm.js +1 -0
  120. package/web-dist/assets/glsl-DBO2IWDn.js +1 -0
  121. package/web-dist/assets/gnuplot-CM8KxXT1.js +1 -0
  122. package/web-dist/assets/go-B1SYOhNW.js +1 -0
  123. package/web-dist/assets/graphql-cDcHW_If.js +1 -0
  124. package/web-dist/assets/groovy-DkBy-JyN.js +1 -0
  125. package/web-dist/assets/hack-D1yCygmZ.js +1 -0
  126. package/web-dist/assets/haml-B2EZWmdv.js +1 -0
  127. package/web-dist/assets/handlebars-BQGss363.js +1 -0
  128. package/web-dist/assets/haskell-BILxekzW.js +1 -0
  129. package/web-dist/assets/haxe-C5wWYbrZ.js +1 -0
  130. package/web-dist/assets/hcl-HzYwdGDm.js +1 -0
  131. package/web-dist/assets/hjson-T-Tgc4AT.js +1 -0
  132. package/web-dist/assets/hlsl-ifBTmRxC.js +1 -0
  133. package/web-dist/assets/houston-DnULxvSX.js +1 -0
  134. package/web-dist/assets/html-C2L_23MC.js +1 -0
  135. package/web-dist/assets/html-derivative-CSfWNPLT.js +1 -0
  136. package/web-dist/assets/http-FRrOvY1W.js +1 -0
  137. package/web-dist/assets/hxml-TIA70rKU.js +1 -0
  138. package/web-dist/assets/hy-BMj5Y0dO.js +1 -0
  139. package/web-dist/assets/imba-bv_oIlVt.js +1 -0
  140. package/web-dist/assets/index-BZ3l7TI9.js +149 -0
  141. package/web-dist/assets/index-Bg3pafSR.js +144 -0
  142. package/web-dist/assets/index-_CjWZdEd.css +1 -0
  143. package/web-dist/assets/ini-BjABl1g7.js +1 -0
  144. package/web-dist/assets/java-xI-RfyKK.js +1 -0
  145. package/web-dist/assets/javascript-ySlJ1b_l.js +1 -0
  146. package/web-dist/assets/jinja-DGy0s7-h.js +1 -0
  147. package/web-dist/assets/jison-BqZprYcd.js +1 -0
  148. package/web-dist/assets/json-BQoSv7ci.js +1 -0
  149. package/web-dist/assets/json5-w8dY5SsB.js +1 -0
  150. package/web-dist/assets/jsonc-TU54ms6u.js +1 -0
  151. package/web-dist/assets/jsonl-DREVFZK8.js +1 -0
  152. package/web-dist/assets/jsonnet-BfivnA6A.js +1 -0
  153. package/web-dist/assets/jssm-P4WzXJd0.js +1 -0
  154. package/web-dist/assets/jsx-BAng5TT0.js +1 -0
  155. package/web-dist/assets/julia-BBuGR-5E.js +1 -0
  156. package/web-dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  157. package/web-dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  158. package/web-dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  159. package/web-dist/assets/kotlin-B5lbUyaz.js +1 -0
  160. package/web-dist/assets/kusto-mebxcVVE.js +1 -0
  161. package/web-dist/assets/laserwave-DUszq2jm.js +1 -0
  162. package/web-dist/assets/latex-C-cWTeAZ.js +1 -0
  163. package/web-dist/assets/lean-XBlWyCtg.js +1 -0
  164. package/web-dist/assets/less-BfCpw3nA.js +1 -0
  165. package/web-dist/assets/light-plus-B7mTdjB0.js +1 -0
  166. package/web-dist/assets/liquid-D3W5UaiH.js +1 -0
  167. package/web-dist/assets/log-Cc5clBb7.js +1 -0
  168. package/web-dist/assets/logo-IuBKFhSY.js +1 -0
  169. package/web-dist/assets/lua-CvWAzNxB.js +1 -0
  170. package/web-dist/assets/luau-Du5NY7AG.js +1 -0
  171. package/web-dist/assets/make-Bvotw-X0.js +1 -0
  172. package/web-dist/assets/markdown-UIAJJxZW.js +1 -0
  173. package/web-dist/assets/marko-z0MBrx5-.js +1 -0
  174. package/web-dist/assets/material-theme-D5KoaKCx.js +1 -0
  175. package/web-dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  176. package/web-dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  177. package/web-dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  178. package/web-dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  179. package/web-dist/assets/matlab-D9-PGadD.js +1 -0
  180. package/web-dist/assets/mdc-DB_EDNY_.js +1 -0
  181. package/web-dist/assets/mdx-sdHcTMYB.js +1 -0
  182. package/web-dist/assets/mermaid-Ci6OQyBP.js +1 -0
  183. package/web-dist/assets/min-dark-CafNBF8u.js +1 -0
  184. package/web-dist/assets/min-light-CTRr51gU.js +1 -0
  185. package/web-dist/assets/mipsasm-BC5c_5Pe.js +1 -0
  186. package/web-dist/assets/mojo-Tz6hzZYG.js +1 -0
  187. package/web-dist/assets/monokai-D4h5O-jR.js +1 -0
  188. package/web-dist/assets/move-DB_GagMm.js +1 -0
  189. package/web-dist/assets/narrat-DLbgOhZU.js +1 -0
  190. package/web-dist/assets/nextflow-B0XVJmRM.js +1 -0
  191. package/web-dist/assets/nginx-D_VnBJ67.js +1 -0
  192. package/web-dist/assets/night-owl-C39BiMTA.js +1 -0
  193. package/web-dist/assets/nim-ZlGxZxc3.js +1 -0
  194. package/web-dist/assets/nix-shcSOmrb.js +1 -0
  195. package/web-dist/assets/nord-Ddv68eIx.js +1 -0
  196. package/web-dist/assets/nushell-D4Tzg5kh.js +1 -0
  197. package/web-dist/assets/objective-c-Deuh7S70.js +1 -0
  198. package/web-dist/assets/objective-cpp-BUEGK8hf.js +1 -0
  199. package/web-dist/assets/ocaml-BNioltXt.js +1 -0
  200. package/web-dist/assets/one-dark-pro-GBQ2dnAY.js +1 -0
  201. package/web-dist/assets/one-light-PoHY5YXO.js +1 -0
  202. package/web-dist/assets/pascal-JqZropPD.js +1 -0
  203. package/web-dist/assets/perl-CHQXSrWU.js +1 -0
  204. package/web-dist/assets/php-B5ebYQev.js +1 -0
  205. package/web-dist/assets/plastic-3e1v2bzS.js +1 -0
  206. package/web-dist/assets/plsql-LKU2TuZ1.js +1 -0
  207. package/web-dist/assets/po-BFLt1xDp.js +1 -0
  208. package/web-dist/assets/poimandres-CS3Unz2-.js +1 -0
  209. package/web-dist/assets/polar-DKykz6zU.js +1 -0
  210. package/web-dist/assets/postcss-B3ZDOciz.js +1 -0
  211. package/web-dist/assets/powerquery-CSHBycmS.js +1 -0
  212. package/web-dist/assets/powershell-BIEUsx6d.js +1 -0
  213. package/web-dist/assets/prisma-B48N-Iqd.js +1 -0
  214. package/web-dist/assets/prolog-BY-TUvya.js +1 -0
  215. package/web-dist/assets/proto-zocC4JxJ.js +1 -0
  216. package/web-dist/assets/pug-CM9l7STV.js +1 -0
  217. package/web-dist/assets/puppet-Cza_XSSt.js +1 -0
  218. package/web-dist/assets/purescript-Bg-kzb6g.js +1 -0
  219. package/web-dist/assets/python-DhUJRlN_.js +1 -0
  220. package/web-dist/assets/qml-D8XfuvdV.js +1 -0
  221. package/web-dist/assets/qmldir-C8lEn-DE.js +1 -0
  222. package/web-dist/assets/qss-DhMKtDLN.js +1 -0
  223. package/web-dist/assets/r-CwjWoCRV.js +1 -0
  224. package/web-dist/assets/racket-CzouJOBO.js +1 -0
  225. package/web-dist/assets/raku-B1bQXN8T.js +1 -0
  226. package/web-dist/assets/razor-CNLDkMZG.js +1 -0
  227. package/web-dist/assets/red-bN70gL4F.js +1 -0
  228. package/web-dist/assets/reg-5LuOXUq_.js +1 -0
  229. package/web-dist/assets/regexp-DWJ3fJO_.js +1 -0
  230. package/web-dist/assets/rel-DJlmqQ1C.js +1 -0
  231. package/web-dist/assets/riscv-QhoSD0DR.js +1 -0
  232. package/web-dist/assets/rose-pine-CmCqftbK.js +1 -0
  233. package/web-dist/assets/rose-pine-dawn-Ds-gbosJ.js +1 -0
  234. package/web-dist/assets/rose-pine-moon-CjDtw9vr.js +1 -0
  235. package/web-dist/assets/rst-4NLicBqY.js +1 -0
  236. package/web-dist/assets/ruby-DeZ3UC14.js +1 -0
  237. package/web-dist/assets/rust-Be6lgOlo.js +1 -0
  238. package/web-dist/assets/sas-BmTFh92c.js +1 -0
  239. package/web-dist/assets/sass-BJ4Li9vH.js +1 -0
  240. package/web-dist/assets/scala-DQVVAn-B.js +1 -0
  241. package/web-dist/assets/scheme-BJGe-b2p.js +1 -0
  242. package/web-dist/assets/scss-C31hgJw-.js +1 -0
  243. package/web-dist/assets/sdbl-BLhTXw86.js +1 -0
  244. package/web-dist/assets/shaderlab-B7qAK45m.js +1 -0
  245. package/web-dist/assets/shellscript-atvbtKCR.js +1 -0
  246. package/web-dist/assets/shellsession-C_rIy8kc.js +1 -0
  247. package/web-dist/assets/slack-dark-BthQWCQV.js +1 -0
  248. package/web-dist/assets/slack-ochin-DqwNpetd.js +1 -0
  249. package/web-dist/assets/smalltalk-DkLiglaE.js +1 -0
  250. package/web-dist/assets/snazzy-light-Bw305WKR.js +1 -0
  251. package/web-dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  252. package/web-dist/assets/solarized-light-L9t79GZl.js +1 -0
  253. package/web-dist/assets/solidity-C1w2a3ep.js +1 -0
  254. package/web-dist/assets/soy-C-lX7w71.js +1 -0
  255. package/web-dist/assets/sparql-bYkjHRlG.js +1 -0
  256. package/web-dist/assets/splunk-Cf8iN4DR.js +1 -0
  257. package/web-dist/assets/sql-COK4E0Yg.js +1 -0
  258. package/web-dist/assets/ssh-config-BknIz3MU.js +1 -0
  259. package/web-dist/assets/stata-DorPZHa4.js +1 -0
  260. package/web-dist/assets/stylus-BeQkCIfX.js +1 -0
  261. package/web-dist/assets/svelte-MSaWC3Je.js +1 -0
  262. package/web-dist/assets/swift-BSxZ-RaX.js +1 -0
  263. package/web-dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  264. package/web-dist/assets/system-verilog-C7L56vO4.js +1 -0
  265. package/web-dist/assets/systemd-CUnW07Te.js +1 -0
  266. package/web-dist/assets/talonscript-C1XDQQGZ.js +1 -0
  267. package/web-dist/assets/tasl-CQjiPCtT.js +1 -0
  268. package/web-dist/assets/tcl-DQ1-QYvQ.js +1 -0
  269. package/web-dist/assets/templ-dwX3ZSMB.js +1 -0
  270. package/web-dist/assets/terraform-BbSNqyBO.js +1 -0
  271. package/web-dist/assets/tex-rYs2v40G.js +1 -0
  272. package/web-dist/assets/tokyo-night-DBQeEorK.js +1 -0
  273. package/web-dist/assets/toml-CB2ApiWb.js +1 -0
  274. package/web-dist/assets/ts-tags-CipyTH0X.js +1 -0
  275. package/web-dist/assets/tsv-B_m7g4N7.js +1 -0
  276. package/web-dist/assets/tsx-B6W0miNI.js +1 -0
  277. package/web-dist/assets/turtle-BMR_PYu6.js +1 -0
  278. package/web-dist/assets/twig-NC5TFiHP.js +1 -0
  279. package/web-dist/assets/typescript-Dj6nwHGl.js +1 -0
  280. package/web-dist/assets/typespec-BpWG_bgh.js +1 -0
  281. package/web-dist/assets/typst-BVUVsWT6.js +1 -0
  282. package/web-dist/assets/v-CAQ2eGtk.js +1 -0
  283. package/web-dist/assets/vala-BFOHcciG.js +1 -0
  284. package/web-dist/assets/vb-CdO5JTpU.js +1 -0
  285. package/web-dist/assets/verilog-CJaU5se_.js +1 -0
  286. package/web-dist/assets/vesper-BEBZ7ncR.js +1 -0
  287. package/web-dist/assets/vhdl-DYoNaHQp.js +1 -0
  288. package/web-dist/assets/viml-m4uW47V2.js +1 -0
  289. package/web-dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  290. package/web-dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  291. package/web-dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  292. package/web-dist/assets/vue-BuYVFjOK.js +1 -0
  293. package/web-dist/assets/vue-html-xdeiXROB.js +1 -0
  294. package/web-dist/assets/vyper-nyqBNV6O.js +1 -0
  295. package/web-dist/assets/wasm-C6j12Q_x.js +1 -0
  296. package/web-dist/assets/wasm-CG6Dc4jp.js +1 -0
  297. package/web-dist/assets/wenyan-7A4Fjokl.js +1 -0
  298. package/web-dist/assets/wgsl-CB0Krxn9.js +1 -0
  299. package/web-dist/assets/wikitext-DCE3LsBG.js +1 -0
  300. package/web-dist/assets/wolfram-C3FkfJm5.js +1 -0
  301. package/web-dist/assets/xml-e3z08dGr.js +1 -0
  302. package/web-dist/assets/xsl-Dd0NUgwM.js +1 -0
  303. package/web-dist/assets/yaml-CVw76BM1.js +1 -0
  304. package/web-dist/assets/zenscript-HnGAYVZD.js +1 -0
  305. package/web-dist/assets/zig-BVz_zdnA.js +1 -0
  306. package/web-dist/index.html +14 -0
@@ -0,0 +1,3 @@
1
+ import Fastify from 'fastify';
2
+ export declare function createServer(port?: number): Promise<Fastify.FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, Fastify.FastifyBaseLogger, Fastify.FastifyTypeProviderDefault>>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAc7B,wBAAsB,YAAY,CAAC,IAAI,SAAe,sSAyBrD"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ import Fastify from 'fastify';
2
+ import cors from '@fastify/cors';
3
+ import staticFiles from '@fastify/static';
4
+ import path from 'node:path';
5
+ import fs from 'node:fs';
6
+ import { fileURLToPath } from 'node:url';
7
+ import dbPlugin from './plugins/db.js';
8
+ import sessionsRoutes from './routes/sessions.js';
9
+ import projectsRoutes from './routes/projects.js';
10
+ import analyticsRoutes from './routes/analytics.js';
11
+ import configRoutes from './routes/config.js';
12
+ const DEFAULT_PORT = 3200;
13
+ export async function createServer(port = DEFAULT_PORT) {
14
+ const fastify = Fastify({ logger: false });
15
+ await fastify.register(cors, { origin: ['http://localhost:5173', 'http://localhost:3200'] });
16
+ await fastify.register(dbPlugin);
17
+ await fastify.register(sessionsRoutes, { prefix: '/api' });
18
+ await fastify.register(projectsRoutes, { prefix: '/api' });
19
+ await fastify.register(analyticsRoutes, { prefix: '/api' });
20
+ await fastify.register(configRoutes, { prefix: '/api' });
21
+ // Serve la React app buildata (se esiste)
22
+ // In npm package: web-dist/ è dentro @ccview/server/
23
+ // In monorepo dev: packages/web/dist/
24
+ const serverDir = path.dirname(fileURLToPath(import.meta.url));
25
+ const webDistNpm = path.join(serverDir, '../web-dist');
26
+ const webDistDev = path.join(serverDir, '../../web/dist');
27
+ const webDistPath = fs.existsSync(webDistNpm) ? webDistNpm : webDistDev;
28
+ if (fs.existsSync(webDistPath)) {
29
+ await fastify.register(staticFiles, { root: webDistPath, prefix: '/' });
30
+ fastify.setNotFoundHandler((req, reply) => {
31
+ void reply.sendFile('index.html');
32
+ });
33
+ }
34
+ return fastify;
35
+ }
36
+ // Entry point diretto
37
+ if (process.argv[1] === fileURLToPath(import.meta.url)) {
38
+ const port = parseInt(process.env['PORT'] ?? String(DEFAULT_PORT));
39
+ const server = await createServer(port);
40
+ await server.listen({ port, host: '127.0.0.1' });
41
+ console.log(`ccview server running at http://localhost:${port}`);
42
+ }
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type Database } from '@ccview/core';
2
+ declare module 'fastify' {
3
+ interface FastifyInstance {
4
+ db: Database.Database;
5
+ }
6
+ }
7
+ declare const _default: (fastify: import("fastify").FastifyInstance<import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>) => Promise<void>;
8
+ export default _default;
9
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/plugins/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAA;KACtB;CACF;;AAED,wBAIE"}
@@ -0,0 +1,8 @@
1
+ import fp from 'fastify-plugin';
2
+ import { openDatabase } from '@ccview/core';
3
+ export default fp(async (fastify) => {
4
+ const db = openDatabase();
5
+ fastify.decorate('db', db);
6
+ fastify.addHook('onClose', () => db.close());
7
+ });
8
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/plugins/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAiB,MAAM,cAAc,CAAA;AAQ1D,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC1B,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyPluginAsync } from 'fastify';
2
+ declare const analyticsRoutes: FastifyPluginAsync;
3
+ export default analyticsRoutes;
4
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/routes/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAGjD,QAAA,MAAM,eAAe,EAAE,kBAmEtB,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { getDailyCosts, getFileHotspots, getOverviewStats } from '@ccview/core';
2
+ const analyticsRoutes = async (fastify) => {
3
+ // GET /api/analytics/tokens — split in/out per giorno
4
+ fastify.get('/analytics/tokens', async (request) => {
5
+ const { from, to } = request.query;
6
+ const conditions = [];
7
+ const params = {};
8
+ if (from) {
9
+ conditions.push(`started_at >= @from`);
10
+ params['from'] = from;
11
+ }
12
+ if (to) {
13
+ conditions.push(`started_at <= @to`);
14
+ params['to'] = to + 'T23:59:59';
15
+ }
16
+ const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
17
+ const rows = fastify.db.prepare(`
18
+ SELECT
19
+ DATE(started_at) as day,
20
+ SUM(total_tokens_in) as tokensIn,
21
+ SUM(total_tokens_out) as tokensOut,
22
+ COUNT(*) as sessions
23
+ FROM sessions
24
+ ${where}
25
+ GROUP BY DATE(started_at)
26
+ ORDER BY day ASC
27
+ `).all(params);
28
+ return { data: rows };
29
+ });
30
+ // GET /api/analytics/costs
31
+ fastify.get('/analytics/costs', async (request) => {
32
+ const { from, to } = request.query;
33
+ const data = getDailyCosts(fastify.db, from ? new Date(from) : undefined, to ? new Date(to) : undefined);
34
+ return { data };
35
+ });
36
+ // GET /api/analytics/files
37
+ fastify.get('/analytics/files', async (request) => {
38
+ const { project, limit } = request.query;
39
+ const opts = {};
40
+ if (project)
41
+ opts.project = project;
42
+ if (limit)
43
+ opts.limit = parseInt(limit, 10);
44
+ const data = getFileHotspots(fastify.db, opts);
45
+ return { data };
46
+ });
47
+ // GET /api/insights — placeholder
48
+ fastify.get('/insights', async () => {
49
+ return { data: [] };
50
+ });
51
+ // GET /api/stats/overview
52
+ fastify.get('/stats/overview', async (request) => {
53
+ const { from, to } = request.query;
54
+ const data = getOverviewStats(fastify.db, from ? new Date(from + 'T00:00:00') : undefined, to ? new Date(to + 'T23:59:59') : undefined);
55
+ return { data };
56
+ });
57
+ };
58
+ export default analyticsRoutes;
59
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/routes/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyPluginAsync } from 'fastify';
2
+ declare const configRoutes: FastifyPluginAsync;
3
+ export default configRoutes;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAkCjD,QAAA,MAAM,YAAY,EAAE,kBAkHnB,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,119 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ import { findSessionFiles, parseSession, indexSession, computeFileHash, sessionExistsByHash, listSessions, estimateCost, DEFAULT_PRICING, } from '@ccview/core';
5
+ const CONFIG_DIR = path.join(os.homedir(), '.ccview');
6
+ const CONFIG_PATH = path.join(CONFIG_DIR, 'config.json');
7
+ function readConfig() {
8
+ try {
9
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
10
+ return JSON.parse(raw);
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ }
16
+ function writeConfig(config) {
17
+ if (!fs.existsSync(CONFIG_DIR)) {
18
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
19
+ }
20
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
21
+ }
22
+ const configRoutes = async (fastify) => {
23
+ // GET /api/config
24
+ fastify.get('/config', async () => {
25
+ return { data: readConfig() };
26
+ });
27
+ // PUT /api/config
28
+ fastify.put('/config', async (request) => {
29
+ const current = readConfig();
30
+ const updated = { ...current, ...request.body };
31
+ writeConfig(updated);
32
+ return { data: updated };
33
+ });
34
+ // POST /api/sync
35
+ fastify.post('/sync', async (request, reply) => {
36
+ const force = request.body?.force ?? false;
37
+ try {
38
+ const claudePath = path.join(os.homedir(), '.claude');
39
+ const projectsDir = path.join(claudePath, 'projects');
40
+ const sessionFiles = await findSessionFiles(projectsDir);
41
+ let newSessions = 0;
42
+ let skipped = 0;
43
+ const errors = [];
44
+ for (const file of sessionFiles) {
45
+ try {
46
+ const hash = await computeFileHash(file.filePath);
47
+ if (!force && sessionExistsByHash(fastify.db, hash)) {
48
+ skipped++;
49
+ continue;
50
+ }
51
+ const parsed = await parseSession(file.filePath);
52
+ if (parsed.session.model) {
53
+ const pricing = DEFAULT_PRICING[parsed.session.model];
54
+ parsed.session.totalCostUsd = estimateCost(parsed.session.totalTokensIn, parsed.session.totalTokensOut, pricing);
55
+ }
56
+ indexSession(fastify.db, parsed, file.filePath, hash);
57
+ newSessions++;
58
+ }
59
+ catch (err) {
60
+ errors.push({
61
+ filePath: file.filePath,
62
+ error: err instanceof Error ? err.message : String(err),
63
+ });
64
+ }
65
+ }
66
+ return {
67
+ data: {
68
+ sessionsFound: sessionFiles.length,
69
+ newSessions,
70
+ skippedSessions: skipped,
71
+ errors,
72
+ },
73
+ };
74
+ }
75
+ catch (err) {
76
+ return reply.code(500).send({
77
+ error: 'Sync failed',
78
+ message: err instanceof Error ? err.message : String(err),
79
+ });
80
+ }
81
+ });
82
+ // GET /api/export
83
+ fastify.get('/export', async (request, reply) => {
84
+ const { format = 'json', project, from, to } = request.query;
85
+ const filters = { limit: 10000 };
86
+ if (project)
87
+ filters.project = project;
88
+ if (from)
89
+ filters.from = new Date(from);
90
+ if (to)
91
+ filters.to = new Date(to);
92
+ const sessions = listSessions(fastify.db, filters);
93
+ if (format === 'csv') {
94
+ const header = 'id,projectName,startedAt,endedAt,durationSeconds,totalTokensIn,totalTokensOut,totalCostUsd,totalSteps,model\n';
95
+ const rows = sessions.map((s) => [
96
+ s.id,
97
+ s.projectName ?? '',
98
+ s.startedAt.toISOString(),
99
+ s.endedAt?.toISOString() ?? '',
100
+ s.durationSeconds ?? '',
101
+ s.totalTokensIn,
102
+ s.totalTokensOut,
103
+ s.totalCostUsd,
104
+ s.totalSteps,
105
+ s.model ?? '',
106
+ ].join(',')).join('\n');
107
+ return reply
108
+ .header('Content-Type', 'text/csv')
109
+ .header('Content-Disposition', 'attachment; filename="ccview-export.csv"')
110
+ .send(header + rows);
111
+ }
112
+ return reply
113
+ .header('Content-Type', 'application/json')
114
+ .header('Content-Disposition', 'attachment; filename="ccview-export.json"')
115
+ .send(JSON.stringify({ data: sessions }, null, 2));
116
+ });
117
+ };
118
+ export default configRoutes;
119
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyPluginAsync } from 'fastify';
2
+ declare const projectsRoutes: FastifyPluginAsync;
3
+ export default projectsRoutes;
4
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAiBjD,QAAA,MAAM,cAAc,EAAE,kBA6CrB,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { listProjects, getProjectStats } from '@ccview/core';
2
+ function findProjectPathByName(db, name) {
3
+ const row = db.prepare(`SELECT path FROM projects WHERE name = ? LIMIT 1`).get(name);
4
+ return row?.path ?? null;
5
+ }
6
+ const projectsRoutes = async (fastify) => {
7
+ // GET /api/projects
8
+ fastify.get('/projects', async () => {
9
+ const projects = listProjects(fastify.db);
10
+ // Breakdown per modello per ogni progetto
11
+ const breakdownRows = fastify.db.prepare(`
12
+ SELECT
13
+ project_path,
14
+ COALESCE(model, 'unknown') as model,
15
+ SUM(total_tokens_in) as tokensIn,
16
+ SUM(total_tokens_out) as tokensOut,
17
+ SUM(total_cost_usd) as costUsd
18
+ FROM sessions
19
+ WHERE project_path IS NOT NULL
20
+ GROUP BY project_path, model
21
+ `).all();
22
+ // Indicizza per project_path
23
+ const breakdownMap = new Map();
24
+ for (const row of breakdownRows) {
25
+ const list = breakdownMap.get(row.project_path) ?? [];
26
+ list.push({ model: row.model, tokensIn: row.tokensIn, tokensOut: row.tokensOut, costUsd: row.costUsd });
27
+ breakdownMap.set(row.project_path, list);
28
+ }
29
+ const enriched = projects.map((p) => ({
30
+ ...p,
31
+ modelBreakdown: breakdownMap.get(p.path) ?? [],
32
+ }));
33
+ return { data: enriched };
34
+ });
35
+ // GET /api/projects/:name/stats
36
+ fastify.get('/projects/:name/stats', async (request, reply) => {
37
+ const projectPath = findProjectPathByName(fastify.db, request.params.name);
38
+ if (!projectPath) {
39
+ return reply.code(404).send({ error: 'Project not found' });
40
+ }
41
+ const stats = getProjectStats(fastify.db, projectPath);
42
+ return { data: stats };
43
+ });
44
+ };
45
+ export default projectsRoutes;
46
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG5D,SAAS,qBAAqB,CAAC,EAAqB,EAAE,IAAY;IAChE,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAiC,CAAA;IACpH,OAAO,GAAG,EAAE,IAAI,IAAI,IAAI,CAAA;AAC1B,CAAC;AAUD,MAAM,cAAc,GAAuB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3D,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEzC,0CAA0C;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;KAUxC,CAAC,CAAC,GAAG,EAAyB,CAAA;QAE/B,6BAA6B;QAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqF,CAAA;QACjH,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YACrD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YACvG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACzC,GAAG,CAAC;YACJ,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;SAC/C,CAAC,CAAC,CAAA;QAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAER,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QACtD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyPluginAsync } from 'fastify';
2
+ declare const sessionsRoutes: FastifyPluginAsync;
3
+ export default sessionsRoutes;
4
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIjD,QAAA,MAAM,cAAc,EAAE,kBAyErB,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,66 @@
1
+ import { listSessions, getSessionById, listStepsBySession, listFileImpactsBySession } from '@ccview/core';
2
+ const sessionsRoutes = async (fastify) => {
3
+ // GET /api/sessions
4
+ fastify.get('/sessions', async (request, reply) => {
5
+ const { project, from, to, model, search, limit, offset } = request.query;
6
+ const filters = {};
7
+ if (project)
8
+ filters.project = project;
9
+ if (from)
10
+ filters.from = new Date(from + 'T00:00:00');
11
+ if (to)
12
+ filters.to = new Date(to + 'T23:59:59');
13
+ if (model)
14
+ filters.model = model;
15
+ if (search)
16
+ filters.search = search;
17
+ if (limit)
18
+ filters.limit = parseInt(limit, 10);
19
+ if (offset)
20
+ filters.offset = parseInt(offset, 10);
21
+ const sessions = listSessions(fastify.db, filters);
22
+ return { data: sessions, total: sessions.length };
23
+ });
24
+ // GET /api/sessions/:id
25
+ fastify.get('/sessions/:id', async (request, reply) => {
26
+ const session = getSessionById(fastify.db, request.params.id);
27
+ if (!session) {
28
+ return reply.code(404).send({ error: 'Session not found' });
29
+ }
30
+ return { data: session };
31
+ });
32
+ // PATCH /api/sessions/:id — aggiorna il nome (summary)
33
+ fastify.patch('/sessions/:id', async (request, reply) => {
34
+ const { id } = request.params;
35
+ const { summary } = request.body;
36
+ if (typeof summary !== 'string') {
37
+ return reply.code(400).send({ error: 'summary must be a string' });
38
+ }
39
+ const trimmed = summary.trim();
40
+ fastify.db.prepare(`UPDATE sessions SET summary = ? WHERE id = ?`).run(trimmed || null, id);
41
+ const updated = getSessionById(fastify.db, id);
42
+ if (!updated)
43
+ return reply.code(404).send({ error: 'Session not found' });
44
+ return { data: updated };
45
+ });
46
+ // GET /api/sessions/:id/steps
47
+ fastify.get('/sessions/:id/steps', async (request, reply) => {
48
+ const session = getSessionById(fastify.db, request.params.id);
49
+ if (!session) {
50
+ return reply.code(404).send({ error: 'Session not found' });
51
+ }
52
+ const steps = listStepsBySession(fastify.db, request.params.id);
53
+ return { data: steps };
54
+ });
55
+ // GET /api/sessions/:id/files
56
+ fastify.get('/sessions/:id/files', async (request, reply) => {
57
+ const session = getSessionById(fastify.db, request.params.id);
58
+ if (!session) {
59
+ return reply.code(404).send({ error: 'Session not found' });
60
+ }
61
+ const files = listFileImpactsBySession(fastify.db, request.params.id);
62
+ return { data: files };
63
+ });
64
+ };
65
+ export default sessionsRoutes;
66
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyPluginAsync } from 'fastify';
2
+ declare const syncRoutes: FastifyPluginAsync;
3
+ export default syncRoutes;
4
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAkBjD,QAAA,MAAM,UAAU,EAAE,kBAuDjB,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { join } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ import { findSessionFiles, parseSession, indexSession, estimateCost, } from '@ccview/core';
4
+ import { DEFAULT_PRICING } from '@ccview/core';
5
+ const syncRoutes = async (fastify) => {
6
+ fastify.post('/sync', async (_request, _reply) => {
7
+ const db = fastify.db;
8
+ const projectsDir = join(homedir(), '.claude', 'projects');
9
+ // Mappa logPath -> log_hash delle sessioni già indicizzate
10
+ const existing = db
11
+ .prepare(`SELECT raw_log_path, log_hash FROM sessions WHERE raw_log_path IS NOT NULL`)
12
+ .all();
13
+ const existingMap = new Map(existing.map((r) => [r.raw_log_path, r.log_hash]));
14
+ const sessionFiles = await findSessionFiles(projectsDir);
15
+ const result = { added: 0, updated: 0, skipped: 0, errors: [] };
16
+ for (const file of sessionFiles) {
17
+ const existingHash = existingMap.get(file.filePath);
18
+ if (existingHash === file.hash) {
19
+ result.skipped++;
20
+ continue;
21
+ }
22
+ const isUpdate = existingMap.has(file.filePath);
23
+ try {
24
+ if (isUpdate) {
25
+ db.prepare(`DELETE FROM sessions WHERE raw_log_path = ?`).run(file.filePath);
26
+ }
27
+ const parsed = await parseSession(file.filePath);
28
+ if (parsed.session.model) {
29
+ const pricing = DEFAULT_PRICING[parsed.session.model];
30
+ parsed.session.totalCostUsd = estimateCost(parsed.session.totalTokensIn, parsed.session.totalTokensOut, pricing);
31
+ }
32
+ indexSession(db, parsed, file.filePath, file.hash);
33
+ if (isUpdate)
34
+ result.updated++;
35
+ else
36
+ result.added++;
37
+ }
38
+ catch (err) {
39
+ result.errors.push({
40
+ filePath: file.filePath,
41
+ error: err instanceof Error ? err.message : String(err),
42
+ });
43
+ }
44
+ }
45
+ return { data: result };
46
+ });
47
+ };
48
+ export default syncRoutes;
49
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@ccview/server",
3
+ "version": "0.1.0",
4
+ "description": "Fastify API server for ccview — Claude Code session analytics",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "files": [
9
+ "dist",
10
+ "web-dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "build:watch": "tsc --watch",
15
+ "copy-web": "node -e \"const{cpSync,mkdirSync}=require('fs');mkdirSync('./web-dist',{recursive:true});cpSync('../web/dist','./web-dist',{recursive:true,force:true});console.log('web-dist copied')\"",
16
+ "start": "node dist/index.js",
17
+ "typecheck": "tsc --noEmit",
18
+ "clean": "rm -rf dist web-dist"
19
+ },
20
+ "dependencies": {
21
+ "@ccview/core": "workspace:*",
22
+ "fastify": "^4.26.2",
23
+ "@fastify/cors": "^9.0.1",
24
+ "@fastify/static": "^7.0.4",
25
+ "fastify-plugin": "^4.5.1"
26
+ },
27
+ "devDependencies": {
28
+ "@types/better-sqlite3": "^7.6.10",
29
+ "@types/node": "^20.12.7",
30
+ "typescript": "^5.4.5"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ }
35
+ }
@@ -0,0 +1 @@
1
+ const n=Object.freeze(JSON.parse('{"displayName":"ABAP","fileTypes":["abap","ABAP"],"foldingStartMarker":"/\\\\*\\\\*|\\\\{\\\\s*$","foldingStopMarker":"\\\\*\\\\*/|^\\\\s*\\\\}","name":"abap","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"^\\\\*.*\\\\n?","name":"comment.line.full.abap"},{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"\\".*\\\\n?","name":"comment.line.partial.abap"},{"match":"(?<![^\\\\s])##.*?(?=([\\\\.:,\\\\s]))","name":"comment.line.pragma.abap"},{"match":"(?i)(?<=(?:\\\\s|~|-))(?<=(?:->|=>))([a-z_\\\\/][a-z_0-9\\\\/]*)(?=\\\\s+(?:=|\\\\+=|-=|\\\\*=|\\\\/=|&&=|&=)\\\\s+)","name":"variable.other.abap"},{"match":"\\\\b[0-9]+(\\\\b|\\\\.|,)","name":"constant.numeric.abap"},{"match":"(?ix)(^|\\\\s+)((PUBLIC|PRIVATE|PROTECTED)\\\\sSECTION)(?=\\\\s+|:|\\\\.)","name":"storage.modifier.class.abap"},{"begin":"(?<!\\\\\\\\)(\\\\|)(.*?)","beginCaptures":{"1":{"name":"constant.character.escape.abap"}},"end":"(?<!\\\\\\\\)(\\\\||(\\\\\\\\\\\\\\\\\\\\|))","endCaptures":{"1":{"name":"constant.character.escape.abap"}},"name":"string.interpolated.abap","patterns":[{"match":"({ )|( })","name":"constant.character.escape"},{"match":"\\\\\\\\\\\\|","name":"constant.character.escape.abap"},{"match":"(?ix)(?<=\\\\s)(align|alpha|case|country|currency|date|decimals|exponent|number|pad|sign|style|time|timestamp|timezone|width|xsd|zero)(?=\\\\s\\\\=)","name":"entity.name.property.stringtemplate.abap"},{"match":"(?ix)(?<=\\\\=\\\\s)(center|engineering|environment|in|iso|left|leftplus|leftspace|lower|no|out|raw|right|rightplus|rightspace|scale_preserving|scale_preserving_scientific|scientific|scientific_with_leading_zero|sign_as_postfix|simple|space|upper|user|yes)(?=\\\\s)","name":"entity.value.property.stringtemplate.abap"}]},{"begin":"\'","end":"\'","name":"string.quoted.single.abap","patterns":[{"match":"\'\'","name":"constant.character.escape.abap"}]},{"begin":"`","end":"`","name":"string.quoted.single.abap","patterns":[{"match":"``","name":"constant.character.escape.abap"}]},{"begin":"(?i)^\\\\s*(class)\\\\s([a-z_\\\\/][a-z_0-9\\\\/]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.block.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","name":"meta.block.begin.implementation.abap","patterns":[{"match":"(?ix)(^|\\\\s+)(definition|implementation|public|inheriting\\\\s+from|final|deferred|abstract|shared\\\\s+memory\\\\s+enabled|(global|local)*\\\\s*friends|(create\\\\s+(public|protected|private))|for\\\\s+behavior\\\\s+of|for\\\\s+testing|risk\\\\s+level\\\\s+(critical|dangerous|harmless))|duration\\\\s(short|medium|long)(?=\\\\s+|\\\\.)","name":"storage.modifier.class.abap"},{"begin":"(?=[A-Za-z_][A-Za-z0-9_]*)","contentName":"entity.name.type.block.abap","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?ix)^\\\\s*(method)\\\\s(?:([a-z_\\\\/][a-z_0-9\\\\/]*)~)?([a-z_\\\\/][a-z_0-9\\\\/]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"},"3":{"name":"entity.name.function.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?ix)(?<=^|\\\\s)(BY\\\\s+DATABASE(\\\\s+PROCEDURE|\\\\s+FUNCTION|\\\\s+GRAPH\\\\s+WORKSPACE)|BY\\\\s+KERNEL\\\\s+MODULE)(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?ix)(?<=^|\\\\s)(FOR\\\\s+(HDB|LLANG))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?ix)(?<=\\\\s)(OPTIONS\\\\s+(READ-ONLY|DETERMINISTIC|SUPPRESS\\\\s+SYNTAX\\\\s+ERRORS))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?ix)(?<=^|\\\\s)(LANGUAGE\\\\s+(SQLSCRIPT|SQL|GRAPH))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"captures":{"1":{"name":"storage.modifier.method.abap"}},"match":"(?ix)(?<=\\\\s)(USING)\\\\s+([a-z_\\\\/][a-z_0-9\\\\/=\\\\>]*)+(?=\\\\s+|\\\\.)"},{"begin":"(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?ix)^\\\\s*(INTERFACE)\\\\s([a-z_\\\\/][a-z_0-9\\\\/]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?ix)(?<=^|\\\\s)(DEFERRED|PUBLIC)(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"}]},{"begin":"(?ix)^\\\\s*(FORM)\\\\s([a-z_\\\\/][a-z_0-9\\\\/\\\\-\\\\?]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?ix)(?<=^|\\\\s)(USING|TABLES|CHANGING|RAISING|IMPLEMENTATION|DEFINITION)(?=\\\\s+|\\\\.)","name":"storage.modifier.form.abap"},{"include":"#abaptypes"},{"include":"#keywords_followed_by_braces"}]},{"match":"(?i)(endclass|endmethod|endform|endinterface)","name":"storage.type.block.end.abap"},{"match":"(?i)(<[A-Za-z_][A-Za-z0-9_]*>)","name":"variable.other.field.symbol.abap"},{"include":"#keywords"},{"include":"#abap_constants"},{"include":"#reserved_names"},{"include":"#operators"},{"include":"#builtin_functions"},{"include":"#abaptypes"},{"include":"#system_fields"},{"include":"#sql_functions"},{"include":"#sql_types"}],"repository":{"abap_constants":{"match":"(?ix)(?<=\\\\s)(initial|null|@?space|@?abap_true|@?abap_false|@?abap_undefined|table_line|\\n %_final|%_hints|%_predefined|col_background|col_group|col_heading|col_key|col_negative|col_normal|col_positive|col_total|\\n\\t\\t\\t\\tadabas|as400|db2|db6|hdb|oracle|sybase|mssqlnt|pos_low|pos_high)(?=\\\\s|\\\\.|,)","name":"constant.language.abap"},"abaptypes":{"patterns":[{"match":"(?ix)\\\\s(abap_bool|string|xstring|any|clike|csequence|numeric|xsequence|decfloat|decfloat16|decfloat34|utclong|simple|int8|c|n|i|p|f|d|t|x)(?=\\\\s|\\\\.|,)","name":"support.type.abap"},{"match":"(?ix)\\\\s(TYPE|REF|TO|LIKE|LINE|OF|STRUCTURE|STANDARD|SORTED|HASHED|INDEX|TABLE|WITH|UNIQUE|NON-UNIQUE|SECONDARY|DEFAULT|KEY)(?=\\\\s|\\\\.|,)","name":"keyword.control.simple.abap"}]},"arithmetic_operator":{"match":"(?i)(?<=\\\\s)(\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|%|DIV|MOD|BIT-AND|BIT-OR|BIT-XOR|BIT-NOT)(?=\\\\s)","name":"keyword.control.simple.abap"},"builtin_functions":{"match":"(?ix)(?<=\\\\s)(abs|sign|ceil|floor|trunc|frac|acos|asin|atan|cos|sin|tan|cosh|sinh|tanh|exp|log|log10|sqrt|strlen|xstrlen|charlen|lines|numofchar|dbmaxlen|round|rescale|nmax|nmin|cmax|cmin|boolc|boolx|xsdbool|contains|contains_any_of|contains_any_not_of|matches|line_exists|ipow|char_off|count|count_any_of|count_any_not_of|distance|condense|concat_lines_of|escape|find|find_end|find_any_of|find_any_not_of|insert|match|repeat|replace|reverse|segment|shift_left|shift_right|substring|substring_after|substring_from|substring_before|substring_to|to_upper|to_lower|to_mixed|from_mixed|translate|bit-set|line_index)(?=\\\\()","name":"entity.name.function.builtin.abap"},"comparison_operator":{"match":"(?i)(?<=\\\\s)(<|>|<\\\\=|>\\\\=|\\\\=|<>|eq|ne|lt|le|gt|ge|cs|cp|co|cn|ca|na|ns|np|byte-co|byte-cn|byte-ca|byte-na|byte-cs|byte-ns|o|z|m)(?=\\\\s)","name":"keyword.control.simple.abap"},"control_keywords":{"match":"(?ix)(^|\\\\s)(\\n\\t at|case|catch|continue|do|elseif|else|endat|endcase|endcatch|enddo|endif|\\n\\t endloop|endon|endtry|endwhile|if|loop|on|raise|try|while)(?=\\\\s|\\\\.|:)","name":"keyword.control.flow.abap"},"generic_names":{"match":"[A-Za-z_][A-Za-z0-9_]*"},"keywords":{"patterns":[{"include":"#main_keywords"},{"include":"#text_symbols"},{"include":"#control_keywords"},{"include":"#keywords_followed_by_braces"}]},"keywords_followed_by_braces":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"variable.other.abap"}},"match":"(?ix)\\\\b(data|value|field-symbol|final|reference|resumable)\\\\((<?[a-z_\\\\/][a-z_0-9\\\\/]*>?)\\\\)"},"logical_operator":{"match":"(?i)(?<=\\\\s)(not|or|and)(?=\\\\s)","name":"keyword.control.simple.abap"},"main_keywords":{"match":"(?ix)(?<=^|\\\\s)(\\nabap-source|\\nabstract|\\naccept|\\naccepting|\\naccess|\\naccording|\\naction|\\nactivation|\\nactual|\\nadd|\\nadd-corresponding|\\nadjacent|\\nafter|\\nalias|\\naliases|\\nall|\\nallocate|\\namdp|\\nanalysis|\\nanalyzer|\\nappend|\\nappending|\\napplication|\\narchive|\\narea|\\narithmetic|\\nas|\\nascending|\\nassert|\\nassign|\\nassigned|\\nassigning|\\nassociation|\\nasynchronous|\\nat|\\nattributes|\\nauthority|\\nauthority-check|\\nauthorization|\\nauto|\\nback|\\nbackground|\\nbackward|\\nbadi|\\nbase|\\nbefore|\\nbegin|\\nbehavior|\\nbetween|\\nbinary|\\nbit|\\nblank|\\nblanks|\\nblock|\\nblocks|\\nbound|\\nboundaries|\\nbounds|\\nboxed|\\nbreak|\\nbreak-point|\\nbuffer|\\nby|\\nbypassing|\\nbyte|\\nbyte-order|\\ncall|\\ncalling|\\ncast|\\ncasting|\\ncds|\\ncentered|\\nchange|\\nchanging|\\nchannels|\\nchar-to-hex|\\ncharacter|\\ncheck|\\ncheckbox|\\ncid|\\ncircular|\\nclass|\\nclass-data|\\nclass-events|\\nclass-method|\\nclass-methods|\\nclass-pool|\\ncleanup|\\nclear|\\nclient|\\nclients|\\nclock|\\nclone|\\nclose|\\ncnt|\\ncode|\\ncollect|\\ncolor|\\ncolumn|\\ncomment|\\ncomments|\\ncommit|\\ncommon|\\ncommunication|\\ncomparing|\\ncomponent|\\ncomponents|\\ncompression|\\ncompute|\\nconcatenate|\\ncond|\\ncondense|\\ncondition|\\nconnection|\\nconstant|\\nconstants|\\ncontext|\\ncontexts|\\ncontrol|\\ncontrols|\\nconv|\\nconversion|\\nconvert|\\ncopy|\\ncorresponding|\\ncount|\\ncountry|\\ncover|\\ncreate|\\ncurrency|\\ncurrent|\\ncursor|\\ncustomer-function|\\ndata|\\ndatabase|\\ndatainfo|\\ndataset|\\ndate|\\ndaylight|\\nddl|\\ndeallocate|\\ndecimals|\\ndeclarations|\\ndeep|\\ndefault|\\ndeferred|\\ndefine|\\ndelete|\\ndeleting|\\ndemand|\\ndescending|\\ndescribe|\\ndestination|\\ndetail|\\ndetermine|\\ndialog|\\ndid|\\ndirectory|\\ndiscarding|\\ndisplay|\\ndisplay-mode|\\ndistance|\\ndistinct|\\ndivide|\\ndivide-corresponding|\\ndummy|\\nduplicate|\\nduplicates|\\nduration|\\nduring|\\ndynpro|\\nedit|\\neditor-call|\\nempty|\\nenabled|\\nenabling|\\nencoding|\\nend|\\nend-enhancement-section|\\nend-of-definition|\\nend-of-page|\\nend-of-selection|\\nend-test-injection|\\nend-test-seam|\\nendenhancement|\\nendexec|\\nendfunction|\\nendian|\\nending|\\nendmodule|\\nendprovide|\\nendselect|\\nendwith|\\nenhancement|\\nenhancement-point|\\nenhancement-section|\\nenhancements|\\nentities|\\nentity|\\nentries|\\nentry|\\nenum|\\nequiv|\\nerrors|\\nescape|\\nescaping|\\nevent|\\nevents|\\nexact|\\nexcept|\\nexception|\\nexception-table|\\nexceptions|\\nexcluding|\\nexec|\\nexecute|\\nexists|\\nexit|\\nexit-command|\\nexpanding|\\nexplicit|\\nexponent|\\nexport|\\nexporting|\\nextended|\\nextension|\\nextract|\\nfail|\\nfailed|\\nfeatures|\\nfetch|\\nfield|\\nfield-groups|\\nfield-symbols|\\nfields|\\nfile|\\nfill|\\nfilter|\\nfilters|\\nfinal|\\nfind|\\nfirst|\\nfirst-line|\\nfixed-point|\\nflush|\\nfollowing|\\nfor|\\nformat|\\nforward|\\nfound|\\nframe|\\nframes|\\nfree|\\nfrom|\\nfull|\\nfunction|\\nfunction-pool|\\ngenerate|\\nget|\\ngiving|\\ngraph|\\ngroup|\\ngroups|\\nhandle|\\nhandler|\\nhashed|\\nhaving|\\nheader|\\nheaders|\\nheading|\\nhelp-id|\\nhelp-request|\\nhide|\\nhint|\\nhold|\\nhotspot|\\nicon|\\nid|\\nidentification|\\nidentifier|\\nignore|\\nignoring|\\nimmediately|\\nimplemented|\\nimplicit|\\nimport|\\nimporting|\\nin|\\ninactive|\\nincl|\\ninclude|\\nincludes|\\nincluding|\\nincrement|\\nindex|\\nindex-line|\\nindicators|\\ninfotypes|\\ninheriting|\\ninit|\\ninitial|\\ninitialization|\\ninner|\\ninput|\\ninsert|\\ninstance|\\ninstances|\\nintensified|\\ninterface|\\ninterface-pool|\\ninterfaces|\\ninternal|\\nintervals|\\ninto|\\ninverse|\\ninverted-date|\\nis|\\njob|\\njoin|\\nkeep|\\nkeeping|\\nkernel|\\nkey|\\nkeys|\\nkeywords|\\nkind|\\nlanguage|\\nlast|\\nlate|\\nlayout|\\nleading|\\nleave|\\nleft|\\nleft-justified|\\nlegacy|\\nlength|\\nlet|\\nlevel|\\nlevels|\\nlike|\\nline|\\nline-count|\\nline-selection|\\nline-size|\\nlinefeed|\\nlines|\\nlink|\\nlist|\\nlist-processing|\\nlistbox|\\nload|\\nload-of-program|\\nlocal|\\nlocale|\\nlock|\\nlocks|\\nlog-point|\\nlogical|\\nlower|\\nmapped|\\nmapping|\\nmargin|\\nmark|\\nmask|\\nmatch|\\nmatchcode|\\nmaximum|\\nmembers|\\nmemory|\\nmesh|\\nmessage|\\nmessage-id|\\nmessages|\\nmessaging|\\nmethod|\\nmethods|\\nmode|\\nmodif|\\nmodifier|\\nmodify|\\nmodule|\\nmove|\\nmove-corresponding|\\nmultiply|\\nmultiply-corresponding|\\nname|\\nnametab|\\nnative|\\nnested|\\nnesting|\\nnew|\\nnew-line|\\nnew-page|\\nnew-section|\\nnext|\\nno-display|\\nno-extension|\\nno-gap|\\nno-gaps|\\nno-grouping|\\nno-heading|\\nno-scrolling|\\nno-sign|\\nno-title|\\nno-zero|\\nnodes|\\nnon-unicode|\\nnon-unique|\\nnumber|\\nobject|\\nobjects|\\nobjmgr|\\nobligatory|\\noccurence|\\noccurences|\\noccurrence|\\noccurrences|\\noccurs|\\nof|\\noffset|\\non|\\nonly|\\nopen|\\noptional|\\noption|\\noptions|\\norder|\\nothers|\\nout|\\nouter|\\noutput|\\noutput-length|\\noverflow|\\noverlay|\\npack|\\npackage|\\npadding|\\npage|\\nparameter|\\nparameter-table|\\nparameters|\\npart|\\npartially|\\npcre|\\nperform|\\nperforming|\\npermissions|\\npf-status|\\nplaces|\\npool|\\nposition|\\npragmas|\\npreceding|\\nprecompiled|\\npreferred|\\npreserving|\\nprimary|\\nprint|\\nprint-control|\\nprivate|\\nprivileged|\\nprocedure|\\nprocess|\\nprogram|\\nproperty|\\nprotected|\\nprovide|\\npush|\\npushbutton|\\nput|\\nquery|\\nqueue-only|\\nqueueonly|\\nquickinfo|\\nradiobutton|\\nraising|\\nrange|\\nranges|\\nread|\\nread-only|\\nreceive|\\nreceived|\\nreceiving|\\nredefinition|\\nreduce|\\nref|\\nreference|\\nrefresh|\\nregex|\\nreject|\\nrenaming|\\nreplace|\\nreplacement|\\nreplacing|\\nreport|\\nreported|\\nrequest|\\nrequested|\\nrequired|\\nreserve|\\nreset|\\nresolution|\\nrespecting|\\nresponse|\\nrestore|\\nresult|\\nresults|\\nresumable|\\nresume|\\nretry|\\nreturn|\\nreturning|\\nright|\\nright-justified|\\nrollback|\\nrows|\\nrp-provide-from-last|\\nrun|\\nsap|\\nsap-spool|\\nsave|\\nsaving|\\nscan|\\nscreen|\\nscroll|\\nscroll-boundary|\\nscrolling|\\nsearch|\\nseconds|\\nsection|\\nselect|\\nselect-options|\\nselection|\\nselection-screen|\\nselection-set|\\nselection-sets|\\nselection-table|\\nselections|\\nsend|\\nseparate|\\nseparated|\\nsession|\\nset|\\nshared|\\nshift|\\nshortdump|\\nshortdump-id|\\nsign|\\nsimple|\\nsimulation|\\nsingle|\\nsize|\\nskip|\\nskipping|\\nsmart|\\nsome|\\nsort|\\nsortable|\\nsorted|\\nsource|\\nspecified|\\nsplit|\\nspool|\\nspots|\\nsql|\\nstable|\\nstamp|\\nstandard|\\nstart-of-selection|\\nstarting|\\nstate|\\nstatement|\\nstatements|\\nstatic|\\nstatics|\\nstatusinfo|\\nstep|\\nstep-loop|\\nstop|\\nstructure|\\nstructures|\\nstyle|\\nsubkey|\\nsubmatches|\\nsubmit|\\nsubroutine|\\nsubscreen|\\nsubstring|\\nsubtract|\\nsubtract-corresponding|\\nsuffix|\\nsum|\\nsummary|\\nsupplied|\\nsupply|\\nsuppress|\\nswitch|\\nsymbol|\\nsyntax-check|\\nsyntax-trace|\\nsystem-call|\\nsystem-exceptions|\\ntab|\\ntabbed|\\ntable|\\ntables|\\ntableview|\\ntabstrip|\\ntarget|\\ntask|\\ntasks|\\ntest|\\ntest-injection|\\ntest-seam|\\ntesting|\\ntext|\\ntextpool|\\nthen|\\nthrow|\\ntime|\\ntimes|\\ntitle|\\ntitlebar|\\nto|\\ntokens|\\ntop-lines|\\ntop-of-page|\\ntrace-file|\\ntrace-table|\\ntrailing|\\ntransaction|\\ntransfer|\\ntransformation|\\ntranslate|\\ntransporting|\\ntrmac|\\ntruncate|\\ntruncation|\\ntype|\\ntype-pool|\\ntype-pools|\\ntypes|\\nuline|\\nunassign|\\nunbounded|\\nunder|\\nunicode|\\nunion|\\nunique|\\nunit|\\nunix|\\nunpack|\\nuntil|\\nunwind|\\nup|\\nupdate|\\nupper|\\nuser|\\nuser-command|\\nusing|\\nutf-8|\\nuuid|\\nvalid|\\nvalidate|\\nvalue|\\nvalue-request|\\nvalues|\\nvary|\\nvarying|\\nversion|\\nvia|\\nvisible|\\nwait|\\nwhen|\\nwhere|\\nwindow|\\nwindows|\\nwith|\\nwith-heading|\\nwith-title|\\nwithout|\\nword|\\nwork|\\nworkspace|\\nwrite|\\nxml|\\nzone\\n\\t\\t \\t)(?=\\\\s|\\\\.|:|,)","name":"keyword.control.simple.abap"},"operators":{"patterns":[{"include":"#other_operator"},{"include":"#arithmetic_operator"},{"include":"#comparison_operator"},{"include":"#logical_operator"}]},"other_operator":{"match":"(?<=\\\\s)(&&|&|\\\\?=|\\\\+=|-=|\\\\/=|\\\\*=|&&=|&=)(?=\\\\s)","name":"keyword.control.simple.abap"},"reserved_names":{"match":"(?ix)(?<=\\\\s)(me|super)(?=\\\\s|\\\\.|,|->)","name":"constant.language.abap"},"sql_functions":{"match":"(?ix)(?<=\\\\s)(\\nabap_system_timezone|\\nabap_user_timezone|\\nabs|\\nadd_days|\\nadd_months|\\nallow_precision_loss|\\nas_geo_json|\\navg|\\nbintohex|\\ncast|\\nceil|\\ncoalesce|\\nconcat_with_space|\\nconcat|\\ncorr_spearman|\\ncorr|\\ncount|\\ncurrency_conversion|\\ndatn_add_days|\\ndatn_add_months|\\ndatn_days_between|\\ndats_add_days|\\ndats_add_months|\\ndats_days_between|\\ndats_from_datn|\\ndats_is_valid|\\ndats_tims_to_tstmp|\\ndats_to_datn|\\ndayname|\\ndays_between|\\ndense_rank|\\ndivision|\\ndiv|\\nextract_day|\\nextract_hour|\\nextract_minute|\\nextract_month|\\nextract_second|\\nextract_year|\\nfirst_value|\\nfloor|\\ngrouping|\\nhextobin|\\ninitcap|\\ninstr|\\nis_valid|\\nlag|\\nlast_value|\\nlead|\\nleft|\\nlength|\\nlike_regexpr|\\nlocate_regexpr_after|\\nlocate_regexpr|\\nlocate|\\nlower|\\nlpad|\\nltrim|\\nmax|\\nmedian|\\nmin|\\nmod|\\nmonthname|\\nntile|\\noccurrences_regexpr|\\nover|\\nproduct|\\nrank|\\nreplace_regexpr|\\nreplace|\\nrigth|\\nround|\\nrow_number|\\nrpad|\\nrtrim|\\nstddev|\\nstring_agg|\\nsubstring_regexpr|\\nsubstring|\\nsum|\\ntims_from_timn|\\ntims_is_valid|\\ntims_to_timn|\\nto_blob|\\nto_clob|\\ntstmp_add_seconds|\\ntstmp_current_utctimestamp|\\ntstmp_is_valid|\\ntstmp_seconds_between|\\ntstmp_to_dats|\\ntstmp_to_dst|\\ntstmp_to_tims|\\ntstmpl_from_utcl|\\ntstmpl_to_utcl|\\nunit_conversion|\\nupper|\\nutcl_add_seconds|\\nutcl_current|\\nutcl_seconds_between|\\nuuid|\\nvar|\\nweekday\\n )(?=\\\\()","name":"entity.name.function.sql.abap"},"sql_types":{"match":"(?ix)(?<=\\\\s)(char|clnt|cuky|curr|datn|dats|dec|decfloat16|decfloat34|fltp|int1|int2|int4|int8|lang|numc|quan|raw|sstring|timn|tims|unit|utclong)(?=\\\\s|\\\\(|\\\\))","name":"entity.name.type.sql.abap"},"system_fields":{"captures":{"1":{"name":"variable.language.abap"},"2":{"name":"variable.language.abap"}},"match":"(?ix)\\\\b(sy)-(abcde|batch|binpt|calld|callr|colno|cpage|cprog|cucol|curow|datar|datlo|datum|dayst|dbcnt|dbnam|dbsysc|dyngr|dynnr|fdayw|fdpos|host|index|langu|ldbpg|lilli|linct|linno|linsz|lisel|listi|loopc|lsind|macol|mandt|marow|modno|msgid|msgli|msgno|msgty|msgv[1-4]|opsysc|pagno|pfkey|repid|saprl|scols|slset|spono|srows|staco|staro|stepl|subrc|sysid|tabix|tcode|tfill|timlo|title|tleng|tvar[0-9]|tzone|ucomm|uline|uname|uzeit|vline|wtitl|zonlo)(?=\\\\.|\\\\s)"},"text_symbols":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"constant.numeric.abap"}},"match":"(?ix)(?<=^|\\\\s)(text)-([A-Z0-9]{1,3})(?=\\\\s|\\\\.|:|,)"}},"scopeName":"source.abap"}')),e=[n];export{e as default};