@ankhorage/navigator 0.1.1 → 1.1.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -2
  3. package/dist/definitions/NavigatorPlan.d.ts +81 -7
  4. package/dist/definitions/NavigatorPlan.d.ts.map +1 -1
  5. package/dist/expo-router/createNavigatorPlan.d.ts +2 -1
  6. package/dist/expo-router/createNavigatorPlan.d.ts.map +1 -1
  7. package/dist/expo-router/createNavigatorPlan.js +176 -41
  8. package/dist/expo-router/createNavigatorPlan.js.map +1 -1
  9. package/dist/expo-router/resolveNavigatorConfig.d.ts +6 -0
  10. package/dist/expo-router/resolveNavigatorConfig.d.ts.map +1 -0
  11. package/dist/expo-router/resolveNavigatorConfig.js +48 -0
  12. package/dist/expo-router/resolveNavigatorConfig.js.map +1 -0
  13. package/dist/expo-router/resolveTabsNavigatorPlan.d.ts.map +1 -1
  14. package/dist/expo-router/resolveTabsNavigatorPlan.js +19 -6
  15. package/dist/expo-router/resolveTabsNavigatorPlan.js.map +1 -1
  16. package/dist/generation/generateNavigatorFiles.d.ts +4 -0
  17. package/dist/generation/generateNavigatorFiles.d.ts.map +1 -0
  18. package/dist/generation/generateNavigatorFiles.js +169 -0
  19. package/dist/generation/generateNavigatorFiles.js.map +1 -0
  20. package/dist/generation/generateTabsLayoutFile.d.ts +4 -0
  21. package/dist/generation/generateTabsLayoutFile.d.ts.map +1 -0
  22. package/dist/generation/generateTabsLayoutFile.js +137 -0
  23. package/dist/generation/generateTabsLayoutFile.js.map +1 -0
  24. package/dist/generation/generationSafety.d.ts +6 -0
  25. package/dist/generation/generationSafety.d.ts.map +1 -0
  26. package/dist/generation/generationSafety.js +18 -0
  27. package/dist/generation/generationSafety.js.map +1 -0
  28. package/dist/index.d.ts +3 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/metadata/index.d.ts +56 -3
  33. package/dist/metadata/index.d.ts.map +1 -1
  34. package/dist/metadata/index.js +24 -1
  35. package/dist/metadata/index.js.map +1 -1
  36. package/dist/tabs/CustomTabsLayout.d.ts +39 -0
  37. package/dist/tabs/CustomTabsLayout.d.ts.map +1 -0
  38. package/dist/tabs/CustomTabsLayout.js +122 -0
  39. package/dist/tabs/CustomTabsLayout.js.map +1 -0
  40. package/dist/tabs/index.d.ts +3 -0
  41. package/dist/tabs/index.d.ts.map +1 -0
  42. package/dist/tabs/index.js +2 -0
  43. package/dist/tabs/index.js.map +1 -0
  44. package/dist/tabs/nativeIconFamilies.d.ts +16 -0
  45. package/dist/tabs/nativeIconFamilies.d.ts.map +1 -0
  46. package/dist/tabs/nativeIconFamilies.js +24 -0
  47. package/dist/tabs/nativeIconFamilies.js.map +1 -0
  48. package/dist/topology/resolveNavigatorPreset.d.ts.map +1 -1
  49. package/dist/topology/resolveNavigatorPreset.js +6 -0
  50. package/dist/topology/resolveNavigatorPreset.js.map +1 -1
  51. package/dist/validation/validateNavigatorManifest.d.ts +5 -0
  52. package/dist/validation/validateNavigatorManifest.d.ts.map +1 -0
  53. package/dist/validation/validateNavigatorManifest.js +167 -0
  54. package/dist/validation/validateNavigatorManifest.js.map +1 -0
  55. package/dist/validation/validatePresetTopology.d.ts +5 -0
  56. package/dist/validation/validatePresetTopology.d.ts.map +1 -0
  57. package/dist/validation/validatePresetTopology.js +47 -0
  58. package/dist/validation/validatePresetTopology.js.map +1 -0
  59. package/dist/validation/validateTabsNavigator.d.ts +5 -0
  60. package/dist/validation/validateTabsNavigator.d.ts.map +1 -0
  61. package/dist/validation/validateTabsNavigator.js +140 -0
  62. package/dist/validation/validateTabsNavigator.js.map +1 -0
  63. package/package.json +37 -4
  64. package/dist/index.test.d.ts +0 -2
  65. package/dist/index.test.d.ts.map +0 -1
  66. package/dist/index.test.js +0 -107
  67. package/dist/index.test.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/navigator
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 11f9f2e: Add native, JavaScript, and responsive Surface-owned headless Tabs generation.
8
+
9
+ ## 1.0.0
10
+
11
+ ### Major Changes
12
+
13
+ - d4026a0: Add validated, deterministic Expo Router planning and file generation for Slot, native and JavaScript Stack, and Drawer navigators.
14
+
3
15
  ## 0.1.1
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
 
4
4
  # NAVIGATOR
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v0.1.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v1.0.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
- Standalone manifest-driven navigator capability for Expo Router across React Native and React Native Web.
8
+ Standalone Navigator capability with topology configured independently from platform implementation and visual presentation. Adaptive tabs use Native Tabs on Android/iOS and one stable Expo Router headless topology with Surface-owned responsive presentation on Web.
9
9
 
10
10
  ## Generated documentation
11
11
 
@@ -15,5 +15,6 @@ Standalone manifest-driven navigator capability for Expo Router across React Nat
15
15
  - [Architecture overview](././paradox/diagrams/architecture-overview.mmd)
16
16
  - [Module relationships](././paradox/diagrams/module-relationships.mmd)
17
17
  - [Export graph](././paradox/diagrams/export-graph.mmd)
18
+ - [CustomTabsLayout sequence](././paradox/diagrams/sequences/custom-tabs-layout.mmd)
18
19
  - [resolveCustomTabsPresentation sequence](././paradox/diagrams/sequences/resolve-custom-tabs-presentation.mmd)
19
20
  - [resolveTabsNavigatorPlan sequence](././paradox/diagrams/sequences/resolve-tabs-navigator-plan.mmd)
@@ -1,37 +1,111 @@
1
- import type { NavigatorType } from '@ankhorage/contracts/navigator';
1
+ import type { CustomNavigatorNode, DrawerNavigatorOptions, NavigatorType, RouteDefinition, StackImplementation, StackScreenOptions } from '@ankhorage/contracts/navigator';
2
2
  export type NavigatorRuntimePlatform = 'android' | 'ios' | 'web';
3
3
  export type NavigatorResponsiveSize = 'compact' | 'medium' | 'expanded';
4
- export type NavigatorApiStability = 'stable' | 'unstable';
5
- export type ExpoRouterNavigatorModule = 'expo-router' | 'expo-router/drawer' | 'expo-router/js-tabs' | 'expo-router/js-top-tabs' | 'expo-router/ui' | 'expo-router/unstable-native-tabs';
4
+ export type NavigatorApiStability = 'stable' | 'alpha';
5
+ export type NavigatorSupportStatus = 'supported' | 'unavailable';
6
+ export type ExpoRouterNavigatorModule = 'expo-router' | 'expo-router/drawer' | 'expo-router/js-stack' | 'expo-router/js-tabs' | 'expo-router/js-top-tabs' | 'expo-router/ui' | 'expo-router/unstable-native-tabs';
7
+ export type NavigatorAdapterId = 'slot' | 'stack.native' | 'stack.javascript' | 'stack.experimental' | 'drawer' | 'tabs.native' | 'tabs.javascript' | 'tabs.custom' | 'split-view' | 'custom';
8
+ export interface NavigatorDiagnostic {
9
+ code: string;
10
+ severity: 'error' | 'warning';
11
+ path: string;
12
+ message: string;
13
+ }
14
+ export interface NavigatorValidationContext {
15
+ platform: NavigatorRuntimePlatform;
16
+ expoRouterVersion: string;
17
+ }
18
+ export interface NavigatorAdapterPlan {
19
+ id: NavigatorAdapterId;
20
+ module?: ExpoRouterNavigatorModule;
21
+ exportName?: string;
22
+ support: NavigatorSupportStatus;
23
+ stability: NavigatorApiStability;
24
+ limitations: readonly string[];
25
+ }
6
26
  export type ResolvedTabsImplementation = 'custom' | 'javascript' | 'native';
7
27
  export type ResolvedTabsPresentation = 'bottom' | 'top' | 'rail' | 'sidebar' | 'custom';
28
+ /**
29
+ * Disposable adapter plan for a `tabs` topology.
30
+ *
31
+ * The implementation selects the Router runtime. Presentation only selects its visual chrome and
32
+ * never creates another route topology.
33
+ */
8
34
  export interface TabsNavigatorPlan {
9
35
  implementation: ResolvedTabsImplementation;
10
36
  module: ExpoRouterNavigatorModule;
11
37
  exportName: string;
12
38
  stability: NavigatorApiStability;
13
39
  presentation?: ResolvedTabsPresentation;
40
+ presentations?: Readonly<Record<NavigatorResponsiveSize, ResolvedTabsPresentation>>;
14
41
  customPresentationId?: string;
42
+ minimizeBehavior?: 'automatic' | 'never' | 'onScrollDown' | 'onScrollUp';
43
+ bottomAccessoryScreenId?: string;
15
44
  }
16
45
  export interface NavigatorRoutePlan {
17
46
  name: string;
18
47
  path?: string;
48
+ label?: string;
49
+ icon?: RouteDefinition['icon'];
50
+ showInPrimaryNavigation?: boolean;
51
+ guards: readonly string[];
19
52
  screenId?: string;
53
+ stackOptions?: StackScreenOptions;
20
54
  navigator?: NavigatorNodePlan;
21
55
  }
22
56
  export interface NavigatorNodePlan {
23
57
  type: NavigatorType;
24
- module: ExpoRouterNavigatorModule;
25
- exportName: string;
26
- routes: NavigatorRoutePlan[];
58
+ pointer: string;
59
+ adapter: NavigatorAdapterPlan;
60
+ initialRouteName?: string;
61
+ routes: readonly NavigatorRoutePlan[];
62
+ stack?: {
63
+ implementation: StackImplementation;
64
+ options?: StackScreenOptions;
65
+ };
66
+ drawer?: {
67
+ options?: DrawerNavigatorOptions;
68
+ };
27
69
  tabs?: TabsNavigatorPlan;
70
+ splitView?: {
71
+ columns: {
72
+ primary: string;
73
+ supplementary?: string;
74
+ };
75
+ inspector?: string;
76
+ topColumnForCollapsing?: 'primary' | 'secondary' | 'supplementary';
77
+ };
78
+ custom?: {
79
+ navigatorId: string;
80
+ config?: CustomNavigatorNode['config'];
81
+ };
28
82
  }
29
83
  export interface NavigatorPlan {
30
- presetLayers: readonly NavigatorType[];
84
+ context: NavigatorValidationContext;
31
85
  root: NavigatorNodePlan;
86
+ diagnostics: readonly NavigatorDiagnostic[];
87
+ supported: boolean;
32
88
  flows: {
33
89
  onboarding: boolean;
34
90
  authentication: boolean;
35
91
  };
36
92
  }
93
+ export interface NavigatorScreenModule {
94
+ module: string;
95
+ exportName: string;
96
+ }
97
+ export interface NavigatorGenerationBindings {
98
+ screens: Readonly<Record<string, NavigatorScreenModule>>;
99
+ guards: Readonly<Record<string, NavigatorScreenModule>>;
100
+ iconSourceResolver?: NavigatorScreenModule;
101
+ flows?: {
102
+ onboardingRoute?: string;
103
+ authenticationRoute?: string;
104
+ };
105
+ tabPresentations?: Readonly<Record<string, NavigatorScreenModule>>;
106
+ }
107
+ export interface NavigatorGeneratedFile {
108
+ path: string;
109
+ contents: string;
110
+ }
37
111
  //# sourceMappingURL=NavigatorPlan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/definitions/NavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE1D,MAAM,MAAM,yBAAyB,GACjC,aAAa,GACb,oBAAoB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,gBAAgB,GAChB,kCAAkC,CAAC;AAEvC,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;AAC5E,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExF,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,0BAA0B,CAAC;IAC3C,MAAM,EAAE,yBAAyB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,qBAAqB,CAAC;IACjC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,yBAAyB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE;QACL,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH"}
1
+ {"version":3,"file":"NavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/definitions/NavigatorPlan.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,9 @@ import type { AppNavigatorManifest } from '@ankhorage/contracts/navigator';
2
2
  import type { NavigatorPlan, NavigatorResponsiveSize, NavigatorRuntimePlatform } from '../definitions/NavigatorPlan';
3
3
  export interface CreateNavigatorPlanOptions {
4
4
  platform: NavigatorRuntimePlatform;
5
+ expoRouterVersion: string;
5
6
  responsiveSize?: NavigatorResponsiveSize;
6
7
  }
7
- /*** Create the complete standalone Navigator plan from only the navigator desired-state slice. */
8
+ /*** Create a disposable, provider-aware plan from only the navigator desired-state slice. */
8
9
  export declare function createNavigatorPlan(manifest: AppNavigatorManifest, options: CreateNavigatorPlanOptions): NavigatorPlan;
9
10
  //# sourceMappingURL=createNavigatorPlan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAKrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAEV,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AAItC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C;AA0ED,kGAAkG;AAClG,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,0BAA0B,GAClC,aAAa,CAUf"}
1
+ {"version":3,"file":"createNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAGV,aAAa,EACb,uBAAuB,EAEvB,wBAAwB,EAEzB,MAAM,8BAA8B,CAAC;AAStC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C;AAkPD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,0BAA0B,GAClC,aAAa,CAmBf"}
@@ -1,59 +1,194 @@
1
- import { resolveNavigatorPreset } from '../topology/resolveNavigatorPreset';
1
+ import { validateNavigatorManifest } from '../validation/validateNavigatorManifest';
2
+ import { parseExpoRouterMajor, resolveEffectiveStackConfig, resolveEffectiveTabsConfig, } from './resolveNavigatorConfig';
2
3
  import { resolveTabsNavigatorPlan } from './resolveTabsNavigatorPlan';
3
- /*** Return node-local tabs configuration only when the node explicitly authors one. */
4
- function resolveNodeTabsConfig(node) {
5
- if (node.implementation !== undefined)
6
- return node;
7
- return node.native !== undefined || node.web !== undefined ? node : undefined;
8
- }
9
- /*** Resolve a platform-specific tabs override without dynamic object access. */
10
- function resolvePlatformTabsConfig(platforms, platform) {
11
- switch (platform) {
12
- case 'android':
13
- return platforms?.android?.tabs;
14
- case 'ios':
15
- return platforms?.ios?.tabs;
16
- case 'web':
17
- return platforms?.web?.tabs;
4
+ function createStackAdapter(stack, routerMajor) {
5
+ const implementation = stack?.implementation ?? 'native';
6
+ if (implementation === 'javascript') {
7
+ return {
8
+ id: 'stack.javascript',
9
+ module: 'expo-router/js-stack',
10
+ exportName: 'Stack',
11
+ support: routerMajor !== undefined && routerMajor >= 56 ? 'supported' : 'unavailable',
12
+ stability: 'stable',
13
+ limitations: ['Requires Expo Router 56.0.0 or newer.'],
14
+ };
18
15
  }
16
+ if (implementation === 'experimental') {
17
+ return {
18
+ id: 'stack.experimental',
19
+ support: 'unavailable',
20
+ stability: 'alpha',
21
+ limitations: ['Owned by the optional Experimental Stack adapter.'],
22
+ };
23
+ }
24
+ return {
25
+ id: 'stack.native',
26
+ module: 'expo-router',
27
+ exportName: 'Stack',
28
+ support: 'supported',
29
+ stability: 'stable',
30
+ limitations: [],
31
+ };
32
+ }
33
+ function createTabsAdapter(tabs, platform, routerMajor) {
34
+ const nativeUnavailable = tabs.implementation === 'native' &&
35
+ (platform === 'web' || routerMajor === undefined || routerMajor < 54);
36
+ const customUnavailable = tabs.implementation === 'custom' && platform !== 'web';
37
+ return {
38
+ id: `tabs.${tabs.implementation}`,
39
+ module: tabs.module,
40
+ exportName: tabs.exportName,
41
+ support: nativeUnavailable || customUnavailable ? 'unavailable' : 'supported',
42
+ stability: tabs.stability,
43
+ limitations: tabs.implementation === 'native'
44
+ ? ['Alpha API; unavailable on web and requires Expo Router 54.0.0 or newer.']
45
+ : tabs.implementation === 'custom'
46
+ ? ['Web-only Surface presentation over Expo Router headless tabs.']
47
+ : [],
48
+ };
49
+ }
50
+ function createAdapter(node, stack, tabs, platform, routerMajor) {
51
+ switch (node.type) {
52
+ case 'slot':
53
+ return {
54
+ id: 'slot',
55
+ module: 'expo-router',
56
+ exportName: 'Slot',
57
+ support: 'supported',
58
+ stability: 'stable',
59
+ limitations: [],
60
+ };
61
+ case 'stack':
62
+ return createStackAdapter(stack, routerMajor);
63
+ case 'drawer':
64
+ return {
65
+ id: 'drawer',
66
+ module: 'expo-router/drawer',
67
+ exportName: 'Drawer',
68
+ support: 'supported',
69
+ stability: 'stable',
70
+ limitations: [],
71
+ };
72
+ case 'tabs':
73
+ if (tabs === undefined)
74
+ throw new Error('Tabs planning did not resolve an adapter.');
75
+ return createTabsAdapter(tabs, platform, routerMajor);
76
+ case 'split-view':
77
+ return {
78
+ id: 'split-view',
79
+ support: 'unavailable',
80
+ stability: 'alpha',
81
+ limitations: ['Owned by the optional Split View adapter.'],
82
+ };
83
+ case 'custom':
84
+ return {
85
+ id: 'custom',
86
+ support: 'unavailable',
87
+ stability: 'stable',
88
+ limitations: ['Requires an explicitly composed custom adapter.'],
89
+ };
90
+ }
91
+ }
92
+ function resolveTabsPlan(config, platform, responsiveSize) {
93
+ if (config?.implementation === 'native' && platform === 'web') {
94
+ return {
95
+ implementation: 'native',
96
+ module: 'expo-router/unstable-native-tabs',
97
+ exportName: 'NativeTabs',
98
+ stability: 'alpha',
99
+ };
100
+ }
101
+ return resolveTabsNavigatorPlan(config, platform, responsiveSize);
19
102
  }
20
- /*** Resolve effective tabs configuration using platform, node, default, then adaptive fallback. */
21
- function resolveEffectiveTabsConfig(manifest, node, platform) {
22
- return (resolvePlatformTabsConfig(manifest.platforms, platform) ??
23
- resolveNodeTabsConfig(node) ??
24
- manifest.defaults?.tabs);
103
+ function createNodeDetails(node, stack, tabs) {
104
+ switch (node.type) {
105
+ case 'stack':
106
+ return {
107
+ stack: {
108
+ implementation: stack?.implementation ?? 'native',
109
+ ...(stack?.options === undefined ? {} : { options: stack.options }),
110
+ },
111
+ };
112
+ case 'drawer':
113
+ return { drawer: { ...(node.options === undefined ? {} : { options: node.options }) } };
114
+ case 'tabs':
115
+ return tabs === undefined ? {} : { tabs };
116
+ case 'split-view':
117
+ return {
118
+ splitView: {
119
+ columns: {
120
+ primary: node.columns.primary.screenId,
121
+ ...(node.columns.supplementary === undefined
122
+ ? {}
123
+ : { supplementary: node.columns.supplementary.screenId }),
124
+ },
125
+ ...(node.inspector === undefined ? {} : { inspector: node.inspector.screenId }),
126
+ ...(node.topColumnForCollapsing === undefined
127
+ ? {}
128
+ : { topColumnForCollapsing: node.topColumnForCollapsing }),
129
+ },
130
+ };
131
+ case 'custom':
132
+ return {
133
+ custom: {
134
+ navigatorId: node.navigatorId,
135
+ ...(node.config === undefined ? {} : { config: node.config }),
136
+ },
137
+ };
138
+ case 'slot':
139
+ return {};
140
+ }
25
141
  }
26
- /*** Convert one navigator node into a provider-aware Expo Router generation plan. */
27
- function createNodePlan(manifest, node, platform, responsiveSize) {
28
- const routes = node.routes.map((route) => ({
142
+ function createRoutePlan(manifest, route, pointer, options, responsiveSize) {
143
+ return {
29
144
  name: route.name,
30
145
  ...(route.path === undefined ? {} : { path: route.path }),
146
+ ...(route.label === undefined ? {} : { label: route.label }),
147
+ ...(route.icon === undefined ? {} : { icon: route.icon }),
148
+ ...(route.showInPrimaryNavigation === undefined
149
+ ? {}
150
+ : { showInPrimaryNavigation: route.showInPrimaryNavigation }),
151
+ guards: route.guards ?? [],
31
152
  ...(route.screenId === undefined ? {} : { screenId: route.screenId }),
153
+ ...(route.stackOptions === undefined ? {} : { stackOptions: route.stackOptions }),
32
154
  ...(route.navigator === undefined
33
155
  ? {}
34
- : { navigator: createNodePlan(manifest, route.navigator, platform, responsiveSize) }),
35
- }));
36
- if (node.type === 'stack') {
37
- return { type: 'stack', module: 'expo-router', exportName: 'Stack', routes };
38
- }
39
- if (node.type === 'drawer') {
40
- return { type: 'drawer', module: 'expo-router/drawer', exportName: 'Drawer', routes };
41
- }
42
- const tabs = resolveTabsNavigatorPlan(resolveEffectiveTabsConfig(manifest, node, platform), platform, responsiveSize);
156
+ : {
157
+ navigator: createNodePlan(manifest, route.navigator, `${pointer}/navigator`, options, responsiveSize),
158
+ }),
159
+ };
160
+ }
161
+ function createNodePlan(manifest, node, pointer, options, responsiveSize) {
162
+ const stack = node.type === 'stack'
163
+ ? resolveEffectiveStackConfig(manifest, node, options.platform)
164
+ : undefined;
165
+ const tabs = node.type === 'tabs'
166
+ ? resolveTabsPlan(resolveEffectiveTabsConfig(manifest, node, options.platform), options.platform, responsiveSize)
167
+ : undefined;
168
+ const routes = node.routes.map((route, index) => createRoutePlan(manifest, route, `${pointer}/routes/${index}`, options, responsiveSize));
43
169
  return {
44
- type: 'tabs',
45
- module: tabs.module,
46
- exportName: tabs.exportName,
170
+ type: node.type,
171
+ pointer,
172
+ adapter: createAdapter(node, stack, tabs, options.platform, parseExpoRouterMajor(options.expoRouterVersion)),
173
+ ...(node.initialRouteName === undefined ? {} : { initialRouteName: node.initialRouteName }),
47
174
  routes,
48
- tabs,
175
+ ...createNodeDetails(node, stack, tabs),
49
176
  };
50
177
  }
51
- /*** Create the complete standalone Navigator plan from only the navigator desired-state slice. */
178
+ /*** Create a disposable, provider-aware plan from only the navigator desired-state slice. */
52
179
  export function createNavigatorPlan(manifest, options) {
53
- const responsiveSize = options.responsiveSize ?? 'compact';
180
+ const context = {
181
+ platform: options.platform,
182
+ expoRouterVersion: options.expoRouterVersion,
183
+ };
184
+ const diagnostics = validateNavigatorManifest(manifest, context);
185
+ const root = createNodePlan(manifest, manifest, '', options, options.responsiveSize ?? 'compact');
54
186
  return {
55
- presetLayers: resolveNavigatorPreset(manifest.preset, manifest.type),
56
- root: createNodePlan(manifest, manifest, options.platform, responsiveSize),
187
+ context,
188
+ root,
189
+ diagnostics,
190
+ supported: diagnostics.every((diagnostic) => diagnostic.severity !== 'error') &&
191
+ root.adapter.support === 'supported',
57
192
  flows: {
58
193
  onboarding: manifest.flows?.onboarding ?? false,
59
194
  authentication: manifest.flows?.authentication ?? false,
@@ -1 +1 @@
1
- {"version":3,"file":"createNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/createNavigatorPlan.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAQtE,SAAS,kBAAkB,CACzB,KAA4C,EAC5C,WAA+B;IAE/B,MAAM,cAAc,GAAG,KAAK,EAAE,cAAc,IAAI,QAAQ,CAAC;IACzD,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,kBAAkB;YACtB,MAAM,EAAE,sBAAsB;YAC9B,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,WAAW,KAAK,SAAS,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;YACrF,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,CAAC,uCAAuC,CAAC;SACvD,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,oBAAoB;YACxB,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,CAAC,mDAAmD,CAAC;SACnE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAuB,EACvB,QAAkC,EAClC,WAA+B;IAE/B,MAAM,iBAAiB,GACrB,IAAI,CAAC,cAAc,KAAK,QAAQ;QAChC,CAAC,QAAQ,KAAK,KAAK,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,EAAE,CAAC,CAAC;IACxE,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,QAAQ,KAAK,KAAK,CAAC;IACjF,OAAO;QACL,EAAE,EAAE,QAAQ,IAAI,CAAC,cAAc,EAAE;QACjC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;QAC7E,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EACT,IAAI,CAAC,cAAc,KAAK,QAAQ;YAC9B,CAAC,CAAC,CAAC,yEAAyE,CAAC;YAC7E,CAAC,CAAC,IAAI,CAAC,cAAc,KAAK,QAAQ;gBAChC,CAAC,CAAC,CAAC,+DAA+D,CAAC;gBACnE,CAAC,CAAC,EAAE;KACX,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,IAAmB,EACnB,KAA4C,EAC5C,IAAmC,EACnC,QAAkC,EAClC,WAA+B;IAE/B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO;gBACL,EAAE,EAAE,MAAM;gBACV,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,WAAW;gBACpB,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,EAAE;aAChB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAChD,KAAK,QAAQ;YACX,OAAO;gBACL,EAAE,EAAE,QAAQ;gBACZ,MAAM,EAAE,oBAAoB;gBAC5B,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,WAAW;gBACpB,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,EAAE;aAChB,CAAC;QACJ,KAAK,MAAM;YACT,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACrF,OAAO,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxD,KAAK,YAAY;YACf,OAAO;gBACL,EAAE,EAAE,YAAY;gBAChB,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,OAAO;gBAClB,WAAW,EAAE,CAAC,2CAA2C,CAAC;aAC3D,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,EAAE,EAAE,QAAQ;gBACZ,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,CAAC,iDAAiD,CAAC;aACjE,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,MAA4C,EAC5C,QAAkC,EAClC,cAAuC;IAEvC,IAAI,MAAM,EAAE,cAAc,KAAK,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9D,OAAO;YACL,cAAc,EAAE,QAAQ;YACxB,MAAM,EAAE,kCAAkC;YAC1C,UAAU,EAAE,YAAY;YACxB,SAAS,EAAE,OAAO;SACnB,CAAC;IACJ,CAAC;IACD,OAAO,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AACpE,CAAC;AAMD,SAAS,iBAAiB,CACxB,IAAmB,EACnB,KAA4C,EAC5C,IAAmC;IAEnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO;gBACL,KAAK,EAAE;oBACL,cAAc,EAAE,KAAK,EAAE,cAAc,IAAI,QAAQ;oBACjD,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;iBACpE;aACF,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1F,KAAK,MAAM;YACT,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC5C,KAAK,YAAY;YACf,OAAO;gBACL,SAAS,EAAE;oBACT,OAAO,EAAE;wBACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ;wBACtC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS;4BAC1C,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;qBAC5D;oBACD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;oBAC/E,GAAG,CAAC,IAAI,CAAC,sBAAsB,KAAK,SAAS;wBAC3C,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;iBAC7D;aACF,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,MAAM,EAAE;oBACN,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;iBAC9D;aACF,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,QAA8B,EAC9B,KAAsC,EACtC,OAAe,EACf,OAAmC,EACnC,cAAuC;IAEvC,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,uBAAuB,KAAK,SAAS;YAC7C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAC/D,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QACjF,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,SAAS,EAAE,cAAc,CACvB,QAAQ,EACR,KAAK,CAAC,SAAS,EACf,GAAG,OAAO,YAAY,EACtB,OAAO,EACP,cAAc,CACf;aACF,CAAC;KACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,QAA8B,EAC9B,IAAmB,EACnB,OAAe,EACf,OAAmC,EACnC,cAAuC;IAEvC,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,OAAO;QACnB,CAAC,CAAC,2BAA2B,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,MAAM;QAClB,CAAC,CAAC,eAAe,CACb,0BAA0B,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC5D,OAAO,CAAC,QAAQ,EAChB,cAAc,CACf;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC9C,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,WAAW,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,CACxF,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO;QACP,OAAO,EAAE,aAAa,CACpB,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,OAAO,CAAC,QAAQ,EAChB,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAChD;QACD,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3F,MAAM;QACN,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CACjC,QAA8B,EAC9B,OAAmC;IAEnC,MAAM,OAAO,GAAG;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KACpC,CAAC;IACX,MAAM,WAAW,GAAG,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC;IAClG,OAAO;QACL,OAAO;QACP,IAAI;QACJ,WAAW;QACX,SAAS,EACP,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,WAAW;QACtC,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,IAAI,KAAK;YAC/C,cAAc,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,IAAI,KAAK;SACxD;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AppNavigatorManifest, StackImplementationConfig, StackNavigatorNode, TabsImplementationConfig, TabsNavigatorNode } from '@ankhorage/contracts/navigator';
2
+ import type { NavigatorRuntimePlatform } from '../definitions/NavigatorPlan';
3
+ export declare function parseExpoRouterMajor(version: string): number | undefined;
4
+ export declare function resolveEffectiveStackConfig(manifest: AppNavigatorManifest, node: StackNavigatorNode, platform: NavigatorRuntimePlatform): StackImplementationConfig;
5
+ export declare function resolveEffectiveTabsConfig(manifest: AppNavigatorManifest, node: TabsNavigatorNode, platform: NavigatorRuntimePlatform): TabsImplementationConfig | undefined;
6
+ //# sourceMappingURL=resolveNavigatorConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveNavigatorConfig.d.ts","sourceRoot":"","sources":["../../src/expo-router/resolveNavigatorConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAE7E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxE;AA2CD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,wBAAwB,GACjC,yBAAyB,CAM3B;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,wBAAwB,GACjC,wBAAwB,GAAG,SAAS,CAMtC"}
@@ -0,0 +1,48 @@
1
+ export function parseExpoRouterMajor(version) {
2
+ const match = /^(\d+)\.\d+\.\d+(?:[-+].*)?$/u.exec(version);
3
+ return match?.[1] === undefined ? undefined : Number(match[1]);
4
+ }
5
+ function resolveNodeStackConfig(node) {
6
+ if (node.implementation === undefined && node.options === undefined)
7
+ return undefined;
8
+ return {
9
+ implementation: node.implementation ?? 'native',
10
+ ...(node.options === undefined ? {} : { options: node.options }),
11
+ };
12
+ }
13
+ function resolveNodeTabsConfig(node) {
14
+ if (node.implementation !== undefined)
15
+ return node;
16
+ return node.native !== undefined || node.web !== undefined ? node : undefined;
17
+ }
18
+ function resolvePlatformStackConfig(platforms, platform) {
19
+ switch (platform) {
20
+ case 'android':
21
+ return platforms?.android?.stack;
22
+ case 'ios':
23
+ return platforms?.ios?.stack;
24
+ case 'web':
25
+ return platforms?.web?.stack;
26
+ }
27
+ }
28
+ function resolvePlatformTabsConfig(platforms, platform) {
29
+ switch (platform) {
30
+ case 'android':
31
+ return platforms?.android?.tabs;
32
+ case 'ios':
33
+ return platforms?.ios?.tabs;
34
+ case 'web':
35
+ return platforms?.web?.tabs;
36
+ }
37
+ }
38
+ export function resolveEffectiveStackConfig(manifest, node, platform) {
39
+ return (resolvePlatformStackConfig(manifest.platforms, platform) ??
40
+ resolveNodeStackConfig(node) ??
41
+ manifest.defaults?.stack ?? { implementation: 'native' });
42
+ }
43
+ export function resolveEffectiveTabsConfig(manifest, node, platform) {
44
+ return (resolvePlatformTabsConfig(manifest.platforms, platform) ??
45
+ resolveNodeTabsConfig(node) ??
46
+ manifest.defaults?.tabs);
47
+ }
48
+ //# sourceMappingURL=resolveNavigatorConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveNavigatorConfig.js","sourceRoot":"","sources":["../../src/expo-router/resolveNavigatorConfig.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAwB;IACtD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtF,OAAO;QACL,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,QAAQ;QAC/C,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;KACpC,CAAC;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAuB;IACpD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,0BAA0B,CACjC,SAAyC,EACzC,QAAkC;IAElC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;QAC/B,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,SAAyC,EACzC,QAAkC;IAElC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;QAC9B,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA8B,EAC9B,IAAwB,EACxB,QAAkC;IAElC,OAAO,CACL,0BAA0B,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;QACxD,sBAAsB,CAAC,IAAI,CAAC;QAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAA8B,EAC9B,IAAuB,EACvB,QAAkC;IAElC,OAAO,CACL,yBAAyB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;QACvD,qBAAqB,CAAC,IAAI,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CACxB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTabsNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAkEtC,2FAA2F;AAC3F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,uBAAuB,GAC5B,iBAAiB,CAcnB"}
1
+ {"version":3,"file":"resolveTabsNavigatorPlan.d.ts","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAsFtC,2FAA2F;AAC3F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,uBAAuB,GAC5B,iBAAiB,CAcnB"}
@@ -10,8 +10,8 @@ function resolveAdaptiveConfig(config) {
10
10
  ? config
11
11
  : undefined;
12
12
  }
13
- /*** Create the SDK 57 native-tabs plan and reject unsupported Web usage. */
14
- function createNativeTabsPlan(platform) {
13
+ /*** Create the alpha native-tabs plan and reject unsupported Web usage. */
14
+ function createNativeTabsPlan(platform, config) {
15
15
  if (platform === 'web') {
16
16
  throw new Error('Native tabs are not available for the Web navigator plan.');
17
17
  }
@@ -19,7 +19,13 @@ function createNativeTabsPlan(platform) {
19
19
  implementation: 'native',
20
20
  module: 'expo-router/unstable-native-tabs',
21
21
  exportName: 'NativeTabs',
22
- stability: 'unstable',
22
+ stability: 'alpha',
23
+ ...(config?.minimizeBehavior === undefined
24
+ ? {}
25
+ : { minimizeBehavior: config.minimizeBehavior }),
26
+ ...(config?.bottomAccessory === undefined
27
+ ? {}
28
+ : { bottomAccessoryScreenId: config.bottomAccessory.screenId }),
23
29
  };
24
30
  }
25
31
  /*** Create the stable JavaScript tabs plan for bottom or top presentation. */
@@ -35,18 +41,25 @@ function createJavaScriptTabsPlan(config) {
35
41
  }
36
42
  /*** Create the stable headless custom-tabs plan for Web or explicit custom use. */
37
43
  function createCustomTabsPlan(config, size) {
44
+ const resolved = resolveCustomTabsPresentation(config, size);
45
+ const presentations = {
46
+ compact: resolveCustomTabsPresentation(config, 'compact').presentation,
47
+ medium: resolveCustomTabsPresentation(config, 'medium').presentation,
48
+ expanded: resolveCustomTabsPresentation(config, 'expanded').presentation,
49
+ };
38
50
  return {
39
51
  implementation: 'custom',
40
52
  module: 'expo-router/ui',
41
53
  exportName: 'Tabs',
42
54
  stability: 'stable',
43
- ...resolveCustomTabsPresentation(config, size),
55
+ ...resolved,
56
+ presentations,
44
57
  };
45
58
  }
46
59
  /*** Resolve the adaptive tabs plan for the selected runtime platform. */
47
60
  function createAdaptiveTabsPlan(config, platform, size) {
48
61
  if (platform !== 'web')
49
- return createNativeTabsPlan(platform);
62
+ return createNativeTabsPlan(platform, resolveAdaptiveConfig(config)?.native);
50
63
  return createCustomTabsPlan(resolveAdaptiveConfig(config)?.web ?? DEFAULT_WEB_CUSTOM_TABS, size);
51
64
  }
52
65
  /*** Resolve the Expo Router module/export and presentation for one tabs implementation. */
@@ -58,7 +71,7 @@ export function resolveTabsNavigatorPlan(config, platform, size) {
58
71
  case 'adaptive':
59
72
  return createAdaptiveTabsPlan(config, platform, size);
60
73
  case 'native':
61
- return createNativeTabsPlan(platform);
74
+ return createNativeTabsPlan(platform, config);
62
75
  case 'javascript':
63
76
  return createJavaScriptTabsPlan(config);
64
77
  case 'custom':
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTabsNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAE9F,MAAM,uBAAuB,GAAG;IAC9B,YAAY,EAAE,YAAY;CAClB,CAAC;AAEX,mFAAmF;AACnF,SAAS,qBAAqB,CAC5B,MAA4C;IAE5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU;QAChF,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,4EAA4E;AAC5E,SAAS,oBAAoB,CAAC,QAAkC;IAC9D,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO;QACL,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,kCAAkC;QAC1C,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,UAAU;KACtB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,wBAAwB,CAAC,MAA4B;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC;IAC1C,OAAO;QACL,cAAc,EAAE,YAAY;QAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,qBAAqB;QAC/D,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QACpC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;KACrC,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,oBAAoB,CAC3B,MAAgD,EAChD,IAA6B;IAE7B,OAAO;QACL,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,GAAG,6BAA6B,CAAC,MAAM,EAAE,IAAI,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAS,sBAAsB,CAC7B,MAA4C,EAC5C,QAAkC,EAClC,IAA6B;IAE7B,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9D,OAAO,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,uBAAuB,EAAE,IAAI,CAAC,CAAC;AACnG,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CACtC,MAA4C,EAC5C,QAAkC,EAClC,IAA6B;IAE7B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEhF,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;QAC9B,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACxC,KAAK,YAAY;YACf,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"resolveTabsNavigatorPlan.js","sourceRoot":"","sources":["../../src/expo-router/resolveTabsNavigatorPlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { NavigatorGeneratedFile, NavigatorGenerationBindings, NavigatorPlan } from '../definitions/NavigatorPlan';
2
+ /*** Generate deterministic Expo Router files from a validated disposable plan and narrow bindings. */
3
+ export declare function generateNavigatorFiles(plan: NavigatorPlan, bindings: NavigatorGenerationBindings): readonly NavigatorGeneratedFile[];
4
+ //# sourceMappingURL=generateNavigatorFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateNavigatorFiles.d.ts","sourceRoot":"","sources":["../../src/generation/generateNavigatorFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAE3B,aAAa,EAGd,MAAM,8BAA8B,CAAC;AAwMtC,sGAAsG;AACtG,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,2BAA2B,GACpC,SAAS,sBAAsB,EAAE,CAkBnC"}