@canonical/terrazzo-lsp-extension 0.4.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 (346) hide show
  1. package/README.md +45 -0
  2. package/dist/esm/cli/expandGlobs.js +21 -0
  3. package/dist/esm/cli/expandGlobs.js.map +1 -0
  4. package/dist/esm/cli/index.js +61 -0
  5. package/dist/esm/cli/index.js.map +1 -0
  6. package/dist/esm/cli/loadArtifactFiles.js +21 -0
  7. package/dist/esm/cli/loadArtifactFiles.js.map +1 -0
  8. package/dist/esm/cli/printHelp.js +19 -0
  9. package/dist/esm/cli/printHelp.js.map +1 -0
  10. package/dist/esm/cli/runCheck.js +52 -0
  11. package/dist/esm/cli/runCheck.js.map +1 -0
  12. package/dist/esm/cli/runGraph.js +41 -0
  13. package/dist/esm/cli/runGraph.js.map +1 -0
  14. package/dist/esm/cli/runInspect.js +27 -0
  15. package/dist/esm/cli/runInspect.js.map +1 -0
  16. package/dist/esm/cli/runInstall.js +126 -0
  17. package/dist/esm/cli/runInstall.js.map +1 -0
  18. package/dist/esm/cli/runResolve.js +17 -0
  19. package/dist/esm/cli/runResolve.js.map +1 -0
  20. package/dist/esm/cli/runStatus.js +18 -0
  21. package/dist/esm/cli/runStatus.js.map +1 -0
  22. package/dist/esm/cli.js +4 -0
  23. package/dist/esm/cli.js.map +1 -0
  24. package/dist/esm/css/colorSetup.js +13 -0
  25. package/dist/esm/css/colorSetup.js.map +1 -0
  26. package/dist/esm/css/createDocumentIndex.js +43 -0
  27. package/dist/esm/css/createDocumentIndex.js.map +1 -0
  28. package/dist/esm/css/imports/extractCssImports.js +41 -0
  29. package/dist/esm/css/imports/extractCssImports.js.map +1 -0
  30. package/dist/esm/css/imports/extractJsImports.js +14 -0
  31. package/dist/esm/css/imports/extractJsImports.js.map +1 -0
  32. package/dist/esm/css/imports/extractPackageName.js +20 -0
  33. package/dist/esm/css/imports/extractPackageName.js.map +1 -0
  34. package/dist/esm/css/imports/formatFileUri.js +6 -0
  35. package/dist/esm/css/imports/formatFileUri.js.map +1 -0
  36. package/dist/esm/css/imports/index.js +9 -0
  37. package/dist/esm/css/imports/index.js.map +1 -0
  38. package/dist/esm/css/imports/isBareSpecifier.js +13 -0
  39. package/dist/esm/css/imports/isBareSpecifier.js.map +1 -0
  40. package/dist/esm/css/imports/isExternalPath.js +5 -0
  41. package/dist/esm/css/imports/isExternalPath.js.map +1 -0
  42. package/dist/esm/css/imports/parseFileUri.js +6 -0
  43. package/dist/esm/css/imports/parseFileUri.js.map +1 -0
  44. package/dist/esm/css/imports/resolveImportSpecifier.js +27 -0
  45. package/dist/esm/css/imports/resolveImportSpecifier.js.map +1 -0
  46. package/dist/esm/css/index.js +7 -0
  47. package/dist/esm/css/index.js.map +1 -0
  48. package/dist/esm/css/lezer/applyTreeChanges.js +5 -0
  49. package/dist/esm/css/lezer/applyTreeChanges.js.map +1 -0
  50. package/dist/esm/css/lezer/computeChangedRange.js +23 -0
  51. package/dist/esm/css/lezer/computeChangedRange.js.map +1 -0
  52. package/dist/esm/css/lezer/createTreeFragments.js +5 -0
  53. package/dist/esm/css/lezer/createTreeFragments.js.map +1 -0
  54. package/dist/esm/css/lezer/index.js +6 -0
  55. package/dist/esm/css/lezer/index.js.map +1 -0
  56. package/dist/esm/css/lezer/nodeText.js +4 -0
  57. package/dist/esm/css/lezer/nodeText.js.map +1 -0
  58. package/dist/esm/css/lezer/parseCSS.js +5 -0
  59. package/dist/esm/css/lezer/parseCSS.js.map +1 -0
  60. package/dist/esm/css/lezer/types.js +2 -0
  61. package/dist/esm/css/lezer/types.js.map +1 -0
  62. package/dist/esm/css/scanners/extractPropertyAtPosition.js +23 -0
  63. package/dist/esm/css/scanners/extractPropertyAtPosition.js.map +1 -0
  64. package/dist/esm/css/scanners/index.js +6 -0
  65. package/dist/esm/css/scanners/index.js.map +1 -0
  66. package/dist/esm/css/scanners/parseSuppressionDirectives.js +88 -0
  67. package/dist/esm/css/scanners/parseSuppressionDirectives.js.map +1 -0
  68. package/dist/esm/css/scanners/scanDeclarations.js +38 -0
  69. package/dist/esm/css/scanners/scanDeclarations.js.map +1 -0
  70. package/dist/esm/css/scanners/scanProperties.js +49 -0
  71. package/dist/esm/css/scanners/scanProperties.js.map +1 -0
  72. package/dist/esm/css/scanners/scanUsages.js +64 -0
  73. package/dist/esm/css/scanners/scanUsages.js.map +1 -0
  74. package/dist/esm/css/selectors/buildSelectorContext.js +9 -0
  75. package/dist/esm/css/selectors/buildSelectorContext.js.map +1 -0
  76. package/dist/esm/css/selectors/classifySelectorScope.js +32 -0
  77. package/dist/esm/css/selectors/classifySelectorScope.js.map +1 -0
  78. package/dist/esm/css/selectors/index.js +3 -0
  79. package/dist/esm/css/selectors/index.js.map +1 -0
  80. package/dist/esm/css/tree/ancestors.js +74 -0
  81. package/dist/esm/css/tree/ancestors.js.map +1 -0
  82. package/dist/esm/css/tree/declarations.js +6 -0
  83. package/dist/esm/css/tree/declarations.js.map +1 -0
  84. package/dist/esm/css/tree/index.js +5 -0
  85. package/dist/esm/css/tree/index.js.map +1 -0
  86. package/dist/esm/css/tree/lineage.js +10 -0
  87. package/dist/esm/css/tree/lineage.js.map +1 -0
  88. package/dist/esm/css/tree/lines.js +25 -0
  89. package/dist/esm/css/tree/lines.js.map +1 -0
  90. package/dist/esm/css/values/compareFallbackStaleness.js +34 -0
  91. package/dist/esm/css/values/compareFallbackStaleness.js.map +1 -0
  92. package/dist/esm/css/values/constants.js +33 -0
  93. package/dist/esm/css/values/constants.js.map +1 -0
  94. package/dist/esm/css/values/expectedTypeForProperty.js +117 -0
  95. package/dist/esm/css/values/expectedTypeForProperty.js.map +1 -0
  96. package/dist/esm/css/values/extractUnit.js +6 -0
  97. package/dist/esm/css/values/extractUnit.js.map +1 -0
  98. package/dist/esm/css/values/index.js +11 -0
  99. package/dist/esm/css/values/index.js.map +1 -0
  100. package/dist/esm/css/values/inferValueType.js +104 -0
  101. package/dist/esm/css/values/inferValueType.js.map +1 -0
  102. package/dist/esm/css/values/isAssignable.js +13 -0
  103. package/dist/esm/css/values/isAssignable.js.map +1 -0
  104. package/dist/esm/css/values/isSuppressed.js +47 -0
  105. package/dist/esm/css/values/isSuppressed.js.map +1 -0
  106. package/dist/esm/css/values/mapDtcgType.js +20 -0
  107. package/dist/esm/css/values/mapDtcgType.js.map +1 -0
  108. package/dist/esm/css/values/parseSyntaxType.js +50 -0
  109. package/dist/esm/css/values/parseSyntaxType.js.map +1 -0
  110. package/dist/esm/css/values/resolveDimensionValue.js +62 -0
  111. package/dist/esm/css/values/resolveDimensionValue.js.map +1 -0
  112. package/dist/esm/diagnosticCodes.js +18 -0
  113. package/dist/esm/diagnosticCodes.js.map +1 -0
  114. package/dist/esm/extension/findBundledVsixPath.js +20 -0
  115. package/dist/esm/extension/findBundledVsixPath.js.map +1 -0
  116. package/dist/esm/extension/index.js +4 -0
  117. package/dist/esm/extension/index.js.map +1 -0
  118. package/dist/esm/extension/installBundledVscodeExtension.js +25 -0
  119. package/dist/esm/extension/installBundledVscodeExtension.js.map +1 -0
  120. package/dist/esm/extension/updateVscodeSettings.js +8 -0
  121. package/dist/esm/extension/updateVscodeSettings.js.map +1 -0
  122. package/dist/esm/graph/ReachabilityCache.js +91 -0
  123. package/dist/esm/graph/ReachabilityCache.js.map +1 -0
  124. package/dist/esm/graph/TokenGraph.js +370 -0
  125. package/dist/esm/graph/TokenGraph.js.map +1 -0
  126. package/dist/esm/graph/index.js +5 -0
  127. package/dist/esm/graph/index.js.map +1 -0
  128. package/dist/esm/graph/loadArtifact.js +157 -0
  129. package/dist/esm/graph/loadArtifact.js.map +1 -0
  130. package/dist/esm/graph/parseArtifactToken.js +113 -0
  131. package/dist/esm/graph/parseArtifactToken.js.map +1 -0
  132. package/dist/esm/index.js +14 -0
  133. package/dist/esm/index.js.map +1 -0
  134. package/dist/esm/protocol/createRequest.js +10 -0
  135. package/dist/esm/protocol/createRequest.js.map +1 -0
  136. package/dist/esm/protocol/index.js +5 -0
  137. package/dist/esm/protocol/index.js.map +1 -0
  138. package/dist/esm/protocol/matchResponse.js +5 -0
  139. package/dist/esm/protocol/matchResponse.js.map +1 -0
  140. package/dist/esm/protocol/resolveConfig.js +222 -0
  141. package/dist/esm/protocol/resolveConfig.js.map +1 -0
  142. package/dist/esm/protocol/typeGuards.js +16 -0
  143. package/dist/esm/protocol/typeGuards.js.map +1 -0
  144. package/dist/esm/providers/artifactDiagnostics/checkBrokenAlias.js +15 -0
  145. package/dist/esm/providers/artifactDiagnostics/checkBrokenAlias.js.map +1 -0
  146. package/dist/esm/providers/artifactDiagnostics/checkCircularAlias.js +22 -0
  147. package/dist/esm/providers/artifactDiagnostics/checkCircularAlias.js.map +1 -0
  148. package/dist/esm/providers/artifactDiagnostics/checkDraftSyntax.js +15 -0
  149. package/dist/esm/providers/artifactDiagnostics/checkDraftSyntax.js.map +1 -0
  150. package/dist/esm/providers/artifactDiagnostics/checkMissingType.js +10 -0
  151. package/dist/esm/providers/artifactDiagnostics/checkMissingType.js.map +1 -0
  152. package/dist/esm/providers/artifactDiagnostics/checkSchemaViolation.js +15 -0
  153. package/dist/esm/providers/artifactDiagnostics/checkSchemaViolation.js.map +1 -0
  154. package/dist/esm/providers/artifactDiagnostics/index.js +28 -0
  155. package/dist/esm/providers/artifactDiagnostics/index.js.map +1 -0
  156. package/dist/esm/providers/classifyProvenance.js +19 -0
  157. package/dist/esm/providers/classifyProvenance.js.map +1 -0
  158. package/dist/esm/providers/completions/buildCompletionItem.js +132 -0
  159. package/dist/esm/providers/completions/buildCompletionItem.js.map +1 -0
  160. package/dist/esm/providers/completions/buildSortText.js +39 -0
  161. package/dist/esm/providers/completions/buildSortText.js.map +1 -0
  162. package/dist/esm/providers/completions/index.js +6 -0
  163. package/dist/esm/providers/completions/index.js.map +1 -0
  164. package/dist/esm/providers/completions/provideCompletions.js +64 -0
  165. package/dist/esm/providers/completions/provideCompletions.js.map +1 -0
  166. package/dist/esm/providers/completions/resolveCompletionItem.js +26 -0
  167. package/dist/esm/providers/completions/resolveCompletionItem.js.map +1 -0
  168. package/dist/esm/providers/completions/resolveExpectedType.js +17 -0
  169. package/dist/esm/providers/completions/resolveExpectedType.js.map +1 -0
  170. package/dist/esm/providers/constants.js +53 -0
  171. package/dist/esm/providers/constants.js.map +1 -0
  172. package/dist/esm/providers/diagnostics/checkMissingFallback.js +20 -0
  173. package/dist/esm/providers/diagnostics/checkMissingFallback.js.map +1 -0
  174. package/dist/esm/providers/diagnostics/checkNoColorScheme.js +27 -0
  175. package/dist/esm/providers/diagnostics/checkNoColorScheme.js.map +1 -0
  176. package/dist/esm/providers/diagnostics/checkPrimitiveToken.js +20 -0
  177. package/dist/esm/providers/diagnostics/checkPrimitiveToken.js.map +1 -0
  178. package/dist/esm/providers/diagnostics/checkScopedUsage.js +28 -0
  179. package/dist/esm/providers/diagnostics/checkScopedUsage.js.map +1 -0
  180. package/dist/esm/providers/diagnostics/checkStaleFallback.js +22 -0
  181. package/dist/esm/providers/diagnostics/checkStaleFallback.js.map +1 -0
  182. package/dist/esm/providers/diagnostics/checkTypeMismatch.js +24 -0
  183. package/dist/esm/providers/diagnostics/checkTypeMismatch.js.map +1 -0
  184. package/dist/esm/providers/diagnostics/checkTypeUncertain.js +19 -0
  185. package/dist/esm/providers/diagnostics/checkTypeUncertain.js.map +1 -0
  186. package/dist/esm/providers/diagnostics/checkUnknownVar.js +18 -0
  187. package/dist/esm/providers/diagnostics/checkUnknownVar.js.map +1 -0
  188. package/dist/esm/providers/diagnostics/checkUnreachableToken.js +25 -0
  189. package/dist/esm/providers/diagnostics/checkUnreachableToken.js.map +1 -0
  190. package/dist/esm/providers/diagnostics/index.js +2 -0
  191. package/dist/esm/providers/diagnostics/index.js.map +1 -0
  192. package/dist/esm/providers/diagnostics/orchestrateDiagnostics.js +90 -0
  193. package/dist/esm/providers/diagnostics/orchestrateDiagnostics.js.map +1 -0
  194. package/dist/esm/providers/diagnostics/types.js +2 -0
  195. package/dist/esm/providers/diagnostics/types.js.map +1 -0
  196. package/dist/esm/providers/formatCheckReport.js +90 -0
  197. package/dist/esm/providers/formatCheckReport.js.map +1 -0
  198. package/dist/esm/providers/index.js +20 -0
  199. package/dist/esm/providers/index.js.map +1 -0
  200. package/dist/esm/providers/makeDiagnostic.js +13 -0
  201. package/dist/esm/providers/makeDiagnostic.js.map +1 -0
  202. package/dist/esm/providers/prepareRename.js +36 -0
  203. package/dist/esm/providers/prepareRename.js.map +1 -0
  204. package/dist/esm/providers/provideCodeActions.js +154 -0
  205. package/dist/esm/providers/provideCodeActions.js.map +1 -0
  206. package/dist/esm/providers/provideDocumentColors.js +90 -0
  207. package/dist/esm/providers/provideDocumentColors.js.map +1 -0
  208. package/dist/esm/providers/provideDocumentLinks.js +55 -0
  209. package/dist/esm/providers/provideDocumentLinks.js.map +1 -0
  210. package/dist/esm/providers/provideHover.js +20 -0
  211. package/dist/esm/providers/provideHover.js.map +1 -0
  212. package/dist/esm/providers/provideInlayHints.js +82 -0
  213. package/dist/esm/providers/provideInlayHints.js.map +1 -0
  214. package/dist/esm/providers/provideReferences.js +39 -0
  215. package/dist/esm/providers/provideReferences.js.map +1 -0
  216. package/dist/esm/providers/provideRename.js +63 -0
  217. package/dist/esm/providers/provideRename.js.map +1 -0
  218. package/dist/esm/providers/provideSemanticTokens.js +74 -0
  219. package/dist/esm/providers/provideSemanticTokens.js.map +1 -0
  220. package/dist/esm/providers/provideWorkspaceSymbols.js +175 -0
  221. package/dist/esm/providers/provideWorkspaceSymbols.js.map +1 -0
  222. package/dist/esm/providers/resolveDefinition.js +42 -0
  223. package/dist/esm/providers/resolveDefinition.js.map +1 -0
  224. package/dist/esm/providers/tokenTooltip/buildResolutionTable.js +121 -0
  225. package/dist/esm/providers/tokenTooltip/buildResolutionTable.js.map +1 -0
  226. package/dist/esm/providers/tokenTooltip/buildTokenTooltip.js +60 -0
  227. package/dist/esm/providers/tokenTooltip/buildTokenTooltip.js.map +1 -0
  228. package/dist/esm/providers/tokenTooltip/constants.js +14 -0
  229. package/dist/esm/providers/tokenTooltip/constants.js.map +1 -0
  230. package/dist/esm/providers/tokenTooltip/formatDeclarationSites.js +53 -0
  231. package/dist/esm/providers/tokenTooltip/formatDeclarationSites.js.map +1 -0
  232. package/dist/esm/providers/tokenTooltip/formatProvenanceLine.js +86 -0
  233. package/dist/esm/providers/tokenTooltip/formatProvenanceLine.js.map +1 -0
  234. package/dist/esm/providers/tokenTooltip/index.js +6 -0
  235. package/dist/esm/providers/tokenTooltip/index.js.map +1 -0
  236. package/dist/esm/providers/tokenTooltip/resolveToLiteral.js +19 -0
  237. package/dist/esm/providers/tokenTooltip/resolveToLiteral.js.map +1 -0
  238. package/dist/esm/providers/truncate.js +6 -0
  239. package/dist/esm/providers/truncate.js.map +1 -0
  240. package/dist/esm/providers/types.js +38 -0
  241. package/dist/esm/providers/types.js.map +1 -0
  242. package/dist/esm/runtime/ConfigNotFoundError.js +21 -0
  243. package/dist/esm/runtime/ConfigNotFoundError.js.map +1 -0
  244. package/dist/esm/runtime/artifacts/index.js +2 -0
  245. package/dist/esm/runtime/artifacts/index.js.map +1 -0
  246. package/dist/esm/runtime/artifacts/loadConfiguredArtifacts.js +32 -0
  247. package/dist/esm/runtime/artifacts/loadConfiguredArtifacts.js.map +1 -0
  248. package/dist/esm/runtime/buildImportGraph.js +61 -0
  249. package/dist/esm/runtime/buildImportGraph.js.map +1 -0
  250. package/dist/esm/runtime/config/ensureServerConfig.js +64 -0
  251. package/dist/esm/runtime/config/ensureServerConfig.js.map +1 -0
  252. package/dist/esm/runtime/config/index.js +2 -0
  253. package/dist/esm/runtime/config/index.js.map +1 -0
  254. package/dist/esm/runtime/createConfigCandidatePath.js +7 -0
  255. package/dist/esm/runtime/createConfigCandidatePath.js.map +1 -0
  256. package/dist/esm/runtime/createGraphWorker.js +23 -0
  257. package/dist/esm/runtime/createGraphWorker.js.map +1 -0
  258. package/dist/esm/runtime/createServerState.js +39 -0
  259. package/dist/esm/runtime/createServerState.js.map +1 -0
  260. package/dist/esm/runtime/detectRuntime.js +40 -0
  261. package/dist/esm/runtime/detectRuntime.js.map +1 -0
  262. package/dist/esm/runtime/dispatch/LogMessageType.js +8 -0
  263. package/dist/esm/runtime/dispatch/LogMessageType.js.map +1 -0
  264. package/dist/esm/runtime/dispatch/handleWorkerResponse.js +58 -0
  265. package/dist/esm/runtime/dispatch/handleWorkerResponse.js.map +1 -0
  266. package/dist/esm/runtime/dispatch/index.js +5 -0
  267. package/dist/esm/runtime/dispatch/index.js.map +1 -0
  268. package/dist/esm/runtime/dispatch/routeLspRequest.js +233 -0
  269. package/dist/esm/runtime/dispatch/routeLspRequest.js.map +1 -0
  270. package/dist/esm/runtime/dispatch/routeWorkerRequest.js +162 -0
  271. package/dist/esm/runtime/dispatch/routeWorkerRequest.js.map +1 -0
  272. package/dist/esm/runtime/dispatch/types.js +2 -0
  273. package/dist/esm/runtime/dispatch/types.js.map +1 -0
  274. package/dist/esm/runtime/documents/handleArtifactChanged.js +18 -0
  275. package/dist/esm/runtime/documents/handleArtifactChanged.js.map +1 -0
  276. package/dist/esm/runtime/documents/handleChangeDocument.js +41 -0
  277. package/dist/esm/runtime/documents/handleChangeDocument.js.map +1 -0
  278. package/dist/esm/runtime/documents/handleCloseDocument.js +10 -0
  279. package/dist/esm/runtime/documents/handleCloseDocument.js.map +1 -0
  280. package/dist/esm/runtime/documents/handleFileChanged.js +14 -0
  281. package/dist/esm/runtime/documents/handleFileChanged.js.map +1 -0
  282. package/dist/esm/runtime/documents/handleOpenDocument.js +37 -0
  283. package/dist/esm/runtime/documents/handleOpenDocument.js.map +1 -0
  284. package/dist/esm/runtime/documents/index.js +6 -0
  285. package/dist/esm/runtime/documents/index.js.map +1 -0
  286. package/dist/esm/runtime/getServerCapabilities.js +35 -0
  287. package/dist/esm/runtime/getServerCapabilities.js.map +1 -0
  288. package/dist/esm/runtime/index.js +14 -0
  289. package/dist/esm/runtime/index.js.map +1 -0
  290. package/dist/esm/runtime/indexing/index.js +5 -0
  291. package/dist/esm/runtime/indexing/index.js.map +1 -0
  292. package/dist/esm/runtime/indexing/indexDocument.js +32 -0
  293. package/dist/esm/runtime/indexing/indexDocument.js.map +1 -0
  294. package/dist/esm/runtime/indexing/indexGlobalStylesheets.js +12 -0
  295. package/dist/esm/runtime/indexing/indexGlobalStylesheets.js.map +1 -0
  296. package/dist/esm/runtime/indexing/reindexDocument.js +16 -0
  297. package/dist/esm/runtime/indexing/reindexDocument.js.map +1 -0
  298. package/dist/esm/runtime/indexing/updateImportEdges.js +5 -0
  299. package/dist/esm/runtime/indexing/updateImportEdges.js.map +1 -0
  300. package/dist/esm/runtime/scheduleBufferUpdate.js +39 -0
  301. package/dist/esm/runtime/scheduleBufferUpdate.js.map +1 -0
  302. package/dist/esm/runtime/startLspServer.js +66 -0
  303. package/dist/esm/runtime/startLspServer.js.map +1 -0
  304. package/dist/esm/runtime/types.js +2 -0
  305. package/dist/esm/runtime/types.js.map +1 -0
  306. package/dist/esm/testing/index.js +8 -0
  307. package/dist/esm/testing/index.js.map +1 -0
  308. package/dist/esm/testing/makeArtifactToken.js +31 -0
  309. package/dist/esm/testing/makeArtifactToken.js.map +1 -0
  310. package/dist/esm/testing/makeConfig.js +40 -0
  311. package/dist/esm/testing/makeConfig.js.map +1 -0
  312. package/dist/esm/testing/makeDeclarationNode.js +18 -0
  313. package/dist/esm/testing/makeDeclarationNode.js.map +1 -0
  314. package/dist/esm/testing/makePropertyNode.js +12 -0
  315. package/dist/esm/testing/makePropertyNode.js.map +1 -0
  316. package/dist/esm/testing/makeServerState.js +21 -0
  317. package/dist/esm/testing/makeServerState.js.map +1 -0
  318. package/dist/esm/testing/makeTokenNode.js +34 -0
  319. package/dist/esm/testing/makeTokenNode.js.map +1 -0
  320. package/dist/esm/testing/makeTransport.js +9 -0
  321. package/dist/esm/testing/makeTransport.js.map +1 -0
  322. package/dist/esm/transport/index.js +2 -0
  323. package/dist/esm/transport/index.js.map +1 -0
  324. package/dist/esm/transport/stdio/createMessageStream.js +50 -0
  325. package/dist/esm/transport/stdio/createMessageStream.js.map +1 -0
  326. package/dist/esm/transport/stdio/index.js +2 -0
  327. package/dist/esm/transport/stdio/index.js.map +1 -0
  328. package/dist/esm/types/config.js +6 -0
  329. package/dist/esm/types/config.js.map +1 -0
  330. package/dist/esm/types/css.js +6 -0
  331. package/dist/esm/types/css.js.map +1 -0
  332. package/dist/esm/types/graph.js +6 -0
  333. package/dist/esm/types/graph.js.map +1 -0
  334. package/dist/esm/types/index.js +16 -0
  335. package/dist/esm/types/index.js.map +1 -0
  336. package/dist/esm/types/lsp.js +10 -0
  337. package/dist/esm/types/lsp.js.map +1 -0
  338. package/dist/esm/types/protocol.js +35 -0
  339. package/dist/esm/types/protocol.js.map +1 -0
  340. package/dist/esm/types/worker.js +6 -0
  341. package/dist/esm/types/worker.js.map +1 -0
  342. package/dist/esm/version.js +21 -0
  343. package/dist/esm/version.js.map +1 -0
  344. package/dist/extension.js +17910 -0
  345. package/install.sh +29 -0
  346. package/package.json +94 -0
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # Terrazzo LSP
2
+
3
+ Terrazzo LSP adds CSS custom property intelligence for Canonical design token workflows in VS Code.
4
+
5
+ ## Features
6
+
7
+ - Completions for `var(--token)` references
8
+ - Hover details with resolved token values and provenance
9
+ - Diagnostics for missing fallbacks, stale fallbacks, primitive token use, and type mismatches
10
+ - Go to definition and rename for custom properties
11
+ - Workspace symbol search across token names
12
+
13
+ ## Quick start
14
+
15
+ 1. Install `@canonical/design-tokens` in your project.
16
+ 2. Run `npx @canonical/terrazzo-lsp-extension` to install the extension.
17
+ 3. Create a `terrazzo-lsp.config.json` file in your workspace root:
18
+
19
+ ```json
20
+ {
21
+ "artifacts": ["@canonical/design-tokens/dist/tokens.json"]
22
+ }
23
+ ```
24
+
25
+ ## Configuration
26
+
27
+ ### `terrazzo-lsp.serverPath`
28
+
29
+ Optional path to a custom `dist/esm/cli.js` server build.
30
+
31
+ ### `terrazzo-lsp.runtime`
32
+
33
+ Optional runtime override. Leave empty to auto-detect `bun` first and `node >= 22` second.
34
+
35
+ ### `terrazzo-lsp.trace.server`
36
+
37
+ Controls the VS Code language client trace level.
38
+
39
+ ## Troubleshooting
40
+
41
+ If the extension cannot find a runtime, install `bun` or `node >= 22`, or set `terrazzo-lsp.runtime` explicitly in your workspace settings.
42
+
43
+ If no `terrazzo-lsp.config.json` is present, the extension output logs the
44
+ candidate paths it tried and includes a starter example you can paste into a
45
+ new config file.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Expand glob patterns to matching file paths (deduplicated).
3
+ *
4
+ * @note Impure — reads the file system via `fs.glob`.
5
+ */
6
+ import * as fs from "node:fs/promises";
7
+ export async function expandGlobs(patterns, rootDir) {
8
+ const results = [];
9
+ for (const pattern of patterns) {
10
+ try {
11
+ for await (const entry of fs.glob(pattern, { cwd: rootDir })) {
12
+ results.push(entry);
13
+ }
14
+ }
15
+ catch {
16
+ // Pattern didn't match — skip
17
+ }
18
+ }
19
+ return [...new Set(results)];
20
+ }
21
+ //# sourceMappingURL=expandGlobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expandGlobs.js","sourceRoot":"","sources":["../../../src/cli/expandGlobs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAkB,EAClB,OAAe;IAEf,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * CLI entry-point dispatcher.
3
+ *
4
+ * Parses `process.argv`, dispatches to the appropriate sub-command,
5
+ * then tail-calls `run()`.
6
+ */
7
+ import startLspServer from "../runtime/startLspServer.js";
8
+ import { VERSION } from "../version.js";
9
+ import { printHelp } from "./printHelp.js";
10
+ import { runCheck } from "./runCheck.js";
11
+ import { runGraph } from "./runGraph.js";
12
+ import { runInspect } from "./runInspect.js";
13
+ import { runResolve } from "./runResolve.js";
14
+ import { runStatus } from "./runStatus.js";
15
+ const args = process.argv.slice(2).filter((arg) => arg !== "--allow-degraded");
16
+ const allowDegraded = process.argv.includes("--allow-degraded");
17
+ const command = args[0] ?? "--stdio";
18
+ const rootDir = process.cwd();
19
+ /**
20
+ * Run the CLI.
21
+ *
22
+ * @note This function is impure — it reads files, writes to stdout,
23
+ * and may exit the process.
24
+ */
25
+ async function run() {
26
+ switch (command) {
27
+ case "--stdio":
28
+ case "serve":
29
+ startLspServer(rootDir, { allowDegraded });
30
+ break;
31
+ case "check":
32
+ await runCheck(args.slice(1), rootDir);
33
+ break;
34
+ case "status":
35
+ await runStatus(rootDir);
36
+ break;
37
+ case "inspect":
38
+ await runInspect(args[1], rootDir);
39
+ break;
40
+ case "resolve":
41
+ await runResolve(args[1], rootDir);
42
+ break;
43
+ case "graph":
44
+ await runGraph(args[1], rootDir);
45
+ break;
46
+ case "--help":
47
+ case "-h":
48
+ printHelp();
49
+ break;
50
+ case "--version":
51
+ case "-v":
52
+ console.log(`terrazzo-lsp ${VERSION}`);
53
+ break;
54
+ default:
55
+ console.error(`Unknown command: ${command}`);
56
+ printHelp();
57
+ process.exit(1);
58
+ }
59
+ }
60
+ void run();
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC;AAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAChE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE9B;;;;;GAKG;AACH,KAAK,UAAU,GAAG;IAChB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,OAAO;YACV,cAAc,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAC3C,MAAM;QACR,KAAK,OAAO;YACV,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,OAAO;YACV,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,MAAM;QACR,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;YACvC,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,KAAK,GAAG,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Read JSON artifact files from disk and load them into the token graph.
3
+ *
4
+ * @note Impure — reads files from disk.
5
+ */
6
+ import * as fs from "node:fs/promises";
7
+ import { dirname } from "node:path";
8
+ import { loadArtifact } from "../graph/index.js";
9
+ export async function loadArtifactFiles(paths, graph) {
10
+ for (const p of paths) {
11
+ try {
12
+ const raw = await fs.readFile(p, "utf-8");
13
+ const artifact = JSON.parse(raw);
14
+ loadArtifact(artifact, graph, "", dirname(p));
15
+ }
16
+ catch {
17
+ // Skip missing artifacts
18
+ }
19
+ }
20
+ }
21
+ //# sourceMappingURL=loadArtifactFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadArtifactFiles.js","sourceRoot":"","sources":["../../../src/cli/loadArtifactFiles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AAGlE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAe,EACf,KAAiB;IAEjB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** Print CLI usage help. */
2
+ export function printHelp() {
3
+ console.log(`terrazzo-lsp — CSS custom property intelligence for design tokens
4
+
5
+ Usage:
6
+ terrazzo-lsp Start LSP server (stdio)
7
+ terrazzo-lsp check [globs] Run diagnostics on CSS files
8
+ terrazzo-lsp status Show config and artifact status
9
+ terrazzo-lsp inspect <var> Inspect a CSS custom property
10
+ terrazzo-lsp resolve <spec> Resolve an import specifier
11
+ terrazzo-lsp graph <file> Show import graph from a file
12
+
13
+ Options:
14
+ --stdio Start LSP server on stdio (default)
15
+ --allow-degraded Keep the server alive without config, with reduced capabilities
16
+ -h, --help Show this help
17
+ -v, --version Show version`);
18
+ }
19
+ //# sourceMappingURL=printHelp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printHelp.js","sourceRoot":"","sources":["../../../src/cli/printHelp.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;6CAc+B,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * `check` command — run diagnostics on CSS files and report.
3
+ *
4
+ * @note Impure — reads files, writes to stdout, may exit the process.
5
+ */
6
+ import * as fs from "node:fs/promises";
7
+ import { resolve } from "node:path";
8
+ import { ReachabilityCache, TokenGraph } from "../graph/index.js";
9
+ import { loadConfigFile, resolveConfig } from "../protocol/index.js";
10
+ import { produceDiagnostics } from "../providers/index.js";
11
+ import { DiagnosticSeverity } from "../types/index.js";
12
+ import { expandGlobs } from "./expandGlobs.js";
13
+ import { loadArtifactFiles } from "./loadArtifactFiles.js";
14
+ export async function runCheck(globs, rootDir) {
15
+ const { raw, configDir } = await loadConfigFile(rootDir);
16
+ const config = resolveConfig(raw, configDir ?? rootDir);
17
+ const graph = new TokenGraph();
18
+ const cache = new ReachabilityCache();
19
+ await loadArtifactFiles(config.artifactPaths, graph);
20
+ const patterns = globs.length > 0 ? globs : config.scanGlobs;
21
+ const files = await expandGlobs(patterns, rootDir);
22
+ let errorCount = 0;
23
+ let warningCount = 0;
24
+ for (const file of files) {
25
+ const absPath = resolve(rootDir, file);
26
+ const source = await fs.readFile(absPath, "utf-8");
27
+ const uri = `file://${absPath}`;
28
+ const diagnostics = produceDiagnostics(uri, source, graph, cache, config);
29
+ for (const diag of diagnostics) {
30
+ const severity = diag.severity === DiagnosticSeverity.Error
31
+ ? "error"
32
+ : diag.severity === DiagnosticSeverity.Warning
33
+ ? "warning"
34
+ : "info";
35
+ if (diag.severity === DiagnosticSeverity.Error)
36
+ errorCount++;
37
+ if (diag.severity === DiagnosticSeverity.Warning)
38
+ warningCount++;
39
+ const loc = `${file}:${diag.range.start.line + 1}:${diag.range.start.character + 1}`;
40
+ console.log(`${loc} ${severity} ${diag.code} ${diag.message}`);
41
+ }
42
+ }
43
+ const total = errorCount + warningCount;
44
+ if (total > 0) {
45
+ console.log(`\n${errorCount} errors, ${warningCount} warnings`);
46
+ process.exit(errorCount > 0 ? 1 : 0);
47
+ }
48
+ else {
49
+ console.log("No issues found.");
50
+ }
51
+ }
52
+ //# sourceMappingURL=runCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCheck.js","sourceRoot":"","sources":["../../../src/cli/runCheck.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAe,EACf,OAAe;IAEf,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACtC,MAAM,iBAAiB,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,UAAU,OAAO,EAAE,CAAC;QAEhC,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE1E,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,kBAAkB,CAAC,KAAK;gBACxC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,kBAAkB,CAAC,OAAO;oBAC5C,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,CAAC;YAEf,IAAI,IAAI,CAAC,QAAQ,KAAK,kBAAkB,CAAC,KAAK;gBAAE,UAAU,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,QAAQ,KAAK,kBAAkB,CAAC,OAAO;gBAAE,YAAY,EAAE,CAAC;YAEjE,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,YAAY,YAAY,WAAW,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `graph` command — show the import graph from a file.
3
+ *
4
+ * @note Impure — reads files, writes to stdout/stderr, may exit the process.
5
+ */
6
+ import * as fs from "node:fs/promises";
7
+ import { resolve } from "node:path";
8
+ import { TokenGraph } from "../graph/index.js";
9
+ import buildImportGraph from "../runtime/buildImportGraph.js";
10
+ export async function runGraph(file, rootDir) {
11
+ if (!file) {
12
+ console.error("Usage: terrazzo-lsp graph <file>");
13
+ process.exit(1);
14
+ }
15
+ const graph = new TokenGraph();
16
+ const absPath = resolve(rootDir, file);
17
+ const uri = `file://${absPath}`;
18
+ const nodeFs = {
19
+ rootDir,
20
+ async readFile(fileUri) {
21
+ const fsPath = fileUri.startsWith("file://") ? fileUri.slice(7) : fileUri;
22
+ try {
23
+ return await fs.readFile(fsPath, "utf-8");
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ },
29
+ };
30
+ await buildImportGraph(uri, graph, nodeFs);
31
+ console.log(`Import graph from ${file}:`);
32
+ for (const [importer, imported] of graph.importEntries()) {
33
+ for (const dep of imported) {
34
+ const short = (s) => s.startsWith("file://") ? s.slice(7).replace(rootDir, ".") : s;
35
+ console.log(` ${short(importer)} → ${short(dep)}`);
36
+ }
37
+ }
38
+ console.log(`\nFiles: ${graph.fileCount}`);
39
+ console.log(`Declarations: ${graph.varCount}`);
40
+ }
41
+ //# sourceMappingURL=runGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runGraph.js","sourceRoot":"","sources":["../../../src/cli/runGraph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAG9D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAwB,EACxB,OAAe;IAEf,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,UAAU,OAAO,EAAE,CAAC;IAEhC,MAAM,MAAM,GAAe;QACzB,OAAO;QACP,KAAK,CAAC,QAAQ,CAAC,OAAe;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1E,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;IAEF,MAAM,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;QACzD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAC1B,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `inspect` command — inspect a CSS custom property.
3
+ *
4
+ * @note Impure — reads config + artifacts, writes to stdout/stderr,
5
+ * may exit the process.
6
+ */
7
+ import { TokenGraph } from "../graph/index.js";
8
+ import { loadConfigFile, resolveConfig } from "../protocol/index.js";
9
+ import { loadArtifactFiles } from "./loadArtifactFiles.js";
10
+ export async function runInspect(cssVar, rootDir) {
11
+ if (!cssVar) {
12
+ console.error("Usage: terrazzo-lsp inspect <--custom-property>");
13
+ process.exit(1);
14
+ }
15
+ const { raw, configDir } = await loadConfigFile(rootDir);
16
+ const config = resolveConfig(raw, configDir ?? rootDir);
17
+ const graph = new TokenGraph();
18
+ await loadArtifactFiles(config.artifactPaths, graph);
19
+ const token = graph.resolveToken(cssVar);
20
+ if (token) {
21
+ console.log(JSON.stringify(token, null, 2));
22
+ }
23
+ else {
24
+ console.log(`Token "${cssVar}" not found in loaded artifacts.`);
25
+ }
26
+ }
27
+ //# sourceMappingURL=runInspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runInspect.js","sourceRoot":"","sources":["../../../src/cli/runInspect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAA0B,EAC1B,OAAe;IAEf,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAC/B,MAAM,iBAAiB,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,kCAAkC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * `install` command — install LSP configuration for an editor.
3
+ *
4
+ * @note Impure — writes config files to disk, may exit the process.
5
+ */
6
+ import * as fs from "node:fs/promises";
7
+ import { homedir } from "node:os";
8
+ import { dirname, join, resolve } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { findBundledVsixPath, installBundledVscodeExtension, updateVscodeSettings, } from "../extension/index.js";
11
+ const NEOVIM_CONFIG = `-- terrazzo-lsp configuration for Neovim
12
+ -- Add this to your init.lua or lspconfig setup
13
+ --
14
+ -- Requires: bun (recommended) or node >= 22
15
+ -- Update the cmd path to point to your project's dist/esm/cli.js
16
+ require('lspconfig').terrazzo_lsp.setup({
17
+ cmd = { 'bun', 'run', '<path-to-repo>/dist/esm/cli.js', '--stdio' },
18
+ filetypes = { 'css', 'scss', 'json' },
19
+ root_dir = require('lspconfig').util.root_pattern(
20
+ 'terrazzo-lsp.config.json', 'package.json', '.git'
21
+ ),
22
+ on_attach = function(client, bufnr)
23
+ local o = { buffer = bufnr, noremap = true, silent = true }
24
+ vim.keymap.set('n', 'gd', vim.lsp.buf.definition, o)
25
+ vim.keymap.set('n', 'gr', vim.lsp.buf.references, o)
26
+ vim.keymap.set('n', 'K', vim.lsp.buf.hover, o)
27
+ vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, o)
28
+ vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, o)
29
+ end,
30
+ })
31
+ `;
32
+ const HELIX_CONFIG = `# terrazzo-lsp configuration for Helix
33
+ # Add this to your ~/.config/helix/languages.toml
34
+ #
35
+ # Requires: bun (recommended) or node >= 22
36
+ # Update the command path to point to your project's dist/esm/cli.js
37
+
38
+ [language-server.terrazzo]
39
+ command = "bun"
40
+ args = ["run", "<path-to-repo>/dist/esm/cli.js", "--stdio"]
41
+
42
+ [[language]]
43
+ name = "css"
44
+ language-servers = ["terrazzo", "vscode-css-language-server"]
45
+
46
+ [[language]]
47
+ name = "scss"
48
+ language-servers = ["terrazzo", "vscode-css-language-server"]
49
+ `;
50
+ /**
51
+ * Install LSP configuration for the specified editor.
52
+ *
53
+ * @note This function is impure — it writes config files.
54
+ */
55
+ export async function runInstall(editor, rootDir) {
56
+ if (!editor) {
57
+ console.error("Usage: terrazzo-lsp install <editor>\nEditors: neovim, helix, vscode");
58
+ process.exit(1);
59
+ return;
60
+ }
61
+ switch (editor) {
62
+ case "neovim": {
63
+ const configDir = join(homedir(), ".config", "nvim", "lsp");
64
+ await fs.mkdir(configDir, { recursive: true });
65
+ const configPath = join(configDir, "terrazzo_lsp.lua");
66
+ await fs.writeFile(configPath, NEOVIM_CONFIG, "utf-8");
67
+ console.log(`Wrote Neovim LSP config to ${configPath}`);
68
+ console.log("Ensure nvim-lspconfig is installed. Update the cmd path in the config.");
69
+ break;
70
+ }
71
+ case "helix": {
72
+ const configDir = join(homedir(), ".config", "helix");
73
+ const configPath = join(configDir, "languages.toml");
74
+ let existing = "";
75
+ try {
76
+ existing = await fs.readFile(configPath, "utf-8");
77
+ }
78
+ catch {
79
+ // File doesn't exist yet
80
+ }
81
+ if (existing.includes("terrazzo")) {
82
+ console.log(`Helix config at ${configPath} already contains terrazzo configuration.`);
83
+ }
84
+ else {
85
+ await fs.mkdir(configDir, { recursive: true });
86
+ const updated = existing
87
+ ? `${existing}\n${HELIX_CONFIG}`
88
+ : HELIX_CONFIG;
89
+ await fs.writeFile(configPath, updated, "utf-8");
90
+ console.log(`Appended terrazzo-lsp config to ${configPath}`);
91
+ }
92
+ break;
93
+ }
94
+ case "vscode": {
95
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
96
+ const vsixPath = await findBundledVsixPath(packageRoot);
97
+ const extDir = join(rootDir, ".vscode");
98
+ await fs.mkdir(extDir, { recursive: true });
99
+ const settingsPath = join(extDir, "settings.json");
100
+ let settings = {};
101
+ try {
102
+ const raw = await fs.readFile(settingsPath, "utf-8");
103
+ settings = JSON.parse(raw);
104
+ }
105
+ catch {
106
+ // New file
107
+ }
108
+ if (vsixPath) {
109
+ const installResult = await installBundledVscodeExtension(vsixPath);
110
+ console.log(installResult.message);
111
+ }
112
+ else {
113
+ console.log("Bundled VS Code extension not found. Build it with `bun run build:extension`.");
114
+ }
115
+ settings = updateVscodeSettings(settings);
116
+ await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
117
+ console.log(`Updated VS Code settings at ${settingsPath}`);
118
+ break;
119
+ }
120
+ default:
121
+ console.error(`Unknown editor: ${editor}`);
122
+ console.error("Supported editors: neovim, helix, vscode");
123
+ process.exit(1);
124
+ }
125
+ }
126
+ //# sourceMappingURL=runInstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runInstall.js","sourceRoot":"","sources":["../../../src/cli/runInstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `resolve` command — resolve an import specifier.
3
+ *
4
+ * @note Impure — dynamically imports css module, writes to stdout/stderr,
5
+ * may exit the process.
6
+ */
7
+ export async function runResolve(specifier, rootDir) {
8
+ if (!specifier) {
9
+ console.error("Usage: terrazzo-lsp resolve <import-specifier>");
10
+ process.exit(1);
11
+ return;
12
+ }
13
+ const { resolveImportSpecifier } = await import("../css/index.js");
14
+ const resolved = resolveImportSpecifier(specifier, rootDir, rootDir);
15
+ console.log(resolved ?? "(unresolvable)");
16
+ }
17
+ //# sourceMappingURL=runResolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runResolve.js","sourceRoot":"","sources":["../../../src/cli/runResolve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAA6B,EAC7B,OAAe;IAEf,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,gBAAgB,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `status` command — show current config and artifact status.
3
+ *
4
+ * @note Impure — reads config, writes to stdout.
5
+ */
6
+ import { loadConfigFile, resolveConfig } from "../protocol/index.js";
7
+ export async function runStatus(rootDir) {
8
+ const { raw, configDir } = await loadConfigFile(rootDir);
9
+ const config = resolveConfig(raw, configDir ?? rootDir);
10
+ console.log("terrazzo-lsp status");
11
+ console.log("---");
12
+ console.log(`Root: ${rootDir}`);
13
+ console.log(`Dist: ${config.distDir}`);
14
+ console.log(`Artifacts: ${config.artifactPaths.length > 0 ? config.artifactPaths.join(", ") : "(none)"}`);
15
+ console.log(`Scan globs: ${config.scanGlobs.join(", ")}`);
16
+ console.log(`Global CSS: ${config.globalStylesheets === null ? "(auto)" : config.globalStylesheets.join(", ") || "(none)"}`);
17
+ }
18
+ //# sourceMappingURL=runStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runStatus.js","sourceRoot":"","sources":["../../../src/cli/runStatus.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CACT,eAAe,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC9F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CACT,eAAe,MAAM,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAChH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ /** @see {@link ./cli/index.ts} for the CLI implementation. */
3
+ import "./cli/index.js";
4
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,8DAA8D;AAC9D,OAAO,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @note impure — mutates the colorjs.io global ColorSpace registry.
3
+ */
4
+ import { ColorSpace, OKLCH, sRGB } from "colorjs.io/fn";
5
+ let isRegistered = false;
6
+ export default function ensureColorSetup() {
7
+ if (isRegistered)
8
+ return;
9
+ ColorSpace.register(sRGB);
10
+ ColorSpace.register(OKLCH);
11
+ isRegistered = true;
12
+ }
13
+ //# sourceMappingURL=colorSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorSetup.js","sourceRoot":"","sources":["../../../src/css/colorSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAExD,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACtC,IAAI,YAAY;QAAE,OAAO;IACzB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import extractCssImports from "./imports/extractCssImports.js";
2
+ import extractJsImports from "./imports/extractJsImports.js";
3
+ import extractPackageName from "./imports/extractPackageName.js";
4
+ import formatFileUri from "./imports/formatFileUri.js";
5
+ import isExternalPath from "./imports/isExternalPath.js";
6
+ import parseFileUri from "./imports/parseFileUri.js";
7
+ import resolveImportSpecifier from "./imports/resolveImportSpecifier.js";
8
+ import scanDeclarations from "./scanners/scanDeclarations.js";
9
+ import scanProperties from "./scanners/scanProperties.js";
10
+ import scanUsages from "./scanners/scanUsages.js";
11
+ export default function createDocumentIndex(options) {
12
+ const { fileUri, rootDir, source, tree } = options;
13
+ const path = parseFileUri(fileUri);
14
+ return {
15
+ declarations: scanDeclarations(source, fileUri, tree),
16
+ file: {
17
+ uri: fileUri,
18
+ path,
19
+ isExternal: isExternalPath(path),
20
+ packageName: isExternalPath(path) ? extractPackageName(path) : null,
21
+ },
22
+ importedUris: rootDir
23
+ ? resolveImportedUris(source, tree, path, rootDir)
24
+ : [],
25
+ properties: scanProperties(source, fileUri, tree),
26
+ usages: scanUsages(source, fileUri, tree),
27
+ };
28
+ }
29
+ function resolveImportedUris(source, tree, importerPath, rootDir) {
30
+ const importedUris = new Set();
31
+ const specifiers = [
32
+ ...extractCssImports(source, tree),
33
+ ...extractJsImports(source),
34
+ ];
35
+ for (const specifier of specifiers) {
36
+ const resolvedPath = resolveImportSpecifier(specifier, importerPath, rootDir);
37
+ if (resolvedPath) {
38
+ importedUris.add(formatFileUri(resolvedPath));
39
+ }
40
+ }
41
+ return [...importedUris];
42
+ }
43
+ //# sourceMappingURL=createDocumentIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDocumentIndex.js","sourceRoot":"","sources":["../../../src/css/createDocumentIndex.ts"],"names":[],"mappings":"AASA,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;AACjE,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,sBAAsB,MAAM,qCAAqC,CAAC;AAEzE,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAiBlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,OAAmC;IAEnC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEnC,OAAO;QACL,YAAY,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACrD,IAAI,EAAE;YACJ,GAAG,EAAE,OAAO;YACZ,IAAI;YACJ,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC;YAChC,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SACpE;QACD,YAAY,EAAE,OAAO;YACnB,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;YAClD,CAAC,CAAC,EAAE;QACN,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACjD,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAc,EACd,IAAU,EACV,YAAoB,EACpB,OAAe;IAEf,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,UAAU,GAAG;QACjB,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;QAClC,GAAG,gBAAgB,CAAC,MAAM,CAAC;KAC5B,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,sBAAsB,CACzC,SAAS,EACT,YAAY,EACZ,OAAO,CACR,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import * as lezer from "../lezer/index.js";
2
+ /** Extract CSS @import paths from CSS/SCSS source text. */
3
+ export default function extractCssImports(source, tree) {
4
+ const results = [];
5
+ const parsed = tree ?? lezer.parseCSS(source);
6
+ visit(parsed.topNode, (node) => {
7
+ if (node.name !== "ImportStatement")
8
+ return;
9
+ const stringNode = node.getChild("StringLiteral");
10
+ if (stringNode) {
11
+ results.push(stripQuotes(lezer.getNodeText(source, stringNode)));
12
+ return;
13
+ }
14
+ const callNode = node.getChild("CallLiteral");
15
+ if (!callNode)
16
+ return;
17
+ const callString = callNode.getChild("StringLiteral");
18
+ if (callString) {
19
+ results.push(stripQuotes(lezer.getNodeText(source, callString)));
20
+ return;
21
+ }
22
+ const raw = lezer.getNodeText(source, callNode).trim();
23
+ const inner = raw
24
+ .replace(/^url\(/i, "")
25
+ .replace(/\)$/, "")
26
+ .trim();
27
+ if (inner)
28
+ results.push(stripQuotes(inner));
29
+ });
30
+ return results;
31
+ }
32
+ function stripQuotes(value) {
33
+ return value.replace(/^['"]|['"]$/g, "").trim();
34
+ }
35
+ function visit(node, onNode) {
36
+ onNode(node);
37
+ for (let child = node.firstChild; child; child = child.nextSibling) {
38
+ visit(child, onNode);
39
+ }
40
+ }
41
+ //# sourceMappingURL=extractCssImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractCssImports.js","sourceRoot":"","sources":["../../../../src/css/imports/extractCssImports.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,2DAA2D;AAC3D,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,MAAc,EACd,IAAW;IAEX,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO;QAE5C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG;aACd,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,IAAI,EAAE,CAAC;QACV,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,KAAK,CACZ,IAA4C,EAC5C,MAA8D;IAE9D,MAAM,CAAC,IAAI,CAAC,CAAC;IACb,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACnE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}