{"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 {\n  ComponentRef,\n  createNgModule,\n  Injectable,\n  Injector,\n  NgModuleRef,\n  SimpleChanges,\n  Type,\n  ViewContainerRef,\n} 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 await 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 async renderComponent(inputs: any, componentRef: ComponentRef<any>): Promise<ComponentRef<any>> {\n    const changes: SimpleChanges = {}\n    const { instance, changeDetectorRef } = componentRef\n\n    if (inputs) {\n      Object.keys(inputs).forEach((k) => {\n        instance[k] = inputs[k]\n        changes[k] = {\n          currentValue: inputs[k],\n          previousValue: undefined,\n          firstChange: true,\n          isFirstChange: () => true,\n        }\n      })\n    }\n\n    if (instance.ngOnChanges) {\n      await instance.ngOnChanges(changes)\n    }\n\n    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 } from '@angular/core'\n\nexport interface IDynamicService {\n  injectable(): boolean\n}\n\n@Injectable({ providedIn: 'root' })\nexport class InjectorService {\n  constructor(private readonly injector: 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 { DOCUMENT } from '@angular/common'\nimport { Injectable, inject } 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 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        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        const attributes = this.asset[2]\n        if (attributes) {\n          for (const key in attributes) {\n            if (attributes.hasOwnProperty(key)) {\n              style.setAttribute(key, attributes[key])\n            }\n          }\n        }\n        this.document.head.appendChild(style)\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        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 in attributes) {\n            if (attributes.hasOwnProperty(key)) {\n              script.setAttribute(key, attributes[key])\n            }\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 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.config)))\n      }\n      return request\n    })\n  }\n}\n\nexport const ResourceLoaderConfigProvider = (config: Partial<ResourceLoaderConfig>): any => ({\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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"}