nudge-ui 0.2.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 +66 -0
- package/bin/nudge-ui.mjs +7 -0
- package/dist/LICENSE +21 -0
- package/dist/client.mjs +261 -0
- package/dist/compiler/ast.d.ts +18 -0
- package/dist/compiler/ast.js +75 -0
- package/dist/compiler/componentContractTypes.d.ts +19 -0
- package/dist/compiler/componentContractTypes.js +1 -0
- package/dist/compiler/componentContracts.d.ts +2 -0
- package/dist/compiler/componentContracts.js +260 -0
- package/dist/compiler/componentInstrumentation.d.ts +32 -0
- package/dist/compiler/componentInstrumentation.js +140 -0
- package/dist/compiler/componentPolicyResolution.d.ts +71 -0
- package/dist/compiler/componentPolicyResolution.js +388 -0
- package/dist/compiler/index.d.ts +9 -0
- package/dist/compiler/index.js +9 -0
- package/dist/compiler/packageComponentContracts.d.ts +32 -0
- package/dist/compiler/packageComponentContracts.js +308 -0
- package/dist/compiler/reactComponentProtocols.d.ts +145 -0
- package/dist/compiler/reactComponentProtocols.js +47 -0
- package/dist/compiler/reactIdentity.d.ts +15 -0
- package/dist/compiler/reactIdentity.js +339 -0
- package/dist/compiler/sourcePaths.d.ts +12 -0
- package/dist/compiler/sourcePaths.js +27 -0
- package/dist/css/dialects/index.d.ts +62 -0
- package/dist/css/dialects/index.js +103 -0
- package/dist/css/dialects/tailwind.d.ts +46 -0
- package/dist/css/dialects/tailwind.js +119 -0
- package/dist/css/dialects/vanillaExtract.d.ts +20 -0
- package/dist/css/dialects/vanillaExtract.js +32 -0
- package/dist/css/index.d.ts +10 -0
- package/dist/css/index.js +10 -0
- package/dist/css/model/index.d.ts +190 -0
- package/dist/css/model/index.js +10 -0
- package/dist/css/token-inventory/index.d.ts +26 -0
- package/dist/css/token-inventory/index.js +24 -0
- package/dist/css/token-inventory/inventory.d.ts +8 -0
- package/dist/css/token-inventory/inventory.js +421 -0
- package/dist/css/token-inventory/parseStylesheet.d.ts +16 -0
- package/dist/css/token-inventory/parseStylesheet.js +155 -0
- package/dist/css/token-inventory/policy.d.ts +47 -0
- package/dist/css/token-inventory/policy.js +50 -0
- package/dist/css/token-inventory/types.d.ts +97 -0
- package/dist/css/token-inventory/types.js +1 -0
- package/dist/css/value-semantics/borderSemantics.d.ts +28 -0
- package/dist/css/value-semantics/borderSemantics.js +91 -0
- package/dist/css/value-semantics/boxSemantics.d.ts +37 -0
- package/dist/css/value-semantics/boxSemantics.js +71 -0
- package/dist/css/value-semantics/colorSemantics.d.ts +99 -0
- package/dist/css/value-semantics/colorSemantics.js +526 -0
- package/dist/css/value-semantics/cssSyntax.d.ts +19 -0
- package/dist/css/value-semantics/cssSyntax.js +111 -0
- package/dist/css/value-semantics/fontSemantics.d.ts +35 -0
- package/dist/css/value-semantics/fontSemantics.js +131 -0
- package/dist/css/value-semantics/index.d.ts +20 -0
- package/dist/css/value-semantics/index.js +15 -0
- package/dist/css/value-semantics/propertyPolicy.d.ts +118 -0
- package/dist/css/value-semantics/propertyPolicy.js +356 -0
- package/dist/css/value-semantics/stringMaps.d.ts +2 -0
- package/dist/css/value-semantics/stringMaps.js +1 -0
- package/dist/css/value-semantics/structuredValues.d.ts +64 -0
- package/dist/css/value-semantics/structuredValues.js +250 -0
- package/dist/css/value-semantics/tokenInterpretation.d.ts +90 -0
- package/dist/css/value-semantics/tokenInterpretation.js +193 -0
- package/dist/css/virtual-design-tokens.d.ts +17 -0
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +12 -0
- package/dist/hosts/astro/astroRuntimeConfig.js +26 -0
- package/dist/hosts/astro/clientAsset.d.ts +12 -0
- package/dist/hosts/astro/clientAsset.js +51 -0
- package/dist/hosts/astro/clientTransport.d.ts +3 -0
- package/dist/hosts/astro/clientTransport.js +57 -0
- package/dist/hosts/astro/index.d.ts +3 -0
- package/dist/hosts/astro/index.js +2 -0
- package/dist/hosts/astro/integration.d.ts +35 -0
- package/dist/hosts/astro/integration.js +96 -0
- package/dist/hosts/astro/middleware.d.ts +13 -0
- package/dist/hosts/astro/middleware.js +22 -0
- package/dist/hosts/astro/projectContext.d.ts +11 -0
- package/dist/hosts/astro/projectContext.js +34 -0
- package/dist/hosts/astro/responseInstrumentation.d.ts +41 -0
- package/dist/hosts/astro/responseInstrumentation.js +80 -0
- package/dist/hosts/next/index.d.ts +4 -0
- package/dist/hosts/next/index.js +7 -0
- package/dist/hosts/next/loader.d.ts +66 -0
- package/dist/hosts/next/loader.js +346 -0
- package/dist/hosts/next/loaders/identity-loader.cjs +228257 -0
- package/dist/hosts/next/loaders/loader-plugin.cjs +228257 -0
- package/dist/hosts/next/manifest.d.ts +38 -0
- package/dist/hosts/next/manifest.js +30 -0
- package/dist/hosts/next/mount.d.ts +12 -0
- package/dist/hosts/next/mount.js +23 -0
- package/dist/hosts/next/repositoryScope.d.ts +20 -0
- package/dist/hosts/next/repositoryScope.js +33 -0
- package/dist/hosts/next/sidecar.d.ts +27 -0
- package/dist/hosts/next/sidecar.js +526 -0
- package/dist/hosts/next/wrapper.d.ts +67 -0
- package/dist/hosts/next/wrapper.js +310 -0
- package/dist/hosts/static/cli.d.ts +12 -0
- package/dist/hosts/static/cli.js +77 -0
- package/dist/hosts/static/html/bootstrap.d.ts +27 -0
- package/dist/hosts/static/html/bootstrap.js +93 -0
- package/dist/hosts/static/index.d.ts +4 -0
- package/dist/hosts/static/index.js +4 -0
- package/dist/hosts/static/manifest.d.ts +18 -0
- package/dist/hosts/static/manifest.js +51 -0
- package/dist/hosts/static/server.d.ts +72 -0
- package/dist/hosts/static/server.js +554 -0
- package/dist/hosts/vite/index.d.ts +20 -0
- package/dist/hosts/vite/index.js +48 -0
- package/dist/hosts/vite/react.d.ts +67 -0
- package/dist/hosts/vite/react.js +231 -0
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +28 -0
- package/dist/hosts/vite/tokens/activeStylesheets.js +70 -0
- package/dist/hosts/vite/tokens/fileMap.d.ts +2 -0
- package/dist/hosts/vite/tokens/fileMap.js +1 -0
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +46 -0
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +104 -0
- package/dist/hosts/vite/virtual/design-tokens.d.ts +9 -0
- package/dist/hosts/vite/virtual/design-tokens.js +7 -0
- package/dist/hosts/vite/virtual-design-tokens.d.ts +1 -0
- package/dist/hosts/vite/vite.d.ts +62 -0
- package/dist/hosts/vite/vite.js +854 -0
- package/dist/html/dom.d.ts +13 -0
- package/dist/html/dom.js +46 -0
- package/dist/html/identity.d.ts +40 -0
- package/dist/html/identity.js +196 -0
- package/dist/html/insertions.d.ts +26 -0
- package/dist/html/insertions.js +59 -0
- package/dist/inspector/agent/McpConnectionDialog.d.ts +26 -0
- package/dist/inspector/agent/McpConnectionDialog.js +135 -0
- package/dist/inspector/agent/client.d.ts +98 -0
- package/dist/inspector/agent/client.js +728 -0
- package/dist/inspector/agent/connectionStatus.d.ts +13 -0
- package/dist/inspector/agent/connectionStatus.js +35 -0
- package/dist/inspector/agent/httpTransport.d.ts +21 -0
- package/dist/inspector/agent/httpTransport.js +347 -0
- package/dist/inspector/agent/protocol.d.ts +95 -0
- package/dist/inspector/agent/protocol.js +9 -0
- package/dist/inspector/agent/verification.d.ts +39 -0
- package/dist/inspector/agent/verification.js +207 -0
- package/dist/inspector/canvas/CanvasCard.d.ts +10 -0
- package/dist/inspector/canvas/CanvasCard.js +275 -0
- package/dist/inspector/canvas/CanvasElementOverlay.d.ts +2 -0
- package/dist/inspector/canvas/CanvasElementOverlay.js +301 -0
- package/dist/inspector/canvas/CanvasWorkspace.d.ts +2 -0
- package/dist/inspector/canvas/CanvasWorkspace.js +301 -0
- package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +6 -0
- package/dist/inspector/canvas/LockedWorkspaceNotice.js +17 -0
- package/dist/inspector/canvas/StaleChangeIndicator.d.ts +7 -0
- package/dist/inspector/canvas/StaleChangeIndicator.js +43 -0
- package/dist/inspector/canvas/agentPresentation.d.ts +87 -0
- package/dist/inspector/canvas/agentPresentation.js +421 -0
- package/dist/inspector/canvas/canvasGestures.d.ts +12 -0
- package/dist/inspector/canvas/canvasGestures.js +21 -0
- package/dist/inspector/canvas/canvasStore.d.ts +108 -0
- package/dist/inspector/canvas/canvasStore.js +448 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +231 -0
- package/dist/inspector/canvas/frameProtocol.js +165 -0
- package/dist/inspector/canvas/linkEligibility.d.ts +8 -0
- package/dist/inspector/canvas/linkEligibility.js +68 -0
- package/dist/inspector/canvas/measurementProjection.d.ts +8 -0
- package/dist/inspector/canvas/measurementProjection.js +16 -0
- package/dist/inspector/canvas/normalizeUrl.d.ts +7 -0
- package/dist/inspector/canvas/normalizeUrl.js +27 -0
- package/dist/inspector/canvas/projection.d.ts +41 -0
- package/dist/inspector/canvas/projection.js +232 -0
- package/dist/inspector/canvas/rendererBootstrap.d.ts +4 -0
- package/dist/inspector/canvas/rendererBootstrap.js +410 -0
- package/dist/inspector/canvas/rendererCidIndex.d.ts +11 -0
- package/dist/inspector/canvas/rendererCidIndex.js +21 -0
- package/dist/inspector/canvas/rendererElementSelector.d.ts +2 -0
- package/dist/inspector/canvas/rendererElementSelector.js +378 -0
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +2 -0
- package/dist/inspector/canvas/rendererSelectionProxy.js +61 -0
- package/dist/inspector/canvas/rendererStylesheet.d.ts +16 -0
- package/dist/inspector/canvas/rendererStylesheet.js +221 -0
- package/dist/inspector/canvas/resizeHandleScale.d.ts +13 -0
- package/dist/inspector/canvas/resizeHandleScale.js +20 -0
- package/dist/inspector/canvas/roleDetection.d.ts +5 -0
- package/dist/inspector/canvas/roleDetection.js +21 -0
- package/dist/inspector/canvas/sessionStore.d.ts +71 -0
- package/dist/inspector/canvas/sessionStore.js +453 -0
- package/dist/inspector/canvas/staleChangeDetector.d.ts +11 -0
- package/dist/inspector/canvas/staleChangeDetector.js +217 -0
- package/dist/inspector/canvas/toolbarScale.d.ts +7 -0
- package/dist/inspector/canvas/toolbarScale.js +11 -0
- package/dist/inspector/canvas/workspaceLease.d.ts +26 -0
- package/dist/inspector/canvas/workspaceLease.js +214 -0
- package/dist/inspector/changes/changesLog.d.ts +46 -0
- package/dist/inspector/changes/changesLog.js +209 -0
- package/dist/inspector/changes/codecs.d.ts +98 -0
- package/dist/inspector/changes/codecs.js +389 -0
- package/dist/inspector/changes/editModel.d.ts +74 -0
- package/dist/inspector/changes/editModel.js +120 -0
- package/dist/inspector/changes/managedStyleProjection.d.ts +6 -0
- package/dist/inspector/changes/managedStyleProjection.js +109 -0
- package/dist/inspector/changes/model.d.ts +13 -0
- package/dist/inspector/changes/model.js +163 -0
- package/dist/inspector/changes/presentation.d.ts +14 -0
- package/dist/inspector/changes/presentation.js +81 -0
- package/dist/inspector/changes/previewDiagnostics.d.ts +39 -0
- package/dist/inspector/changes/previewDiagnostics.js +172 -0
- package/dist/inspector/changes/structuralTypes.d.ts +35 -0
- package/dist/inspector/changes/structuralTypes.js +1 -0
- package/dist/inspector/changes/types.d.ts +76 -0
- package/dist/inspector/changes/types.js +16 -0
- package/dist/inspector/changes/workspaceChanges.d.ts +43 -0
- package/dist/inspector/changes/workspaceChanges.js +239 -0
- package/dist/inspector/clientManifest.d.ts +24 -0
- package/dist/inspector/clientManifest.js +69 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +5 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +44 -0
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +11 -0
- package/dist/inspector/componentSemantics/adapterRegistry.js +75 -0
- package/dist/inspector/componentSemantics/boundaries.d.ts +2 -0
- package/dist/inspector/componentSemantics/boundaries.js +10 -0
- package/dist/inspector/componentSemantics/changeAction.d.ts +3 -0
- package/dist/inspector/componentSemantics/changeAction.js +6 -0
- package/dist/inspector/componentSemantics/changeModel.d.ts +8 -0
- package/dist/inspector/componentSemantics/changeModel.js +60 -0
- package/dist/inspector/componentSemantics/index.d.ts +4 -0
- package/dist/inspector/componentSemantics/index.js +2 -0
- package/dist/inspector/componentSemantics/reactRuntime.d.ts +10 -0
- package/dist/inspector/componentSemantics/reactRuntime.js +186 -0
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +25 -0
- package/dist/inspector/componentSemantics/runtimeBridge.js +161 -0
- package/dist/inspector/componentSemantics/runtimeTypes.d.ts +2 -0
- package/dist/inspector/componentSemantics/runtimeTypes.js +1 -0
- package/dist/inspector/componentSemantics/textBinding.d.ts +69 -0
- package/dist/inspector/componentSemantics/textBinding.js +514 -0
- package/dist/inspector/componentSemantics/types.d.ts +96 -0
- package/dist/inspector/componentSemantics/types.js +5 -0
- package/dist/inspector/conformance/borderCases.d.ts +7 -0
- package/dist/inspector/conformance/borderCases.js +428 -0
- package/dist/inspector/conformance/colorCases.d.ts +8 -0
- package/dist/inspector/conformance/colorCases.js +470 -0
- package/dist/inspector/conformance/fixture.d.ts +68 -0
- package/dist/inspector/conformance/fixture.js +153 -0
- package/dist/inspector/conformance/projection.d.ts +2 -0
- package/dist/inspector/conformance/projection.js +3 -0
- package/dist/inspector/conformance/spacingCases.d.ts +6 -0
- package/dist/inspector/conformance/spacingCases.js +417 -0
- package/dist/inspector/conformance/typographyCases.d.ts +7 -0
- package/dist/inspector/conformance/typographyCases.js +174 -0
- package/dist/inspector/editScope.d.ts +4 -0
- package/dist/inspector/editScope.js +5 -0
- package/dist/inspector/index.d.ts +20 -0
- package/dist/inspector/index.js +236 -0
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +74 -0
- package/dist/inspector/inline-text/inlineTextEditor.js +1207 -0
- package/dist/inspector/inline-text/inlineTextLifecycle.d.ts +2 -0
- package/dist/inspector/inline-text/inlineTextLifecycle.js +17 -0
- package/dist/inspector/inline-text/textChangeBoundary.d.ts +6 -0
- package/dist/inspector/inline-text/textChangeBoundary.js +1 -0
- package/dist/inspector/inspection/bridge.d.ts +72 -0
- package/dist/inspector/inspection/bridge.js +134 -0
- package/dist/inspector/inspection/browserCssInspection.d.ts +74 -0
- package/dist/inspector/inspection/browserCssInspection.js +317 -0
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +12 -0
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +66 -0
- package/dist/inspector/inspection/selectionProperty.d.ts +32 -0
- package/dist/inspector/inspection/selectionProperty.js +33 -0
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +20 -0
- package/dist/inspector/inspection/useBrowserCssInspection.js +159 -0
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +17 -0
- package/dist/inspector/overlay/DropGuideOverlay.js +17 -0
- package/dist/inspector/overlay/InspectorOverlay.d.ts +5 -0
- package/dist/inspector/overlay/InspectorOverlay.js +328 -0
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +19 -0
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +40 -0
- package/dist/inspector/overlay/clickPolicy.d.ts +7 -0
- package/dist/inspector/overlay/clickPolicy.js +13 -0
- package/dist/inspector/overlay/dropGuide.d.ts +22 -0
- package/dist/inspector/overlay/dropGuide.js +48 -0
- package/dist/inspector/overlay/elementSelector.d.ts +1 -0
- package/dist/inspector/overlay/elementSelector.js +100 -0
- package/dist/inspector/overlay/frameThrottle.d.ts +10 -0
- package/dist/inspector/overlay/frameThrottle.js +38 -0
- package/dist/inspector/overlay/interactionStyles.d.ts +3 -0
- package/dist/inspector/overlay/interactionStyles.js +70 -0
- package/dist/inspector/overlay/measurementGeometry.d.ts +25 -0
- package/dist/inspector/overlay/measurementGeometry.js +104 -0
- package/dist/inspector/overlay/overlayGeometry.d.ts +40 -0
- package/dist/inspector/overlay/overlayGeometry.js +59 -0
- package/dist/inspector/overlay/selectedGeometry.d.ts +7 -0
- package/dist/inspector/overlay/selectedGeometry.js +51 -0
- package/dist/inspector/overlay/structuralGestures.d.ts +28 -0
- package/dist/inspector/overlay/structuralGestures.js +180 -0
- package/dist/inspector/projection/cssEscapes.d.ts +3 -0
- package/dist/inspector/projection/cssEscapes.js +20 -0
- package/dist/inspector/projection/managedStylesheet.d.ts +33 -0
- package/dist/inspector/projection/managedStylesheet.js +240 -0
- package/dist/inspector/projection/renderedInstance.d.ts +56 -0
- package/dist/inspector/projection/renderedInstance.js +306 -0
- package/dist/inspector/projection/structuralProjection.d.ts +93 -0
- package/dist/inspector/projection/structuralProjection.js +560 -0
- package/dist/inspector/projection/structuralProjectionBoundary.d.ts +5 -0
- package/dist/inspector/projection/structuralProjectionBoundary.js +65 -0
- package/dist/inspector/projection/textProjection.d.ts +53 -0
- package/dist/inspector/projection/textProjection.js +705 -0
- package/dist/inspector/projection/workspaceProjection.d.ts +43 -0
- package/dist/inspector/projection/workspaceProjection.js +58 -0
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +15 -0
- package/dist/inspector/prompt/PromptSettingsDialog.js +17 -0
- package/dist/inspector/prompt/clipboardHandoff.d.ts +34 -0
- package/dist/inspector/prompt/clipboardHandoff.js +212 -0
- package/dist/inspector/prompt/copyToClipboard.d.ts +1 -0
- package/dist/inspector/prompt/copyToClipboard.js +34 -0
- package/dist/inspector/prompt/detectFramework.d.ts +6 -0
- package/dist/inspector/prompt/detectFramework.js +4 -0
- package/dist/inspector/prompt/generatePrompt.d.ts +7 -0
- package/dist/inspector/prompt/generatePrompt.js +391 -0
- package/dist/inspector/prompt/promptSettings.d.ts +8 -0
- package/dist/inspector/prompt/promptSettings.js +28 -0
- package/dist/inspector/runtime/devFlag.d.ts +28 -0
- package/dist/inspector/runtime/devFlag.js +50 -0
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +19 -0
- package/dist/inspector/runtime/documentStylesheetOrder.js +89 -0
- package/dist/inspector/runtime/domRealm.d.ts +4 -0
- package/dist/inspector/runtime/domRealm.js +11 -0
- package/dist/inspector/runtime/runtimeConfig.d.ts +119 -0
- package/dist/inspector/runtime/runtimeConfig.js +276 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +32 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +149 -0
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +10 -0
- package/dist/inspector/runtime/useRuntimeConfig.js +13 -0
- package/dist/inspector/selection/editScope.d.ts +32 -0
- package/dist/inspector/selection/editScope.js +140 -0
- package/dist/inspector/selection/editTarget.d.ts +8 -0
- package/dist/inspector/selection/editTarget.js +11 -0
- package/dist/inspector/selection/hierarchy.d.ts +7 -0
- package/dist/inspector/selection/hierarchy.js +42 -0
- package/dist/inspector/selection/resolveSelection.d.ts +10 -0
- package/dist/inspector/selection/resolveSelection.js +60 -0
- package/dist/inspector/selection/selectionStore.d.ts +41 -0
- package/dist/inspector/selection/selectionStore.js +262 -0
- package/dist/inspector/selection/selectionTarget.d.ts +5 -0
- package/dist/inspector/selection/selectionTarget.js +50 -0
- package/dist/inspector/selection/sourceSite.d.ts +2 -0
- package/dist/inspector/selection/sourceSite.js +12 -0
- package/dist/inspector/selection/styleSelection.d.ts +22 -0
- package/dist/inspector/selection/styleSelection.js +104 -0
- package/dist/inspector/session/index.d.ts +3 -0
- package/dist/inspector/session/index.js +2 -0
- package/dist/inspector/session/lifecycle.d.ts +22 -0
- package/dist/inspector/session/lifecycle.js +63 -0
- package/dist/inspector/session/sessionContext.d.ts +21 -0
- package/dist/inspector/session/sessionContext.js +28 -0
- package/dist/inspector/session/sessionFactory.d.ts +29 -0
- package/dist/inspector/session/sessionFactory.js +73 -0
- package/dist/inspector/settings/SettingsDialog.d.ts +12 -0
- package/dist/inspector/settings/SettingsDialog.js +46 -0
- package/dist/inspector/shell/AppShell.d.ts +2 -0
- package/dist/inspector/shell/AppShell.js +9 -0
- package/dist/inspector/shell/ChangesLog.d.ts +6 -0
- package/dist/inspector/shell/ChangesLog.js +92 -0
- package/dist/inspector/shell/CopyPromptButton.d.ts +9 -0
- package/dist/inspector/shell/CopyPromptButton.js +159 -0
- package/dist/inspector/shell/DomNavigation.d.ts +8 -0
- package/dist/inspector/shell/DomNavigation.js +30 -0
- package/dist/inspector/shell/EmptyState.d.ts +2 -0
- package/dist/inspector/shell/EmptyState.js +15 -0
- package/dist/inspector/shell/InspectorShell.d.ts +11 -0
- package/dist/inspector/shell/InspectorShell.js +268 -0
- package/dist/inspector/shell/openStore.d.ts +6 -0
- package/dist/inspector/shell/openStore.js +29 -0
- package/dist/inspector/shell/panelLayout.d.ts +2 -0
- package/dist/inspector/shell/panelLayout.js +29 -0
- package/dist/inspector/shell/shortcuts.d.ts +3 -0
- package/dist/inspector/shell/shortcuts.js +25 -0
- package/dist/inspector/shell/stateValue.d.ts +3 -0
- package/dist/inspector/shell/stateValue.js +34 -0
- package/dist/inspector/shell/styleState.d.ts +7 -0
- package/dist/inspector/shell/styleState.js +13 -0
- package/dist/inspector/spacing/projection.d.ts +43 -0
- package/dist/inspector/spacing/projection.js +136 -0
- package/dist/inspector/styleEditors/AppearanceSection.d.ts +13 -0
- package/dist/inspector/styleEditors/AppearanceSection.js +6 -0
- package/dist/inspector/styleEditors/AspectRatioField.d.ts +17 -0
- package/dist/inspector/styleEditors/AspectRatioField.js +10 -0
- package/dist/inspector/styleEditors/BorderEditor.d.ts +13 -0
- package/dist/inspector/styleEditors/BorderEditor.js +295 -0
- package/dist/inspector/styleEditors/BorderRadiusEditor.d.ts +14 -0
- package/dist/inspector/styleEditors/BorderRadiusEditor.js +108 -0
- package/dist/inspector/styleEditors/BoxShadowEditor.d.ts +13 -0
- package/dist/inspector/styleEditors/BoxShadowEditor.js +13 -0
- package/dist/inspector/styleEditors/ColorPicker.d.ts +15 -0
- package/dist/inspector/styleEditors/ColorPicker.js +73 -0
- package/dist/inspector/styleEditors/GapField.d.ts +17 -0
- package/dist/inspector/styleEditors/GapField.js +12 -0
- package/dist/inspector/styleEditors/GridChildSection.d.ts +14 -0
- package/dist/inspector/styleEditors/GridChildSection.js +91 -0
- package/dist/inspector/styleEditors/GridPicker.d.ts +13 -0
- package/dist/inspector/styleEditors/GridPicker.js +179 -0
- package/dist/inspector/styleEditors/GridSection.d.ts +17 -0
- package/dist/inspector/styleEditors/GridSection.js +27 -0
- package/dist/inspector/styleEditors/GridValueField.d.ts +17 -0
- package/dist/inspector/styleEditors/GridValueField.js +70 -0
- package/dist/inspector/styleEditors/InsetSection.d.ts +15 -0
- package/dist/inspector/styleEditors/InsetSection.js +15 -0
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +6 -0
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +6 -0
- package/dist/inspector/styleEditors/LayoutComboField.d.ts +18 -0
- package/dist/inspector/styleEditors/LayoutComboField.js +138 -0
- package/dist/inspector/styleEditors/LayoutDropdown.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutDropdown.js +34 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +13 -0
- package/dist/inspector/styleEditors/LayoutSection.js +342 -0
- package/dist/inspector/styleEditors/OpacityEditor.d.ts +13 -0
- package/dist/inspector/styleEditors/OpacityEditor.js +34 -0
- package/dist/inspector/styleEditors/PositionInsets.d.ts +15 -0
- package/dist/inspector/styleEditors/PositionInsets.js +12 -0
- package/dist/inspector/styleEditors/SpacingBox.d.ts +29 -0
- package/dist/inspector/styleEditors/SpacingBox.js +189 -0
- package/dist/inspector/styleEditors/Typography.d.ts +13 -0
- package/dist/inspector/styleEditors/Typography.js +137 -0
- package/dist/inspector/styleEditors/completeCssValue.d.ts +8 -0
- package/dist/inspector/styleEditors/completeCssValue.js +34 -0
- package/dist/inspector/styleEditors/gridChildModel.d.ts +74 -0
- package/dist/inspector/styleEditors/gridChildModel.js +138 -0
- package/dist/inspector/styleEditors/layoutValue.d.ts +24 -0
- package/dist/inspector/styleEditors/layoutValue.js +103 -0
- package/dist/inspector/styleEditors/nudgeValue.d.ts +8 -0
- package/dist/inspector/styleEditors/nudgeValue.js +71 -0
- package/dist/inspector/styleEditors/rowLookup.d.ts +11 -0
- package/dist/inspector/styleEditors/rowLookup.js +13 -0
- package/dist/inspector/styleEditors/stringRecord.d.ts +4 -0
- package/dist/inspector/styleEditors/stringRecord.js +1 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +20 -0
- package/dist/inspector/styleEditors/valuePolicy.js +82 -0
- package/dist/inspector/testing.d.ts +10 -0
- package/dist/inspector/testing.js +9 -0
- package/dist/inspector/tokens/TokenChip.d.ts +24 -0
- package/dist/inspector/tokens/TokenChip.js +23 -0
- package/dist/inspector/tokens/TokenDropdown.d.ts +13 -0
- package/dist/inspector/tokens/TokenDropdown.js +59 -0
- package/dist/inspector/tokens/TokenField.d.ts +68 -0
- package/dist/inspector/tokens/TokenField.js +485 -0
- package/dist/inspector/tokens/TokenLabel.d.ts +7 -0
- package/dist/inspector/tokens/TokenLabel.js +23 -0
- package/dist/inspector/tokens/TokensPanel.d.ts +5 -0
- package/dist/inspector/tokens/TokensPanel.js +47 -0
- package/dist/inspector/tokens/catalog.d.ts +51 -0
- package/dist/inspector/tokens/catalog.js +184 -0
- package/dist/inspector/tokens/editActions.d.ts +35 -0
- package/dist/inspector/tokens/editActions.js +164 -0
- package/dist/inspector/tokens/resolution/cascade.d.ts +14 -0
- package/dist/inspector/tokens/resolution/cascade.js +31 -0
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +43 -0
- package/dist/inspector/tokens/resolution/cssomCollector.js +528 -0
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +12 -0
- package/dist/inspector/tokens/resolution/selectorSemantics.js +106 -0
- package/dist/inspector/tokens/resolution.d.ts +56 -0
- package/dist/inspector/tokens/resolution.js +1401 -0
- package/dist/inspector/tokens/tokenEdits.d.ts +3 -0
- package/dist/inspector/tokens/tokenEdits.js +22 -0
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +6 -0
- package/dist/inspector/tokens/valueSemanticsAdapter.js +68 -0
- package/dist/inspector/ui/AtRuleContext.d.ts +18 -0
- package/dist/inspector/ui/AtRuleContext.js +54 -0
- package/dist/inspector/ui/Button.d.ts +9 -0
- package/dist/inspector/ui/Button.js +4 -0
- package/dist/inspector/ui/ColorSwatch.d.ts +7 -0
- package/dist/inspector/ui/ColorSwatch.js +6 -0
- package/dist/inspector/ui/ControlSurface.d.ts +14 -0
- package/dist/inspector/ui/ControlSurface.js +10 -0
- package/dist/inspector/ui/FieldRow.d.ts +14 -0
- package/dist/inspector/ui/FieldRow.js +15 -0
- package/dist/inspector/ui/IconButton.d.ts +14 -0
- package/dist/inspector/ui/IconButton.js +5 -0
- package/dist/inspector/ui/InspectorPopover.d.ts +17 -0
- package/dist/inspector/ui/InspectorPopover.js +13 -0
- package/dist/inspector/ui/PopoverListbox.d.ts +37 -0
- package/dist/inspector/ui/PopoverListbox.js +21 -0
- package/dist/inspector/ui/SegmentedControl.d.ts +24 -0
- package/dist/inspector/ui/SegmentedControl.js +16 -0
- package/dist/inspector/ui/Select.d.ts +25 -0
- package/dist/inspector/ui/Select.js +56 -0
- package/dist/inspector/ui/SideValuesField.d.ts +44 -0
- package/dist/inspector/ui/SideValuesField.js +76 -0
- package/dist/inspector/ui/StatusCallout.d.ts +9 -0
- package/dist/inspector/ui/StatusCallout.js +4 -0
- package/dist/inspector/ui/TextInput.d.ts +12 -0
- package/dist/inspector/ui/TextInput.js +5 -0
- package/dist/inspector/ui/ToggleButton.d.ts +11 -0
- package/dist/inspector/ui/ToggleButton.js +6 -0
- package/dist/inspector/ui/assets/grid.svg +14 -0
- package/dist/inspector/ui/css.d.ts +9 -0
- package/dist/inspector/ui/labels.d.ts +1 -0
- package/dist/inspector/ui/labels.js +7 -0
- package/dist/inspector/ui/styles.d.ts +1 -0
- package/dist/inspector/ui/styles.js +68 -0
- package/dist/inspector/virtual-modules.d.ts +7 -0
- package/dist/inspector/vite-env.d.ts +10 -0
- package/dist/internal/agent-protocol.d.ts +232 -0
- package/dist/internal/agent-protocol.js +237 -0
- package/dist/nudge-ui.mjs +15722 -0
- package/dist/project/files.d.ts +19 -0
- package/dist/project/files.js +226 -0
- package/dist/project/identity.d.ts +6 -0
- package/dist/project/identity.js +19 -0
- package/dist/project/pathPolicy.d.ts +8 -0
- package/dist/project/pathPolicy.js +12 -0
- package/dist/project/tokens.d.ts +36 -0
- package/dist/project/tokens.js +223 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.js +8 -0
- package/dist/transport/routes.d.ts +13 -0
- package/dist/transport/routes.js +16 -0
- package/package.json +137 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { childNodes, identifier, isNode, jsxMemberName, parseModule, } from "./ast.js";
|
|
2
|
+
import { stripModuleExtension } from "./sourcePaths.js";
|
|
3
|
+
/** Merge a host's protocol additions over a shared compatibility catalog. */
|
|
4
|
+
export function mergeComponentModuleProtocols(defaults, overrides) {
|
|
5
|
+
if (!overrides)
|
|
6
|
+
return defaults;
|
|
7
|
+
const merged = { ...defaults };
|
|
8
|
+
for (const [source, override] of Object.entries(overrides)) {
|
|
9
|
+
if (!override)
|
|
10
|
+
continue;
|
|
11
|
+
const fallback = defaults[source];
|
|
12
|
+
merged[source] = {
|
|
13
|
+
...fallback,
|
|
14
|
+
...override,
|
|
15
|
+
exports: {
|
|
16
|
+
...fallback?.exports,
|
|
17
|
+
...override.exports,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return merged;
|
|
22
|
+
}
|
|
23
|
+
/** A resolution failure that carries only the reason a host reports. */
|
|
24
|
+
function unresolved(code) {
|
|
25
|
+
return { resolved: false, code };
|
|
26
|
+
}
|
|
27
|
+
const MAX_REEXPORT_DEPTH = 24;
|
|
28
|
+
/**
|
|
29
|
+
* Analyses are a pure function of module source, so a content-addressed cache
|
|
30
|
+
* is correct across HMR without host-specific invalidation: an edited file
|
|
31
|
+
* simply misses and is re-analysed, while every unchanged re-export target
|
|
32
|
+
* skips its parse. Without this, policy resolution reparses every reachable
|
|
33
|
+
* module on every transform.
|
|
34
|
+
*/
|
|
35
|
+
const ANALYSIS_CACHE_LIMIT = 128;
|
|
36
|
+
const analysisCache = new Map();
|
|
37
|
+
function analyseModuleSource(code) {
|
|
38
|
+
const cached = analysisCache.get(code);
|
|
39
|
+
if (cached !== undefined)
|
|
40
|
+
return cached;
|
|
41
|
+
const ast = parseModule(code);
|
|
42
|
+
const analysis = ast ? analyseModule(ast) : null;
|
|
43
|
+
if (analysisCache.size >= ANALYSIS_CACHE_LIMIT) {
|
|
44
|
+
const oldest = analysisCache.keys().next();
|
|
45
|
+
if (!oldest.done)
|
|
46
|
+
analysisCache.delete(oldest.value);
|
|
47
|
+
}
|
|
48
|
+
analysisCache.set(code, analysis);
|
|
49
|
+
return analysis;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the imported JSX values used by one source file.
|
|
53
|
+
*
|
|
54
|
+
* The compiler owns syntax and re-export traversal. The host Adapter owns all
|
|
55
|
+
* build-tool resolution, source ownership, and stable path decisions.
|
|
56
|
+
*/
|
|
57
|
+
export async function resolveHostComponentPolicy(code, importer, adapter, options = {}) {
|
|
58
|
+
const analysis = analyseModuleSource(code);
|
|
59
|
+
if (!analysis) {
|
|
60
|
+
return { components: {}, diagnostics: [] };
|
|
61
|
+
}
|
|
62
|
+
const components = {};
|
|
63
|
+
const diagnostics = [];
|
|
64
|
+
const tracer = createTracer(adapter, options);
|
|
65
|
+
for (const componentName of analysis.importedJsxNames) {
|
|
66
|
+
const reference = importedReference(componentName, analysis.imports);
|
|
67
|
+
if (!reference)
|
|
68
|
+
continue;
|
|
69
|
+
const result = await tracer.request(reference.source, reference.exportName, importer);
|
|
70
|
+
if (result.resolved) {
|
|
71
|
+
components[componentName] = result.protocol;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
diagnostics.push({
|
|
75
|
+
code: result.code,
|
|
76
|
+
componentName,
|
|
77
|
+
source: reference.source,
|
|
78
|
+
exportName: reference.exportName,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return { components, diagnostics };
|
|
82
|
+
}
|
|
83
|
+
/** Depth-first pre-order traversal of every node in a tree. */
|
|
84
|
+
function visit(node, callback) {
|
|
85
|
+
callback(node);
|
|
86
|
+
for (const child of childNodes(node))
|
|
87
|
+
visit(child, callback);
|
|
88
|
+
}
|
|
89
|
+
function analyseModule(ast) {
|
|
90
|
+
const program = isNode(ast.program) ? ast.program : ast;
|
|
91
|
+
const imports = new Map();
|
|
92
|
+
const declarations = new Map();
|
|
93
|
+
const exports = new Map();
|
|
94
|
+
const exportAll = [];
|
|
95
|
+
for (const statement of program.body ?? []) {
|
|
96
|
+
if (statement.type === "ImportDeclaration") {
|
|
97
|
+
recordImports(statement, imports);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
recordDeclaration(statement, declarations);
|
|
101
|
+
if (statement.type === "ExportDefaultDeclaration") {
|
|
102
|
+
const declaration = statement.declaration;
|
|
103
|
+
if (isNode(declaration)) {
|
|
104
|
+
const localName = identifier(declaration);
|
|
105
|
+
exports.set("default", localName
|
|
106
|
+
? { kind: "local", localName }
|
|
107
|
+
: { kind: "definition", node: declaration });
|
|
108
|
+
}
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (statement.type === "ExportAllDeclaration") {
|
|
112
|
+
const source = isNode(statement.source) ? String(statement.source.value ?? "") : "";
|
|
113
|
+
if (source)
|
|
114
|
+
exportAll.push(source);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (statement.type !== "ExportNamedDeclaration")
|
|
118
|
+
continue;
|
|
119
|
+
const source = isNode(statement.source) ? String(statement.source.value ?? "") : null;
|
|
120
|
+
const declaration = isNode(statement.declaration) ? statement.declaration : null;
|
|
121
|
+
if (declaration) {
|
|
122
|
+
recordDeclaration(declaration, declarations);
|
|
123
|
+
for (const name of declaredNames(declaration)) {
|
|
124
|
+
exports.set(name, { kind: "local", localName: name });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const specifier of statement.specifiers ?? []) {
|
|
128
|
+
const exportedName = identifier(specifier.exported);
|
|
129
|
+
const localName = identifier(specifier.local);
|
|
130
|
+
if (!exportedName || !localName)
|
|
131
|
+
continue;
|
|
132
|
+
exports.set(exportedName, source
|
|
133
|
+
? { kind: "request", source, exportName: localName }
|
|
134
|
+
: { kind: "local", localName });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
imports,
|
|
139
|
+
declarations,
|
|
140
|
+
exports,
|
|
141
|
+
exportAll,
|
|
142
|
+
importedJsxNames: collectImportedJsxNames(ast, imports),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function recordImports(statement, imports) {
|
|
146
|
+
if (statement.importKind === "type" || !isNode(statement.source))
|
|
147
|
+
return;
|
|
148
|
+
const source = String(statement.source.value ?? "");
|
|
149
|
+
for (const specifier of statement.specifiers ?? []) {
|
|
150
|
+
if (specifier.importKind === "type")
|
|
151
|
+
continue;
|
|
152
|
+
const localName = identifier(specifier.local);
|
|
153
|
+
if (!localName)
|
|
154
|
+
continue;
|
|
155
|
+
imports.set(localName, {
|
|
156
|
+
source,
|
|
157
|
+
exportName: specifier.type === "ImportDefaultSpecifier" ? "default" : identifier(specifier.imported) ?? "*",
|
|
158
|
+
namespace: specifier.type === "ImportNamespaceSpecifier",
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function recordDeclaration(statement, declarations) {
|
|
163
|
+
if (statement.type === "FunctionDeclaration" || statement.type === "ClassDeclaration") {
|
|
164
|
+
const name = identifier(statement.id);
|
|
165
|
+
if (name)
|
|
166
|
+
declarations.set(name, statement);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (statement.type !== "VariableDeclaration")
|
|
170
|
+
return;
|
|
171
|
+
for (const declaration of statement.declarations ?? []) {
|
|
172
|
+
const name = identifier(declaration.id);
|
|
173
|
+
if (name)
|
|
174
|
+
declarations.set(name, declaration);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function declaredNames(declaration) {
|
|
178
|
+
if (declaration.type === "FunctionDeclaration" || declaration.type === "ClassDeclaration") {
|
|
179
|
+
const name = identifier(declaration.id);
|
|
180
|
+
return name ? [name] : [];
|
|
181
|
+
}
|
|
182
|
+
if (declaration.type !== "VariableDeclaration")
|
|
183
|
+
return [];
|
|
184
|
+
return (declaration.declarations ?? [])
|
|
185
|
+
.map((item) => identifier(item.id))
|
|
186
|
+
.filter((name) => name !== null);
|
|
187
|
+
}
|
|
188
|
+
function collectImportedJsxNames(ast, imports) {
|
|
189
|
+
const names = new Set();
|
|
190
|
+
visit(ast, (node) => {
|
|
191
|
+
if (node.type !== "JSXOpeningElement")
|
|
192
|
+
return;
|
|
193
|
+
const name = jsxMemberName(node.name);
|
|
194
|
+
const root = name?.split(".")[0];
|
|
195
|
+
if (name && root && /^[A-Z]/.test(root) && imports.has(root))
|
|
196
|
+
names.add(name);
|
|
197
|
+
});
|
|
198
|
+
return [...names].sort();
|
|
199
|
+
}
|
|
200
|
+
function importedReference(componentName, imports) {
|
|
201
|
+
const [root, ...members] = componentName.split(".");
|
|
202
|
+
const binding = root ? imports.get(root) : undefined;
|
|
203
|
+
if (!binding)
|
|
204
|
+
return null;
|
|
205
|
+
const exportName = binding.namespace
|
|
206
|
+
? members.join(".")
|
|
207
|
+
: [binding.exportName, ...members].filter(Boolean).join(".");
|
|
208
|
+
if (!exportName || exportName === "*")
|
|
209
|
+
return null;
|
|
210
|
+
return { source: binding.source, exportName };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Trace authored imports to the protocol of the component they name.
|
|
214
|
+
*
|
|
215
|
+
* The tracer closes over the host Adapter and the protocol catalog, so each
|
|
216
|
+
* step carries only its request, the module it sits in, and its trace state.
|
|
217
|
+
*/
|
|
218
|
+
function createTracer(adapter, options) {
|
|
219
|
+
async function request(source, exportName, importer, state) {
|
|
220
|
+
const declared = declaredProtocol(source, exportName, options);
|
|
221
|
+
if (declared)
|
|
222
|
+
return resolvedProtocol(source, exportName, declared);
|
|
223
|
+
if (state.depth >= MAX_REEXPORT_DEPTH)
|
|
224
|
+
return unresolved("component-export-unresolved");
|
|
225
|
+
let resolvedId;
|
|
226
|
+
try {
|
|
227
|
+
resolvedId = await adapter.resolve(source, importer);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
resolvedId = null;
|
|
231
|
+
}
|
|
232
|
+
if (!resolvedId)
|
|
233
|
+
return unresolved("component-import-unresolved");
|
|
234
|
+
if (!adapter.isProjectSource(resolvedId))
|
|
235
|
+
return unresolved("component-protocol-unknown");
|
|
236
|
+
const canonicalSource = stripModuleExtension(adapter.sourcePath(resolvedId));
|
|
237
|
+
const canonicalProtocol = declaredProtocol(canonicalSource, exportName, options);
|
|
238
|
+
if (canonicalProtocol)
|
|
239
|
+
return resolvedProtocol(canonicalSource, exportName, canonicalProtocol);
|
|
240
|
+
const visitKey = `${resolvedId}\0${exportName}`;
|
|
241
|
+
if (state.visited.has(visitKey))
|
|
242
|
+
return unresolved("component-export-unresolved");
|
|
243
|
+
const moduleSource = await adapter.read(resolvedId);
|
|
244
|
+
if (moduleSource === null)
|
|
245
|
+
return unresolved("component-export-unresolved");
|
|
246
|
+
const analysis = analyseModuleSource(moduleSource);
|
|
247
|
+
if (!analysis)
|
|
248
|
+
return unresolved("component-export-unresolved");
|
|
249
|
+
return resolveExport({ analysis, moduleId: resolvedId, canonicalSource }, exportName, { visited: new Set(state.visited).add(visitKey), depth: state.depth + 1 });
|
|
250
|
+
}
|
|
251
|
+
async function resolveExport(module, exportName, state) {
|
|
252
|
+
const target = module.analysis.exports.get(exportName);
|
|
253
|
+
if (target?.kind === "request") {
|
|
254
|
+
return request(target.source, target.exportName, module.moduleId, state);
|
|
255
|
+
}
|
|
256
|
+
if (target?.kind === "definition") {
|
|
257
|
+
return followReference(expressionReference(target.node, module.analysis.imports), module, exportName, state);
|
|
258
|
+
}
|
|
259
|
+
if (target?.kind === "local") {
|
|
260
|
+
return resolveLocal(module, target.localName, exportName, state);
|
|
261
|
+
}
|
|
262
|
+
const candidates = [];
|
|
263
|
+
for (const source of module.analysis.exportAll) {
|
|
264
|
+
const candidate = await request(source, exportName, module.moduleId, state);
|
|
265
|
+
if (candidate.resolved)
|
|
266
|
+
candidates.push(candidate);
|
|
267
|
+
}
|
|
268
|
+
if (candidates.length === 1)
|
|
269
|
+
return candidates[0];
|
|
270
|
+
return unresolved("component-export-unresolved");
|
|
271
|
+
}
|
|
272
|
+
async function resolveLocal(module, localName, exportedName, state) {
|
|
273
|
+
const imported = module.analysis.imports.get(localName);
|
|
274
|
+
if (imported && !imported.namespace) {
|
|
275
|
+
return request(imported.source, imported.exportName, module.moduleId, state);
|
|
276
|
+
}
|
|
277
|
+
const declaration = module.analysis.declarations.get(localName);
|
|
278
|
+
if (!declaration)
|
|
279
|
+
return unresolved("component-export-unresolved");
|
|
280
|
+
if (declaration.type !== "VariableDeclarator") {
|
|
281
|
+
return projectProtocol(module.canonicalSource, exportedName);
|
|
282
|
+
}
|
|
283
|
+
return followReference(expressionReference(declaration.init, module.analysis.imports), module, exportedName, state);
|
|
284
|
+
}
|
|
285
|
+
function followReference(reference, module, exportedName, state) {
|
|
286
|
+
if (!reference)
|
|
287
|
+
return projectProtocol(module.canonicalSource, exportedName);
|
|
288
|
+
if (reference.kind === "local") {
|
|
289
|
+
return resolveLocal(module, reference.localName, exportedName, state);
|
|
290
|
+
}
|
|
291
|
+
return request(reference.source, reference.exportName, module.moduleId, state);
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
/** Resolve one authored import to the protocol of the component it names. */
|
|
295
|
+
request: (source, exportName, importer) => request(source, exportName, importer, { visited: new Set(), depth: 0 }),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function expressionReference(expression, imports) {
|
|
299
|
+
let current = isNode(expression) ? expression : null;
|
|
300
|
+
while (current && ["TSAsExpression", "TSTypeAssertion", "TSNonNullExpression"].includes(current.type)) {
|
|
301
|
+
current = isNode(current.expression) ? current.expression : null;
|
|
302
|
+
}
|
|
303
|
+
if (!current)
|
|
304
|
+
return null;
|
|
305
|
+
if (current.type === "Identifier") {
|
|
306
|
+
const name = identifier(current);
|
|
307
|
+
if (!name)
|
|
308
|
+
return null;
|
|
309
|
+
const imported = imports.get(name);
|
|
310
|
+
return imported && !imported.namespace
|
|
311
|
+
? { kind: "request", source: imported.source, exportName: imported.exportName }
|
|
312
|
+
: { kind: "local", localName: name };
|
|
313
|
+
}
|
|
314
|
+
if (current.type !== "MemberExpression")
|
|
315
|
+
return null;
|
|
316
|
+
const object = identifier(current.object);
|
|
317
|
+
const property = identifier(current.property);
|
|
318
|
+
const imported = object ? imports.get(object) : undefined;
|
|
319
|
+
if (!imported || !property)
|
|
320
|
+
return null;
|
|
321
|
+
return {
|
|
322
|
+
kind: "request",
|
|
323
|
+
source: imported.source,
|
|
324
|
+
exportName: imported.namespace ? property : `${imported.exportName}.${property}`,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function declaredProtocol(source, exportName, options) {
|
|
328
|
+
const moduleProtocol = options.moduleProtocols?.[source];
|
|
329
|
+
const normalizedExportName = exportName.replace(/^default\./, "");
|
|
330
|
+
const protocol = moduleProtocol?.exports?.[exportName]
|
|
331
|
+
?? moduleProtocol?.exports?.[normalizedExportName]
|
|
332
|
+
?? moduleProtocol?.default;
|
|
333
|
+
if (protocol)
|
|
334
|
+
return protocol;
|
|
335
|
+
return options.compatibleComponentImports?.[source]?.includes(exportName) === true
|
|
336
|
+
? { wrap: true }
|
|
337
|
+
: null;
|
|
338
|
+
}
|
|
339
|
+
function resolvedProtocol(source, exportName, protocol) {
|
|
340
|
+
return {
|
|
341
|
+
resolved: true,
|
|
342
|
+
protocol: {
|
|
343
|
+
...protocol,
|
|
344
|
+
componentId: `${stripModuleExtension(source)}#${exportName}`,
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Default protocol for a component that resolves to project-owned source.
|
|
350
|
+
*
|
|
351
|
+
* The inspected codebase owns the definition, so replacing the element type is
|
|
352
|
+
* safe and its authored `children` may be traversed. Named JSX props stay
|
|
353
|
+
* opaque: only a host-declared protocol can promise that a named slot renders
|
|
354
|
+
* its contents.
|
|
355
|
+
*/
|
|
356
|
+
function projectProtocol(source, exportName) {
|
|
357
|
+
return resolvedProtocol(source, exportName, { wrap: true, slots: { children: "rendered" } });
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Roll per-component diagnostics up so a host emits one warning per package
|
|
361
|
+
* instead of one per skipped export.
|
|
362
|
+
*/
|
|
363
|
+
export function groupComponentPolicyDiagnostics(diagnostics, maxNames = 5) {
|
|
364
|
+
const groups = new Map();
|
|
365
|
+
for (const diagnostic of diagnostics) {
|
|
366
|
+
const key = `${diagnostic.code}\0${diagnostic.source}`;
|
|
367
|
+
const group = groups.get(key);
|
|
368
|
+
if (group)
|
|
369
|
+
group.push(diagnostic);
|
|
370
|
+
else
|
|
371
|
+
groups.set(key, [diagnostic]);
|
|
372
|
+
}
|
|
373
|
+
return [...groups].map(([key, group]) => ({
|
|
374
|
+
key,
|
|
375
|
+
source: group[0].source,
|
|
376
|
+
componentNames: group.slice(0, maxNames).map((diagnostic) => diagnostic.componentName),
|
|
377
|
+
total: group.length,
|
|
378
|
+
}));
|
|
379
|
+
}
|
|
380
|
+
/** Host-facing warning text for one grouped diagnostic. */
|
|
381
|
+
export function formatComponentPolicyWarning(grouped, location, hint = "Add componentProtocols metadata to opt in compatible package exports.") {
|
|
382
|
+
const names = grouped.componentNames.join(", ");
|
|
383
|
+
const remainder = grouped.total > grouped.componentNames.length
|
|
384
|
+
? ` and ${grouped.total - grouped.componentNames.length} more`
|
|
385
|
+
: "";
|
|
386
|
+
return `[nudge-ui] Semantic instrumentation skipped ${grouped.source} in ${location} `
|
|
387
|
+
+ `(${names}${remainder}). ${hint}`;
|
|
388
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Host-neutral source compilers used by framework adapters. */
|
|
2
|
+
export * from "./reactIdentity.js";
|
|
3
|
+
export * from "./componentInstrumentation.js";
|
|
4
|
+
export * from "./componentPolicyResolution.js";
|
|
5
|
+
export * from "./reactComponentProtocols.js";
|
|
6
|
+
export * from "./componentContractTypes.js";
|
|
7
|
+
export * from "./componentContracts.js";
|
|
8
|
+
export * from "./packageComponentContracts.js";
|
|
9
|
+
export { relativePath } from "./sourcePaths.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Host-neutral source compilers used by framework adapters. */
|
|
2
|
+
export * from "./reactIdentity.js";
|
|
3
|
+
export * from "./componentInstrumentation.js";
|
|
4
|
+
export * from "./componentPolicyResolution.js";
|
|
5
|
+
export * from "./reactComponentProtocols.js";
|
|
6
|
+
export * from "./componentContractTypes.js";
|
|
7
|
+
export * from "./componentContracts.js";
|
|
8
|
+
export * from "./packageComponentContracts.js";
|
|
9
|
+
export { relativePath } from "./sourcePaths.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import type { ComponentContract } from "./componentContractTypes.js";
|
|
3
|
+
/**
|
|
4
|
+
* Identifies a package import from the host module that uses it.
|
|
5
|
+
*
|
|
6
|
+
* The host path is intentional: TypeScript uses it as the resolution anchor,
|
|
7
|
+
* so the same module specifier can resolve to a different installed package in
|
|
8
|
+
* each application. The returned contract identity always uses the import
|
|
9
|
+
* specifier, never an absolute node_modules path.
|
|
10
|
+
*/
|
|
11
|
+
export interface PackageContractContext {
|
|
12
|
+
hostFile: string;
|
|
13
|
+
moduleSpecifier: string;
|
|
14
|
+
compilerOptions?: ts.CompilerOptions;
|
|
15
|
+
}
|
|
16
|
+
export interface PackageContractCatalogContext {
|
|
17
|
+
hostFile: string;
|
|
18
|
+
moduleSpecifiers: readonly string[];
|
|
19
|
+
compilerOptions?: ts.CompilerOptions;
|
|
20
|
+
}
|
|
21
|
+
/** Returns bare modules whose imported bindings are rendered as JSX. */
|
|
22
|
+
export declare function collectPackageComponentModules(code: string, fileName: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Extracts scalar controls from component exports in an installed package.
|
|
25
|
+
*
|
|
26
|
+
* It follows TypeScript's resolved module graph, including barrel re-exports
|
|
27
|
+
* and declaration-file aliases, rather than trying to parse one declaration
|
|
28
|
+
* file in isolation.
|
|
29
|
+
*/
|
|
30
|
+
export declare function extractPackageComponentContracts(context: PackageContractContext): ComponentContract[];
|
|
31
|
+
/** Extracts several package modules through one declaration-only program. */
|
|
32
|
+
export declare function extractPackageComponentContractCatalog(context: PackageContractCatalogContext): ComponentContract[];
|