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,346 @@
|
|
|
1
|
+
import { parse } from "@babel/parser";
|
|
2
|
+
import MagicString from "magic-string";
|
|
3
|
+
import { posix } from "node:path";
|
|
4
|
+
import { injectIdentity } from "../../compiler/reactIdentity.js";
|
|
5
|
+
/**
|
|
6
|
+
* Pure Next.js identity-loader Module (ADR-0010).
|
|
7
|
+
*
|
|
8
|
+
* Wraps the shared `injectIdentity` Module with Next-specific policy:
|
|
9
|
+
*
|
|
10
|
+
* - client-component detection gates the semantic runtime import (directive
|
|
11
|
+
* scan, Pages Router rule); server-component modules receive identity
|
|
12
|
+
* attributes only and fail closed;
|
|
13
|
+
* - `<html>`-rendering App Router root layouts receive a dev-only server
|
|
14
|
+
* script inside `<body>` that bootstraps the inspector;
|
|
15
|
+
* - excluded paths are rejected before any parse work happens.
|
|
16
|
+
*
|
|
17
|
+
* The transform is deterministic by contract: Turbopack compiles each module
|
|
18
|
+
* once per environment (react-server and client conditions), so identical
|
|
19
|
+
* input must produce identical output across repeated runs.
|
|
20
|
+
*/
|
|
21
|
+
/** Extensions whose sources can carry JSX and therefore identity targets. */
|
|
22
|
+
const APP_SOURCE_EXT = /\.([cm]?[jt]sx?)$/i;
|
|
23
|
+
/** Parseable-by-the-shared-Module extensions (must contain JSX). */
|
|
24
|
+
const JSX_SOURCE_EXT = /\.(tsx|jsx)$/;
|
|
25
|
+
/** Directory segments never instrumented (build output and dependencies). */
|
|
26
|
+
const EXCLUDED_SEGMENTS = /(^|\/)(node_modules|\.next)\//i;
|
|
27
|
+
const MOUNT_LOCAL_NAME = "__NudgeUiMountElement";
|
|
28
|
+
const NEXT_COMPONENT_RUNTIME_MODULE = "nudge-ui/internal/component-runtime";
|
|
29
|
+
const MOUNT_IMPORT = `import { createElement as __NudgeUiCreateElement } from "react";\n`
|
|
30
|
+
+ `import { NudgeUiMount as ${MOUNT_LOCAL_NAME} } from "nudge-ui/internal/next/mount";\n`;
|
|
31
|
+
// The mount renders through an expression container invoking createElement
|
|
32
|
+
// rather than through a JSX element: a bare `{Component}` would hand React
|
|
33
|
+
// the function itself ("Functions are not valid as a React child"), while an
|
|
34
|
+
// element `<Cmp />` would be visible to later identity passes. A
|
|
35
|
+
// `createElement(...)` call produces no JSX nodes — nothing to attribute or
|
|
36
|
+
// wrap — while still yielding a real element for React to render.
|
|
37
|
+
const MOUNT_JSX = `\n {__NudgeUiCreateElement(${MOUNT_LOCAL_NAME})}\n `;
|
|
38
|
+
/**
|
|
39
|
+
* Transforms one application module for development rendering, or returns
|
|
40
|
+
* `null` when nothing applies and the caller must serve the original bytes.
|
|
41
|
+
*
|
|
42
|
+
* `moduleId` is an absolute or project-relative path; only path shapes are
|
|
43
|
+
* inspected, never the filesystem.
|
|
44
|
+
*/
|
|
45
|
+
export function transformNextModuleSource(source, moduleId, options = {}) {
|
|
46
|
+
// ADR-0002 phase gate, defense-in-depth beneath the wrapper: Next sets
|
|
47
|
+
// NEXT_PHASE per invocation, so even a misconfigured
|
|
48
|
+
// NODE_ENV=development production build refuses every transform here.
|
|
49
|
+
// Absent phases still transform — exotic dev harnesses keep working.
|
|
50
|
+
if (process.env.NEXT_PHASE === "phase-production-build")
|
|
51
|
+
return null;
|
|
52
|
+
const normalized = moduleId.split("\\").join("/");
|
|
53
|
+
if (!APP_SOURCE_EXT.test(normalized))
|
|
54
|
+
return null;
|
|
55
|
+
if (EXCLUDED_SEGMENTS.test(normalized))
|
|
56
|
+
return null;
|
|
57
|
+
const clientComponent = hasUseClientDirective(source) || isPagesRouterModule(normalized, options);
|
|
58
|
+
const identity = injectIdentity(source, normalized, options.root, {
|
|
59
|
+
instrumentComponents: clientComponent && options.instrumentComponents !== false,
|
|
60
|
+
hostPolicy: options.hostPolicy,
|
|
61
|
+
componentRuntimeModule: options.componentRuntimeModule ?? NEXT_COMPONENT_RUNTIME_MODULE,
|
|
62
|
+
});
|
|
63
|
+
let code = identity ? identity.code : source;
|
|
64
|
+
let map = identity ? identity.map : null;
|
|
65
|
+
let layoutInstrumented = false;
|
|
66
|
+
if (identity && clientComponent) {
|
|
67
|
+
// The shared Module PREPENDS the runtime import, which is fine under
|
|
68
|
+
// Vite but fatal under SWC: a module starting with an import is no
|
|
69
|
+
// longer a directive prologue, so Next rejects the file ("use client
|
|
70
|
+
// must be placed before other expressions"). Relocate the prepended
|
|
71
|
+
// import to just past the directive prologue.
|
|
72
|
+
code = relocatePrependedRuntimeImport(code, options.componentRuntimeModule ?? NEXT_COMPONENT_RUNTIME_MODULE);
|
|
73
|
+
}
|
|
74
|
+
if (isAppRootLayoutPath(normalized)) {
|
|
75
|
+
const mounted = instrumentRootLayout(code);
|
|
76
|
+
if (mounted) {
|
|
77
|
+
code = mounted.code;
|
|
78
|
+
map = mounted.map;
|
|
79
|
+
layoutInstrumented = true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (!identity && !layoutInstrumented)
|
|
83
|
+
return null;
|
|
84
|
+
// When both passes ran, the layout map is composed against the identity
|
|
85
|
+
// pass's output rather than the original source. Dev-only tooling tolerates
|
|
86
|
+
// this v1 simplification; the identity map (the one prompts rely on) is
|
|
87
|
+
// always against the original bytes because the layout pass runs after it.
|
|
88
|
+
return { code, map, clientComponent, layoutInstrumented };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Moves the shared Module's prepended runtime import past the directive
|
|
92
|
+
* prologue when the source began with one. Sources without a leading
|
|
93
|
+
* directive are returned untouched (the import is already first).
|
|
94
|
+
*/
|
|
95
|
+
function relocatePrependedRuntimeImport(code, runtimeModule) {
|
|
96
|
+
const runtimeImport = `import { instrumentReactComponent as __nudgeUiInstrumentComponent } from ${JSON.stringify(runtimeModule)};\n`;
|
|
97
|
+
if (!code.startsWith(runtimeImport))
|
|
98
|
+
return code;
|
|
99
|
+
const rest = code.slice(runtimeImport.length);
|
|
100
|
+
const insertAt = directivePrologueEnd(rest);
|
|
101
|
+
return rest.slice(0, insertAt) + runtimeImport + rest.slice(insertAt);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* True when the module resolves inside the Pages Router directory, anchored
|
|
105
|
+
* to the router root: only `pages/**` or `src/pages/**` count. An App Router
|
|
106
|
+
* route nested at `app/pages/Card.tsx` is a server component and MUST NOT
|
|
107
|
+
* match — wrapping it with the client runtime would break the RSC graph.
|
|
108
|
+
*
|
|
109
|
+
* `pagesDir` may itself contain slashes ("src/pages") for exotic layouts.
|
|
110
|
+
*/
|
|
111
|
+
function isPagesRouterModule(normalizedId, options) {
|
|
112
|
+
const pagesDir = (options.pagesDir ?? "pages").split("\\").join("/").replace(/^\/+|\/+$/g, "");
|
|
113
|
+
if (pagesDir.length === 0)
|
|
114
|
+
return false;
|
|
115
|
+
// Anchor against the project root when known; without a root we cannot
|
|
116
|
+
// distinguish router roots from same-named directories, so fail closed.
|
|
117
|
+
const root = options.root ? options.root.split("\\").join("/").replace(/\/+$/, "") : null;
|
|
118
|
+
const relative = root
|
|
119
|
+
? normalizedId.startsWith(`${root}/`)
|
|
120
|
+
? normalizedId.slice(root.length + 1)
|
|
121
|
+
: normalizedId.startsWith("./")
|
|
122
|
+
? normalizedId.slice(2)
|
|
123
|
+
: normalizedId
|
|
124
|
+
: normalizedId;
|
|
125
|
+
return relative === pagesDir
|
|
126
|
+
|| relative.startsWith(`${pagesDir}/`)
|
|
127
|
+
|| (relative.startsWith("src/")
|
|
128
|
+
&& (relative.slice(4) === pagesDir || relative.slice(4).startsWith(`${pagesDir}/`)));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* True for App Router layout modules. Route groups nest more `app` segments
|
|
132
|
+
* (`app/(marketing)/layout.tsx`), so any `app` ancestor segment counts; the
|
|
133
|
+
* `<html>` guard decides whether a mount actually belongs.
|
|
134
|
+
*/
|
|
135
|
+
function isAppRootLayoutPath(normalizedId) {
|
|
136
|
+
if (!JSX_SOURCE_EXT.test(normalizedId))
|
|
137
|
+
return false;
|
|
138
|
+
const parsed = posix.parse(normalizedId);
|
|
139
|
+
if (!/^layout\.[cm]?[jt]sx?$/i.test(parsed.base))
|
|
140
|
+
return false;
|
|
141
|
+
return parsed.dir === "app" || parsed.dir.endsWith("/app") || parsed.dir.includes("/app/");
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Detects a module-level `"use client"` directive without a full parse.
|
|
145
|
+
*
|
|
146
|
+
* Only comments, whitespace, a shebang, and other directive prologues may
|
|
147
|
+
* precede it; anything else ends the directive prologue per the ECMAScript
|
|
148
|
+
* spec, which keeps the scan exact rather than a loose substring search.
|
|
149
|
+
*/
|
|
150
|
+
export function hasUseClientDirective(source) {
|
|
151
|
+
let index = 0;
|
|
152
|
+
const length = source.length;
|
|
153
|
+
// A shebang may precede the directive prologue.
|
|
154
|
+
if (source.startsWith("#!")) {
|
|
155
|
+
const lineEnd = source.indexOf("\n", index);
|
|
156
|
+
if (lineEnd === -1)
|
|
157
|
+
return false;
|
|
158
|
+
index = lineEnd + 1;
|
|
159
|
+
}
|
|
160
|
+
while (index < length) {
|
|
161
|
+
const char = source[index];
|
|
162
|
+
if (char === " " || char === "\t" || char === "\n" || char === "\r") {
|
|
163
|
+
index += 1;
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (char === "/" && source[index + 1] === "/") {
|
|
167
|
+
const lineEnd = source.indexOf("\n", index);
|
|
168
|
+
if (lineEnd === -1)
|
|
169
|
+
return false;
|
|
170
|
+
index = lineEnd + 1;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (char === "/" && source[index + 1] === "*") {
|
|
174
|
+
const blockEnd = source.indexOf("*/", index + 2);
|
|
175
|
+
if (blockEnd === -1)
|
|
176
|
+
return false;
|
|
177
|
+
index = blockEnd + 2;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (char === "\"" || char === "'") {
|
|
181
|
+
const quote = char;
|
|
182
|
+
let cursor = index + 1;
|
|
183
|
+
let literal = "";
|
|
184
|
+
let closed = false;
|
|
185
|
+
while (cursor < length) {
|
|
186
|
+
const current = source[cursor];
|
|
187
|
+
if (current === "\\") {
|
|
188
|
+
literal += source.slice(cursor, cursor + 2);
|
|
189
|
+
cursor += 2;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (current === quote) {
|
|
193
|
+
closed = true;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
literal += current;
|
|
197
|
+
cursor += 1;
|
|
198
|
+
}
|
|
199
|
+
if (!closed)
|
|
200
|
+
return false;
|
|
201
|
+
if (literal === "use client")
|
|
202
|
+
return true;
|
|
203
|
+
// Another directive prologue ("use strict", "use server", …) may still
|
|
204
|
+
// be followed by the target directive; anything else ends the scan.
|
|
205
|
+
let after = cursor + 1;
|
|
206
|
+
while (after < length && /\s/.test(source.charAt(after)))
|
|
207
|
+
after += 1;
|
|
208
|
+
if (source.charAt(after) === ";")
|
|
209
|
+
after += 1;
|
|
210
|
+
// A directive must be its own statement; a string expression used as a
|
|
211
|
+
// value would be followed by other tokens on the same statement.
|
|
212
|
+
if (after < length && !/[\n\r;]/.test(source.charAt(after)) && source[after - 1] !== ";") {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
index = after;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Appends the inspector mount as the last child of a literal rendered `<body>`
|
|
224
|
+
* element. The server-rendered script must be in the initial document so it
|
|
225
|
+
* does not rely on hydration of a client component in the root layout. A
|
|
226
|
+
* layout with no literal body is left unchanged rather than emitting an
|
|
227
|
+
* invalid direct child of `<html>`.
|
|
228
|
+
*
|
|
229
|
+
* Idempotence: the aliased mount import doubles as the marker — a module that
|
|
230
|
+
* already carries it is left untouched, so running the loader twice (as
|
|
231
|
+
* Turbopack does across react-server and client conditions) cannot stack
|
|
232
|
+
* duplicates.
|
|
233
|
+
*/
|
|
234
|
+
export function instrumentRootLayout(source) {
|
|
235
|
+
if (source.includes(MOUNT_LOCAL_NAME))
|
|
236
|
+
return null;
|
|
237
|
+
let ast;
|
|
238
|
+
try {
|
|
239
|
+
ast = parse(source, {
|
|
240
|
+
sourceType: "module",
|
|
241
|
+
plugins: ["jsx", "typescript"],
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
const htmlElement = findElement(ast, "html");
|
|
248
|
+
if (!htmlElement)
|
|
249
|
+
return null;
|
|
250
|
+
const bodyElement = findElement(htmlElement, "body");
|
|
251
|
+
if (!bodyElement?.closingElement?.start)
|
|
252
|
+
return null;
|
|
253
|
+
const ms = new MagicString(source);
|
|
254
|
+
// The import must land after any directive prologue: prepending ahead of a
|
|
255
|
+
// `"use client"` directive would strip it of prologue status and silently
|
|
256
|
+
// change the module's compilation environment.
|
|
257
|
+
ms.appendLeft(directivePrologueEnd(source), MOUNT_IMPORT);
|
|
258
|
+
ms.appendLeft(bodyElement.closingElement.start, MOUNT_JSX);
|
|
259
|
+
return { code: ms.toString(), map: ms.generateMap({ hires: true }) };
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Offset just past the directive prologue (shebang, comments, directive
|
|
263
|
+
* statements) — the only legal insertion point for new import statements.
|
|
264
|
+
*/
|
|
265
|
+
export function directivePrologueEnd(source) {
|
|
266
|
+
let index = 0;
|
|
267
|
+
const length = source.length;
|
|
268
|
+
if (source.startsWith("#!")) {
|
|
269
|
+
const lineEnd = source.indexOf("\n", index);
|
|
270
|
+
if (lineEnd === -1)
|
|
271
|
+
return length;
|
|
272
|
+
index = lineEnd + 1;
|
|
273
|
+
}
|
|
274
|
+
while (index < length) {
|
|
275
|
+
const char = source[index];
|
|
276
|
+
if (char === " " || char === "\t" || char === "\n" || char === "\r") {
|
|
277
|
+
index += 1;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (char === "/" && source[index + 1] === "/") {
|
|
281
|
+
const lineEnd = source.indexOf("\n", index);
|
|
282
|
+
if (lineEnd === -1)
|
|
283
|
+
return length;
|
|
284
|
+
index = lineEnd + 1;
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (char === "/" && source[index + 1] === "*") {
|
|
288
|
+
const blockEnd = source.indexOf("*/", index + 2);
|
|
289
|
+
if (blockEnd === -1)
|
|
290
|
+
return length;
|
|
291
|
+
index = blockEnd + 2;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
if (char === "\"" || char === "'") {
|
|
295
|
+
const quote = char;
|
|
296
|
+
let cursor = index + 1;
|
|
297
|
+
while (cursor < length) {
|
|
298
|
+
if (source[cursor] === "\\") {
|
|
299
|
+
cursor += 2;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (source[cursor] === quote)
|
|
303
|
+
break;
|
|
304
|
+
cursor += 1;
|
|
305
|
+
}
|
|
306
|
+
// Consume the statement terminator of this directive, then continue.
|
|
307
|
+
let after = cursor + 1;
|
|
308
|
+
while (after < length && /\s/.test(source.charAt(after)))
|
|
309
|
+
after += 1;
|
|
310
|
+
if (source.charAt(after) === ";")
|
|
311
|
+
after += 1;
|
|
312
|
+
index = after;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
return index;
|
|
316
|
+
}
|
|
317
|
+
return length;
|
|
318
|
+
}
|
|
319
|
+
function findElement(node, name) {
|
|
320
|
+
if (!node || typeof node !== "object")
|
|
321
|
+
return null;
|
|
322
|
+
if (node.type === "JSXElement"
|
|
323
|
+
&& node.openingElement?.name?.type === "JSXIdentifier"
|
|
324
|
+
&& node.openingElement.name.name === name) {
|
|
325
|
+
return node;
|
|
326
|
+
}
|
|
327
|
+
for (const child of Object.values(node)) {
|
|
328
|
+
if (Array.isArray(child)) {
|
|
329
|
+
for (const grandchild of child) {
|
|
330
|
+
// SAFETY: This is an ESTree child of an array-valued parent node, which is always an HtmlNode.
|
|
331
|
+
const found = findElement(grandchild, name);
|
|
332
|
+
if (found)
|
|
333
|
+
return found;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else if (
|
|
337
|
+
// SAFETY: The Object.values child is guarded as a non-null object, matching the HtmlNode contract.
|
|
338
|
+
child && typeof child === "object" && child.type) {
|
|
339
|
+
// SAFETY: The indexed template element of an ESTree TemplateLiteral is always an HtmlNode.
|
|
340
|
+
const found = findElement(child, name);
|
|
341
|
+
if (found)
|
|
342
|
+
return found;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return null;
|
|
346
|
+
}
|