chore(deps-dev): bump esbuild from 0.25.12 to 0.28.0#15
Open
dependabot[bot] wants to merge 15 commits into
Open
chore(deps-dev): bump esbuild from 0.25.12 to 0.28.0#15dependabot[bot] wants to merge 15 commits into
dependabot[bot] wants to merge 15 commits into
Conversation
…nders initial screen
Two examples (with-react-navigation, with-drawer-navigation) BUNDLE_FAILed against @react-navigation/native. Many more apps in the ecosystem build on this — adding it now unblocks the cluster. Single shim backs every sub-package: createStackNavigator / createNativeStackNavigator / createDrawerNavigator / createBottomTabNavigator / createMaterialTopTabNavigator / createMaterialBottomTabNavigator all return the same {Navigator, Screen, Group} shape. Navigator walks its children for Screen entries, picks initialRouteName (or the first one), and renders that screens component prop. Actual transitions are no-ops — useNavigation returns a stub with navigate/goBack/reset that record nothing. Theme exports (DefaultTheme/DarkTheme/useTheme) cover the case where consumers spread theme.colors into their styles. CommonActions/StackActions/DrawerActions return bare action objects so navigation.dispatch calls still type-check. The expo-router shim (separate package) wraps this same level of fidelity with a routes-tree convention; in-tree navigators (Stack inside expo-router/Stack) keep working without change. @react-navigation/elements is the shared UI primitives package — returns an empty object since most consumers destructure it lazily and the rest just call helpers we no-op.
…ank-capture failure CI run on ubuntu-24.04 hit screenshot colours=2 — the smoke caught a blank Xvfb but couldnt explain why. The default GSK cairo backend can silently produce nothing under llvmpipe-only X without a compositor; ngl falls through to llvmpipe cleanly. GTK_THEME=Adwaita is also forced so widgets render with real surface colours instead of theme-default fallbacks. On the blank-capture exit path, also tail -40 the app log to stderr so the GH Actions live output explains the failure without round-tripping to the artifact bucket. Env vars use the parent shells default-if-unset shape so a caller that already exports them keeps their choice.
Real moti is Reanimated worklets + interpolation; without worklets the shim renders Inner at the animate values immediately (skipping the from->animate transition). useDynamicAnimation/useAnimationState return refs that trigger forceUpdate when their animateTo / transitionTo fires. AnimatePresence is a passthrough. Apps mount at steady state — visually correct end frame, transition is instant.
…-components, maps, pdf, webrtc, svg, victory, react-router-dom + __esModule fix Round-3 shims targeting the remaining single-error BUNDLE_FAILs. Also: every shim with a default export now stamps __esModule=true so esbuilds __toESM interop reads the default slot directly instead of re-wrapping our namespace under .default (the bug that left with-zustand BOOT_FAILing despite the bundle working). placeholder-components.js is a tiny shared library; the native-only packages render labeled View placeholders at the requested size so layout math survives. styled-components/native parses tagged-template-literal CSS into RN style via a tiny prop-value reducer (handles px / numbers / colors / functional interpolations). bundle.mjs gets a .svg loader: empty so direct SVG imports resolve to undefined instead of erroring (real svg-transformer comes later).
…n + class-no-extends lowering
Round-4 fixes for the remaining single-error BUNDLE_FAILs and the BOOT_FAILs from round-3. (1) Class lowering now matches any class<id> declaration, not just class extends — esbuild emits var X = class _X { ... } for plain top-level classes and Hermes 0.12 rejects that too (AssetSourceResolver hit this). Triggers for external/expo-examples/ as well as node_modules. (2) sentry shim was missing the integration factories — apps pass Sentry.mobileReplayIntegration() / feedbackIntegration() etc. into init({integrations: [...]}). Added every integration name the SDK ships plus startSpan / getActiveSpan / setMeasurement no-ops. (3) @react-navigation/native gets createStaticNavigation (React Navigation 7s static API) returning a NavigationContainer-wrapped Navigator. (4) expo-asset shim registers a stub ExpoAsset native module via expo-modules-core and exposes Asset.fromModule / loadAsync that resolve to in-bundle uris. (5) smoke harness now detects entries that already call registerRootComponent (with-react-navigation, with-storybook patterns) and side-effect-imports them instead of trying import App from. Also catches the case where bundle.mjs succeeds but hermesc rejected the .hbc — treats the missing-hbc state as BUNDLE_FAIL instead of letting it bubble to BOOT_FAIL.
… tinybase, legend-state, three+expo-gl Round-5 stubs for the remaining BUNDLE_FAIL cluster. expo-auth-session covers with-auth0 + with-facebook-auth (Providers.Google/Facebook/etc subpaths). jwt-decode is a real 30-line base64url-decode-payload impl. apollo-client supports ApolloClient/Provider + useQuery/useMutation/useLazyQuery/gql noops (data:null/loading:false). firebase exposes /app /auth /firestore /storage with reject-network-calls semantics. @react-native-picker/picker renders labeled placeholder. tinybase + ui-react + persisters expose the createStore/useCell/useRow surface with an in-memory store. @legendapp/state covers /react /persist /sync /persist-plugins/async-storage /sync-plugins/supabase subpaths. three + expo-gl + expo-three + expo-processing share one shim: THREE.* are noop constructors, GLView renders a placeholder, no real GL backend. Skipping with-magic, with-tfjs-camera, with-aws-storage-upload, with-workbox — too narrow / web-only for smoke coverage.
…etc + colour threshold tune Round-6 catch-up: LogBox.ignoreLogs and the other RN surfaces (Settings, ToastAndroid, Vibration, Share, findNodeHandle, UIManager, LayoutAnimation, InteractionManager, BackHandler, PermissionsAndroid, StatusBar) were missing from our react-native shim — multiple examples call them at boot and threw before mounting. All no-ops; StatusBar is a render-null function component. Smoke colour threshold lowered 16 → 4. Apps that render a single dark <GLView/> placeholder produce k=2 but are mounted correctly; 16 was too aggressive. Blank Xvfb is k=1, so 4 still catches binary-lives-but-no-window. New misc-stubs.js covers the one-example tail: magic-sdk, react-three-fiber, react-native-get-random-values, supabase-js, aws-amplify trio, tensorflow trio. All stay flat — no real network calls; promises reject or resolve empty so apps surface error UI.
with-firebase-storage-upload imported uuid via import uuid from uuid, but the real packages ESM build has no default export — esbuild rejected the bundle. The shim adds a default + the named v1/v3/v4/v5/v7 exports so either import shape resolves. v4 uses our existing cryptoRandomBytes CSPRNG. Smoke colour threshold dropped to 2. Apps that render a solid-color placeholder (with-three, with-react-three-fiber, with-workbox) produce k=2 but are mounted correctly. Blank Xvfb is still k=1, so the gate catches binary-lives-but-no-window — just no longer trips on legitimately-rendered single-color frames.
… window/document/navigator/location global polyfills with-legend-state-supabase called observablePersistAsyncStorage (lowercase factory) — newer @legendapp/state versions use that form alongside the capitalized ObservablePersistAsyncStorage constructor. Added both. with-workbox imports a local serviceWorkerRegistration that does window.addEventListener — pure web-only code. Polyfilled globalThis.window as an alias of globalThis, with safe location/navigator/document/addEventListener stubs so the bundle doesnt explode at parse time. Cross-platform feature checks (typeof window === undefined, typeof document === undefined) still take the no-DOM branch.
expo-router apps with the src/app/ layout (with-graphql, with-html, with-react-flow, with-tailwindcss, with-shadcn, with-webgpu, with-react-strict-dom, with-router-*) were being SKIPPED because the detection only looked for app/ at the example root. All 11 of those now flip to PASS through the same expo-router/entry placeholder path; their package.json still points main at expo-router/entry, just the route tree lives one level deeper.
Full sweep after the shim rounds. Numbers: PASS 67, BUNDLE_FAIL 0, BOOT_FAIL 0, SKIPPED 2 (with-router has no app code; with-yarn-workspaces is a monorepo wrapper). Up from baseline 10/69. Round-by-round progression: 10 -> 26 -> 37 -> 42 -> 47 -> 51 -> 54 -> 56 -> 67.
…ler hook Workspace bump: react-native ^0.85.3, react 19.2.3, react-test-renderer 19.2.3, @react-native/babel-preset ^0.85.3, @react-native/metro-config ^0.85.3 across all five workspace package.json files. C++ surface changes for 0.85: (1) ContextContainer::Shared was removed — replaced with std::shared_ptr<const ContextContainer> in TextLayoutManager.cpp + RNLinuxHost.cpp (the toolbox.componentRegistryFactory lambda signature). (2) SchedulerDelegate gained a new pure virtual schedulerShouldMergeReactRevision(SurfaceId) for React Server Components / View Transitions — added a no-op override in LinuxSchedulerDelegate. (3) RN 0.85 split jsinspector-modern further (TraceEventSerializer + ConsoleTaskOrchestrator + ConsoleTask + ConsoleTaskContext + network/HttpUtils + network/CdpNetwork are now standalone TUs), added a perf/cdpmetrics layer (CdpMetricsReporter + CdpPerfIssuesReporter + CdpInteractionTypes), and introduced a C++ animation backend (renderer/animationbackend/AnimationBackend + AnimationBackendCommitHook + AnimatedPropsRegistry + AnimatedPropSerializer) — Scheduler constructs all of these unconditionally, so added them to the rn_renderer glob. (4) Hermes pin bumped from RN 0.81 sha (e0fc6714) to hermes-v0.16.0 (d527210). Hermes 0.16 renamed the library target from libhermes/hermes to hermesvm; FetchHermes.cmake now prefers hermesvm and falls back. Hermes 0.16s JSI ABI is still compatible with our bindings — no porting work needed in vnext/src/jsi/. Verified end-to-end: smoke-playground on index.tsx produces 13789 colours, JSX commit done, no crash.
Two bugs surfaced when running with-zustand interactively (smoke gate didn't catch either — the ErrorBoundary fell back to a rendered surface that still passed the pixel/colour check). (1) useStore did useSyncExternalStore(subscribe, () => sel(getState()))
Returning a fresh object reference every getSnapshot call trips React's tear-detection: The result of getSnapshot should be cached and the render loops to Maximum update depth exceeded. Fix: cache the last selector result via useRef and reuse it whenever the equality fn (Object.is or the consumer's shallow) reports the new selection matches. (2) zustand/shallow returned {shallow} as a namespace object, so import shallow from zustand/shallow gave the namespace not the function — useStore's typeof equalityFn === function check failed and it fell back to Object.is, which never matches fresh selector outputs. Fix: emit the sub-path as a __esModule-stamped namespace with both default and named exports pointing at the function so either import shape works.
Bumps [esbuild](https://github.com/evanw/esbuild) from 0.25.12 to 0.28.0. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2025.md) - [Commits](evanw/esbuild@v0.25.12...v0.28.0) --- updated-dependencies: - dependency-name: esbuild dependency-version: 0.28.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps esbuild from 0.25.12 to 0.28.0.
Release notes
Sourced from esbuild's releases.
... (truncated)
Changelog
Sourced from esbuild's changelog.
... (truncated)
Commits
6a794dfpublish 0.28.0 to npm64ee0eafix #4435: supportwith { type: text }importsef65aeefix sort order insnapshots_packagejson.txt1a26a8etry to fixtest-old-ts, also shuffle CI tasks556ce6cuse''instead ofnullto omit build hashes8e675a8ci: allow missing binary hashes for tests7067763Reapply "update go 1.25.7 => 1.26.1"39473a9fix #4343: integrity check for binary download2025c9fpublish 0.27.7 to npmc6b586efix typo inMakefilefor@esbuild/win32-x64Maintainer changes
This version was pushed to npm by GitHub Actions, a new releaser for esbuild since your current version.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Need help on this PR? Tag
@codesmithwith what you need. Autofix is disabled.