@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.
- package/README.md +45 -0
- package/dist/esm/cli/expandGlobs.js +21 -0
- package/dist/esm/cli/expandGlobs.js.map +1 -0
- package/dist/esm/cli/index.js +61 -0
- package/dist/esm/cli/index.js.map +1 -0
- package/dist/esm/cli/loadArtifactFiles.js +21 -0
- package/dist/esm/cli/loadArtifactFiles.js.map +1 -0
- package/dist/esm/cli/printHelp.js +19 -0
- package/dist/esm/cli/printHelp.js.map +1 -0
- package/dist/esm/cli/runCheck.js +52 -0
- package/dist/esm/cli/runCheck.js.map +1 -0
- package/dist/esm/cli/runGraph.js +41 -0
- package/dist/esm/cli/runGraph.js.map +1 -0
- package/dist/esm/cli/runInspect.js +27 -0
- package/dist/esm/cli/runInspect.js.map +1 -0
- package/dist/esm/cli/runInstall.js +126 -0
- package/dist/esm/cli/runInstall.js.map +1 -0
- package/dist/esm/cli/runResolve.js +17 -0
- package/dist/esm/cli/runResolve.js.map +1 -0
- package/dist/esm/cli/runStatus.js +18 -0
- package/dist/esm/cli/runStatus.js.map +1 -0
- package/dist/esm/cli.js +4 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/css/colorSetup.js +13 -0
- package/dist/esm/css/colorSetup.js.map +1 -0
- package/dist/esm/css/createDocumentIndex.js +43 -0
- package/dist/esm/css/createDocumentIndex.js.map +1 -0
- package/dist/esm/css/imports/extractCssImports.js +41 -0
- package/dist/esm/css/imports/extractCssImports.js.map +1 -0
- package/dist/esm/css/imports/extractJsImports.js +14 -0
- package/dist/esm/css/imports/extractJsImports.js.map +1 -0
- package/dist/esm/css/imports/extractPackageName.js +20 -0
- package/dist/esm/css/imports/extractPackageName.js.map +1 -0
- package/dist/esm/css/imports/formatFileUri.js +6 -0
- package/dist/esm/css/imports/formatFileUri.js.map +1 -0
- package/dist/esm/css/imports/index.js +9 -0
- package/dist/esm/css/imports/index.js.map +1 -0
- package/dist/esm/css/imports/isBareSpecifier.js +13 -0
- package/dist/esm/css/imports/isBareSpecifier.js.map +1 -0
- package/dist/esm/css/imports/isExternalPath.js +5 -0
- package/dist/esm/css/imports/isExternalPath.js.map +1 -0
- package/dist/esm/css/imports/parseFileUri.js +6 -0
- package/dist/esm/css/imports/parseFileUri.js.map +1 -0
- package/dist/esm/css/imports/resolveImportSpecifier.js +27 -0
- package/dist/esm/css/imports/resolveImportSpecifier.js.map +1 -0
- package/dist/esm/css/index.js +7 -0
- package/dist/esm/css/index.js.map +1 -0
- package/dist/esm/css/lezer/applyTreeChanges.js +5 -0
- package/dist/esm/css/lezer/applyTreeChanges.js.map +1 -0
- package/dist/esm/css/lezer/computeChangedRange.js +23 -0
- package/dist/esm/css/lezer/computeChangedRange.js.map +1 -0
- package/dist/esm/css/lezer/createTreeFragments.js +5 -0
- package/dist/esm/css/lezer/createTreeFragments.js.map +1 -0
- package/dist/esm/css/lezer/index.js +6 -0
- package/dist/esm/css/lezer/index.js.map +1 -0
- package/dist/esm/css/lezer/nodeText.js +4 -0
- package/dist/esm/css/lezer/nodeText.js.map +1 -0
- package/dist/esm/css/lezer/parseCSS.js +5 -0
- package/dist/esm/css/lezer/parseCSS.js.map +1 -0
- package/dist/esm/css/lezer/types.js +2 -0
- package/dist/esm/css/lezer/types.js.map +1 -0
- package/dist/esm/css/scanners/extractPropertyAtPosition.js +23 -0
- package/dist/esm/css/scanners/extractPropertyAtPosition.js.map +1 -0
- package/dist/esm/css/scanners/index.js +6 -0
- package/dist/esm/css/scanners/index.js.map +1 -0
- package/dist/esm/css/scanners/parseSuppressionDirectives.js +88 -0
- package/dist/esm/css/scanners/parseSuppressionDirectives.js.map +1 -0
- package/dist/esm/css/scanners/scanDeclarations.js +38 -0
- package/dist/esm/css/scanners/scanDeclarations.js.map +1 -0
- package/dist/esm/css/scanners/scanProperties.js +49 -0
- package/dist/esm/css/scanners/scanProperties.js.map +1 -0
- package/dist/esm/css/scanners/scanUsages.js +64 -0
- package/dist/esm/css/scanners/scanUsages.js.map +1 -0
- package/dist/esm/css/selectors/buildSelectorContext.js +9 -0
- package/dist/esm/css/selectors/buildSelectorContext.js.map +1 -0
- package/dist/esm/css/selectors/classifySelectorScope.js +32 -0
- package/dist/esm/css/selectors/classifySelectorScope.js.map +1 -0
- package/dist/esm/css/selectors/index.js +3 -0
- package/dist/esm/css/selectors/index.js.map +1 -0
- package/dist/esm/css/tree/ancestors.js +74 -0
- package/dist/esm/css/tree/ancestors.js.map +1 -0
- package/dist/esm/css/tree/declarations.js +6 -0
- package/dist/esm/css/tree/declarations.js.map +1 -0
- package/dist/esm/css/tree/index.js +5 -0
- package/dist/esm/css/tree/index.js.map +1 -0
- package/dist/esm/css/tree/lineage.js +10 -0
- package/dist/esm/css/tree/lineage.js.map +1 -0
- package/dist/esm/css/tree/lines.js +25 -0
- package/dist/esm/css/tree/lines.js.map +1 -0
- package/dist/esm/css/values/compareFallbackStaleness.js +34 -0
- package/dist/esm/css/values/compareFallbackStaleness.js.map +1 -0
- package/dist/esm/css/values/constants.js +33 -0
- package/dist/esm/css/values/constants.js.map +1 -0
- package/dist/esm/css/values/expectedTypeForProperty.js +117 -0
- package/dist/esm/css/values/expectedTypeForProperty.js.map +1 -0
- package/dist/esm/css/values/extractUnit.js +6 -0
- package/dist/esm/css/values/extractUnit.js.map +1 -0
- package/dist/esm/css/values/index.js +11 -0
- package/dist/esm/css/values/index.js.map +1 -0
- package/dist/esm/css/values/inferValueType.js +104 -0
- package/dist/esm/css/values/inferValueType.js.map +1 -0
- package/dist/esm/css/values/isAssignable.js +13 -0
- package/dist/esm/css/values/isAssignable.js.map +1 -0
- package/dist/esm/css/values/isSuppressed.js +47 -0
- package/dist/esm/css/values/isSuppressed.js.map +1 -0
- package/dist/esm/css/values/mapDtcgType.js +20 -0
- package/dist/esm/css/values/mapDtcgType.js.map +1 -0
- package/dist/esm/css/values/parseSyntaxType.js +50 -0
- package/dist/esm/css/values/parseSyntaxType.js.map +1 -0
- package/dist/esm/css/values/resolveDimensionValue.js +62 -0
- package/dist/esm/css/values/resolveDimensionValue.js.map +1 -0
- package/dist/esm/diagnosticCodes.js +18 -0
- package/dist/esm/diagnosticCodes.js.map +1 -0
- package/dist/esm/extension/findBundledVsixPath.js +20 -0
- package/dist/esm/extension/findBundledVsixPath.js.map +1 -0
- package/dist/esm/extension/index.js +4 -0
- package/dist/esm/extension/index.js.map +1 -0
- package/dist/esm/extension/installBundledVscodeExtension.js +25 -0
- package/dist/esm/extension/installBundledVscodeExtension.js.map +1 -0
- package/dist/esm/extension/updateVscodeSettings.js +8 -0
- package/dist/esm/extension/updateVscodeSettings.js.map +1 -0
- package/dist/esm/graph/ReachabilityCache.js +91 -0
- package/dist/esm/graph/ReachabilityCache.js.map +1 -0
- package/dist/esm/graph/TokenGraph.js +370 -0
- package/dist/esm/graph/TokenGraph.js.map +1 -0
- package/dist/esm/graph/index.js +5 -0
- package/dist/esm/graph/index.js.map +1 -0
- package/dist/esm/graph/loadArtifact.js +157 -0
- package/dist/esm/graph/loadArtifact.js.map +1 -0
- package/dist/esm/graph/parseArtifactToken.js +113 -0
- package/dist/esm/graph/parseArtifactToken.js.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/protocol/createRequest.js +10 -0
- package/dist/esm/protocol/createRequest.js.map +1 -0
- package/dist/esm/protocol/index.js +5 -0
- package/dist/esm/protocol/index.js.map +1 -0
- package/dist/esm/protocol/matchResponse.js +5 -0
- package/dist/esm/protocol/matchResponse.js.map +1 -0
- package/dist/esm/protocol/resolveConfig.js +222 -0
- package/dist/esm/protocol/resolveConfig.js.map +1 -0
- package/dist/esm/protocol/typeGuards.js +16 -0
- package/dist/esm/protocol/typeGuards.js.map +1 -0
- package/dist/esm/providers/artifactDiagnostics/checkBrokenAlias.js +15 -0
- package/dist/esm/providers/artifactDiagnostics/checkBrokenAlias.js.map +1 -0
- package/dist/esm/providers/artifactDiagnostics/checkCircularAlias.js +22 -0
- package/dist/esm/providers/artifactDiagnostics/checkCircularAlias.js.map +1 -0
- package/dist/esm/providers/artifactDiagnostics/checkDraftSyntax.js +15 -0
- package/dist/esm/providers/artifactDiagnostics/checkDraftSyntax.js.map +1 -0
- package/dist/esm/providers/artifactDiagnostics/checkMissingType.js +10 -0
- package/dist/esm/providers/artifactDiagnostics/checkMissingType.js.map +1 -0
- package/dist/esm/providers/artifactDiagnostics/checkSchemaViolation.js +15 -0
- package/dist/esm/providers/artifactDiagnostics/checkSchemaViolation.js.map +1 -0
- package/dist/esm/providers/artifactDiagnostics/index.js +28 -0
- package/dist/esm/providers/artifactDiagnostics/index.js.map +1 -0
- package/dist/esm/providers/classifyProvenance.js +19 -0
- package/dist/esm/providers/classifyProvenance.js.map +1 -0
- package/dist/esm/providers/completions/buildCompletionItem.js +132 -0
- package/dist/esm/providers/completions/buildCompletionItem.js.map +1 -0
- package/dist/esm/providers/completions/buildSortText.js +39 -0
- package/dist/esm/providers/completions/buildSortText.js.map +1 -0
- package/dist/esm/providers/completions/index.js +6 -0
- package/dist/esm/providers/completions/index.js.map +1 -0
- package/dist/esm/providers/completions/provideCompletions.js +64 -0
- package/dist/esm/providers/completions/provideCompletions.js.map +1 -0
- package/dist/esm/providers/completions/resolveCompletionItem.js +26 -0
- package/dist/esm/providers/completions/resolveCompletionItem.js.map +1 -0
- package/dist/esm/providers/completions/resolveExpectedType.js +17 -0
- package/dist/esm/providers/completions/resolveExpectedType.js.map +1 -0
- package/dist/esm/providers/constants.js +53 -0
- package/dist/esm/providers/constants.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkMissingFallback.js +20 -0
- package/dist/esm/providers/diagnostics/checkMissingFallback.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkNoColorScheme.js +27 -0
- package/dist/esm/providers/diagnostics/checkNoColorScheme.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkPrimitiveToken.js +20 -0
- package/dist/esm/providers/diagnostics/checkPrimitiveToken.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkScopedUsage.js +28 -0
- package/dist/esm/providers/diagnostics/checkScopedUsage.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkStaleFallback.js +22 -0
- package/dist/esm/providers/diagnostics/checkStaleFallback.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkTypeMismatch.js +24 -0
- package/dist/esm/providers/diagnostics/checkTypeMismatch.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkTypeUncertain.js +19 -0
- package/dist/esm/providers/diagnostics/checkTypeUncertain.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkUnknownVar.js +18 -0
- package/dist/esm/providers/diagnostics/checkUnknownVar.js.map +1 -0
- package/dist/esm/providers/diagnostics/checkUnreachableToken.js +25 -0
- package/dist/esm/providers/diagnostics/checkUnreachableToken.js.map +1 -0
- package/dist/esm/providers/diagnostics/index.js +2 -0
- package/dist/esm/providers/diagnostics/index.js.map +1 -0
- package/dist/esm/providers/diagnostics/orchestrateDiagnostics.js +90 -0
- package/dist/esm/providers/diagnostics/orchestrateDiagnostics.js.map +1 -0
- package/dist/esm/providers/diagnostics/types.js +2 -0
- package/dist/esm/providers/diagnostics/types.js.map +1 -0
- package/dist/esm/providers/formatCheckReport.js +90 -0
- package/dist/esm/providers/formatCheckReport.js.map +1 -0
- package/dist/esm/providers/index.js +20 -0
- package/dist/esm/providers/index.js.map +1 -0
- package/dist/esm/providers/makeDiagnostic.js +13 -0
- package/dist/esm/providers/makeDiagnostic.js.map +1 -0
- package/dist/esm/providers/prepareRename.js +36 -0
- package/dist/esm/providers/prepareRename.js.map +1 -0
- package/dist/esm/providers/provideCodeActions.js +154 -0
- package/dist/esm/providers/provideCodeActions.js.map +1 -0
- package/dist/esm/providers/provideDocumentColors.js +90 -0
- package/dist/esm/providers/provideDocumentColors.js.map +1 -0
- package/dist/esm/providers/provideDocumentLinks.js +55 -0
- package/dist/esm/providers/provideDocumentLinks.js.map +1 -0
- package/dist/esm/providers/provideHover.js +20 -0
- package/dist/esm/providers/provideHover.js.map +1 -0
- package/dist/esm/providers/provideInlayHints.js +82 -0
- package/dist/esm/providers/provideInlayHints.js.map +1 -0
- package/dist/esm/providers/provideReferences.js +39 -0
- package/dist/esm/providers/provideReferences.js.map +1 -0
- package/dist/esm/providers/provideRename.js +63 -0
- package/dist/esm/providers/provideRename.js.map +1 -0
- package/dist/esm/providers/provideSemanticTokens.js +74 -0
- package/dist/esm/providers/provideSemanticTokens.js.map +1 -0
- package/dist/esm/providers/provideWorkspaceSymbols.js +175 -0
- package/dist/esm/providers/provideWorkspaceSymbols.js.map +1 -0
- package/dist/esm/providers/resolveDefinition.js +42 -0
- package/dist/esm/providers/resolveDefinition.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/buildResolutionTable.js +121 -0
- package/dist/esm/providers/tokenTooltip/buildResolutionTable.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/buildTokenTooltip.js +60 -0
- package/dist/esm/providers/tokenTooltip/buildTokenTooltip.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/constants.js +14 -0
- package/dist/esm/providers/tokenTooltip/constants.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/formatDeclarationSites.js +53 -0
- package/dist/esm/providers/tokenTooltip/formatDeclarationSites.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/formatProvenanceLine.js +86 -0
- package/dist/esm/providers/tokenTooltip/formatProvenanceLine.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/index.js +6 -0
- package/dist/esm/providers/tokenTooltip/index.js.map +1 -0
- package/dist/esm/providers/tokenTooltip/resolveToLiteral.js +19 -0
- package/dist/esm/providers/tokenTooltip/resolveToLiteral.js.map +1 -0
- package/dist/esm/providers/truncate.js +6 -0
- package/dist/esm/providers/truncate.js.map +1 -0
- package/dist/esm/providers/types.js +38 -0
- package/dist/esm/providers/types.js.map +1 -0
- package/dist/esm/runtime/ConfigNotFoundError.js +21 -0
- package/dist/esm/runtime/ConfigNotFoundError.js.map +1 -0
- package/dist/esm/runtime/artifacts/index.js +2 -0
- package/dist/esm/runtime/artifacts/index.js.map +1 -0
- package/dist/esm/runtime/artifacts/loadConfiguredArtifacts.js +32 -0
- package/dist/esm/runtime/artifacts/loadConfiguredArtifacts.js.map +1 -0
- package/dist/esm/runtime/buildImportGraph.js +61 -0
- package/dist/esm/runtime/buildImportGraph.js.map +1 -0
- package/dist/esm/runtime/config/ensureServerConfig.js +64 -0
- package/dist/esm/runtime/config/ensureServerConfig.js.map +1 -0
- package/dist/esm/runtime/config/index.js +2 -0
- package/dist/esm/runtime/config/index.js.map +1 -0
- package/dist/esm/runtime/createConfigCandidatePath.js +7 -0
- package/dist/esm/runtime/createConfigCandidatePath.js.map +1 -0
- package/dist/esm/runtime/createGraphWorker.js +23 -0
- package/dist/esm/runtime/createGraphWorker.js.map +1 -0
- package/dist/esm/runtime/createServerState.js +39 -0
- package/dist/esm/runtime/createServerState.js.map +1 -0
- package/dist/esm/runtime/detectRuntime.js +40 -0
- package/dist/esm/runtime/detectRuntime.js.map +1 -0
- package/dist/esm/runtime/dispatch/LogMessageType.js +8 -0
- package/dist/esm/runtime/dispatch/LogMessageType.js.map +1 -0
- package/dist/esm/runtime/dispatch/handleWorkerResponse.js +58 -0
- package/dist/esm/runtime/dispatch/handleWorkerResponse.js.map +1 -0
- package/dist/esm/runtime/dispatch/index.js +5 -0
- package/dist/esm/runtime/dispatch/index.js.map +1 -0
- package/dist/esm/runtime/dispatch/routeLspRequest.js +233 -0
- package/dist/esm/runtime/dispatch/routeLspRequest.js.map +1 -0
- package/dist/esm/runtime/dispatch/routeWorkerRequest.js +162 -0
- package/dist/esm/runtime/dispatch/routeWorkerRequest.js.map +1 -0
- package/dist/esm/runtime/dispatch/types.js +2 -0
- package/dist/esm/runtime/dispatch/types.js.map +1 -0
- package/dist/esm/runtime/documents/handleArtifactChanged.js +18 -0
- package/dist/esm/runtime/documents/handleArtifactChanged.js.map +1 -0
- package/dist/esm/runtime/documents/handleChangeDocument.js +41 -0
- package/dist/esm/runtime/documents/handleChangeDocument.js.map +1 -0
- package/dist/esm/runtime/documents/handleCloseDocument.js +10 -0
- package/dist/esm/runtime/documents/handleCloseDocument.js.map +1 -0
- package/dist/esm/runtime/documents/handleFileChanged.js +14 -0
- package/dist/esm/runtime/documents/handleFileChanged.js.map +1 -0
- package/dist/esm/runtime/documents/handleOpenDocument.js +37 -0
- package/dist/esm/runtime/documents/handleOpenDocument.js.map +1 -0
- package/dist/esm/runtime/documents/index.js +6 -0
- package/dist/esm/runtime/documents/index.js.map +1 -0
- package/dist/esm/runtime/getServerCapabilities.js +35 -0
- package/dist/esm/runtime/getServerCapabilities.js.map +1 -0
- package/dist/esm/runtime/index.js +14 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/indexing/index.js +5 -0
- package/dist/esm/runtime/indexing/index.js.map +1 -0
- package/dist/esm/runtime/indexing/indexDocument.js +32 -0
- package/dist/esm/runtime/indexing/indexDocument.js.map +1 -0
- package/dist/esm/runtime/indexing/indexGlobalStylesheets.js +12 -0
- package/dist/esm/runtime/indexing/indexGlobalStylesheets.js.map +1 -0
- package/dist/esm/runtime/indexing/reindexDocument.js +16 -0
- package/dist/esm/runtime/indexing/reindexDocument.js.map +1 -0
- package/dist/esm/runtime/indexing/updateImportEdges.js +5 -0
- package/dist/esm/runtime/indexing/updateImportEdges.js.map +1 -0
- package/dist/esm/runtime/scheduleBufferUpdate.js +39 -0
- package/dist/esm/runtime/scheduleBufferUpdate.js.map +1 -0
- package/dist/esm/runtime/startLspServer.js +66 -0
- package/dist/esm/runtime/startLspServer.js.map +1 -0
- package/dist/esm/runtime/types.js +2 -0
- package/dist/esm/runtime/types.js.map +1 -0
- package/dist/esm/testing/index.js +8 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/makeArtifactToken.js +31 -0
- package/dist/esm/testing/makeArtifactToken.js.map +1 -0
- package/dist/esm/testing/makeConfig.js +40 -0
- package/dist/esm/testing/makeConfig.js.map +1 -0
- package/dist/esm/testing/makeDeclarationNode.js +18 -0
- package/dist/esm/testing/makeDeclarationNode.js.map +1 -0
- package/dist/esm/testing/makePropertyNode.js +12 -0
- package/dist/esm/testing/makePropertyNode.js.map +1 -0
- package/dist/esm/testing/makeServerState.js +21 -0
- package/dist/esm/testing/makeServerState.js.map +1 -0
- package/dist/esm/testing/makeTokenNode.js +34 -0
- package/dist/esm/testing/makeTokenNode.js.map +1 -0
- package/dist/esm/testing/makeTransport.js +9 -0
- package/dist/esm/testing/makeTransport.js.map +1 -0
- package/dist/esm/transport/index.js +2 -0
- package/dist/esm/transport/index.js.map +1 -0
- package/dist/esm/transport/stdio/createMessageStream.js +50 -0
- package/dist/esm/transport/stdio/createMessageStream.js.map +1 -0
- package/dist/esm/transport/stdio/index.js +2 -0
- package/dist/esm/transport/stdio/index.js.map +1 -0
- package/dist/esm/types/config.js +6 -0
- package/dist/esm/types/config.js.map +1 -0
- package/dist/esm/types/css.js +6 -0
- package/dist/esm/types/css.js.map +1 -0
- package/dist/esm/types/graph.js +6 -0
- package/dist/esm/types/graph.js.map +1 -0
- package/dist/esm/types/index.js +16 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/lsp.js +10 -0
- package/dist/esm/types/lsp.js.map +1 -0
- package/dist/esm/types/protocol.js +35 -0
- package/dist/esm/types/protocol.js.map +1 -0
- package/dist/esm/types/worker.js +6 -0
- package/dist/esm/types/worker.js.map +1 -0
- package/dist/esm/version.js +21 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/extension.js +17910 -0
- package/install.sh +29 -0
- package/package.json +94 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import extractUnit from "./extractUnit.js";
|
|
2
|
+
const UNIT_TO_CSS = new Map([
|
|
3
|
+
["px", "<length>"],
|
|
4
|
+
["rem", "<length>"],
|
|
5
|
+
["em", "<length>"],
|
|
6
|
+
["vw", "<length>"],
|
|
7
|
+
["vh", "<length>"],
|
|
8
|
+
["dvw", "<length>"],
|
|
9
|
+
["dvh", "<length>"],
|
|
10
|
+
["dvmin", "<length>"],
|
|
11
|
+
["dvmax", "<length>"],
|
|
12
|
+
["svw", "<length>"],
|
|
13
|
+
["svh", "<length>"],
|
|
14
|
+
["svmin", "<length>"],
|
|
15
|
+
["svmax", "<length>"],
|
|
16
|
+
["lvw", "<length>"],
|
|
17
|
+
["lvh", "<length>"],
|
|
18
|
+
["lvmin", "<length>"],
|
|
19
|
+
["lvmax", "<length>"],
|
|
20
|
+
["vmin", "<length>"],
|
|
21
|
+
["vmax", "<length>"],
|
|
22
|
+
["cqw", "<length>"],
|
|
23
|
+
["cqh", "<length>"],
|
|
24
|
+
["cqi", "<length>"],
|
|
25
|
+
["cqb", "<length>"],
|
|
26
|
+
["cqmin", "<length>"],
|
|
27
|
+
["cqmax", "<length>"],
|
|
28
|
+
["ch", "<length>"],
|
|
29
|
+
["ex", "<length>"],
|
|
30
|
+
["ic", "<length>"],
|
|
31
|
+
["lh", "<length>"],
|
|
32
|
+
["rlh", "<length>"],
|
|
33
|
+
["cap", "<length>"],
|
|
34
|
+
["cm", "<length>"],
|
|
35
|
+
["mm", "<length>"],
|
|
36
|
+
["Q", "<length>"],
|
|
37
|
+
["in", "<length>"],
|
|
38
|
+
["pt", "<length>"],
|
|
39
|
+
["pc", "<length>"],
|
|
40
|
+
["deg", "<angle>"],
|
|
41
|
+
["rad", "<angle>"],
|
|
42
|
+
["grad", "<angle>"],
|
|
43
|
+
["turn", "<angle>"],
|
|
44
|
+
["s", "<time>"],
|
|
45
|
+
["ms", "<time>"],
|
|
46
|
+
["Hz", "<frequency>"],
|
|
47
|
+
["kHz", "<frequency>"],
|
|
48
|
+
["dpi", "<resolution>"],
|
|
49
|
+
["dpcm", "<resolution>"],
|
|
50
|
+
["dppx", "<resolution>"],
|
|
51
|
+
["x", "<resolution>"],
|
|
52
|
+
["fr", "<flex>"],
|
|
53
|
+
]);
|
|
54
|
+
export default function resolveDimensionValue(value) {
|
|
55
|
+
const unit = extractUnit(value);
|
|
56
|
+
if (!unit)
|
|
57
|
+
return "<number>";
|
|
58
|
+
if (unit === "%")
|
|
59
|
+
return "<percentage>";
|
|
60
|
+
return UNIT_TO_CSS.get(unit) ?? "<unknown>";
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=resolveDimensionValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveDimensionValue.js","sourceRoot":"","sources":["../../../../src/css/values/resolveDimensionValue.ts"],"names":[],"mappings":"AAEA,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,MAAM,WAAW,GAAsC,IAAI,GAAG,CAAC;IAC7D,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,GAAG,EAAE,UAAU,CAAC;IACjB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,IAAI,EAAE,UAAU,CAAC;IAClB,CAAC,KAAK,EAAE,SAAS,CAAC;IAClB,CAAC,KAAK,EAAE,SAAS,CAAC;IAClB,CAAC,MAAM,EAAE,SAAS,CAAC;IACnB,CAAC,MAAM,EAAE,SAAS,CAAC;IACnB,CAAC,GAAG,EAAE,QAAQ,CAAC;IACf,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,IAAI,EAAE,aAAa,CAAC;IACrB,CAAC,KAAK,EAAE,aAAa,CAAC;IACtB,CAAC,KAAK,EAAE,cAAc,CAAC;IACvB,CAAC,MAAM,EAAE,cAAc,CAAC;IACxB,CAAC,MAAM,EAAE,cAAc,CAAC;IACxB,CAAC,GAAG,EAAE,cAAc,CAAC;IACrB,CAAC,IAAI,EAAE,QAAQ,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAa;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IAC7B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,cAAc,CAAC;IACxC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const DIAGNOSTIC_CODES = [
|
|
2
|
+
"css/unknown-var",
|
|
3
|
+
"css/missing-fallback",
|
|
4
|
+
"css/stale-fallback",
|
|
5
|
+
"css/type-mismatch",
|
|
6
|
+
"css/type-uncertain",
|
|
7
|
+
"css/unreachable-token",
|
|
8
|
+
"css/primitive-token",
|
|
9
|
+
"css/scoped-usage",
|
|
10
|
+
"css/no-color-scheme",
|
|
11
|
+
"dtcg/broken-alias",
|
|
12
|
+
"dtcg/schema-violation",
|
|
13
|
+
"dtcg/circular-alias",
|
|
14
|
+
"dtcg/missing-type",
|
|
15
|
+
"dtcg/draft-syntax",
|
|
16
|
+
];
|
|
17
|
+
export const KNOWN_CODES = new Set(DIAGNOSTIC_CODES);
|
|
18
|
+
//# sourceMappingURL=diagnosticCodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosticCodes.js","sourceRoot":"","sources":["../../src/diagnosticCodes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IACrB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,uBAAuB;IACvB,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;CACX,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAAgC,IAAI,GAAG,CAC7D,gBAAgB,CACjB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @note impure — reads the filesystem to find bundled VSIX packages.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs/promises";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
/** Find the bundled VS Code extension package in the package root. */
|
|
7
|
+
export default async function findBundledVsixPath(packageRoot) {
|
|
8
|
+
const extensionDir = join(packageRoot, "extension");
|
|
9
|
+
try {
|
|
10
|
+
const fileNames = await fs.readdir(extensionDir);
|
|
11
|
+
const vsixName = [...fileNames]
|
|
12
|
+
.filter((fileName) => /^terrazzo-lsp-.*\.vsix$/u.test(fileName))
|
|
13
|
+
.sort()[0];
|
|
14
|
+
return vsixName ? join(extensionDir, vsixName) : null;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=findBundledVsixPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findBundledVsixPath.js","sourceRoot":"","sources":["../../../src/extension/findBundledVsixPath.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sEAAsE;AACtE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,mBAAmB,CAC/C,WAAmB;IAEnB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC;aAC5B,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/D,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as findBundledVsixPath } from "./findBundledVsixPath.js";
|
|
2
|
+
export { default as installBundledVscodeExtension } from "./installBundledVscodeExtension.js";
|
|
3
|
+
export { default as updateVscodeSettings } from "./updateVscodeSettings.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extension/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
/**
|
|
3
|
+
* Install the bundled VS Code extension with the `code` CLI.
|
|
4
|
+
*
|
|
5
|
+
* @note This function is impure because it invokes an external process.
|
|
6
|
+
*/
|
|
7
|
+
export default async function installBundledVscodeExtension(vsixPath, runInstallCommand = executeInstallCommand) {
|
|
8
|
+
try {
|
|
9
|
+
runInstallCommand("code", ["--install-extension", vsixPath]);
|
|
10
|
+
return {
|
|
11
|
+
didInstall: true,
|
|
12
|
+
message: "Terrazzo LSP extension installed.",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {
|
|
17
|
+
didInstall: false,
|
|
18
|
+
message: `Auto-install failed. Install manually:\n code --install-extension ${vsixPath}`,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function executeInstallCommand(command, args) {
|
|
23
|
+
execFileSync(command, args, { stdio: "inherit" });
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=installBundledVscodeExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installBundledVscodeExtension.js","sourceRoot":"","sources":["../../../src/extension/installBundledVscodeExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;;;GAIG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,6BAA6B,CACzD,QAAgB,EAChB,oBAAuC,qBAAqB;IAE5D,IAAI,CAAC;QACH,iBAAiB,CAAC,MAAM,EAAE,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC7D,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,mCAAmC;SAC7C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,sEAAsE,QAAQ,EAAE;SAC1F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe,EAAE,IAAc;IAC5D,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateVscodeSettings.js","sourceRoot":"","sources":["../../../src/extension/updateVscodeSettings.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,QAAiC;IAEjC,OAAO;QACL,GAAG,QAAQ;QACX,qBAAqB,EAAE,IAAI;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** Maximum number of cached reachability sets before LRU eviction kicks in. */
|
|
2
|
+
const MAX_ENTRIES = 500;
|
|
3
|
+
export default class ReachabilityCache {
|
|
4
|
+
cache = new Map();
|
|
5
|
+
dependents = new Map();
|
|
6
|
+
getReachableFiles(fileUri, graph) {
|
|
7
|
+
const cached = this.cache.get(fileUri);
|
|
8
|
+
if (cached) {
|
|
9
|
+
// Move to end for LRU freshness
|
|
10
|
+
this.cache.delete(fileUri);
|
|
11
|
+
this.cache.set(fileUri, cached);
|
|
12
|
+
return cached;
|
|
13
|
+
}
|
|
14
|
+
const visited = new Set();
|
|
15
|
+
const stack = [fileUri];
|
|
16
|
+
while (stack.length > 0) {
|
|
17
|
+
const current = stack.pop();
|
|
18
|
+
if (visited.has(current))
|
|
19
|
+
continue;
|
|
20
|
+
visited.add(current);
|
|
21
|
+
const imports = graph.getImports(current);
|
|
22
|
+
if (imports)
|
|
23
|
+
for (const imported of imports)
|
|
24
|
+
if (!visited.has(imported))
|
|
25
|
+
stack.push(imported);
|
|
26
|
+
}
|
|
27
|
+
// LRU eviction: drop the oldest entry if over capacity
|
|
28
|
+
if (this.cache.size >= MAX_ENTRIES) {
|
|
29
|
+
const oldest = this.cache.keys().next().value;
|
|
30
|
+
if (oldest !== undefined) {
|
|
31
|
+
this.cache.delete(oldest);
|
|
32
|
+
this.dependents.delete(oldest);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.cache.set(fileUri, visited);
|
|
36
|
+
for (const reachable of visited) {
|
|
37
|
+
let deps = this.dependents.get(reachable);
|
|
38
|
+
if (!deps) {
|
|
39
|
+
deps = new Set();
|
|
40
|
+
this.dependents.set(reachable, deps);
|
|
41
|
+
}
|
|
42
|
+
deps.add(fileUri);
|
|
43
|
+
}
|
|
44
|
+
return visited;
|
|
45
|
+
}
|
|
46
|
+
getReachableVars(fileUri, graph, globalStylesheets) {
|
|
47
|
+
const reachable = this.getReachableFiles(fileUri, graph);
|
|
48
|
+
const vars = new Set();
|
|
49
|
+
for (const uri of reachable) {
|
|
50
|
+
const decls = graph.getDeclarationsByFile(uri);
|
|
51
|
+
for (const d of decls)
|
|
52
|
+
vars.add(d.cssVar);
|
|
53
|
+
}
|
|
54
|
+
if (globalStylesheets) {
|
|
55
|
+
for (const uri of globalStylesheets) {
|
|
56
|
+
const decls = graph.getDeclarationsByFile(uri);
|
|
57
|
+
for (const d of decls)
|
|
58
|
+
vars.add(d.cssVar);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return vars;
|
|
62
|
+
}
|
|
63
|
+
invalidate(fileUri) {
|
|
64
|
+
const toInvalidate = new Set();
|
|
65
|
+
const stack = [fileUri];
|
|
66
|
+
while (stack.length > 0) {
|
|
67
|
+
const current = stack.pop();
|
|
68
|
+
if (toInvalidate.has(current))
|
|
69
|
+
continue;
|
|
70
|
+
toInvalidate.add(current);
|
|
71
|
+
const deps = this.dependents.get(current);
|
|
72
|
+
if (deps)
|
|
73
|
+
for (const dep of deps)
|
|
74
|
+
if (!toInvalidate.has(dep))
|
|
75
|
+
stack.push(dep);
|
|
76
|
+
}
|
|
77
|
+
for (const uri of toInvalidate) {
|
|
78
|
+
this.cache.delete(uri);
|
|
79
|
+
this.dependents.delete(uri);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
invalidateAll() {
|
|
83
|
+
this.cache.clear();
|
|
84
|
+
this.dependents.clear();
|
|
85
|
+
}
|
|
86
|
+
/** Current number of cached entries (exposed for testing). */
|
|
87
|
+
get size() {
|
|
88
|
+
return this.cache.size;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=ReachabilityCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReachabilityCache.js","sourceRoot":"","sources":["../../../src/graph/ReachabilityCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
export default class TokenGraph {
|
|
2
|
+
data;
|
|
3
|
+
constructor() {
|
|
4
|
+
this.data = {
|
|
5
|
+
tokens: new Map(),
|
|
6
|
+
files: new Map(),
|
|
7
|
+
declarations: new Map(),
|
|
8
|
+
properties: new Map(),
|
|
9
|
+
usages: new Map(),
|
|
10
|
+
declarationsByFile: new Map(),
|
|
11
|
+
propertiesByFile: new Map(),
|
|
12
|
+
usagesByFile: new Map(),
|
|
13
|
+
imports: new Map(),
|
|
14
|
+
importedBy: new Map(),
|
|
15
|
+
allVars: new Set(),
|
|
16
|
+
artifactFileUris: new Set(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// ── Mutation — tokens ───────────────────────────────────────────
|
|
20
|
+
/** Register or overwrite an artifact/local token. */
|
|
21
|
+
addToken(node) {
|
|
22
|
+
this.data.tokens.set(node.cssVar, node);
|
|
23
|
+
this.data.allVars.add(node.cssVar);
|
|
24
|
+
}
|
|
25
|
+
/** Remove all tokens (used when reloading artifacts). */
|
|
26
|
+
clearTokens() {
|
|
27
|
+
this.data.tokens.clear();
|
|
28
|
+
}
|
|
29
|
+
// ── Mutation — files ────────────────────────────────────────────
|
|
30
|
+
/** Register a file node. */
|
|
31
|
+
addFile(node) {
|
|
32
|
+
this.data.files.set(node.uri, node);
|
|
33
|
+
}
|
|
34
|
+
/** Remove a file entry by URI. */
|
|
35
|
+
removeFile(fileUri) {
|
|
36
|
+
this.data.files.delete(fileUri);
|
|
37
|
+
}
|
|
38
|
+
// ── Mutation — declarations ─────────────────────────────────────
|
|
39
|
+
/** Add a declaration and update both per-var and per-file indices. */
|
|
40
|
+
addDeclaration(node) {
|
|
41
|
+
const byVar = this.data.declarations.get(node.cssVar);
|
|
42
|
+
if (byVar)
|
|
43
|
+
byVar.push(node);
|
|
44
|
+
else
|
|
45
|
+
this.data.declarations.set(node.cssVar, [node]);
|
|
46
|
+
const byFile = this.data.declarationsByFile.get(node.fileUri);
|
|
47
|
+
if (byFile)
|
|
48
|
+
byFile.push(node);
|
|
49
|
+
else
|
|
50
|
+
this.data.declarationsByFile.set(node.fileUri, [node]);
|
|
51
|
+
this.data.allVars.add(node.cssVar);
|
|
52
|
+
}
|
|
53
|
+
// ── Mutation — properties ───────────────────────────────────────
|
|
54
|
+
/** Add an `@property` registration node. */
|
|
55
|
+
addProperty(node) {
|
|
56
|
+
this.data.properties.set(node.cssVar, node);
|
|
57
|
+
const byFile = this.data.propertiesByFile.get(node.fileUri);
|
|
58
|
+
if (byFile)
|
|
59
|
+
byFile.push(node);
|
|
60
|
+
else
|
|
61
|
+
this.data.propertiesByFile.set(node.fileUri, [node]);
|
|
62
|
+
this.data.allVars.add(node.cssVar);
|
|
63
|
+
}
|
|
64
|
+
// ── Mutation — usages ───────────────────────────────────────────
|
|
65
|
+
/** Add a `var()` usage site. */
|
|
66
|
+
addUsage(node) {
|
|
67
|
+
const byVar = this.data.usages.get(node.cssVar);
|
|
68
|
+
if (byVar)
|
|
69
|
+
byVar.push(node);
|
|
70
|
+
else
|
|
71
|
+
this.data.usages.set(node.cssVar, [node]);
|
|
72
|
+
const byFile = this.data.usagesByFile.get(node.fileUri);
|
|
73
|
+
if (byFile)
|
|
74
|
+
byFile.push(node);
|
|
75
|
+
else
|
|
76
|
+
this.data.usagesByFile.set(node.fileUri, [node]);
|
|
77
|
+
}
|
|
78
|
+
// ── Mutation — import edges ─────────────────────────────────────
|
|
79
|
+
/** Add a single directed import edge (updates both forward and reverse). */
|
|
80
|
+
addImport(importerUri, importedUri) {
|
|
81
|
+
const forward = this.data.imports.get(importerUri);
|
|
82
|
+
if (forward)
|
|
83
|
+
forward.add(importedUri);
|
|
84
|
+
else
|
|
85
|
+
this.data.imports.set(importerUri, new Set([importedUri]));
|
|
86
|
+
const reverse = this.data.importedBy.get(importedUri);
|
|
87
|
+
if (reverse)
|
|
88
|
+
reverse.add(importerUri);
|
|
89
|
+
else
|
|
90
|
+
this.data.importedBy.set(importedUri, new Set([importerUri]));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Replace the full import set for a file, cleaning up stale reverse edges.
|
|
94
|
+
*
|
|
95
|
+
* This is the primary entry-point used by the indexing pipeline when a
|
|
96
|
+
* document's `@import` list changes.
|
|
97
|
+
*/
|
|
98
|
+
setImports(importerUri, nextImports) {
|
|
99
|
+
const previousImports = this.data.imports.get(importerUri) ?? new Set();
|
|
100
|
+
// Remove stale reverse edges
|
|
101
|
+
for (const importedUri of previousImports) {
|
|
102
|
+
if (nextImports.has(importedUri))
|
|
103
|
+
continue;
|
|
104
|
+
const importers = this.data.importedBy.get(importedUri);
|
|
105
|
+
if (!importers)
|
|
106
|
+
continue;
|
|
107
|
+
importers.delete(importerUri);
|
|
108
|
+
if (importers.size === 0)
|
|
109
|
+
this.data.importedBy.delete(importedUri);
|
|
110
|
+
}
|
|
111
|
+
// Set forward edges
|
|
112
|
+
if (nextImports.size === 0) {
|
|
113
|
+
this.data.imports.delete(importerUri);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.data.imports.set(importerUri, nextImports);
|
|
117
|
+
}
|
|
118
|
+
// Add new reverse edges
|
|
119
|
+
for (const importedUri of nextImports) {
|
|
120
|
+
const importers = this.data.importedBy.get(importedUri) ?? new Set();
|
|
121
|
+
importers.add(importerUri);
|
|
122
|
+
this.data.importedBy.set(importedUri, importers);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Remove all import edges originating from *and* pointing to a file.
|
|
127
|
+
*
|
|
128
|
+
* Used during file cleanup / reindex to sever a file from the graph.
|
|
129
|
+
*/
|
|
130
|
+
clearImportEdges(fileUri) {
|
|
131
|
+
// Remove forward edges (fileUri imports → X)
|
|
132
|
+
const importedUris = this.data.imports.get(fileUri);
|
|
133
|
+
if (importedUris) {
|
|
134
|
+
for (const importedUri of importedUris) {
|
|
135
|
+
const importers = this.data.importedBy.get(importedUri);
|
|
136
|
+
if (!importers)
|
|
137
|
+
continue;
|
|
138
|
+
importers.delete(fileUri);
|
|
139
|
+
if (importers.size === 0)
|
|
140
|
+
this.data.importedBy.delete(importedUri);
|
|
141
|
+
}
|
|
142
|
+
this.data.imports.delete(fileUri);
|
|
143
|
+
}
|
|
144
|
+
// Remove reverse edges (X imports → fileUri)
|
|
145
|
+
const importerUris = this.data.importedBy.get(fileUri);
|
|
146
|
+
if (importerUris) {
|
|
147
|
+
for (const importerUri of importerUris) {
|
|
148
|
+
const imports = this.data.imports.get(importerUri);
|
|
149
|
+
if (!imports)
|
|
150
|
+
continue;
|
|
151
|
+
imports.delete(fileUri);
|
|
152
|
+
if (imports.size === 0)
|
|
153
|
+
this.data.imports.delete(importerUri);
|
|
154
|
+
}
|
|
155
|
+
this.data.importedBy.delete(fileUri);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// ── Mutation — artifact markers ─────────────────────────────────
|
|
159
|
+
/** Mark a file URI as originating from artifact declarations. */
|
|
160
|
+
markArtifactFile(fileUri) {
|
|
161
|
+
this.data.artifactFileUris.add(fileUri);
|
|
162
|
+
}
|
|
163
|
+
// ── Mutation — per-file cleanup ─────────────────────────────────
|
|
164
|
+
/**
|
|
165
|
+
* Remove all declarations, properties, and usages for a file.
|
|
166
|
+
*
|
|
167
|
+
* The per-var indices are patched to remove entries belonging to the file
|
|
168
|
+
* and `allVars` is synced (vars with no remaining token/decl/property are
|
|
169
|
+
* removed).
|
|
170
|
+
*/
|
|
171
|
+
clearFile(fileUri) {
|
|
172
|
+
const fileDecls = this.data.declarationsByFile.get(fileUri);
|
|
173
|
+
if (fileDecls) {
|
|
174
|
+
for (const decl of fileDecls) {
|
|
175
|
+
const byVar = this.data.declarations.get(decl.cssVar);
|
|
176
|
+
if (byVar) {
|
|
177
|
+
const filtered = byVar.filter((d) => d.fileUri !== fileUri);
|
|
178
|
+
if (filtered.length > 0)
|
|
179
|
+
this.data.declarations.set(decl.cssVar, filtered);
|
|
180
|
+
else
|
|
181
|
+
this.data.declarations.delete(decl.cssVar);
|
|
182
|
+
}
|
|
183
|
+
this.syncAllVar(decl.cssVar);
|
|
184
|
+
}
|
|
185
|
+
this.data.declarationsByFile.set(fileUri, []);
|
|
186
|
+
}
|
|
187
|
+
const fileProps = this.data.propertiesByFile.get(fileUri);
|
|
188
|
+
if (fileProps) {
|
|
189
|
+
for (const prop of fileProps) {
|
|
190
|
+
const existing = this.data.properties.get(prop.cssVar);
|
|
191
|
+
if (existing?.fileUri === fileUri)
|
|
192
|
+
this.data.properties.delete(prop.cssVar);
|
|
193
|
+
this.syncAllVar(prop.cssVar);
|
|
194
|
+
}
|
|
195
|
+
this.data.propertiesByFile.set(fileUri, []);
|
|
196
|
+
}
|
|
197
|
+
const fileUsages = this.data.usagesByFile.get(fileUri);
|
|
198
|
+
if (fileUsages) {
|
|
199
|
+
for (const usage of fileUsages) {
|
|
200
|
+
const byVar = this.data.usages.get(usage.cssVar);
|
|
201
|
+
if (byVar) {
|
|
202
|
+
const filtered = byVar.filter((u) => u.fileUri !== fileUri);
|
|
203
|
+
if (filtered.length > 0)
|
|
204
|
+
this.data.usages.set(usage.cssVar, filtered);
|
|
205
|
+
else
|
|
206
|
+
this.data.usages.delete(usage.cssVar);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
this.data.usagesByFile.set(fileUri, []);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Purge all non-artifact CSS data from the graph.
|
|
214
|
+
*
|
|
215
|
+
* Walks every file URI in the graph, skips artifact files, and removes
|
|
216
|
+
* all CSS-sourced data (declarations, properties, usages, import edges,
|
|
217
|
+
* file entries). Used by the reindex pipeline before re-scanning.
|
|
218
|
+
*/
|
|
219
|
+
clearCssData() {
|
|
220
|
+
const fileUris = new Set([
|
|
221
|
+
...this.data.files.keys(),
|
|
222
|
+
...this.data.declarationsByFile.keys(),
|
|
223
|
+
...this.data.propertiesByFile.keys(),
|
|
224
|
+
...this.data.usagesByFile.keys(),
|
|
225
|
+
...this.data.imports.keys(),
|
|
226
|
+
...this.data.importedBy.keys(),
|
|
227
|
+
]);
|
|
228
|
+
for (const fileUri of fileUris) {
|
|
229
|
+
if (this.data.artifactFileUris.has(fileUri))
|
|
230
|
+
continue;
|
|
231
|
+
this.clearFile(fileUri);
|
|
232
|
+
this.clearImportEdges(fileUri);
|
|
233
|
+
this.data.files.delete(fileUri);
|
|
234
|
+
this.data.declarationsByFile.delete(fileUri);
|
|
235
|
+
this.data.propertiesByFile.delete(fileUri);
|
|
236
|
+
this.data.usagesByFile.delete(fileUri);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// ── Queries — tokens ────────────────────────────────────────────
|
|
240
|
+
/** Resolve a CSS variable to its TokenNode, or `null` if not found. */
|
|
241
|
+
resolveToken(cssVar) {
|
|
242
|
+
return this.data.tokens.get(cssVar) ?? null;
|
|
243
|
+
}
|
|
244
|
+
/** Check whether a token exists for the given CSS variable. */
|
|
245
|
+
hasToken(cssVar) {
|
|
246
|
+
return this.data.tokens.has(cssVar);
|
|
247
|
+
}
|
|
248
|
+
/** Return the total number of registered tokens. */
|
|
249
|
+
get tokenCount() {
|
|
250
|
+
return this.data.tokens.size;
|
|
251
|
+
}
|
|
252
|
+
/** Iterate over all `[cssVar, TokenNode]` entries. */
|
|
253
|
+
tokenEntries() {
|
|
254
|
+
return this.data.tokens.entries();
|
|
255
|
+
}
|
|
256
|
+
/** Iterate over all registered token nodes. */
|
|
257
|
+
tokenValues() {
|
|
258
|
+
return this.data.tokens.values();
|
|
259
|
+
}
|
|
260
|
+
// ── Queries — files ─────────────────────────────────────────────
|
|
261
|
+
/** Retrieve a file node by URI, or `null`. */
|
|
262
|
+
getFile(fileUri) {
|
|
263
|
+
return this.data.files.get(fileUri) ?? null;
|
|
264
|
+
}
|
|
265
|
+
/** Check whether a file is already indexed. */
|
|
266
|
+
hasFile(fileUri) {
|
|
267
|
+
return this.data.files.has(fileUri);
|
|
268
|
+
}
|
|
269
|
+
/** Return the total number of indexed files. */
|
|
270
|
+
get fileCount() {
|
|
271
|
+
return this.data.files.size;
|
|
272
|
+
}
|
|
273
|
+
// ── Queries — declarations ──────────────────────────────────────
|
|
274
|
+
/** Get all declaration nodes for a CSS variable. */
|
|
275
|
+
getDeclarations(cssVar) {
|
|
276
|
+
return this.data.declarations.get(cssVar) ?? [];
|
|
277
|
+
}
|
|
278
|
+
/** Check whether any declarations exist for a CSS variable. */
|
|
279
|
+
hasDeclarations(cssVar) {
|
|
280
|
+
return this.data.declarations.has(cssVar);
|
|
281
|
+
}
|
|
282
|
+
/** Total count of distinct CSS variables that have declarations. */
|
|
283
|
+
get declarationVarCount() {
|
|
284
|
+
return this.data.declarations.size;
|
|
285
|
+
}
|
|
286
|
+
/** Iterate over all `[cssVar, DeclarationNode[]]` entries. */
|
|
287
|
+
declarationEntries() {
|
|
288
|
+
return this.data.declarations.entries();
|
|
289
|
+
}
|
|
290
|
+
/** Get declarations for a specific file URI. */
|
|
291
|
+
getDeclarationsByFile(fileUri) {
|
|
292
|
+
return this.data.declarationsByFile.get(fileUri) ?? [];
|
|
293
|
+
}
|
|
294
|
+
// ── Queries — properties ────────────────────────────────────────
|
|
295
|
+
/** Get the `@property` registration for a CSS variable, or `null`. */
|
|
296
|
+
getProperty(cssVar) {
|
|
297
|
+
return this.data.properties.get(cssVar) ?? null;
|
|
298
|
+
}
|
|
299
|
+
/** Check whether an `@property` registration exists. */
|
|
300
|
+
hasProperty(cssVar) {
|
|
301
|
+
return this.data.properties.has(cssVar);
|
|
302
|
+
}
|
|
303
|
+
/** Iterate over all registered property nodes. */
|
|
304
|
+
propertyValues() {
|
|
305
|
+
return this.data.properties.values();
|
|
306
|
+
}
|
|
307
|
+
/** Total count of distinct `@property` registrations. */
|
|
308
|
+
get propertyVarCount() {
|
|
309
|
+
return this.data.properties.size;
|
|
310
|
+
}
|
|
311
|
+
/** Get `@property` nodes for a specific file URI. */
|
|
312
|
+
getPropertiesByFile(fileUri) {
|
|
313
|
+
return this.data.propertiesByFile.get(fileUri) ?? [];
|
|
314
|
+
}
|
|
315
|
+
// ── Queries — usages ────────────────────────────────────────────
|
|
316
|
+
/** Get all `var()` usage sites for a CSS variable. */
|
|
317
|
+
getUsages(cssVar) {
|
|
318
|
+
return this.data.usages.get(cssVar) ?? [];
|
|
319
|
+
}
|
|
320
|
+
/** Total count of distinct CSS variables that have usages. */
|
|
321
|
+
get usageVarCount() {
|
|
322
|
+
return this.data.usages.size;
|
|
323
|
+
}
|
|
324
|
+
/** Get usages for a specific file URI. */
|
|
325
|
+
getUsagesByFile(fileUri) {
|
|
326
|
+
return this.data.usagesByFile.get(fileUri) ?? [];
|
|
327
|
+
}
|
|
328
|
+
// ── Queries — imports ───────────────────────────────────────────
|
|
329
|
+
/** Get the set of URIs imported by a file (forward edges). */
|
|
330
|
+
getImports(fileUri) {
|
|
331
|
+
return this.data.imports.get(fileUri);
|
|
332
|
+
}
|
|
333
|
+
/** Get the set of URIs that import a file (reverse edges). */
|
|
334
|
+
getImportedBy(fileUri) {
|
|
335
|
+
return this.data.importedBy.get(fileUri);
|
|
336
|
+
}
|
|
337
|
+
/** Iterate all `[importerUri, Set<importedUri>]` forward edge entries. */
|
|
338
|
+
importEntries() {
|
|
339
|
+
return this.data.imports.entries();
|
|
340
|
+
}
|
|
341
|
+
// ── Queries — allVars ───────────────────────────────────────────
|
|
342
|
+
/** Check whether any token, declaration, or property exists for a var. */
|
|
343
|
+
hasVar(cssVar) {
|
|
344
|
+
return this.data.allVars.has(cssVar);
|
|
345
|
+
}
|
|
346
|
+
/** Total number of known CSS variable names. */
|
|
347
|
+
get varCount() {
|
|
348
|
+
return this.data.allVars.size;
|
|
349
|
+
}
|
|
350
|
+
// ── Queries — artifact markers ──────────────────────────────────
|
|
351
|
+
/** Check whether a file URI was injected by the artifact loader. */
|
|
352
|
+
isArtifactFile(fileUri) {
|
|
353
|
+
return this.data.artifactFileUris.has(fileUri);
|
|
354
|
+
}
|
|
355
|
+
/** Get the selector context from a declaration node. */
|
|
356
|
+
selectorContextFor(decl) {
|
|
357
|
+
return decl.selector;
|
|
358
|
+
}
|
|
359
|
+
// ── Private ─────────────────────────────────────────────────────
|
|
360
|
+
syncAllVar(cssVar) {
|
|
361
|
+
if (this.data.tokens.has(cssVar))
|
|
362
|
+
return;
|
|
363
|
+
if (this.data.declarations.has(cssVar))
|
|
364
|
+
return;
|
|
365
|
+
if (this.data.properties.has(cssVar))
|
|
366
|
+
return;
|
|
367
|
+
this.data.allVars.delete(cssVar);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=TokenGraph.js.map
|