@solar-angular/platform-browser 18.3.1 → 19.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,10 +40,10 @@ class FileManager {
40
40
  anchor.download = filename;
41
41
  anchor.click();
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, providedIn: 'root' }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FileManager, providedIn: 'root' }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FileManager, decorators: [{
47
47
  type: Injectable,
48
48
  args: [{
49
49
  providedIn: 'root'
@@ -72,10 +72,10 @@ class FullscreenService {
72
72
  isFullscreen(target = this.document.documentElement) {
73
73
  return target === this.document.fullscreenElement;
74
74
  }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }
77
77
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FullscreenService, decorators: [{
79
79
  type: Injectable,
80
80
  args: [{
81
81
  providedIn: 'root'
@@ -237,10 +237,10 @@ class ImageCompressor {
237
237
  return bitmap;
238
238
  }));
239
239
  }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
241
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
241
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }
242
242
  }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, decorators: [{
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ImageCompressor, decorators: [{
244
244
  type: Injectable,
245
245
  args: [{
246
246
  providedIn: 'root'
@@ -278,10 +278,10 @@ class ResourceLoader {
278
278
  this.document.head.appendChild(link);
279
279
  });
280
280
  }
281
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
282
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }
281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
282
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }
283
283
  }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, decorators: [{
284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ResourceLoader, decorators: [{
285
285
  type: Injectable,
286
286
  args: [{
287
287
  providedIn: 'root'
@@ -499,10 +499,10 @@ class SpreadsheetService {
499
499
  const blob = new Blob([excelData], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /* MediaType.Xlsx */ });
500
500
  this.fileManager.save(blob, fileName + '.xlsx');
501
501
  }
502
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpreadsheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
503
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpreadsheetService, providedIn: 'root' }); }
502
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SpreadsheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
503
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SpreadsheetService, providedIn: 'root' }); }
504
504
  }
505
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpreadsheetService, decorators: [{
505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SpreadsheetService, decorators: [{
506
506
  type: Injectable,
507
507
  args: [{
508
508
  providedIn: 'root'
@@ -593,10 +593,10 @@ class LocalStorage {
593
593
  remove(key) {
594
594
  this.storage.removeItem(key);
595
595
  }
596
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
597
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorage, providedIn: 'root' }); }
596
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: LocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
597
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: LocalStorage, providedIn: 'root' }); }
598
598
  }
599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorage, decorators: [{
599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: LocalStorage, decorators: [{
600
600
  type: Injectable,
601
601
  args: [{
602
602
  providedIn: 'root'
@@ -631,10 +631,10 @@ class SessionStorage {
631
631
  remove(key) {
632
632
  this.storage.removeItem(key);
633
633
  }
634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
635
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorage, providedIn: 'root' }); }
634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
635
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionStorage, providedIn: 'root' }); }
636
636
  }
637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorage, decorators: [{
637
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SessionStorage, decorators: [{
638
638
  type: Injectable,
639
639
  args: [{
640
640
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"solar-angular-platform-browser.mjs","sources":["../../../packages/platform-browser/src/file-manager.ts","../../../packages/platform-browser/src/fullscreen.service.ts","../../../packages/platform-browser/src/image-compressor.ts","../../../packages/platform-browser/src/resource-loader.ts","../../../packages/platform-browser/src/spreadsheet.service.ts","../../../packages/platform-browser/src/storage/local-storage.ts","../../../packages/platform-browser/src/storage/session-storage.ts","../../../packages/platform-browser/src/solar-angular-platform-browser.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileManager {\n private readonly document = inject(DOCUMENT);\n\n /**\n * Opens a file picker dialog to allow the user to select files.\n *\n * @param options - Configuration options for the file picker.\n * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.\n * @param options.multiple - If `true`, allows multiple file selections.\n * @returns A promise that resolves with an array of selected `File` objects.\n */\n pick(options: { accept?: string | string[]; multiple?: boolean }) {\n const input = this.document.createElement('input');\n input.type = 'file';\n input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';\n input.multiple = !!options.multiple;\n\n return new Promise<File[]>((resolve, reject) => {\n input.onchange = () => {\n resolve(Array.from(input.files || []));\n };\n input.onerror = reject;\n input.click();\n });\n }\n\n async download(url: string, filename?: string) {\n const response = await fetch(url);\n const blob = await response.blob();\n this.save(blob, filename ?? new URL(url).pathname.split('/').pop()!)\n return blob;\n }\n\n save(blob: Blob, filename: string) {\n const anchor = this.document.createElement('a');\n anchor.href = URL.createObjectURL(blob);\n anchor.download = filename;\n anchor.click();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FullscreenService {\n private readonly document: Document = inject(DOCUMENT);\n\n /**\n * 切换全屏\n * @param target\n * @param options\n */\n toggle(target: HTMLElement = this.document.documentElement, options?: FullscreenOptions): Promise<void> {\n if (this.isFullscreen(target)) {\n return this.document.exitFullscreen();\n }\n\n return target.requestFullscreen(options);\n }\n\n /**\n * 元素是否为全屏\n * @param target\n */\n isFullscreen(target: HTMLElement = this.document.documentElement): boolean {\n return target === this.document.fullscreenElement;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\n\n/**\n * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:\n * ```ts\n * {\n * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,\n * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })\n * }\n * ```\n * https://github.com/angular/angular-cli/issues/15059\n */\nexport const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY = new InjectionToken<() => Worker>(\n 'ImageCompressorWorkerFactory'\n);\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageCompressor {\n private _format?: 'webp' | 'jpeg' | 'png';\n private document = inject(DOCUMENT);\n private workerFactory = inject(SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, { optional: true });\n private canvas = this.document.createElement('canvas');\n\n /** 最佳图片格式,优先级:webp -> jpeg -> png */\n get format() {\n return this._format || (this._format = this.isSupportWEBP ? 'webp' : this.isSupportJPEG ? 'jpeg' : 'png');\n }\n\n /**\n * 是否支持WebP格式\n */\n get isSupportWEBP(): boolean {\n try {\n return this.canvas.toDataURL('image/webp').startsWith('data:image/webp');\n } catch (e) {\n return false;\n }\n }\n\n /**\n * 是否支持JPEG格式\n */\n get isSupportJPEG(): boolean {\n try {\n return this.canvas.toDataURL('image/jpeg').startsWith('data:image/jpeg');\n } catch (e) {\n return false;\n }\n }\n\n /**\n * 压缩图片\n * @param src 图片URL\n * @param quality 质量\n */\n compress(src: string, quality = 0.85): Observable<Blob> {\n const format = this.format;\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n return new Observable<Blob>((observer) => {\n img.onload = () => {\n this.resize(img);\n\n (('OffscreenCanvas' in window && this.workerFactory) ? this.drawInWorker(img, quality, format) : this.draw(img, quality, format)).subscribe(blob => {\n observer.next(blob);\n observer.complete();\n });\n };\n\n img.onerror = (error: Event | string) => {\n observer.error(error);\n observer.complete();\n };\n\n img.src = src;\n });\n }\n\n /**\n * 调整图像尺寸\n * @param img\n */\n private resize(img: HTMLImageElement) {\n const maxWidth = 1280;\n const maxHeight = 720;\n\n if (img.width > maxWidth) {\n const divisor = img.width / maxWidth;\n img.width /= divisor;\n img.height /= divisor;\n }\n\n if (img.height > maxHeight) {\n const divisor = img.height / maxHeight;\n img.width /= divisor;\n img.height /= divisor;\n }\n }\n\n /**\n * 在主线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n draw(img: HTMLImageElement, quality: number, format: string) {\n return new Observable<Blob>(observer => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n\n canvas.toBlob(blob => {\n observer.next(blob!);\n observer.complete();\n }, 'image/' + format, quality);\n });\n }\n\n /**\n * 在WebWorker线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n drawInWorker(img: HTMLImageElement, quality: number, format: string) {\n const worker = this.workerFactory!();\n\n return new Observable<Blob>(observer => {\n const complete = () => {\n worker.terminate();\n observer.complete();\n };\n\n this.createImageBitmap(img).subscribe({\n next: imageBitmap => {\n worker.onmessage = ({ data }) => {\n observer.next(data);\n complete();\n };\n\n worker.onerror = error => {\n observer.error(error);\n complete();\n };\n\n worker.postMessage({ quality, format, imageBitmap }, [imageBitmap]);\n },\n error: error => {\n observer.error(error);\n complete();\n }\n });\n });\n }\n\n /**\n * 创建图像位图\n * @param img 图像源\n */\n createImageBitmap(img: HTMLImageElement): Observable<ImageBitmap> {\n return from(window.createImageBitmap(img, {\n resizeWidth: img.width,\n resizeHeight: img.height\n }).then(bitmap => {\n // 某些情况下,图片宽度与高度会调换,因此这里要做一个判断\n if (bitmap.width !== img.width) {\n return window.createImageBitmap(img, {\n resizeWidth: img.height,\n resizeHeight: img.width\n });\n }\n\n return bitmap;\n }));\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResourceLoader {\n private readonly document = inject(DOCUMENT);\n\n loadScript(url: string) {\n return new Promise<void>((resolve, reject) => {\n const script: HTMLScriptElement = this.document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n\n script.onload = () => resolve();\n script.onerror = () => {\n this.document.head.removeChild(script);\n reject();\n };\n\n this.document.head.appendChild(script);\n });\n }\n\n loadStylesheet(url: string) {\n return new Promise<void>((resolve, reject) => {\n const link: HTMLLinkElement = this.document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n\n link.onload = () => resolve();\n link.onerror = () => {\n this.document.head.removeChild(link);\n reject();\n };\n\n this.document.head.appendChild(link);\n });\n }\n}\n","import { DatePipe, DOCUMENT } from '@angular/common';\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { MediaType } from '@solar-kit/core';\nimport { defer, firstValueFrom, map, shareReplay } from 'rxjs';\nimport { FileManager } from './file-manager';\nimport { ResourceLoader } from './resource-loader';\n// 不默认集成exceljs了,需要的时候注入XlsxService动态加载,因为不是每个地方都需要导出excel\n// import {TableParser, Workbook} from 'aieyes-exceljs-o';\ndeclare let ExcelJS: any; // from exceljs\n\nconst EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst NUMBER_PATTERN = /[0-9]/g;\nconst CHAR_PATTERN = /[a-zA-Z]/g;\n\n/**\n * @deprecated 使用 `@composize/excel` 替代\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SpreadsheetService {\n private readonly document: Document = inject(DOCUMENT);\n private readonly resourceLoader = inject(ResourceLoader);\n private readonly fileManager = inject(FileManager);\n private readonly datePipe = new DatePipe(inject(LOCALE_ID));\n\n // ExcelJS 对象,用时异步自动加载\n private readonly excel = defer(() => Promise.all([\n this.resourceLoader.loadScript('https://img.omofresh.com/js/aieyes-exceljs-o_1_8_10.min.js'), // 修改过的 https://www.npmjs.com/package/aieyes-exceljs-o\n this.resourceLoader.loadStylesheet('https://img.omofresh.com/css/exceljs.min.css'), // aieyes-exceljs-o 中定义的\n ])).pipe(\n map(() => ExcelJS),\n shareReplay(1)\n );\n\n private async parseElement(table: HTMLTableElement, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n return excel.TableParser.utils.parseDomTable(table, _opts);\n }\n\n /**\n * 只导出一个table, 内容放在第一个sheet上\n */\n async exportTable(idOrElement: string | HTMLTableElement, fileName: string, _opts?: any) {\n const table = typeof idOrElement === 'string' ? this.document.getElementById(idOrElement)! as HTMLTableElement : idOrElement;\n const excel = await firstValueFrom(this.excel);\n const wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n await this.saveAsFile(re.wb, fileName);\n }\n\n /**\n * 导出多个table, 内容放在多个sheet上\n */\n async exportTableSheets(tableIds: string[], sheetNames: string[], fileName: string, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n\n for (let index = 0; index < tableIds.length; index++) {\n const table = this.document.getElementById(tableIds[index]) as HTMLTableElement;\n const sheetName = sheetNames[index];\n const ws = wb.addWorksheet(sheetName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中导出多个table, 每个table默认间隔1列\n */\n async exportTableParallel(tableIds: string[], fileName: string, gap = 1, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n let cursor = 'A'; // 从第一列开始导出,并列几个table\n\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId) as HTMLTableElement;\n const re = await this.export(wb, ws, table, cursor, null, _opts);\n const lastCol = re.cols[re.cols.length - 1];\n cursor = nextColOfCell(lastCol);\n for (let k = 0; k < gap; k++) {\n cursor = nextColOfCell(cursor);\n }\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中垂直导出多个table\n */\n async exportTableVertical(tableIds: string[], fileName: string, gap = 0, _opts?: any) {\n let rowOffset = 0;\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId) as HTMLTableElement;\n const re = await this.export(wb, ws, table, null, rowOffset, _opts);\n rowOffset += re.rows.length + gap;\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 导出dom table\n * colCursor: 标记起始列\n * rowOffset: 偏移的行数\n * @return 返回最后一列的列名\n */\n private async export(wb: any, ws: any, table: HTMLTableElement, colCursor?: string | null, rowOffset?: number | null, _opts?: any) {\n if (!_opts) {\n _opts = { cellDates: true, dateNF: 'yyyy/M/d' }; // 默认的日期格式\n } else {\n _opts.cellDates = true;\n }\n\n const ref = await this.parseElement(table, _opts);\n let colOffset = 0; // colCursor偏移量,默认为0\n if (colCursor) {\n const c = ws.getColumn(colCursor);\n colOffset = c.number - 1;\n }\n rowOffset = rowOffset || 0; // rowOffset默认为0\n const cellMap: Record<string, any> = {};\n Object.keys(ref).sort().forEach(cellAlias => {\n if (!cellAlias.startsWith('!')) {\n let rowNum = rowOfCell(cellAlias);\n rowNum = String(parseInt(rowNum, 10) + rowOffset);\n const colNum = colNumberOfCell(cellAlias);\n const col = ws.getColumn(colOffset + colNum); // 根据偏移量找出所在的列\n const finalCell = col.letter + rowNum;\n cellMap[finalCell] = ref[cellAlias];\n }\n });\n const colSet = new Set<string>();\n Object.keys(cellMap).forEach(k => {\n colSet.add(colOfCell(k));\n });\n let cols = Array.from(colSet);\n // 因为excel的列都是连续的,如果导出table存在跨列的话这里面可能却少某一列,所以需要补充缺少的列名保证这一段是连续的\n let cursor = cols[0];\n for (let i = 0; i < ref['!cols'].length - 1; i++) {\n const next = nextColOfCell(cursor);\n colSet.add(next);\n cursor = next;\n }\n cols = Array.from(colSet).sort((a: string, b: string) => {\n if (a.length === b.length) {\n return a.localeCompare(b);\n } else if (a.length > b.length) {\n return 1;\n } else if (b.length > a.length) {\n return -1;\n }\n return -1;\n });\n // 赋值\n Object.keys(cellMap).forEach(alias => {\n const cell = ws.getCell(alias);\n const cellConfig = cellMap[alias];\n if (cellConfig.t === 'd') { // 日期格式需格式化后显示,换言之转为了字符串\n cell.value = this.datePipe.transform(cellConfig.v, cellConfig.z);\n } else {\n cell.value = cellConfig.v;\n }\n // 默认就有边框的\n if (cellConfig.style.bordered) { // 表示需要加边框\n cell.style.border = {\n top: { style: 'thin' },\n left: { style: 'thin' },\n bottom: { style: 'thin' },\n right: { style: 'thin' }\n };\n }\n // 默认内容垂直居中,左右居中不一定\n cell.style.alignment = {\n horizontal: cellConfig.style.align,\n vertical: 'middle',\n wrapText: true\n };\n // 字体默认为宋体\n cell.style.font = {\n bold: cellConfig.style.bold,\n name: '宋体',\n size: cellConfig.style.pound // 字号\n };\n // 背景色/前景色\n if (cellConfig.style.background) {\n cell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: { argb: cellConfig.style.background }, // 实际上fgColor是理解上的背景色,而不是前景色,不知道excel怎么定义的\n // bgColor: {argb: 'ffd8e6de'}\n } as any;\n }\n });\n // 设置每行的高度\n (ref['!rows'] as any[]).forEach((rowConfig, rowIndex) => {\n const row = ws.getRow(rowIndex + rowOffset + 1);\n row.height = rowConfig.height;\n });\n // 设置列宽\n (ref['!cols'] as any[]).forEach((colConfig, colIndex) => {\n const colAlias = cols[colIndex];\n const col = ws.getColumn(colAlias);\n if (colConfig.width) {\n col.width = colConfig.width;\n }\n });\n // 合并单元格, 由于不一定有,所以要判断一下\n (ref['!merges'] as any[] | null)?.forEach(mergeParam => {\n const s = mergeParam['s'];\n const e = mergeParam['e'];\n const startCell = ws.getCell(rowOffset + s.r + 1, colOffset + s.c + 1);\n const endCell = ws.getCell(rowOffset + e.r + 1, colOffset + e.c + 1);\n ws.mergeCells([startCell.address, endCell.address]);\n });\n return { wb, cols, rows: ref['!rows'] };\n }\n\n /**\n * 保存Workbook到磁盘上\n */\n private async saveAsFile(wb: any, fileName: string) {\n const excelData = await wb.xlsx.writeBuffer();\n const blob = new Blob([excelData], { type: MediaType.Xlsx });\n this.fileManager.save(blob, fileName + '.xlsx')\n }\n}\n\n/**\n * 根据当前的单元格找到下一列的地址\n * 采用倒序进位法,这样就不需要递归了\n */\nfunction nextColOfCell(cell: string) {\n // 先把字母和数字分开,字母是列,数字是行,倒序排列\n const args = cell.match(CHAR_PATTERN)!.reverse();\n let needAppend = false;\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg !== 'Z') {\n const idx = EXCEL_COL_ALIAS.indexOf(arg);\n args[i] = EXCEL_COL_ALIAS[idx + 1];\n break;\n } else {\n args[i] = 'A';\n if (i === args.length - 1) { // 说明是最后一个了,需要补A\n needAppend = true;\n }\n }\n }\n if (needAppend) {\n args.push('A');\n }\n return args.reverse().join(''); // 最终的结果,反转再合并\n}\n\n/**\n * 获取单元格的行\n */\nfunction rowOfCell(cell: string) {\n return cell.match(NUMBER_PATTERN)!.join('');\n}\n\n/**\n * 获取单元格的列\n */\nfunction colOfCell(cell: string) {\n return cell.match(CHAR_PATTERN)!.join('');\n}\n\n/**\n * 单元格的列号\n * 当作26进制计算列的编号\n */\nfunction colNumberOfCell(cell: string) {\n let col = 0;\n cell.match(CHAR_PATTERN)!.reverse().forEach((c, i) => {\n if (i == 0) {\n // 个位\n col += EXCEL_COL_ALIAS.indexOf(c) + 1;\n } else {\n // 十位以上\n col += (EXCEL_COL_ALIAS.indexOf(c) + 1) * i * 26;\n }\n });\n return col;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorage {\n private readonly storage = inject(DOCUMENT).defaultView!.localStorage;\n\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set<T = any>(key: string, value: T): void {\n this.storage.setItem(key, JSON.stringify(value));\n }\n\n /**\n * 获取数据\n * @param key 键名\n */\n get<T>(key: string): T | null {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SessionStorage {\n private readonly storage = inject(DOCUMENT).defaultView!.sessionStorage;\n\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set<T = any>(key: string, value: T): void {\n this.storage.setItem(key, JSON.stringify(value));\n }\n\n /**\n * 获取数据\n * @param key 键名\n * @param defaults 默认值\n */\n get<T = any>(key: string): T | null {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solar-angular-platform-browser.mjs","sources":["../../../packages/platform-browser/src/file-manager.ts","../../../packages/platform-browser/src/fullscreen.service.ts","../../../packages/platform-browser/src/image-compressor.ts","../../../packages/platform-browser/src/resource-loader.ts","../../../packages/platform-browser/src/spreadsheet.service.ts","../../../packages/platform-browser/src/storage/local-storage.ts","../../../packages/platform-browser/src/storage/session-storage.ts","../../../packages/platform-browser/src/solar-angular-platform-browser.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileManager {\n private readonly document = inject(DOCUMENT);\n\n /**\n * Opens a file picker dialog to allow the user to select files.\n *\n * @param options - Configuration options for the file picker.\n * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.\n * @param options.multiple - If `true`, allows multiple file selections.\n * @returns A promise that resolves with an array of selected `File` objects.\n */\n pick(options: { accept?: string | string[]; multiple?: boolean }) {\n const input = this.document.createElement('input');\n input.type = 'file';\n input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';\n input.multiple = !!options.multiple;\n\n return new Promise<File[]>((resolve, reject) => {\n input.onchange = () => {\n resolve(Array.from(input.files || []));\n };\n input.onerror = reject;\n input.click();\n });\n }\n\n async download(url: string, filename?: string) {\n const response = await fetch(url);\n const blob = await response.blob();\n this.save(blob, filename ?? new URL(url).pathname.split('/').pop()!)\n return blob;\n }\n\n save(blob: Blob, filename: string) {\n const anchor = this.document.createElement('a');\n anchor.href = URL.createObjectURL(blob);\n anchor.download = filename;\n anchor.click();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FullscreenService {\n private readonly document: Document = inject(DOCUMENT);\n\n /**\n * 切换全屏\n * @param target\n * @param options\n */\n toggle(target: HTMLElement = this.document.documentElement, options?: FullscreenOptions): Promise<void> {\n if (this.isFullscreen(target)) {\n return this.document.exitFullscreen();\n }\n\n return target.requestFullscreen(options);\n }\n\n /**\n * 元素是否为全屏\n * @param target\n */\n isFullscreen(target: HTMLElement = this.document.documentElement): boolean {\n return target === this.document.fullscreenElement;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\n\n/**\n * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:\n * ```ts\n * {\n * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,\n * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })\n * }\n * ```\n * https://github.com/angular/angular-cli/issues/15059\n */\nexport const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY = new InjectionToken<() => Worker>(\n 'ImageCompressorWorkerFactory'\n);\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageCompressor {\n private _format?: 'webp' | 'jpeg' | 'png';\n private document = inject(DOCUMENT);\n private workerFactory = inject(SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, { optional: true });\n private canvas = this.document.createElement('canvas');\n\n /** 最佳图片格式,优先级:webp -> jpeg -> png */\n get format() {\n return this._format || (this._format = this.isSupportWEBP ? 'webp' : this.isSupportJPEG ? 'jpeg' : 'png');\n }\n\n /**\n * 是否支持WebP格式\n */\n get isSupportWEBP(): boolean {\n try {\n return this.canvas.toDataURL('image/webp').startsWith('data:image/webp');\n } catch (e) {\n return false;\n }\n }\n\n /**\n * 是否支持JPEG格式\n */\n get isSupportJPEG(): boolean {\n try {\n return this.canvas.toDataURL('image/jpeg').startsWith('data:image/jpeg');\n } catch (e) {\n return false;\n }\n }\n\n /**\n * 压缩图片\n * @param src 图片URL\n * @param quality 质量\n */\n compress(src: string, quality = 0.85): Observable<Blob> {\n const format = this.format;\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n return new Observable<Blob>((observer) => {\n img.onload = () => {\n this.resize(img);\n\n (('OffscreenCanvas' in window && this.workerFactory) ? this.drawInWorker(img, quality, format) : this.draw(img, quality, format)).subscribe(blob => {\n observer.next(blob);\n observer.complete();\n });\n };\n\n img.onerror = (error: Event | string) => {\n observer.error(error);\n observer.complete();\n };\n\n img.src = src;\n });\n }\n\n /**\n * 调整图像尺寸\n * @param img\n */\n private resize(img: HTMLImageElement) {\n const maxWidth = 1280;\n const maxHeight = 720;\n\n if (img.width > maxWidth) {\n const divisor = img.width / maxWidth;\n img.width /= divisor;\n img.height /= divisor;\n }\n\n if (img.height > maxHeight) {\n const divisor = img.height / maxHeight;\n img.width /= divisor;\n img.height /= divisor;\n }\n }\n\n /**\n * 在主线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n draw(img: HTMLImageElement, quality: number, format: string) {\n return new Observable<Blob>(observer => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n\n canvas.toBlob(blob => {\n observer.next(blob!);\n observer.complete();\n }, 'image/' + format, quality);\n });\n }\n\n /**\n * 在WebWorker线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n drawInWorker(img: HTMLImageElement, quality: number, format: string) {\n const worker = this.workerFactory!();\n\n return new Observable<Blob>(observer => {\n const complete = () => {\n worker.terminate();\n observer.complete();\n };\n\n this.createImageBitmap(img).subscribe({\n next: imageBitmap => {\n worker.onmessage = ({ data }) => {\n observer.next(data);\n complete();\n };\n\n worker.onerror = error => {\n observer.error(error);\n complete();\n };\n\n worker.postMessage({ quality, format, imageBitmap }, [imageBitmap]);\n },\n error: error => {\n observer.error(error);\n complete();\n }\n });\n });\n }\n\n /**\n * 创建图像位图\n * @param img 图像源\n */\n createImageBitmap(img: HTMLImageElement): Observable<ImageBitmap> {\n return from(window.createImageBitmap(img, {\n resizeWidth: img.width,\n resizeHeight: img.height\n }).then(bitmap => {\n // 某些情况下,图片宽度与高度会调换,因此这里要做一个判断\n if (bitmap.width !== img.width) {\n return window.createImageBitmap(img, {\n resizeWidth: img.height,\n resizeHeight: img.width\n });\n }\n\n return bitmap;\n }));\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResourceLoader {\n private readonly document = inject(DOCUMENT);\n\n loadScript(url: string) {\n return new Promise<void>((resolve, reject) => {\n const script: HTMLScriptElement = this.document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n\n script.onload = () => resolve();\n script.onerror = () => {\n this.document.head.removeChild(script);\n reject();\n };\n\n this.document.head.appendChild(script);\n });\n }\n\n loadStylesheet(url: string) {\n return new Promise<void>((resolve, reject) => {\n const link: HTMLLinkElement = this.document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n\n link.onload = () => resolve();\n link.onerror = () => {\n this.document.head.removeChild(link);\n reject();\n };\n\n this.document.head.appendChild(link);\n });\n }\n}\n","import { DatePipe, DOCUMENT } from '@angular/common';\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { MediaType } from '@solar-kit/core';\nimport { defer, firstValueFrom, map, shareReplay } from 'rxjs';\nimport { FileManager } from './file-manager';\nimport { ResourceLoader } from './resource-loader';\n// 不默认集成exceljs了,需要的时候注入XlsxService动态加载,因为不是每个地方都需要导出excel\n// import {TableParser, Workbook} from 'aieyes-exceljs-o';\ndeclare let ExcelJS: any; // from exceljs\n\nconst EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst NUMBER_PATTERN = /[0-9]/g;\nconst CHAR_PATTERN = /[a-zA-Z]/g;\n\n/**\n * @deprecated 使用 `@composize/excel` 替代\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SpreadsheetService {\n private readonly document: Document = inject(DOCUMENT);\n private readonly resourceLoader = inject(ResourceLoader);\n private readonly fileManager = inject(FileManager);\n private readonly datePipe = new DatePipe(inject(LOCALE_ID));\n\n // ExcelJS 对象,用时异步自动加载\n private readonly excel = defer(() => Promise.all([\n this.resourceLoader.loadScript('https://img.omofresh.com/js/aieyes-exceljs-o_1_8_10.min.js'), // 修改过的 https://www.npmjs.com/package/aieyes-exceljs-o\n this.resourceLoader.loadStylesheet('https://img.omofresh.com/css/exceljs.min.css'), // aieyes-exceljs-o 中定义的\n ])).pipe(\n map(() => ExcelJS),\n shareReplay(1)\n );\n\n private async parseElement(table: HTMLTableElement, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n return excel.TableParser.utils.parseDomTable(table, _opts);\n }\n\n /**\n * 只导出一个table, 内容放在第一个sheet上\n */\n async exportTable(idOrElement: string | HTMLTableElement, fileName: string, _opts?: any) {\n const table = typeof idOrElement === 'string' ? this.document.getElementById(idOrElement)! as HTMLTableElement : idOrElement;\n const excel = await firstValueFrom(this.excel);\n const wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n await this.saveAsFile(re.wb, fileName);\n }\n\n /**\n * 导出多个table, 内容放在多个sheet上\n */\n async exportTableSheets(tableIds: string[], sheetNames: string[], fileName: string, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n\n for (let index = 0; index < tableIds.length; index++) {\n const table = this.document.getElementById(tableIds[index]) as HTMLTableElement;\n const sheetName = sheetNames[index];\n const ws = wb.addWorksheet(sheetName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中导出多个table, 每个table默认间隔1列\n */\n async exportTableParallel(tableIds: string[], fileName: string, gap = 1, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n let cursor = 'A'; // 从第一列开始导出,并列几个table\n\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId) as HTMLTableElement;\n const re = await this.export(wb, ws, table, cursor, null, _opts);\n const lastCol = re.cols[re.cols.length - 1];\n cursor = nextColOfCell(lastCol);\n for (let k = 0; k < gap; k++) {\n cursor = nextColOfCell(cursor);\n }\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中垂直导出多个table\n */\n async exportTableVertical(tableIds: string[], fileName: string, gap = 0, _opts?: any) {\n let rowOffset = 0;\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId) as HTMLTableElement;\n const re = await this.export(wb, ws, table, null, rowOffset, _opts);\n rowOffset += re.rows.length + gap;\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 导出dom table\n * colCursor: 标记起始列\n * rowOffset: 偏移的行数\n * @return 返回最后一列的列名\n */\n private async export(wb: any, ws: any, table: HTMLTableElement, colCursor?: string | null, rowOffset?: number | null, _opts?: any) {\n if (!_opts) {\n _opts = { cellDates: true, dateNF: 'yyyy/M/d' }; // 默认的日期格式\n } else {\n _opts.cellDates = true;\n }\n\n const ref = await this.parseElement(table, _opts);\n let colOffset = 0; // colCursor偏移量,默认为0\n if (colCursor) {\n const c = ws.getColumn(colCursor);\n colOffset = c.number - 1;\n }\n rowOffset = rowOffset || 0; // rowOffset默认为0\n const cellMap: Record<string, any> = {};\n Object.keys(ref).sort().forEach(cellAlias => {\n if (!cellAlias.startsWith('!')) {\n let rowNum = rowOfCell(cellAlias);\n rowNum = String(parseInt(rowNum, 10) + rowOffset);\n const colNum = colNumberOfCell(cellAlias);\n const col = ws.getColumn(colOffset + colNum); // 根据偏移量找出所在的列\n const finalCell = col.letter + rowNum;\n cellMap[finalCell] = ref[cellAlias];\n }\n });\n const colSet = new Set<string>();\n Object.keys(cellMap).forEach(k => {\n colSet.add(colOfCell(k));\n });\n let cols = Array.from(colSet);\n // 因为excel的列都是连续的,如果导出table存在跨列的话这里面可能却少某一列,所以需要补充缺少的列名保证这一段是连续的\n let cursor = cols[0];\n for (let i = 0; i < ref['!cols'].length - 1; i++) {\n const next = nextColOfCell(cursor);\n colSet.add(next);\n cursor = next;\n }\n cols = Array.from(colSet).sort((a: string, b: string) => {\n if (a.length === b.length) {\n return a.localeCompare(b);\n } else if (a.length > b.length) {\n return 1;\n } else if (b.length > a.length) {\n return -1;\n }\n return -1;\n });\n // 赋值\n Object.keys(cellMap).forEach(alias => {\n const cell = ws.getCell(alias);\n const cellConfig = cellMap[alias];\n if (cellConfig.t === 'd') { // 日期格式需格式化后显示,换言之转为了字符串\n cell.value = this.datePipe.transform(cellConfig.v, cellConfig.z);\n } else {\n cell.value = cellConfig.v;\n }\n // 默认就有边框的\n if (cellConfig.style.bordered) { // 表示需要加边框\n cell.style.border = {\n top: { style: 'thin' },\n left: { style: 'thin' },\n bottom: { style: 'thin' },\n right: { style: 'thin' }\n };\n }\n // 默认内容垂直居中,左右居中不一定\n cell.style.alignment = {\n horizontal: cellConfig.style.align,\n vertical: 'middle',\n wrapText: true\n };\n // 字体默认为宋体\n cell.style.font = {\n bold: cellConfig.style.bold,\n name: '宋体',\n size: cellConfig.style.pound // 字号\n };\n // 背景色/前景色\n if (cellConfig.style.background) {\n cell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: { argb: cellConfig.style.background }, // 实际上fgColor是理解上的背景色,而不是前景色,不知道excel怎么定义的\n // bgColor: {argb: 'ffd8e6de'}\n } as any;\n }\n });\n // 设置每行的高度\n (ref['!rows'] as any[]).forEach((rowConfig, rowIndex) => {\n const row = ws.getRow(rowIndex + rowOffset + 1);\n row.height = rowConfig.height;\n });\n // 设置列宽\n (ref['!cols'] as any[]).forEach((colConfig, colIndex) => {\n const colAlias = cols[colIndex];\n const col = ws.getColumn(colAlias);\n if (colConfig.width) {\n col.width = colConfig.width;\n }\n });\n // 合并单元格, 由于不一定有,所以要判断一下\n (ref['!merges'] as any[] | null)?.forEach(mergeParam => {\n const s = mergeParam['s'];\n const e = mergeParam['e'];\n const startCell = ws.getCell(rowOffset + s.r + 1, colOffset + s.c + 1);\n const endCell = ws.getCell(rowOffset + e.r + 1, colOffset + e.c + 1);\n ws.mergeCells([startCell.address, endCell.address]);\n });\n return { wb, cols, rows: ref['!rows'] };\n }\n\n /**\n * 保存Workbook到磁盘上\n */\n private async saveAsFile(wb: any, fileName: string) {\n const excelData = await wb.xlsx.writeBuffer();\n const blob = new Blob([excelData], { type: MediaType.Xlsx });\n this.fileManager.save(blob, fileName + '.xlsx')\n }\n}\n\n/**\n * 根据当前的单元格找到下一列的地址\n * 采用倒序进位法,这样就不需要递归了\n */\nfunction nextColOfCell(cell: string) {\n // 先把字母和数字分开,字母是列,数字是行,倒序排列\n const args = cell.match(CHAR_PATTERN)!.reverse();\n let needAppend = false;\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg !== 'Z') {\n const idx = EXCEL_COL_ALIAS.indexOf(arg);\n args[i] = EXCEL_COL_ALIAS[idx + 1];\n break;\n } else {\n args[i] = 'A';\n if (i === args.length - 1) { // 说明是最后一个了,需要补A\n needAppend = true;\n }\n }\n }\n if (needAppend) {\n args.push('A');\n }\n return args.reverse().join(''); // 最终的结果,反转再合并\n}\n\n/**\n * 获取单元格的行\n */\nfunction rowOfCell(cell: string) {\n return cell.match(NUMBER_PATTERN)!.join('');\n}\n\n/**\n * 获取单元格的列\n */\nfunction colOfCell(cell: string) {\n return cell.match(CHAR_PATTERN)!.join('');\n}\n\n/**\n * 单元格的列号\n * 当作26进制计算列的编号\n */\nfunction colNumberOfCell(cell: string) {\n let col = 0;\n cell.match(CHAR_PATTERN)!.reverse().forEach((c, i) => {\n if (i == 0) {\n // 个位\n col += EXCEL_COL_ALIAS.indexOf(c) + 1;\n } else {\n // 十位以上\n col += (EXCEL_COL_ALIAS.indexOf(c) + 1) * i * 26;\n }\n });\n return col;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorage {\n private readonly storage = inject(DOCUMENT).defaultView!.localStorage;\n\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set<T = any>(key: string, value: T): void {\n this.storage.setItem(key, JSON.stringify(value));\n }\n\n /**\n * 获取数据\n * @param key 键名\n */\n get<T>(key: string): T | null {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SessionStorage {\n private readonly storage = inject(DOCUMENT).defaultView!.sessionStorage;\n\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set<T = any>(key: string, value: T): void {\n this.storage.setItem(key, JSON.stringify(value));\n }\n\n /**\n * 获取数据\n * @param key 键名\n * @param defaults 默认值\n */\n get<T = any>(key: string): T | null {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@solar-angular/platform-browser",
3
- "version": "18.3.1",
3
+ "version": "19.0.1",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "peerDependencies": {
9
- "@angular/common": "^18.0.0",
10
- "@angular/core": "^18.0.0"
9
+ "@angular/common": "^19.0.0",
10
+ "@angular/core": "^19.0.0"
11
11
  },
12
12
  "module": "fesm2022/solar-angular-platform-browser.mjs",
13
13
  "typings": "index.d.ts",
@@ -17,8 +17,6 @@
17
17
  },
18
18
  ".": {
19
19
  "types": "./index.d.ts",
20
- "esm2022": "./esm2022/solar-angular-platform-browser.mjs",
21
- "esm": "./esm2022/solar-angular-platform-browser.mjs",
22
20
  "default": "./fesm2022/solar-angular-platform-browser.mjs"
23
21
  }
24
22
  },
@@ -1,50 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { inject, Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class FileManager {
5
- constructor() {
6
- this.document = inject(DOCUMENT);
7
- }
8
- /**
9
- * Opens a file picker dialog to allow the user to select files.
10
- *
11
- * @param options - Configuration options for the file picker.
12
- * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.
13
- * @param options.multiple - If `true`, allows multiple file selections.
14
- * @returns A promise that resolves with an array of selected `File` objects.
15
- */
16
- pick(options) {
17
- const input = this.document.createElement('input');
18
- input.type = 'file';
19
- input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';
20
- input.multiple = !!options.multiple;
21
- return new Promise((resolve, reject) => {
22
- input.onchange = () => {
23
- resolve(Array.from(input.files || []));
24
- };
25
- input.onerror = reject;
26
- input.click();
27
- });
28
- }
29
- async download(url, filename) {
30
- const response = await fetch(url);
31
- const blob = await response.blob();
32
- this.save(blob, filename ?? new URL(url).pathname.split('/').pop());
33
- return blob;
34
- }
35
- save(blob, filename) {
36
- const anchor = this.document.createElement('a');
37
- anchor.href = URL.createObjectURL(blob);
38
- anchor.download = filename;
39
- anchor.click();
40
- }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
42
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, providedIn: 'root' }); }
43
- }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, decorators: [{
45
- type: Injectable,
46
- args: [{
47
- providedIn: 'root'
48
- }]
49
- }] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQXNDOUM7SUFwQ0M7Ozs7Ozs7T0FPRztJQUNILElBQUksQ0FBQyxPQUEyRDtRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNwQixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDL0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVwQyxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzdDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDO1lBQ0YsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLFFBQWlCO1FBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRyxDQUFDLENBQUE7UUFDcEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVUsRUFBRSxRQUFnQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDM0IsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7K0dBdENVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZmlsZSBwaWNrZXIgZGlhbG9nIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBmaWxlIHBpY2tlci5cbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXB0IC0gQSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIHRoZSBmaWxlIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBmaWxlIHBpY2tlci5cbiAgICogQHBhcmFtIG9wdGlvbnMubXVsdGlwbGUgLSBJZiBgdHJ1ZWAsIGFsbG93cyBtdWx0aXBsZSBmaWxlIHNlbGVjdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgYEZpbGVgIG9iamVjdHMuXG4gICAqL1xuICBwaWNrKG9wdGlvbnM6IHsgYWNjZXB0Pzogc3RyaW5nIHwgc3RyaW5nW107IG11bHRpcGxlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBpbnB1dC5hY2NlcHQgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuYWNjZXB0KSA/IG9wdGlvbnMuYWNjZXB0LmpvaW4oJywnKSA6IG9wdGlvbnMuYWNjZXB0IHx8ICcnO1xuICAgIGlucHV0Lm11bHRpcGxlID0gISFvcHRpb25zLm11bHRpcGxlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbGVbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5wdXQub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoQXJyYXkuZnJvbShpbnB1dC5maWxlcyB8fCBbXSkpO1xuICAgICAgfTtcbiAgICAgIGlucHV0Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQodXJsOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgdGhpcy5zYXZlKGJsb2IsIGZpbGVuYW1lID8/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpISlcbiAgICByZXR1cm4gYmxvYjtcbiAgfVxuXG4gIHNhdmUoYmxvYjogQmxvYiwgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGFuY2hvci5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBhbmNob3IuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBhbmNob3IuY2xpY2soKTtcbiAgfVxufVxuIl19
@@ -1,35 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { inject, Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class FullscreenService {
5
- constructor() {
6
- this.document = inject(DOCUMENT);
7
- }
8
- /**
9
- * 切换全屏
10
- * @param target
11
- * @param options
12
- */
13
- toggle(target = this.document.documentElement, options) {
14
- if (this.isFullscreen(target)) {
15
- return this.document.exitFullscreen();
16
- }
17
- return target.requestFullscreen(options);
18
- }
19
- /**
20
- * 元素是否为全屏
21
- * @param target
22
- */
23
- isFullscreen(target = this.document.documentElement) {
24
- return target === this.document.fullscreenElement;
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, decorators: [{
30
- type: Injectable,
31
- args: [{
32
- providedIn: 'root'
33
- }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHNjcmVlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZnVsbHNjcmVlbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUltQixhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBc0J4RDtJQXBCQzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQXNCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQTJCO1FBQ3JGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxTQUFzQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWU7UUFDOUQsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUNwRCxDQUFDOytHQXRCVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZ1bGxzY3JlZW5TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIC8qKlxuICAgKiDliIfmjaLlhajlsY9cbiAgICogQHBhcmFtIHRhcmdldFxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgdG9nZ2xlKHRhcmdldDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb3B0aW9ucz86IEZ1bGxzY3JlZW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldC5yZXF1ZXN0RnVsbHNjcmVlbihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlhYPntKDmmK/lkKbkuLrlhajlsY9cbiAgICogQHBhcmFtIHRhcmdldFxuICAgKi9cbiAgaXNGdWxsc2NyZWVuKHRhcmdldDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0YXJnZXQgPT09IHRoaXMuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,169 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { Injectable, InjectionToken, inject } from '@angular/core';
3
- import { Observable, from } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:
7
- * ```ts
8
- * {
9
- * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,
10
- * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })
11
- * }
12
- * ```
13
- * https://github.com/angular/angular-cli/issues/15059
14
- */
15
- export const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY = new InjectionToken('ImageCompressorWorkerFactory');
16
- export class ImageCompressor {
17
- constructor() {
18
- this.document = inject(DOCUMENT);
19
- this.workerFactory = inject(SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, { optional: true });
20
- this.canvas = this.document.createElement('canvas');
21
- }
22
- /** 最佳图片格式,优先级:webp -> jpeg -> png */
23
- get format() {
24
- return this._format || (this._format = this.isSupportWEBP ? 'webp' : this.isSupportJPEG ? 'jpeg' : 'png');
25
- }
26
- /**
27
- * 是否支持WebP格式
28
- */
29
- get isSupportWEBP() {
30
- try {
31
- return this.canvas.toDataURL('image/webp').startsWith('data:image/webp');
32
- }
33
- catch (e) {
34
- return false;
35
- }
36
- }
37
- /**
38
- * 是否支持JPEG格式
39
- */
40
- get isSupportJPEG() {
41
- try {
42
- return this.canvas.toDataURL('image/jpeg').startsWith('data:image/jpeg');
43
- }
44
- catch (e) {
45
- return false;
46
- }
47
- }
48
- /**
49
- * 压缩图片
50
- * @param src 图片URL
51
- * @param quality 质量
52
- */
53
- compress(src, quality = 0.85) {
54
- const format = this.format;
55
- const img = new Image();
56
- img.crossOrigin = 'anonymous';
57
- return new Observable((observer) => {
58
- img.onload = () => {
59
- this.resize(img);
60
- (('OffscreenCanvas' in window && this.workerFactory) ? this.drawInWorker(img, quality, format) : this.draw(img, quality, format)).subscribe(blob => {
61
- observer.next(blob);
62
- observer.complete();
63
- });
64
- };
65
- img.onerror = (error) => {
66
- observer.error(error);
67
- observer.complete();
68
- };
69
- img.src = src;
70
- });
71
- }
72
- /**
73
- * 调整图像尺寸
74
- * @param img
75
- */
76
- resize(img) {
77
- const maxWidth = 1280;
78
- const maxHeight = 720;
79
- if (img.width > maxWidth) {
80
- const divisor = img.width / maxWidth;
81
- img.width /= divisor;
82
- img.height /= divisor;
83
- }
84
- if (img.height > maxHeight) {
85
- const divisor = img.height / maxHeight;
86
- img.width /= divisor;
87
- img.height /= divisor;
88
- }
89
- }
90
- /**
91
- * 在主线程中绘制
92
- * @param img 图像
93
- * @param quality 质量
94
- * @param format 格式
95
- */
96
- draw(img, quality, format) {
97
- return new Observable(observer => {
98
- const canvas = document.createElement('canvas');
99
- canvas.width = img.width;
100
- canvas.height = img.height;
101
- const ctx = canvas.getContext('2d');
102
- ctx.drawImage(img, 0, 0, img.width, img.height);
103
- canvas.toBlob(blob => {
104
- observer.next(blob);
105
- observer.complete();
106
- }, 'image/' + format, quality);
107
- });
108
- }
109
- /**
110
- * 在WebWorker线程中绘制
111
- * @param img 图像
112
- * @param quality 质量
113
- * @param format 格式
114
- */
115
- drawInWorker(img, quality, format) {
116
- const worker = this.workerFactory();
117
- return new Observable(observer => {
118
- const complete = () => {
119
- worker.terminate();
120
- observer.complete();
121
- };
122
- this.createImageBitmap(img).subscribe({
123
- next: imageBitmap => {
124
- worker.onmessage = ({ data }) => {
125
- observer.next(data);
126
- complete();
127
- };
128
- worker.onerror = error => {
129
- observer.error(error);
130
- complete();
131
- };
132
- worker.postMessage({ quality, format, imageBitmap }, [imageBitmap]);
133
- },
134
- error: error => {
135
- observer.error(error);
136
- complete();
137
- }
138
- });
139
- });
140
- }
141
- /**
142
- * 创建图像位图
143
- * @param img 图像源
144
- */
145
- createImageBitmap(img) {
146
- return from(window.createImageBitmap(img, {
147
- resizeWidth: img.width,
148
- resizeHeight: img.height
149
- }).then(bitmap => {
150
- // 某些情况下,图片宽度与高度会调换,因此这里要做一个判断
151
- if (bitmap.width !== img.width) {
152
- return window.createImageBitmap(img, {
153
- resizeWidth: img.height,
154
- resizeHeight: img.width
155
- });
156
- }
157
- return bitmap;
158
- }));
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
161
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }
162
- }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, decorators: [{
164
- type: Injectable,
165
- args: [{
166
- providedIn: 'root'
167
- }]
168
- }] });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY29tcHJlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL2ltYWdlLWNvbXByZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxjQUFjLENBQ25FLDhCQUE4QixDQUMvQixDQUFDO0FBS0YsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFLVSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEYsV0FBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBK0p4RDtJQTdKQyxxQ0FBcUM7SUFDckMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2YsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENB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ZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDnm67liY0gTkcg5bqTIOS4rei/mOS4jeiDveWMheWQqyBXZWJXb3JrZXLvvIzov5nph4zkvb/nlKggREkg55qE5pa55byP77yM55SxIEFwcCDmj5DkvpsgV2ViV29ya2Vy77yaXG4gKiBgYGB0c1xuICoge1xuICogICAgcHJvdmlkZTogSU1BR0VfQ09NUFJFU1NPUl9XRUJXT1JLRVJfRkFDVE9SWSxcbiAqICAgIHVzZVZhbHVlOiAoKSA9PiBuZXcgV29ya2VyKG5ldyBVUkwoJ3h4eC53b3JrZXInLCBpbXBvcnQubWV0YS51cmwpLCB7IHR5cGU6ICdtb2R1bGUnIH0pXG4gKiB9XG4gKiBgYGBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXItY2xpL2lzc3Vlcy8xNTA1OVxuICovXG5leHBvcnQgY29uc3QgU1VOX0lNQUdFX0NPTVBSRVNTT1JfV09SS0VSX0ZBQ1RPUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gV29ya2VyPihcbiAgJ0ltYWdlQ29tcHJlc3NvcldvcmtlckZhY3RvcnknXG4pO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJbWFnZUNvbXByZXNzb3Ige1xuICBwcml2YXRlIF9mb3JtYXQ/OiAnd2VicCcgfCAnanBlZycgfCAncG5nJztcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgd29ya2VyRmFjdG9yeSA9IGluamVjdChTVU5fSU1BR0VfQ09NUFJFU1NPUl9XT1JLRVJfRkFDVE9SWSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBjYW52YXMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gIC8qKiDmnIDkvbPlm77niYfmoLzlvI/vvIzkvJjlhYjnuqfvvJp3ZWJwIC0+IGpwZWcgLT4gcG5nICovXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdCB8fCAodGhpcy5fZm9ybWF0ID0gdGhpcy5pc1N1cHBvcnRXRUJQID8gJ3dlYnAnIDogdGhpcy5pc1N1cHBvcnRKUEVHID8gJ2pwZWcnIDogJ3BuZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgVdlYlDmoLzlvI9cbiAgICovXG4gIGdldCBpc1N1cHBvcnRXRUJQKCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKCdpbWFnZS93ZWJwJykuc3RhcnRzV2l0aCgnZGF0YTppbWFnZS93ZWJwJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIFKUEVH5qC85byPXG4gICAqL1xuICBnZXQgaXNTdXBwb3J0SlBFRygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpLnN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2UvanBlZycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y6L57yp5Zu+54mHXG4gICAqIEBwYXJhbSBzcmMg5Zu+54mHVVJMXG4gICAqIEBwYXJhbSBxdWFsaXR5IOi0qOmHj1xuICAgKi9cbiAgY29tcHJlc3Moc3JjOiBzdHJpbmcsIHF1YWxpdHkgPSAwLjg1KTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QmxvYj4oKG9ic2VydmVyKSA9PiB7XG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZShpbWcpO1xuXG4gICAgICAgICgoJ09mZnNjcmVlbkNhbnZhcycgaW4gd2luZG93ICYmIHRoaXMud29ya2VyRmFjdG9yeSkgPyB0aGlzLmRyYXdJbldvcmtlcihpbWcsIHF1YWxpdHksIGZvcm1hdCkgOiB0aGlzLmRyYXcoaW1nLCBxdWFsaXR5LCBmb3JtYXQpKS5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChibG9iKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGltZy5vbmVycm9yID0gKGVycm9yOiBFdmVudCB8IHN0cmluZykgPT4ge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuXG4gICAgICBpbWcuc3JjID0gc3JjO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOiwg+aVtOWbvuWDj+WwuuWvuFxuICAgKiBAcGFyYW0gaW1nXG4gICAqL1xuICBwcml2YXRlIHJlc2l6ZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcbiAgICBjb25zdCBtYXhXaWR0aCA9IDEyODA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gNzIwO1xuXG4gICAgaWYgKGltZy53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBjb25zdCBkaXZpc29yID0gaW1nLndpZHRoIC8gbWF4V2lkdGg7XG4gICAgICBpbWcud2lkdGggLz0gZGl2aXNvcjtcbiAgICAgIGltZy5oZWlnaHQgLz0gZGl2aXNvcjtcbiAgICB9XG5cbiAgICBpZiAoaW1nLmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgY29uc3QgZGl2aXNvciA9IGltZy5oZWlnaHQgLyBtYXhIZWlnaHQ7XG4gICAgICBpbWcud2lkdGggLz0gZGl2aXNvcjtcbiAgICAgIGltZy5oZWlnaHQgLz0gZGl2aXNvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Zyo5Li757q/56iL5Lit57uY5Yi2XG4gICAqIEBwYXJhbSBpbWcg5Zu+5YOPXG4gICAqIEBwYXJhbSBxdWFsaXR5IOi0qOmHj1xuICAgKiBAcGFyYW0gZm9ybWF0IOagvOW8j1xuICAgKi9cbiAgZHJhdyhpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHF1YWxpdHk6IG51bWJlciwgZm9ybWF0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QmxvYj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcblxuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XG5cbiAgICAgIGNhbnZhcy50b0Jsb2IoYmxvYiA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoYmxvYiEpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSwgJ2ltYWdlLycgKyBmb3JtYXQsIHF1YWxpdHkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOWcqFdlYldvcmtlcue6v+eoi+S4ree7mOWItlxuICAgKiBAcGFyYW0gaW1nIOWbvuWDj1xuICAgKiBAcGFyYW0gcXVhbGl0eSDotKjph49cbiAgICogQHBhcmFtIGZvcm1hdCDmoLzlvI9cbiAgICovXG4gIGRyYXdJbldvcmtlcihpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHF1YWxpdHk6IG51bWJlciwgZm9ybWF0OiBzdHJpbmcpIHtcbiAgICBjb25zdCB3b3JrZXIgPSB0aGlzLndvcmtlckZhY3RvcnkhKCk7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QmxvYj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY3JlYXRlSW1hZ2VCaXRtYXAoaW1nKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBpbWFnZUJpdG1hcCA9PiB7XG4gICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHdvcmtlci5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsgcXVhbGl0eSwgZm9ybWF0LCBpbWFnZUJpdG1hcCB9LCBbaW1hZ2VCaXRtYXBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5Yib5bu65Zu+5YOP5L2N5Zu+XG4gICAqIEBwYXJhbSBpbWcg5Zu+5YOP5rqQXG4gICAqL1xuICBjcmVhdGVJbWFnZUJpdG1hcChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiBPYnNlcnZhYmxlPEltYWdlQml0bWFwPiB7XG4gICAgcmV0dXJuIGZyb20od2luZG93LmNyZWF0ZUltYWdlQml0bWFwKGltZywge1xuICAgICAgcmVzaXplV2lkdGg6IGltZy53aWR0aCxcbiAgICAgIHJlc2l6ZUhlaWdodDogaW1nLmhlaWdodFxuICAgIH0pLnRoZW4oYml0bWFwID0+IHtcbiAgICAgIC8vIOafkOS6m+aDheWGteS4i++8jOWbvueJh+WuveW6puS4jumrmOW6puS8muiwg+aNou+8jOWboOatpOi/memHjOimgeWBmuS4gOS4quWIpOaWrVxuICAgICAgaWYgKGJpdG1hcC53aWR0aCAhPT0gaW1nLndpZHRoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY3JlYXRlSW1hZ2VCaXRtYXAoaW1nLCB7XG4gICAgICAgICAgcmVzaXplV2lkdGg6IGltZy5oZWlnaHQsXG4gICAgICAgICAgcmVzaXplSGVpZ2h0OiBpbWcud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiaXRtYXA7XG4gICAgfSkpO1xuICB9XG5cbn1cbiJdfQ==
package/esm2022/index.mjs DELETED
@@ -1,7 +0,0 @@
1
- export * from './file-manager';
2
- export * from './fullscreen.service';
3
- export * from './image-compressor';
4
- export * from './resource-loader';
5
- export * from './spreadsheet.service';
6
- export * from './storage';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1icm93c2VyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZpbGUtbWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuL2Z1bGxzY3JlZW4uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlLWNvbXByZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvdXJjZS1sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcHJlYWRzaGVldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZSc7XG4iXX0=
@@ -1,44 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { inject, Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class ResourceLoader {
5
- constructor() {
6
- this.document = inject(DOCUMENT);
7
- }
8
- loadScript(url) {
9
- return new Promise((resolve, reject) => {
10
- const script = this.document.createElement('script');
11
- script.type = 'text/javascript';
12
- script.src = url;
13
- script.onload = () => resolve();
14
- script.onerror = () => {
15
- this.document.head.removeChild(script);
16
- reject();
17
- };
18
- this.document.head.appendChild(script);
19
- });
20
- }
21
- loadStylesheet(url) {
22
- return new Promise((resolve, reject) => {
23
- const link = this.document.createElement('link');
24
- link.rel = 'stylesheet';
25
- link.type = 'text/css';
26
- link.href = url;
27
- link.onload = () => resolve();
28
- link.onerror = () => {
29
- this.document.head.removeChild(link);
30
- reject();
31
- };
32
- this.document.head.appendChild(link);
33
- });
34
- }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, decorators: [{
39
- type: Injectable,
40
- args: [{
41
- providedIn: 'root'
42
- }]
43
- }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvcmVzb3VyY2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQWtDOUM7SUFoQ0MsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLE1BQU0sR0FBc0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUVqQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBRWhCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQWxDVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUxvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIGxvYWRTY3JpcHQodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgc2NyaXB0LnNyYyA9IHVybDtcblxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRTdHlsZXNoZWV0KHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGxpbms6IEhUTUxMaW5rRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgbGluay5ocmVmID0gdXJsO1xuXG4gICAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIGxpbmsub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICByZWplY3QoKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci1wbGF0Zm9ybS1icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvc29sYXItYW5ndWxhci1wbGF0Zm9ybS1icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -1,284 +0,0 @@
1
- import { DatePipe, DOCUMENT } from '@angular/common';
2
- import { inject, Injectable, LOCALE_ID } from '@angular/core';
3
- import { defer, firstValueFrom, map, shareReplay } from 'rxjs';
4
- import { FileManager } from './file-manager';
5
- import { ResourceLoader } from './resource-loader';
6
- import * as i0 from "@angular/core";
7
- const EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
8
- const NUMBER_PATTERN = /[0-9]/g;
9
- const CHAR_PATTERN = /[a-zA-Z]/g;
10
- /**
11
- * @deprecated 使用 `@composize/excel` 替代
12
- */
13
- export class SpreadsheetService {
14
- constructor() {
15
- this.document = inject(DOCUMENT);
16
- this.resourceLoader = inject(ResourceLoader);
17
- this.fileManager = inject(FileManager);
18
- this.datePipe = new DatePipe(inject(LOCALE_ID));
19
- // ExcelJS 对象,用时异步自动加载
20
- this.excel = defer(() => Promise.all([
21
- this.resourceLoader.loadScript('https://img.omofresh.com/js/aieyes-exceljs-o_1_8_10.min.js'), // 修改过的 https://www.npmjs.com/package/aieyes-exceljs-o
22
- this.resourceLoader.loadStylesheet('https://img.omofresh.com/css/exceljs.min.css'), // aieyes-exceljs-o 中定义的
23
- ])).pipe(map(() => ExcelJS), shareReplay(1));
24
- }
25
- async parseElement(table, _opts) {
26
- const excel = await firstValueFrom(this.excel);
27
- return excel.TableParser.utils.parseDomTable(table, _opts);
28
- }
29
- /**
30
- * 只导出一个table, 内容放在第一个sheet上
31
- */
32
- async exportTable(idOrElement, fileName, _opts) {
33
- const table = typeof idOrElement === 'string' ? this.document.getElementById(idOrElement) : idOrElement;
34
- const excel = await firstValueFrom(this.excel);
35
- const wb = new excel.Workbook();
36
- const ws = wb.addWorksheet(fileName);
37
- const re = await this.export(wb, ws, table, null, null, _opts);
38
- await this.saveAsFile(re.wb, fileName);
39
- }
40
- /**
41
- * 导出多个table, 内容放在多个sheet上
42
- */
43
- async exportTableSheets(tableIds, sheetNames, fileName, _opts) {
44
- const excel = await firstValueFrom(this.excel);
45
- let wb = new excel.Workbook();
46
- for (let index = 0; index < tableIds.length; index++) {
47
- const table = this.document.getElementById(tableIds[index]);
48
- const sheetName = sheetNames[index];
49
- const ws = wb.addWorksheet(sheetName);
50
- const re = await this.export(wb, ws, table, null, null, _opts);
51
- wb = re.wb;
52
- }
53
- await this.saveAsFile(wb, fileName);
54
- }
55
- /**
56
- * 在一页中导出多个table, 每个table默认间隔1列
57
- */
58
- async exportTableParallel(tableIds, fileName, gap = 1, _opts) {
59
- const excel = await firstValueFrom(this.excel);
60
- let wb = new excel.Workbook();
61
- const ws = wb.addWorksheet(fileName);
62
- let cursor = 'A'; // 从第一列开始导出,并列几个table
63
- for (const tableId of tableIds) {
64
- const table = this.document.getElementById(tableId);
65
- const re = await this.export(wb, ws, table, cursor, null, _opts);
66
- const lastCol = re.cols[re.cols.length - 1];
67
- cursor = nextColOfCell(lastCol);
68
- for (let k = 0; k < gap; k++) {
69
- cursor = nextColOfCell(cursor);
70
- }
71
- wb = re.wb;
72
- }
73
- await this.saveAsFile(wb, fileName);
74
- }
75
- /**
76
- * 在一页中垂直导出多个table
77
- */
78
- async exportTableVertical(tableIds, fileName, gap = 0, _opts) {
79
- let rowOffset = 0;
80
- const excel = await firstValueFrom(this.excel);
81
- let wb = new excel.Workbook();
82
- const ws = wb.addWorksheet(fileName);
83
- for (const tableId of tableIds) {
84
- const table = this.document.getElementById(tableId);
85
- const re = await this.export(wb, ws, table, null, rowOffset, _opts);
86
- rowOffset += re.rows.length + gap;
87
- wb = re.wb;
88
- }
89
- await this.saveAsFile(wb, fileName);
90
- }
91
- /**
92
- * 导出dom table
93
- * colCursor: 标记起始列
94
- * rowOffset: 偏移的行数
95
- * @return 返回最后一列的列名
96
- */
97
- async export(wb, ws, table, colCursor, rowOffset, _opts) {
98
- if (!_opts) {
99
- _opts = { cellDates: true, dateNF: 'yyyy/M/d' }; // 默认的日期格式
100
- }
101
- else {
102
- _opts.cellDates = true;
103
- }
104
- const ref = await this.parseElement(table, _opts);
105
- let colOffset = 0; // colCursor偏移量,默认为0
106
- if (colCursor) {
107
- const c = ws.getColumn(colCursor);
108
- colOffset = c.number - 1;
109
- }
110
- rowOffset = rowOffset || 0; // rowOffset默认为0
111
- const cellMap = {};
112
- Object.keys(ref).sort().forEach(cellAlias => {
113
- if (!cellAlias.startsWith('!')) {
114
- let rowNum = rowOfCell(cellAlias);
115
- rowNum = String(parseInt(rowNum, 10) + rowOffset);
116
- const colNum = colNumberOfCell(cellAlias);
117
- const col = ws.getColumn(colOffset + colNum); // 根据偏移量找出所在的列
118
- const finalCell = col.letter + rowNum;
119
- cellMap[finalCell] = ref[cellAlias];
120
- }
121
- });
122
- const colSet = new Set();
123
- Object.keys(cellMap).forEach(k => {
124
- colSet.add(colOfCell(k));
125
- });
126
- let cols = Array.from(colSet);
127
- // 因为excel的列都是连续的,如果导出table存在跨列的话这里面可能却少某一列,所以需要补充缺少的列名保证这一段是连续的
128
- let cursor = cols[0];
129
- for (let i = 0; i < ref['!cols'].length - 1; i++) {
130
- const next = nextColOfCell(cursor);
131
- colSet.add(next);
132
- cursor = next;
133
- }
134
- cols = Array.from(colSet).sort((a, b) => {
135
- if (a.length === b.length) {
136
- return a.localeCompare(b);
137
- }
138
- else if (a.length > b.length) {
139
- return 1;
140
- }
141
- else if (b.length > a.length) {
142
- return -1;
143
- }
144
- return -1;
145
- });
146
- // 赋值
147
- Object.keys(cellMap).forEach(alias => {
148
- const cell = ws.getCell(alias);
149
- const cellConfig = cellMap[alias];
150
- if (cellConfig.t === 'd') { // 日期格式需格式化后显示,换言之转为了字符串
151
- cell.value = this.datePipe.transform(cellConfig.v, cellConfig.z);
152
- }
153
- else {
154
- cell.value = cellConfig.v;
155
- }
156
- // 默认就有边框的
157
- if (cellConfig.style.bordered) { // 表示需要加边框
158
- cell.style.border = {
159
- top: { style: 'thin' },
160
- left: { style: 'thin' },
161
- bottom: { style: 'thin' },
162
- right: { style: 'thin' }
163
- };
164
- }
165
- // 默认内容垂直居中,左右居中不一定
166
- cell.style.alignment = {
167
- horizontal: cellConfig.style.align,
168
- vertical: 'middle',
169
- wrapText: true
170
- };
171
- // 字体默认为宋体
172
- cell.style.font = {
173
- bold: cellConfig.style.bold,
174
- name: '宋体',
175
- size: cellConfig.style.pound // 字号
176
- };
177
- // 背景色/前景色
178
- if (cellConfig.style.background) {
179
- cell.fill = {
180
- type: 'pattern',
181
- pattern: 'solid',
182
- fgColor: { argb: cellConfig.style.background }, // 实际上fgColor是理解上的背景色,而不是前景色,不知道excel怎么定义的
183
- // bgColor: {argb: 'ffd8e6de'}
184
- };
185
- }
186
- });
187
- // 设置每行的高度
188
- ref['!rows'].forEach((rowConfig, rowIndex) => {
189
- const row = ws.getRow(rowIndex + rowOffset + 1);
190
- row.height = rowConfig.height;
191
- });
192
- // 设置列宽
193
- ref['!cols'].forEach((colConfig, colIndex) => {
194
- const colAlias = cols[colIndex];
195
- const col = ws.getColumn(colAlias);
196
- if (colConfig.width) {
197
- col.width = colConfig.width;
198
- }
199
- });
200
- // 合并单元格, 由于不一定有,所以要判断一下
201
- ref['!merges']?.forEach(mergeParam => {
202
- const s = mergeParam['s'];
203
- const e = mergeParam['e'];
204
- const startCell = ws.getCell(rowOffset + s.r + 1, colOffset + s.c + 1);
205
- const endCell = ws.getCell(rowOffset + e.r + 1, colOffset + e.c + 1);
206
- ws.mergeCells([startCell.address, endCell.address]);
207
- });
208
- return { wb, cols, rows: ref['!rows'] };
209
- }
210
- /**
211
- * 保存Workbook到磁盘上
212
- */
213
- async saveAsFile(wb, fileName) {
214
- const excelData = await wb.xlsx.writeBuffer();
215
- const blob = new Blob([excelData], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /* MediaType.Xlsx */ });
216
- this.fileManager.save(blob, fileName + '.xlsx');
217
- }
218
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpreadsheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
219
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpreadsheetService, providedIn: 'root' }); }
220
- }
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpreadsheetService, decorators: [{
222
- type: Injectable,
223
- args: [{
224
- providedIn: 'root'
225
- }]
226
- }] });
227
- /**
228
- * 根据当前的单元格找到下一列的地址
229
- * 采用倒序进位法,这样就不需要递归了
230
- */
231
- function nextColOfCell(cell) {
232
- // 先把字母和数字分开,字母是列,数字是行,倒序排列
233
- const args = cell.match(CHAR_PATTERN).reverse();
234
- let needAppend = false;
235
- for (let i = 0; i < args.length; i++) {
236
- const arg = args[i];
237
- if (arg !== 'Z') {
238
- const idx = EXCEL_COL_ALIAS.indexOf(arg);
239
- args[i] = EXCEL_COL_ALIAS[idx + 1];
240
- break;
241
- }
242
- else {
243
- args[i] = 'A';
244
- if (i === args.length - 1) { // 说明是最后一个了,需要补A
245
- needAppend = true;
246
- }
247
- }
248
- }
249
- if (needAppend) {
250
- args.push('A');
251
- }
252
- return args.reverse().join(''); // 最终的结果,反转再合并
253
- }
254
- /**
255
- * 获取单元格的行
256
- */
257
- function rowOfCell(cell) {
258
- return cell.match(NUMBER_PATTERN).join('');
259
- }
260
- /**
261
- * 获取单元格的列
262
- */
263
- function colOfCell(cell) {
264
- return cell.match(CHAR_PATTERN).join('');
265
- }
266
- /**
267
- * 单元格的列号
268
- * 当作26进制计算列的编号
269
- */
270
- function colNumberOfCell(cell) {
271
- let col = 0;
272
- cell.match(CHAR_PATTERN).reverse().forEach((c, i) => {
273
- if (i == 0) {
274
- // 个位
275
- col += EXCEL_COL_ALIAS.indexOf(c) + 1;
276
- }
277
- else {
278
- // 十位以上
279
- col += (EXCEL_COL_ALIAS.indexOf(c) + 1) * i * 26;
280
- }
281
- });
282
- return col;
283
- }
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByZWFkc2hlZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3NwcmVhZHNoZWV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUtuRCxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDaEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBRWpDOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUltQixhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU1RCxzQkFBc0I7UUFDTCxVQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsNERBQTRELENBQUMsRUFBRSxzREFBc0Q7WUFDcEosSUFBSSxDQUFD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LENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxLQUFLO1lBQ0wsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTztZQUNQLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhVHlwZSB9IGZyb20gJ0Bzb2xhci1raXQvY29yZSc7XG5pbXBvcnQgeyBkZWZlciwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVNYW5hZ2VyIH0gZnJvbSAnLi9maWxlLW1hbmFnZXInO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2FkZXIgfSBmcm9tICcuL3Jlc291cmNlLWxvYWRlcic7XG4vLyDkuI3pu5jorqTpm4bmiJBleGNlbGpz5LqG77yM6ZyA6KaB55qE5pe25YCZ5rOo5YWlWGxzeFNlcnZpY2XliqjmgIHliqDovb3vvIzlm6DkuLrkuI3mmK/mr4/kuKrlnLDmlrnpg73pnIDopoHlr7zlh7pleGNlbFxuLy8gaW1wb3J0IHtUYWJsZVBhcnNlciwgV29ya2Jvb2t9IGZyb20gJ2FpZXllcy1leGNlbGpzLW8nO1xuZGVjbGFyZSBsZXQgRXhjZWxKUzogYW55OyAgIC8vIGZyb20gZXhjZWxqc1xuXG5jb25zdCBFWENFTF9DT0xfQUxJQVMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xuY29uc3QgTlVNQkVSX1BBVFRFUk4gPSAvWzAtOV0vZztcbmNvbnN0IENIQVJfUEFUVEVSTiA9IC9bYS16QS1aXS9nO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIOS9v+eUqCBgQGNvbXBvc2l6ZS9leGNlbGAg5pu/5LujXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNwcmVhZHNoZWV0U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZUxvYWRlciA9IGluamVjdChSZXNvdXJjZUxvYWRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU1hbmFnZXIgPSBpbmplY3QoRmlsZU1hbmFnZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKGluamVjdChMT0NBTEVfSUQpKTtcblxuICAvLyBFeGNlbEpTIOWvueixoe+8jOeUqOaXtuW8guatpeiHquWKqOWKoOi9vVxuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2VsID0gZGVmZXIoKCkgPT4gUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMucmVzb3VyY2VMb2FkZXIubG9hZFNjcmlwdCgnaHR0cHM6Ly9pbWcub21vZnJlc2guY29tL2pzL2FpZXllcy1leGNlbGpzLW9fMV84XzEwLm1pbi5qcycpLCAvLyDkv67mlLnov4fnmoQgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYWlleWVzLWV4Y2VsanMtb1xuICAgIHRoaXMucmVzb3VyY2VMb2FkZXIubG9hZFN0eWxlc2hlZXQoJ2h0dHBzOi8vaW1nLm9tb2ZyZXNoLmNvbS9jc3MvZXhjZWxqcy5taW4uY3NzJyksIC8vIGFpZXllcy1leGNlbGpzLW8g5Lit5a6a5LmJ55qEXG4gIF0pKS5waXBlKFxuICAgIG1hcCgoKSA9PiBFeGNlbEpTKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgYXN5bmMgcGFyc2VFbGVtZW50KHRhYmxlOiBIVE1MVGFibGVFbGVtZW50LCBfb3B0cz86IGFueSkge1xuICAgIGNvbnN0IGV4Y2VsID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5leGNlbCk7XG4gICAgcmV0dXJuIGV4Y2VsLlRhYmxlUGFyc2VyLnV0aWxzLnBhcnNlRG9tVGFibGUodGFibGUsIF9vcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlj6rlr7zlh7rkuIDkuKp0YWJsZSwg5YaF5a655pS+5Zyo56ys5LiA5Liqc2hlZXTkuIpcbiAgICovXG4gIGFzeW5jIGV4cG9ydFRhYmxlKGlkT3JFbGVtZW50OiBzdHJpbmcgfCBIVE1MVGFibGVFbGVtZW50LCBmaWxlTmFtZTogc3RyaW5nLCBfb3B0cz86IGFueSkge1xuICAgIGNvbnN0IHRhYmxlID0gdHlwZW9mIGlkT3JFbGVtZW50ID09PSAnc3RyaW5nJyA/IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRPckVsZW1lbnQpISBhcyBIVE1MVGFibGVFbGVtZW50IDogaWRPckVsZW1lbnQ7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICBjb25zdCB3YiA9IG5ldyBleGNlbC5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KGZpbGVOYW1lKTtcbiAgICBjb25zdCByZSA9IGF3YWl0IHRoaXMuZXhwb3J0KHdiLCB3cywgdGFibGUsIG51bGwsIG51bGwsIF9vcHRzKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVBc0ZpbGUocmUud2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rlpJrkuKp0YWJsZSwg5YaF5a655pS+5Zyo5aSa5Liqc2hlZXTkuIpcbiAgICovXG4gIGFzeW5jIGV4cG9ydFRhYmxlU2hlZXRzKHRhYmxlSWRzOiBzdHJpbmdbXSwgc2hlZXROYW1lczogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcsIF9vcHRzPzogYW55KSB7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICBsZXQgd2IgPSBuZXcgZXhjZWwuV29ya2Jvb2soKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZUlkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkc1tpbmRleF0pIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzaGVldE5hbWUgPSBzaGVldE5hbWVzW2luZGV4XTtcbiAgICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KHNoZWV0TmFtZSk7XG4gICAgICBjb25zdCByZSA9IGF3YWl0IHRoaXMuZXhwb3J0KHdiLCB3cywgdGFibGUsIG51bGwsIG51bGwsIF9vcHRzKTtcbiAgICAgIHdiID0gcmUud2I7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlQXNGaWxlKHdiLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog5Zyo5LiA6aG15Lit5a+85Ye65aSa5LiqdGFibGUsIOavj+S4qnRhYmxl6buY6K6k6Ze06ZqUMeWIl1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0VGFibGVQYXJhbGxlbCh0YWJsZUlkczogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcsIGdhcCA9IDEsIF9vcHRzPzogYW55KSB7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcblxuICAgIGxldCB3YiA9IG5ldyBleGNlbC5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KGZpbGVOYW1lKTtcbiAgICBsZXQgY3Vyc29yID0gJ0EnOyAgICAvLyDku47nrKzkuIDliJflvIDlp4vlr7zlh7rvvIzlubbliJflh6DkuKp0YWJsZVxuXG4gICAgZm9yIChjb25zdCB0YWJsZUlkIG9mIHRhYmxlSWRzKSB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVJZCkgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlID0gYXdhaXQgdGhpcy5leHBvcnQod2IsIHdzLCB0YWJsZSwgY3Vyc29yLCBudWxsLCBfb3B0cyk7XG4gICAgICBjb25zdCBsYXN0Q29sID0gcmUuY29sc1tyZS5jb2xzLmxlbmd0aCAtIDFdO1xuICAgICAgY3Vyc29yID0gbmV4dENvbE9mQ2VsbChsYXN0Q29sKTtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZ2FwOyBrKyspIHtcbiAgICAgICAgY3Vyc29yID0gbmV4dENvbE9mQ2VsbChjdXJzb3IpO1xuICAgICAgfVxuICAgICAgd2IgPSByZS53YjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVBc0ZpbGUod2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlnKjkuIDpobXkuK3lnoLnm7Tlr7zlh7rlpJrkuKp0YWJsZVxuICAgKi9cbiAgYXN5bmMgZXhwb3J0VGFibGVWZXJ0aWNhbCh0YWJsZUlkczogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcsIGdhcCA9IDAsIF9vcHRzPzogYW55KSB7XG4gICAgbGV0IHJvd09mZnNldCA9IDA7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICBsZXQgd2IgPSBuZXcgZXhjZWwuV29ya2Jvb2soKTtcbiAgICBjb25zdCB3cyA9IHdiLmFkZFdvcmtzaGVldChmaWxlTmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlSWQgb2YgdGFibGVJZHMpIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgY29uc3QgcmUgPSBhd2FpdCB0aGlzLmV4cG9ydCh3Yiwgd3MsIHRhYmxlLCBudWxsLCByb3dPZmZzZXQsIF9vcHRzKTtcbiAgICAgIHJvd09mZnNldCArPSByZS5yb3dzLmxlbmd0aCArIGdhcDtcbiAgICAgIHdiID0gcmUud2I7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlQXNGaWxlKHdiLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye6ZG9tIHRhYmxlXG4gICAqIGNvbEN1cnNvcjog5qCH6K6w6LW35aeL5YiXXG4gICAqIHJvd09mZnNldDog5YGP56e755qE6KGM5pWwXG4gICAqIEByZXR1cm4g6L+U5Zue5pyA5ZCO5LiA5YiX55qE5YiX5ZCNXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4cG9ydCh3YjogYW55LCB3czogYW55LCB0YWJsZTogSFRNTFRhYmxlRWxlbWVudCwgY29sQ3Vyc29yPzogc3RyaW5nIHwgbnVsbCwgcm93T2Zmc2V0PzogbnVtYmVyIHwgbnVsbCwgX29wdHM/OiBhbnkpIHtcbiAgICBpZiAoIV9vcHRzKSB7XG4gICAgICBfb3B0cyA9IHsgY2VsbERhdGVzOiB0cnVlLCBkYXRlTkY6ICd5eXl5L00vZCcgfTsgICAgLy8g6buY6K6k55qE5pel5pyf5qC85byPXG4gICAgfSBlbHNlIHtcbiAgICAgIF9vcHRzLmNlbGxEYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmID0gYXdhaXQgdGhpcy5wYXJzZUVsZW1lbnQodGFibGUsIF9vcHRzKTtcbiAgICBsZXQgY29sT2Zmc2V0ID0gMDsgICAgLy8gY29sQ3Vyc29y5YGP56e76YeP77yM6buY6K6k5Li6MFxuICAgIGlmIChjb2xDdXJzb3IpIHtcbiAgICAgIGNvbnN0IGMgPSB3cy5nZXRDb2x1bW4oY29sQ3Vyc29yKTtcbiAgICAgIGNvbE9mZnNldCA9IGMubnVtYmVyIC0gMTtcbiAgICB9XG4gICAgcm93T2Zmc2V0ID0gcm93T2Zmc2V0IHx8IDA7ICAgLy8gcm93T2Zmc2V06buY6K6k5Li6MFxuICAgIGNvbnN0IGNlbGxNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhyZWYpLnNvcnQoKS5mb3JFYWNoKGNlbGxBbGlhcyA9PiB7XG4gICAgICBpZiAoIWNlbGxBbGlhcy5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgICAgbGV0IHJvd051bSA9IHJvd09mQ2VsbChjZWxsQWxpYXMpO1xuICAgICAgICByb3dOdW0gPSBTdHJpbmcocGFyc2VJbnQocm93TnVtLCAxMCkgKyByb3dPZmZzZXQpO1xuICAgICAgICBjb25zdCBjb2xOdW0gPSBjb2xOdW1iZXJPZkNlbGwoY2VsbEFsaWFzKTtcbiAgICAgICAgY29uc3QgY29sID0gd3MuZ2V0Q29sdW1uKGNvbE9mZnNldCArIGNvbE51bSk7IC8vIOagueaNruWBj+enu+mHj+aJvuWHuuaJgOWcqOeahOWIl1xuICAgICAgICBjb25zdCBmaW5hbENlbGwgPSBjb2wubGV0dGVyICsgcm93TnVtO1xuICAgICAgICBjZWxsTWFwW2ZpbmFsQ2VsbF0gPSByZWZbY2VsbEFsaWFzXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb2xTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBPYmplY3Qua2V5cyhjZWxsTWFwKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgY29sU2V0LmFkZChjb2xPZkNlbGwoaykpO1xuICAgIH0pO1xuICAgIGxldCBjb2xzID0gQXJyYXkuZnJvbShjb2xTZXQpO1xuICAgIC8vIOWboOS4umV4Y2Vs55qE5YiX6YO95piv6L+e57ut55qE77yM5aaC5p6c5a+85Ye6dGFibGXlrZjlnKjot6jliJfnmoTor53ov5nph4zpnaLlj6/og73ljbTlsJHmn5DkuIDliJfvvIzmiYDku6XpnIDopoHooaXlhYXnvLrlsJHnmoTliJflkI3kv53or4Hov5nkuIDmrrXmmK/ov57nu63nmoRcbiAgICBsZXQgY3Vyc29yID0gY29sc1swXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZlsnIWNvbHMnXS5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXh0Q29sT2ZDZWxsKGN1cnNvcik7XG4gICAgICBjb2xTZXQuYWRkKG5leHQpO1xuICAgICAgY3Vyc29yID0gbmV4dDtcbiAgICB9XG4gICAgY29scyA9IEFycmF5LmZyb20oY29sU2V0KS5zb3J0KChhOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO1xuICAgICAgfSBlbHNlIGlmIChhLmxlbmd0aCA+IGIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9KTtcbiAgICAvLyDotYvlgLxcbiAgICBPYmplY3Qua2V5cyhjZWxsTWFwKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGNvbnN0IGNlbGwgPSB3cy5nZXRDZWxsKGFsaWFzKTtcbiAgICAgIGNvbnN0IGNlbGxDb25maWcgPSBjZWxsTWFwW2FsaWFzXTtcbiAgICAgIGlmIChjZWxsQ29uZmlnLnQgPT09ICdkJykgeyAgIC8vIOaXpeacn+agvOW8j+mcgOagvOW8j+WMluWQjuaYvuekuu+8jOaNouiogOS5i+i9rOS4uuS6huWtl+espuS4slxuICAgICAgICBjZWxsLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY2VsbENvbmZpZy52LCBjZWxsQ29uZmlnLnopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbC52YWx1ZSA9IGNlbGxDb25maWcudjtcbiAgICAgIH1cbiAgICAgIC8vIOm7mOiupOWwseaciei+ueahhueahFxuICAgICAgaWYgKGNlbGxDb25maWcuc3R5bGUuYm9yZGVyZWQpIHsgICAgLy8g6KGo56S66ZyA6KaB5Yqg6L655qGGXG4gICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0ge1xuICAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gICAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIOm7mOiupOWGheWuueWeguebtOWxheS4re+8jOW3puWPs+WxheS4reS4jeS4gOWumlxuICAgICAgY2VsbC5zdHlsZS5hbGlnbm1lbnQgPSB7XG4gICAgICAgIGhvcml6b250YWw6IGNlbGxDb25maWcuc3R5bGUuYWxpZ24sXG4gICAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcbiAgICAgICAgd3JhcFRleHQ6IHRydWVcbiAgICAgIH07XG4gICAgICAvLyDlrZfkvZPpu5jorqTkuLrlrovkvZNcbiAgICAgIGNlbGwuc3R5bGUuZm9udCA9IHtcbiAgICAgICAgYm9sZDogY2VsbENvbmZpZy5zdHlsZS5ib2xkLFxuICAgICAgICBuYW1lOiAn5a6L5L2TJyxcbiAgICAgICAgc2l6ZTogY2VsbENvbmZpZy5zdHlsZS5wb3VuZCAvLyDlrZflj7dcbiAgICAgIH07XG4gICAgICAvLyDog4zmma/oibIv5YmN5pmv6ImyXG4gICAgICBpZiAoY2VsbENvbmZpZy5zdHlsZS5iYWNrZ3JvdW5kKSB7XG4gICAgICAgIGNlbGwuZmlsbCA9IHtcbiAgICAgICAgICB0eXBlOiAncGF0dGVybicsXG4gICAgICAgICAgcGF0dGVybjogJ3NvbGlkJyxcbiAgICAgICAgICBmZ0NvbG9yOiB7IGFyZ2I6IGNlbGxDb25maWcuc3R5bGUuYmFja2dyb3VuZCB9LCAgICAvLyDlrp7pmYXkuIpmZ0NvbG9y5piv55CG6Kej5LiK55qE6IOM5pmv6Imy77yM6ICM5LiN5piv5YmN5pmv6Imy77yM5LiN55+l6YGTZXhjZWzmgI7kuYjlrprkuYnnmoRcbiAgICAgICAgICAvLyBiZ0NvbG9yOiB7YXJnYjogJ2ZmZDhlNmRlJ31cbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8g6K6+572u5q+P6KGM55qE6auY5bqmXG4gICAgKHJlZlsnIXJvd3MnXSBhcyBhbnlbXSkuZm9yRWFjaCgocm93Q29uZmlnLCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gd3MuZ2V0Um93KHJvd0luZGV4ICsgcm93T2Zmc2V0ICsgMSk7XG4gICAgICByb3cuaGVpZ2h0ID0gcm93Q29uZmlnLmhlaWdodDtcbiAgICB9KTtcbiAgICAvLyDorr7nva7liJflrr1cbiAgICAocmVmWychY29scyddIGFzIGFueVtdKS5mb3JFYWNoKChjb2xDb25maWcsIGNvbEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb2xBbGlhcyA9IGNvbHNbY29sSW5kZXhdO1xuICAgICAgY29uc3QgY29sID0gd3MuZ2V0Q29sdW1uKGNvbEFsaWFzKTtcbiAgICAgIGlmIChjb2xDb25maWcud2lkdGgpIHtcbiAgICAgICAgY29sLndpZHRoID0gY29sQ29uZmlnLndpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIOWQiOW5tuWNleWFg+agvCwg55Sx5LqO5LiN5LiA5a6a5pyJ77yM5omA5Lul6KaB5Yik5pat5LiA5LiLXG4gICAgKHJlZlsnIW1lcmdlcyddIGFzIGFueVtdIHwgbnVsbCk/LmZvckVhY2gobWVyZ2VQYXJhbSA9PiB7XG4gICAgICBjb25zdCBzID0gbWVyZ2VQYXJhbVsncyddO1xuICAgICAgY29uc3QgZSA9IG1lcmdlUGFyYW1bJ2UnXTtcbiAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHdzLmdldENlbGwocm93T2Zmc2V0ICsgcy5yICsgMSwgY29sT2Zmc2V0ICsgcy5jICsgMSk7XG4gICAgICBjb25zdCBlbmRDZWxsID0gd3MuZ2V0Q2VsbChyb3dPZmZzZXQgKyBlLnIgKyAxLCBjb2xPZmZzZXQgKyBlLmMgKyAxKTtcbiAgICAgIHdzLm1lcmdlQ2VsbHMoW3N0YXJ0Q2VsbC5hZGRyZXNzLCBlbmRDZWxsLmFkZHJlc3NdKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyB3YiwgY29scywgcm93czogcmVmWychcm93cyddIH07XG4gIH1cblxuICAvKipcbiAgICog5L+d5a2YV29ya2Jvb2vliLDno4Hnm5jkuIpcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUFzRmlsZSh3YjogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZXhjZWxEYXRhID0gYXdhaXQgd2IueGxzeC53cml0ZUJ1ZmZlcigpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhjZWxEYXRhXSwgeyB0eXBlOiBNZWRpYVR5cGUuWGxzeCB9KTtcbiAgICB0aGlzLmZpbGVNYW5hZ2VyLnNhdmUoYmxvYiwgZmlsZU5hbWUgKyAnLnhsc3gnKVxuICB9XG59XG5cbi8qKlxuICog5qC55o2u5b2T5YmN55qE5Y2V5YWD5qC85om+5Yiw5LiL5LiA5YiX55qE5Zyw5Z2AXG4gKiDph4fnlKjlgJLluo/ov5vkvY3ms5XvvIzov5nmoLflsLHkuI3pnIDopoHpgJLlvZLkuoZcbiAqL1xuZnVuY3Rpb24gbmV4dENvbE9mQ2VsbChjZWxsOiBzdHJpbmcpIHtcbiAgLy8g5YWI5oqK5a2X5q+N5ZKM5pWw5a2X5YiG5byA77yM5a2X5q+N5piv5YiX77yM5pWw5a2X5piv6KGM77yM5YCS5bqP5o6S5YiXXG4gIGNvbnN0IGFyZ3MgPSBjZWxsLm1hdGNoKENIQVJfUEFUVEVSTikhLnJldmVyc2UoKTtcbiAgbGV0IG5lZWRBcHBlbmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnICE9PSAnWicpIHtcbiAgICAgIGNvbnN0IGlkeCA9IEVYQ0VMX0NPTF9BTElBUy5pbmRleE9mKGFyZyk7XG4gICAgICBhcmdzW2ldID0gRVhDRUxfQ09MX0FMSUFTW2lkeCArIDFdO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NbaV0gPSAnQSc7XG4gICAgICBpZiAoaSA9PT0gYXJncy5sZW5ndGggLSAxKSB7ICAgIC8vIOivtOaYjuaYr+acgOWQjuS4gOS4quS6hu+8jOmcgOimgeihpUFcbiAgICAgICAgbmVlZEFwcGVuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuZWVkQXBwZW5kKSB7XG4gICAgYXJncy5wdXNoKCdBJyk7XG4gIH1cbiAgcmV0dXJuIGFyZ3MucmV2ZXJzZSgpLmpvaW4oJycpOyAgICAvLyDmnIDnu4jnmoTnu5PmnpzvvIzlj43ovazlho3lkIjlubZcbn1cblxuLyoqXG4gKiDojrflj5bljZXlhYPmoLznmoTooYxcbiAqL1xuZnVuY3Rpb24gcm93T2ZDZWxsKGNlbGw6IHN0cmluZykge1xuICByZXR1cm4gY2VsbC5tYXRjaChOVU1CRVJfUEFUVEVSTikhLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIOiOt+WPluWNleWFg+agvOeahOWIl1xuICovXG5mdW5jdGlvbiBjb2xPZkNlbGwoY2VsbDogc3RyaW5nKSB7XG4gIHJldHVybiBjZWxsLm1hdGNoKENIQVJfUEFUVEVSTikhLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIOWNleWFg+agvOeahOWIl+WPt1xuICog5b2T5L2cMjbov5vliLborqHnrpfliJfnmoTnvJblj7dcbiAqL1xuZnVuY3Rpb24gY29sTnVtYmVyT2ZDZWxsKGNlbGw6IHN0cmluZykge1xuICBsZXQgY29sID0gMDtcbiAgY2VsbC5tYXRjaChDSEFSX1BBVFRFUk4pIS5yZXZlcnNlKCkuZm9yRWFjaCgoYywgaSkgPT4ge1xuICAgIGlmIChpID09IDApIHtcbiAgICAgIC8vIOS4quS9jVxuICAgICAgY29sICs9IEVYQ0VMX0NPTF9BTElBUy5pbmRleE9mKGMpICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g5Y2B5L2N5Lul5LiKXG4gICAgICBjb2wgKz0gKEVYQ0VMX0NPTF9BTElBUy5pbmRleE9mKGMpICsgMSkgKiBpICogMjY7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbDtcbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export * from './local-storage';
2
- export * from './session-storage';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1icm93c2VyL3NyYy9zdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbG9jYWwtc3RvcmFnZSdcbmV4cG9ydCAqIGZyb20gJy4vc2Vzc2lvbi1zdG9yYWdlJ1xuIl19
@@ -1,40 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { inject, Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class LocalStorage {
5
- constructor() {
6
- this.storage = inject(DOCUMENT).defaultView.localStorage;
7
- }
8
- /**
9
- * 保存数据
10
- * @param key 键名
11
- * @param value 数据
12
- */
13
- set(key, value) {
14
- this.storage.setItem(key, JSON.stringify(value));
15
- }
16
- /**
17
- * 获取数据
18
- * @param key 键名
19
- */
20
- get(key) {
21
- const data = this.storage.getItem(key);
22
- return data ? JSON.parse(data) : null;
23
- }
24
- /**
25
- * 移除数据
26
- * @param key 键名
27
- */
28
- remove(key) {
29
- this.storage.removeItem(key);
30
- }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
32
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorage, providedIn: 'root' }); }
33
- }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorage, decorators: [{
35
- type: Injectable,
36
- args: [{
37
- providedIn: 'root'
38
- }]
39
- }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS25ELE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSW1CLFlBQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBWSxDQUFDLFlBQVksQ0FBQztLQTRCdkU7SUExQkM7Ozs7T0FJRztJQUNILEdBQUcsQ0FBVSxHQUFXLEVBQUUsS0FBUTtRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQUksR0FBVztRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQTNCVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbmplY3QoRE9DVU1FTlQpLmRlZmF1bHRWaWV3IS5sb2NhbFN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIOS/neWtmOaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKiBAcGFyYW0gdmFsdWUg5pWw5o2uXG4gICAqL1xuICBzZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKi9cbiAgZ2V0PFQ+KGtleTogc3RyaW5nKTogVCB8IG51bGwge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIHJldHVybiBkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog56e76Zmk5pWw5o2uXG4gICAqIEBwYXJhbSBrZXkg6ZSu5ZCNXG4gICAqL1xuICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,41 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { inject, Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class SessionStorage {
5
- constructor() {
6
- this.storage = inject(DOCUMENT).defaultView.sessionStorage;
7
- }
8
- /**
9
- * 保存数据
10
- * @param key 键名
11
- * @param value 数据
12
- */
13
- set(key, value) {
14
- this.storage.setItem(key, JSON.stringify(value));
15
- }
16
- /**
17
- * 获取数据
18
- * @param key 键名
19
- * @param defaults 默认值
20
- */
21
- get(key) {
22
- const data = this.storage.getItem(key);
23
- return data ? JSON.parse(data) : null;
24
- }
25
- /**
26
- * 移除数据
27
- * @param key 键名
28
- */
29
- remove(key) {
30
- this.storage.removeItem(key);
31
- }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorage, providedIn: 'root' }); }
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorage, decorators: [{
36
- type: Injectable,
37
- args: [{
38
- providedIn: 'root'
39
- }]
40
- }] });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUtuRCxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUltQixZQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVksQ0FBQyxjQUFjLENBQUM7S0E2QnpFO0lBM0JDOzs7O09BSUc7SUFDSCxHQUFHLENBQVUsR0FBVyxFQUFFLEtBQVE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBVSxHQUFXO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBNUJVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlID0gaW5qZWN0KERPQ1VNRU5UKS5kZWZhdWx0VmlldyEuc2Vzc2lvblN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIOS/neWtmOaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKiBAcGFyYW0gdmFsdWUg5pWw5o2uXG4gICAqL1xuICBzZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKiBAcGFyYW0gZGVmYXVsdHMg6buY6K6k5YC8XG4gICAqL1xuICBnZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDnp7vpmaTmlbDmja5cbiAgICogQHBhcmFtIGtleSDplK7lkI1cbiAgICovXG4gIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cblxufVxuIl19