one 1.25.8 → 1.25.10
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/cjs/cli/buildPage.cjs +2 -2
- package/dist/cjs/cli/buildPage.native.js +2 -2
- package/dist/cjs/cli/buildPage.native.js.map +1 -1
- package/dist/cjs/fork/useLinking.native.js +2 -1
- package/dist/cjs/fork/useLinking.native.js.map +1 -1
- package/dist/cjs/fork/useLinking.native.test.cjs +161 -0
- package/dist/cjs/fork/useLinking.native.test.native.js +181 -0
- package/dist/cjs/fork/useLinking.native.test.native.js.map +1 -0
- package/dist/esm/cli/buildPage.mjs +2 -2
- package/dist/esm/cli/buildPage.mjs.map +1 -1
- package/dist/esm/cli/buildPage.native.js +2 -2
- package/dist/esm/cli/buildPage.native.js.map +1 -1
- package/dist/esm/fork/useLinking.native.js +2 -1
- package/dist/esm/fork/useLinking.native.js.map +1 -1
- package/dist/esm/fork/useLinking.native.test.js +138 -0
- package/dist/esm/fork/useLinking.native.test.js.map +6 -0
- package/dist/esm/fork/useLinking.native.test.mjs +138 -0
- package/dist/esm/fork/useLinking.native.test.mjs.map +1 -0
- package/dist/esm/fork/useLinking.native.test.native.js +155 -0
- package/dist/esm/fork/useLinking.native.test.native.js.map +1 -0
- package/package.json +9 -9
- package/src/cli/buildPage.ts +8 -3
- package/src/fork/useLinking.native.test.tsx +153 -0
- package/src/fork/useLinking.native.ts +10 -12
- package/types/cli/buildPage.d.ts.map +1 -1
- package/types/fork/useLinking.native.d.ts.map +1 -1
- package/types/fork/useLinking.native.test.d.ts +2 -0
- package/types/fork/useLinking.native.test.d.ts.map +1 -0
package/src/cli/buildPage.ts
CHANGED
|
@@ -355,9 +355,11 @@ if (typeof document === 'undefined') globalThis.document = {}
|
|
|
355
355
|
recordTiming('ssrRender', performance.now() - t0)
|
|
356
356
|
|
|
357
357
|
// Apply after-LCP script loading if enabled
|
|
358
|
-
// Load all preloads (not just critical) to ensure good TTI after first paint
|
|
359
358
|
if (useAfterLCP) {
|
|
360
|
-
html = applyAfterLCPScriptLoad(
|
|
359
|
+
html = applyAfterLCPScriptLoad(
|
|
360
|
+
html,
|
|
361
|
+
useAfterLCPAggressive ? criticalPreloads || preloads : preloads
|
|
362
|
+
)
|
|
361
363
|
}
|
|
362
364
|
|
|
363
365
|
t0 = performance.now()
|
|
@@ -400,7 +402,10 @@ if (typeof document === 'undefined') globalThis.document = {}
|
|
|
400
402
|
recordTiming('spaShellRender', performance.now() - t0)
|
|
401
403
|
|
|
402
404
|
if (useAfterLCP) {
|
|
403
|
-
html = applyAfterLCPScriptLoad(
|
|
405
|
+
html = applyAfterLCPScriptLoad(
|
|
406
|
+
html,
|
|
407
|
+
useAfterLCPAggressive ? criticalPreloads || preloads : preloads
|
|
408
|
+
)
|
|
404
409
|
}
|
|
405
410
|
|
|
406
411
|
t0 = performance.now()
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { NavigationState } from '@react-navigation/core'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import TestRenderer, { act } from 'react-test-renderer'
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
5
|
+
import { getLinkingConfig } from '../router/getLinkingConfig'
|
|
6
|
+
import { getRoutes } from '../router/getRoutes'
|
|
7
|
+
import { getMockContext } from '../testing-utils'
|
|
8
|
+
import { getStateFromPath } from './getStateFromPath'
|
|
9
|
+
import { useLinking } from './useLinking.native'
|
|
10
|
+
|
|
11
|
+
;(globalThis as any).IS_REACT_ACT_ENVIRONMENT = true
|
|
12
|
+
|
|
13
|
+
const linking = getLinkingConfig(
|
|
14
|
+
getRoutes(
|
|
15
|
+
getMockContext([
|
|
16
|
+
'_layout.tsx',
|
|
17
|
+
'home/_layout.tsx',
|
|
18
|
+
'home/[projectId]/_layout.tsx',
|
|
19
|
+
'home/[projectId]/index.tsx',
|
|
20
|
+
'settings.tsx',
|
|
21
|
+
])
|
|
22
|
+
)!
|
|
23
|
+
)
|
|
24
|
+
const config = linking.config!
|
|
25
|
+
|
|
26
|
+
const currentState: NavigationState = {
|
|
27
|
+
stale: false,
|
|
28
|
+
type: 'stack',
|
|
29
|
+
key: 'root-stack',
|
|
30
|
+
index: 1,
|
|
31
|
+
routeNames: ['home', 'settings'],
|
|
32
|
+
routes: [
|
|
33
|
+
{
|
|
34
|
+
name: 'home',
|
|
35
|
+
key: 'home-travelo',
|
|
36
|
+
params: { projectId: 'proj_example_travelo' },
|
|
37
|
+
state: {
|
|
38
|
+
stale: false,
|
|
39
|
+
type: 'stack',
|
|
40
|
+
key: 'home-stack',
|
|
41
|
+
index: 0,
|
|
42
|
+
routeNames: ['[projectId]'],
|
|
43
|
+
routes: [
|
|
44
|
+
{
|
|
45
|
+
name: '[projectId]',
|
|
46
|
+
key: 'project-travelo',
|
|
47
|
+
params: { projectId: 'proj_example_travelo' },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{ name: 'settings', key: 'settings' },
|
|
53
|
+
],
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
type LinkingOverrides = Partial<Parameters<typeof useLinking>[1]>
|
|
57
|
+
|
|
58
|
+
async function captureIncomingAction(overrides: LinkingOverrides = {}) {
|
|
59
|
+
const linkedState = getStateFromPath('/home/proj_example_pennywise?tab=design', config)!
|
|
60
|
+
const dispatch = vi.fn()
|
|
61
|
+
let listener: ((url: string) => void) | undefined
|
|
62
|
+
const navigation = {
|
|
63
|
+
dispatch,
|
|
64
|
+
getRootState: () => currentState,
|
|
65
|
+
}
|
|
66
|
+
const ref = { current: navigation }
|
|
67
|
+
|
|
68
|
+
function Harness() {
|
|
69
|
+
useLinking(
|
|
70
|
+
ref as any,
|
|
71
|
+
{
|
|
72
|
+
...linking,
|
|
73
|
+
enabled: true,
|
|
74
|
+
prefixes: ['contrast:///'],
|
|
75
|
+
getInitialURL: () => null,
|
|
76
|
+
getStateFromPath: () => linkedState,
|
|
77
|
+
subscribe: (nextListener) => {
|
|
78
|
+
listener = nextListener
|
|
79
|
+
return () => {}
|
|
80
|
+
},
|
|
81
|
+
...overrides,
|
|
82
|
+
},
|
|
83
|
+
() => {}
|
|
84
|
+
)
|
|
85
|
+
return null
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let renderer: TestRenderer.ReactTestRenderer
|
|
89
|
+
await act(async () => {
|
|
90
|
+
renderer = TestRenderer.create(<Harness />)
|
|
91
|
+
})
|
|
92
|
+
act(() => listener!('contrast:///home/proj_example_pennywise?tab=design'))
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
action: dispatch.mock.calls[0]?.[0],
|
|
96
|
+
linkedState,
|
|
97
|
+
renderer: renderer!,
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
afterEach(() => {
|
|
102
|
+
vi.restoreAllMocks()
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
describe('native incoming links', () => {
|
|
106
|
+
it('applies every nested dynamic param when leaving a sibling route', async () => {
|
|
107
|
+
const { action, renderer } = await captureIncomingAction()
|
|
108
|
+
|
|
109
|
+
expect(action).toStrictEqual({
|
|
110
|
+
type: 'NAVIGATE',
|
|
111
|
+
target: 'root-stack',
|
|
112
|
+
payload: {
|
|
113
|
+
key: undefined,
|
|
114
|
+
name: 'home',
|
|
115
|
+
params: {
|
|
116
|
+
projectId: 'proj_example_pennywise',
|
|
117
|
+
screen: '[projectId]',
|
|
118
|
+
params: {
|
|
119
|
+
projectId: 'proj_example_pennywise',
|
|
120
|
+
tab: 'design',
|
|
121
|
+
screen: 'index',
|
|
122
|
+
params: {
|
|
123
|
+
projectId: 'proj_example_pennywise',
|
|
124
|
+
tab: 'design',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
act(() => renderer.unmount())
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('keeps a configured getActionFromState in control', async () => {
|
|
135
|
+
const customAction = { type: 'NAVIGATE', payload: { name: 'custom' } } as const
|
|
136
|
+
const getActionFromState = vi.fn(
|
|
137
|
+
(_state: Parameters<NonNullable<LinkingOverrides['getActionFromState']>>[0]) =>
|
|
138
|
+
customAction
|
|
139
|
+
)
|
|
140
|
+
const { action, linkedState, renderer } = await captureIncomingAction({
|
|
141
|
+
getActionFromState,
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
expect(action).toBe(customAction)
|
|
145
|
+
expect(getActionFromState).toHaveBeenCalledOnce()
|
|
146
|
+
expect(getActionFromState.mock.calls[0]![0]).toEqual({
|
|
147
|
+
...linkedState,
|
|
148
|
+
routes: [expect.not.objectContaining({ key: expect.anything() })],
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
act(() => renderer.unmount())
|
|
152
|
+
})
|
|
153
|
+
})
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
import type { LinkingOptions } from '@react-navigation/native' // @modified: import from @react-navigation/native
|
|
17
17
|
import * as React from 'react'
|
|
18
18
|
import { Linking, Platform } from 'react-native'
|
|
19
|
+
import { getNavigateAction } from '../router/utils/getNavigateAction' // @modified
|
|
19
20
|
import { extractPathFromURL } from './extractPathFromURL'
|
|
20
21
|
|
|
21
22
|
type ResultState = ReturnType<typeof getStateFromPathDefault>
|
|
@@ -24,13 +25,9 @@ type Options = LinkingOptions<ParamListBase>
|
|
|
24
25
|
|
|
25
26
|
const linkingHandlers: symbol[] = []
|
|
26
27
|
|
|
27
|
-
// @modified:
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
// RESET that the One router store immediately reverts, so incoming Linking
|
|
31
|
-
// 'url' events never navigated on native. Strip the keys before deriving the
|
|
32
|
-
// action; hydration keys only matter for web SSR, never for a live native
|
|
33
|
-
// deep link.
|
|
28
|
+
// @modified: custom getActionFromState functions have received keyless routes
|
|
29
|
+
// since One added deterministic hydration keys. preserve that contract; the
|
|
30
|
+
// default native path uses getNavigateAction directly.
|
|
34
31
|
type LinkingResultState = NonNullable<ResultState>
|
|
35
32
|
|
|
36
33
|
function stripRouteKeys(state: LinkingResultState): LinkingResultState {
|
|
@@ -218,11 +215,12 @@ export function useLinking(
|
|
|
218
215
|
return
|
|
219
216
|
}
|
|
220
217
|
|
|
221
|
-
// @modified:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
218
|
+
// @modified: use One's action builder for the default path so incoming
|
|
219
|
+
// links get the same nested param propagation as imperative navigation.
|
|
220
|
+
const action =
|
|
221
|
+
getActionFromStateRef.current === getActionFromStateDefault
|
|
222
|
+
? getNavigateAction(state, rootState)
|
|
223
|
+
: getActionFromStateRef.current(stripRouteKeys(state), configRef.current)
|
|
226
224
|
|
|
227
225
|
if (action !== undefined) {
|
|
228
226
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildPage.d.ts","sourceRoot":"","sources":["../../src/cli/buildPage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAkBnD,wBAAgB,iBAAiB,SAUhC;AAED,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,EAC7B,mBAAmB,EAAE,GAAG,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,WAAW,CAAC,EAAE,OAAO,EACrB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"buildPage.d.ts","sourceRoot":"","sources":["../../src/cli/buildPage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAkBnD,wBAAgB,iBAAiB,SAUhC;AAED,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,EAC7B,mBAAmB,EAAE,GAAG,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,WAAW,CAAC,EAAE,OAAO,EACrB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAkb7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLinking.native.d.ts","sourceRoot":"","sources":["../../src/fork/useLinking.native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"useLinking.native.d.ts","sourceRoot":"","sources":["../../src/fork/useLinking.native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAqB5C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,EAC3D,EACE,OAAc,EACd,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAQI,EACJ,SAmBC,EACD,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO,EACV,kBAAkB,EAAE,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;EAqKtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLinking.native.test.d.ts","sourceRoot":"","sources":["../../src/fork/useLinking.native.test.tsx"],"names":[],"mappings":""}
|