{"version":3,"file":"jwot-ionic.mjs","sources":["../../../projects/ionic/src/lib/jwion.module.ts","../../../projects/ionic/src/lib/delon/auth/token/interface.ts","../../../projects/ionic/src/lib/delon/auth/social/social.service.ts","../../../projects/ionic/src/lib/delon/auth/store/interface.ts","../../../projects/ionic/src/lib/delon/auth/store/local-storage.service.ts","../../../projects/ionic/src/lib/delon/auth/store/memory.service.ts","../../../projects/ionic/src/lib/delon/auth/store/session-storage.service.ts","../../../projects/ionic/src/lib/delon/auth/auth.config.ts","../../../projects/ionic/src/lib/delon/auth/win_tokens.ts","../../../projects/ionic/src/lib/delon/auth/token/helper.ts","../../../projects/ionic/src/lib/delon/theme/theme.config.ts","../../../projects/ionic/src/lib/delon/theme/services/http/http.client.ts","../../../projects/ionic/src/lib/delon/auth/token/base.interceptor.ts","../../../projects/ionic/src/lib/delon/auth/token/token.service.ts","../../../projects/ionic/src/lib/delon/auth/token/jwt/jwt.helper.ts","../../../projects/ionic/src/lib/delon/auth/token/jwt/jwt.model.ts","../../../projects/ionic/src/lib/delon/auth/token/jwt/jwt.interceptor.ts","../../../projects/ionic/src/lib/delon/auth/token/jwt/jwt.guard.ts","../../../projects/ionic/src/lib/delon/auth/token/simple/simple.model.ts","../../../projects/ionic/src/lib/delon/auth/token/simple/simple.interceptor.ts","../../../projects/ionic/src/lib/delon/auth/token/simple/simple.guard.ts","../../../projects/ionic/src/lib/delon/auth/auth.module.ts","../../../projects/ionic/src/public-api.ts","../../../projects/ionic/src/jwot-ionic.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\n//import { ImageViewerComponent } from './components/image-viewer/image-viewer.component';\r\n//import { ImageViewerDirective } from './components/image-viewer/image-viewer.directive';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IonicModule } from '@ionic/angular';\r\n\r\nconst DIRECTIVES = [\r\n    //ImageViewerDirective\r\n];\r\n\r\nconst COMPONENTS = [\r\n    //ImageViewerComponent\r\n];\r\n\r\nconst THIRDMODULES = [\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    IonicModule,\r\n];\r\n\r\n\r\n@NgModule({\r\n    declarations: [\r\n        ...COMPONENTS,\r\n        ...DIRECTIVES\r\n\r\n    ],\r\n    imports: [\r\n        ...THIRDMODULES\r\n    ],\r\n    exports: [\r\n        ...COMPONENTS,\r\n        ...THIRDMODULES,\r\n        ...DIRECTIVES\r\n    ]\r\n})\r\nexport class JwionModule { }\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport const DA_SERVICE_TOKEN = new InjectionToken<ITokenService>(\r\n  'DELON_AUTH_TOKEN_SERVICE_TOKEN',\r\n);\r\n\r\nexport interface ITokenModel {\r\n  [key: string]: any;\r\n\r\n  token: string;\r\n}\r\n\r\nexport interface ITokenService {\r\n  set(data: ITokenModel): boolean;\r\n\r\n  /**\r\n   * 获取Token，形式包括：\r\n   * - `get()` 获取 Simple Token\r\n   * - `get<JWTTokenModel>(JWTTokenModel)` 获取 JWT Token\r\n   */\r\n  get(type?: any): ITokenModel;\r\n\r\n  /**\r\n   * 获取Token，形式包括：\r\n   * - `get()` 获取 Simple Token\r\n   * - `get<JWTTokenModel>(JWTTokenModel)` 获取 JWT Token\r\n   */\r\n  get<T extends ITokenModel>(type?: any): T;\r\n\r\n  clear(): void;\r\n\r\n  change(): Observable<ITokenModel>;\r\n\r\n  /** 获取登录地址 */\r\n  readonly login_url: string;\r\n\r\n  /** 登录后跳转地址，未指定时返回 `/` */\r\n  redirect: string;\r\n}\r\n","import { Injectable, Inject, OnDestroy } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Observer, Observable } from 'rxjs';\r\n\r\nimport {\r\n  ITokenModel,\r\n  ITokenService,\r\n  DA_SERVICE_TOKEN,\r\n} from '../token/interface';\r\n\r\nconst OPENTYPE = '_delonAuthSocialType';\r\nconst HREFCALLBACK = '_delonAuthSocialCallbackByHref';\r\n\r\nexport type SocialOpenType = 'href' | 'window';\r\n\r\n@Injectable()\r\nexport class SocialService implements OnDestroy {\r\n  private _win: Window;\r\n  private _win$: any;\r\n  private observer: Observer<ITokenModel>;\r\n\r\n  constructor(\r\n    @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,\r\n    @Inject(DOCUMENT) private doc: any,\r\n    private router: Router,\r\n  ) {}\r\n\r\n  /**\r\n   * 使用窗体打开授权页，返回值是 `Observable<ITokenModel>` 用于订阅授权后返回的结果\r\n   * @param url 获取授权地址\r\n   * @param callback 回调路由地址\r\n   * @param options.windowFeatures 等同 `window.open` 的 `features` 参数值\r\n   */\r\n  login(\r\n    url: string,\r\n    callback?: string,\r\n    options?: {\r\n      type?: 'window';\r\n      windowFeatures?: string;\r\n    },\r\n  ): Observable<ITokenModel>;\r\n\r\n  /**\r\n   * 跳转至授权页\r\n   * @param url 获取授权地址\r\n   * @param callback 回调路由地址\r\n   */\r\n  login(\r\n    url: string,\r\n    callback?: string,\r\n    options?: {\r\n      type?: 'href';\r\n    },\r\n  ): void;\r\n\r\n  /**\r\n   * 跳转至登录页，若为 `type=window` 时，返回值是 `Observable<ITokenModel>`\r\n   * @param url 获取授权地址\r\n   * @param callback 当 `type=href` 成功时的回调路由地址\r\n   * @param options.type 打开方式，默认 `window`\r\n   * @param options.windowFeatures 等同 `window.open` 的 `features` 参数值\r\n   */\r\n  login(\r\n    url: string,\r\n    callback: string = '/',\r\n    options: {\r\n      type?: SocialOpenType;\r\n      windowFeatures?: string;\r\n    } = {},\r\n  ): Observable<ITokenModel> | void {\r\n    options = Object.assign(\r\n      {\r\n        type: 'window',\r\n        windowFeatures:\r\n          'location=yes,height=570,width=520,scrollbars=yes,status=yes',\r\n      },\r\n      options,\r\n    );\r\n    localStorage.setItem(OPENTYPE, options.type);\r\n    localStorage.setItem(HREFCALLBACK, callback);\r\n    if (options.type === 'href') {\r\n      this.doc.location.href = url;\r\n      return;\r\n    }\r\n\r\n    this._win = window.open(url, '_blank', options.windowFeatures);\r\n    this._win$ = setInterval(() => {\r\n      if (this._win && this._win.closed) {\r\n        this.ngOnDestroy();\r\n\r\n        let model = this.tokenService.get();\r\n        if (model && !model.token) model = null;\r\n\r\n        // 触发变更通知\r\n        if (model) {\r\n          this.tokenService.set(model);\r\n        }\r\n\r\n        this.observer.next(model);\r\n        this.observer.complete();\r\n      }\r\n    }, 100);\r\n    return Observable.create((observer: Observer<ITokenModel>) => {\r\n      this.observer = observer;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 授权成功后的回调处理\r\n   *\r\n   * @param rawData 指定回调认证信息，为空时从根据当前URL解析\r\n   */\r\n  callback(rawData?: string | ITokenModel): ITokenModel {\r\n    // from uri\r\n    if (!rawData && this.router.url.indexOf('?') === -1) {\r\n      throw new Error(`url muse contain a ?`);\r\n    }\r\n    // parse\r\n    let data: ITokenModel = { token: `` };\r\n    if (typeof rawData === 'string') {\r\n      const rightUrl = rawData.split('?')[1].split('#')[0];\r\n      data = <any>this.router.parseUrl('./?' + rightUrl).queryParams;\r\n    } else {\r\n      data = rawData;\r\n    }\r\n\r\n    if (!data || !data.token) throw new Error(`invalide token data`);\r\n    this.tokenService.set(data);\r\n\r\n    const url = localStorage.getItem(HREFCALLBACK) || '/';\r\n    localStorage.removeItem(HREFCALLBACK);\r\n    const type = localStorage.getItem(OPENTYPE);\r\n    localStorage.removeItem(OPENTYPE);\r\n    if (type === 'window') {\r\n      window.close();\r\n    } else {\r\n      this.router.navigateByUrl(url);\r\n    }\r\n\r\n    return data;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearInterval(this._win$);\r\n    this._win$ = null;\r\n  }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { ITokenModel } from '../token/interface';\r\n\r\nexport const DA_STORE_TOKEN = new InjectionToken<IStore>('AUTH_STORE_TOKEN');\r\n\r\nexport interface IStore {\r\n  get(key: string): ITokenModel;\r\n\r\n  set(key: string, value: ITokenModel): boolean;\r\n\r\n  remove(key: string);\r\n}\r\n","import { IStore } from './interface';\r\nimport { ITokenModel } from '../token/interface';\r\n\r\nexport class LocalStorageStore implements IStore {\r\n  get(key: string): ITokenModel {\r\n    return JSON.parse(localStorage.getItem(key) || '{}') || {};\r\n  }\r\n\r\n  set(key: string, value: ITokenModel): boolean {\r\n    localStorage.setItem(key, JSON.stringify(value));\r\n    return true;\r\n  }\r\n\r\n  remove(key: string) {\r\n    localStorage.removeItem(key);\r\n  }\r\n}\r\n","import { IStore } from './interface';\r\nimport { ITokenModel } from '../token/interface';\r\n\r\nexport class MemoryStore implements IStore {\r\n  private cache: { [key: string]: ITokenModel } = {};\r\n\r\n  get(key: string): ITokenModel {\r\n    return this.cache[key] || <any>{};\r\n  }\r\n\r\n  set(key: string, value: ITokenModel): boolean {\r\n    this.cache[key] = value;\r\n    return true;\r\n  }\r\n\r\n  remove(key: string) {\r\n    this.cache[key] = null;\r\n  }\r\n}\r\n","import { IStore } from './interface';\r\nimport { ITokenModel } from '../token/interface';\r\n\r\nexport class SessionStorageStore implements IStore {\r\n  get(key: string): ITokenModel {\r\n    return JSON.parse(sessionStorage.getItem(key) || '{}') || {};\r\n  }\r\n\r\n  set(key: string, value: ITokenModel): boolean {\r\n    sessionStorage.setItem(key, JSON.stringify(value));\r\n    return true;\r\n  }\r\n\r\n  remove(key: string) {\r\n    sessionStorage.removeItem(key);\r\n  }\r\n}\r\n","export class DelonAuthConfig {\r\n    /**\r\n     * 存储KEY值\r\n     */\r\n    store_key?= '_token';\r\n    /**\r\n     * 无效时跳转至登录页，包括：\r\n     * - 无效token值\r\n     * - token已过期（限JWT）\r\n     */\r\n    token_invalid_redirect?= true;\r\n    /**\r\n     * token过期时间偏移值，默认：`10` 秒（单位：秒）\r\n     */\r\n    token_exp_offset?= 10;\r\n    /**\r\n     * 发送token参数名，默认：token\r\n     */\r\n    token_send_key?= 'token';\r\n    /**\r\n     * 发送token模板（默认为：`${token}`），使用 `${token}` 表示token点位符，例如：\r\n     *\r\n     * - `Bearer ${token}`\r\n     */\r\n    token_send_template?= '${token}';\r\n    /**\r\n     * 发送token参数位置，默认：header\r\n     */\r\n    token_send_place?: 'header' | 'body' | 'url' = 'header';\r\n    /**\r\n     * 登录页路由地址\r\n     */\r\n    login_url?= `/login`;\r\n    /**\r\n     * 忽略TOKEN的URL地址列表，默认值为：[ /\\/login/, /assets\\//, /passport\\// ]\r\n     */\r\n    ignores?: RegExp[] = [/\\/login/, /assets\\//, /passport\\//];\r\n    /**\r\n     * 允许匿名登录KEY，若请求参数中带有该KEY表示忽略TOKEN\r\n     */\r\n    allow_anonymous_key?= `_allow_anonymous`;\r\n\r\n    /**\r\n    * 认证检查模式 :\r\n    *  'strict' - 严格模式,所有的请求之前都会检查是否认证过\r\n    *  'free' - 宽松模式,有token就带上,没有就不带\r\n    */\r\n\r\n    check_pattern?: 'strict' | 'free' = 'free';\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const WINDOW = new InjectionToken<any>('Window');\r\n","import { Injector } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { SimpleTokenModel } from './simple/simple.model';\r\nimport { JWTTokenModel } from './jwt/jwt.model';\r\nimport { DelonAuthConfig } from '../auth.config';\r\nimport { WINDOW } from '../win_tokens';\r\n\r\nexport function CheckSimple(model: SimpleTokenModel): boolean {\r\n    return (\r\n        model != null && typeof model.token === 'string' && model.token.length > 0\r\n    );\r\n}\r\n\r\nexport function CheckJwt(model: JWTTokenModel, offset: number): boolean {\r\n    return model != null && !!model.token && !model.isExpired(offset);\r\n}\r\n\r\nexport function ToLogin(options: DelonAuthConfig, injector: Injector) {\r\n    if (options.token_invalid_redirect === true) {\r\n        setTimeout(() => {\r\n            if (/^https?:\\/\\//g.test(options.login_url)) {\r\n                injector.get(WINDOW).location.href = options.login_url;\r\n            } else {\r\n                injector.get(Router).navigate([options.login_url]);\r\n            }\r\n        });\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClientConfig } from './services/http/http.config';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AlainThemeConfig {\r\n  http?: HttpClientConfig;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  HttpClient,\r\n  HttpHeaders,\r\n  HttpParams,\r\n  HttpResponse,\r\n} from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { tap, catchError } from 'rxjs/operators';\r\nimport { AlainThemeConfig } from '../../theme.config';\r\nimport { HttpClientConfig } from './http.config';\r\n\r\n/**\r\n * 封装HttpClient，主要解决：\r\n * + 优化HttpClient在参数上便利性\r\n * + 统一实现 loading\r\n * + 统一处理时间格式问题\r\n */\r\n@Injectable({ providedIn: 'root' })\r\n// tslint:disable-next-line:class-name\r\nexport class _HttpClient {\r\n  private cog: HttpClientConfig;\r\n  constructor(private http: HttpClient, cog: AlainThemeConfig) {\r\n    this.cog = Object.assign(\r\n      <HttpClientConfig>{\r\n        nullValueHandling: 'include',\r\n        dateValueHandling: 'timestamp',\r\n      },\r\n      cog!.http,\r\n    );\r\n  }\r\n\r\n  private _loading = false;\r\n\r\n  /** 是否正在加载中 */\r\n  get loading(): boolean {\r\n    return this._loading;\r\n  }\r\n\r\n  parseParams(params: any): HttpParams {\r\n    const newParams = {};\r\n    Object.keys(params).forEach(key => {\r\n      let _data = params[key];\r\n      // 忽略空值\r\n      if (this.cog.nullValueHandling === 'ignore' && _data == null) return;\r\n      // 将时间转化为：时间戳 (秒)\r\n      if (this.cog.dateValueHandling === 'timestamp' && _data instanceof Date) {\r\n        _data = _data.valueOf();\r\n      }\r\n      newParams[key] = _data;\r\n    });\r\n    return new HttpParams({ fromObject: newParams });\r\n  }\r\n\r\n  appliedUrl(url: string, params?: any) {\r\n    if (!params) return url;\r\n    url += ~url.indexOf('?') ? '' : '?';\r\n    const arr: string[] = [];\r\n    // tslint:disable-next-line:forin\r\n    for (const key in params) {\r\n      arr.push(`${key}=${params[key]}`);\r\n    }\r\n    return url + arr.join('&');\r\n  }\r\n\r\n  begin() {\r\n    // console.time('http');\r\n    setTimeout(() => (this._loading = true));\r\n  }\r\n\r\n  end() {\r\n    // console.timeEnd('http');\r\n    setTimeout(() => (this._loading = false));\r\n  }\r\n\r\n  // region: get\r\n\r\n  /**\r\n   * GET：返回一个 `T` 类型\r\n   */\r\n  get<T>(\r\n    url: string,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body';\r\n      reportProgress?: boolean;\r\n      responseType: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<T>;\r\n\r\n  /**\r\n   * GET：返回一个 `string` 类型\r\n   */\r\n  get(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body';\r\n      reportProgress?: boolean;\r\n      responseType: 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<string>;\r\n\r\n  /**\r\n   * GET：返回一个 `JSON` 类型\r\n   */\r\n  get(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<HttpResponse<Object>>;\r\n\r\n  /**\r\n   * GET：返回一个 `JSON` 类型\r\n   */\r\n  get<T>(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<HttpResponse<T>>;\r\n\r\n  /**\r\n   * GET：返回一个 `any` 类型\r\n   */\r\n  get(\r\n    url: string,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any>;\r\n\r\n  /**\r\n   * GET 请求\r\n   */\r\n  get(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any> {\r\n    return this.request(\r\n      'GET',\r\n      url,\r\n      Object.assign(\r\n        {\r\n          params,\r\n        },\r\n        options,\r\n      ),\r\n    );\r\n  }\r\n\r\n  // endregion\r\n\r\n  // region: post\r\n\r\n  /**\r\n   * POST：返回一个 `string` 类型\r\n   */\r\n  post(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body';\r\n      reportProgress?: boolean;\r\n      responseType: 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<string>;\r\n\r\n  /**\r\n   * POST：返回一个 `HttpResponse<JSON>` 类型\r\n   */\r\n  post(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<HttpResponse<Object>>;\r\n\r\n  /**\r\n   * POST：返回一个 `JSON` 类型\r\n   */\r\n  post<T>(\r\n    url: string,\r\n    body?: any,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<T>;\r\n\r\n  /**\r\n   * POST：返回一个 `any` 类型\r\n   */\r\n  post(\r\n    url: string,\r\n    body?: any,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any>;\r\n\r\n  /**\r\n   * POST 请求\r\n   */\r\n  post(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any> {\r\n    return this.request(\r\n      'POST',\r\n      url,\r\n      Object.assign(\r\n        {\r\n          body,\r\n          params,\r\n        },\r\n        options,\r\n      ),\r\n    );\r\n  }\r\n\r\n  // endregion\r\n\r\n  // region: delete\r\n\r\n  /**\r\n   * DELETE：返回一个 `string` 类型\r\n   */\r\n  delete(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body';\r\n      reportProgress?: boolean;\r\n      responseType: 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<string>;\r\n\r\n  /**\r\n   * DELETE：返回一个 `JSON` 类型\r\n   */\r\n  delete(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<HttpResponse<Object>>;\r\n\r\n  /**\r\n   * DELETE：返回一个 `any` 类型\r\n   */\r\n  delete(\r\n    url: string,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any>;\r\n\r\n  /**\r\n   * DELETE 请求\r\n   */\r\n  delete(\r\n    url: string,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any> {\r\n    return this.request(\r\n      'DELETE',\r\n      url,\r\n      Object.assign(\r\n        {\r\n          params,\r\n        },\r\n        options,\r\n      ),\r\n    );\r\n  }\r\n\r\n  // endregion\r\n\r\n  /**\r\n   * `jsonp` 请求\r\n   *\r\n   * @param url URL地址\r\n   * @param params 请求参数\r\n   * @param callbackParam CALLBACK值，默认：JSONP_CALLBACK\r\n   */\r\n  jsonp(\r\n    url: string,\r\n    params?: any,\r\n    callbackParam: string = 'JSONP_CALLBACK',\r\n  ): Observable<any> {\r\n    return this.http.jsonp(this.appliedUrl(url, params), callbackParam).pipe(\r\n      tap(() => {\r\n        this.end();\r\n      }),\r\n      catchError(res => {\r\n        this.end();\r\n        return throwError(res);\r\n      }),\r\n    );\r\n  }\r\n\r\n  // #region patch\r\n\r\n  /**\r\n   * PATCH：返回一个 `string` 类型\r\n   */\r\n  patch(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body';\r\n      reportProgress?: boolean;\r\n      responseType: 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<string>;\r\n\r\n  /**\r\n   * PATCH：返回一个 `HttpResponse<JSON>` 类型\r\n   */\r\n  patch(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<HttpResponse<Object>>;\r\n\r\n  /**\r\n   * PATCH：返回一个 `JSON` 类型\r\n   */\r\n  patch<T>(\r\n    url: string,\r\n    body?: any,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<T>;\r\n\r\n  /**\r\n   * PATCH：返回一个 `any` 类型\r\n   */\r\n  patch(\r\n    url: string,\r\n    body?: any,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any>;\r\n\r\n  /**\r\n   * PATCH 请求\r\n   */\r\n  patch(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any> {\r\n    return this.request(\r\n      'PATCH',\r\n      url,\r\n      Object.assign(\r\n        {\r\n          body,\r\n          params,\r\n        },\r\n        options,\r\n      ),\r\n    );\r\n  }\r\n\r\n  // #endregion\r\n\r\n  // #region put\r\n\r\n  /**\r\n   * PUT：返回一个 `string` 类型\r\n   */\r\n  put(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body';\r\n      reportProgress?: boolean;\r\n      responseType: 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<string>;\r\n\r\n  /**\r\n   * PUT：返回一个 `HttpResponse<JSON>` 类型\r\n   */\r\n  put(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<HttpResponse<Object>>;\r\n\r\n  /**\r\n   * PUT：返回一个 `JSON` 类型\r\n   */\r\n  put<T>(\r\n    url: string,\r\n    body?: any,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe: 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'json';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<T>;\r\n\r\n  /**\r\n   * PUT：返回一个 `any` 类型\r\n   */\r\n  put(\r\n    url: string,\r\n    body?: any,\r\n    params?: any,\r\n    options?: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any>;\r\n\r\n  /**\r\n   * PUT 请求\r\n   */\r\n  put(\r\n    url: string,\r\n    body: any,\r\n    params: any,\r\n    options: {\r\n      headers?: HttpHeaders | { [header: string]: string | string[] };\r\n      observe?: 'body' | 'events' | 'response';\r\n      reportProgress?: boolean;\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any> {\r\n    return this.request(\r\n      'PUT',\r\n      url,\r\n      Object.assign(\r\n        {\r\n          body,\r\n          params,\r\n        },\r\n        options,\r\n      ),\r\n    );\r\n  }\r\n\r\n  // #endregion\r\n\r\n  /**\r\n   * `request` 请求\r\n   *\r\n   * @param method 请求方法类型\r\n   * @param url URL地址\r\n   * @param options 参数\r\n   */\r\n  request<R>(\r\n    method: string,\r\n    url: string,\r\n    options?: {\r\n      body?: any;\r\n      headers?:\r\n        | HttpHeaders\r\n        | {\r\n            [header: string]: string | string[];\r\n          };\r\n      observe?: 'body' | 'events' | 'response';\r\n      params?:\r\n        | HttpParams\r\n        | {\r\n            [param: string]: string | string[];\r\n          };\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      reportProgress?: boolean;\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<R>;\r\n  /**\r\n   * `request` 请求\r\n   *\r\n   * @param method 请求方法类型\r\n   * @param url URL地址\r\n   * @param options 参数\r\n   */\r\n  request(\r\n    method: string,\r\n    url: string,\r\n    options?: {\r\n      body?: any;\r\n      headers?:\r\n        | HttpHeaders\r\n        | {\r\n            [header: string]: string | string[];\r\n          };\r\n      observe?: 'body' | 'events' | 'response';\r\n      params?:\r\n        | HttpParams\r\n        | {\r\n            [param: string]: string | string[];\r\n          };\r\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n      reportProgress?: boolean;\r\n      withCredentials?: boolean;\r\n    },\r\n  ): Observable<any> {\r\n    this.begin();\r\n    if (options) {\r\n      if (options.params) options.params = this.parseParams(options.params);\r\n    }\r\n    return this.http.request(method, url, options).pipe(\r\n      tap(() => {\r\n        this.end();\r\n      }),\r\n      catchError(res => {\r\n        this.end();\r\n        return throwError(res);\r\n      }),\r\n    );\r\n  }\r\n}\r\n","import { Injector, Optional, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n    HttpInterceptor,\r\n    HttpRequest,\r\n    HttpHandler,\r\n    HttpSentEvent,\r\n    HttpHeaderResponse,\r\n    HttpProgressEvent,\r\n    HttpResponse,\r\n    HttpUserEvent,\r\n    HttpEvent,\r\n    HttpErrorResponse,\r\n} from '@angular/common/http';\r\nimport { Observable, Observer } from 'rxjs';\r\n\r\n\r\nimport { ITokenModel } from './interface';\r\nimport { DelonAuthConfig } from '../auth.config';\r\nimport { ToLogin } from './helper';\r\nimport { _HttpClient } from '../../theme/services/http/http.client';\r\n\r\n@Injectable()\r\nexport abstract class BaseInterceptor implements HttpInterceptor {\r\n    constructor(@Optional() protected injector: Injector) { }\r\n\r\n    protected model: ITokenModel;\r\n\r\n    abstract isAuth(options: DelonAuthConfig): boolean;\r\n\r\n    abstract setReq(\r\n        req: HttpRequest<any>,\r\n        options: DelonAuthConfig,\r\n    ): HttpRequest<any>;\r\n\r\n    intercept(\r\n        req: HttpRequest<any>,\r\n        next: HttpHandler,\r\n    ): Observable<\r\n        | HttpSentEvent\r\n        | HttpHeaderResponse\r\n        | HttpProgressEvent\r\n        | HttpResponse<any>\r\n        | HttpUserEvent<any>\r\n    > {\r\n        const options = Object.assign(\r\n            new DelonAuthConfig(),\r\n            this.injector.get(DelonAuthConfig, null),\r\n        );\r\n        if (options.ignores) {\r\n            for (const item of options.ignores as RegExp[]) {\r\n                if (item.test(req.url)) return next.handle(req);\r\n            }\r\n        }\r\n\r\n        if (\r\n            options.allow_anonymous_key &&\r\n            (req.params.has(options.allow_anonymous_key) || new RegExp(`[\\?|&]${options.allow_anonymous_key}=[^&]+`).test(req.urlWithParams))\r\n        ) {\r\n            return next.handle(req);\r\n        }\r\n\r\n        if (this.isAuth(options)) {\r\n            req = this.setReq(req, options);\r\n        } else {\r\n            // console.log(req.url)\r\n            ToLogin(options, this.injector);\r\n            // observer.error：会导致后续拦截器无法触发，因此，需要处理 `_HttpClient` 状态问题\r\n            const hc = this.injector.get(_HttpClient, null);\r\n            if (hc) hc.end();\r\n            return new Observable((observer: Observer<HttpEvent<any>>) => {\r\n                const res = new HttpErrorResponse({\r\n                    status: 401,\r\n                    statusText: `来自 @delon/auth 的拦截，所请求URL未授权，若是登录API可加入 [url?_allow_anonymous=true] 来表示忽略校验，更多方法请参考： https://ng-alain.com/auth/getting-started#DelonAuthConfig\\n`,\r\n                });\r\n                observer.error(res);\r\n            });\r\n        }\r\n        return next.handle(req);\r\n    }\r\n}\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { Observable, BehaviorSubject } from 'rxjs';\r\nimport { share } from 'rxjs/operators';\r\nimport { ITokenService, ITokenModel } from './interface';\r\nimport { DA_STORE_TOKEN, IStore } from '../store/interface';\r\nimport { DelonAuthConfig } from '../auth.config';\r\n\r\n@Injectable()\r\nexport class TokenService implements ITokenService {\r\n  private change$: BehaviorSubject<ITokenModel> = new BehaviorSubject<\r\n    ITokenModel\r\n  >(null);\r\n  private data: ITokenModel;\r\n  private _redirect: string;\r\n\r\n  constructor(\r\n    private options: DelonAuthConfig,\r\n    @Inject(DA_STORE_TOKEN) private store: IStore,\r\n  ) {}\r\n\r\n  get login_url(): string {\r\n    return this.options.login_url;\r\n  }\r\n\r\n  set redirect(url: string) {\r\n    this._redirect = url;\r\n  }\r\n\r\n  get redirect() {\r\n    return this._redirect || '/';\r\n  }\r\n\r\n  set(data: ITokenModel): boolean {\r\n    this.change$.next(data);\r\n    return this.store.set(this.options.store_key, data);\r\n  }\r\n\r\n  get(type?: any);\r\n  get<T extends ITokenModel>(type?: { new (): T }): T {\r\n    const data = this.store.get(this.options.store_key);\r\n    return type ? (Object.assign(new type(), data) as T) : (data as T);\r\n  }\r\n\r\n  clear() {\r\n    this.change$.next(null);\r\n    this.store.remove(this.options.store_key);\r\n  }\r\n\r\n  change(): Observable<ITokenModel> {\r\n    return this.change$.pipe(share());\r\n  }\r\n}\r\n","export function urlBase64Decode(str: string): string {\r\n  let output = str.replace(/-/g, '+').replace(/_/g, '/');\r\n  switch (output.length % 4) {\r\n    case 0: {\r\n      break;\r\n    }\r\n    case 2: {\r\n      output += '==';\r\n      break;\r\n    }\r\n    case 3: {\r\n      output += '=';\r\n      break;\r\n    }\r\n    default: {\r\n      throw new Error(\r\n        `'atob' failed: The string to be decoded is not correctly encoded.`,\r\n      );\r\n    }\r\n  }\r\n  return b64DecodeUnicode(output);\r\n}\r\n\r\nfunction b64decode(str: string): string {\r\n  const chars =\r\n    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n  let output: string = '';\r\n\r\n  str = String(str).replace(/=+$/, '');\r\n\r\n  for (\r\n    // initialize result and counters\r\n    let bc: number = 0, bs: any, buffer: any, idx: number = 0;\r\n    // get next character\r\n    (buffer = str.charAt(idx++));\r\n    // character found in table? initialize bit storage and add its ascii value;\r\n    ~buffer &&\r\n    ((bs = bc % 4 ? bs * 64 + buffer : buffer),\r\n    // and if not first of each 4 characters,\r\n    // convert the first 8 bits to one ascii character\r\n    bc++ % 4)\r\n      ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))\r\n      : 0\r\n  ) {\r\n    // try to find character in table (0-63, not found => -1)\r\n    buffer = chars.indexOf(buffer);\r\n  }\r\n  return output;\r\n}\r\n\r\n// https://developer.mozilla.org/en/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem\r\nfunction b64DecodeUnicode(str: any) {\r\n  return decodeURIComponent(\r\n    Array.prototype.map\r\n      .call(b64decode(str), (c: any) => {\r\n        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n      })\r\n      .join(''),\r\n  );\r\n}\r\n","import { ITokenModel } from '../interface';\r\nimport { urlBase64Decode } from './jwt.helper';\r\n\r\nexport class JWTTokenModel implements ITokenModel {\r\n  [key: string]: any;\r\n\r\n  token: string;\r\n\r\n  /**\r\n   * 获取载荷信息\r\n   */\r\n  get payload(): any {\r\n    const parts = (this.token || '').split('.');\r\n    if (parts.length !== 3) throw new Error('JWT must have 3 parts');\r\n\r\n    const decoded = urlBase64Decode(parts[1]);\r\n    return JSON.parse(decoded);\r\n  }\r\n\r\n  /**\r\n   * 检查Token是否过期，`payload` 必须包含 `exp` 时有效\r\n   *\r\n   * @param offsetSeconds 偏移量\r\n   */\r\n  isExpired(offsetSeconds: number = 0): boolean {\r\n    const decoded = this.payload;\r\n    if (!decoded.hasOwnProperty('exp')) return null;\r\n\r\n    const date = new Date(0);\r\n    date.setUTCSeconds(decoded.exp);\r\n\r\n    return !(date.valueOf() > new Date().valueOf() + offsetSeconds * 1000);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpRequest } from '@angular/common/http';\r\n\r\nimport { DelonAuthConfig } from '../../auth.config';\r\nimport { BaseInterceptor } from '../base.interceptor';\r\nimport { DA_SERVICE_TOKEN } from '../interface';\r\nimport { JWTTokenModel } from './jwt.model';\r\nimport { CheckJwt } from '../helper';\r\n\r\n@Injectable()\r\nexport class JWTInterceptor extends BaseInterceptor {\r\n    isAuth(options: DelonAuthConfig): boolean {\r\n        this.model = this.injector\r\n            .get(DA_SERVICE_TOKEN)\r\n            .get<JWTTokenModel>(JWTTokenModel);\r\n        //   console.log('jwt:', this.model)\r\n        if (options.check_pattern == 'strict') {\r\n            return CheckJwt(this.model as JWTTokenModel, options.token_exp_offset);\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    setReq(req: HttpRequest<any>, options: DelonAuthConfig): HttpRequest<any> {\r\n        return req.clone({\r\n            setHeaders: {\r\n                Authorization: `Bearer ${this.model.token}`,\r\n            },\r\n        });\r\n    }\r\n}\r\n","import { Injectable, Inject, Injector } from '@angular/core';\r\nimport { CanActivate, CanActivateChild, CanLoad } from '@angular/router';\r\nimport { DA_SERVICE_TOKEN, ITokenService } from '../interface';\r\nimport { JWTTokenModel } from './jwt.model';\r\nimport { DelonAuthConfig } from '../../auth.config';\r\nimport { CheckJwt, ToLogin } from '../helper';\r\n\r\n@Injectable()\r\nexport class JWTGuard implements CanActivate, CanActivateChild, CanLoad {\r\n  private cog: DelonAuthConfig;\r\n  constructor(\r\n    @Inject(DA_SERVICE_TOKEN) private srv: ITokenService,\r\n    private injector: Injector,\r\n    cog: DelonAuthConfig,\r\n  ) {\r\n    this.cog = Object.assign(new DelonAuthConfig(), cog);\r\n  }\r\n\r\n  private process(): boolean {\r\n    const res = CheckJwt(\r\n      this.srv.get<JWTTokenModel>(JWTTokenModel),\r\n      this.cog.token_exp_offset,\r\n    );\r\n    if (!res) {\r\n      ToLogin(this.cog, this.injector);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  // lazy loading\r\n  canLoad(): boolean {\r\n    return this.process();\r\n  }\r\n  // all children route\r\n  canActivateChild(): boolean {\r\n    return this.process();\r\n  }\r\n  // route\r\n  canActivate(): boolean {\r\n    return this.process();\r\n  }\r\n}\r\n","import { ITokenModel } from '../interface';\r\n\r\nexport class SimpleTokenModel implements ITokenModel {\r\n  [key: string]: any;\r\n\r\n  token: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpRequest } from '@angular/common/http';\r\n\r\nimport { DelonAuthConfig } from '../../auth.config';\r\nimport { SimpleTokenModel } from './simple.model';\r\nimport { BaseInterceptor } from '../base.interceptor';\r\nimport { DA_SERVICE_TOKEN } from '../interface';\r\nimport { CheckSimple } from '../helper';\r\n\r\n@Injectable()\r\nexport class SimpleInterceptor extends BaseInterceptor {\r\n  isAuth(options: DelonAuthConfig): boolean {\r\n    this.model = this.injector.get(DA_SERVICE_TOKEN).get() as SimpleTokenModel;\r\n    return CheckSimple(this.model as SimpleTokenModel);\r\n  }\r\n\r\n  setReq(req: HttpRequest<any>, options: DelonAuthConfig): HttpRequest<any> {\r\n    const token = options.token_send_template.replace(\r\n      /\\$\\{([\\w]+)\\}/g,\r\n      (_: string, g) => this.model[g],\r\n    );\r\n    switch (options.token_send_place) {\r\n      case 'header':\r\n        const obj = {};\r\n        obj[options.token_send_key] = token;\r\n        req = req.clone({\r\n          setHeaders: obj,\r\n        });\r\n        break;\r\n      case 'body':\r\n        const body = req.body || {};\r\n        body[options.token_send_key] = token;\r\n        req = req.clone({\r\n          body: body,\r\n        });\r\n        break;\r\n      case 'url':\r\n        req = req.clone({\r\n          params: req.params.append(options.token_send_key, token),\r\n        });\r\n        break;\r\n    }\r\n    return req;\r\n  }\r\n}\r\n","import { Injectable, Inject, Injector } from '@angular/core';\r\nimport { CanActivate, CanActivateChild, CanLoad } from '@angular/router';\r\nimport { DA_SERVICE_TOKEN, ITokenService } from '../interface';\r\nimport { CheckSimple, ToLogin } from '../helper';\r\nimport { DelonAuthConfig } from '../../auth.config';\r\n\r\n@Injectable()\r\nexport class SimpleGuard implements CanActivate, CanActivateChild, CanLoad {\r\n  private cog: DelonAuthConfig;\r\n\r\n  constructor(\r\n    @Inject(DA_SERVICE_TOKEN) private srv: ITokenService,\r\n    private injector: Injector,\r\n    cog: DelonAuthConfig,\r\n  ) {\r\n    this.cog = Object.assign(new DelonAuthConfig(), cog);\r\n  }\r\n\r\n  private process(): boolean {\r\n    const res = CheckSimple(this.srv.get());\r\n    if (!res) {\r\n      ToLogin(this.cog, this.injector);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  // lazy loading\r\n  canLoad(): boolean {\r\n    return this.process();\r\n  }\r\n  // all children route\r\n  canActivateChild(): boolean {\r\n    return this.process();\r\n  }\r\n  // route\r\n  canActivate(): boolean {\r\n    return this.process();\r\n  }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { DelonAuthConfig } from './auth.config';\r\nimport { DA_STORE_TOKEN } from './store/interface';\r\nimport { DA_SERVICE_TOKEN } from './token/interface';\r\nimport { LocalStorageStore } from './store/local-storage.service';\r\nimport { TokenService } from './token/token.service';\r\nimport { SimpleGuard } from './token/simple/simple.guard';\r\nimport { JWTGuard } from './token/jwt/jwt.guard';\r\nimport { WINDOW } from './win_tokens';\r\n\r\n@NgModule({})\r\nexport class DelonAuthModule {\r\n  static forRoot(): ModuleWithProviders<DelonAuthModule> {\r\n    return {\r\n      ngModule: DelonAuthModule,\r\n      providers: [\r\n        { provide: WINDOW, useValue: window },\r\n        DelonAuthConfig,\r\n        SimpleGuard,\r\n        JWTGuard,\r\n        { provide: DA_STORE_TOKEN, useClass: LocalStorageStore },\r\n        { provide: DA_SERVICE_TOKEN, useClass: TokenService },\r\n      ],\r\n    };\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of jwion\r\n */\r\n\r\nexport * from './lib/jwion.module';\r\nexport * from './lib/delon/index';\r\n\r\n//export { ImageViewerService } from './lib/components/image-viewer/image-viewer.service';\r\n//export { ImageViewerComponent } from './lib/components/image-viewer/image-viewer.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.AlainThemeConfig","i1.DelonAuthConfig"],"mappings":"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"}