diff --git a/npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts new file mode 100644 index 0000000000..c56d7a3d54 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts @@ -0,0 +1,17 @@ +export class CrossOriginStrategy { + constructor(public crossorigin: 'anonymous' | 'use-credentials', public integrity?: string) {} + + setCrossOrigin(element: T) { + if (this.integrity) element.setAttribute('integrity', this.integrity); + element.setAttribute('crossorigin', this.crossorigin); + } +} + +export const CROSS_ORIGIN_STRATEGY = { + Anonymous(integrity?: string) { + return new CrossOriginStrategy('anonymous', integrity); + }, + UseCredentials(integrity?: string) { + return new CrossOriginStrategy('use-credentials', integrity); + }, +}; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/index.ts b/npm/ng-packs/packages/core/src/lib/strategies/index.ts index 2506a819de..d1a367e138 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/index.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/index.ts @@ -1 +1,2 @@ +export * from './cross-origin.strategy'; export * from './dom.strategy'; diff --git a/npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts new file mode 100644 index 0000000000..25cc6f0c93 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts @@ -0,0 +1,38 @@ +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies'; +import { uuid } from '../utils'; + +describe('CrossOriginStrategy', () => { + describe('#setCrossOrigin', () => { + it('should set crossorigin attribute', () => { + const strategy = new CrossOriginStrategy('use-credentials'); + const element = document.createElement('link'); + strategy.setCrossOrigin(element); + + expect(element.crossOrigin).toBe('use-credentials'); + }); + + it('should set integrity attribute when given', () => { + const integrity = uuid(); + const strategy = new CrossOriginStrategy('anonymous', integrity); + const element = document.createElement('link'); + strategy.setCrossOrigin(element); + + expect(element.crossOrigin).toBe('anonymous'); + expect(element.getAttribute('integrity')).toBe(integrity); + }); + }); +}); + +describe('CROSS_ORIGIN_STRATEGY', () => { + test.each` + name | integrity | crossOrigin + ${'Anonymous'} | ${undefined} | ${'anonymous'} + ${'Anonymous'} | ${uuid()} | ${'anonymous'} + ${'UseCredentials'} | ${undefined} | ${'use-credentials'} + ${'UseCredentials'} | ${uuid()} | ${'use-credentials'} + `('should successfully map $name to CrossOriginStrategy', ({ name, integrity, crossOrigin }) => { + expect(CROSS_ORIGIN_STRATEGY[name](integrity)).toEqual( + new CrossOriginStrategy(crossOrigin, integrity), + ); + }); +});