-
-
Notifications
You must be signed in to change notification settings - Fork 428
feat(lynx): add production Module Federation support #4907
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ScriptedAlchemy
wants to merge
78
commits into
main
Choose a base branch
from
feat/lynx-federation
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
78 commits
Select commit
Hold shift + click to select a range
3b6d364
feat(lynx): add native module federation support
ScriptedAlchemy a045ec0
fix(ci): gate Lynx E2E suite
ScriptedAlchemy 59e4f5e
feat(lynx): add standalone iOS application
ScriptedAlchemy c67e601
fix(lynx): harden native iOS demo
ScriptedAlchemy a1b7251
fix(lynx): tighten iOS lifecycle tests
ScriptedAlchemy fd7e78e
fix(lynx): validate iOS device origin
ScriptedAlchemy a850822
fix(lynx): bound iOS path cache
ScriptedAlchemy 7087042
fix(lynx): stabilize iOS readiness probe
ScriptedAlchemy 36a52bd
ci(lynx): extend native iOS timeout
ScriptedAlchemy 5fce98b
fix(lynx): pair native remote UI layers
ScriptedAlchemy 65f525a
fix(lynx): preserve native lazy chunk semantics
ScriptedAlchemy 1f1358e
fix(lynx): harden native federation boundaries
ScriptedAlchemy 2b546e7
fix(lynx): inject lazy identity before runtime wrapper
ScriptedAlchemy 1bafb73
fix(lynx): isolate native sharing by realm
ScriptedAlchemy 2292f0b
feat(lynx): complete standalone federation support
ScriptedAlchemy 49d996d
fix(lynx): avoid backtracking in output names
ScriptedAlchemy c4cb6ec
fix(lynx): use absolute native asset origin
ScriptedAlchemy 3fd8670
ci(lynx): cache native dependencies
ScriptedAlchemy f855940
ci(lynx): invalidate cache on pod config
ScriptedAlchemy b972a77
ci(lynx): disable xcode indexing
ScriptedAlchemy b3a0f10
ci(lynx): consolidate ios release tests
ScriptedAlchemy a7ea37f
ci(lynx): retrigger iOS e2e
ScriptedAlchemy 94f3f42
ci(lynx): retain release test diagnostics
ScriptedAlchemy 4fb17c2
ci(metro): constrain android emulator partition
ScriptedAlchemy 2d05685
docs(lynx): define architecture refactor
ScriptedAlchemy 76b37ab
docs(lynx): plan architecture refactor
ScriptedAlchemy edd28cf
fix(runtime): make manifest URL caching atomic
ScriptedAlchemy 428f8bb
fix(runtime): guard stale manifest cache writes
ScriptedAlchemy 7db9fc7
Merge remote-tracking branch 'origin/main' into feat/lynx-federation
ScriptedAlchemy b656347
refactor(lynx): configure cache events through rspeedy
ScriptedAlchemy 789db1c
refactor(lynx): isolate remote bundle compilation state
ScriptedAlchemy 7cca67a
refactor(lynx): isolate lazy chunk load settlement
ScriptedAlchemy ca0409d
refactor(lynx): simplify lazy load state
ScriptedAlchemy 8fbc9ba
refactor(lynx-demo): serialize remote loading
ScriptedAlchemy fcc61db
refactor(lynx-demo): isolate artifact test output
ScriptedAlchemy 41b4d37
refactor(lynx-ios): isolate resource loading boundaries
ScriptedAlchemy 8539062
docs(lynx): document rspeedy compatibility boundary
ScriptedAlchemy 8c2a06c
Merge remote-tracking branch 'origin/main' into feat/lynx-federation
ScriptedAlchemy 8402fdf
test(lynx): simplify bundle error coverage
ScriptedAlchemy 10e9040
fix(lynx): harden artifact server paths
ScriptedAlchemy 3b2b052
docs(lynx): describe artifact server boundary
ScriptedAlchemy f77ac7a
Merge remote-tracking branch 'origin/main' into feat/lynx-federation
ScriptedAlchemy f6b691f
test(lynx-ios): make resource boundaries deterministic
ScriptedAlchemy 818406a
Merge remote-tracking branch 'origin/main' into feat/lynx-federation
ScriptedAlchemy 5d956d1
refactor(lynx): close resource lifecycle gaps
ScriptedAlchemy ac671ad
chore(lynx): finalize package boundaries
ScriptedAlchemy 298d326
feat(lynx): complete lazy federation integration
ScriptedAlchemy 022dc5e
Merge remote-tracking branch 'origin/main' into feat/lynx-federation
ScriptedAlchemy be79436
ci(lynx): speed up iOS federation validation
ScriptedAlchemy b223844
ci(lynx): harden iOS cache seeding
ScriptedAlchemy 0f1ae1e
fix(lynx): gate UI on background startup
ScriptedAlchemy 65be391
ci(lynx): persist iOS dependencies before tests
ScriptedAlchemy 29c9275
fix(lynx): synchronize first-screen handoff
ScriptedAlchemy d441951
ci(lynx): cache iOS build atomically
ScriptedAlchemy 682af30
fix(lynx): release manual first-screen handoff
ScriptedAlchemy 52e07ad
fix(lynx-ci): cache generated iOS workspace
ScriptedAlchemy a38efd0
fix(lynx): use built-in js-ready handoff
ScriptedAlchemy 9081f2d
fix(lynx): complete public lazy bundle transport
ScriptedAlchemy 42c3605
test(lynx): cover host lazy bundle identity
ScriptedAlchemy e35a41c
test(lynx): capture iOS simulator diagnostics
ScriptedAlchemy 9ba07b1
fix(lynx): execute native lazy background chunks
ScriptedAlchemy dc76172
fix(lynx): bootstrap lazy chunks before async startup
ScriptedAlchemy adf8abc
docs(lynx): document startup loader requirement
ScriptedAlchemy 022063b
docs(lynx): clarify automatic React bootstrap
ScriptedAlchemy d751ad0
fix(lynx): embed native main-thread container
ScriptedAlchemy 9d76f69
docs(lynx): note paired entry validation
ScriptedAlchemy 6ed7e5e
docs(lynx): describe paired native container
ScriptedAlchemy 7cacc66
fix(lynx): emit main-thread container before runtime wrapper
ScriptedAlchemy 3a06a6b
test(lynx): model runtime wrapper stage
ScriptedAlchemy 946b6a5
ci: retry pkg preview registration race
ScriptedAlchemy 25894cf
fix(lynx): encode external bundle mode
ScriptedAlchemy 021a221
fix(lynx): normalize split bundle public paths
ScriptedAlchemy 7e0f79f
test(lynx): use fresh lynx preview packages
ScriptedAlchemy 626f5b8
chore: merge main into feat/lynx-federation
ScriptedAlchemy dd26568
chore: merge main into feat/lynx-federation
ScriptedAlchemy 3d92cf7
chore: merge main into feat/lynx-federation
ScriptedAlchemy 87b5035
chore: merge latest main into feat/lynx-federation
ScriptedAlchemy 66c1c76
chore: merge main into feat/lynx-federation
ScriptedAlchemy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| --- | ||
| '@module-federation/runtime-core': patch | ||
| '@module-federation/webpack-bundler-runtime': patch | ||
| --- | ||
|
|
||
| Avoid logical assignment syntax and use a standards-safe own-property check in | ||
| embedded federation runtime initializers so ES2019 and Lynx TASM consumers can | ||
| parse the generated runtime. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| --- | ||
| '@module-federation/lynx': minor | ||
| '@module-federation/runtime-core': patch | ||
| '@module-federation/sdk': patch | ||
| --- | ||
|
|
||
| Add an Rspeedy build adapter plus background and Lynx for Web main-thread | ||
| transports. Dual-realm remotes publish a standard Module Federation manifest | ||
| whose remote entry resolves to one HTTP-loadable external `.lynx.bundle`. | ||
| Compiled federated `import()` calls skip Lynx's local loader for remote-only | ||
| chunk IDs while preserving normal local JavaScript chunk loading. | ||
|
|
||
| Load non-eager host, remote-exposure, and descendant chunks through Lynx's | ||
| public lazy-bundle API. Split federation requires the Lynx Web Core and template | ||
| plugin releases that preserve automatic public paths, expose retryable lazy | ||
| loading, and omit assetless remote-only chunk groups. | ||
| Bootstrap the ReactLynx lazy-bundle loader before federation async startup so | ||
| initial shared chunks use FetchBundle instead of the legacy component loader. | ||
| Embed the paired container entry in native split remotes so fetched main-thread | ||
| chunks install their snapshot factories before React commits them, and reject | ||
| remote entries that omit the paired section. Emit that entry before the | ||
| background runtime wrapper so native main-thread evaluation does not require | ||
| the background-only `tt` module loader. | ||
| Accept the cache-events plugin 0.2 line used by Rspeedy 0.16. | ||
|
|
||
| Resolve manifest `publicPath: 'auto'` from the fetched response URL so | ||
| root-relative manifest entries remain portable in browser-like runtimes. | ||
| Normalize Lynx split-bundle public paths so relative, root-relative, absolute, | ||
| and protocol-relative asset prefixes work with or without boundary slashes. | ||
| Self-label generated Lynx external bundles as external/non-lazy in encoded | ||
| bundle config so Web Core can prefer producer metadata over runtime caller | ||
| fallbacks. |
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,246 @@ | ||
| # .github/workflows/e2e-lynx.yml | ||
| name: E2E Test for Lynx Module Federation | ||
|
|
||
| on: | ||
| workflow_call: | ||
|
|
||
| jobs: | ||
| e2e-lynx-native: | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
| steps: | ||
| - name: Checkout Repository | ||
| uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - name: Setup pnpm | ||
| uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 | ||
|
|
||
| - name: Setup Node.js 24 | ||
| uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 | ||
| with: | ||
| node-version: '24' | ||
| cache: 'pnpm' | ||
| cache-dependency-path: '**/pnpm-lock.yaml' | ||
|
|
||
| - name: Export SKIP_DEVTOOLS_POSTINSTALL | ||
| run: echo "SKIP_DEVTOOLS_POSTINSTALL=true" >> "$GITHUB_ENV" | ||
|
|
||
| - name: Install dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Validate Lynx and Android CI policy | ||
| run: pnpm --filter lynx-module-federation-demo run test:ci-policy | ||
|
|
||
| - name: Restore Turborepo cache | ||
| uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 | ||
| with: | ||
| path: .turbo/cache | ||
| key: ${{ runner.os }}-turbo-${{ github.ref_name }}-${{ hashFiles('pnpm-lock.yaml') }} | ||
| restore-keys: | | ||
| ${{ runner.os }}-turbo-${{ github.ref_name }}- | ||
| ${{ runner.os }}-turbo- | ||
|
|
||
| - name: Build shared packages | ||
| run: pnpm run build:packages | ||
|
|
||
| - name: Test Lynx federation compiler and transport | ||
| run: pnpm --filter @module-federation/lynx test | ||
|
|
||
| - name: Build and validate native Lynx artifacts | ||
| run: pnpm --filter lynx-module-federation-demo run e2e:native:ci | ||
|
|
||
| - name: Validate standalone iOS project policy | ||
| run: pnpm --filter lynx-module-federation-demo run test:ios-project | ||
|
|
||
| - name: Upload native artifacts for iOS | ||
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | ||
| with: | ||
| name: lynx-native-ios-input | ||
| path: | | ||
| apps/lynx-module-federation-demo/dist/catalog-native/ | ||
| apps/lynx-module-federation-demo/dist/host-native/ | ||
| apps/lynx-module-federation-demo/dist/remote-native/ | ||
| if-no-files-found: error | ||
| retention-days: 1 | ||
|
|
||
| - name: Upload native failure artifacts | ||
| if: failure() | ||
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | ||
| with: | ||
| name: lynx-native-e2e-failure | ||
| path: | | ||
| apps/lynx-module-federation-demo/dist/catalog-native/ | ||
| apps/lynx-module-federation-demo/dist/host-native/ | ||
| apps/lynx-module-federation-demo/dist/remote-native/ | ||
| if-no-files-found: ignore | ||
| retention-days: 7 | ||
|
|
||
| e2e-lynx-web: | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
| steps: | ||
| - name: Checkout Repository | ||
| uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - name: Setup pnpm | ||
| uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 | ||
|
|
||
| - name: Setup Node.js 24 | ||
| uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 | ||
| with: | ||
| node-version: '24' | ||
| cache: 'pnpm' | ||
| cache-dependency-path: '**/pnpm-lock.yaml' | ||
|
|
||
| - name: Export SKIP_DEVTOOLS_POSTINSTALL | ||
| run: echo "SKIP_DEVTOOLS_POSTINSTALL=true" >> "$GITHUB_ENV" | ||
|
|
||
| - name: Install dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Restore Turborepo cache | ||
| uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 | ||
| with: | ||
| path: .turbo/cache | ||
| key: ${{ runner.os }}-turbo-${{ github.ref_name }}-${{ hashFiles('pnpm-lock.yaml') }} | ||
| restore-keys: | | ||
| ${{ runner.os }}-turbo-${{ github.ref_name }}- | ||
| ${{ runner.os }}-turbo- | ||
|
|
||
| - name: Build shared packages | ||
| run: pnpm run build:packages | ||
|
|
||
| - name: Install Playwright Chromium | ||
| run: pnpm --filter lynx-module-federation-demo exec playwright install --with-deps chromium | ||
|
|
||
| - name: Run real Lynx for Web E2E | ||
| run: pnpm --filter lynx-module-federation-demo run e2e:web:ci | ||
|
|
||
| - name: Upload Web E2E failure artifacts | ||
| if: failure() | ||
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | ||
| with: | ||
| name: lynx-module-federation-e2e-failure | ||
| path: | | ||
| apps/lynx-module-federation-demo/test/real-web/artifacts/ | ||
| apps/lynx-module-federation-demo/dist/catalog-web/ | ||
| apps/lynx-module-federation-demo/dist/host-web/ | ||
| apps/lynx-module-federation-demo/dist/remote-web/ | ||
| if-no-files-found: ignore | ||
| retention-days: 7 | ||
|
|
||
| e2e-lynx-ios: | ||
| needs: e2e-lynx-native | ||
| runs-on: macos-15 | ||
| timeout-minutes: 120 | ||
| env: | ||
| DEVELOPER_DIR: /Applications/Xcode_16.4.app/Contents/Developer | ||
| NO_COLOR: 1 | ||
| RUBY_VERSION: 3.4.9 | ||
| steps: | ||
| - name: Checkout Repository | ||
| uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 | ||
| with: | ||
| fetch-depth: 1 | ||
| sparse-checkout: apps/lynx-module-federation-demo | ||
|
|
||
| - name: Setup Node.js 24 | ||
| uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 | ||
| with: | ||
| node-version: '24' | ||
|
|
||
| - name: Setup Ruby | ||
| uses: ruby/setup-ruby@97ecb7b512899eb71ab1bf2310a624c6f1589ac6 # v1 | ||
| with: | ||
| ruby-version: ${{ env.RUBY_VERSION }} | ||
|
|
||
| - name: Restore iOS build cache | ||
| id: ios-build-cache | ||
| uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 | ||
| with: | ||
| path: | | ||
| ~/.cocoapods/repos/trunk | ||
| ~/Library/Caches/CocoaPods | ||
| apps/lynx-module-federation-demo/ios/Pods | ||
| apps/lynx-module-federation-demo/ios/OrbitControl.xcworkspace | ||
| apps/lynx-module-federation-demo/ios/vendor/bundle | ||
| apps/lynx-module-federation-demo/ios/build/DerivedData/Build | ||
| apps/lynx-module-federation-demo/ios/build/DerivedData/ModuleCache.noindex | ||
| apps/lynx-module-federation-demo/ios/build/DerivedData/SDKStatCaches.noindex | ||
| key: ${{ runner.os }}-${{ runner.arch }}-lynx-ios-build-v3-xcode-16.4-ruby-${{ env.RUBY_VERSION }}-${{ hashFiles('apps/lynx-module-federation-demo/ios/Gemfile', 'apps/lynx-module-federation-demo/ios/Gemfile.lock', 'apps/lynx-module-federation-demo/ios/Podfile', 'apps/lynx-module-federation-demo/ios/Podfile.lock') }}-${{ hashFiles('apps/lynx-module-federation-demo/ios/OrbitControl.xcodeproj/project.pbxproj') }} | ||
|
|
||
| - name: Download native artifacts | ||
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | ||
| with: | ||
| name: lynx-native-ios-input | ||
| path: apps/lynx-module-federation-demo/dist | ||
|
|
||
| - name: Embed native host bundle | ||
| run: node apps/lynx-module-federation-demo/scripts/sync-ios-bundle.mjs | ||
|
|
||
| - name: Install iOS dependencies | ||
| if: steps.ios-build-cache.outputs.cache-hit != 'true' | ||
| working-directory: apps/lynx-module-federation-demo/ios | ||
| run: | | ||
| bundle config set path vendor/bundle | ||
| bundle install --jobs 4 --retry 3 | ||
| bundle exec pod install --deployment | ||
|
|
||
| - name: Validate cached iOS dependencies | ||
| if: steps.ios-build-cache.outputs.cache-hit == 'true' | ||
| working-directory: apps/lynx-module-federation-demo/ios | ||
| run: | | ||
| bundle config set path vendor/bundle | ||
| bundle check | ||
| cmp Podfile.lock Pods/Manifest.lock | ||
| test -f OrbitControl.xcworkspace/contents.xcworkspacedata | ||
|
|
||
| - name: Run standalone iOS federation E2E | ||
| run: node apps/lynx-module-federation-demo/test/ios/run.mjs | ||
|
|
||
| - name: Save iOS build cache | ||
| if: >- | ||
| always() && | ||
| steps.ios-build-cache.outputs.cache-hit != 'true' && | ||
| hashFiles('apps/lynx-module-federation-demo/ios/build/DerivedData/Build/Products/Release-iphonesimulator/OrbitControl.app/OrbitControl') != '' | ||
| uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 | ||
| with: | ||
| path: | | ||
| ~/.cocoapods/repos/trunk | ||
| ~/Library/Caches/CocoaPods | ||
| apps/lynx-module-federation-demo/ios/Pods | ||
| apps/lynx-module-federation-demo/ios/OrbitControl.xcworkspace | ||
| apps/lynx-module-federation-demo/ios/vendor/bundle | ||
| apps/lynx-module-federation-demo/ios/build/DerivedData/Build | ||
| apps/lynx-module-federation-demo/ios/build/DerivedData/ModuleCache.noindex | ||
| apps/lynx-module-federation-demo/ios/build/DerivedData/SDKStatCaches.noindex | ||
| key: ${{ runner.os }}-${{ runner.arch }}-lynx-ios-build-v3-xcode-16.4-ruby-${{ env.RUBY_VERSION }}-${{ hashFiles('apps/lynx-module-federation-demo/ios/Gemfile', 'apps/lynx-module-federation-demo/ios/Gemfile.lock', 'apps/lynx-module-federation-demo/ios/Podfile', 'apps/lynx-module-federation-demo/ios/Podfile.lock') }}-${{ hashFiles('apps/lynx-module-federation-demo/ios/OrbitControl.xcodeproj/project.pbxproj') }} | ||
|
|
||
| - name: Upload iOS E2E evidence | ||
| if: success() | ||
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | ||
| with: | ||
| name: lynx-ios-e2e | ||
| path: | | ||
| apps/lynx-module-federation-demo/ios/build/orbit-control.png | ||
| apps/lynx-module-federation-demo/ios/build/requests.json | ||
| apps/lynx-module-federation-demo/ios/build/simulator.log | ||
| if-no-files-found: error | ||
| retention-days: 7 | ||
|
|
||
| - name: Upload iOS E2E failure artifacts | ||
| if: failure() | ||
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | ||
| with: | ||
| name: lynx-ios-e2e-failure | ||
| path: | | ||
| apps/lynx-module-federation-demo/ios/build/OrbitControl-Release.xcresult/ | ||
| apps/lynx-module-federation-demo/ios/build/orbit-control.png | ||
| apps/lynx-module-federation-demo/ios/build/requests.json | ||
| apps/lynx-module-federation-demo/ios/build/simulator.log | ||
| if-no-files-found: ignore | ||
| retention-days: 7 |
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| dist/ | ||
| .lynx-e2e-*/ | ||
| .turbo/ | ||
| test/real-web/artifacts/ | ||
| ios/.bundle/ | ||
| ios/Pods/ | ||
| ios/OrbitControl.xcworkspace/ | ||
| ios/Resources/main.lynx.bundle | ||
| ios/Resources/host-native/ | ||
| ios/Resources/static/ | ||
| ios/build/ | ||
| ios/vendor/bundle/ |
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.