( threadPermissionString: string, )
| 20 | +membershipPrefix: ?ThreadPermissionMembershipPrefix, |
| 21 | }; |
| 22 | function parseThreadPermissionString( |
| 23 | threadPermissionString: string, |
| 24 | ): ParsedThreadPermissionString { |
| 25 | let remainingString = threadPermissionString; |
| 26 | |
| 27 | let propagationPrefix; |
| 28 | for (const key of Object.keys(threadPermissionPropagationPrefixes)) { |
| 29 | const prefix = threadPermissionPropagationPrefixes[key]; |
| 30 | if (!remainingString.startsWith(prefix)) { |
| 31 | continue; |
| 32 | } |
| 33 | propagationPrefix = prefix; |
| 34 | remainingString = remainingString.substr(prefix.length); |
| 35 | break; |
| 36 | } |
| 37 | |
| 38 | let filterPrefix; |
| 39 | for (const key of Object.keys(threadPermissionFilterPrefixes)) { |
| 40 | const prefix = threadPermissionFilterPrefixes[key]; |
| 41 | if (!remainingString.startsWith(prefix)) { |
| 42 | continue; |
| 43 | } |
| 44 | filterPrefix = prefix; |
| 45 | remainingString = remainingString.substr(prefix.length); |
| 46 | break; |
| 47 | } |
| 48 | |
| 49 | let membershipPrefix; |
| 50 | for (const key of Object.keys(threadPermissionMembershipPrefixes)) { |
| 51 | const prefix = threadPermissionMembershipPrefixes[key]; |
| 52 | if (!remainingString.startsWith(prefix)) { |
| 53 | continue; |
| 54 | } |
| 55 | membershipPrefix = prefix; |
| 56 | remainingString = remainingString.substr(prefix.length); |
| 57 | break; |
| 58 | } |
| 59 | |
| 60 | const permission = assertThreadPermission(remainingString); |
| 61 | |
| 62 | return { permission, propagationPrefix, filterPrefix, membershipPrefix }; |
| 63 | } |
| 64 | |
| 65 | function constructThreadPermissionString( |
| 66 | parsed: ParsedThreadPermissionString, |
no test coverage detected