nudge-ui 0.2.4 → 0.2.6
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/dist/cli/agentCommand.d.ts +0 -1
- package/dist/cli/agentCommand.js +4 -29
- package/dist/client.mjs +987 -221
- package/dist/compiler/ast.d.ts +0 -6
- package/dist/compiler/ast.js +0 -5
- package/dist/compiler/componentContractTypes.d.ts +11 -5
- package/dist/compiler/componentContracts.js +3 -9
- package/dist/compiler/componentInstrumentation.d.ts +2 -13
- package/dist/compiler/componentInstrumentation.js +3 -12
- package/dist/compiler/componentPolicyResolution.d.ts +3 -22
- package/dist/compiler/componentPolicyResolution.js +6 -38
- package/dist/compiler/identityAttributes.d.ts +2 -0
- package/dist/compiler/identityAttributes.js +2 -0
- package/dist/compiler/index.d.ts +0 -1
- package/dist/compiler/index.js +0 -1
- package/dist/compiler/packageComponentContracts.d.ts +10 -19
- package/dist/compiler/packageComponentContracts.js +60 -43
- package/dist/compiler/reactComponentProtocols.d.ts +0 -7
- package/dist/compiler/reactComponentProtocols.js +0 -7
- package/dist/compiler/reactIdentity.d.ts +2 -2
- package/dist/compiler/reactIdentity.js +41 -43
- package/dist/compiler/sourcePaths.d.ts +4 -8
- package/dist/compiler/sourcePaths.js +6 -8
- package/dist/css/dialects/index.d.ts +2 -21
- package/dist/css/dialects/index.js +2 -9
- package/dist/css/dialects/tailwind.d.ts +2 -16
- package/dist/css/dialects/tailwind.js +2 -25
- package/dist/css/dialects/vanillaExtract.d.ts +1 -9
- package/dist/css/dialects/vanillaExtract.js +0 -1
- package/dist/css/index.d.ts +0 -8
- package/dist/css/index.js +0 -8
- package/dist/css/model/index.d.ts +6 -38
- package/dist/css/model/index.js +0 -9
- package/dist/css/token-inventory/index.d.ts +0 -23
- package/dist/css/token-inventory/index.js +0 -23
- package/dist/css/token-inventory/inventory.js +4 -16
- package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
- package/dist/css/token-inventory/parseStylesheet.js +5 -42
- package/dist/css/token-inventory/policy.d.ts +2 -39
- package/dist/css/token-inventory/policy.js +2 -39
- package/dist/css/token-inventory/types.d.ts +2 -15
- package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
- package/dist/css/value-semantics/borderSemantics.js +5 -23
- package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
- package/dist/css/value-semantics/boxSemantics.js +1 -7
- package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
- package/dist/css/value-semantics/colorSemantics.js +9 -40
- package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
- package/dist/css/value-semantics/cssSyntax.js +39 -11
- package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
- package/dist/css/value-semantics/fontSemantics.js +7 -25
- package/dist/css/value-semantics/index.d.ts +1 -12
- package/dist/css/value-semantics/index.js +1 -12
- package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
- package/dist/css/value-semantics/propertyPolicy.js +47 -59
- package/dist/css/value-semantics/stringMaps.d.ts +0 -1
- package/dist/css/value-semantics/structuredValues.d.ts +3 -37
- package/dist/css/value-semantics/structuredValues.js +6 -17
- package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
- package/dist/css/value-semantics/tokenInterpretation.js +7 -21
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
- package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
- package/dist/hosts/astro/clientAsset.d.ts +1 -5
- package/dist/hosts/astro/clientAsset.js +1 -5
- package/dist/hosts/astro/clientTransport.d.ts +0 -1
- package/dist/hosts/astro/clientTransport.js +4 -9
- package/dist/hosts/astro/integration.d.ts +2 -28
- package/dist/hosts/astro/integration.js +7 -36
- package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
- package/dist/hosts/astro/markdownIdentity.js +0 -3
- package/dist/hosts/astro/middleware.d.ts +1 -12
- package/dist/hosts/astro/middleware.js +1 -12
- package/dist/hosts/astro/projectContext.d.ts +1 -9
- package/dist/hosts/astro/projectContext.js +2 -11
- package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
- package/dist/hosts/astro/responseInstrumentation.js +5 -34
- package/dist/hosts/environment.d.ts +0 -8
- package/dist/hosts/environment.js +0 -1
- package/dist/hosts/next/index.js +1 -3
- package/dist/hosts/next/loader.d.ts +5 -44
- package/dist/hosts/next/loader.js +22 -103
- package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
- package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
- package/dist/hosts/next/manifest.d.ts +2 -16
- package/dist/hosts/next/manifest.js +18 -20
- package/dist/hosts/next/mount.d.ts +1 -11
- package/dist/hosts/next/mount.js +1 -11
- package/dist/hosts/next/repositoryScope.d.ts +2 -17
- package/dist/hosts/next/repositoryScope.js +2 -17
- package/dist/hosts/next/sidecar.d.ts +0 -13
- package/dist/hosts/next/sidecar.js +25 -110
- package/dist/hosts/next/wrapper.d.ts +0 -31
- package/dist/hosts/next/wrapper.js +14 -71
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +3 -19
- package/dist/hosts/reactRendererCapture.d.ts +2 -0
- package/dist/hosts/reactRendererCapture.js +12 -0
- package/dist/hosts/static/cli.d.ts +0 -4
- package/dist/hosts/static/cli.js +0 -3
- package/dist/hosts/static/html/bootstrap.d.ts +1 -18
- package/dist/hosts/static/html/bootstrap.js +2 -14
- package/dist/hosts/static/manifest.d.ts +2 -15
- package/dist/hosts/static/manifest.js +5 -18
- package/dist/hosts/static/server.d.ts +4 -38
- package/dist/hosts/static/server.js +17 -67
- package/dist/hosts/vite/index.d.ts +0 -10
- package/dist/hosts/vite/index.js +0 -10
- package/dist/hosts/vite/react.d.ts +4 -17
- package/dist/hosts/vite/react.js +18 -35
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
- package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
- package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
- package/dist/hosts/vite/vite.d.ts +5 -26
- package/dist/hosts/vite/vite.js +44 -80
- package/dist/html/dom.d.ts +0 -1
- package/dist/html/dom.js +0 -1
- package/dist/html/identity.d.ts +1 -15
- package/dist/html/identity.js +1 -8
- package/dist/html/insertions.d.ts +2 -8
- package/dist/html/insertions.js +1 -1
- package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
- package/dist/inspector/agent/McpConnectionDialog.js +8 -9
- package/dist/inspector/agent/activity.d.ts +2 -2
- package/dist/inspector/agent/activity.js +4 -3
- package/dist/inspector/agent/client.d.ts +3 -27
- package/dist/inspector/agent/client.js +43 -91
- package/dist/inspector/agent/connectionStatus.d.ts +3 -2
- package/dist/inspector/agent/connectionStatus.js +25 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +42 -176
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +3 -20
- package/dist/inspector/agent/verification.js +10 -43
- package/dist/inspector/boot.d.ts +5 -0
- package/dist/inspector/boot.js +289 -0
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
- package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
- package/dist/inspector/canvas/CanvasCard.js +26 -24
- package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
- package/dist/inspector/canvas/CanvasToolbar.js +2 -1
- package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
- package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
- package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
- package/dist/inspector/canvas/PageCard.d.ts +9 -0
- package/dist/inspector/canvas/PageCard.js +50 -0
- package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
- package/dist/inspector/canvas/SketchToolOptions.js +80 -0
- package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
- package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
- package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
- package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
- package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
- package/dist/inspector/canvas/agentPresentation.js +3 -14
- package/dist/inspector/canvas/assets/eraser.svg +28 -0
- package/dist/inspector/canvas/assets/pen.svg +25 -0
- package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
- package/dist/inspector/canvas/canvasFrame.js +9 -0
- package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
- package/dist/inspector/canvas/canvasGestures.js +0 -6
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +5 -7
- package/dist/inspector/canvas/canvasStore.js +42 -21
- package/dist/inspector/canvas/frameConnection.d.ts +42 -0
- package/dist/inspector/canvas/frameConnection.js +73 -0
- package/dist/inspector/canvas/frameContent.d.ts +0 -1
- package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
- package/dist/inspector/canvas/frameLifecycle.js +11 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
- package/dist/inspector/canvas/frameProtocol.js +37 -24
- package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
- package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
- package/dist/inspector/canvas/layout.d.ts +10 -22
- package/dist/inspector/canvas/layout.js +0 -3
- package/dist/inspector/canvas/normalizeUrl.js +1 -8
- package/dist/inspector/canvas/pageSurface.d.ts +6 -0
- package/dist/inspector/canvas/pageSurface.js +29 -0
- package/dist/inspector/canvas/projection.d.ts +14 -25
- package/dist/inspector/canvas/projection.js +64 -87
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +10 -15
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +38 -28
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
- package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
- package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +23 -1
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +3 -9
- package/dist/inspector/canvas/sessionStore.js +33 -43
- package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
- package/dist/inspector/canvas/staleChangeDetector.js +11 -26
- package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
- package/dist/inspector/canvas/toolbarScale.js +1 -4
- package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
- package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
- package/dist/inspector/canvas/viewStore.js +1 -1
- package/dist/inspector/canvas/wheelPan.d.ts +1 -1
- package/dist/inspector/canvas/wheelPan.js +1 -1
- package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
- package/dist/inspector/canvas/workspaceLease.js +1 -7
- package/dist/inspector/changes/codecs.d.ts +1 -0
- package/dist/inspector/changes/codecs.js +21 -5
- package/dist/inspector/changes/draftPreview.d.ts +7 -0
- package/dist/inspector/changes/draftPreview.js +118 -0
- package/dist/inspector/changes/editModel.d.ts +11 -13
- package/dist/inspector/changes/editModel.js +9 -4
- package/dist/inspector/changes/managedStyleProjection.js +6 -15
- package/dist/inspector/changes/model.d.ts +0 -5
- package/dist/inspector/changes/model.js +1 -8
- package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
- package/dist/inspector/changes/previewDiagnostics.js +5 -21
- package/dist/inspector/changes/previewVerification.d.ts +25 -0
- package/dist/inspector/changes/previewVerification.js +34 -0
- package/dist/inspector/changes/structuralTypes.d.ts +2 -4
- package/dist/inspector/changes/types.d.ts +11 -8
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +66 -23
- package/dist/inspector/comments/element.d.ts +1 -2
- package/dist/inspector/comments/element.js +1 -2
- package/dist/inspector/comments/store.d.ts +1 -1
- package/dist/inspector/comments/store.js +4 -3
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +19 -11
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- package/dist/inspector/componentSemantics/changeAction.js +1 -1
- package/dist/inspector/componentSemantics/changeModel.js +2 -4
- package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
- package/dist/inspector/componentSemantics/react/callsites.js +261 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
- package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
- package/dist/inspector/componentSemantics/react/fibers.js +30 -0
- package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
- package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
- package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
- package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
- package/dist/inspector/componentSemantics/textBinding.js +20 -87
- package/dist/inspector/componentSemantics/types.d.ts +8 -27
- package/dist/inspector/componentSemantics/types.js +0 -1
- package/dist/inspector/conformance/borderCases.d.ts +0 -5
- package/dist/inspector/conformance/borderCases.js +0 -5
- package/dist/inspector/conformance/colorCases.d.ts +0 -6
- package/dist/inspector/conformance/colorCases.js +0 -6
- package/dist/inspector/conformance/fixture.d.ts +1 -5
- package/dist/inspector/conformance/fixture.js +1 -5
- package/dist/inspector/conformance/spacingCases.d.ts +0 -4
- package/dist/inspector/conformance/spacingCases.js +0 -4
- package/dist/inspector/conformance/typographyCases.d.ts +0 -5
- package/dist/inspector/conformance/typographyCases.js +0 -5
- package/dist/inspector/drafts/draftStore.d.ts +95 -0
- package/dist/inspector/drafts/draftStore.js +461 -0
- package/dist/inspector/drafts/model.d.ts +14 -14
- package/dist/inspector/drafts/model.js +4 -2
- package/dist/inspector/drafts/store.d.ts +47 -16
- package/dist/inspector/drafts/store.js +137 -170
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- package/dist/inspector/index.d.ts +2 -4
- package/dist/inspector/index.js +2 -264
- package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
- package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
- package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
- package/dist/inspector/inspection/bridge.d.ts +3 -7
- package/dist/inspector/inspection/bridge.js +6 -13
- package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
- package/dist/inspector/inspection/browserCssInspection.js +32 -14
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
- package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
- package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
- package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
- package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
- package/dist/inspector/inspection/selectionProperty.js +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
- package/dist/inspector/iterations/capture.d.ts +2 -2
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +2 -2
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +4 -4
- package/dist/inspector/iterations/coordinator.js +5 -4
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +9 -9
- package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
- package/dist/inspector/overlay/DomNavigator.js +39 -15
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
- package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
- package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
- package/dist/inspector/overlay/clickPolicy.js +3 -14
- package/dist/inspector/overlay/dropGuide.d.ts +0 -3
- package/dist/inspector/overlay/dropGuide.js +0 -3
- package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
- package/dist/inspector/overlay/frameThrottle.js +0 -1
- package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
- package/dist/inspector/overlay/interactionStyles.js +19 -8
- package/dist/inspector/overlay/measurementGeometry.js +4 -12
- package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
- package/dist/inspector/overlay/selectedGeometry.js +1 -8
- package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
- package/dist/inspector/overlay/spacingGestures.js +151 -31
- package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
- package/dist/inspector/overlay/structuralGestures.js +1 -4
- package/dist/inspector/pageInspector.d.ts +33 -0
- package/dist/inspector/pageInspector.js +335 -0
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +6 -10
- package/dist/inspector/projection/draftProjection.js +8 -7
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +28 -26
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +13 -33
- package/dist/inspector/projection/structuralProjection.d.ts +7 -48
- package/dist/inspector/projection/structuralProjection.js +31 -96
- package/dist/inspector/projection/textProjection.d.ts +7 -13
- package/dist/inspector/projection/textProjection.js +35 -80
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
- package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
- package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
- package/dist/inspector/prompt/clipboardHandoff.js +34 -16
- package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
- package/dist/inspector/prompt/generatePrompt.js +247 -166
- package/dist/inspector/prompt/promptDocument.d.ts +3 -0
- package/dist/inspector/prompt/promptDocument.js +8 -0
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +7 -8
- package/dist/inspector/runtime/devFlag.d.ts +2 -25
- package/dist/inspector/runtime/devFlag.js +4 -31
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
- package/dist/inspector/runtime/editorShell.d.ts +0 -1
- package/dist/inspector/runtime/editorShell.js +0 -1
- package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
- package/dist/inspector/runtime/inspectorStorage.js +37 -0
- package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
- package/dist/inspector/runtime/ownedStylesheets.js +66 -0
- package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
- package/dist/inspector/runtime/runtimeConfig.js +18 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
- package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +2 -7
- package/dist/inspector/selection/editScope.js +15 -14
- package/dist/inspector/selection/editTarget.d.ts +1 -5
- package/dist/inspector/selection/hierarchy.d.ts +11 -11
- package/dist/inspector/selection/hierarchy.js +42 -24
- package/dist/inspector/selection/selectionStore.d.ts +0 -3
- package/dist/inspector/selection/selectionStore.js +5 -16
- package/dist/inspector/selection/sourceSite.d.ts +1 -5
- package/dist/inspector/selection/sourceSite.js +2 -8
- package/dist/inspector/selection/styleSelection.d.ts +1 -5
- package/dist/inspector/selection/styleSelection.js +1 -5
- package/dist/inspector/session/lifecycle.d.ts +1 -9
- package/dist/inspector/session/lifecycle.js +0 -1
- package/dist/inspector/session/sessionContext.d.ts +0 -4
- package/dist/inspector/session/sessionContext.js +0 -4
- package/dist/inspector/session/sessionFactory.d.ts +0 -9
- package/dist/inspector/session/sessionFactory.js +0 -6
- package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
- package/dist/inspector/settings/SettingsDialog.js +5 -3
- package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
- package/dist/inspector/shell/AgentStatusButton.js +7 -7
- package/dist/inspector/shell/AppShell.js +6 -2
- package/dist/inspector/shell/ChangesLog.js +29 -12
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +62 -55
- package/dist/inspector/shell/EmptyState.js +3 -3
- package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
- package/dist/inspector/shell/InspectorEditors.js +14 -0
- package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
- package/dist/inspector/shell/InspectorPanel.js +8 -0
- package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
- package/dist/inspector/shell/InspectorSelection.js +20 -0
- package/dist/inspector/shell/InspectorShell.d.ts +0 -3
- package/dist/inspector/shell/InspectorShell.js +44 -58
- package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
- package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
- package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalButton.js +3 -8
- package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
- package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
- package/dist/inspector/shell/PromptActionButton.js +14 -0
- package/dist/inspector/shell/elementName.d.ts +5 -0
- package/dist/inspector/shell/elementName.js +29 -0
- package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
- package/dist/inspector/shell/interactionStatePreview.js +107 -0
- package/dist/inspector/shell/originalPreview.d.ts +1 -5
- package/dist/inspector/shell/originalPreview.js +5 -37
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +4 -8
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +5 -5
- package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
- package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
- package/dist/inspector/sketch/SketchOverlay.js +138 -263
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
- package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
- package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
- package/dist/inspector/sketch/SketchThumbnail.js +18 -0
- package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
- package/dist/inspector/sketch/SketchWorkspace.js +70 -37
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +31 -14
- package/dist/inspector/sketch/copySketch.d.ts +4 -0
- package/dist/inspector/sketch/copySketch.js +43 -0
- package/dist/inspector/sketch/drawingTools.d.ts +15 -0
- package/dist/inspector/sketch/drawingTools.js +46 -0
- package/dist/inspector/sketch/frameHeading.d.ts +3 -0
- package/dist/inspector/sketch/frameHeading.js +23 -0
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +3 -4
- package/dist/inspector/sketch/geometry.d.ts +2 -1
- package/dist/inspector/sketch/geometry.js +15 -1
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +26 -0
- package/dist/inspector/sketch/history.js +55 -0
- package/dist/inspector/sketch/interaction.d.ts +3 -5
- package/dist/inspector/sketch/interaction.js +8 -11
- package/dist/inspector/sketch/model.d.ts +33 -6
- package/dist/inspector/sketch/model.js +101 -63
- package/dist/inspector/sketch/persistence.d.ts +14 -1
- package/dist/inspector/sketch/persistence.js +64 -8
- package/dist/inspector/sketch/raster.d.ts +3 -2
- package/dist/inspector/sketch/raster.js +40 -20
- package/dist/inspector/sketch/store.d.ts +1 -1
- package/dist/inspector/sketch/store.js +3 -4
- package/dist/inspector/sketch/videoFrames.d.ts +6 -0
- package/dist/inspector/sketch/videoFrames.js +80 -0
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
- package/dist/inspector/styleEditors/BorderEditor.js +30 -135
- package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
- package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
- package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
- package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
- package/dist/inspector/styleEditors/FlexControls.js +158 -0
- package/dist/inspector/styleEditors/GapField.d.ts +5 -2
- package/dist/inspector/styleEditors/GapField.js +3 -4
- package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
- package/dist/inspector/styleEditors/GridChildSection.js +0 -5
- package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
- package/dist/inspector/styleEditors/GridPicker.js +2 -4
- package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
- package/dist/inspector/styleEditors/GridSection.js +22 -9
- package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
- package/dist/inspector/styleEditors/GridValueField.js +2 -8
- package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
- package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
- package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
- package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
- package/dist/inspector/styleEditors/LayoutSection.js +30 -356
- package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
- package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
- package/dist/inspector/styleEditors/PositionControls.js +16 -0
- package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
- package/dist/inspector/styleEditors/SizeSection.js +71 -0
- package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
- package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
- package/dist/inspector/styleEditors/Typography.js +2 -4
- package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
- package/dist/inspector/styleEditors/borderModel.js +105 -0
- package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
- package/dist/inspector/styleEditors/completeCssValue.js +3 -13
- package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
- package/dist/inspector/styleEditors/fieldValue.js +26 -0
- package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
- package/dist/inspector/styleEditors/gradientValue.js +3 -2
- package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
- package/dist/inspector/styleEditors/gridChildModel.js +6 -37
- package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
- package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
- package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
- package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
- package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
- package/dist/inspector/styleEditors/layoutMode.js +33 -0
- package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
- package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
- package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
- package/dist/inspector/styleEditors/layoutValue.js +6 -15
- package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
- package/dist/inspector/styleEditors/nudgeValue.js +1 -13
- package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
- package/dist/inspector/styleEditors/rowLookup.js +1 -5
- package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
- package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
- package/dist/inspector/styleEditors/stylePresence.js +1 -4
- package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
- package/dist/inspector/styleEditors/textRelevance.js +1 -1
- package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
- package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
- package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
- package/dist/inspector/styleEditors/valuePolicy.js +0 -1
- package/dist/inspector/testing.d.ts +1 -4
- package/dist/inspector/testing.js +1 -4
- package/dist/inspector/tokens/TokenChip.d.ts +1 -4
- package/dist/inspector/tokens/TokenChip.js +1 -4
- package/dist/inspector/tokens/TokenField.d.ts +4 -3
- package/dist/inspector/tokens/TokenField.js +53 -32
- package/dist/inspector/tokens/TokensPanel.js +2 -1
- package/dist/inspector/tokens/catalog.d.ts +2 -10
- package/dist/inspector/tokens/catalog.js +5 -12
- package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
- package/dist/inspector/tokens/dragPointerLock.js +2 -3
- package/dist/inspector/tokens/editActions.d.ts +4 -4
- package/dist/inspector/tokens/editActions.js +11 -7
- package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
- package/dist/inspector/tokens/resolution/cascade.js +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
- package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
- package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
- package/dist/inspector/tokens/resolution.d.ts +11 -27
- package/dist/inspector/tokens/resolution.js +105 -181
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
- package/dist/inspector/tokens/tokenEdits.js +1 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
- package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
- package/dist/inspector/ui/AtRuleContext.js +8 -6
- package/dist/inspector/ui/ControlSurface.d.ts +0 -4
- package/dist/inspector/ui/Disclosure.d.ts +0 -5
- package/dist/inspector/ui/Disclosure.js +0 -4
- package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
- package/dist/inspector/ui/InlineStyleWarning.js +2 -2
- package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
- package/dist/inspector/ui/InspectorStyle.js +26 -0
- package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
- package/dist/inspector/ui/PopoverListbox.js +3 -3
- package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
- package/dist/inspector/ui/SegmentedControl.js +6 -4
- package/dist/inspector/ui/SideValuesField.d.ts +1 -6
- package/dist/inspector/ui/SideValuesField.js +2 -8
- package/dist/inspector/ui/Toast.d.ts +10 -0
- package/dist/inspector/ui/Toast.js +26 -0
- package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
- package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
- package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
- package/dist/inspector/ui/atRuleSegments.js +34 -0
- package/dist/inspector/ui/classNames.d.ts +0 -1
- package/dist/inspector/ui/classNames.js +0 -1
- package/dist/inspector/ui/customCursors.d.ts +11 -0
- package/dist/inspector/ui/customCursors.js +29 -7
- package/dist/inspector/ui/styles.js +25 -25
- package/dist/inspector/workspace/commands.js +1 -2
- package/dist/inspector/workspace/controller.js +20 -2
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +4 -7
- package/dist/inspector/workspace/sentItems.d.ts +3 -6
- package/dist/inspector/workspace/sentItems.js +6 -24
- package/dist/inspector/workspace/timeline.d.ts +28 -11
- package/dist/inspector/workspace/timeline.js +117 -96
- package/dist/internal/agent-protocol.d.ts +53 -38
- package/dist/internal/agent-protocol.js +151 -42
- package/dist/nudge-ui.mjs +155 -92
- package/dist/project/artifacts.js +24 -21
- package/dist/project/files.d.ts +0 -1
- package/dist/project/files.js +2 -9
- package/dist/project/identity.d.ts +1 -5
- package/dist/project/identity.js +1 -5
- package/dist/project/mcpPackage.d.ts +3 -0
- package/dist/project/mcpPackage.js +55 -0
- package/dist/project/pathPolicy.d.ts +1 -6
- package/dist/project/pathPolicy.js +1 -6
- package/dist/project/tokens.d.ts +2 -12
- package/dist/project/tokens.js +4 -15
- package/dist/transport/editor.d.ts +1 -12
- package/dist/transport/editor.js +2 -13
- package/dist/transport/index.d.ts +0 -5
- package/dist/transport/index.js +0 -5
- package/dist/transport/routes.d.ts +0 -5
- package/dist/transport/routes.js +0 -5
- package/package.json +16 -5
- package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
- package/dist/inspector/canvas/measurementProjection.js +0 -16
- package/dist/inspector/changes/changesLog.d.ts +0 -49
- package/dist/inspector/changes/changesLog.js +0 -255
- package/dist/inspector/changes/draftChanges.d.ts +0 -58
- package/dist/inspector/changes/draftChanges.js +0 -304
- package/dist/inspector/conformance/projection.d.ts +0 -2
- package/dist/inspector/conformance/projection.js +0 -3
- package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
- package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
- package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
- package/dist/inspector/overlay/InspectorOverlay.js +0 -332
- package/dist/inspector/overlay/elementSelector.d.ts +0 -1
- package/dist/inspector/overlay/elementSelector.js +0 -111
- package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
- package/dist/inspector/sketch/SketchChanges.js +0 -72
- package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
- package/dist/inspector/sketch/SketchEntryButton.js +0 -11
- package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
- package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
- package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
- package/dist/inspector/styleEditors/InsetSection.js +0 -15
- package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
- package/dist/inspector/styleEditors/PositionInsets.js +0 -12
- package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
- package/dist/inspector/tokens/TokenDropdown.js +0 -59
|
@@ -11,33 +11,11 @@ import { createProjectTokenSnapshot } from "../../project/tokens.js";
|
|
|
11
11
|
import { NUDGE_UI_CLIENT_PATH, NUDGE_UI_EDITOR_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, createNudgeUiEditorDocument, isNudgeUiEditorDocumentRequest, } from "../../transport/index.js";
|
|
12
12
|
import { startOptionalProjectBridge } from "../projectBridge.js";
|
|
13
13
|
import { automationManifestFields } from "../environment.js";
|
|
14
|
-
/**
|
|
15
|
-
* Loopback-only manifest/reload sidecar (ADR-0010).
|
|
16
|
-
*
|
|
17
|
-
* One server per dev-server process, guarded against double-spawn because
|
|
18
|
-
* Next re-evaluates `next.config` more than once. Same-origin access without
|
|
19
|
-
* CORS comes from a `beforeFiles` rewrite proxying `/__nudge_ui__/*` to the
|
|
20
|
-
* sidecar port — both are wrapper-owned config, so the user touchpoint stays
|
|
21
|
-
* at one line.
|
|
22
|
-
*
|
|
23
|
-
* Routes:
|
|
24
|
-
* - GET /__nudge_ui__/client.mjs — the shared self-contained inspector client.
|
|
25
|
-
* - GET /__nudge_ui__/manifest — the frozen runtime snapshot, including
|
|
26
|
-
* the Stage 4 token lifecycle when `tokens` is enabled: scanned project CSS
|
|
27
|
-
* feeds a deterministic generation, and each settled watcher batch bumps
|
|
28
|
-
* the generation and emits exactly one reload notification.
|
|
29
|
-
* - GET /__nudge_ui__/reload — SSE revision notifications after settled
|
|
30
|
-
* file changes.
|
|
31
|
-
*/
|
|
32
14
|
const STATE_DIR_SEGMENT = ".next";
|
|
33
15
|
const packageRequire = createRequire(import.meta.url);
|
|
34
16
|
let inspectorClientPath;
|
|
35
17
|
const GLOBAL_KEY = Symbol.for("nudge-ui/next/sidecar");
|
|
36
|
-
/**
|
|
37
|
-
* One sidecar per process per configuration. The key keeps a token-enabled
|
|
38
|
-
* server from being conflated with a bare manifest-only server created
|
|
39
|
-
* elsewhere in the same process (tests, multiple projects).
|
|
40
|
-
*/
|
|
18
|
+
/** One sidecar per process per configuration: the key keeps token-enabled and manifest-only servers distinct. */
|
|
41
19
|
function globalState(key) {
|
|
42
20
|
// SAFETY: The GLOBAL_KEY symbol names the one global slot this module owns and writes itself.
|
|
43
21
|
const holder = globalThis;
|
|
@@ -58,9 +36,7 @@ function portFilePath(root) {
|
|
|
58
36
|
}
|
|
59
37
|
const CONTRACT_SOURCE_EXT = /\.(tsx|jsx)$/;
|
|
60
38
|
const SCAN_EXCLUDED_SEGMENTS = new Set([".git", ".next", "build", "dist", "node_modules"]);
|
|
61
|
-
/** Upper bound on examined project source files; truncation is announced. */
|
|
62
39
|
const SCAN_MAX_SOURCES = 5000;
|
|
63
|
-
/** Returns whether a directory declares a package-manager workspace. */
|
|
64
40
|
function hasWorkspaceManifest(directory) {
|
|
65
41
|
if (existsSync(join(directory, "pnpm-workspace.yaml")))
|
|
66
42
|
return true;
|
|
@@ -79,18 +55,8 @@ function hasWorkspaceManifest(directory) {
|
|
|
79
55
|
return false;
|
|
80
56
|
}
|
|
81
57
|
}
|
|
82
|
-
/** Upper bound on ancestors examined when searching for a workspace root. */
|
|
83
58
|
const MAX_WORKSPACE_SEARCH_DEPTH = 5;
|
|
84
|
-
/**
|
|
85
|
-
* Finds the nearest declared workspace root by walking upward from the app.
|
|
86
|
-
*
|
|
87
|
-
* A Next app normally runs with its app directory as `process.cwd()`. When a
|
|
88
|
-
* workspace manifest is present above that directory, the workspace is the
|
|
89
|
-
* smallest safe default that can include sibling authored stylesheets. The
|
|
90
|
-
* walk is bounded and never promotes the filesystem root itself, so a stray
|
|
91
|
-
* manifest at `/` cannot turn the whole machine into the token scan root.
|
|
92
|
-
* With no manifest found, scanning remains confined to the app root.
|
|
93
|
-
*/
|
|
59
|
+
/** Bounded upward walk; never promotes the filesystem root, so a stray manifest at `/` cannot become the scan root. */
|
|
94
60
|
function nearestWorkspaceRoot(root) {
|
|
95
61
|
let directory = root;
|
|
96
62
|
for (let depth = 0; depth <= MAX_WORKSPACE_SEARCH_DEPTH; depth += 1) {
|
|
@@ -120,17 +86,8 @@ function isWithinRoot(root, candidate) {
|
|
|
120
86
|
&& !isAbsolute(pathFromRoot));
|
|
121
87
|
}
|
|
122
88
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* Compile-time loader postings alone leave a restart gap: Turbopack's
|
|
126
|
-
* persistent cache serves previously compiled modules without re-running
|
|
127
|
-
* loaders, so a fresh sidecar would publish an empty contract catalog until
|
|
128
|
-
* every file happens to recompile. Reading the same authored sources the
|
|
129
|
-
* loader reads keeps the manifest coherent across dev-server restarts.
|
|
130
|
-
*
|
|
131
|
-
* `canonicalRoot` must be the realpath'd project root so aggregation keys
|
|
132
|
-
* match both loader postings and watcher events regardless of how the host
|
|
133
|
-
* spelled the working directory.
|
|
89
|
+
* Reads authored sources directly because Turbopack's persistent cache can skip
|
|
90
|
+
* loader re-runs; `canonicalRoot` must be realpath'd so keys match loader postings.
|
|
134
91
|
*/
|
|
135
92
|
async function scanProjectContracts(canonicalRoot, apply) {
|
|
136
93
|
const queue = [canonicalRoot];
|
|
@@ -178,12 +135,7 @@ async function scanProjectContracts(canonicalRoot, apply) {
|
|
|
178
135
|
}
|
|
179
136
|
return { truncated, files };
|
|
180
137
|
}
|
|
181
|
-
/**
|
|
182
|
-
* Reads one source file only while its size is stable across the read.
|
|
183
|
-
* Editors that truncate-then-write can expose half a file at read time; a
|
|
184
|
-
* syntactically valid prefix would otherwise replace good contracts with
|
|
185
|
-
* wrong ones until the next settled batch.
|
|
186
|
-
*/
|
|
138
|
+
/** Null unless the size is stable across the read: truncate-then-write editors can expose a syntactically valid prefix. */
|
|
187
139
|
function readStableSource(absolutePath) {
|
|
188
140
|
try {
|
|
189
141
|
const sizeBefore = statSync(absolutePath).size;
|
|
@@ -197,14 +149,12 @@ function readStableSource(absolutePath) {
|
|
|
197
149
|
return null;
|
|
198
150
|
}
|
|
199
151
|
}
|
|
200
|
-
/** Removes a stale port file left by a crashed previous run. */
|
|
201
152
|
export function clearStaleSidecarState(root) {
|
|
202
153
|
try {
|
|
203
154
|
// SAFETY: The JSON.parse result is validated by the typeof guard below before use.
|
|
204
155
|
const raw = JSON.parse(readFileSync(portFilePath(root), "utf8"));
|
|
205
156
|
if (typeof raw.pid === "number" && raw.pid !== process.pid) {
|
|
206
|
-
//
|
|
207
|
-
// named cannot be trusted for reuse and is never dialled here.
|
|
157
|
+
// Previous process's record: the socket it named is never dialled, so dropping it is safe.
|
|
208
158
|
rmSync(portFilePath(root), { force: true });
|
|
209
159
|
}
|
|
210
160
|
}
|
|
@@ -212,16 +162,9 @@ export function clearStaleSidecarState(root) {
|
|
|
212
162
|
// Absent or unreadable state is fine; a fresh record gets written below.
|
|
213
163
|
}
|
|
214
164
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Starts (or returns) the sidecar for this dev-server process.
|
|
217
|
-
*
|
|
218
|
-
* `root` is the project root; the manifest names itself from it. The server
|
|
219
|
-
* binds 127.0.0.1 exclusively.
|
|
220
|
-
*/
|
|
221
165
|
export async function ensureSidecar(root, options = {}) {
|
|
222
|
-
// Watchers
|
|
223
|
-
//
|
|
224
|
-
// derive every filesystem-relative computation from the canonical root.
|
|
166
|
+
// Watchers report REAL paths; on macOS the textual form can differ from root
|
|
167
|
+
// (/tmp -> /private/tmp), so canonicalize once and derive everything from fsRoot.
|
|
225
168
|
const fsRoot = await realpath(root).catch(() => root);
|
|
226
169
|
const scanRoots = await tokenScanRoots(fsRoot, options.sourceRoots);
|
|
227
170
|
const state = globalState(`${options.tokens ? "tokens" : "manifest"}:${options.projectBridgeOrigin ?? "plain"}:${fsRoot}:${scanRoots.join("|")}`);
|
|
@@ -232,11 +175,6 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
232
175
|
const starting = (async () => {
|
|
233
176
|
let generation = 0;
|
|
234
177
|
const streams = new Set();
|
|
235
|
-
// Token knowledge lives in a mutable holder so settled batches can swap
|
|
236
|
-
// the snapshot without rebuilding the rest of the manifest.
|
|
237
|
-
// Component contracts aggregate across loader postings, keyed by file so
|
|
238
|
-
// recompiles replace rather than duplicate (Stage 5). A debounced flush
|
|
239
|
-
// publishes one revision per settled burst of compilations.
|
|
240
178
|
const contractsByFile = new Map();
|
|
241
179
|
let contractsTimer = null;
|
|
242
180
|
const flushContracts = () => {
|
|
@@ -307,8 +245,7 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
307
245
|
});
|
|
308
246
|
const port = await new Promise((resolvePort, rejectPort) => {
|
|
309
247
|
server.once("error", rejectPort);
|
|
310
|
-
// Port 0
|
|
311
|
-
// projects on one machine never collide.
|
|
248
|
+
// Port 0 lets concurrent projects on one machine pick distinct free loopback ports.
|
|
312
249
|
server.listen(0, "127.0.0.1", () => {
|
|
313
250
|
const address = server.address();
|
|
314
251
|
if (address && typeof address === "object")
|
|
@@ -322,14 +259,11 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
322
259
|
writeFileSync(portFilePath(root), `${JSON.stringify({ pid: process.pid, port })}\n`);
|
|
323
260
|
}
|
|
324
261
|
catch {
|
|
325
|
-
// The port file is diagnostics-only;
|
|
326
|
-
// transport, so an unwritable .next must not break instrumentation.
|
|
262
|
+
// The port file is diagnostics-only; an unwritable .next must not break instrumentation.
|
|
327
263
|
}
|
|
328
264
|
await ensureProjectBridge();
|
|
329
265
|
const watchers = [];
|
|
330
|
-
//
|
|
331
|
-
// restarted sidecar republishes contracts even when Turbopack's
|
|
332
|
-
// persistent cache skips every loader re-run.
|
|
266
|
+
// Runs even without the token lifecycle so a restarted sidecar republishes contracts.
|
|
333
267
|
try {
|
|
334
268
|
await scanProjectContracts(fsRoot, (file, list) => {
|
|
335
269
|
contractsByFile.set(file, list);
|
|
@@ -341,9 +275,7 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
341
275
|
/* an unreadable tree keeps whatever knowledge postings provided */
|
|
342
276
|
}
|
|
343
277
|
if (options.tokens) {
|
|
344
|
-
//
|
|
345
|
-
// tokens without waiting for a watcher tick. Failures degrade to the
|
|
346
|
-
// empty snapshot already present in the manifest.
|
|
278
|
+
// Scan before the first manifest response so early clients see tokens without waiting for a watcher tick.
|
|
347
279
|
try {
|
|
348
280
|
applySnapshot(await createProjectTokenSnapshot(tokenSnapshotOptions));
|
|
349
281
|
}
|
|
@@ -362,16 +294,12 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
362
294
|
};
|
|
363
295
|
const settleProjectChanges = async (changes) => {
|
|
364
296
|
let needsContractRescan = false;
|
|
365
|
-
//
|
|
366
|
-
//
|
|
367
|
-
// survive forever), and edits re-extract from the authored bytes
|
|
368
|
-
// even if a compiler cache never re-runs the loader. A read that
|
|
369
|
-
// lands mid-write is skipped — the next settled batch retries.
|
|
297
|
+
// Deletions must prune or stale controls survive forever; a read that
|
|
298
|
+
// lands mid-write is skipped and retried on the next settled batch.
|
|
370
299
|
for (const change of changes) {
|
|
371
300
|
const normalized = change.absolutePath.split("\\").join("/");
|
|
372
|
-
// fs.watch can report a directory or omit
|
|
373
|
-
//
|
|
374
|
-
// the only way to keep the contract catalog coherent.
|
|
301
|
+
// fs.watch can report a directory or omit the filename, leaving the
|
|
302
|
+
// source unknown; a bounded rescan is then the only way to stay coherent.
|
|
375
303
|
if (!CONTRACT_SOURCE_EXT.test(normalized)) {
|
|
376
304
|
needsContractRescan = true;
|
|
377
305
|
continue;
|
|
@@ -410,14 +338,10 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
410
338
|
}
|
|
411
339
|
await settleTokens();
|
|
412
340
|
};
|
|
413
|
-
//
|
|
414
|
-
//
|
|
415
|
-
// them for contract rescans would broaden the contract root silently.
|
|
416
|
-
// Roots nested inside the app are already covered by the app watcher.
|
|
341
|
+
// Extra workspace roots refresh tokens only; contract rescans stay
|
|
342
|
+
// within the app root (nested roots are already covered by the app watcher).
|
|
417
343
|
const additionalRoots = scanRoots.filter((scanRoot) => scanRoot !== fsRoot && !isWithinRoot(fsRoot, scanRoot));
|
|
418
|
-
//
|
|
419
|
-
// source root inside the workspace). Keep only the outermost so one
|
|
420
|
-
// sibling edit settles into one token scan.
|
|
344
|
+
// Roots can nest; keep only the outermost so one sibling edit settles into one token scan.
|
|
421
345
|
const outerAdditionalRoots = additionalRoots
|
|
422
346
|
.sort((a, b) => a.length - b.length)
|
|
423
347
|
.filter((scanRoot, index, list) => !list.slice(0, index).some((outer) => isWithinRoot(outer, scanRoot)));
|
|
@@ -433,9 +357,8 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
433
357
|
rootDirectory: tokenRoot,
|
|
434
358
|
debounceMs: 60,
|
|
435
359
|
onSettled: async (changes) => {
|
|
436
|
-
//
|
|
437
|
-
//
|
|
438
|
-
// edits, so only changes outside the app need a second scan.
|
|
360
|
+
// App edits fire this watcher too; the app watcher already covers them,
|
|
361
|
+
// so only changes outside the app need a second scan.
|
|
439
362
|
const outside = isWithinRoot(tokenRoot, fsRoot)
|
|
440
363
|
? changes.filter((change) => !isWithinRoot(fsRoot, change.absolutePath))
|
|
441
364
|
: changes;
|
|
@@ -456,9 +379,7 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
456
379
|
stream.write(`data: ${JSON.stringify({ revision })}\n\n`);
|
|
457
380
|
},
|
|
458
381
|
close() {
|
|
459
|
-
// Idempotent: the singleton
|
|
460
|
-
// files in one worker, and a dev server shutdown may race an explicit
|
|
461
|
-
// close. Closing twice must not throw.
|
|
382
|
+
// Idempotent: the singleton can be closed twice (tests, shutdown race) without throwing.
|
|
462
383
|
if (!server.listening) {
|
|
463
384
|
state.starting = undefined;
|
|
464
385
|
return closeProjectBridge();
|
|
@@ -480,10 +401,8 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
480
401
|
};
|
|
481
402
|
return handle;
|
|
482
403
|
})();
|
|
483
|
-
// A failed start must not wedge the singleton
|
|
484
|
-
//
|
|
485
|
-
// replayed to every later caller. Observe the rejection and clear the slot
|
|
486
|
-
// (identity-checked so a concurrent successful start is never discarded).
|
|
404
|
+
// A failed start must not wedge the singleton (the Symbol.for key survives
|
|
405
|
+
// HMR): clear the slot, identity-checked so a concurrent start is not discarded.
|
|
487
406
|
starting.catch(() => {
|
|
488
407
|
if (state.starting === starting)
|
|
489
408
|
state.starting = undefined;
|
|
@@ -494,8 +413,6 @@ export async function ensureSidecar(root, options = {}) {
|
|
|
494
413
|
function respond(req, res, currentManifest, currentGeneration, streams, receiveContracts) {
|
|
495
414
|
const requestUrl = req.url ?? "";
|
|
496
415
|
const url = requestUrl.split("?")[0];
|
|
497
|
-
// Loader postings aggregate component contracts (Stage 5). Loopback-only by
|
|
498
|
-
// virtue of the bind address; payload size is capped defensively.
|
|
499
416
|
if (url === `${NUDGE_UI_ROUTE_PREFIX}contracts` && req.method === "POST") {
|
|
500
417
|
let body = "";
|
|
501
418
|
req.on("data", (chunk) => {
|
|
@@ -533,8 +450,6 @@ function respond(req, res, currentManifest, currentGeneration, streams, receiveC
|
|
|
533
450
|
return;
|
|
534
451
|
}
|
|
535
452
|
if (url === NUDGE_UI_MANIFEST_PATH) {
|
|
536
|
-
// The served snapshot carries its revision so clients can reconcile
|
|
537
|
-
// against SSE notifications instead of guessing.
|
|
538
453
|
const body = `${JSON.stringify({
|
|
539
454
|
...currentManifest(),
|
|
540
455
|
revision: currentGeneration(),
|
|
@@ -571,7 +486,7 @@ function respond(req, res, currentManifest, currentGeneration, streams, receiveC
|
|
|
571
486
|
res.write(": nudge-ui reload stream\n\n");
|
|
572
487
|
streams.add(res);
|
|
573
488
|
res.on("close", () => streams.delete(res));
|
|
574
|
-
//
|
|
489
|
+
// Send the current revision first so late subscribers do not miss a change.
|
|
575
490
|
res.write(`data: ${JSON.stringify({ revision: currentGeneration() })}\n\n`);
|
|
576
491
|
return;
|
|
577
492
|
}
|
|
@@ -1,18 +1,4 @@
|
|
|
1
1
|
import type { ComponentModuleProtocols } from "../../compiler/componentPolicyResolution.js";
|
|
2
|
-
/**
|
|
3
|
-
* `withNudgeUi(nextConfig)` — the single user touchpoint (ADR-0010).
|
|
4
|
-
*
|
|
5
|
-
* Development-phase gated per ADR-0002: the returned config factory
|
|
6
|
-
* instruments only `next dev` (`PHASE_DEVELOPMENT_SERVER` with
|
|
7
|
-
* `NODE_ENV=development`). Every other phase returns the original
|
|
8
|
-
* configuration untouched and nothing is registered, spawned, or injected.
|
|
9
|
-
* Production builds cannot observe Nudge UI.
|
|
10
|
-
*
|
|
11
|
-
* The wrapper is written against a structural subset of Next's config types
|
|
12
|
-
* so this package stays typecheckable without `next` installed; consumers
|
|
13
|
-
* pass their real NextConfig object straight through.
|
|
14
|
-
*/
|
|
15
|
-
/** Structural subset of Next.js config this wrapper reads and writes. */
|
|
16
2
|
export interface NudgeUiNextConfig {
|
|
17
3
|
[key: string]: unknown;
|
|
18
4
|
turbopack?: {
|
|
@@ -26,7 +12,6 @@ export interface NudgeUiNextConfig {
|
|
|
26
12
|
rewrites?: (() => Promise<RewritesShape> | RewritesShape) | RewritesShape;
|
|
27
13
|
transpilePackages?: string[];
|
|
28
14
|
}
|
|
29
|
-
/** Host-specific policy additions passed to the shared source compiler. */
|
|
30
15
|
export interface NudgeUiNextOptions {
|
|
31
16
|
/** `false` returns the configuration untouched. `NUDGE_UI=0` has the same effect for one run. */
|
|
32
17
|
readonly enabled?: boolean;
|
|
@@ -47,22 +32,6 @@ export interface RewritesShape {
|
|
|
47
32
|
}
|
|
48
33
|
/** Mirrors next/constants PHASE_DEVELOPMENT_SERVER. */
|
|
49
34
|
export declare const DEVELOPMENT_SERVER_PHASE = "phase-development-server";
|
|
50
|
-
/**
|
|
51
|
-
* Wraps a Next.js configuration with Nudge UI instrumentation.
|
|
52
|
-
*
|
|
53
|
-
* Two input forms are supported:
|
|
54
|
-
*
|
|
55
|
-
* - **Function form (recommended):** pass `(phase) => nextConfig`; the
|
|
56
|
-
* wrapper resolves and instruments ONLY for PHASE_DEVELOPMENT_SERVER, so
|
|
57
|
-
* `NODE_ENV=development next build` cannot register instrumentation
|
|
58
|
-
* (ADR-0002) regardless of environment tricks.
|
|
59
|
-
* - **Object form:** converted to a phase-aware config factory. This keeps
|
|
60
|
-
* the convenient `withNudgeUi(nextConfig)` invocation while ensuring Next
|
|
61
|
-
* supplies the phase before any instrumentation can be registered.
|
|
62
|
-
*
|
|
63
|
-
* @param config The application's existing configuration or a config factory.
|
|
64
|
-
* @returns A configuration (or factory) to export in its place.
|
|
65
|
-
*/
|
|
66
35
|
/** Function form: gates instrumentation on PHASE_DEVELOPMENT_SERVER. */
|
|
67
36
|
export declare function withNudgeUi<T extends object>(factory: (phase: string) => T, options?: NudgeUiNextOptions): (phase: string) => T;
|
|
68
37
|
/** Object form: returns a phase-aware Next.js config factory. */
|
|
@@ -8,11 +8,7 @@ import { isNudgeUiEnabled } from "../environment.js";
|
|
|
8
8
|
import { NUDGE_UI_EDITOR_QUERY_PARAM, NUDGE_UI_EDITOR_QUERY_VALUE, NUDGE_UI_ROUTE_PREFIX, } from "../../transport/index.js";
|
|
9
9
|
const NAMESPACE_PREFIX = NUDGE_UI_ROUTE_PREFIX.slice(0, -1);
|
|
10
10
|
const SUPPORTED_NEXT_RANGE = ">=15.3 <17";
|
|
11
|
-
/**
|
|
12
|
-
* Resolved from the package root so the path is identical whether this module
|
|
13
|
-
* runs from `src/hosts/next/` during development or `dist/hosts/next/` when
|
|
14
|
-
* installed. The loaders only ever exist in `dist`.
|
|
15
|
-
*/
|
|
11
|
+
/** Resolved from the package root so the path is the same from `src/` and `dist/`. */
|
|
16
12
|
function loaderPaths() {
|
|
17
13
|
const loaders = new URL("../../../dist/hosts/next/loaders/", import.meta.url);
|
|
18
14
|
return {
|
|
@@ -20,7 +16,6 @@ function loaderPaths() {
|
|
|
20
16
|
identity: fileURLToPath(new URL("identity-loader.cjs", loaders)),
|
|
21
17
|
};
|
|
22
18
|
}
|
|
23
|
-
/** Absolute directory of a package installed in the host project, or null. */
|
|
24
19
|
function hostPackageDir(root, name) {
|
|
25
20
|
try {
|
|
26
21
|
const require = createRequire(join(root, "package.json"));
|
|
@@ -30,7 +25,6 @@ function hostPackageDir(root, name) {
|
|
|
30
25
|
return null;
|
|
31
26
|
}
|
|
32
27
|
}
|
|
33
|
-
/** Absolute path for an Adapter-owned package export, resolved beside this package. */
|
|
34
28
|
function adapterPackageExport(specifier) {
|
|
35
29
|
try {
|
|
36
30
|
return createRequire(import.meta.url).resolve(specifier);
|
|
@@ -52,14 +46,7 @@ function resolveNextVersion(root) {
|
|
|
52
46
|
return null;
|
|
53
47
|
}
|
|
54
48
|
}
|
|
55
|
-
/**
|
|
56
|
-
* ADR-0010 gates instrumentation on the supported range: a RESOLVED version
|
|
57
|
-
* outside it fails closed (no registration) with a diagnostic — instrumenting
|
|
58
|
-
* an unsupported compiler risks breaking the host build. An unresolvable
|
|
59
|
-
* version gets the benefit of the doubt and proceeds with a diagnostic,
|
|
60
|
-
* since refusing to work because we could not read a version number would
|
|
61
|
-
* make the adapter brittle for no safety gain.
|
|
62
|
-
*/
|
|
49
|
+
/** Fails closed on a resolved unsupported version; an unresolvable one proceeds with a diagnostic. */
|
|
63
50
|
function gateUnsupportedVersion(version) {
|
|
64
51
|
if (version && isVersionSupported(version))
|
|
65
52
|
return true;
|
|
@@ -74,7 +61,6 @@ function isVersionSupported(version) {
|
|
|
74
61
|
return false;
|
|
75
62
|
const major = Number(match[1]);
|
|
76
63
|
const minor = Number(match[2]);
|
|
77
|
-
// >=15.3 <17
|
|
78
64
|
return (major === 15 && minor >= 3) || (major >= 16 && major < 17);
|
|
79
65
|
}
|
|
80
66
|
function collectUserRewriteSources(rewrites) {
|
|
@@ -88,14 +74,7 @@ function collectUserRewriteSources(rewrites) {
|
|
|
88
74
|
}
|
|
89
75
|
/** Mirrors next/constants PHASE_DEVELOPMENT_SERVER. */
|
|
90
76
|
export const DEVELOPMENT_SERVER_PHASE = "phase-development-server";
|
|
91
|
-
/**
|
|
92
|
-
* Returns whether this config evaluation belongs to Next's development
|
|
93
|
-
* server. The phase argument is supplied by Next when it invokes a config
|
|
94
|
-
* factory, so object exports are converted to factories before any
|
|
95
|
-
* instrumentation can run. Keeping the phase check here means an object
|
|
96
|
-
* export cannot accidentally instrument `next build` when a caller has
|
|
97
|
-
* forced `NODE_ENV=development`.
|
|
98
|
-
*/
|
|
77
|
+
/** Object exports are converted to factories so the phase is always available; the phase gate keeps `NODE_ENV=development next build` uninstrumented. */
|
|
99
78
|
function isDevelopmentEvaluation(phase) {
|
|
100
79
|
return process.env.NODE_ENV === "development" && phase === DEVELOPMENT_SERVER_PHASE;
|
|
101
80
|
}
|
|
@@ -111,19 +90,15 @@ export function withNudgeUi(config = {}, options = {}) {
|
|
|
111
90
|
};
|
|
112
91
|
}
|
|
113
92
|
function instrumentConfig(config, options) {
|
|
114
|
-
// Consumers pass their real NextConfig
|
|
115
|
-
// internal view so this package stays typecheckable without next installed.
|
|
93
|
+
// Consumers pass their real NextConfig; the structural view keeps this package typecheckable without next installed.
|
|
116
94
|
const source = config;
|
|
117
95
|
const root = process.cwd();
|
|
118
|
-
// Fail closed per ADR-0010 when the resolved version is unsupported.
|
|
119
96
|
if (!gateUnsupportedVersion(resolveNextVersion(root))) {
|
|
120
97
|
return config;
|
|
121
98
|
}
|
|
122
99
|
const sourceRoots = options.sourceRoots?.map((sourceRoot) => resolve(root, sourceRoot));
|
|
123
100
|
const bridgeOrigin = nextDevelopmentOrigin();
|
|
124
|
-
// ensureSidecar is a per-process singleton; awaiting it wherever the port
|
|
125
|
-
// is needed removes any config-evaluation race. The same authored roots
|
|
126
|
-
// reach token discovery so workspace CSS is visible to both integrations.
|
|
101
|
+
// ensureSidecar is a per-process singleton; awaiting it wherever the port is needed removes any config-evaluation race.
|
|
127
102
|
const sidecarPort = () => ensureSidecar(root, {
|
|
128
103
|
manifest: buildManifest({ root }),
|
|
129
104
|
tokens: true,
|
|
@@ -137,14 +112,7 @@ function instrumentConfig(config, options) {
|
|
|
137
112
|
return 0;
|
|
138
113
|
});
|
|
139
114
|
const nextConfig = { ...source };
|
|
140
|
-
|
|
141
|
-
// Workspace Nudge UI packages ship raw TypeScript that SWC refuses to
|
|
142
|
-
// compile from node_modules unless listed (see feature-plan appendix).
|
|
143
|
-
const nudgeUiPackages = [
|
|
144
|
-
"nudge-ui",
|
|
145
|
-
"../../inspector/index.ts",
|
|
146
|
-
"../../css/index.ts",
|
|
147
|
-
];
|
|
115
|
+
const nudgeUiPackages = ["nudge-ui"];
|
|
148
116
|
const userTranspile = Array.isArray(source.transpilePackages)
|
|
149
117
|
? source.transpilePackages
|
|
150
118
|
: [];
|
|
@@ -152,7 +120,6 @@ function instrumentConfig(config, options) {
|
|
|
152
120
|
...userTranspile,
|
|
153
121
|
...nudgeUiPackages.filter((name) => !userTranspile.includes(name)),
|
|
154
122
|
];
|
|
155
|
-
// --- Turbopack rules (primary compiler) ---------------------------------
|
|
156
123
|
const turbopackRules = {
|
|
157
124
|
...(source.turbopack?.rules ?? {}),
|
|
158
125
|
};
|
|
@@ -168,18 +135,12 @@ function instrumentConfig(config, options) {
|
|
|
168
135
|
loader: paths.plugin,
|
|
169
136
|
options: loaderOptions,
|
|
170
137
|
}],
|
|
171
|
-
// 'foreign'
|
|
172
|
-
// `not: foreign` confines the loader to first-party sources. The path
|
|
173
|
-
// guard additionally keeps build output (.next) out of scope.
|
|
138
|
+
// 'foreign' marks dependency code in Turbopack; `not: foreign` plus the path guard confines the loader to first-party sources outside .next.
|
|
174
139
|
condition: {
|
|
175
140
|
all: [
|
|
176
141
|
{ not: "foreign" },
|
|
177
142
|
{ not: { path: "(**/)?\\.next/**" } },
|
|
178
|
-
// Workspace symlinks are
|
|
179
|
-
// the Nudge UI packages themselves must be excluded explicitly:
|
|
180
|
-
// instrumenting the inspector's own UI would wrap every control in
|
|
181
|
-
// override boundaries and pollute the panel with identity attrs.
|
|
182
|
-
// The list is shared with the loader's runtime scope check.
|
|
143
|
+
// Workspace symlinks are not 'foreign', so Nudge UI's own packages must be excluded explicitly or the inspector would instrument itself.
|
|
183
144
|
{
|
|
184
145
|
not: {
|
|
185
146
|
path: nudgeUiRepositoryPackagePath,
|
|
@@ -188,11 +149,7 @@ function instrumentConfig(config, options) {
|
|
|
188
149
|
],
|
|
189
150
|
},
|
|
190
151
|
};
|
|
191
|
-
/**
|
|
192
|
-
* Rules are COMPOSED with any user rule for the same key by building a
|
|
193
|
-
* rule collection (Next supports arrays of items per glob) — silently
|
|
194
|
-
* overwriting host configuration is never acceptable.
|
|
195
|
-
*/
|
|
152
|
+
/** Composed with any user rule for the same key: silently overwriting host configuration is never acceptable. */
|
|
196
153
|
const compose = (key, rule) => {
|
|
197
154
|
const existing = turbopackRules[key];
|
|
198
155
|
if (existing === undefined) {
|
|
@@ -205,12 +162,8 @@ function instrumentConfig(config, options) {
|
|
|
205
162
|
compose("*.tsx", { ...identityRule });
|
|
206
163
|
compose("*.jsx", { ...identityRule });
|
|
207
164
|
}
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
// consumers. Without an alias, SWC resolves their `react` imports against
|
|
211
|
-
// those copies while the host application runs its own — two Reacts in one
|
|
212
|
-
// document, and inspector state updates silently stop rendering. Aliasing
|
|
213
|
-
// to the host project's copies pins one instance for every compilation.
|
|
165
|
+
// Nudge UI carries its own react copy for standalone consumers; without an alias
|
|
166
|
+
// SWC loads both, and two Reacts in one document silently break inspector rendering.
|
|
214
167
|
const hostReact = hostPackageDir(root, "react");
|
|
215
168
|
const hostReactDom = hostPackageDir(root, "react-dom");
|
|
216
169
|
const componentRuntime = adapterPackageExport("nudge-ui/internal/component-runtime");
|
|
@@ -234,7 +187,6 @@ function instrumentConfig(config, options) {
|
|
|
234
187
|
...(nextConfig.turbopack ?? {}),
|
|
235
188
|
rules: turbopackRules,
|
|
236
189
|
};
|
|
237
|
-
// --- Webpack mode (secondary target, Stage 6 verifies parity) ----------
|
|
238
190
|
const userWebpack = source.webpack;
|
|
239
191
|
nextConfig.webpack = (webpackConfig, context) => {
|
|
240
192
|
const merged = userWebpack ? userWebpack(webpackConfig, context) : webpackConfig;
|
|
@@ -245,11 +197,8 @@ function instrumentConfig(config, options) {
|
|
|
245
197
|
const userAlias = (resolveConfig.alias ?? {});
|
|
246
198
|
const rules = Array.isArray(module.rules) ? [...module.rules] : [];
|
|
247
199
|
const paths = loaderPaths();
|
|
248
|
-
// Next 16 removed the webpack CSS pipeline entirely
|
|
249
|
-
//
|
|
250
|
-
// stylesheets cannot run under `next dev --webpack` on 16 at all,
|
|
251
|
-
// with or without Nudge UI. Registration stays so Next 15.x within
|
|
252
|
-
// the supported range keeps working; flag the combination loudly.
|
|
200
|
+
// Next 16 removed the webpack CSS pipeline entirely (nextjs.org/docs/messages/built-in-css-disabled);
|
|
201
|
+
// registration stays so Next 15.x works, and the combination is flagged loudly.
|
|
253
202
|
const version = resolveNextVersion(root);
|
|
254
203
|
if (version && Number(version.split(".")[0]) >= 16) {
|
|
255
204
|
console.warn("[nudge-ui] Next.js " + version + " webpack dev mode has no CSS support "
|
|
@@ -279,7 +228,6 @@ function instrumentConfig(config, options) {
|
|
|
279
228
|
module: { ...module, rules },
|
|
280
229
|
};
|
|
281
230
|
};
|
|
282
|
-
// --- Manifest transport rewrite ----------------------------------------
|
|
283
231
|
const proxyRewrite = (port) => ({
|
|
284
232
|
source: `${NUDGE_UI_ROUTE_PREFIX}:path*`,
|
|
285
233
|
destination: `http://127.0.0.1:${port}${NUDGE_UI_ROUTE_PREFIX}:path*`,
|
|
@@ -306,9 +254,7 @@ function instrumentConfig(config, options) {
|
|
|
306
254
|
+ "your rewrites also declare it and will be shadowed:", collisions);
|
|
307
255
|
}
|
|
308
256
|
return {
|
|
309
|
-
// Port 0 (
|
|
310
|
-
// surfaces an honest fetch failure instead of silently pretending to
|
|
311
|
-
// work.
|
|
257
|
+
// Port 0 (failed sidecar) yields a dead destination: an honest fetch failure beats silently pretending to work.
|
|
312
258
|
beforeFiles: [
|
|
313
259
|
proxyRewrite(port),
|
|
314
260
|
editorRewrite(port, { key: "accept", value: ".*text/html.*" }),
|
|
@@ -319,10 +265,7 @@ function instrumentConfig(config, options) {
|
|
|
319
265
|
fallback: shape.fallback ?? [],
|
|
320
266
|
};
|
|
321
267
|
};
|
|
322
|
-
// Preserve callability while keeping our async resolver.
|
|
323
268
|
nextConfig.rewrites = resolveRewrites;
|
|
324
|
-
// The structural view carries every original field through the spread;
|
|
325
|
-
// consumers keep their NextConfig typing via the generic passthrough.
|
|
326
269
|
return nextConfig;
|
|
327
270
|
}
|
|
328
271
|
function nextDevelopmentOrigin() {
|
|
@@ -2,7 +2,6 @@ export interface ProjectBridgeBrowserConfig {
|
|
|
2
2
|
readonly baseUrl: string;
|
|
3
3
|
readonly autoConnect: true;
|
|
4
4
|
}
|
|
5
|
-
/** Starts the optional project bridge installed beside the host application. */
|
|
6
5
|
export declare function startOptionalProjectBridge(input: {
|
|
7
6
|
readonly appRoot: string;
|
|
8
7
|
readonly projectId: string;
|
|
@@ -14,7 +13,6 @@ export declare function startOptionalProjectBridge(input: {
|
|
|
14
13
|
browser: ProjectBridgeBrowserConfig;
|
|
15
14
|
close(): Promise<void>;
|
|
16
15
|
} | null>;
|
|
17
|
-
/** Returns the browser origin for a loopback HTTP server address. */
|
|
18
16
|
export declare function loopbackOrigin(address: {
|
|
19
17
|
address: string;
|
|
20
18
|
port: number;
|
|
@@ -6,12 +6,11 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
6
6
|
}
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
|
-
import { existsSync } from "node:fs";
|
|
10
9
|
import { createRequire } from "node:module";
|
|
11
|
-
import {
|
|
10
|
+
import { join } from "node:path";
|
|
12
11
|
import { pathToFileURL } from "node:url";
|
|
12
|
+
import { findProjectMcpRoot } from "../project/mcpPackage.js";
|
|
13
13
|
const runningBridges = new Map();
|
|
14
|
-
/** Starts the optional project bridge installed beside the host application. */
|
|
15
14
|
export async function startOptionalProjectBridge(input) {
|
|
16
15
|
const key = `${input.appRoot}\u0000${input.origin}`;
|
|
17
16
|
const running = runningBridges.get(key);
|
|
@@ -28,7 +27,7 @@ export async function startOptionalProjectBridge(input) {
|
|
|
28
27
|
async function launchOptionalProjectBridge(input, key) {
|
|
29
28
|
let modulePath;
|
|
30
29
|
try {
|
|
31
|
-
if (
|
|
30
|
+
if (findProjectMcpRoot(input.appRoot) === null) {
|
|
32
31
|
runningBridges.delete(key);
|
|
33
32
|
return null;
|
|
34
33
|
}
|
|
@@ -73,21 +72,6 @@ async function launchOptionalProjectBridge(input, key) {
|
|
|
73
72
|
return null;
|
|
74
73
|
}
|
|
75
74
|
}
|
|
76
|
-
function isPnpRuntime() {
|
|
77
|
-
return typeof process.versions.pnp === "string";
|
|
78
|
-
}
|
|
79
|
-
function hasProjectInstalledMcp(appRoot) {
|
|
80
|
-
let directory = appRoot;
|
|
81
|
-
const root = parse(directory).root;
|
|
82
|
-
for (;;) {
|
|
83
|
-
if (existsSync(join(directory, "node_modules", "@nudge-ui", "mcp", "package.json")))
|
|
84
|
-
return true;
|
|
85
|
-
if (directory === root)
|
|
86
|
-
return false;
|
|
87
|
-
directory = dirname(directory);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/** Returns the browser origin for a loopback HTTP server address. */
|
|
91
75
|
export function loopbackOrigin(address, protocol = "http") {
|
|
92
76
|
const host = address.address === "::" || address.address === "::1"
|
|
93
77
|
? "[::1]"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Must run before the application's renderer loads; extends any existing DevTools hook and never replaces it. */
|
|
2
|
+
export const REACT_RENDERER_CAPTURE_SCRIPT = [
|
|
3
|
+
"(function(w){",
|
|
4
|
+
"var h=w.__REACT_DEVTOOLS_GLOBAL_HOOK__;",
|
|
5
|
+
"if(!h){var n=0;h=w.__REACT_DEVTOOLS_GLOBAL_HOOK__={renderers:new Map(),supportsFiber:true,",
|
|
6
|
+
"inject:function(i){var id=n++;h.renderers.set(id,i);return id},",
|
|
7
|
+
"onScheduleFiberRoot:function(){},onCommitFiberRoot:function(){},onCommitFiberUnmount:function(){}};return}",
|
|
8
|
+
"if(h.__nudgeUiRendererCapture||typeof h.inject!=='function'||!(h.renderers instanceof Map))return;",
|
|
9
|
+
"h.__nudgeUiRendererCapture=true;var inject=h.inject;",
|
|
10
|
+
"h.inject=function(i){var id=inject.apply(this,arguments);if(!h.renderers.has(id))h.renderers.set(id,i);return id}",
|
|
11
|
+
"})(window);",
|
|
12
|
+
].join("");
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
/** Parsed arguments for `nudge-ui serve`. */
|
|
2
1
|
export interface ServeCommandOptions {
|
|
3
2
|
readonly rootDirectory: string;
|
|
4
3
|
readonly host: "127.0.0.1" | "::1" | "localhost";
|
|
5
4
|
readonly port: number;
|
|
6
5
|
}
|
|
7
|
-
/** Parses the standalone CLI's intentionally small command surface. */
|
|
8
6
|
export declare function parseServeArguments(args: readonly string[], currentDirectory?: string): ServeCommandOptions;
|
|
9
|
-
/** Starts the CLI server and waits until the process receives a termination signal. */
|
|
10
7
|
export declare function runServeCommand(options: ServeCommandOptions): Promise<void>;
|
|
11
|
-
/** Runs the standalone command. */
|
|
12
8
|
export declare function main(args?: string[], packageVersion?: string): Promise<void>;
|