@ankhorage/contracts 10.1.0 → 11.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.
- package/CHANGELOG.md +14 -0
- package/README.md +1 -1
- package/dist/appManifest/navigator.d.ts +3 -0
- package/dist/appManifest/navigator.d.ts.map +1 -0
- package/dist/appManifest/navigator.js +142 -0
- package/dist/appManifest/navigator.js.map +1 -0
- package/dist/appManifest/navigatorOptions.d.ts +13 -0
- package/dist/appManifest/navigatorOptions.d.ts.map +1 -0
- package/dist/appManifest/navigatorOptions.js +226 -0
- package/dist/appManifest/navigatorOptions.js.map +1 -0
- package/dist/appManifest/screens.d.ts +1 -2
- package/dist/appManifest/screens.d.ts.map +1 -1
- package/dist/appManifest/screens.js +2 -116
- package/dist/appManifest/screens.js.map +1 -1
- package/dist/navigator/extensions.d.ts +23 -0
- package/dist/navigator/extensions.d.ts.map +1 -0
- package/dist/navigator/extensions.js +2 -0
- package/dist/navigator/extensions.js.map +1 -0
- package/dist/navigator/generation.d.ts +26 -0
- package/dist/navigator/generation.d.ts.map +1 -0
- package/dist/navigator/generation.js +2 -0
- package/dist/navigator/generation.js.map +1 -0
- package/dist/navigator/planning.d.ts +105 -0
- package/dist/navigator/planning.d.ts.map +1 -0
- package/dist/navigator/planning.js +2 -0
- package/dist/navigator/planning.js.map +1 -0
- package/dist/navigator.d.ts +104 -15
- package/dist/navigator.d.ts.map +1 -1
- package/dist/navigator.js +23 -1
- package/dist/navigator.js.map +1 -1
- package/package.json +4 -4
- package/src/appManifest/navigator.ts +179 -0
- package/src/appManifest/navigatorOptions.ts +292 -0
- package/src/appManifest/screens.ts +3 -170
- package/src/contracts.test.ts +1 -1
- package/src/navigator/extensions.ts +26 -0
- package/src/navigator/generation.ts +28 -0
- package/src/navigator/planning.ts +146 -0
- package/src/navigator-runtime-contracts.test.ts +53 -0
- package/src/navigator-validation.test.ts +153 -0
- package/src/navigator.test.ts +153 -10
- package/src/navigator.ts +180 -13
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import { COLOR_HARMONIES } from '@ankhorage/color-theory';
|
|
2
|
-
import { CUSTOM_TABS_PRESENTATIONS, FIXED_CUSTOM_TABS_PRESENTATIONS, JAVASCRIPT_TABS_PRESENTATIONS, NAVIGATOR_PRESETS, NAVIGATOR_TYPES, } from '../navigator';
|
|
3
2
|
import { APP_CATEGORIES } from '../types';
|
|
4
3
|
import { isBindingValueSource, isScreenDataLoaderDefinition } from './bindings';
|
|
5
|
-
import {
|
|
6
|
-
|
|
4
|
+
import { isOptionalNumber, isOptionalString, isRecord } from './shared';
|
|
5
|
+
export { isAppNavigatorManifest } from './navigator';
|
|
7
6
|
const APP_CATEGORY_SET = new Set(APP_CATEGORIES);
|
|
8
7
|
const COLOR_HARMONY_SET = new Set(COLOR_HARMONIES);
|
|
9
|
-
const CUSTOM_TABS_PRESENTATION_SET = new Set(CUSTOM_TABS_PRESENTATIONS);
|
|
10
|
-
const FIXED_CUSTOM_TABS_PRESENTATION_SET = new Set(FIXED_CUSTOM_TABS_PRESENTATIONS);
|
|
11
|
-
const JAVASCRIPT_TABS_PRESENTATION_SET = new Set(JAVASCRIPT_TABS_PRESENTATIONS);
|
|
12
|
-
const NAVIGATOR_PRESET_SET = new Set(NAVIGATOR_PRESETS);
|
|
13
|
-
const NAVIGATOR_TYPE_SET = new Set(NAVIGATOR_TYPES);
|
|
14
8
|
const SPLASH_SCREEN_RESIZE_MODE_SET = new Set(['contain', 'cover', 'native']);
|
|
15
9
|
export function isManifestMetadata(value) {
|
|
16
10
|
return (isRecord(value) &&
|
|
@@ -30,16 +24,6 @@ export function isThemeConfig(value) {
|
|
|
30
24
|
isThemeModeConfig(value.light) &&
|
|
31
25
|
isThemeModeConfig(value.dark));
|
|
32
26
|
}
|
|
33
|
-
/*** Validate the complete serialized `AppManifest.navigator` slice. */
|
|
34
|
-
export function isAppNavigatorManifest(value) {
|
|
35
|
-
return (isRecord(value) &&
|
|
36
|
-
isNavigatorNode(value) &&
|
|
37
|
-
(value.preset === undefined ||
|
|
38
|
-
(typeof value.preset === 'string' && NAVIGATOR_PRESET_SET.has(value.preset))) &&
|
|
39
|
-
(value.flows === undefined || isNavigatorFlows(value.flows)) &&
|
|
40
|
-
(value.defaults === undefined || isNavigatorDefaults(value.defaults)) &&
|
|
41
|
-
(value.platforms === undefined || isNavigatorPlatforms(value.platforms)));
|
|
42
|
-
}
|
|
43
27
|
export function isScreenRegistry(value) {
|
|
44
28
|
return (isRecord(value) &&
|
|
45
29
|
Object.entries(value).every(([registryKey, screen]) => isScreenSpec(screen) && isRecord(screen) && registryKey === screen.id));
|
|
@@ -85,104 +69,6 @@ function isScreenSpec(value) {
|
|
|
85
69
|
(value.requires === undefined || isScreenRequirements(value.requires)) &&
|
|
86
70
|
isUiNode(value.root));
|
|
87
71
|
}
|
|
88
|
-
/*** Validate one nested navigator node independently from app-level authoring metadata. */
|
|
89
|
-
function isNavigatorNode(value) {
|
|
90
|
-
return (isRecord(value) &&
|
|
91
|
-
typeof value.type === 'string' &&
|
|
92
|
-
NAVIGATOR_TYPE_SET.has(value.type) &&
|
|
93
|
-
isOptionalString(value.initialRouteName) &&
|
|
94
|
-
Array.isArray(value.routes) &&
|
|
95
|
-
value.routes.every(isRouteDefinition) &&
|
|
96
|
-
(value.options === undefined || isRecord(value.options)) &&
|
|
97
|
-
(value.type !== 'tabs' || isTabsImplementationConfig(value)));
|
|
98
|
-
}
|
|
99
|
-
function isRouteDefinition(value) {
|
|
100
|
-
return (isRecord(value) &&
|
|
101
|
-
typeof value.name === 'string' &&
|
|
102
|
-
isOptionalString(value.path) &&
|
|
103
|
-
isOptionalString(value.label) &&
|
|
104
|
-
(value.icon === undefined || isIconSpec(value.icon)) &&
|
|
105
|
-
isOptionalBoolean(value.showInPrimaryNavigation) &&
|
|
106
|
-
(value.guards === undefined || isStringArray(value.guards)) &&
|
|
107
|
-
isOptionalString(value.screenId) &&
|
|
108
|
-
(value.navigator === undefined || isNavigatorNode(value.navigator)));
|
|
109
|
-
}
|
|
110
|
-
/*** Validate tabs implementation desired state, with omitted implementation meaning adaptive. */
|
|
111
|
-
function isTabsImplementationConfig(value) {
|
|
112
|
-
if (value.implementation === undefined || value.implementation === 'adaptive') {
|
|
113
|
-
return ((value.native === undefined || isNativeTabsConfig(value.native)) &&
|
|
114
|
-
(value.web === undefined || isCustomTabsWebConfig(value.web)));
|
|
115
|
-
}
|
|
116
|
-
if (value.implementation === 'native')
|
|
117
|
-
return true;
|
|
118
|
-
if (value.implementation === 'javascript') {
|
|
119
|
-
return (value.presentation === undefined ||
|
|
120
|
-
(typeof value.presentation === 'string' &&
|
|
121
|
-
JAVASCRIPT_TABS_PRESENTATION_SET.has(value.presentation)));
|
|
122
|
-
}
|
|
123
|
-
return value.implementation === 'custom' && isCustomTabsConfig(value);
|
|
124
|
-
}
|
|
125
|
-
/*** Validate the native branch used by adaptive tabs. */
|
|
126
|
-
function isNativeTabsConfig(value) {
|
|
127
|
-
return isRecord(value) && value.implementation === 'native';
|
|
128
|
-
}
|
|
129
|
-
/*** Validate a full custom-tabs implementation config. */
|
|
130
|
-
function isCustomTabsConfig(value) {
|
|
131
|
-
return value.implementation === 'custom' && isCustomTabsPresentationConfig(value);
|
|
132
|
-
}
|
|
133
|
-
/*** Validate the implementation-free custom-tabs Web branch inside adaptive tabs. */
|
|
134
|
-
function isCustomTabsWebConfig(value) {
|
|
135
|
-
return (isRecord(value) && value.implementation === undefined && isCustomTabsPresentationConfig(value));
|
|
136
|
-
}
|
|
137
|
-
/*** Validate custom-tab presentation and its conditional serializable configuration. */
|
|
138
|
-
function isCustomTabsPresentationConfig(value) {
|
|
139
|
-
if (typeof value.presentation !== 'string' ||
|
|
140
|
-
!CUSTOM_TABS_PRESENTATION_SET.has(value.presentation)) {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
if (value.responsive !== undefined && !isResponsiveTabsPresentation(value.responsive)) {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
if (!isOptionalString(value.customPresentationId))
|
|
147
|
-
return false;
|
|
148
|
-
if (value.presentation === 'responsive' && value.responsive === undefined)
|
|
149
|
-
return false;
|
|
150
|
-
return (value.presentation !== 'custom' ||
|
|
151
|
-
(typeof value.customPresentationId === 'string' && value.customPresentationId.length > 0));
|
|
152
|
-
}
|
|
153
|
-
/*** Validate semantic compact/medium/expanded custom-tab presentation mapping. */
|
|
154
|
-
function isResponsiveTabsPresentation(value) {
|
|
155
|
-
return (isRecord(value) &&
|
|
156
|
-
typeof value.compact === 'string' &&
|
|
157
|
-
FIXED_CUSTOM_TABS_PRESENTATION_SET.has(value.compact) &&
|
|
158
|
-
(value.medium === undefined ||
|
|
159
|
-
(typeof value.medium === 'string' && FIXED_CUSTOM_TABS_PRESENTATION_SET.has(value.medium))) &&
|
|
160
|
-
typeof value.expanded === 'string' &&
|
|
161
|
-
FIXED_CUSTOM_TABS_PRESENTATION_SET.has(value.expanded));
|
|
162
|
-
}
|
|
163
|
-
/*** Validate optional app-level navigator flow intent. */
|
|
164
|
-
function isNavigatorFlows(value) {
|
|
165
|
-
return (isRecord(value) &&
|
|
166
|
-
isOptionalBoolean(value.onboarding) &&
|
|
167
|
-
isOptionalBoolean(value.authentication));
|
|
168
|
-
}
|
|
169
|
-
/*** Validate package-owned navigator defaults without requiring a navigator node type. */
|
|
170
|
-
function isNavigatorDefaults(value) {
|
|
171
|
-
return (isRecord(value) &&
|
|
172
|
-
(value.tabs === undefined || (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs))));
|
|
173
|
-
}
|
|
174
|
-
/*** Validate per-platform navigator implementation overrides. */
|
|
175
|
-
function isNavigatorPlatforms(value) {
|
|
176
|
-
return (isRecord(value) &&
|
|
177
|
-
(value.android === undefined || isNavigatorPlatformConfig(value.android)) &&
|
|
178
|
-
(value.ios === undefined || isNavigatorPlatformConfig(value.ios)) &&
|
|
179
|
-
(value.web === undefined || isNavigatorPlatformConfig(value.web)));
|
|
180
|
-
}
|
|
181
|
-
/*** Validate one platform-specific navigator override slice. */
|
|
182
|
-
function isNavigatorPlatformConfig(value) {
|
|
183
|
-
return (isRecord(value) &&
|
|
184
|
-
(value.tabs === undefined || (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs))));
|
|
185
|
-
}
|
|
186
72
|
function isSplashScreenModeSpec(value) {
|
|
187
73
|
return (isRecord(value) &&
|
|
188
74
|
isOptionalString(value.image) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screens.js","sourceRoot":"","sources":["../../src/appManifest/screens.ts"],"names":[],"mappings":"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","sourcesContent":["import { COLOR_HARMONIES } from '@ankhorage/color-theory';\n\nimport {\n CUSTOM_TABS_PRESENTATIONS,\n FIXED_CUSTOM_TABS_PRESENTATIONS,\n JAVASCRIPT_TABS_PRESENTATIONS,\n NAVIGATOR_PRESETS,\n NAVIGATOR_TYPES,\n} from '../navigator';\nimport { APP_CATEGORIES } from '../types';\nimport { isBindingValueSource, isScreenDataLoaderDefinition } from './bindings';\nimport { isIconSpec } from './icon';\nimport {\n isOptionalBoolean,\n isOptionalNumber,\n isOptionalString,\n isRecord,\n isStringArray,\n} from './shared';\n\nconst APP_CATEGORY_SET = new Set<string>(APP_CATEGORIES);\nconst COLOR_HARMONY_SET = new Set<string>(COLOR_HARMONIES);\nconst CUSTOM_TABS_PRESENTATION_SET = new Set<string>(CUSTOM_TABS_PRESENTATIONS);\nconst FIXED_CUSTOM_TABS_PRESENTATION_SET = new Set<string>(FIXED_CUSTOM_TABS_PRESENTATIONS);\nconst JAVASCRIPT_TABS_PRESENTATION_SET = new Set<string>(JAVASCRIPT_TABS_PRESENTATIONS);\nconst NAVIGATOR_PRESET_SET = new Set<string>(NAVIGATOR_PRESETS);\nconst NAVIGATOR_TYPE_SET = new Set<string>(NAVIGATOR_TYPES);\nconst SPLASH_SCREEN_RESIZE_MODE_SET = new Set<string>(['contain', 'cover', 'native']);\n\nexport function isManifestMetadata(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.name === 'string' &&\n typeof value.slug === 'string' &&\n typeof value.version === 'string' &&\n typeof value.category === 'string' &&\n APP_CATEGORY_SET.has(value.category) &&\n typeof value.themeId === 'string' &&\n isOptionalString(value.created) &&\n isOptionalString(value.updated)\n );\n}\n\nexport function isThemeConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.name === 'string' &&\n isThemeModeConfig(value.light) &&\n isThemeModeConfig(value.dark)\n );\n}\n\n/*** Validate the complete serialized `AppManifest.navigator` slice. */\nexport function isAppNavigatorManifest(value: unknown): boolean {\n return (\n isRecord(value) &&\n isNavigatorNode(value) &&\n (value.preset === undefined ||\n (typeof value.preset === 'string' && NAVIGATOR_PRESET_SET.has(value.preset))) &&\n (value.flows === undefined || isNavigatorFlows(value.flows)) &&\n (value.defaults === undefined || isNavigatorDefaults(value.defaults)) &&\n (value.platforms === undefined || isNavigatorPlatforms(value.platforms))\n );\n}\n\nexport function isScreenRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([registryKey, screen]) =>\n isScreenSpec(screen) && isRecord(screen) && registryKey === screen.id,\n )\n );\n}\n\nexport function isSplashScreenSpec(value: unknown): boolean {\n return (\n isSplashScreenModeSpec(value) &&\n isRecord(value) &&\n (value.dark === undefined || isSplashScreenModeSpec(value.dark))\n );\n}\n\nfunction isThemeModeConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.primaryColor === 'string' &&\n typeof value.harmony === 'string' &&\n COLOR_HARMONY_SET.has(value.harmony)\n );\n}\n\nfunction isUiNode(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.type === 'string' &&\n isOptionalString(value.alias) &&\n (value.props === undefined || isRecord(value.props)) &&\n (value.style === undefined || isRecord(value.style)) &&\n (value.repeat === undefined || isUiNodeRepeatSpec(value.repeat)) &&\n (value.children === undefined ||\n (Array.isArray(value.children) && value.children.every(isUiNode)))\n );\n}\n\nfunction isUiNodeRepeatSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingValueSource(value.source) &&\n isOptionalString(value.itemAlias) &&\n isOptionalString(value.keyPath) &&\n (value.empty === undefined || (Array.isArray(value.empty) && value.empty.every(isUiNode)))\n );\n}\n\nfunction isScreenSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.name === 'string' &&\n isOptionalString(value.title) &&\n isOptionalString(value.description) &&\n (value.dataLoaders === undefined ||\n (Array.isArray(value.dataLoaders) &&\n value.dataLoaders.every(isScreenDataLoaderDefinition))) &&\n (value.requires === undefined || isScreenRequirements(value.requires)) &&\n isUiNode(value.root)\n );\n}\n\n/*** Validate one nested navigator node independently from app-level authoring metadata. */\nfunction isNavigatorNode(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.type === 'string' &&\n NAVIGATOR_TYPE_SET.has(value.type) &&\n isOptionalString(value.initialRouteName) &&\n Array.isArray(value.routes) &&\n value.routes.every(isRouteDefinition) &&\n (value.options === undefined || isRecord(value.options)) &&\n (value.type !== 'tabs' || isTabsImplementationConfig(value))\n );\n}\n\nfunction isRouteDefinition(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.name === 'string' &&\n isOptionalString(value.path) &&\n isOptionalString(value.label) &&\n (value.icon === undefined || isIconSpec(value.icon)) &&\n isOptionalBoolean(value.showInPrimaryNavigation) &&\n (value.guards === undefined || isStringArray(value.guards)) &&\n isOptionalString(value.screenId) &&\n (value.navigator === undefined || isNavigatorNode(value.navigator))\n );\n}\n\n/*** Validate tabs implementation desired state, with omitted implementation meaning adaptive. */\nfunction isTabsImplementationConfig(value: Record<string, unknown>): boolean {\n if (value.implementation === undefined || value.implementation === 'adaptive') {\n return (\n (value.native === undefined || isNativeTabsConfig(value.native)) &&\n (value.web === undefined || isCustomTabsWebConfig(value.web))\n );\n }\n\n if (value.implementation === 'native') return true;\n\n if (value.implementation === 'javascript') {\n return (\n value.presentation === undefined ||\n (typeof value.presentation === 'string' &&\n JAVASCRIPT_TABS_PRESENTATION_SET.has(value.presentation))\n );\n }\n\n return value.implementation === 'custom' && isCustomTabsConfig(value);\n}\n\n/*** Validate the native branch used by adaptive tabs. */\nfunction isNativeTabsConfig(value: unknown): boolean {\n return isRecord(value) && value.implementation === 'native';\n}\n\n/*** Validate a full custom-tabs implementation config. */\nfunction isCustomTabsConfig(value: Record<string, unknown>): boolean {\n return value.implementation === 'custom' && isCustomTabsPresentationConfig(value);\n}\n\n/*** Validate the implementation-free custom-tabs Web branch inside adaptive tabs. */\nfunction isCustomTabsWebConfig(value: unknown): boolean {\n return (\n isRecord(value) && value.implementation === undefined && isCustomTabsPresentationConfig(value)\n );\n}\n\n/*** Validate custom-tab presentation and its conditional serializable configuration. */\nfunction isCustomTabsPresentationConfig(value: Record<string, unknown>): boolean {\n if (\n typeof value.presentation !== 'string' ||\n !CUSTOM_TABS_PRESENTATION_SET.has(value.presentation)\n ) {\n return false;\n }\n\n if (value.responsive !== undefined && !isResponsiveTabsPresentation(value.responsive)) {\n return false;\n }\n\n if (!isOptionalString(value.customPresentationId)) return false;\n if (value.presentation === 'responsive' && value.responsive === undefined) return false;\n\n return (\n value.presentation !== 'custom' ||\n (typeof value.customPresentationId === 'string' && value.customPresentationId.length > 0)\n );\n}\n\n/*** Validate semantic compact/medium/expanded custom-tab presentation mapping. */\nfunction isResponsiveTabsPresentation(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.compact === 'string' &&\n FIXED_CUSTOM_TABS_PRESENTATION_SET.has(value.compact) &&\n (value.medium === undefined ||\n (typeof value.medium === 'string' && FIXED_CUSTOM_TABS_PRESENTATION_SET.has(value.medium))) &&\n typeof value.expanded === 'string' &&\n FIXED_CUSTOM_TABS_PRESENTATION_SET.has(value.expanded)\n );\n}\n\n/*** Validate optional app-level navigator flow intent. */\nfunction isNavigatorFlows(value: unknown): boolean {\n return (\n isRecord(value) &&\n isOptionalBoolean(value.onboarding) &&\n isOptionalBoolean(value.authentication)\n );\n}\n\n/*** Validate package-owned navigator defaults without requiring a navigator node type. */\nfunction isNavigatorDefaults(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.tabs === undefined || (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs)))\n );\n}\n\n/*** Validate per-platform navigator implementation overrides. */\nfunction isNavigatorPlatforms(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.android === undefined || isNavigatorPlatformConfig(value.android)) &&\n (value.ios === undefined || isNavigatorPlatformConfig(value.ios)) &&\n (value.web === undefined || isNavigatorPlatformConfig(value.web))\n );\n}\n\n/*** Validate one platform-specific navigator override slice. */\nfunction isNavigatorPlatformConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.tabs === undefined || (isRecord(value.tabs) && isTabsImplementationConfig(value.tabs)))\n );\n}\n\nfunction isSplashScreenModeSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isOptionalString(value.image) &&\n isOptionalNumber(value.imageWidth) &&\n (value.resizeMode === undefined ||\n (typeof value.resizeMode === 'string' &&\n SPLASH_SCREEN_RESIZE_MODE_SET.has(value.resizeMode))) &&\n isOptionalString(value.backgroundColor)\n );\n}\n\nfunction isScreenRequirements(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.permissions === undefined || isRequirementArray(value.permissions, 'permission')) &&\n (value.capabilities === undefined || isRequirementArray(value.capabilities, 'capability'))\n );\n}\n\nfunction isRequirementArray(value: unknown, key: 'capability' | 'permission'): boolean {\n return (\n Array.isArray(value) &&\n value.every((entry) => isRecord(entry) && typeof entry[key] === 'string')\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"screens.js","sourceRoot":"","sources":["../../src/appManifest/screens.ts"],"names":[],"mappings":"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","sourcesContent":["import { COLOR_HARMONIES } from '@ankhorage/color-theory';\n\nimport { APP_CATEGORIES } from '../types';\nimport { isBindingValueSource, isScreenDataLoaderDefinition } from './bindings';\nimport { isOptionalNumber, isOptionalString, isRecord } from './shared';\n\nexport { isAppNavigatorManifest } from './navigator';\n\nconst APP_CATEGORY_SET = new Set<string>(APP_CATEGORIES);\nconst COLOR_HARMONY_SET = new Set<string>(COLOR_HARMONIES);\nconst SPLASH_SCREEN_RESIZE_MODE_SET = new Set<string>(['contain', 'cover', 'native']);\n\nexport function isManifestMetadata(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.name === 'string' &&\n typeof value.slug === 'string' &&\n typeof value.version === 'string' &&\n typeof value.category === 'string' &&\n APP_CATEGORY_SET.has(value.category) &&\n typeof value.themeId === 'string' &&\n isOptionalString(value.created) &&\n isOptionalString(value.updated)\n );\n}\n\nexport function isThemeConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.name === 'string' &&\n isThemeModeConfig(value.light) &&\n isThemeModeConfig(value.dark)\n );\n}\n\nexport function isScreenRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([registryKey, screen]) =>\n isScreenSpec(screen) && isRecord(screen) && registryKey === screen.id,\n )\n );\n}\n\nexport function isSplashScreenSpec(value: unknown): boolean {\n return (\n isSplashScreenModeSpec(value) &&\n isRecord(value) &&\n (value.dark === undefined || isSplashScreenModeSpec(value.dark))\n );\n}\n\nfunction isThemeModeConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.primaryColor === 'string' &&\n typeof value.harmony === 'string' &&\n COLOR_HARMONY_SET.has(value.harmony)\n );\n}\n\nfunction isUiNode(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.type === 'string' &&\n isOptionalString(value.alias) &&\n (value.props === undefined || isRecord(value.props)) &&\n (value.style === undefined || isRecord(value.style)) &&\n (value.repeat === undefined || isUiNodeRepeatSpec(value.repeat)) &&\n (value.children === undefined ||\n (Array.isArray(value.children) && value.children.every(isUiNode)))\n );\n}\n\nfunction isUiNodeRepeatSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingValueSource(value.source) &&\n isOptionalString(value.itemAlias) &&\n isOptionalString(value.keyPath) &&\n (value.empty === undefined || (Array.isArray(value.empty) && value.empty.every(isUiNode)))\n );\n}\n\nfunction isScreenSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.name === 'string' &&\n isOptionalString(value.title) &&\n isOptionalString(value.description) &&\n (value.dataLoaders === undefined ||\n (Array.isArray(value.dataLoaders) &&\n value.dataLoaders.every(isScreenDataLoaderDefinition))) &&\n (value.requires === undefined || isScreenRequirements(value.requires)) &&\n isUiNode(value.root)\n );\n}\n\nfunction isSplashScreenModeSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isOptionalString(value.image) &&\n isOptionalNumber(value.imageWidth) &&\n (value.resizeMode === undefined ||\n (typeof value.resizeMode === 'string' &&\n SPLASH_SCREEN_RESIZE_MODE_SET.has(value.resizeMode))) &&\n isOptionalString(value.backgroundColor)\n );\n}\n\nfunction isScreenRequirements(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.permissions === undefined || isRequirementArray(value.permissions, 'permission')) &&\n (value.capabilities === undefined || isRequirementArray(value.capabilities, 'capability'))\n );\n}\n\nfunction isRequirementArray(value: unknown, key: 'capability' | 'permission'): boolean {\n return (\n Array.isArray(value) &&\n value.every((entry) => isRecord(entry) && typeof entry[key] === 'string')\n );\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CustomNavigatorNode } from '../navigator';
|
|
2
|
+
import type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning';
|
|
3
|
+
export interface CustomNavigatorConfigIssue {
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
path?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CustomNavigatorRegistration {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly platforms: readonly NavigatorRuntimePlatform[];
|
|
11
|
+
readonly stability: NavigatorApiStability;
|
|
12
|
+
readonly integration: 'expo-router-standard';
|
|
13
|
+
readonly router: 'stack' | 'tab';
|
|
14
|
+
readonly module: string;
|
|
15
|
+
readonly exportName: string;
|
|
16
|
+
readonly validateConfig: (config: CustomNavigatorNode['config']) => readonly CustomNavigatorConfigIssue[];
|
|
17
|
+
}
|
|
18
|
+
export type CustomNavigatorRegistry = Readonly<Record<string, CustomNavigatorRegistration>> & {
|
|
19
|
+
readonly [CUSTOM_NAVIGATOR_REGISTRY]: true;
|
|
20
|
+
};
|
|
21
|
+
declare const CUSTOM_NAVIGATOR_REGISTRY: unique symbol;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/navigator/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAClF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,CACvB,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KAClC,SAAS,0BAA0B,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,GAAG;IAC5F,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC;CAC5C,CAAC;AAEF,OAAO,CAAC,MAAM,yBAAyB,EAAE,OAAO,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/navigator/extensions.ts"],"names":[],"mappings":"","sourcesContent":["import type { CustomNavigatorNode } from '../navigator';\nimport type { NavigatorApiStability, NavigatorRuntimePlatform } from './planning';\nexport interface CustomNavigatorConfigIssue {\n code: string;\n message: string;\n path?: string;\n}\n\nexport interface CustomNavigatorRegistration {\n readonly id: string;\n readonly platforms: readonly NavigatorRuntimePlatform[];\n readonly stability: NavigatorApiStability;\n readonly integration: 'expo-router-standard';\n readonly router: 'stack' | 'tab';\n readonly module: string;\n readonly exportName: string;\n readonly validateConfig: (\n config: CustomNavigatorNode['config'],\n ) => readonly CustomNavigatorConfigIssue[];\n}\n\nexport type CustomNavigatorRegistry = Readonly<Record<string, CustomNavigatorRegistration>> & {\n readonly [CUSTOM_NAVIGATOR_REGISTRY]: true;\n};\n\ndeclare const CUSTOM_NAVIGATOR_REGISTRY: unique symbol;\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface NavigatorGeneratedFile {
|
|
2
|
+
path: string;
|
|
3
|
+
contents: string;
|
|
4
|
+
}
|
|
5
|
+
export interface NavigatorGenerationBindings {
|
|
6
|
+
screens: Readonly<Record<string, NavigatorScreenModule>>;
|
|
7
|
+
guards: Readonly<Record<string, NavigatorScreenModule>>;
|
|
8
|
+
iconSourceResolver?: NavigatorScreenModule;
|
|
9
|
+
flows?: {
|
|
10
|
+
onboardingRoute?: string;
|
|
11
|
+
authenticationRoute?: string;
|
|
12
|
+
};
|
|
13
|
+
tabPresentations?: Readonly<Record<string, NavigatorScreenModule>>;
|
|
14
|
+
}
|
|
15
|
+
/** Options for placing Navigator-owned files inside a consumer-owned Expo Router app shell. */
|
|
16
|
+
export interface NavigatorGenerationOptions {
|
|
17
|
+
/** Directory that receives the root navigator layout. Must be `src/app` or one of its safe descendants. */
|
|
18
|
+
rootDirectory?: string;
|
|
19
|
+
/** Emit routed screen re-export modules in addition to layouts. Defaults to true. */
|
|
20
|
+
includeScreenFiles?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface NavigatorScreenModule {
|
|
23
|
+
module: string;
|
|
24
|
+
exportName: string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=generation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../src/navigator/generation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IAC3C,KAAK,CAAC,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CACpE;AAED,+FAA+F;AAC/F,MAAM,WAAW,0BAA0B;IACzC,2GAA2G;IAC3G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/navigator/generation.ts"],"names":[],"mappings":"","sourcesContent":["export interface NavigatorGeneratedFile {\n path: string;\n contents: string;\n}\n\nexport interface NavigatorGenerationBindings {\n screens: Readonly<Record<string, NavigatorScreenModule>>;\n guards: Readonly<Record<string, NavigatorScreenModule>>;\n iconSourceResolver?: NavigatorScreenModule;\n flows?: {\n onboardingRoute?: string;\n authenticationRoute?: string;\n };\n tabPresentations?: Readonly<Record<string, NavigatorScreenModule>>;\n}\n\n/** Options for placing Navigator-owned files inside a consumer-owned Expo Router app shell. */\nexport interface NavigatorGenerationOptions {\n /** Directory that receives the root navigator layout. Must be `src/app` or one of its safe descendants. */\n rootDirectory?: string;\n /** Emit routed screen re-export modules in addition to layouts. Defaults to true. */\n includeScreenFiles?: boolean;\n}\n\nexport interface NavigatorScreenModule {\n module: string;\n exportName: string;\n}\n"]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { CustomNavigatorNode, DrawerNavigatorOptions, NavigatorType, RouteDefinition, StackImplementation, StackScreenOptions } from '../navigator';
|
|
2
|
+
import type { CustomNavigatorRegistry } from './extensions';
|
|
3
|
+
export interface ResolvedCustomTabsPresentation {
|
|
4
|
+
presentation: ResolvedTabsPresentation;
|
|
5
|
+
customPresentationId?: string;
|
|
6
|
+
}
|
|
7
|
+
export type ResolvedTabsImplementation = 'custom' | 'javascript' | 'native';
|
|
8
|
+
export type ResolvedTabsPresentation = 'bottom' | 'top' | 'rail' | 'sidebar' | 'custom';
|
|
9
|
+
/**
|
|
10
|
+
* Disposable adapter plan for a `tabs` topology.
|
|
11
|
+
*
|
|
12
|
+
* The implementation selects the Router runtime. Presentation only selects its visual chrome and
|
|
13
|
+
* never creates another route topology.
|
|
14
|
+
*/
|
|
15
|
+
export interface TabsNavigatorPlan {
|
|
16
|
+
implementation: ResolvedTabsImplementation;
|
|
17
|
+
module: ExpoRouterNavigatorModule;
|
|
18
|
+
exportName: string;
|
|
19
|
+
stability: NavigatorApiStability;
|
|
20
|
+
presentation?: ResolvedTabsPresentation;
|
|
21
|
+
presentations?: Readonly<Record<NavigatorResponsiveSize, ResolvedTabsPresentation>>;
|
|
22
|
+
customPresentationId?: string;
|
|
23
|
+
minimizeBehavior?: 'automatic' | 'never' | 'onScrollDown' | 'onScrollUp';
|
|
24
|
+
bottomAccessoryScreenId?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CreateNavigatorPlanOptions {
|
|
27
|
+
platform: NavigatorRuntimePlatform;
|
|
28
|
+
expoRouterVersion: string;
|
|
29
|
+
responsiveSize?: NavigatorResponsiveSize;
|
|
30
|
+
customNavigators?: CustomNavigatorRegistry;
|
|
31
|
+
}
|
|
32
|
+
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-split-view' | 'expo-router/unstable-native-tabs';
|
|
33
|
+
export type NavigatorAdapterId = 'slot' | 'stack.native' | 'stack.javascript' | 'stack.experimental' | 'drawer' | 'tabs.native' | 'tabs.javascript' | 'tabs.custom' | 'split-view' | 'custom';
|
|
34
|
+
export interface NavigatorAdapterPlan {
|
|
35
|
+
id: NavigatorAdapterId;
|
|
36
|
+
/** Built-in Expo Router entry point or an explicitly registered custom module. */
|
|
37
|
+
module?: string;
|
|
38
|
+
exportName?: string;
|
|
39
|
+
support: NavigatorSupportStatus;
|
|
40
|
+
stability: NavigatorApiStability;
|
|
41
|
+
limitations: readonly string[];
|
|
42
|
+
}
|
|
43
|
+
export type NavigatorApiStability = 'stable' | 'alpha';
|
|
44
|
+
export interface NavigatorDiagnostic {
|
|
45
|
+
code: string;
|
|
46
|
+
severity: 'error' | 'warning';
|
|
47
|
+
path: string;
|
|
48
|
+
message: string;
|
|
49
|
+
}
|
|
50
|
+
export interface NavigatorNodePlan {
|
|
51
|
+
type: NavigatorType;
|
|
52
|
+
pointer: string;
|
|
53
|
+
adapter: NavigatorAdapterPlan;
|
|
54
|
+
initialRouteName?: string;
|
|
55
|
+
routes: readonly NavigatorRoutePlan[];
|
|
56
|
+
stack?: {
|
|
57
|
+
implementation: StackImplementation;
|
|
58
|
+
options?: StackScreenOptions;
|
|
59
|
+
};
|
|
60
|
+
drawer?: {
|
|
61
|
+
options?: DrawerNavigatorOptions;
|
|
62
|
+
};
|
|
63
|
+
tabs?: TabsNavigatorPlan;
|
|
64
|
+
splitView?: {
|
|
65
|
+
columns: {
|
|
66
|
+
primary: string;
|
|
67
|
+
supplementary?: string;
|
|
68
|
+
};
|
|
69
|
+
inspector?: string;
|
|
70
|
+
topColumnForCollapsing?: 'primary' | 'secondary' | 'supplementary';
|
|
71
|
+
};
|
|
72
|
+
custom?: {
|
|
73
|
+
navigatorId: string;
|
|
74
|
+
config?: CustomNavigatorNode['config'];
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export interface NavigatorPlan {
|
|
78
|
+
context: NavigatorValidationContext;
|
|
79
|
+
root: NavigatorNodePlan;
|
|
80
|
+
diagnostics: readonly NavigatorDiagnostic[];
|
|
81
|
+
supported: boolean;
|
|
82
|
+
flows: {
|
|
83
|
+
onboarding: boolean;
|
|
84
|
+
authentication: boolean;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export type NavigatorResponsiveSize = 'compact' | 'medium' | 'expanded';
|
|
88
|
+
export interface NavigatorRoutePlan {
|
|
89
|
+
name: string;
|
|
90
|
+
path?: string;
|
|
91
|
+
label?: string;
|
|
92
|
+
icon?: RouteDefinition['icon'];
|
|
93
|
+
showInPrimaryNavigation?: boolean;
|
|
94
|
+
guards: readonly string[];
|
|
95
|
+
screenId?: string;
|
|
96
|
+
stackOptions?: StackScreenOptions;
|
|
97
|
+
navigator?: NavigatorNodePlan;
|
|
98
|
+
}
|
|
99
|
+
export type NavigatorRuntimePlatform = 'android' | 'ios' | 'web';
|
|
100
|
+
export type NavigatorSupportStatus = 'supported' | 'unavailable';
|
|
101
|
+
export interface NavigatorValidationContext {
|
|
102
|
+
platform: NavigatorRuntimePlatform;
|
|
103
|
+
expoRouterVersion: string;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=planning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../src/navigator/planning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning.js","sourceRoot":"","sources":["../../src/navigator/planning.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n CustomNavigatorNode,\n DrawerNavigatorOptions,\n NavigatorType,\n RouteDefinition,\n StackImplementation,\n StackScreenOptions,\n} from '../navigator';\nimport type { CustomNavigatorRegistry } from './extensions';\n\nexport interface ResolvedCustomTabsPresentation {\n presentation: ResolvedTabsPresentation;\n customPresentationId?: string;\n}\n\nexport type ResolvedTabsImplementation = 'custom' | 'javascript' | 'native';\n\nexport type ResolvedTabsPresentation = 'bottom' | 'top' | 'rail' | 'sidebar' | 'custom';\n\n/**\n * Disposable adapter plan for a `tabs` topology.\n *\n * The implementation selects the Router runtime. Presentation only selects its visual chrome and\n * never creates another route topology.\n */\nexport interface TabsNavigatorPlan {\n implementation: ResolvedTabsImplementation;\n module: ExpoRouterNavigatorModule;\n exportName: string;\n stability: NavigatorApiStability;\n presentation?: ResolvedTabsPresentation;\n presentations?: Readonly<Record<NavigatorResponsiveSize, ResolvedTabsPresentation>>;\n customPresentationId?: string;\n minimizeBehavior?: 'automatic' | 'never' | 'onScrollDown' | 'onScrollUp';\n bottomAccessoryScreenId?: string;\n}\n\nexport interface CreateNavigatorPlanOptions {\n platform: NavigatorRuntimePlatform;\n expoRouterVersion: string;\n responsiveSize?: NavigatorResponsiveSize;\n customNavigators?: CustomNavigatorRegistry;\n}\n\nexport type ExpoRouterNavigatorModule =\n | 'expo-router'\n | 'expo-router/drawer'\n | 'expo-router/js-stack'\n | 'expo-router/js-tabs'\n | 'expo-router/js-top-tabs'\n | 'expo-router/ui'\n | 'expo-router/unstable-split-view'\n | 'expo-router/unstable-native-tabs';\n\nexport type NavigatorAdapterId =\n | 'slot'\n | 'stack.native'\n | 'stack.javascript'\n | 'stack.experimental'\n | 'drawer'\n | 'tabs.native'\n | 'tabs.javascript'\n | 'tabs.custom'\n | 'split-view'\n | 'custom';\n\nexport interface NavigatorAdapterPlan {\n id: NavigatorAdapterId;\n /** Built-in Expo Router entry point or an explicitly registered custom module. */\n module?: string;\n exportName?: string;\n support: NavigatorSupportStatus;\n stability: NavigatorApiStability;\n limitations: readonly string[];\n}\n\nexport type NavigatorApiStability = 'stable' | 'alpha';\n\nexport interface NavigatorDiagnostic {\n code: string;\n severity: 'error' | 'warning';\n path: string;\n message: string;\n}\n\nexport interface NavigatorNodePlan {\n type: NavigatorType;\n pointer: string;\n adapter: NavigatorAdapterPlan;\n initialRouteName?: string;\n routes: readonly NavigatorRoutePlan[];\n stack?: {\n implementation: StackImplementation;\n options?: StackScreenOptions;\n };\n drawer?: {\n options?: DrawerNavigatorOptions;\n };\n tabs?: TabsNavigatorPlan;\n splitView?: {\n columns: {\n primary: string;\n supplementary?: string;\n };\n inspector?: string;\n topColumnForCollapsing?: 'primary' | 'secondary' | 'supplementary';\n };\n custom?: {\n navigatorId: string;\n config?: CustomNavigatorNode['config'];\n };\n}\n\nexport interface NavigatorPlan {\n context: NavigatorValidationContext;\n root: NavigatorNodePlan;\n diagnostics: readonly NavigatorDiagnostic[];\n supported: boolean;\n flows: {\n onboarding: boolean;\n authentication: boolean;\n };\n}\n\nexport type NavigatorResponsiveSize = 'compact' | 'medium' | 'expanded';\n\nexport interface NavigatorRoutePlan {\n name: string;\n path?: string;\n label?: string;\n icon?: RouteDefinition['icon'];\n showInPrimaryNavigation?: boolean;\n guards: readonly string[];\n screenId?: string;\n stackOptions?: StackScreenOptions;\n navigator?: NavigatorNodePlan;\n}\n\nexport type NavigatorRuntimePlatform = 'android' | 'ios' | 'web';\n\nexport type NavigatorSupportStatus = 'supported' | 'unavailable';\n\nexport interface NavigatorValidationContext {\n platform: NavigatorRuntimePlatform;\n expoRouterVersion: string;\n}\n"]}
|
package/dist/navigator.d.ts
CHANGED
|
@@ -1,28 +1,94 @@
|
|
|
1
|
-
import type { IconSpec } from './types';
|
|
2
|
-
export declare const NAVIGATOR_TYPES: readonly ["stack", "tabs", "drawer"];
|
|
1
|
+
import type { IconSpec, ManifestValue } from './types';
|
|
2
|
+
export declare const NAVIGATOR_TYPES: readonly ["slot", "stack", "tabs", "drawer", "split-view", "custom"];
|
|
3
3
|
export type NavigatorType = (typeof NAVIGATOR_TYPES)[number];
|
|
4
|
-
export declare const NAVIGATOR_PRESETS: readonly ["stack", "tabs", "tabs-stack", "drawer", "drawer-stack", "drawer-tabs", "drawer-tabs-stack", "root-stack-tabs", "root-stack-tabs-stack", "root-stack-drawer", "root-stack-drawer-stack", "root-stack-drawer-tabs", "root-stack-drawer-tabs-stack"];
|
|
4
|
+
export declare const NAVIGATOR_PRESETS: readonly ["slot", "stack", "tabs", "tabs-stack", "drawer", "drawer-stack", "drawer-tabs", "drawer-tabs-stack", "root-stack-tabs", "root-stack-tabs-stack", "root-stack-drawer", "root-stack-drawer-stack", "root-stack-drawer-tabs", "root-stack-drawer-tabs-stack", "split-view", "custom"];
|
|
5
5
|
export type NavigatorPreset = (typeof NAVIGATOR_PRESETS)[number];
|
|
6
|
+
export declare const STACK_IMPLEMENTATIONS: readonly ["native", "javascript", "experimental"];
|
|
7
|
+
export type StackImplementation = (typeof STACK_IMPLEMENTATIONS)[number];
|
|
8
|
+
export declare const STACK_PRESENTATIONS: readonly ["card", "modal", "transparentModal", "containedModal", "containedTransparentModal", "fullScreenModal", "formSheet"];
|
|
9
|
+
export type StackPresentation = (typeof STACK_PRESENTATIONS)[number];
|
|
10
|
+
export declare const JAVASCRIPT_STACK_PRESENTATIONS: readonly ["card", "modal", "transparentModal"];
|
|
11
|
+
export type JavaScriptStackPresentation = (typeof JAVASCRIPT_STACK_PRESENTATIONS)[number];
|
|
12
|
+
export interface StackHeaderOptions {
|
|
13
|
+
title?: string;
|
|
14
|
+
headerShown?: boolean;
|
|
15
|
+
headerTransparent?: boolean;
|
|
16
|
+
headerBackVisible?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type StackScreenOptions = StackHeaderOptions & ({
|
|
19
|
+
presentation?: Exclude<StackPresentation, 'formSheet'>;
|
|
20
|
+
sheetAllowedDetents?: never;
|
|
21
|
+
sheetGrabberVisible?: never;
|
|
22
|
+
} | {
|
|
23
|
+
presentation: 'formSheet';
|
|
24
|
+
sheetAllowedDetents?: 'fitToContents' | number[];
|
|
25
|
+
sheetGrabberVisible?: boolean;
|
|
26
|
+
});
|
|
27
|
+
export type JavaScriptStackScreenOptions = StackHeaderOptions & {
|
|
28
|
+
presentation?: JavaScriptStackPresentation;
|
|
29
|
+
};
|
|
30
|
+
export type StackImplementationConfig = {
|
|
31
|
+
/** Omission selects the stable native stack implementation. */
|
|
32
|
+
implementation?: 'native';
|
|
33
|
+
options?: StackScreenOptions;
|
|
34
|
+
} | {
|
|
35
|
+
implementation: 'javascript';
|
|
36
|
+
options?: JavaScriptStackScreenOptions;
|
|
37
|
+
} | {
|
|
38
|
+
/** Expo Router Experimental Stack is alpha, native-only, and available from SDK 56. */
|
|
39
|
+
implementation: 'experimental';
|
|
40
|
+
options?: StackHeaderOptions;
|
|
41
|
+
};
|
|
42
|
+
export declare const DRAWER_POSITIONS: readonly ["left", "right"];
|
|
43
|
+
export type DrawerPosition = (typeof DRAWER_POSITIONS)[number];
|
|
44
|
+
export declare const DRAWER_TYPES: readonly ["front", "back", "slide", "permanent"];
|
|
45
|
+
export type DrawerType = (typeof DRAWER_TYPES)[number];
|
|
46
|
+
export interface DrawerNavigatorOptions {
|
|
47
|
+
drawerPosition?: DrawerPosition;
|
|
48
|
+
drawerType?: DrawerType;
|
|
49
|
+
swipeEnabled?: boolean;
|
|
50
|
+
headerShown?: boolean;
|
|
51
|
+
}
|
|
6
52
|
export declare const FIXED_CUSTOM_TABS_PRESENTATIONS: readonly ["bottom", "top", "rail", "sidebar"];
|
|
7
53
|
export type FixedCustomTabsPresentation = (typeof FIXED_CUSTOM_TABS_PRESENTATIONS)[number];
|
|
8
54
|
export declare const CUSTOM_TABS_PRESENTATIONS: readonly ["bottom", "top", "rail", "sidebar", "responsive", "custom"];
|
|
9
55
|
export type CustomTabsPresentation = (typeof CUSTOM_TABS_PRESENTATIONS)[number];
|
|
10
56
|
export declare const JAVASCRIPT_TABS_PRESENTATIONS: readonly ["bottom", "top"];
|
|
11
57
|
export type JavaScriptTabsPresentation = (typeof JAVASCRIPT_TABS_PRESENTATIONS)[number];
|
|
58
|
+
export declare const NATIVE_TABS_MINIMIZE_BEHAVIORS: readonly ["automatic", "never", "onScrollDown", "onScrollUp"];
|
|
59
|
+
export type NativeTabsMinimizeBehavior = (typeof NATIVE_TABS_MINIMIZE_BEHAVIORS)[number];
|
|
12
60
|
export interface ResponsiveTabsPresentation {
|
|
13
61
|
compact: FixedCustomTabsPresentation;
|
|
14
62
|
medium?: FixedCustomTabsPresentation;
|
|
15
63
|
expanded: FixedCustomTabsPresentation;
|
|
16
64
|
}
|
|
17
|
-
export
|
|
65
|
+
export type CustomTabsPresentationConfig = {
|
|
66
|
+
presentation: FixedCustomTabsPresentation;
|
|
67
|
+
responsive?: never;
|
|
68
|
+
customPresentationId?: never;
|
|
69
|
+
} | {
|
|
70
|
+
presentation: 'responsive';
|
|
71
|
+
responsive: ResponsiveTabsPresentation;
|
|
72
|
+
customPresentationId?: never;
|
|
73
|
+
} | {
|
|
74
|
+
presentation: 'custom';
|
|
75
|
+
responsive?: never;
|
|
76
|
+
/** Serializable registered presentation id. */
|
|
77
|
+
customPresentationId: string;
|
|
78
|
+
};
|
|
79
|
+
export type CustomTabsConfig = {
|
|
18
80
|
implementation: 'custom';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
81
|
+
} & CustomTabsPresentationConfig;
|
|
82
|
+
export type CustomTabsWebConfig = CustomTabsPresentationConfig;
|
|
83
|
+
export interface NavigatorScreenReference {
|
|
84
|
+
screenId: string;
|
|
23
85
|
}
|
|
24
86
|
export interface NativeTabsConfig {
|
|
25
87
|
implementation: 'native';
|
|
88
|
+
/** Expo Router Native Tabs is alpha; minimizing is available on iOS 26+ from SDK 55. */
|
|
89
|
+
minimizeBehavior?: NativeTabsMinimizeBehavior;
|
|
90
|
+
/** Registered screen rendered through NativeTabs.BottomAccessory, available from SDK 55. */
|
|
91
|
+
bottomAccessory?: NavigatorScreenReference;
|
|
26
92
|
}
|
|
27
93
|
export interface JavaScriptTabsConfig {
|
|
28
94
|
implementation: 'javascript';
|
|
@@ -34,26 +100,43 @@ export interface AdaptiveTabsConfig {
|
|
|
34
100
|
/** Android/iOS branch. Expo Router may expose this implementation as unstable. */
|
|
35
101
|
native?: NativeTabsConfig;
|
|
36
102
|
/** Web branch rendered through headless custom tabs. */
|
|
37
|
-
web?:
|
|
103
|
+
web?: CustomTabsWebConfig;
|
|
38
104
|
}
|
|
39
105
|
export type TabsImplementationConfig = AdaptiveTabsConfig | CustomTabsConfig | JavaScriptTabsConfig | NativeTabsConfig;
|
|
40
106
|
interface NavigatorNodeBase {
|
|
41
107
|
initialRouteName?: string;
|
|
42
108
|
routes: RouteDefinition[];
|
|
43
|
-
/** Typed upstream options can be layered by the owning Navigator package. */
|
|
44
|
-
options?: Record<string, unknown>;
|
|
45
109
|
}
|
|
46
|
-
export interface
|
|
47
|
-
type: '
|
|
110
|
+
export interface SlotNavigatorNode extends NavigatorNodeBase {
|
|
111
|
+
type: 'slot';
|
|
48
112
|
}
|
|
113
|
+
export type StackNavigatorNode = NavigatorNodeBase & {
|
|
114
|
+
type: 'stack';
|
|
115
|
+
} & StackImplementationConfig;
|
|
49
116
|
export interface DrawerNavigatorNode extends NavigatorNodeBase {
|
|
50
117
|
type: 'drawer';
|
|
118
|
+
options?: DrawerNavigatorOptions;
|
|
51
119
|
}
|
|
52
120
|
export type TabsNavigatorConfig = {
|
|
53
121
|
type: 'tabs';
|
|
54
122
|
} & TabsImplementationConfig;
|
|
55
123
|
export type TabsNavigatorNode = NavigatorNodeBase & TabsNavigatorConfig;
|
|
56
|
-
export
|
|
124
|
+
export interface SplitViewNavigatorNode extends NavigatorNodeBase {
|
|
125
|
+
type: 'split-view';
|
|
126
|
+
columns: {
|
|
127
|
+
primary: NavigatorScreenReference;
|
|
128
|
+
supplementary?: NavigatorScreenReference;
|
|
129
|
+
};
|
|
130
|
+
inspector?: NavigatorScreenReference;
|
|
131
|
+
/** Split View is alpha and iOS-only; other platforms fall back to Slot. */
|
|
132
|
+
topColumnForCollapsing?: 'primary' | 'supplementary' | 'secondary';
|
|
133
|
+
}
|
|
134
|
+
export interface CustomNavigatorNode extends NavigatorNodeBase {
|
|
135
|
+
type: 'custom';
|
|
136
|
+
navigatorId: string;
|
|
137
|
+
config?: Readonly<Record<string, ManifestValue>>;
|
|
138
|
+
}
|
|
139
|
+
export type NavigatorNode = CustomNavigatorNode | DrawerNavigatorNode | SlotNavigatorNode | SplitViewNavigatorNode | StackNavigatorNode | TabsNavigatorNode;
|
|
57
140
|
export interface RouteDefinition {
|
|
58
141
|
name: string;
|
|
59
142
|
path?: string;
|
|
@@ -63,6 +146,8 @@ export interface RouteDefinition {
|
|
|
63
146
|
showInPrimaryNavigation?: boolean;
|
|
64
147
|
guards?: string[];
|
|
65
148
|
screenId?: string;
|
|
149
|
+
/** Presentation applied by the resolved parent stack implementation. */
|
|
150
|
+
stackOptions?: StackScreenOptions;
|
|
66
151
|
navigator?: NavigatorNode;
|
|
67
152
|
}
|
|
68
153
|
export interface NavigatorFlows {
|
|
@@ -71,9 +156,11 @@ export interface NavigatorFlows {
|
|
|
71
156
|
}
|
|
72
157
|
export interface NavigatorDefaults {
|
|
73
158
|
tabs?: TabsImplementationConfig;
|
|
159
|
+
stack?: StackImplementationConfig;
|
|
74
160
|
}
|
|
75
161
|
export interface NavigatorPlatformConfig {
|
|
76
162
|
tabs?: TabsImplementationConfig;
|
|
163
|
+
stack?: StackImplementationConfig;
|
|
77
164
|
}
|
|
78
165
|
export interface NavigatorPlatforms {
|
|
79
166
|
android?: NavigatorPlatformConfig;
|
|
@@ -92,5 +179,7 @@ export type AppNavigatorManifest = NavigatorNode & {
|
|
|
92
179
|
defaults?: NavigatorDefaults;
|
|
93
180
|
platforms?: NavigatorPlatforms;
|
|
94
181
|
};
|
|
95
|
-
export {};
|
|
182
|
+
export type { CustomNavigatorConfigIssue, CustomNavigatorRegistration, CustomNavigatorRegistry, } from './navigator/extensions';
|
|
183
|
+
export type { NavigatorGeneratedFile, NavigatorGenerationBindings, NavigatorGenerationOptions, NavigatorScreenModule, } from './navigator/generation';
|
|
184
|
+
export type { CreateNavigatorPlanOptions, ExpoRouterNavigatorModule, NavigatorAdapterId, NavigatorAdapterPlan, NavigatorApiStability, NavigatorDiagnostic, NavigatorNodePlan, NavigatorPlan, NavigatorResponsiveSize, NavigatorRoutePlan, NavigatorRuntimePlatform, NavigatorSupportStatus, NavigatorValidationContext, ResolvedCustomTabsPresentation, ResolvedTabsImplementation, ResolvedTabsPresentation, TabsNavigatorPlan, } from './navigator/planning';
|
|
96
185
|
//# sourceMappingURL=navigator.d.ts.map
|
package/dist/navigator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"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"}
|