| 298 | |
| 299 | // Converts object-based DI flags (`InjectOptions`) to bit flags (`InjectFlags`). |
| 300 | export function convertToBitFlags( |
| 301 | flags: InjectOptions | InternalInjectFlags | undefined, |
| 302 | ): InternalInjectFlags | undefined { |
| 303 | if (typeof flags === 'undefined' || typeof flags === 'number') { |
| 304 | return flags; |
| 305 | } |
| 306 | |
| 307 | // While TypeScript doesn't accept it without a cast, bitwise OR with false-y values in |
| 308 | // JavaScript is a no-op. We can use that for a very codesize-efficient conversion from |
| 309 | // `InjectOptions` to `InjectFlags`. |
| 310 | return (InternalInjectFlags.Default | // comment to force a line break in the formatter |
| 311 | ((flags.optional && InternalInjectFlags.Optional) as number) | |
| 312 | ((flags.host && InternalInjectFlags.Host) as number) | |
| 313 | ((flags.self && InternalInjectFlags.Self) as number) | |
| 314 | ((flags.skipSelf && InternalInjectFlags.SkipSelf) as number)) as InternalInjectFlags; |
| 315 | } |
| 316 | |
| 317 | // Converts bitflags to inject options |
| 318 | function convertToInjectOptions(flags: InternalInjectFlags): InjectOptions { |