{"version":3,"file":"cisstech-nge-services.mjs","sources":["../../../projects/nge/services/src/browser-picker.service.ts","../../../projects/nge/services/src/clipboard.service.ts","../../../projects/nge/services/src/compiler.service.ts","../../../projects/nge/services/src/injector.service.ts","../../../projects/nge/services/src/resource-loader.service.ts","../../../projects/nge/services/cisstech-nge-services.ts"],"sourcesContent":["import { Injectable } from '@angular/core'\n\n/** Service to programmatically open file dialog. */\n@Injectable({ providedIn: 'root' })\nexport class PickerBrowserService {\n  /**\n   * Open file dialog to select files.\n   * @param options picker options.\n   * @returns A promise that resolves with the picked files or and empty array.\n   */\n  pickFiles(options: PickerBrowserOptions): Promise<File[]> {\n    return new Promise<File[]>(async (resolve) => {\n      const input = document.createElement('input')\n      input.type = 'file'\n      input.multiple = options.multiple ?? true\n      input.accept = options.accept ?? '*'\n      input.style.visibility = 'hidden'\n      input.onchange = (event: any) => {\n        const target = event.target || event.srcElement\n        if (target.value.length > 0) {\n          input.remove()\n          resolve(target.files)\n        } else {\n          input.remove()\n          resolve([])\n        }\n      }\n      // handle cancel button click.\n      setTimeout(() => {\n        let onfocus: any\n        onfocus = () => {\n          if (!input.value.length) {\n            resolve([])\n            input.remove()\n          }\n          window.removeEventListener('click', onfocus)\n        }\n        window.addEventListener('click', onfocus)\n      }, 300)\n      document.body.appendChild(input)\n      input.focus()\n      input.click()\n    })\n  }\n}\n\n/** Picker options. */\nexport interface PickerBrowserOptions {\n  /** optional mime type of the files to select. (default *) */\n  readonly accept?: string\n  /** allow multiple files (default true.) */\n  readonly multiple?: boolean\n}\n","import { Injectable } from '@angular/core'\n\n@Injectable({ providedIn: 'root' })\nexport class ClipboardService {\n  copy(data: string): Promise<void> {\n    return navigator.clipboard.writeText(data)\n  }\n\n  read() {\n    return navigator.clipboard.readText()\n  }\n}\n","import { ComponentRef, createNgModule, Injectable, Injector, NgModuleRef, Type, ViewContainerRef } from '@angular/core'\n\n@Injectable({ providedIn: 'root' })\nexport class CompilerService {\n  private readonly modules: ModuleInfo[] = []\n\n  async render(options: RendererOptions): Promise<ComponentRef<any>> {\n    const { component } = await this.resolveComponent(options.type, options.container.injector)\n    return this.renderComponent(\n      options.inputs,\n      options.container.createComponent(component, {\n        index: 0,\n        injector: options.container.injector,\n      })\n    )\n  }\n\n  async resolveComponent(type: Type<any>, injector: Injector) {\n    // https://blog.ninja-squad.com/2019/05/07/what-is-angular-ivy/\n    // https://juristr.com/blog/2019/10/lazyload-module-ivy-viewengine\n\n    if (!('ɵmod' in type) && !('ɵcmp' in type)) {\n      throw new Error(`[render]: type \"${type.name}\" does not refers to a Component or a NgModule`)\n    }\n\n    let component: Type<any> = type\n    let componentInjector = injector\n    if ('ɵmod' in type) {\n      const module = await this.resolveModuleInfo(type, injector)\n      componentInjector = module.injector\n      component = module.instance.component\n    }\n\n    return {\n      component,\n      injector: componentInjector,\n    }\n  }\n\n  private renderComponent(inputs: any, componentRef: ComponentRef<any>): ComponentRef<any> {\n    if (inputs) {\n      Object.keys(inputs).forEach((key) => {\n        componentRef.setInput(key, inputs[key])\n      })\n    }\n\n    componentRef.changeDetectorRef.markForCheck()\n    return componentRef\n  }\n\n  private async resolveModuleInfo(type: Type<any>, injector: Injector): Promise<NgModuleRef<IDynamicModule>> {\n    const moduleInfo = this.modules.find((e) => e.type === type)\n    if (moduleInfo) {\n      return moduleInfo.module\n    }\n\n    const module: NgModuleRef<IDynamicModule> = createNgModule(type, injector)\n    if (typeof module.instance.component !== 'function') {\n      throw new Error(`[compiler]: The module \"${type.name}\" does not define a public \"component\" field.`)\n    }\n    this.modules.push({ type: type, module: module })\n    return module\n  }\n}\n\nexport interface RendererOptions {\n  type: Type<any>\n  inputs?: any\n  container: ViewContainerRef\n}\n\nexport interface IDynamicModule {\n  /** Reference to the main component of the module */\n  component: Type<any>\n}\n\ninterface ModuleInfo {\n  type: Type<any>\n  module: NgModuleRef<IDynamicModule>\n}\n","import { AbstractType, Injectable, InjectionToken, Injector, Type, inject } from '@angular/core'\n\nexport interface IDynamicService {\n  injectable(): boolean\n}\n\n@Injectable({ providedIn: 'root' })\nexport class InjectorService {\n  private readonly injector = inject(Injector)\n\n  get<T extends IDynamicService>(token: Type<any> | InjectionToken<any> | AbstractType<any>): T {\n    const service = (this.injector.get(token, []) as T[]).find((e) => e.injectable())\n    if (!service) {\n      throw new Error('[InjectorService]: No provider found for ' + token)\n    }\n    return service\n  }\n}\n","import { isPlatformBrowser } from '@angular/common'\nimport { Injectable, PLATFORM_ID, inject, DOCUMENT, Provider } from '@angular/core'\nimport { Observable, forkJoin, from, of } from 'rxjs'\nimport { concatMap, shareReplay, take } from 'rxjs/operators'\n\nexport class ResourceLoaderConfig {\n  /**\n   * If true, the document.baseURI will be used to build the url of the resource to load if the url is relative.\n   */\n  useDocumentBaseURI?: boolean\n}\n\n/**\n *  An array of [type, url, attributes] tuple where:\n *  - `type` is the type of an asset to load `script`| `style`\n *  - `url` is the url to a style/script to load\n *  - `attributes` is a map of optional attributes to add to the element.\n */\ndeclare type ResourceInfo = ['style' | 'script', string, Record<string, string>?]\n\nclass LoadRequest {\n  private request?: Observable<ResourceInfo>\n  private finished = false\n\n  get isFinished(): boolean {\n    return this.finished\n  }\n\n  constructor(\n    private readonly asset: ResourceInfo,\n    private readonly document: Document,\n    private readonly isBrowser: boolean,\n    private readonly config?: ResourceLoaderConfig | null\n  ) {}\n\n  run() {\n    if (this.asset[0] === 'style') {\n      return this.loadStyle()\n    }\n    return this.loadScript()\n  }\n\n  private loadStyle(): Observable<ResourceInfo> {\n    return (\n      this.request ??\n      (this.request = new Observable<ResourceInfo>((observer) => {\n        const url = this.buildUrl(this.asset[1])\n        const style: HTMLLinkElement = this.document.createElement('link')\n        style.href = url\n        style.rel = 'stylesheet'\n\n        if (this.isBrowser) {\n          style.onload = () => {\n            observer.next(this.asset)\n            observer.complete()\n            this.finished = true\n          }\n          style.onerror = (err) => {\n            observer.error(err)\n            this.finished = true\n          }\n        }\n\n        const attributes = this.asset[2]\n        if (attributes) {\n          for (const [key, value] of Object.entries(attributes)) {\n            style.setAttribute(key, value)\n          }\n        }\n        this.document.head.appendChild(style)\n\n        if (!this.isBrowser) {\n          // No load events fire under SSR; the browser fetches the stylesheet from\n          // the prerendered <head>. Resolve now so rendering is not blocked.\n          observer.next(this.asset)\n          observer.complete()\n          this.finished = true\n        }\n      }).pipe(take(1), shareReplay(1)))\n    )\n  }\n\n  private loadScript(): Observable<ResourceInfo> {\n    return (\n      this.request ??\n      (this.request = new Observable<ResourceInfo>((observer) => {\n        if (!this.isBrowser) {\n          // Scripts only have an effect in the browser; skip injecting them under\n          // SSR and resolve immediately so rendering is not blocked.\n          observer.next(this.asset)\n          observer.complete()\n          this.finished = true\n          return\n        }\n        const url = this.buildUrl(this.asset[1])\n        const script: HTMLScriptElement = this.document.createElement('script')\n        script.src = url\n\n        script.onload = () => {\n          observer.next(this.asset)\n          observer.complete()\n          this.finished = true\n        }\n        script.onerror = (err) => {\n          observer.error(err)\n          this.finished = true\n        }\n\n        const attributes = this.asset[2]\n        if (attributes) {\n          for (const [key, value] of Object.entries(attributes)) {\n            script.setAttribute(key, value)\n          }\n        }\n\n        this.document.head.appendChild(script)\n      }).pipe(take(1), shareReplay(1)))\n    )\n  }\n\n  private buildUrl(url: string) {\n    if (!this.config?.useDocumentBaseURI) {\n      return url\n    }\n\n    if (url.startsWith('http')) {\n      return url\n    }\n\n    if (!url.startsWith(document.baseURI)) {\n      url = url.startsWith('/') ? url.slice(1) : url\n      return document.baseURI + url\n    }\n\n    return url\n  }\n}\n\n/**\n * Services that dynamically inject scripts and styles elements to the DOM.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ResourceLoaderService {\n  private readonly document = inject(DOCUMENT)\n  private readonly config = inject(ResourceLoaderConfig, { optional: true })\n  private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID))\n  private readonly requests = new Map<string, LoadRequest>()\n\n  waitForPendings(): Promise<void> {\n    return new Promise<void>((resolve) => {\n      const interval = setInterval(() => {\n        for (const request of this.requests.values()) {\n          if (!request.isFinished) {\n            return\n          }\n        }\n        clearInterval(interval)\n        resolve()\n      }, 100)\n    })\n  }\n\n  /**\n   * Injects styles and scripts from given urls to the head of the DOM.\n   * This method loads assets from same url once and the assets are\n   * loaded in the same order that given.\n   * @param resources Resources to load.\n   */\n  loadAllSync(resources: ResourceInfo[]): Observable<ResourceInfo[]> {\n    if (!resources.length) {\n      return of([])\n    }\n    const requests = this.createRequests(resources)\n    return new Observable<ResourceInfo[]>((observer) => {\n      const response: ResourceInfo[] = []\n      const subs = from(requests)\n        .pipe(concatMap((e) => e.run()))\n        .subscribe((e) => {\n          response.push(e)\n          if (response.length === resources.length) {\n            observer.next(response)\n            observer.complete()\n          }\n        })\n      return () => {\n        subs?.unsubscribe()\n      }\n    })\n  }\n\n  /**\n   * Injects styles and scripts from given urls to target place in DOM\n   * This method loads style and script from same url once.\n   * @param resources Resources to load.\n   */\n  loadAllAsync(resources: ResourceInfo[]): Observable<ResourceInfo[]> {\n    if (!resources.length) {\n      return of([])\n    }\n    const loaders = this.createRequests(resources)\n    return forkJoin(loaders.map((e) => e.run()))\n  }\n\n  private createRequests(resources: ResourceInfo[]): LoadRequest[] {\n    return resources.map((asset) => {\n      const url = asset[1]\n      let request = this.requests.get(url)\n      if (!request) {\n        this.requests.set(url, (request = new LoadRequest(asset, this.document, this.isBrowser, this.config)))\n      }\n      return request\n    })\n  }\n}\n\nexport const ResourceLoaderConfigProvider = (config: Partial<ResourceLoaderConfig>): Provider => ({\n  provide: ResourceLoaderConfig,\n  useValue: config,\n})\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}