mirror of
https://github.com/bitwarden/browser.git
synced 2024-10-30 08:10:34 +01:00
15920f5354
* [EC-512] feat: create new icon class * [EC-512] feat: implement protected svgIcon function * [EC-512] feat: use new icon class in component * [EC-512] feat: integrate new icons in application * [EC-512] fix: linting * [EC-512] chore: move report icons to where they are used * [EC-512] chore: add export type explanation
26 lines
649 B
TypeScript
26 lines
649 B
TypeScript
class Icon {
|
|
constructor(readonly svg: string) {}
|
|
}
|
|
|
|
// We only export the type to prohibit the creation of Icons without using
|
|
// the `svgIcon` template literal tag.
|
|
export type { Icon };
|
|
|
|
export function isIcon(icon: unknown): icon is Icon {
|
|
return icon instanceof Icon;
|
|
}
|
|
|
|
export class DynamicContentNotAllowedError extends Error {
|
|
constructor() {
|
|
super("Dynamic content in icons is not allowed due to risk of user-injected XSS.");
|
|
}
|
|
}
|
|
|
|
export function svgIcon(strings: TemplateStringsArray, ...values: unknown[]): Icon {
|
|
if (values.length > 0) {
|
|
throw new DynamicContentNotAllowedError();
|
|
}
|
|
|
|
return new Icon(strings[0]);
|
|
}
|