1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport {z} from 'zod'; 16*6dbdd20aSAndroid Build Coastguard Worker 17*6dbdd20aSAndroid Build Coastguard Worker// We use .catch(undefined) on every field below to make sure that passing an 18*6dbdd20aSAndroid Build Coastguard Worker// invalid value doesn't invalidate the other keys which might be valid. 19*6dbdd20aSAndroid Build Coastguard Worker// Zod default behaviour is atomic: either everything validates correctly or 20*6dbdd20aSAndroid Build Coastguard Worker// the whole parsing fails. 21*6dbdd20aSAndroid Build Coastguard Workerexport const ROUTE_SCHEMA = z 22*6dbdd20aSAndroid Build Coastguard Worker .object({ 23*6dbdd20aSAndroid Build Coastguard Worker // The local_cache_key is special and is persisted across navigations. 24*6dbdd20aSAndroid Build Coastguard Worker local_cache_key: z.string().optional().catch(undefined), 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Worker // These are transient and are really set only on startup. 27*6dbdd20aSAndroid Build Coastguard Worker 28*6dbdd20aSAndroid Build Coastguard Worker // Are we loading a trace via ABT. 29*6dbdd20aSAndroid Build Coastguard Worker openFromAndroidBugTool: z.boolean().optional().catch(undefined), 30*6dbdd20aSAndroid Build Coastguard Worker 31*6dbdd20aSAndroid Build Coastguard Worker // For permalink hash. 32*6dbdd20aSAndroid Build Coastguard Worker s: z.string().optional().catch(undefined), 33*6dbdd20aSAndroid Build Coastguard Worker 34*6dbdd20aSAndroid Build Coastguard Worker // DEPRECATED: for #!/record?p=cpu subpages (b/191255021). 35*6dbdd20aSAndroid Build Coastguard Worker p: z.string().optional().catch(undefined), 36*6dbdd20aSAndroid Build Coastguard Worker 37*6dbdd20aSAndroid Build Coastguard Worker // For fetching traces from Cloud Storage or local servers 38*6dbdd20aSAndroid Build Coastguard Worker // as with record_android_trace. 39*6dbdd20aSAndroid Build Coastguard Worker url: z.string().optional().catch(undefined), 40*6dbdd20aSAndroid Build Coastguard Worker 41*6dbdd20aSAndroid Build Coastguard Worker // For connecting to a trace_processor_shell --httpd instance running on a 42*6dbdd20aSAndroid Build Coastguard Worker // non-standard port. This requires the CSP_WS_PERMISSIVE_PORT flag to relax 43*6dbdd20aSAndroid Build Coastguard Worker // the Content Security Policy. 44*6dbdd20aSAndroid Build Coastguard Worker rpc_port: z.string().regex(/\d+/).optional().catch(undefined), 45*6dbdd20aSAndroid Build Coastguard Worker 46*6dbdd20aSAndroid Build Coastguard Worker // Override the referrer. Useful for scripts such as 47*6dbdd20aSAndroid Build Coastguard Worker // record_android_trace to record where the trace is coming from. 48*6dbdd20aSAndroid Build Coastguard Worker referrer: z.string().optional().catch(undefined), 49*6dbdd20aSAndroid Build Coastguard Worker 50*6dbdd20aSAndroid Build Coastguard Worker // For the 'mode' of the UI. For example when the mode is 'embedded' 51*6dbdd20aSAndroid Build Coastguard Worker // some features are disabled. 52*6dbdd20aSAndroid Build Coastguard Worker mode: z.enum(['embedded']).optional().catch(undefined), 53*6dbdd20aSAndroid Build Coastguard Worker 54*6dbdd20aSAndroid Build Coastguard Worker // Should we hide the sidebar? 55*6dbdd20aSAndroid Build Coastguard Worker hideSidebar: z.boolean().optional().catch(undefined), 56*6dbdd20aSAndroid Build Coastguard Worker 57*6dbdd20aSAndroid Build Coastguard Worker // A comma-separated list of plugins to enable for the current session. 58*6dbdd20aSAndroid Build Coastguard Worker enablePlugins: z.string().optional().catch(undefined), 59*6dbdd20aSAndroid Build Coastguard Worker 60*6dbdd20aSAndroid Build Coastguard Worker // Deep link support 61*6dbdd20aSAndroid Build Coastguard Worker table: z.string().optional().catch(undefined), 62*6dbdd20aSAndroid Build Coastguard Worker ts: z.string().optional().catch(undefined), 63*6dbdd20aSAndroid Build Coastguard Worker dur: z.string().optional().catch(undefined), 64*6dbdd20aSAndroid Build Coastguard Worker tid: z.string().optional().catch(undefined), 65*6dbdd20aSAndroid Build Coastguard Worker pid: z.string().optional().catch(undefined), 66*6dbdd20aSAndroid Build Coastguard Worker query: z.string().optional().catch(undefined), 67*6dbdd20aSAndroid Build Coastguard Worker visStart: z.string().optional().catch(undefined), 68*6dbdd20aSAndroid Build Coastguard Worker visEnd: z.string().optional().catch(undefined), 69*6dbdd20aSAndroid Build Coastguard Worker }) 70*6dbdd20aSAndroid Build Coastguard Worker // default({}) ensures at compile-time that every entry is either optional or 71*6dbdd20aSAndroid Build Coastguard Worker // has a default value. 72*6dbdd20aSAndroid Build Coastguard Worker .default({}); 73*6dbdd20aSAndroid Build Coastguard Worker 74*6dbdd20aSAndroid Build Coastguard Workerexport type RouteArgs = z.infer<typeof ROUTE_SCHEMA>; 75