{"version":3,"file":"lodop.mjs","sources":["../../../../packages/abc/lodop/lodop.service.ts","../../../../packages/abc/lodop/lodop.module.ts","../../../../packages/abc/lodop/lodop.ts"],"sourcesContent":["import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, of, Subject } from 'rxjs';\n\nimport { AlainConfigService, AlainLodopConfig } from '@delon/util/config';\nimport { LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { Lodop, LodopPrintResult, LodopResult } from './lodop.types';\n\n@Injectable({ providedIn: 'root' })\nexport class LodopService implements OnDestroy {\n  private readonly scriptSrv = inject(LazyService);\n\n  private defaultConfig: AlainLodopConfig;\n  private _cog!: AlainLodopConfig;\n  private pending = false;\n  private _lodop: Lodop | null = null;\n  private _init = new Subject<LodopResult>();\n  private _events = new Subject<LodopPrintResult>();\n  private printBuffer: NzSafeAny[] = [];\n\n  constructor(configSrv: AlainConfigService) {\n    this.defaultConfig = configSrv.merge('lodop', {\n      url: '//localhost:8443/CLodopfuncs.js',\n      name: 'CLODOP',\n      companyName: '',\n      checkMaxCount: 100\n    })!;\n    this.cog = this.defaultConfig;\n  }\n\n  /**\n   * Get or set configuration, **Note:** Resetting will invert and reload script resources\n   *\n   * 获取或重新设置配置，**注：**重新设置会倒置重新加载脚本资源\n   */\n  get cog(): AlainLodopConfig {\n    return this._cog;\n  }\n  set cog(value: AlainLodopConfig) {\n    this._cog = {\n      ...this.defaultConfig,\n      ...value\n    };\n  }\n\n  /**\n   * Event change notification\n   *\n   * 事件变更通知\n   */\n  get events(): Observable<LodopPrintResult> {\n    return this._events.asObservable();\n  }\n\n  /**\n   * Get lodop object\n   *\n   * 获取 lodop 对象\n   */\n  get lodop(): Observable<LodopResult> {\n    if (this._lodop) return of({ ok: true, lodop: this._lodop } as LodopResult);\n    if (this.pending) return this._init.asObservable();\n\n    this.request();\n\n    return this._init.asObservable();\n  }\n\n  /**\n   * Get printer list\n   *\n   * 获取打印机列表\n   */\n  get printer(): string[] {\n    this.check();\n    const ret: string[] = [];\n    const count = this._lodop!.GET_PRINTER_COUNT();\n    for (let index = 0; index < count; index++) {\n      ret.push(this._lodop!.GET_PRINTER_NAME(index));\n    }\n    return ret;\n  }\n\n  private check(): void {\n    if (!this._lodop) throw new Error(`请务必先调用 lodop 获取对象`);\n  }\n\n  private request(): void {\n    this.pending = true;\n\n    const url = `${this.cog.url}?name=${this.cog.name}`;\n    let checkMaxCount = this.cog.checkMaxCount as number;\n    const onResolve = (status: NzSafeAny, error?: NzSafeAny): void => {\n      this._init.next({\n        ok: status === 'ok',\n        status,\n        error,\n        lodop: this._lodop!\n      });\n    };\n    const checkStatus = (): void => {\n      --checkMaxCount;\n      if (this._lodop!.webskt && this._lodop!.webskt.readyState === 1) {\n        onResolve('ok');\n      } else {\n        if (checkMaxCount < 0) {\n          onResolve('check-limit');\n          return;\n        }\n        setTimeout(() => checkStatus(), 100);\n      }\n    };\n\n    this.scriptSrv.loadScript(url).then((res: NzSafeAny) => {\n      if (res.status !== 'ok') {\n        this.pending = false;\n        onResolve('script-load-error', res[0]);\n        return;\n      }\n      const win = window as NzSafeAny;\n      if (win.hasOwnProperty(this.cog.name!)) {\n        this._lodop = win[this.cog.name!] as Lodop;\n      }\n      if (this._lodop === null) {\n        onResolve('load-variable-name-error', { name: this.cog.name });\n        return;\n      }\n      this._lodop.SET_LICENSES(this.cog.companyName!, this.cog.license!, this.cog.licenseA, this.cog.licenseB);\n      checkStatus();\n    });\n  }\n\n  /**\n   * Reset lodop object\n   *\n   * 重置 lodop 对象\n   */\n  reset(): void {\n    this._lodop = null;\n    this.pending = false;\n    this.request();\n  }\n\n  /**\n   * Attach code to the `lodop` object, the string class supports dynamic parameters of `{{key}}`,\n   * **Note:** The code refers to the string data generated by the print design\n   *\n   * 附加代码至 `lodop` 对象上，字符串类支持 `{{key}}` 的动态参数，**注：** 代码是指打印设计所产生字符串数据\n   */\n  attachCode(code: string, contextObj?: NzSafeAny, parser?: RegExp): void {\n    this.check();\n    if (!parser) parser = /LODOP\\.([^(]+)\\(([^\\n]+)?\\);/i;\n    code.split('\\n').forEach(line => {\n      const res = parser!.exec(line.trim());\n      if (!res) return;\n      const fn = this._lodop![res[1]];\n      if (fn) {\n        let arr: NzSafeAny[] | null = null;\n        try {\n          const fakeFn = new Function(`return [${res[2]}]`);\n          arr = fakeFn();\n        } catch {}\n\n        if (arr != null && Array.isArray(arr) && contextObj) {\n          for (let i = 0; i < arr.length; i++) {\n            if (typeof arr[i] === 'string') {\n              arr[i] = (arr[i] as string).replace(/{{(.*?)}}/g, (_match, key) => contextObj[key.trim()] || '');\n            }\n          }\n        }\n        fn.apply(this._lodop, arr!);\n      }\n    });\n  }\n\n  /**\n   * The code is automatically returned after opening the print design and closing,\n   * **Note:** Automatically listen for the `On_Return` event, and it will be removed after running\n   *\n   * 打开打印设计关闭后自动返回代码，**注：** 自动监听 `On_Return` 事件，运行后会移除\n   */\n  design(): Promise<string> {\n    this.check();\n    const tid = this._lodop!.PRINT_DESIGN();\n    return new Promise(resolve => {\n      this._lodop!.On_Return = (taskID: string, value: boolean | string) => {\n        if (tid !== taskID) return;\n        this._lodop!.On_Return = null;\n        resolve(`${value}`);\n      };\n    });\n  }\n  private printDo(): void {\n    const data = this.printBuffer.shift();\n    if (!data) return;\n    this.attachCode(data.code, data.item, data.parser);\n    const tid = this._lodop!.PRINT();\n    this._lodop!.On_Return = (taskID: string, value: boolean | string) => {\n      if (tid !== taskID) return;\n      this._lodop!.On_Return = null;\n      this._events.next({\n        ok: value === true,\n        error: value === true ? null : value,\n        ...data\n      });\n      this.printDo();\n    };\n  }\n\n  /**\n   * Print immediately, generally used for batch printing\n   *\n   * 立即打印，一般用于批量套打\n   */\n  print(code: string, contextObj: NzSafeAny, parser?: RegExp): void {\n    this.check();\n    if (contextObj) {\n      this.printBuffer.push(\n        ...(Array.isArray(contextObj) ? contextObj : [contextObj]).map(item => {\n          return { code, parser, item };\n        })\n      );\n    }\n    this.printDo();\n  }\n\n  ngOnDestroy(): void {\n    this._init.unsubscribe();\n    this._events.unsubscribe();\n  }\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({})\nexport class LodopModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAUa,YAAY,CAAA;AAWvB,IAAA,WAAA,CAAY,SAA6B,EAAA;AAVxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAIzC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAM,CAAA,MAAA,GAAiB,IAAI,CAAC;AAC5B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,OAAO,EAAe,CAAC;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAoB,CAAC;QAC1C,IAAW,CAAA,WAAA,GAAgB,EAAE,CAAC;QAGpC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;AAC5C,YAAA,GAAG,EAAE,iCAAiC;AACtC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,aAAa,EAAE,GAAG;AACnB,SAAA,CAAE,CAAC;AACJ,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;KAC/B;AAED;;;;AAIG;AACH,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IACD,IAAI,GAAG,CAAC,KAAuB,EAAA;QAC7B,IAAI,CAAC,IAAI,GAAG;YACV,GAAG,IAAI,CAAC,aAAa;AACrB,YAAA,GAAG,KAAK;SACT,CAAC;KACH;AAED;;;;AAIG;AACH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAED;;;;AAIG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAiB,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;AAEf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;KAClC;AAED;;;;AAIG;AACH,IAAA,IAAI,OAAO,GAAA;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAO,CAAC,iBAAiB,EAAE,CAAC;AAC/C,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;AAC1C,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,KAAK,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,CAAmB,CAAC,CAAC;KACxD;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,MAAM,GAAG,GAAG,CAAG,EAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACpD,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAuB,CAAC;AACrD,QAAA,MAAM,SAAS,GAAG,CAAC,MAAiB,EAAE,KAAiB,KAAU;AAC/D,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,MAAM,KAAK,IAAI;gBACnB,MAAM;gBACN,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,MAAO;AACpB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;QACF,MAAM,WAAW,GAAG,MAAW;AAC7B,YAAA,EAAE,aAAa,CAAC;AAChB,YAAA,IAAI,IAAI,CAAC,MAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;gBAC/D,SAAS,CAAC,IAAI,CAAC,CAAC;aACjB;iBAAM;AACL,gBAAA,IAAI,aAAa,GAAG,CAAC,EAAE;oBACrB,SAAS,CAAC,aAAa,CAAC,CAAC;oBACzB,OAAO;iBACR;gBACD,UAAU,CAAC,MAAM,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;aACtC;AACH,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAc,KAAI;AACrD,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,OAAO;aACR;YACD,MAAM,GAAG,GAAG,MAAmB,CAAC;YAChC,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAK,CAAC,EAAE;gBACtC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAK,CAAU,CAAC;aAC5C;AACD,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACxB,gBAAA,SAAS,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/D,OAAO;aACR;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAY,EAAE,IAAI,CAAC,GAAG,CAAC,OAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACzG,YAAA,WAAW,EAAE,CAAC;AAChB,SAAC,CAAC,CAAC;KACJ;AAED;;;;AAIG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAED;;;;;AAKG;AACH,IAAA,UAAU,CAAC,IAAY,EAAE,UAAsB,EAAE,MAAe,EAAA;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,+BAA+B,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YAC9B,MAAM,GAAG,GAAG,MAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,EAAE,EAAE;gBACN,IAAI,GAAG,GAAuB,IAAI,CAAC;AACnC,gBAAA,IAAI;AACF,oBAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;oBAClD,GAAG,GAAG,MAAM,EAAE,CAAC;iBAChB;gBAAC,MAAM,GAAE;AAEV,gBAAA,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE;AACnD,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACnC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC9B,4BAAA,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;yBAClG;qBACF;iBACF;gBACD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAI,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;;;;AAKG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAO,CAAC,YAAY,EAAE,CAAC;AACxC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;YAC3B,IAAI,CAAC,MAAO,CAAC,SAAS,GAAG,CAAC,MAAc,EAAE,KAAuB,KAAI;gBACnE,IAAI,GAAG,KAAK,MAAM;oBAAE,OAAO;AAC3B,gBAAA,IAAI,CAAC,MAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,gBAAA,OAAO,CAAC,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC,CAAC;AACtB,aAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IACO,OAAO,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,MAAO,CAAC,SAAS,GAAG,CAAC,MAAc,EAAE,KAAuB,KAAI;YACnE,IAAI,GAAG,KAAK,MAAM;gBAAE,OAAO;AAC3B,YAAA,IAAI,CAAC,MAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,KAAK,KAAK,IAAI;gBAClB,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACpC,gBAAA,GAAG,IAAI;AACR,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB,SAAC,CAAC;KACH;AAED;;;;AAIG;AACH,IAAA,KAAK,CAAC,IAAY,EAAE,UAAqB,EAAE,MAAe,EAAA;QACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,IAAI,IAAG;AACpE,gBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAC/B,CAAC,CACH,CAAC;SACH;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;KAC5B;8GA5NU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCNrB,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAX,WAAW,EAAA,CAAA,CAAA,EAAA;+GAAX,WAAW,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,QAAQ;mBAAC,EAAE,CAAA;;;ACFZ;;AAEG;;;;"}