ngx-source
Version:
Angular resource loader
1 lines • 7.4 kB
Source Map (JSON)
{"version":3,"file":"ngx-source.mjs","sources":["../../src/resource/ngx-source.model.ts","../../src/resource/ngx-source-type.model.ts","../../src/resource/ngx-source.service.ts","../../src/ngx-source.ts"],"sourcesContent":["import { SourceType } from './ngx-source-type.model';\n\nexport interface ISource {\n name: string;\n src: string;\n type?: SourceType;\n loaded?: boolean;\n}\n\nexport class Source implements ISource {\n constructor(\n public name: string,\n public src: string,\n public type?: SourceType,\n public loaded?: boolean,\n ) {}\n}\n","export enum SourceType {\n SCRIPT = 'SCRIPT',\n STYLE = 'STYLE',\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SourceType } from './ngx-source-type.model';\nimport { ISource } from './ngx-source.model';\nimport { ISourceLoadResult } from './ngx-source-load-result.model';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable()\nexport class NgxSourceService {\n private readonly document = inject(DOCUMENT);\n private readonly sources = new Map<string, Set<ISource>>();\n\n public addSources(...sources: ISource[]): void {\n sources.forEach(source => this.addSource(source));\n }\n\n public addSource(source: ISource): void {\n if (!this.sources.has(source.name)) {\n this.sources.set(source.name, new Set());\n }\n\n const sourceSet = this.sources.get(source.name)!;\n const serialized = JSON.stringify(source);\n\n const alreadyExists = Array.from(sourceSet).some(s => JSON.stringify(s) === serialized);\n if (!alreadyExists) {\n sourceSet.add(source);\n }\n }\n\n public loadBySourceNames(...sourceNames: string[]): Promise<ISourceLoadResult[]> {\n return Promise.all(sourceNames.flatMap(name => this.loadBySourceName(name)));\n }\n\n public loadBySourceName(sourceName: string): Promise<ISourceLoadResult>[] {\n const sources = this.sources.get(sourceName);\n if (!sources || sources.size === 0) {\n return [\n Promise.reject({\n script: sourceName,\n loaded: false,\n status: 'Not found in source store',\n }),\n ];\n }\n\n return Array.from(sources).map(source => this.loadSource(source));\n }\n\n public loadSources(sources: ISource[]): Promise<ISourceLoadResult[]> {\n this.addSources(...sources);\n return Promise.all(sources.map(source => this.loadSource(source)));\n }\n\n public loadSource(source: ISource): Promise<ISourceLoadResult> {\n this.addSource(source);\n\n if (source.loaded || this.isSourceInDOM(source)) {\n source.loaded = true;\n return Promise.resolve({\n script: source.name,\n loaded: true,\n status: 'Already loaded',\n });\n }\n\n return new Promise<ISourceLoadResult>((resolve, reject) => {\n let element: HTMLLinkElement | HTMLScriptElement;\n\n if (source.type === SourceType.STYLE) {\n element = this.document.createElement('link');\n element.rel = 'stylesheet';\n element.href = source.src;\n } else {\n element = this.document.createElement('script');\n element.type = 'text/javascript';\n element.src = source.src;\n }\n\n element.onload = () => {\n source.loaded = true;\n resolve({\n script: source.name,\n loaded: true,\n status: 'Loaded',\n });\n };\n\n element.onerror = () => {\n reject({\n script: source.name,\n loaded: false,\n status: 'Load failed',\n });\n };\n\n this.document.head.appendChild(element);\n });\n }\n\n private isSourceInDOM = (source: ISource): boolean =>\n !!this.document.querySelector(source.type === SourceType.STYLE ? `link[href=\"${source.src}\"]` : `script[src=\"${source.src}\"]`);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}