xref: /aosp_15_r20/external/perfetto/ui/src/public/route_schema.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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