@yelon/util 18.1.4 → 18.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/array/array.service.mjs +4 -4
- package/esm2022/browser/cookie.service.mjs +4 -4
- package/esm2022/browser/scroll.service.mjs +4 -4
- package/esm2022/config/config.service.mjs +4 -4
- package/esm2022/format/currency.service.mjs +4 -4
- package/esm2022/other/lazy.service.mjs +4 -4
- package/esm2022/other/path-to-regexp.service.mjs +4 -4
- package/esm2022/pipes/currency/cny.pipe.mjs +4 -4
- package/esm2022/pipes/currency/mega.pipe.mjs +4 -4
- package/esm2022/pipes/currency/module.mjs +5 -5
- package/esm2022/pipes/currency/price.pipe.mjs +4 -4
- package/esm2022/pipes/filter/filter.pipe.mjs +4 -4
- package/esm2022/pipes/filter/module.mjs +5 -5
- package/esm2022/pipes/format/mask.pipe.mjs +4 -4
- package/esm2022/pipes/format/module.mjs +5 -5
- package/fesm2022/array.mjs +3 -3
- package/fesm2022/array.mjs.map +1 -1
- package/fesm2022/browser.mjs +6 -6
- package/fesm2022/browser.mjs.map +1 -1
- package/fesm2022/config.mjs +3 -3
- package/fesm2022/config.mjs.map +1 -1
- package/fesm2022/date-time.mjs.map +1 -1
- package/fesm2022/decorator.mjs.map +1 -1
- package/fesm2022/form.mjs.map +1 -1
- package/fesm2022/format.mjs +3 -3
- package/fesm2022/format.mjs.map +1 -1
- package/fesm2022/math.mjs.map +1 -1
- package/fesm2022/mcache.mjs.map +1 -1
- package/fesm2022/mtypes.mjs.map +1 -1
- package/fesm2022/other.mjs +6 -6
- package/fesm2022/other.mjs.map +1 -1
- package/fesm2022/pipe-currency.mjs +13 -13
- package/fesm2022/pipe-currency.mjs.map +1 -1
- package/fesm2022/pipe-filter.mjs +7 -7
- package/fesm2022/pipe-filter.mjs.map +1 -1
- package/fesm2022/pipe-format.mjs +7 -7
- package/fesm2022/pipe-format.mjs.map +1 -1
- package/fesm2022/token.mjs.map +1 -1
- package/other/path-to-regexp.service.d.ts +1 -1
- package/package.json +18 -18
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decorator.mjs","sources":["../../../../packages/util/decorator/convert.ts","../../../../packages/util/decorator/zone-outside.ts","../../../../packages/util/decorator/decorator.ts"],"sourcesContent":["import { warn } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport type BooleanInput = boolean | string | undefined | null;\nexport type NumberInput = number | string | undefined | null;\n\nfunction propDecoratorFactory<T, D>(\n name: string,\n fallback: (v: T, defaultValue: D) => D,\n defaultValue: NzSafeAny\n): (target: NzSafeAny, propName: string) => void {\n function propDecorator(\n target: NzSafeAny,\n propName: string,\n originalDescriptor?: TypedPropertyDescriptor<NzSafeAny>\n ): NzSafeAny {\n const privatePropName = `$$__${propName}`;\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {\n warn(`The prop \"${privatePropName}\" is already exist, it will be overrided by ${name} decorator.`);\n }\n }\n\n Object.defineProperty(target, privatePropName, {\n configurable: true,\n writable: true\n });\n\n return {\n get(): string {\n return originalDescriptor && originalDescriptor.get\n ? originalDescriptor.get.bind(this)()\n : this[privatePropName];\n },\n set(value: T): void {\n if (originalDescriptor && originalDescriptor.set) {\n originalDescriptor.set.bind(this)(fallback(value, defaultValue));\n }\n this[privatePropName] = fallback(value, defaultValue);\n }\n };\n }\n\n return propDecorator;\n}\n\nexport function toBoolean(\n value: unknown,\n defaultValue: boolean | null | undefined = false\n): boolean | null | undefined {\n return value == null ? defaultValue : `${value}` !== 'false';\n}\n\n/**\n * @deprecated Recommended to use the built-in `transform` and `static ngAcceptInputType_` can be removed\n * - Use `@Input({ transform: booleanAttribute })` instead of `@InputBoolean()`\n * - Use `@Input({ transform: (v: unknown) => (v == null ? null : booleanAttribute(v)) })` instead of `@InputBoolean(null)`\n *\n * Input decorator that handle a prop to do get/set automatically with toBoolean\n *\n * ```ts\n * {AT}Input() {AT}InputBoolean() visible: boolean = false;\n * {AT}Input() {AT}InputBoolean(null) visible: boolean = false;\n * ```\n */\nexport function InputBoolean(defaultValue: boolean | null = false): NzSafeAny {\n return propDecoratorFactory('InputBoolean', toBoolean, defaultValue);\n}\n\nexport function toNumber(value: unknown): number;\nexport function toNumber<D>(value: unknown, fallback: D): number | D;\nexport function toNumber(value: unknown, fallbackValue: number = 0): number {\n return !isNaN(parseFloat(value as NzSafeAny)) && !isNaN(Number(value)) ? Number(value) : fallbackValue;\n}\n\n/**\n * @deprecated Recommended to use the built-in `transform` and `static ngAcceptInputType_` can be removed\n * - Use `@Input({ transform: numberAttribute })` instead of `@InputNumber()`\n * - Use `@Input({ transform: (v: unknown) => (v == null ? null : numberAttribute(v)) })` instead of `@InputNumber(null)`\n *\n * Input decorator that handle a prop to do get/set automatically with toNumber\n *\n * ```ts\n * {AT}Input() {AT}InputNumber() visible: number = 1;\n * {AT}Input() {AT}InputNumber(null) visible: number = 2;\n * ```\n */\nexport function InputNumber(defaultValue: number | null = 0): NzSafeAny {\n return propDecoratorFactory('InputNumber', toNumber, defaultValue);\n}\n","import { warn } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface ZoneOptions {\n ngZoneName?: string;\n}\n\ntype DecoratorType = (target: unknown, fn: string, descriptor: PropertyDescriptor) => PropertyDescriptor;\n\nfunction makeFn(type: 'runOutsideAngular' | 'run', options?: ZoneOptions): DecoratorType {\n return (_, __, descriptor) => {\n const source = descriptor.value;\n descriptor.value = function (...data: NzSafeAny[]): () => void {\n const that = this as NzSafeAny;\n const ngZone = that[options?.ngZoneName || 'ngZone'];\n if (!ngZone) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warn(`ZoneOutside: Decorator should have 'ngZone' property with 'NgZone' class.`);\n }\n return source.call(this, ...data);\n }\n let res: NzSafeAny;\n ngZone[type](() => {\n res = source.call(this, ...data);\n });\n return res;\n };\n\n return descriptor;\n };\n}\n\n/**\n * The decoration method runs in `runOutsideAngular`\n *\n * 装饰方法运行在 `runOutsideAngular` 内\n *\n * ```ts\n * class MockClass {\n * readonly ngZone = inject(NgZone);\n *\n * {AT}ZoneOutside()\n * runOutsideAngular(): void {}\n * }\n * ```\n */\nexport function ZoneOutside(options?: ZoneOptions): DecoratorType {\n return makeFn('runOutsideAngular', options);\n}\n\n/**\n * The decoration method runs in `run`\n *\n * 装饰方法运行在 `run` 内\n *\n * ```ts\n * class MockClass {\n * readonly ngZone = inject(NgZone);\n *\n * {AT}ZoneRun()\n * run(): void {}\n * }\n * ```\n */\nexport function ZoneRun(options?: ZoneOptions): DecoratorType {\n return makeFn('run', options);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAMA,SAAS,oBAAoB,CAC3B,IAAY,EACZ,QAAsC,EACtC,YAAuB,EAAA;AAEvB,IAAA,SAAS,aAAa,CACpB,MAAiB,EACjB,QAAgB,EAChB,kBAAuD,EAAA;AAEvD,QAAA,MAAM,eAAe,GAAG,CAAO,IAAA,EAAA,QAAQ,EAAE
|
1
|
+
{"version":3,"file":"decorator.mjs","sources":["../../../../packages/util/decorator/convert.ts","../../../../packages/util/decorator/zone-outside.ts","../../../../packages/util/decorator/decorator.ts"],"sourcesContent":["import { warn } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport type BooleanInput = boolean | string | undefined | null;\nexport type NumberInput = number | string | undefined | null;\n\nfunction propDecoratorFactory<T, D>(\n name: string,\n fallback: (v: T, defaultValue: D) => D,\n defaultValue: NzSafeAny\n): (target: NzSafeAny, propName: string) => void {\n function propDecorator(\n target: NzSafeAny,\n propName: string,\n originalDescriptor?: TypedPropertyDescriptor<NzSafeAny>\n ): NzSafeAny {\n const privatePropName = `$$__${propName}`;\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {\n warn(`The prop \"${privatePropName}\" is already exist, it will be overrided by ${name} decorator.`);\n }\n }\n\n Object.defineProperty(target, privatePropName, {\n configurable: true,\n writable: true\n });\n\n return {\n get(): string {\n return originalDescriptor && originalDescriptor.get\n ? originalDescriptor.get.bind(this)()\n : this[privatePropName];\n },\n set(value: T): void {\n if (originalDescriptor && originalDescriptor.set) {\n originalDescriptor.set.bind(this)(fallback(value, defaultValue));\n }\n this[privatePropName] = fallback(value, defaultValue);\n }\n };\n }\n\n return propDecorator;\n}\n\nexport function toBoolean(\n value: unknown,\n defaultValue: boolean | null | undefined = false\n): boolean | null | undefined {\n return value == null ? defaultValue : `${value}` !== 'false';\n}\n\n/**\n * @deprecated Recommended to use the built-in `transform` and `static ngAcceptInputType_` can be removed\n * - Use `@Input({ transform: booleanAttribute })` instead of `@InputBoolean()`\n * - Use `@Input({ transform: (v: unknown) => (v == null ? null : booleanAttribute(v)) })` instead of `@InputBoolean(null)`\n *\n * Input decorator that handle a prop to do get/set automatically with toBoolean\n *\n * ```ts\n * {AT}Input() {AT}InputBoolean() visible: boolean = false;\n * {AT}Input() {AT}InputBoolean(null) visible: boolean = false;\n * ```\n */\nexport function InputBoolean(defaultValue: boolean | null = false): NzSafeAny {\n return propDecoratorFactory('InputBoolean', toBoolean, defaultValue);\n}\n\nexport function toNumber(value: unknown): number;\nexport function toNumber<D>(value: unknown, fallback: D): number | D;\nexport function toNumber(value: unknown, fallbackValue: number = 0): number {\n return !isNaN(parseFloat(value as NzSafeAny)) && !isNaN(Number(value)) ? Number(value) : fallbackValue;\n}\n\n/**\n * @deprecated Recommended to use the built-in `transform` and `static ngAcceptInputType_` can be removed\n * - Use `@Input({ transform: numberAttribute })` instead of `@InputNumber()`\n * - Use `@Input({ transform: (v: unknown) => (v == null ? null : numberAttribute(v)) })` instead of `@InputNumber(null)`\n *\n * Input decorator that handle a prop to do get/set automatically with toNumber\n *\n * ```ts\n * {AT}Input() {AT}InputNumber() visible: number = 1;\n * {AT}Input() {AT}InputNumber(null) visible: number = 2;\n * ```\n */\nexport function InputNumber(defaultValue: number | null = 0): NzSafeAny {\n return propDecoratorFactory('InputNumber', toNumber, defaultValue);\n}\n","import { warn } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface ZoneOptions {\n ngZoneName?: string;\n}\n\ntype DecoratorType = (target: unknown, fn: string, descriptor: PropertyDescriptor) => PropertyDescriptor;\n\nfunction makeFn(type: 'runOutsideAngular' | 'run', options?: ZoneOptions): DecoratorType {\n return (_, __, descriptor) => {\n const source = descriptor.value;\n descriptor.value = function (...data: NzSafeAny[]): () => void {\n const that = this as NzSafeAny;\n const ngZone = that[options?.ngZoneName || 'ngZone'];\n if (!ngZone) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warn(`ZoneOutside: Decorator should have 'ngZone' property with 'NgZone' class.`);\n }\n return source.call(this, ...data);\n }\n let res: NzSafeAny;\n ngZone[type](() => {\n res = source.call(this, ...data);\n });\n return res;\n };\n\n return descriptor;\n };\n}\n\n/**\n * The decoration method runs in `runOutsideAngular`\n *\n * 装饰方法运行在 `runOutsideAngular` 内\n *\n * ```ts\n * class MockClass {\n * readonly ngZone = inject(NgZone);\n *\n * {AT}ZoneOutside()\n * runOutsideAngular(): void {}\n * }\n * ```\n */\nexport function ZoneOutside(options?: ZoneOptions): DecoratorType {\n return makeFn('runOutsideAngular', options);\n}\n\n/**\n * The decoration method runs in `run`\n *\n * 装饰方法运行在 `run` 内\n *\n * ```ts\n * class MockClass {\n * readonly ngZone = inject(NgZone);\n *\n * {AT}ZoneRun()\n * run(): void {}\n * }\n * ```\n */\nexport function ZoneRun(options?: ZoneOptions): DecoratorType {\n return makeFn('run', options);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/form.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"form.mjs","sources":["../../../../packages/util/form/validators.ts","../../../../packages/util/form/match-control.ts","../../../../packages/util/form/form.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isChinese, isColor, isDecimal, isIdCard, isInt, isIp, isMobile, isNum, isUrl } from '@yelon/util/format';\n\n/**\n * A set of validators for reactive forms\n *\n * 一套用于响应式表单的验证器\n */\nexport class _Validators {\n /**\n * Wheter is number\n *\n * 是否为数字\n */\n static num(control: AbstractControl): ValidationErrors | null {\n return isNum(control.value) ? null : { num: true };\n }\n\n /**\n * Wheter is integer\n *\n * 是否为整数\n */\n static int(control: AbstractControl): ValidationErrors | null {\n return isInt(control.value) ? null : { int: true };\n }\n\n /**\n * Wheter is decimal\n *\n * 是否为小数点数值\n */\n static decimal(control: AbstractControl): ValidationErrors | null {\n return isDecimal(control.value) ? null : { decimal: true };\n }\n\n /**\n * Wheter is People's Republic of China identity card\n *\n * 是否为中华人民共和国居民身份证\n */\n static idCard(control: AbstractControl): ValidationErrors | null {\n return isIdCard(control.value) ? null : { idCard: true };\n }\n\n /**\n * Wheter is china mobile (China)\n *\n * 是否为手机号(中国)\n */\n static mobile(control: AbstractControl): ValidationErrors | null {\n return isMobile(control.value) ? null : { mobile: true };\n }\n\n /**\n * Wheter is url address\n *\n * 是否URL地址\n */\n static url(control: AbstractControl): ValidationErrors | null {\n return isUrl(control.value) ? null : { url: true };\n }\n\n /**\n * Wheter is IPv4 address (Support v4, v6)\n *\n * 是否IP4地址(支持v4、v6)\n */\n static ip(control: AbstractControl): ValidationErrors | null {\n return isIp(control.value) ? null : { ip: true };\n }\n\n /**\n * Wheter is color\n *\n * 是否颜色代码值\n */\n static color(control: AbstractControl): ValidationErrors | null {\n return isColor(control.value) ? null : { color: true };\n }\n\n /**\n * Wheter is chinese\n *\n * 是否中文\n */\n static chinese(control: AbstractControl): ValidationErrors | null {\n return isChinese(control.value) ? null : { chinese: true };\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\n/**\n * Match two control values\n *\n * 匹配两个控件值\n * ```ts\n * this.form = new FormGroup({\n * pwd: new FormControl(''),\n * repwd: new FormControl(''),\n * }, {\n * validators: MatchControl('pwd', 'repwd'),\n * });\n * ```\n */\nexport function MatchControl(controlName: string, matchingControlName: string): ValidatorFn {\n return (formGroup: AbstractControl) => {\n const control = formGroup.get(controlName)!;\n const matchingControl = formGroup.get(matchingControlName)!;\n if (matchingControl.errors && !matchingControl.errors.matchControl) {\n return null;\n }\n if (control.value !== matchingControl.value) {\n matchingControl.setErrors({ matchControl: true });\n } else {\n matchingControl.setErrors(null);\n }\n return null;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAIA;;;;AAIG;MACU,WAAW,CAAA;AACtB;;;;AAIG;IACH,OAAO,GAAG,CAAC,OAAwB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE
|
1
|
+
{"version":3,"file":"form.mjs","sources":["../../../../packages/util/form/validators.ts","../../../../packages/util/form/match-control.ts","../../../../packages/util/form/form.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isChinese, isColor, isDecimal, isIdCard, isInt, isIp, isMobile, isNum, isUrl } from '@yelon/util/format';\n\n/**\n * A set of validators for reactive forms\n *\n * 一套用于响应式表单的验证器\n */\nexport class _Validators {\n /**\n * Wheter is number\n *\n * 是否为数字\n */\n static num(control: AbstractControl): ValidationErrors | null {\n return isNum(control.value) ? null : { num: true };\n }\n\n /**\n * Wheter is integer\n *\n * 是否为整数\n */\n static int(control: AbstractControl): ValidationErrors | null {\n return isInt(control.value) ? null : { int: true };\n }\n\n /**\n * Wheter is decimal\n *\n * 是否为小数点数值\n */\n static decimal(control: AbstractControl): ValidationErrors | null {\n return isDecimal(control.value) ? null : { decimal: true };\n }\n\n /**\n * Wheter is People's Republic of China identity card\n *\n * 是否为中华人民共和国居民身份证\n */\n static idCard(control: AbstractControl): ValidationErrors | null {\n return isIdCard(control.value) ? null : { idCard: true };\n }\n\n /**\n * Wheter is china mobile (China)\n *\n * 是否为手机号(中国)\n */\n static mobile(control: AbstractControl): ValidationErrors | null {\n return isMobile(control.value) ? null : { mobile: true };\n }\n\n /**\n * Wheter is url address\n *\n * 是否URL地址\n */\n static url(control: AbstractControl): ValidationErrors | null {\n return isUrl(control.value) ? null : { url: true };\n }\n\n /**\n * Wheter is IPv4 address (Support v4, v6)\n *\n * 是否IP4地址(支持v4、v6)\n */\n static ip(control: AbstractControl): ValidationErrors | null {\n return isIp(control.value) ? null : { ip: true };\n }\n\n /**\n * Wheter is color\n *\n * 是否颜色代码值\n */\n static color(control: AbstractControl): ValidationErrors | null {\n return isColor(control.value) ? null : { color: true };\n }\n\n /**\n * Wheter is chinese\n *\n * 是否中文\n */\n static chinese(control: AbstractControl): ValidationErrors | null {\n return isChinese(control.value) ? null : { chinese: true };\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\n/**\n * Match two control values\n *\n * 匹配两个控件值\n * ```ts\n * this.form = new FormGroup({\n * pwd: new FormControl(''),\n * repwd: new FormControl(''),\n * }, {\n * validators: MatchControl('pwd', 'repwd'),\n * });\n * ```\n */\nexport function MatchControl(controlName: string, matchingControlName: string): ValidatorFn {\n return (formGroup: AbstractControl) => {\n const control = formGroup.get(controlName)!;\n const matchingControl = formGroup.get(matchingControlName)!;\n if (matchingControl.errors && !matchingControl.errors.matchControl) {\n return null;\n }\n if (control.value !== matchingControl.value) {\n matchingControl.setErrors({ matchControl: true });\n } else {\n matchingControl.setErrors(null);\n }\n return null;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAIA;;;;AAIG;MACU,WAAW,CAAA;AACtB;;;;AAIG;IACH,OAAO,GAAG,CAAC,OAAwB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;;AAGpD;;;;AAIG;IACH,OAAO,GAAG,CAAC,OAAwB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;;AAGpD;;;;AAIG;IACH,OAAO,OAAO,CAAC,OAAwB,EAAA;AACrC,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;;AAG5D;;;;AAIG;IACH,OAAO,MAAM,CAAC,OAAwB,EAAA;AACpC,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;;AAG1D;;;;AAIG;IACH,OAAO,MAAM,CAAC,OAAwB,EAAA;AACpC,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;;AAG1D;;;;AAIG;IACH,OAAO,GAAG,CAAC,OAAwB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;;AAGpD;;;;AAIG;IACH,OAAO,EAAE,CAAC,OAAwB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;;AAGlD;;;;AAIG;IACH,OAAO,KAAK,CAAC,OAAwB,EAAA;AACnC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;;AAGxD;;;;AAIG;IACH,OAAO,OAAO,CAAC,OAAwB,EAAA;AACrC,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE7D;;ACxFD;;;;;;;;;;;;AAYG;AACa,SAAA,YAAY,CAAC,WAAmB,EAAE,mBAA2B,EAAA;IAC3E,OAAO,CAAC,SAA0B,KAAI;QACpC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAE;QAC3C,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAE;QAC3D,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE;AAClE,YAAA,OAAO,IAAI;;QAEb,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,EAAE;YAC3C,eAAe,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;aAC5C;AACL,YAAA,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC;;AAEjC,QAAA,OAAO,IAAI;AACb,KAAC;AACH;;AC7BA;;AAEG;;;;"}
|
package/fesm2022/format.mjs
CHANGED
@@ -410,10 +410,10 @@ class CurrencyService {
|
|
410
410
|
: integerRes + (decimalRes === '' ? '' : `点${decimalRes}`));
|
411
411
|
return ret;
|
412
412
|
}
|
413
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
414
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
413
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: CurrencyService, deps: [{ token: i1.YunzaiConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
414
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: CurrencyService, providedIn: 'root' }); }
|
415
415
|
}
|
416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: CurrencyService, decorators: [{
|
417
417
|
type: Injectable,
|
418
418
|
args: [{ providedIn: 'root' }]
|
419
419
|
}], ctorParameters: () => [{ type: i1.YunzaiConfigService }] });
|
package/fesm2022/format.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"format.mjs","sources":["../../../../packages/util/format/string.ts","../../../../packages/util/format/validate.ts","../../../../packages/util/format/currency.types.ts","../../../../packages/util/format/currency.service.ts","../../../../packages/util/format/format.ts"],"sourcesContent":["import { deepGet } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n/**\n * String formatting\n *\n * 字符串格式化\n * ```\n * format('this is ${name}', { name: 'asdf' })\n * // output: this is asdf\n * format('this is ${user.name}', { user: { name: 'asdf' } }, true)\n * // output: this is asdf\n * ```\n */\nexport function format(\n str: string | null | undefined,\n obj: NzSafeAny | null | undefined,\n needDeepGet: boolean = false\n): string {\n return (str || '').replace(/\\${([^}]+)}/g, (_work: string, key: string) =>\n needDeepGet ? deepGet(obj, key.split('.'), '') : (obj || {})[key] || ''\n );\n}\n\nexport interface FormatMaskOption {\n mask: string;\n tokens?: { [key: string]: FormatMaskToken };\n}\n\nexport interface FormatMaskToken {\n pattern: RegExp;\n default?: NzSafeAny;\n transform?: (char: string) => string;\n}\n\n/**\n * Format mask\n *\n * 格式化掩码\n *\n * | 字符 | 描述 |\n * | --- | --- |\n * | `0` | 任意数字,若该位置字符不符合,则默认为 `0` 填充 |\n * | `9` | 任意数字 |\n * | `#` | 任意字符 |\n * | `U` | 转换大写 |\n * | `L` | 转换小写 |\n * | `*` | 转换为 `*` 字符 |\n *\n * ```ts\n * formatMask('123', '(###)') => (123)\n * formatMask('15900000000', '999****9999') => 159****0000\n * ```\n */\nexport function formatMask(value: string, option: string | FormatMaskOption): string {\n if (!value) {\n return '';\n }\n const opt: FormatMaskOption = {\n ...(typeof option === 'string' ? { mask: option } : option)\n };\n const tokens: { [key: string]: FormatMaskToken } = {\n '0': { pattern: /\\d/, default: '0' },\n '9': { pattern: /\\d/ },\n '#': { pattern: /[a-zA-Z0-9]/ },\n U: {\n pattern: /[a-zA-Z]/,\n transform: char => char.toLocaleUpperCase()\n },\n L: {\n pattern: /[a-zA-Z]/,\n transform: char => char.toLocaleLowerCase()\n },\n '*': {\n pattern: /.*/,\n transform: _ => `*`\n },\n ...opt.tokens\n };\n\n const splitValue = value.split('');\n return opt.mask\n .split('')\n .reduce((res, cur) => {\n const token = tokens[cur];\n if (!token) {\n res.push(cur);\n return res;\n }\n\n const value = splitValue.shift() ?? '';\n if (!token.pattern.test(value)) {\n if (token.default) res.push(token.default);\n return res;\n }\n\n if (typeof token.transform === 'function') {\n res.push(token.transform(value));\n } else {\n res.push(value);\n }\n return res;\n }, [] as string[])\n .join('');\n}\n","export const REGEX_STR = {\n num: `(([-+]?\\\\d+\\\\.\\\\d+)|([-+]?\\\\d+)|([-+]?\\\\.\\\\d+))(?:[eE]([-+]?\\\\d+))?`,\n idCard: `(^\\\\d{15}$)|(^\\\\d{17}(?:[0-9]|X)$)`,\n mobile: `^(0|\\\\+?86|17951)?1[0-9]{10}$`,\n url: `(((^https?:(?:\\/\\/)?)(?:[-;:&=\\\\+\\\\$,\\\\w]+@)?[A-Za-z0-9.-]+(?::\\\\d+)?|(?:www.|[-;:&=\\\\+\\\\$,\\\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\\\+~%\\\\/.\\\\w-_]*)?\\\\??(?:[-\\\\+=&;%@.\\\\w_]*)#?(?:[\\\\w]*))?)`,\n ip: `(?:^(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}$)|(?:^(?:(?:[a-fA-F\\\\d]{1,4}:){7}(?:[a-fA-F\\\\d]{1,4}|:)|(?:[a-fA-F\\\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|:[a-fA-F\\\\d]{1,4}|:)|(?:[a-fA-F\\\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\\\d]{1,4}:){4}(?:(?::[a-fA-F\\\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\\\d]{1,4}:){3}(?:(?::[a-fA-F\\\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\\\d]{1,4}:){2}(?:(?::[a-fA-F\\\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\\\d]{1,4}:){1}(?:(?::[a-fA-F\\\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)`,\n color: `(?:#|0x)(?:[a-f0-9]{3}|[a-f0-9]{6})\\\\b|(?:rgb|hsl)a?\\\\([^\\\\)]*\\\\)`,\n chinese: `[\\u4e00-\\u9fa5]+`\n};\n\nfunction genRegex(str: string, flags?: string): RegExp {\n return new RegExp(`^${str}$`, flags);\n}\n\nexport const REGEX = {\n num: genRegex(REGEX_STR.num),\n idCard: genRegex(REGEX_STR.idCard, 'i'),\n mobile: genRegex(REGEX_STR.mobile),\n url: genRegex(REGEX_STR.url),\n ip: genRegex(REGEX_STR.ip),\n color: genRegex(REGEX_STR.color),\n chinese: genRegex(REGEX_STR.chinese)\n};\n\n/**\n * Wheter is number\n *\n * 是否为数字\n */\nexport function isNum(value: string | number): boolean {\n return REGEX.num.test(value.toString());\n}\n\n/**\n * Wheter is integer\n *\n * 是否为整数\n */\nexport function isInt(value: string | number): boolean {\n return isNum(value) && parseInt(value.toString(), 10).toString() === value.toString();\n}\n\n/**\n * Wheter is decimal\n *\n * 是否为小数点数值\n */\nexport function isDecimal(value: string | number): boolean {\n return isNum(value) && !isInt(value);\n}\n\n/**\n * Wheter is People's Republic of China identity card\n *\n * 是否为中华人民共和国居民身份证\n */\nexport function isIdCard(value: string): boolean {\n return REGEX.idCard.test(value);\n}\n\n/**\n * Wheter is china mobile (China)\n *\n * 是否为手机号(中国)\n */\nexport function isMobile(value: string): boolean {\n return REGEX.mobile.test(value);\n}\n\n/**\n * Wheter is url address\n *\n * 是否URL地址\n */\nexport function isUrl(url: string): boolean {\n return REGEX.url.test(url);\n}\n\n/**\n * Wheter is IPv4 address (Support v4, v6)\n *\n * 是否IP4地址(支持v4、v6)\n */\nexport function isIp(ip: string): boolean {\n return REGEX.ip.test(ip);\n}\n\n/**\n * Wheter is color\n *\n * 是否颜色代码值\n */\nexport function isColor(color: string): boolean {\n return REGEX.color.test(color);\n}\n\n/**\n * Wheter is chinese\n *\n * 是否中文\n */\nexport function isChinese(value: string): boolean {\n return REGEX.chinese.test(value);\n}\n","export type CurrencyStartingUnit = 'yuan' | 'cent';\n\nexport interface CurrencyStartingUnitOptions {\n /**\n * The starting unit of the value, `yuan` means 元, `cent` means 分, default: `yuan`\n *\n * 值的起始单位,`yuan` 元,`cent` 分,默认:`yuan`\n */\n startingUnit?: CurrencyStartingUnit;\n}\n\nexport interface CurrencyFormatOptions extends CurrencyStartingUnitOptions {\n /**\n * Using `DEFAULT_CURRENCY_CODE` when value is `true\n *\n * 是否使用 `CurrencyPipe` 来替代\n */\n useAngular?: boolean;\n /**\n * 精度,默认:`2`\n */\n precision?: number;\n /**\n * 是否忽略精度 `.0` 或 `.00` 结尾的字符,默认:`true`\n */\n ignoreZeroPrecision?: boolean;\n\n /**\n * Use anguar `currency` pipe parse when is set, pls refer to [document](https://angular.io/api/common/CurrencyPipe)\n *\n * 若指定则表示使用 Angular 自带的 `currency` 管道来解析,见[文档](https://angular.cn/api/common/CurrencyPipe)\n */\n ngCurrency?: {\n display: 'code' | 'symbol' | 'symbol-narrow';\n currencyCode?: string;\n digitsInfo?: string;\n locale?: string;\n };\n}\n\n/**\n * Large number format filter, [Document](https://ng.yunzainfo.com/util/format/en#mega)\n *\n * 大数据格式化,[文档](https://ng.yunzainfo.com/util/format/en#mega)\n */\nexport interface CurrencyMegaOptions extends CurrencyStartingUnitOptions {\n /**\n * 精度,默认:`2`\n */\n precision?: number;\n\n /**\n * 单位国际化,默认:`{Q: '京', T: '兆', B: '亿', M: '万', K: '千',}`\n */\n unitI18n?: CurrencyMegaUnitI18n;\n}\n\nexport interface CurrencyMegaResult {\n raw: number | string;\n value: string;\n unit: string;\n unitI18n: string;\n}\n\nexport const CurrencyMega_Powers = [\n { unit: 'Q', value: Math.pow(10, 15) },\n { unit: 'T', value: Math.pow(10, 12) },\n { unit: 'B', value: Math.pow(10, 9) },\n { unit: 'M', value: Math.pow(10, 6) },\n { unit: 'K', value: 1000 }\n];\n\nexport interface CurrencyMegaUnitI18n {\n Q: string;\n T: string;\n B: string;\n M: string;\n K: string;\n}\n\nexport interface CurrencyCNYOptions extends CurrencyStartingUnitOptions {\n /**\n * Whether to return to uppercase notation, default: `true`\n *\n * 是否返回大写表示法,默认:`true`\n */\n inWords?: boolean;\n /**\n * Specify negative sign, default: `negative`\n *\n * 指定负数符号,默认:`负`\n */\n minusSymbol?: string;\n}\n","import { CurrencyPipe, formatNumber } from '@angular/common';\nimport { DEFAULT_CURRENCY_CODE, Injectable, LOCALE_ID, inject } from '@angular/core';\n\nimport { YunzaiConfigService, YunzaiUtilCurrencyConfig } from '@yelon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport {\n CurrencyCNYOptions,\n CurrencyFormatOptions,\n CurrencyMegaOptions,\n CurrencyMegaResult,\n CurrencyMega_Powers\n} from './currency.types';\n\n@Injectable({ providedIn: 'root' })\nexport class CurrencyService {\n private readonly locale = inject(LOCALE_ID);\n private readonly defCurrencyCode = inject(DEFAULT_CURRENCY_CODE, { optional: true }) ?? 'USD';\n\n private c: YunzaiUtilCurrencyConfig;\n private readonly currencyPipe: CurrencyPipe;\n\n constructor(cog: YunzaiConfigService) {\n this.currencyPipe = new CurrencyPipe(this.locale, this.defCurrencyCode);\n this.c = cog.merge('utilCurrency', {\n startingUnit: 'yuan',\n megaUnit: { Q: '京', T: '兆', B: '亿', M: '万', K: '千' },\n precision: 2,\n ignoreZeroPrecision: true\n })!;\n }\n\n /**\n * Format a number with commas as thousands separators\n *\n * 格式化货币,用逗号将数字格式化为千位分隔符\n * ```ts\n * 10000 => `10,000`\n * 10000.567 => `10,000.57`\n * ```\n */\n format(value: number | string, options?: CurrencyFormatOptions): string {\n options = {\n startingUnit: this.c.startingUnit,\n precision: this.c.precision,\n ignoreZeroPrecision: this.c.ignoreZeroPrecision,\n ngCurrency: this.c.ngCurrency,\n ...options\n };\n let truthValue = Number(value);\n if (value == null || isNaN(truthValue)) {\n return '';\n }\n if (options.startingUnit === 'cent') {\n truthValue = truthValue / 100;\n }\n if (options.ngCurrency != null) {\n const cur = options.ngCurrency!;\n return this.currencyPipe.transform(\n truthValue,\n cur.currencyCode,\n cur.display,\n cur.digitsInfo,\n cur.locale || this.locale\n )!;\n }\n const res = formatNumber(\n truthValue,\n this.locale,\n `.${options.ignoreZeroPrecision ? 1 : options.precision}-${options.precision}`\n );\n return options.ignoreZeroPrecision ? res.replace(/(?:\\.[0]+)$/g, '') : res;\n }\n\n /**\n * Large number format filter\n *\n * 大数据格式化\n * ```ts\n * 1000 => { value: '1', unit: 'K', unitI18n: '千' }\n * 12456 => { value: '12.46', unit: 'K', unitI18n: '千' }\n * ```\n */\n mega(value: number | string, options?: CurrencyMegaOptions): CurrencyMegaResult {\n options = { precision: this.c.precision, unitI18n: this.c.megaUnit, startingUnit: this.c.startingUnit, ...options };\n let num = Number(value);\n const res: CurrencyMegaResult = { raw: value, value: '', unit: '', unitI18n: '' };\n if (isNaN(num) || num === 0) {\n res.value = value.toString();\n return res;\n }\n if (options.startingUnit === 'cent') {\n num = num / 100;\n }\n let abs = Math.abs(+num);\n const rounder = Math.pow(10, options.precision!);\n const isNegative = num < 0;\n for (const p of CurrencyMega_Powers) {\n let reduced = abs / p.value;\n\n reduced = Math.round(reduced * rounder) / rounder;\n\n if (reduced >= 1) {\n abs = reduced;\n res.unit = p.unit;\n break;\n }\n }\n\n res.value = (isNegative ? '-' : '') + abs;\n res.unitI18n = (options.unitI18n as { [key: string]: NzSafeAny })[res.unit];\n return res;\n }\n\n /**\n * Converted into RMB notation.\n *\n * 转化成人民币表示法\n */\n cny(value: number | string, options?: CurrencyCNYOptions): string {\n options = {\n inWords: true,\n minusSymbol: '负',\n startingUnit: this.c.startingUnit,\n ...options\n };\n\n value = Number(value);\n if (isNaN(value)) {\n return '';\n }\n if (options.startingUnit === 'cent') {\n value = value / 100;\n }\n value = value.toString();\n let integer: number | string;\n let decimal: number | string | null;\n [integer, decimal] = value.split('.');\n let symbol = '';\n if (integer.startsWith('-')) {\n symbol = options.minusSymbol!;\n integer = integer.substring(1);\n }\n if (/^-?\\d+$/.test(value)) {\n decimal = null;\n }\n integer = (+integer).toString();\n const inWords = options.inWords;\n const unit: { [key: string]: string[] } = {\n num: inWords\n ? ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '点']\n : ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '点'],\n radice: inWords\n ? [\n '',\n '拾',\n '佰',\n '仟',\n '万',\n '拾',\n '佰',\n '仟',\n '亿',\n '拾',\n '佰',\n '仟',\n '万亿',\n '拾',\n '佰',\n '仟',\n '兆',\n '拾',\n '佰',\n '仟'\n ]\n : [\n '',\n '十',\n '百',\n '千',\n '万',\n '十',\n '百',\n '千',\n '亿',\n '十',\n '百',\n '千',\n '万亿',\n '十',\n '百',\n '千',\n '兆',\n '十',\n '百',\n '千'\n ],\n dec: ['角', '分', '厘', '毫']\n };\n if (inWords) {\n value = (+value).toFixed(5).toString();\n }\n let integerRes = '';\n const integerCount = integer.length;\n if (integer === '0' || integerCount === 0) {\n integerRes = '零';\n } else {\n let cnDesc = '';\n for (let i = 0; i < integerCount; i++) {\n const n = +integer[i];\n const j = integerCount - i - 1;\n const isZero = i > 1 && n !== 0 && integer[i - 1] === '0';\n const cnZero = isZero ? '零' : '';\n const isEmpptyUnit = (n === 0 && j % 4 !== 0) || integer.substring(i - 3, i - 3 + 4) === '0000';\n const descMark = cnDesc;\n let cnNum = unit.num[n];\n\n cnDesc = isEmpptyUnit ? '' : unit.radice[j];\n // 第一位是一十\n if (i === 0 && cnNum === '一' && cnDesc === '十') cnNum = '';\n const isChangeEr =\n n > 1 &&\n cnNum === '二' && // 去除首位\n ['', '十', '百'].indexOf(cnDesc) === -1 && // 不读两\\两十\\两百\n descMark !== '十'; // 不读十两\n if (isChangeEr) cnNum = '两';\n integerRes += cnZero + cnNum + cnDesc;\n }\n }\n\n // 小数部分拼接\n let decimalRes = '';\n const decimalCount = decimal ? decimal.toString().length : 0;\n if (decimal === null) {\n decimalRes = inWords ? '整' : '';\n } else if (decimal === '0') {\n decimalRes = '零';\n } else {\n for (let i = 0; i < decimalCount; i++) {\n if (inWords && i > unit.dec.length - 1) break;\n const n = decimal[i];\n const cnZero = n === '0' ? '零' : '';\n const cnNum = unit.num[+n];\n const cnDesc = inWords ? unit.dec[i] : '';\n decimalRes += cnZero + cnNum + cnDesc;\n }\n }\n const ret =\n symbol +\n (inWords\n ? integerRes + (decimalRes === '零' ? '元整' : `元${decimalRes}`)\n : integerRes + (decimalRes === '' ? '' : `点${decimalRes}`));\n return ret;\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":"format.mjs","sources":["../../../../packages/util/format/string.ts","../../../../packages/util/format/validate.ts","../../../../packages/util/format/currency.types.ts","../../../../packages/util/format/currency.service.ts","../../../../packages/util/format/format.ts"],"sourcesContent":["import { deepGet } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n/**\n * String formatting\n *\n * 字符串格式化\n * ```\n * format('this is ${name}', { name: 'asdf' })\n * // output: this is asdf\n * format('this is ${user.name}', { user: { name: 'asdf' } }, true)\n * // output: this is asdf\n * ```\n */\nexport function format(\n str: string | null | undefined,\n obj: NzSafeAny | null | undefined,\n needDeepGet: boolean = false\n): string {\n return (str || '').replace(/\\${([^}]+)}/g, (_work: string, key: string) =>\n needDeepGet ? deepGet(obj, key.split('.'), '') : (obj || {})[key] || ''\n );\n}\n\nexport interface FormatMaskOption {\n mask: string;\n tokens?: { [key: string]: FormatMaskToken };\n}\n\nexport interface FormatMaskToken {\n pattern: RegExp;\n default?: NzSafeAny;\n transform?: (char: string) => string;\n}\n\n/**\n * Format mask\n *\n * 格式化掩码\n *\n * | 字符 | 描述 |\n * | --- | --- |\n * | `0` | 任意数字,若该位置字符不符合,则默认为 `0` 填充 |\n * | `9` | 任意数字 |\n * | `#` | 任意字符 |\n * | `U` | 转换大写 |\n * | `L` | 转换小写 |\n * | `*` | 转换为 `*` 字符 |\n *\n * ```ts\n * formatMask('123', '(###)') => (123)\n * formatMask('15900000000', '999****9999') => 159****0000\n * ```\n */\nexport function formatMask(value: string, option: string | FormatMaskOption): string {\n if (!value) {\n return '';\n }\n const opt: FormatMaskOption = {\n ...(typeof option === 'string' ? { mask: option } : option)\n };\n const tokens: { [key: string]: FormatMaskToken } = {\n '0': { pattern: /\\d/, default: '0' },\n '9': { pattern: /\\d/ },\n '#': { pattern: /[a-zA-Z0-9]/ },\n U: {\n pattern: /[a-zA-Z]/,\n transform: char => char.toLocaleUpperCase()\n },\n L: {\n pattern: /[a-zA-Z]/,\n transform: char => char.toLocaleLowerCase()\n },\n '*': {\n pattern: /.*/,\n transform: _ => `*`\n },\n ...opt.tokens\n };\n\n const splitValue = value.split('');\n return opt.mask\n .split('')\n .reduce((res, cur) => {\n const token = tokens[cur];\n if (!token) {\n res.push(cur);\n return res;\n }\n\n const value = splitValue.shift() ?? '';\n if (!token.pattern.test(value)) {\n if (token.default) res.push(token.default);\n return res;\n }\n\n if (typeof token.transform === 'function') {\n res.push(token.transform(value));\n } else {\n res.push(value);\n }\n return res;\n }, [] as string[])\n .join('');\n}\n","export const REGEX_STR = {\n num: `(([-+]?\\\\d+\\\\.\\\\d+)|([-+]?\\\\d+)|([-+]?\\\\.\\\\d+))(?:[eE]([-+]?\\\\d+))?`,\n idCard: `(^\\\\d{15}$)|(^\\\\d{17}(?:[0-9]|X)$)`,\n mobile: `^(0|\\\\+?86|17951)?1[0-9]{10}$`,\n url: `(((^https?:(?:\\/\\/)?)(?:[-;:&=\\\\+\\\\$,\\\\w]+@)?[A-Za-z0-9.-]+(?::\\\\d+)?|(?:www.|[-;:&=\\\\+\\\\$,\\\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\\\+~%\\\\/.\\\\w-_]*)?\\\\??(?:[-\\\\+=&;%@.\\\\w_]*)#?(?:[\\\\w]*))?)`,\n ip: `(?:^(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}$)|(?:^(?:(?:[a-fA-F\\\\d]{1,4}:){7}(?:[a-fA-F\\\\d]{1,4}|:)|(?:[a-fA-F\\\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|:[a-fA-F\\\\d]{1,4}|:)|(?:[a-fA-F\\\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\\\d]{1,4}:){4}(?:(?::[a-fA-F\\\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\\\d]{1,4}:){3}(?:(?::[a-fA-F\\\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\\\d]{1,4}:){2}(?:(?::[a-fA-F\\\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\\\d]{1,4}:){1}(?:(?::[a-fA-F\\\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}|(?::[a-fA-F\\\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)`,\n color: `(?:#|0x)(?:[a-f0-9]{3}|[a-f0-9]{6})\\\\b|(?:rgb|hsl)a?\\\\([^\\\\)]*\\\\)`,\n chinese: `[\\u4e00-\\u9fa5]+`\n};\n\nfunction genRegex(str: string, flags?: string): RegExp {\n return new RegExp(`^${str}$`, flags);\n}\n\nexport const REGEX = {\n num: genRegex(REGEX_STR.num),\n idCard: genRegex(REGEX_STR.idCard, 'i'),\n mobile: genRegex(REGEX_STR.mobile),\n url: genRegex(REGEX_STR.url),\n ip: genRegex(REGEX_STR.ip),\n color: genRegex(REGEX_STR.color),\n chinese: genRegex(REGEX_STR.chinese)\n};\n\n/**\n * Wheter is number\n *\n * 是否为数字\n */\nexport function isNum(value: string | number): boolean {\n return REGEX.num.test(value.toString());\n}\n\n/**\n * Wheter is integer\n *\n * 是否为整数\n */\nexport function isInt(value: string | number): boolean {\n return isNum(value) && parseInt(value.toString(), 10).toString() === value.toString();\n}\n\n/**\n * Wheter is decimal\n *\n * 是否为小数点数值\n */\nexport function isDecimal(value: string | number): boolean {\n return isNum(value) && !isInt(value);\n}\n\n/**\n * Wheter is People's Republic of China identity card\n *\n * 是否为中华人民共和国居民身份证\n */\nexport function isIdCard(value: string): boolean {\n return REGEX.idCard.test(value);\n}\n\n/**\n * Wheter is china mobile (China)\n *\n * 是否为手机号(中国)\n */\nexport function isMobile(value: string): boolean {\n return REGEX.mobile.test(value);\n}\n\n/**\n * Wheter is url address\n *\n * 是否URL地址\n */\nexport function isUrl(url: string): boolean {\n return REGEX.url.test(url);\n}\n\n/**\n * Wheter is IPv4 address (Support v4, v6)\n *\n * 是否IP4地址(支持v4、v6)\n */\nexport function isIp(ip: string): boolean {\n return REGEX.ip.test(ip);\n}\n\n/**\n * Wheter is color\n *\n * 是否颜色代码值\n */\nexport function isColor(color: string): boolean {\n return REGEX.color.test(color);\n}\n\n/**\n * Wheter is chinese\n *\n * 是否中文\n */\nexport function isChinese(value: string): boolean {\n return REGEX.chinese.test(value);\n}\n","export type CurrencyStartingUnit = 'yuan' | 'cent';\n\nexport interface CurrencyStartingUnitOptions {\n /**\n * The starting unit of the value, `yuan` means 元, `cent` means 分, default: `yuan`\n *\n * 值的起始单位,`yuan` 元,`cent` 分,默认:`yuan`\n */\n startingUnit?: CurrencyStartingUnit;\n}\n\nexport interface CurrencyFormatOptions extends CurrencyStartingUnitOptions {\n /**\n * Using `DEFAULT_CURRENCY_CODE` when value is `true\n *\n * 是否使用 `CurrencyPipe` 来替代\n */\n useAngular?: boolean;\n /**\n * 精度,默认:`2`\n */\n precision?: number;\n /**\n * 是否忽略精度 `.0` 或 `.00` 结尾的字符,默认:`true`\n */\n ignoreZeroPrecision?: boolean;\n\n /**\n * Use anguar `currency` pipe parse when is set, pls refer to [document](https://angular.io/api/common/CurrencyPipe)\n *\n * 若指定则表示使用 Angular 自带的 `currency` 管道来解析,见[文档](https://angular.cn/api/common/CurrencyPipe)\n */\n ngCurrency?: {\n display: 'code' | 'symbol' | 'symbol-narrow';\n currencyCode?: string;\n digitsInfo?: string;\n locale?: string;\n };\n}\n\n/**\n * Large number format filter, [Document](https://ng.yunzainfo.com/util/format/en#mega)\n *\n * 大数据格式化,[文档](https://ng.yunzainfo.com/util/format/en#mega)\n */\nexport interface CurrencyMegaOptions extends CurrencyStartingUnitOptions {\n /**\n * 精度,默认:`2`\n */\n precision?: number;\n\n /**\n * 单位国际化,默认:`{Q: '京', T: '兆', B: '亿', M: '万', K: '千',}`\n */\n unitI18n?: CurrencyMegaUnitI18n;\n}\n\nexport interface CurrencyMegaResult {\n raw: number | string;\n value: string;\n unit: string;\n unitI18n: string;\n}\n\nexport const CurrencyMega_Powers = [\n { unit: 'Q', value: Math.pow(10, 15) },\n { unit: 'T', value: Math.pow(10, 12) },\n { unit: 'B', value: Math.pow(10, 9) },\n { unit: 'M', value: Math.pow(10, 6) },\n { unit: 'K', value: 1000 }\n];\n\nexport interface CurrencyMegaUnitI18n {\n Q: string;\n T: string;\n B: string;\n M: string;\n K: string;\n}\n\nexport interface CurrencyCNYOptions extends CurrencyStartingUnitOptions {\n /**\n * Whether to return to uppercase notation, default: `true`\n *\n * 是否返回大写表示法,默认:`true`\n */\n inWords?: boolean;\n /**\n * Specify negative sign, default: `negative`\n *\n * 指定负数符号,默认:`负`\n */\n minusSymbol?: string;\n}\n","import { CurrencyPipe, formatNumber } from '@angular/common';\nimport { DEFAULT_CURRENCY_CODE, Injectable, LOCALE_ID, inject } from '@angular/core';\n\nimport { YunzaiConfigService, YunzaiUtilCurrencyConfig } from '@yelon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport {\n CurrencyCNYOptions,\n CurrencyFormatOptions,\n CurrencyMegaOptions,\n CurrencyMegaResult,\n CurrencyMega_Powers\n} from './currency.types';\n\n@Injectable({ providedIn: 'root' })\nexport class CurrencyService {\n private readonly locale = inject(LOCALE_ID);\n private readonly defCurrencyCode = inject(DEFAULT_CURRENCY_CODE, { optional: true }) ?? 'USD';\n\n private c: YunzaiUtilCurrencyConfig;\n private readonly currencyPipe: CurrencyPipe;\n\n constructor(cog: YunzaiConfigService) {\n this.currencyPipe = new CurrencyPipe(this.locale, this.defCurrencyCode);\n this.c = cog.merge('utilCurrency', {\n startingUnit: 'yuan',\n megaUnit: { Q: '京', T: '兆', B: '亿', M: '万', K: '千' },\n precision: 2,\n ignoreZeroPrecision: true\n })!;\n }\n\n /**\n * Format a number with commas as thousands separators\n *\n * 格式化货币,用逗号将数字格式化为千位分隔符\n * ```ts\n * 10000 => `10,000`\n * 10000.567 => `10,000.57`\n * ```\n */\n format(value: number | string, options?: CurrencyFormatOptions): string {\n options = {\n startingUnit: this.c.startingUnit,\n precision: this.c.precision,\n ignoreZeroPrecision: this.c.ignoreZeroPrecision,\n ngCurrency: this.c.ngCurrency,\n ...options\n };\n let truthValue = Number(value);\n if (value == null || isNaN(truthValue)) {\n return '';\n }\n if (options.startingUnit === 'cent') {\n truthValue = truthValue / 100;\n }\n if (options.ngCurrency != null) {\n const cur = options.ngCurrency!;\n return this.currencyPipe.transform(\n truthValue,\n cur.currencyCode,\n cur.display,\n cur.digitsInfo,\n cur.locale || this.locale\n )!;\n }\n const res = formatNumber(\n truthValue,\n this.locale,\n `.${options.ignoreZeroPrecision ? 1 : options.precision}-${options.precision}`\n );\n return options.ignoreZeroPrecision ? res.replace(/(?:\\.[0]+)$/g, '') : res;\n }\n\n /**\n * Large number format filter\n *\n * 大数据格式化\n * ```ts\n * 1000 => { value: '1', unit: 'K', unitI18n: '千' }\n * 12456 => { value: '12.46', unit: 'K', unitI18n: '千' }\n * ```\n */\n mega(value: number | string, options?: CurrencyMegaOptions): CurrencyMegaResult {\n options = { precision: this.c.precision, unitI18n: this.c.megaUnit, startingUnit: this.c.startingUnit, ...options };\n let num = Number(value);\n const res: CurrencyMegaResult = { raw: value, value: '', unit: '', unitI18n: '' };\n if (isNaN(num) || num === 0) {\n res.value = value.toString();\n return res;\n }\n if (options.startingUnit === 'cent') {\n num = num / 100;\n }\n let abs = Math.abs(+num);\n const rounder = Math.pow(10, options.precision!);\n const isNegative = num < 0;\n for (const p of CurrencyMega_Powers) {\n let reduced = abs / p.value;\n\n reduced = Math.round(reduced * rounder) / rounder;\n\n if (reduced >= 1) {\n abs = reduced;\n res.unit = p.unit;\n break;\n }\n }\n\n res.value = (isNegative ? '-' : '') + abs;\n res.unitI18n = (options.unitI18n as { [key: string]: NzSafeAny })[res.unit];\n return res;\n }\n\n /**\n * Converted into RMB notation.\n *\n * 转化成人民币表示法\n */\n cny(value: number | string, options?: CurrencyCNYOptions): string {\n options = {\n inWords: true,\n minusSymbol: '负',\n startingUnit: this.c.startingUnit,\n ...options\n };\n\n value = Number(value);\n if (isNaN(value)) {\n return '';\n }\n if (options.startingUnit === 'cent') {\n value = value / 100;\n }\n value = value.toString();\n let integer: number | string;\n let decimal: number | string | null;\n [integer, decimal] = value.split('.');\n let symbol = '';\n if (integer.startsWith('-')) {\n symbol = options.minusSymbol!;\n integer = integer.substring(1);\n }\n if (/^-?\\d+$/.test(value)) {\n decimal = null;\n }\n integer = (+integer).toString();\n const inWords = options.inWords;\n const unit: { [key: string]: string[] } = {\n num: inWords\n ? ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '点']\n : ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '点'],\n radice: inWords\n ? [\n '',\n '拾',\n '佰',\n '仟',\n '万',\n '拾',\n '佰',\n '仟',\n '亿',\n '拾',\n '佰',\n '仟',\n '万亿',\n '拾',\n '佰',\n '仟',\n '兆',\n '拾',\n '佰',\n '仟'\n ]\n : [\n '',\n '十',\n '百',\n '千',\n '万',\n '十',\n '百',\n '千',\n '亿',\n '十',\n '百',\n '千',\n '万亿',\n '十',\n '百',\n '千',\n '兆',\n '十',\n '百',\n '千'\n ],\n dec: ['角', '分', '厘', '毫']\n };\n if (inWords) {\n value = (+value).toFixed(5).toString();\n }\n let integerRes = '';\n const integerCount = integer.length;\n if (integer === '0' || integerCount === 0) {\n integerRes = '零';\n } else {\n let cnDesc = '';\n for (let i = 0; i < integerCount; i++) {\n const n = +integer[i];\n const j = integerCount - i - 1;\n const isZero = i > 1 && n !== 0 && integer[i - 1] === '0';\n const cnZero = isZero ? '零' : '';\n const isEmpptyUnit = (n === 0 && j % 4 !== 0) || integer.substring(i - 3, i - 3 + 4) === '0000';\n const descMark = cnDesc;\n let cnNum = unit.num[n];\n\n cnDesc = isEmpptyUnit ? '' : unit.radice[j];\n // 第一位是一十\n if (i === 0 && cnNum === '一' && cnDesc === '十') cnNum = '';\n const isChangeEr =\n n > 1 &&\n cnNum === '二' && // 去除首位\n ['', '十', '百'].indexOf(cnDesc) === -1 && // 不读两\\两十\\两百\n descMark !== '十'; // 不读十两\n if (isChangeEr) cnNum = '两';\n integerRes += cnZero + cnNum + cnDesc;\n }\n }\n\n // 小数部分拼接\n let decimalRes = '';\n const decimalCount = decimal ? decimal.toString().length : 0;\n if (decimal === null) {\n decimalRes = inWords ? '整' : '';\n } else if (decimal === '0') {\n decimalRes = '零';\n } else {\n for (let i = 0; i < decimalCount; i++) {\n if (inWords && i > unit.dec.length - 1) break;\n const n = decimal[i];\n const cnZero = n === '0' ? '零' : '';\n const cnNum = unit.num[+n];\n const cnDesc = inWords ? unit.dec[i] : '';\n decimalRes += cnZero + cnNum + cnDesc;\n }\n }\n const ret =\n symbol +\n (inWords\n ? integerRes + (decimalRes === '零' ? '元整' : `元${decimalRes}`)\n : integerRes + (decimalRes === '' ? '' : `点${decimalRes}`));\n return ret;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/math.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"math.mjs","sources":["../../../../packages/util/math/in-range.ts","../../../../packages/util/math/round.ts","../../../../packages/util/math/math.ts"],"sourcesContent":["import { assertNumber } from '@yelon/util/other';\n\n/**\n * Checks if `value` is between `start` and `end` to, but not including `end`. If `end` is not specified, it's set to start with `start` then set to `0`. If `start` is greater than `end` the params are swapped to support negative ranges.\n *\n * 检查 `value` 是否在 `start` 与 `end` 之间,但不包括 `end`。 如果 `end` 没有指定,那么 `start` 设置为 `0`。 如果 `start` 大于 `end`,那么参数会交换以便支持负范围。\n * ```ts\n * inRange(3, 2, 4); // true\n * inRange(4, 8); // true\n * inRange(4, 2); // false\n * inRange(2, 2); // false\n * inRange(1.2, 2); // true\n * inRange(-3, -2, -6); // true\n * ```\n */\nexport function inRange(value: number, start: number, end?: number): boolean {\n if (end === undefined) {\n end = start;\n start = 0;\n }\n assertNumber(value);\n assertNumber(start);\n assertNumber(end);\n return value >= Math.min(start, end) && value < Math.max(start, end);\n}\n","/**\n * Computes `number` rounded up to `precision`.\n *\n * 根据 `precision`(精度) 向上舍入 `number`。\n * ```ts\n * ceil(4.006); // 5\n * ceil(6.004, 2); // 6.01\n * ceil(6040, -2); // 6100\n * ```\n */\nexport function ceil(number: number, precision: number = 0): number {\n return createRound(number, precision, 'ceil');\n}\n\n/**\n * Computes `number` rounded down to `precision`.\n *\n * 根据 `precision`(精度) 向下舍入 `number`。\n * ```ts\n * floor(4.006); // 4\n * floor(0.046, 2); // 0.04\n * floor(4060, -2); // 4000\n * ```\n */\nexport function floor(number: number, precision: number = 0): number {\n return createRound(number, precision, 'floor');\n}\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * 根据 `precision`(精度) 四舍五入 `number`。\n * ```ts\n * round(4.006); // 4\n * round(4.006, 2); // 4.01\n * round(4060, -2); // 4100\n * ```\n */\nexport function round(number: number, precision: number = 0): number {\n return createRound(number, precision, 'round');\n}\n\nfunction createRound(number: number, precision: number, methodName: keyof Math): number {\n const func = Math[methodName] as (x: number) => number;\n\n precision = precision == null ? 0 : Math.min(precision, 292);\n if (!precision) {\n return func(number);\n }\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n let pair = `${number}e`.split('e');\n const value = func(Number(`${pair[0]}e${Number(pair[1]) + precision}`));\n pair = `${value}e`.split('e');\n return Number(`${pair[0]}e${Number(pair[1]) - precision}`);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;AAYG;SACa,OAAO,CAAC,KAAa,EAAE,KAAa,EAAE,GAAY,EAAA;AAChE,IAAA,IAAI,GAAG,KAAK,SAAS,EAAE;QACrB,GAAG,GAAG,KAAK
|
1
|
+
{"version":3,"file":"math.mjs","sources":["../../../../packages/util/math/in-range.ts","../../../../packages/util/math/round.ts","../../../../packages/util/math/math.ts"],"sourcesContent":["import { assertNumber } from '@yelon/util/other';\n\n/**\n * Checks if `value` is between `start` and `end` to, but not including `end`. If `end` is not specified, it's set to start with `start` then set to `0`. If `start` is greater than `end` the params are swapped to support negative ranges.\n *\n * 检查 `value` 是否在 `start` 与 `end` 之间,但不包括 `end`。 如果 `end` 没有指定,那么 `start` 设置为 `0`。 如果 `start` 大于 `end`,那么参数会交换以便支持负范围。\n * ```ts\n * inRange(3, 2, 4); // true\n * inRange(4, 8); // true\n * inRange(4, 2); // false\n * inRange(2, 2); // false\n * inRange(1.2, 2); // true\n * inRange(-3, -2, -6); // true\n * ```\n */\nexport function inRange(value: number, start: number, end?: number): boolean {\n if (end === undefined) {\n end = start;\n start = 0;\n }\n assertNumber(value);\n assertNumber(start);\n assertNumber(end);\n return value >= Math.min(start, end) && value < Math.max(start, end);\n}\n","/**\n * Computes `number` rounded up to `precision`.\n *\n * 根据 `precision`(精度) 向上舍入 `number`。\n * ```ts\n * ceil(4.006); // 5\n * ceil(6.004, 2); // 6.01\n * ceil(6040, -2); // 6100\n * ```\n */\nexport function ceil(number: number, precision: number = 0): number {\n return createRound(number, precision, 'ceil');\n}\n\n/**\n * Computes `number` rounded down to `precision`.\n *\n * 根据 `precision`(精度) 向下舍入 `number`。\n * ```ts\n * floor(4.006); // 4\n * floor(0.046, 2); // 0.04\n * floor(4060, -2); // 4000\n * ```\n */\nexport function floor(number: number, precision: number = 0): number {\n return createRound(number, precision, 'floor');\n}\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * 根据 `precision`(精度) 四舍五入 `number`。\n * ```ts\n * round(4.006); // 4\n * round(4.006, 2); // 4.01\n * round(4060, -2); // 4100\n * ```\n */\nexport function round(number: number, precision: number = 0): number {\n return createRound(number, precision, 'round');\n}\n\nfunction createRound(number: number, precision: number, methodName: keyof Math): number {\n const func = Math[methodName] as (x: number) => number;\n\n precision = precision == null ? 0 : Math.min(precision, 292);\n if (!precision) {\n return func(number);\n }\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n let pair = `${number}e`.split('e');\n const value = func(Number(`${pair[0]}e${Number(pair[1]) + precision}`));\n pair = `${value}e`.split('e');\n return Number(`${pair[0]}e${Number(pair[1]) - precision}`);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;AAYG;SACa,OAAO,CAAC,KAAa,EAAE,KAAa,EAAE,GAAY,EAAA;AAChE,IAAA,IAAI,GAAG,KAAK,SAAS,EAAE;QACrB,GAAG,GAAG,KAAK;QACX,KAAK,GAAG,CAAC;;IAEX,YAAY,CAAC,KAAK,CAAC;IACnB,YAAY,CAAC,KAAK,CAAC;IACnB,YAAY,CAAC,GAAG,CAAC;IACjB,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AACtE;;ACxBA;;;;;;;;;AASG;SACa,IAAI,CAAC,MAAc,EAAE,YAAoB,CAAC,EAAA;IACxD,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;AAC/C;AAEA;;;;;;;;;AASG;SACa,KAAK,CAAC,MAAc,EAAE,YAAoB,CAAC,EAAA;IACzD,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AAChD;AAEA;;;;;;;;;AASG;SACa,KAAK,CAAC,MAAc,EAAE,YAAoB,CAAC,EAAA;IACzD,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AAChD;AAEA,SAAS,WAAW,CAAC,MAAc,EAAE,SAAiB,EAAE,UAAsB,EAAA;AAC5E,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAA0B;AAEtD,IAAA,SAAS,GAAG,SAAS,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC;IAC5D,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;;;;IAIrB,IAAI,IAAI,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,CAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAG,EAAA,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA,CAAE,CAAC,CAAC;IACvE,IAAI,GAAG,GAAG,KAAK,CAAA,CAAA,CAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,IAAA,OAAO,MAAM,CAAC,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA,CAAE,CAAC;AAC5D;;ACvDA;;AAEG;;;;"}
|
package/fesm2022/mcache.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mcache.mjs","sources":["../../../../packages/util/mcache/localStorageUtils.ts","../../../../packages/util/mcache/mcache.ts"],"sourcesContent":["import { LayoutBasicAside, NavType, YunzaiNavTopic, YunzaiProjectInfo, YunzaiUser } from '@yelon/util/mtypes';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport const YZ_USER_KEY = '_yz_user';\nexport const YZ_PROJECT_INFO_KEY = '_yz_project_info';\nexport const YZ_CURRENT_KEY = '_yz_current';\nexport const YZ_HEADER_KEY = '_yz_header';\nexport const YZ_HEADER_TYPE_KEY = '_yz_header_type';\nexport const YZ_DEFAULT_ROUTE_KEY = '_yz_default_route';\nexport const YZ_TENANT_KEY = '_yz_tenant';\nexport const YZ_NEED_AUTH_KEY = '_yz_need_auth';\n// export const YZ_LANGS_KEY = '_yz_langs';\n// export const YZ_LANG_KEY = '_yz_lang';\n\nfunction get<T>(key: string): T | null {\n if (key === YZ_HEADER_TYPE_KEY) {\n return localStorage.getItem(key) as NzSafeAny;\n }\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : null;\n}\n\nfunction set<T>(key: string, data: T): void {\n if (key === YZ_HEADER_TYPE_KEY) {\n localStorage.setItem(YZ_HEADER_TYPE_KEY, data as string);\n return;\n }\n localStorage.setItem(key, JSON.stringify(data));\n}\n\ntype returnSet<T> = (data: T) => void;\ntype returnGet<T> = () => T | null;\n\nexport function useLocalStorageUser(): [returnSet<YunzaiUser>, returnGet<YunzaiUser>] {\n const setFn: returnSet<YunzaiUser> = user => set(YZ_USER_KEY, user);\n const getFn: returnGet<YunzaiUser> = () => get<YunzaiUser>(YZ_USER_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageProjectInfo(): [returnSet<YunzaiProjectInfo>, returnGet<YunzaiProjectInfo>] {\n const setFn: returnSet<YunzaiProjectInfo> = data => set(YZ_PROJECT_INFO_KEY, data);\n const getFn: returnGet<YunzaiProjectInfo> = () => get<YunzaiProjectInfo>(YZ_PROJECT_INFO_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageCurrent(): [returnSet<LayoutBasicAside>, returnGet<LayoutBasicAside>] {\n const setFn: returnSet<LayoutBasicAside> = data => set(YZ_CURRENT_KEY, data);\n const getFn: returnGet<LayoutBasicAside> = () => get<LayoutBasicAside>(YZ_CURRENT_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageHeaderType(): [returnSet<NavType>, returnGet<NavType>] {\n const setFn: returnSet<NavType> = data => set(YZ_HEADER_TYPE_KEY, data);\n const getFn: returnGet<NavType> = () => get<NavType>(YZ_HEADER_TYPE_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageHeader(): [returnSet<YunzaiNavTopic[]>, returnGet<YunzaiNavTopic[]>] {\n const setFn: returnSet<YunzaiNavTopic[]> = data => set(YZ_HEADER_KEY, data);\n const getFn: returnGet<YunzaiNavTopic[]> = () => get<YunzaiNavTopic[]>(YZ_HEADER_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageDefaultRoute(): [returnSet<string>, returnGet<string>] {\n const setFn: returnSet<string> = data => set(YZ_DEFAULT_ROUTE_KEY, data);\n const getFn: returnGet<string> = () => get<string>(YZ_DEFAULT_ROUTE_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageTenant(): [returnSet<string>, returnGet<string>] {\n const setFn: returnSet<string> = data => set(YZ_TENANT_KEY, data);\n const getFn: returnGet<string> = () => get<string>(YZ_TENANT_KEY);\n return [setFn, getFn];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAGO,MAAM,WAAW,GAAG
|
1
|
+
{"version":3,"file":"mcache.mjs","sources":["../../../../packages/util/mcache/localStorageUtils.ts","../../../../packages/util/mcache/mcache.ts"],"sourcesContent":["import { LayoutBasicAside, NavType, YunzaiNavTopic, YunzaiProjectInfo, YunzaiUser } from '@yelon/util/mtypes';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport const YZ_USER_KEY = '_yz_user';\nexport const YZ_PROJECT_INFO_KEY = '_yz_project_info';\nexport const YZ_CURRENT_KEY = '_yz_current';\nexport const YZ_HEADER_KEY = '_yz_header';\nexport const YZ_HEADER_TYPE_KEY = '_yz_header_type';\nexport const YZ_DEFAULT_ROUTE_KEY = '_yz_default_route';\nexport const YZ_TENANT_KEY = '_yz_tenant';\nexport const YZ_NEED_AUTH_KEY = '_yz_need_auth';\n// export const YZ_LANGS_KEY = '_yz_langs';\n// export const YZ_LANG_KEY = '_yz_lang';\n\nfunction get<T>(key: string): T | null {\n if (key === YZ_HEADER_TYPE_KEY) {\n return localStorage.getItem(key) as NzSafeAny;\n }\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : null;\n}\n\nfunction set<T>(key: string, data: T): void {\n if (key === YZ_HEADER_TYPE_KEY) {\n localStorage.setItem(YZ_HEADER_TYPE_KEY, data as string);\n return;\n }\n localStorage.setItem(key, JSON.stringify(data));\n}\n\ntype returnSet<T> = (data: T) => void;\ntype returnGet<T> = () => T | null;\n\nexport function useLocalStorageUser(): [returnSet<YunzaiUser>, returnGet<YunzaiUser>] {\n const setFn: returnSet<YunzaiUser> = user => set(YZ_USER_KEY, user);\n const getFn: returnGet<YunzaiUser> = () => get<YunzaiUser>(YZ_USER_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageProjectInfo(): [returnSet<YunzaiProjectInfo>, returnGet<YunzaiProjectInfo>] {\n const setFn: returnSet<YunzaiProjectInfo> = data => set(YZ_PROJECT_INFO_KEY, data);\n const getFn: returnGet<YunzaiProjectInfo> = () => get<YunzaiProjectInfo>(YZ_PROJECT_INFO_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageCurrent(): [returnSet<LayoutBasicAside>, returnGet<LayoutBasicAside>] {\n const setFn: returnSet<LayoutBasicAside> = data => set(YZ_CURRENT_KEY, data);\n const getFn: returnGet<LayoutBasicAside> = () => get<LayoutBasicAside>(YZ_CURRENT_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageHeaderType(): [returnSet<NavType>, returnGet<NavType>] {\n const setFn: returnSet<NavType> = data => set(YZ_HEADER_TYPE_KEY, data);\n const getFn: returnGet<NavType> = () => get<NavType>(YZ_HEADER_TYPE_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageHeader(): [returnSet<YunzaiNavTopic[]>, returnGet<YunzaiNavTopic[]>] {\n const setFn: returnSet<YunzaiNavTopic[]> = data => set(YZ_HEADER_KEY, data);\n const getFn: returnGet<YunzaiNavTopic[]> = () => get<YunzaiNavTopic[]>(YZ_HEADER_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageDefaultRoute(): [returnSet<string>, returnGet<string>] {\n const setFn: returnSet<string> = data => set(YZ_DEFAULT_ROUTE_KEY, data);\n const getFn: returnGet<string> = () => get<string>(YZ_DEFAULT_ROUTE_KEY);\n return [setFn, getFn];\n}\n\nexport function useLocalStorageTenant(): [returnSet<string>, returnGet<string>] {\n const setFn: returnSet<string> = data => set(YZ_TENANT_KEY, data);\n const getFn: returnGet<string> = () => get<string>(YZ_TENANT_KEY);\n return [setFn, getFn];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAGO,MAAM,WAAW,GAAG;AACpB,MAAM,mBAAmB,GAAG;AAC5B,MAAM,cAAc,GAAG;AACvB,MAAM,aAAa,GAAG;AACtB,MAAM,kBAAkB,GAAG;AAC3B,MAAM,oBAAoB,GAAG;AAC7B,MAAM,aAAa,GAAG;AACtB,MAAM,gBAAgB,GAAG;AAChC;AACA;AAEA,SAAS,GAAG,CAAI,GAAW,EAAA;AACzB,IAAA,IAAI,GAAG,KAAK,kBAAkB,EAAE;AAC9B,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAc;;IAE/C,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACtC,IAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;AACvC;AAEA,SAAS,GAAG,CAAI,GAAW,EAAE,IAAO,EAAA;AAClC,IAAA,IAAI,GAAG,KAAK,kBAAkB,EAAE;AAC9B,QAAA,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAc,CAAC;QACxD;;AAEF,IAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjD;SAKgB,mBAAmB,GAAA;AACjC,IAAA,MAAM,KAAK,GAA0B,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;IACnE,MAAM,KAAK,GAA0B,MAAM,GAAG,CAAa,WAAW,CAAC;AACvE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;SAEgB,0BAA0B,GAAA;AACxC,IAAA,MAAM,KAAK,GAAiC,IAAI,IAAI,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC;IAClF,MAAM,KAAK,GAAiC,MAAM,GAAG,CAAoB,mBAAmB,CAAC;AAC7F,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;SAEgB,sBAAsB,GAAA;AACpC,IAAA,MAAM,KAAK,GAAgC,IAAI,IAAI,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;IAC5E,MAAM,KAAK,GAAgC,MAAM,GAAG,CAAmB,cAAc,CAAC;AACtF,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;SAEgB,yBAAyB,GAAA;AACvC,IAAA,MAAM,KAAK,GAAuB,IAAI,IAAI,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC;IACvE,MAAM,KAAK,GAAuB,MAAM,GAAG,CAAU,kBAAkB,CAAC;AACxE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;SAEgB,qBAAqB,GAAA;AACnC,IAAA,MAAM,KAAK,GAAgC,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;IAC3E,MAAM,KAAK,GAAgC,MAAM,GAAG,CAAmB,aAAa,CAAC;AACrF,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;SAEgB,2BAA2B,GAAA;AACzC,IAAA,MAAM,KAAK,GAAsB,IAAI,IAAI,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACxE,MAAM,KAAK,GAAsB,MAAM,GAAG,CAAS,oBAAoB,CAAC;AACxE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;SAEgB,qBAAqB,GAAA;AACnC,IAAA,MAAM,KAAK,GAAsB,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;IACjE,MAAM,KAAK,GAAsB,MAAM,GAAG,CAAS,aAAa,CAAC;AACjE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvB;;ACzEA;;AAEG;;;;"}
|
package/fesm2022/mtypes.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mtypes.mjs","sources":["../../../../packages/util/mtypes/nav.types.ts","../../../../packages/util/mtypes/page.ts","../../../../packages/util/mtypes/mtypes.ts"],"sourcesContent":["import { YunzaiNavTopic } from './header-menu.type';\n\nexport enum NavType {\n APPLICATION = 'application', // 应用与服务\n GROUP = 'group', // 分组\n TILE = 'tiled', // 平铺\n BLANK = 'blank', // 空\n TABS = 'tabs' // 选项卡\n}\n\nexport interface LayoutBasicAside {\n name: string;\n intro: string;\n icon: string;\n}\n\nexport interface LayoutBasicDisplay {\n nav: boolean;\n reusetab: boolean;\n aside: boolean;\n}\n\nexport interface LayoutNavApplicationState {\n active: boolean;\n type: 'all' | 'mine' | 'other';\n topic?: YunzaiNavTopic;\n topics: YunzaiNavTopic[];\n list: YunzaiNavTopic[];\n search: string | null;\n}\n\nexport interface LayoutNavGroupState {\n topics: YunzaiNavTopic[];\n}\n","import { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface YunzaiPageParam<T> {\n pageNum?: number;\n pageSize?: number;\n pageParam?: T;\n}\n\nconst YUNZAI_PAGE = {\n PAGE_NUM: 1,\n PAGE_SIZE: 1000\n};\n\nexport interface Pageable {\n offset: number;\n pageNumber: number;\n pageSize: number;\n paged: boolean;\n sort: PageableSort;\n unpaged: boolean;\n}\n\nexport interface PageableSort {\n empty: boolean;\n sorted: boolean;\n unsorted: boolean;\n}\n\nexport interface YunzaiPageResult<T> {\n content: T[];\n empty: boolean;\n first: boolean;\n last: boolean;\n number: number;\n numberOfElements: number;\n pageable: Pageable;\n size: number;\n sort: PageableSort;\n totalElements: number;\n totalPages: number;\n}\n\nexport class YunzaiPageBuilder<T extends NzSafeAny | unknown> {\n private page: YunzaiPageParam<T> = {};\n\n public pageNum(pageNum: number): this {\n this.page.pageNum = pageNum;\n return this;\n }\n\n public pageSize(pageSize: number): this {\n this.page.pageSize = pageSize;\n return this;\n }\n\n public pageParam(param: T): this {\n this.page.pageParam = param;\n return this;\n }\n\n public default(): this {\n this.page.pageNum = YUNZAI_PAGE.PAGE_NUM;\n this.page.pageSize = YUNZAI_PAGE.PAGE_SIZE;\n return this;\n }\n\n public build(): YunzaiPageParam<T> {\n return this.page;\n }\n}\n\nexport class Page<T> {\n pageNum = 1;\n pageSize = 30;\n param?: Partial<T>;\n\n private constructor(pageNum: number, pageSize: number, param?: Partial<T>) {\n this.pageNum = pageNum;\n this.pageSize = pageSize;\n this.param = param;\n }\n\n static create<T>(): Page<T> {\n return new Page<T>(1, 30);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"IAEY
|
1
|
+
{"version":3,"file":"mtypes.mjs","sources":["../../../../packages/util/mtypes/nav.types.ts","../../../../packages/util/mtypes/page.ts","../../../../packages/util/mtypes/mtypes.ts"],"sourcesContent":["import { YunzaiNavTopic } from './header-menu.type';\n\nexport enum NavType {\n APPLICATION = 'application', // 应用与服务\n GROUP = 'group', // 分组\n TILE = 'tiled', // 平铺\n BLANK = 'blank', // 空\n TABS = 'tabs' // 选项卡\n}\n\nexport interface LayoutBasicAside {\n name: string;\n intro: string;\n icon: string;\n}\n\nexport interface LayoutBasicDisplay {\n nav: boolean;\n reusetab: boolean;\n aside: boolean;\n}\n\nexport interface LayoutNavApplicationState {\n active: boolean;\n type: 'all' | 'mine' | 'other';\n topic?: YunzaiNavTopic;\n topics: YunzaiNavTopic[];\n list: YunzaiNavTopic[];\n search: string | null;\n}\n\nexport interface LayoutNavGroupState {\n topics: YunzaiNavTopic[];\n}\n","import { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface YunzaiPageParam<T> {\n pageNum?: number;\n pageSize?: number;\n pageParam?: T;\n}\n\nconst YUNZAI_PAGE = {\n PAGE_NUM: 1,\n PAGE_SIZE: 1000\n};\n\nexport interface Pageable {\n offset: number;\n pageNumber: number;\n pageSize: number;\n paged: boolean;\n sort: PageableSort;\n unpaged: boolean;\n}\n\nexport interface PageableSort {\n empty: boolean;\n sorted: boolean;\n unsorted: boolean;\n}\n\nexport interface YunzaiPageResult<T> {\n content: T[];\n empty: boolean;\n first: boolean;\n last: boolean;\n number: number;\n numberOfElements: number;\n pageable: Pageable;\n size: number;\n sort: PageableSort;\n totalElements: number;\n totalPages: number;\n}\n\nexport class YunzaiPageBuilder<T extends NzSafeAny | unknown> {\n private page: YunzaiPageParam<T> = {};\n\n public pageNum(pageNum: number): this {\n this.page.pageNum = pageNum;\n return this;\n }\n\n public pageSize(pageSize: number): this {\n this.page.pageSize = pageSize;\n return this;\n }\n\n public pageParam(param: T): this {\n this.page.pageParam = param;\n return this;\n }\n\n public default(): this {\n this.page.pageNum = YUNZAI_PAGE.PAGE_NUM;\n this.page.pageSize = YUNZAI_PAGE.PAGE_SIZE;\n return this;\n }\n\n public build(): YunzaiPageParam<T> {\n return this.page;\n }\n}\n\nexport class Page<T> {\n pageNum = 1;\n pageSize = 30;\n param?: Partial<T>;\n\n private constructor(pageNum: number, pageSize: number, param?: Partial<T>) {\n this.pageNum = pageNum;\n this.pageSize = pageSize;\n this.param = param;\n }\n\n static create<T>(): Page<T> {\n return new Page<T>(1, 30);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"IAEY;AAAZ,CAAA,UAAY,OAAO,EAAA;AACjB,IAAA,OAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,OAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,OAAA,CAAA,MAAA,CAAA,GAAA,OAAc;AACd,IAAA,OAAA,CAAA,OAAA,CAAA,GAAA,OAAe;IACf,OAAa,CAAA,MAAA,CAAA,GAAA,MAAA,CAAA;AACf,CAAC,EANW,OAAO,KAAP,OAAO,GAMlB,EAAA,CAAA,CAAA;;ACAD,MAAM,WAAW,GAAG;AAClB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE;CACZ;MA+BY,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;QACU,IAAI,CAAA,IAAA,GAAuB,EAAE;;AAE9B,IAAA,OAAO,CAAC,OAAe,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO;AAC3B,QAAA,OAAO,IAAI;;AAGN,IAAA,QAAQ,CAAC,QAAgB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAC7B,QAAA,OAAO,IAAI;;AAGN,IAAA,SAAS,CAAC,KAAQ,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK;AAC3B,QAAA,OAAO,IAAI;;IAGN,OAAO,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,QAAQ;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,SAAS;AAC1C,QAAA,OAAO,IAAI;;IAGN,KAAK,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;;AAEnB;MAEY,IAAI,CAAA;AAKf,IAAA,WAAA,CAAoB,OAAe,EAAE,QAAgB,EAAE,KAAkB,EAAA;QAJzE,IAAO,CAAA,OAAA,GAAG,CAAC;QACX,IAAQ,CAAA,QAAA,GAAG,EAAE;AAIX,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGpB,IAAA,OAAO,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,IAAI,CAAI,CAAC,EAAE,EAAE,CAAC;;AAE5B;;ACrFD;;AAEG;;;;"}
|
package/fesm2022/other.mjs
CHANGED
@@ -231,10 +231,10 @@ class LazyService {
|
|
231
231
|
resolve(item);
|
232
232
|
});
|
233
233
|
}
|
234
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
235
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LazyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
235
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LazyService, providedIn: 'root' }); }
|
236
236
|
}
|
237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LazyService, decorators: [{
|
238
238
|
type: Injectable,
|
239
239
|
args: [{ providedIn: 'root' }]
|
240
240
|
}] });
|
@@ -532,10 +532,10 @@ class PathToRegexpService {
|
|
532
532
|
}
|
533
533
|
return this.stringToRegexp(/** @type {string} */ path, keys, options);
|
534
534
|
}
|
535
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
536
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
535
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PathToRegexpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
536
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PathToRegexpService, providedIn: 'root' }); }
|
537
537
|
}
|
538
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
538
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PathToRegexpService, decorators: [{
|
539
539
|
type: Injectable,
|
540
540
|
args: [{
|
541
541
|
providedIn: 'root'
|
package/fesm2022/other.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"other.mjs","sources":["../../../../packages/util/other/deep.ts","../../../../packages/util/other/logger.ts","../../../../packages/util/other/lazy.service.ts","../../../../packages/util/other/assert.ts","../../../../packages/util/other/path-to-regexp.service.ts","../../../../packages/util/other/resize.ts","../../../../packages/util/other/favicon.ts","../../../../packages/util/other/other.ts"],"sourcesContent":["import extend from 'extend';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n/**\n * Gets the value at `path` of `object`, like `_.get` in lodash.\n *\n * 类似 `_.get`,根据 `path` 获取安全值\n */\nexport function deepGet(obj: NzSafeAny, path: string | string[] | null | undefined, defaultValue?: unknown): NzSafeAny {\n if (!obj || path == null || path.length === 0) return defaultValue;\n if (!Array.isArray(path)) {\n path = ~path.indexOf('.') ? path.split('.') : [path];\n }\n if (path.length === 1) {\n const checkObj = obj[path[0]];\n return typeof checkObj === 'undefined' ? defaultValue : checkObj;\n }\n const res = path.reduce((o, k) => (o || {})[k], obj);\n return typeof res === 'undefined' ? defaultValue : res;\n}\n\n/**\n * Base on [extend](https://github.com/justmoon/node-extend) deep copy.\n *\n * 基于 [extend](https://github.com/justmoon/node-extend) 的深度拷贝\n *\n * NOTE: Don't a lot of recursion, maybe performance issues\n */\nexport function deepCopy<T extends { [key: string]: NzSafeAny } = NzSafeAny>(obj: T | null | undefined): T {\n const result = extend(true, {}, { _: obj });\n return result._ as T;\n}\n\n/**\n * Deep merge object.\n *\n * 深度合并对象\n *\n * @param original 原始对象\n * @param arrayProcessMethod 数组处理方式\n * - `true` 表示替换新值,不管新值为哪种类型\n * - `false` 表示会合并整个数组(将旧数据与新数据合并成新数组)\n * @param objects 要合并的对象\n */\nexport function deepMergeKey(original: unknown, arrayProcessMethod: boolean, ...objects: NzSafeAny[]): NzSafeAny {\n if (Array.isArray(original) || typeof original !== 'object') return original;\n\n const isObject = (v: unknown): boolean => typeof v === 'object';\n\n const merge = (target: NzSafeAny, obj: NzSafeAny): NzSafeAny => {\n Object.keys(obj)\n .filter(key => key !== '__proto__' && Object.prototype.hasOwnProperty.call(obj, key))\n .forEach(key => {\n const fromValue = obj[key];\n const toValue = target[key];\n if (Array.isArray(toValue)) {\n target[key] = arrayProcessMethod ? fromValue : [...toValue, ...fromValue];\n } else if (typeof fromValue === 'function') {\n target[key] = fromValue;\n } else if (fromValue != null && isObject(fromValue) && toValue != null && isObject(toValue)) {\n target[key] = merge(toValue, fromValue);\n } else {\n target[key] = deepCopy(fromValue);\n }\n });\n return target;\n };\n\n objects.filter(v => v != null && isObject(v)).forEach(v => merge(original, v));\n\n return original;\n}\n\n/**\n * Deep merge object.\n *\n * 深度合并对象\n */\nexport function deepMerge(original: unknown, ...objects: unknown[]): NzSafeAny {\n return deepMergeKey(original, false, ...objects);\n}\n","import type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\ndeclare const ngDevMode: boolean;\n\nconst record: Record<string, boolean> = {};\n\nexport const PREFIX = '[@YELON]:';\n\nfunction notRecorded(...args: NzSafeAny[]): boolean {\n const asRecord = args.reduce((acc, c) => acc + c.toString(), '');\n\n if (record[asRecord]) {\n return false;\n } else {\n record[asRecord] = true;\n return true;\n }\n}\n\nfunction consoleCommonBehavior(consoleFunc: (...args: NzSafeAny) => void, ...args: NzSafeAny[]): void {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && notRecorded(...args)) {\n consoleFunc(...args);\n }\n}\n\n// Warning should only be printed in dev mode and only once.\nexport const warn = (...args: NzSafeAny[]): void =>\n consoleCommonBehavior((...arg: NzSafeAny[]) => console.warn(PREFIX, ...arg), ...args);\n\nexport const warnDeprecation = (...args: NzSafeAny[]): NzSafeAny => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n return () => {};\n }\n const stack = new Error().stack;\n return consoleCommonBehavior((...arg: NzSafeAny[]) => console.warn(PREFIX, 'deprecated:', ...arg, stack), ...args);\n};\n\n// Log should only be printed in dev mode.\nexport const log = (...args: NzSafeAny[]): void => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.log(PREFIX, ...args);\n }\n};\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, filter, share } from 'rxjs';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface LazyResult {\n path: string;\n status: 'ok' | 'error' | 'loading';\n error?: NzSafeAny;\n}\n\nexport interface LazyLoadItem {\n path: string;\n options?: LazyLoadOptions;\n}\n\nexport interface LazyLoadOptions {\n innerContent?: string;\n attributes?: { [qualifiedName: string]: string };\n rel?: string;\n}\n\n/**\n * `LazyService` delay loading JS or CSS files.\n *\n * 延迟加载资源(js 或 css)服务\n */\n@Injectable({ providedIn: 'root' })\nexport class LazyService {\n private readonly doc = inject(DOCUMENT);\n\n private list: { [key: string]: boolean } = {};\n private cached: { [key: string]: LazyResult } = {};\n private _notify: BehaviorSubject<LazyResult[]> = new BehaviorSubject<LazyResult[]>([]);\n\n get change(): Observable<LazyResult[]> {\n return this._notify.asObservable().pipe(\n share(),\n filter(ls => ls.length !== 0)\n );\n }\n\n clear(): void {\n this.list = {};\n this.cached = {};\n }\n\n private attachAttributes(el: HTMLElement, attributes?: { [qualifiedName: string]: string }): void {\n if (attributes == null) return;\n\n Object.entries(attributes).forEach(([key, value]) => {\n el.setAttribute(key, value);\n });\n }\n\n /**\n * Load script or style files\n */\n load(paths: string | LazyLoadItem | Array<string | LazyLoadItem>): Promise<LazyResult[]> {\n if (!Array.isArray(paths)) {\n paths = [paths];\n }\n\n const promises: Array<Promise<LazyResult>> = [];\n paths\n .map(v => (typeof v !== 'object' ? ({ path: v } as LazyLoadItem) : v))\n .forEach(item => {\n if (item.path.endsWith('.js')) {\n promises.push(this.loadScript(item.path, item.options));\n } else {\n promises.push(this.loadStyle(item.path, item.options));\n }\n });\n\n return Promise.all(promises).then(res => {\n this._notify.next(res);\n return Promise.resolve(res);\n });\n }\n\n /**\n * Load a script file\n */\n loadScript(path: string, options?: LazyLoadOptions): Promise<LazyResult>;\n loadScript(\n path: string,\n innerContent?: string | LazyLoadOptions,\n attributes?: { [qualifiedName: string]: string }\n ): Promise<LazyResult> {\n const options: LazyLoadOptions =\n typeof innerContent === 'object'\n ? innerContent\n : {\n innerContent,\n attributes\n };\n return new Promise(resolve => {\n if (this.list[path] === true) {\n resolve({ ...this.cached[path], status: 'loading' });\n return;\n }\n\n this.list[path] = true;\n const onSuccess = (item: LazyResult): void => {\n this.cached[path] = item;\n resolve(item);\n this._notify.next([item]);\n };\n\n const node = this.doc.createElement('script') as HTMLScriptElement;\n node.type = 'text/javascript';\n node.src = path;\n this.attachAttributes(node, options.attributes);\n if (options.innerContent) {\n node.innerHTML = options.innerContent;\n }\n node.onload = () =>\n onSuccess({\n path,\n status: 'ok'\n });\n node.onerror = error =>\n onSuccess({\n path,\n status: 'error',\n error\n });\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n });\n }\n\n /**\n * Load a style file\n */\n loadStyle(path: string, options?: LazyLoadOptions): Promise<LazyResult>;\n loadStyle(\n path: string,\n rel?: string | LazyLoadOptions,\n innerContent?: string,\n attributes?: { [qualifiedName: string]: string }\n ): Promise<LazyResult> {\n const options: LazyLoadOptions =\n typeof rel === 'object'\n ? rel\n : {\n rel,\n innerContent,\n attributes\n };\n return new Promise(resolve => {\n if (this.list[path] === true) {\n resolve(this.cached[path]);\n return;\n }\n\n this.list[path] = true;\n\n const node = this.doc.createElement('link') as HTMLLinkElement;\n node.rel = options.rel ?? 'stylesheet';\n node.type = 'text/css';\n node.href = path;\n this.attachAttributes(node, options.attributes);\n if (options.innerContent) {\n node.innerHTML = options.innerContent;\n }\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n const item: LazyResult = {\n path,\n status: 'ok'\n };\n this.cached[path] = item;\n resolve(item);\n });\n }\n}\n","import { isObservable } from 'rxjs';\n\ndeclare const ngDevMode: boolean;\n\nfunction throwError(msg: string | null | undefined): void;\nfunction throwError(msg: string | null | undefined, actual: unknown, expected: unknown, comparison: string): void;\nfunction throwError(msg: string | null | undefined, actual?: unknown, expected?: unknown, comparison?: string): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw new Error(\n `ASSERTION ERROR: ${msg}${comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`}`\n );\n }\n}\n\n/**\n * Assert whether the expression and throw an error into console in dev mode\n *\n * 断言表达式是否符合预期,并在开发模式下会在控制台抛出一个错误\n */\nexport function assert(expression: boolean, msg?: string): void {\n if (!expression) {\n throwError(msg);\n }\n}\n\n/**\n * Assert whether empty (`null` or `undefined`)\n *\n * 断言是否空值(`null` 或 `undefined`)\n */\nexport function assertEmpty(actual: unknown, msg?: string): void {\n if (actual == null) {\n throwError(msg, typeof actual, 'NULL', '==');\n }\n}\n\n/**\n * Assert whether `number` type\n *\n * 断言是否 `number` 类型\n */\nexport function assertNumber(actual: unknown, msg?: string): void {\n if (!(typeof actual === 'number')) {\n throwError(msg, typeof actual, 'number', '===');\n }\n}\n\n/**\n * Assert whether `string` type\n *\n * 断言是否 `string` 类型\n */\nexport function assertString(actual: unknown, msg?: string): void {\n if (!(typeof actual === 'string')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n }\n}\n\n/**\n * Assert whether `array` type\n *\n * 断言是否 `array` 类型\n */\nexport function assertArray(actual: unknown, msg?: string): void {\n if (!Array.isArray(actual)) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'array', '===');\n }\n}\n\n/**\n * Assert whether `Observable` type\n *\n * 断言是否 `Observable` 类型\n */\nexport function assertObservable(obj: unknown, msg?: string): void {\n if (!isObservable(obj)) {\n throwError(msg, obj === null ? 'null' : typeof obj, 'Observable', '===');\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { Injectable } from '@angular/core';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathToRegexpService {\n constructor() {}\n DEFAULT_DELIMITER = '/';\n\n PATH_REGEXP = new RegExp(\n ['(\\\\\\\\.)', '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'].join('|'),\n 'g'\n );\n\n parse(str: NzSafeAny, options: NzSafeAny) {\n const tokens = [];\n let key = 0;\n let index = 0;\n let path = '';\n const defaultDelimiter = (options && options.delimiter) || this.DEFAULT_DELIMITER;\n const whitelist = (options && options.whitelist) || undefined;\n let pathEscaped = false;\n let res;\n\n while ((res = this.PATH_REGEXP.exec(str)) !== null) {\n const m = res[0];\n const escaped = res[1];\n const offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n pathEscaped = true;\n continue;\n }\n\n let prev = '';\n const name = res[2];\n const capture = res[3];\n const group = res[4];\n const modifier = res[5];\n\n if (!pathEscaped && path.length) {\n const k = path.length - 1;\n const c = path[k];\n const matches = whitelist ? whitelist.indexOf(c) > -1 : true;\n\n if (matches) {\n prev = c;\n path = path.slice(0, k);\n }\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n pathEscaped = false;\n }\n\n const repeat = modifier === '+' || modifier === '*';\n const optional = modifier === '?' || modifier === '*';\n const pattern = capture || group;\n const delimiter = prev || defaultDelimiter;\n\n tokens.push({\n name: name || key++,\n prefix: prev,\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n pattern: pattern\n ? this.escapeGroup(pattern)\n : `[^${this.escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter)}]+?`\n });\n }\n\n // Push NzSafeAny remaining characters.\n if (path || index < str.length) {\n tokens.push(path + str.substr(index));\n }\n\n return tokens;\n }\n compile(str: NzSafeAny, options: NzSafeAny) {\n return this.tokensToFunction(this.parse(str, options), options);\n }\n\n tokensToFunction(tokens: NzSafeAny, options: NzSafeAny) {\n const matches = new Array(tokens.length);\n\n for (let i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp(`^(?:${tokens[i].pattern})$`, this.flags(options));\n }\n }\n\n return function (data: NzSafeAny, options: NzSafeAny) {\n let path = '';\n const encode = (options && options.encode) || encodeURIComponent;\n const validate = options ? options.validate !== false : true;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n let segment;\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError(`Expected \"${token.name}\" to not repeat, but got array`);\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue;\n }\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n segment = encode(value[j], token);\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(`Expected all \"${token.name}\" to match \"${token.pattern}\"`);\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue;\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n segment = encode(String(value), token);\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(`Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`);\n }\n\n path += token.prefix + segment;\n continue;\n }\n\n if (token.optional) {\n continue;\n }\n\n throw new TypeError(`Expected \"${token.name}\" to be ${token.repeat ? 'an array' : 'a string'}`);\n }\n\n return path;\n };\n }\n\n escapeString(str: NzSafeAny) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1');\n }\n\n escapeGroup(group: NzSafeAny) {\n return group.replace(/([=!:$/()])/g, '\\\\$1');\n }\n\n flags(options: NzSafeAny) {\n return options && options.sensitive ? '' : 'i';\n }\n\n regexpToRegexp(path: NzSafeAny, keys: NzSafeAny) {\n if (!keys) {\n return path;\n }\n\n const groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (let i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n pattern: null\n });\n }\n }\n\n return path;\n }\n\n arrayToRegexp(path: NzSafeAny, keys: NzSafeAny, options: NzSafeAny): RegExp {\n const parts = [];\n\n for (let i = 0; i < path.length; i++) {\n parts.push(this.pathToRegexp(path[i], keys, options).source);\n }\n\n return new RegExp(`(?:${parts.join('|')})`, this.flags(options));\n }\n\n stringToRegexp(path: NzSafeAny, keys: NzSafeAny, options: NzSafeAny) {\n return this.tokensToRegExp(this.parse(path, options), keys, options);\n }\n\n tokensToRegExp(tokens: NzSafeAny, keys: NzSafeAny, options: NzSafeAny) {\n options = options || {};\n\n const strict = options.strict;\n const start = options.start !== false;\n const end = options.end !== false;\n const delimiter = options.delimiter || this.DEFAULT_DELIMITER;\n const endsWith = []\n .concat(options.endsWith || [])\n .map(this.escapeString)\n .concat('$')\n .join('|');\n let route = start ? '^' : '';\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === 'string') {\n route += this.escapeString(token);\n } else {\n const capture = token.repeat\n ? `(?:${token.pattern})(?:${this.escapeString(token.delimiter)}(?:${token.pattern}))*`\n : token.pattern;\n\n if (keys) {\n keys.push(token);\n }\n\n if (token.optional) {\n if (!token.prefix) {\n route += `(${capture})?`;\n } else {\n route += `(?:${this.escapeString(token.prefix)}(${capture}))?`;\n }\n } else {\n route += `${this.escapeString(token.prefix)}(${capture})`;\n }\n }\n }\n\n if (end) {\n if (!strict) {\n route += `(?:${this.escapeString(delimiter)})?`;\n }\n\n route += endsWith === '$' ? '$' : `(?=${endsWith})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === 'string' ? endToken[endToken.length - 1] === delimiter : endToken === undefined;\n\n if (!strict) {\n route += `(?:${this.escapeString(delimiter)}(?=${endsWith}))?`;\n }\n if (!isEndDelimited) {\n route += `(?=${this.escapeString(delimiter)}|${endsWith})`;\n }\n }\n\n return new RegExp(route, this.flags(options));\n }\n\n pathToRegexp(path: NzSafeAny, keys: NzSafeAny, options: NzSafeAny) {\n if (path instanceof RegExp) {\n return this.regexpToRegexp(path, keys);\n }\n\n if (Array.isArray(path)) {\n return this.arrayToRegexp(/** @type {!Array} */ path, keys, options);\n }\n\n return this.stringToRegexp(/** @type {string} */ path, keys, options);\n }\n}\n","export const resizeWindow = (): void => {\n window.dispatchEvent(new Event('resize'));\n};\n","import { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport function setFavicon(path: string): void {\n const link: NzSafeAny = document.querySelector(\"link[rel*='icon']\") || document.createElement('link');\n link.type = 'image/x-icon';\n link.rel = 'shortcut icon';\n link.href = path;\n document.getElementsByTagName('head')[0].appendChild(link);\n}\n\nexport function hasFavicon(url: string): Promise<boolean> {\n return new Promise(resolve => {\n let xmlHttp;\n if (window['XMLHttpRequest']) {\n xmlHttp = new XMLHttpRequest();\n }\n if (xmlHttp) {\n xmlHttp.open('Get', url, false);\n xmlHttp.send();\n if (xmlHttp.status == 404) {\n resolve(false);\n } else {\n resolve(true);\n }\n } else {\n resolve(false);\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":"other.mjs","sources":["../../../../packages/util/other/deep.ts","../../../../packages/util/other/logger.ts","../../../../packages/util/other/lazy.service.ts","../../../../packages/util/other/assert.ts","../../../../packages/util/other/path-to-regexp.service.ts","../../../../packages/util/other/resize.ts","../../../../packages/util/other/favicon.ts","../../../../packages/util/other/other.ts"],"sourcesContent":["import extend from 'extend';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n/**\n * Gets the value at `path` of `object`, like `_.get` in lodash.\n *\n * 类似 `_.get`,根据 `path` 获取安全值\n */\nexport function deepGet(obj: NzSafeAny, path: string | string[] | null | undefined, defaultValue?: unknown): NzSafeAny {\n if (!obj || path == null || path.length === 0) return defaultValue;\n if (!Array.isArray(path)) {\n path = ~path.indexOf('.') ? path.split('.') : [path];\n }\n if (path.length === 1) {\n const checkObj = obj[path[0]];\n return typeof checkObj === 'undefined' ? defaultValue : checkObj;\n }\n const res = path.reduce((o, k) => (o || {})[k], obj);\n return typeof res === 'undefined' ? defaultValue : res;\n}\n\n/**\n * Base on [extend](https://github.com/justmoon/node-extend) deep copy.\n *\n * 基于 [extend](https://github.com/justmoon/node-extend) 的深度拷贝\n *\n * NOTE: Don't a lot of recursion, maybe performance issues\n */\nexport function deepCopy<T extends { [key: string]: NzSafeAny } = NzSafeAny>(obj: T | null | undefined): T {\n const result = extend(true, {}, { _: obj });\n return result._ as T;\n}\n\n/**\n * Deep merge object.\n *\n * 深度合并对象\n *\n * @param original 原始对象\n * @param arrayProcessMethod 数组处理方式\n * - `true` 表示替换新值,不管新值为哪种类型\n * - `false` 表示会合并整个数组(将旧数据与新数据合并成新数组)\n * @param objects 要合并的对象\n */\nexport function deepMergeKey(original: unknown, arrayProcessMethod: boolean, ...objects: NzSafeAny[]): NzSafeAny {\n if (Array.isArray(original) || typeof original !== 'object') return original;\n\n const isObject = (v: unknown): boolean => typeof v === 'object';\n\n const merge = (target: NzSafeAny, obj: NzSafeAny): NzSafeAny => {\n Object.keys(obj)\n .filter(key => key !== '__proto__' && Object.prototype.hasOwnProperty.call(obj, key))\n .forEach(key => {\n const fromValue = obj[key];\n const toValue = target[key];\n if (Array.isArray(toValue)) {\n target[key] = arrayProcessMethod ? fromValue : [...toValue, ...fromValue];\n } else if (typeof fromValue === 'function') {\n target[key] = fromValue;\n } else if (fromValue != null && isObject(fromValue) && toValue != null && isObject(toValue)) {\n target[key] = merge(toValue, fromValue);\n } else {\n target[key] = deepCopy(fromValue);\n }\n });\n return target;\n };\n\n objects.filter(v => v != null && isObject(v)).forEach(v => merge(original, v));\n\n return original;\n}\n\n/**\n * Deep merge object.\n *\n * 深度合并对象\n */\nexport function deepMerge(original: unknown, ...objects: unknown[]): NzSafeAny {\n return deepMergeKey(original, false, ...objects);\n}\n","import type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\ndeclare const ngDevMode: boolean;\n\nconst record: Record<string, boolean> = {};\n\nexport const PREFIX = '[@YELON]:';\n\nfunction notRecorded(...args: NzSafeAny[]): boolean {\n const asRecord = args.reduce((acc, c) => acc + c.toString(), '');\n\n if (record[asRecord]) {\n return false;\n } else {\n record[asRecord] = true;\n return true;\n }\n}\n\nfunction consoleCommonBehavior(consoleFunc: (...args: NzSafeAny) => void, ...args: NzSafeAny[]): void {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && notRecorded(...args)) {\n consoleFunc(...args);\n }\n}\n\n// Warning should only be printed in dev mode and only once.\nexport const warn = (...args: NzSafeAny[]): void =>\n consoleCommonBehavior((...arg: NzSafeAny[]) => console.warn(PREFIX, ...arg), ...args);\n\nexport const warnDeprecation = (...args: NzSafeAny[]): NzSafeAny => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n return () => {};\n }\n const stack = new Error().stack;\n return consoleCommonBehavior((...arg: NzSafeAny[]) => console.warn(PREFIX, 'deprecated:', ...arg, stack), ...args);\n};\n\n// Log should only be printed in dev mode.\nexport const log = (...args: NzSafeAny[]): void => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.log(PREFIX, ...args);\n }\n};\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, filter, share } from 'rxjs';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface LazyResult {\n path: string;\n status: 'ok' | 'error' | 'loading';\n error?: NzSafeAny;\n}\n\nexport interface LazyLoadItem {\n path: string;\n options?: LazyLoadOptions;\n}\n\nexport interface LazyLoadOptions {\n innerContent?: string;\n attributes?: { [qualifiedName: string]: string };\n rel?: string;\n}\n\n/**\n * `LazyService` delay loading JS or CSS files.\n *\n * 延迟加载资源(js 或 css)服务\n */\n@Injectable({ providedIn: 'root' })\nexport class LazyService {\n private readonly doc = inject(DOCUMENT);\n\n private list: { [key: string]: boolean } = {};\n private cached: { [key: string]: LazyResult } = {};\n private _notify: BehaviorSubject<LazyResult[]> = new BehaviorSubject<LazyResult[]>([]);\n\n get change(): Observable<LazyResult[]> {\n return this._notify.asObservable().pipe(\n share(),\n filter(ls => ls.length !== 0)\n );\n }\n\n clear(): void {\n this.list = {};\n this.cached = {};\n }\n\n private attachAttributes(el: HTMLElement, attributes?: { [qualifiedName: string]: string }): void {\n if (attributes == null) return;\n\n Object.entries(attributes).forEach(([key, value]) => {\n el.setAttribute(key, value);\n });\n }\n\n /**\n * Load script or style files\n */\n load(paths: string | LazyLoadItem | Array<string | LazyLoadItem>): Promise<LazyResult[]> {\n if (!Array.isArray(paths)) {\n paths = [paths];\n }\n\n const promises: Array<Promise<LazyResult>> = [];\n paths\n .map(v => (typeof v !== 'object' ? ({ path: v } as LazyLoadItem) : v))\n .forEach(item => {\n if (item.path.endsWith('.js')) {\n promises.push(this.loadScript(item.path, item.options));\n } else {\n promises.push(this.loadStyle(item.path, item.options));\n }\n });\n\n return Promise.all(promises).then(res => {\n this._notify.next(res);\n return Promise.resolve(res);\n });\n }\n\n /**\n * Load a script file\n */\n loadScript(path: string, options?: LazyLoadOptions): Promise<LazyResult>;\n loadScript(\n path: string,\n innerContent?: string | LazyLoadOptions,\n attributes?: { [qualifiedName: string]: string }\n ): Promise<LazyResult> {\n const options: LazyLoadOptions =\n typeof innerContent === 'object'\n ? innerContent\n : {\n innerContent,\n attributes\n };\n return new Promise(resolve => {\n if (this.list[path] === true) {\n resolve({ ...this.cached[path], status: 'loading' });\n return;\n }\n\n this.list[path] = true;\n const onSuccess = (item: LazyResult): void => {\n this.cached[path] = item;\n resolve(item);\n this._notify.next([item]);\n };\n\n const node = this.doc.createElement('script') as HTMLScriptElement;\n node.type = 'text/javascript';\n node.src = path;\n this.attachAttributes(node, options.attributes);\n if (options.innerContent) {\n node.innerHTML = options.innerContent;\n }\n node.onload = () =>\n onSuccess({\n path,\n status: 'ok'\n });\n node.onerror = error =>\n onSuccess({\n path,\n status: 'error',\n error\n });\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n });\n }\n\n /**\n * Load a style file\n */\n loadStyle(path: string, options?: LazyLoadOptions): Promise<LazyResult>;\n loadStyle(\n path: string,\n rel?: string | LazyLoadOptions,\n innerContent?: string,\n attributes?: { [qualifiedName: string]: string }\n ): Promise<LazyResult> {\n const options: LazyLoadOptions =\n typeof rel === 'object'\n ? rel\n : {\n rel,\n innerContent,\n attributes\n };\n return new Promise(resolve => {\n if (this.list[path] === true) {\n resolve(this.cached[path]);\n return;\n }\n\n this.list[path] = true;\n\n const node = this.doc.createElement('link') as HTMLLinkElement;\n node.rel = options.rel ?? 'stylesheet';\n node.type = 'text/css';\n node.href = path;\n this.attachAttributes(node, options.attributes);\n if (options.innerContent) {\n node.innerHTML = options.innerContent;\n }\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n const item: LazyResult = {\n path,\n status: 'ok'\n };\n this.cached[path] = item;\n resolve(item);\n });\n }\n}\n","import { isObservable } from 'rxjs';\n\ndeclare const ngDevMode: boolean;\n\nfunction throwError(msg: string | null | undefined): void;\nfunction throwError(msg: string | null | undefined, actual: unknown, expected: unknown, comparison: string): void;\nfunction throwError(msg: string | null | undefined, actual?: unknown, expected?: unknown, comparison?: string): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw new Error(\n `ASSERTION ERROR: ${msg}${comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`}`\n );\n }\n}\n\n/**\n * Assert whether the expression and throw an error into console in dev mode\n *\n * 断言表达式是否符合预期,并在开发模式下会在控制台抛出一个错误\n */\nexport function assert(expression: boolean, msg?: string): void {\n if (!expression) {\n throwError(msg);\n }\n}\n\n/**\n * Assert whether empty (`null` or `undefined`)\n *\n * 断言是否空值(`null` 或 `undefined`)\n */\nexport function assertEmpty(actual: unknown, msg?: string): void {\n if (actual == null) {\n throwError(msg, typeof actual, 'NULL', '==');\n }\n}\n\n/**\n * Assert whether `number` type\n *\n * 断言是否 `number` 类型\n */\nexport function assertNumber(actual: unknown, msg?: string): void {\n if (!(typeof actual === 'number')) {\n throwError(msg, typeof actual, 'number', '===');\n }\n}\n\n/**\n * Assert whether `string` type\n *\n * 断言是否 `string` 类型\n */\nexport function assertString(actual: unknown, msg?: string): void {\n if (!(typeof actual === 'string')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n }\n}\n\n/**\n * Assert whether `array` type\n *\n * 断言是否 `array` 类型\n */\nexport function assertArray(actual: unknown, msg?: string): void {\n if (!Array.isArray(actual)) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'array', '===');\n }\n}\n\n/**\n * Assert whether `Observable` type\n *\n * 断言是否 `Observable` 类型\n */\nexport function assertObservable(obj: unknown, msg?: string): void {\n if (!isObservable(obj)) {\n throwError(msg, obj === null ? 'null' : typeof obj, 'Observable', '===');\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { Injectable } from '@angular/core';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PathToRegexpService {\n constructor() {}\n DEFAULT_DELIMITER = '/';\n\n PATH_REGEXP = new RegExp(\n ['(\\\\\\\\.)', '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'].join('|'),\n 'g'\n );\n\n parse(str: NzSafeAny, options: NzSafeAny) {\n const tokens = [];\n let key = 0;\n let index = 0;\n let path = '';\n const defaultDelimiter = (options && options.delimiter) || this.DEFAULT_DELIMITER;\n const whitelist = (options && options.whitelist) || undefined;\n let pathEscaped = false;\n let res;\n\n while ((res = this.PATH_REGEXP.exec(str)) !== null) {\n const m = res[0];\n const escaped = res[1];\n const offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n pathEscaped = true;\n continue;\n }\n\n let prev = '';\n const name = res[2];\n const capture = res[3];\n const group = res[4];\n const modifier = res[5];\n\n if (!pathEscaped && path.length) {\n const k = path.length - 1;\n const c = path[k];\n const matches = whitelist ? whitelist.indexOf(c) > -1 : true;\n\n if (matches) {\n prev = c;\n path = path.slice(0, k);\n }\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n pathEscaped = false;\n }\n\n const repeat = modifier === '+' || modifier === '*';\n const optional = modifier === '?' || modifier === '*';\n const pattern = capture || group;\n const delimiter = prev || defaultDelimiter;\n\n tokens.push({\n name: name || key++,\n prefix: prev,\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n pattern: pattern\n ? this.escapeGroup(pattern)\n : `[^${this.escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter)}]+?`\n });\n }\n\n // Push NzSafeAny remaining characters.\n if (path || index < str.length) {\n tokens.push(path + str.substr(index));\n }\n\n return tokens;\n }\n compile(str: NzSafeAny, options: NzSafeAny) {\n return this.tokensToFunction(this.parse(str, options), options);\n }\n\n tokensToFunction(tokens: NzSafeAny, options: NzSafeAny) {\n const matches = new Array(tokens.length);\n\n for (let i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp(`^(?:${tokens[i].pattern})$`, this.flags(options));\n }\n }\n\n return function (data: NzSafeAny, options: NzSafeAny) {\n let path = '';\n const encode = (options && options.encode) || encodeURIComponent;\n const validate = options ? options.validate !== false : true;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n let segment;\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError(`Expected \"${token.name}\" to not repeat, but got array`);\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue;\n }\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n segment = encode(value[j], token);\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(`Expected all \"${token.name}\" to match \"${token.pattern}\"`);\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue;\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n segment = encode(String(value), token);\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(`Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`);\n }\n\n path += token.prefix + segment;\n continue;\n }\n\n if (token.optional) {\n continue;\n }\n\n throw new TypeError(`Expected \"${token.name}\" to be ${token.repeat ? 'an array' : 'a string'}`);\n }\n\n return path;\n };\n }\n\n escapeString(str: NzSafeAny) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1');\n }\n\n escapeGroup(group: NzSafeAny) {\n return group.replace(/([=!:$/()])/g, '\\\\$1');\n }\n\n flags(options: NzSafeAny) {\n return options && options.sensitive ? '' : 'i';\n }\n\n regexpToRegexp(path: NzSafeAny, keys: NzSafeAny) {\n if (!keys) {\n return path;\n }\n\n const groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (let i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n pattern: null\n });\n }\n }\n\n return path;\n }\n\n arrayToRegexp(path: NzSafeAny, keys: NzSafeAny, options: NzSafeAny): RegExp {\n const parts = [];\n\n for (let i = 0; i < path.length; i++) {\n parts.push(this.pathToRegexp(path[i], keys, options).source);\n }\n\n return new RegExp(`(?:${parts.join('|')})`, this.flags(options));\n }\n\n stringToRegexp(path: NzSafeAny, keys: NzSafeAny, options: NzSafeAny) {\n return this.tokensToRegExp(this.parse(path, options), keys, options);\n }\n\n tokensToRegExp(tokens: NzSafeAny, keys: NzSafeAny, options: NzSafeAny) {\n options = options || {};\n\n const strict = options.strict;\n const start = options.start !== false;\n const end = options.end !== false;\n const delimiter = options.delimiter || this.DEFAULT_DELIMITER;\n const endsWith = []\n .concat(options.endsWith || [])\n .map(this.escapeString)\n .concat('$')\n .join('|');\n let route = start ? '^' : '';\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === 'string') {\n route += this.escapeString(token);\n } else {\n const capture = token.repeat\n ? `(?:${token.pattern})(?:${this.escapeString(token.delimiter)}(?:${token.pattern}))*`\n : token.pattern;\n\n if (keys) {\n keys.push(token);\n }\n\n if (token.optional) {\n if (!token.prefix) {\n route += `(${capture})?`;\n } else {\n route += `(?:${this.escapeString(token.prefix)}(${capture}))?`;\n }\n } else {\n route += `${this.escapeString(token.prefix)}(${capture})`;\n }\n }\n }\n\n if (end) {\n if (!strict) {\n route += `(?:${this.escapeString(delimiter)})?`;\n }\n\n route += endsWith === '$' ? '$' : `(?=${endsWith})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === 'string' ? endToken[endToken.length - 1] === delimiter : endToken === undefined;\n\n if (!strict) {\n route += `(?:${this.escapeString(delimiter)}(?=${endsWith}))?`;\n }\n if (!isEndDelimited) {\n route += `(?=${this.escapeString(delimiter)}|${endsWith})`;\n }\n }\n\n return new RegExp(route, this.flags(options));\n }\n\n pathToRegexp(path: NzSafeAny, keys: NzSafeAny, options: NzSafeAny) {\n if (path instanceof RegExp) {\n return this.regexpToRegexp(path, keys);\n }\n\n if (Array.isArray(path)) {\n return this.arrayToRegexp(/** @type {!Array} */ path, keys, options);\n }\n\n return this.stringToRegexp(/** @type {string} */ path, keys, options);\n }\n}\n","export const resizeWindow = (): void => {\n window.dispatchEvent(new Event('resize'));\n};\n","import { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport function setFavicon(path: string): void {\n const link: NzSafeAny = document.querySelector(\"link[rel*='icon']\") || document.createElement('link');\n link.type = 'image/x-icon';\n link.rel = 'shortcut icon';\n link.href = path;\n document.getElementsByTagName('head')[0].appendChild(link);\n}\n\nexport function hasFavicon(url: string): Promise<boolean> {\n return new Promise(resolve => {\n let xmlHttp;\n if (window['XMLHttpRequest']) {\n xmlHttp = new XMLHttpRequest();\n }\n if (xmlHttp) {\n xmlHttp.open('Get', url, false);\n xmlHttp.send();\n if (xmlHttp.status == 404) {\n resolve(false);\n } else {\n resolve(true);\n }\n } else {\n resolve(false);\n }\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAIA;;;;AAIG;SACa,OAAO,CAAC,GAAc,EAAE,IAA0C,EAAE,YAAsB,EAAA;IACxG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,YAAY;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEtD,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,OAAO,OAAO,QAAQ,KAAK,WAAW,GAAG,YAAY,GAAG,QAAQ;;IAElE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;AACpD,IAAA,OAAO,OAAO,GAAG,KAAK,WAAW,GAAG,YAAY,GAAG,GAAG;AACxD;AAEA;;;;;;AAMG;AACG,SAAU,QAAQ,CAAqD,GAAyB,EAAA;AACpG,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC3C,OAAO,MAAM,CAAC,CAAM;AACtB;AAEA;;;;;;;;;;AAUG;AACG,SAAU,YAAY,CAAC,QAAiB,EAAE,kBAA2B,EAAE,GAAG,OAAoB,EAAA;IAClG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ;IAE5E,MAAM,QAAQ,GAAG,CAAC,CAAU,KAAc,OAAO,CAAC,KAAK,QAAQ;AAE/D,IAAA,MAAM,KAAK,GAAG,CAAC,MAAiB,EAAE,GAAc,KAAe;AAC7D,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG;aACZ,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;aACnF,OAAO,CAAC,GAAG,IAAG;AACb,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;AAC1B,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,GAAG,SAAS,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC;;AACpE,iBAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AAC1C,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;;AAClB,iBAAA,IAAI,SAAS,IAAI,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,IAAI,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC3F,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;;iBAClC;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;;AAErC,SAAC,CAAC;AACJ,QAAA,OAAO,MAAM;AACf,KAAC;AAED,IAAA,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAE9E,IAAA,OAAO,QAAQ;AACjB;AAEA;;;;AAIG;SACa,SAAS,CAAC,QAAiB,EAAE,GAAG,OAAkB,EAAA;IAChE,OAAO,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAClD;;AC7EA,MAAM,MAAM,GAA4B,EAAE;AAEnC,MAAM,MAAM,GAAG;AAEtB,SAAS,WAAW,CAAC,GAAG,IAAiB,EAAA;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;AAEhE,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;AACpB,QAAA,OAAO,KAAK;;SACP;AACL,QAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI;AACvB,QAAA,OAAO,IAAI;;AAEf;AAEA,SAAS,qBAAqB,CAAC,WAAyC,EAAE,GAAG,IAAiB,EAAA;AAC5F,IAAA,IAAI,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE;AAC3E,QAAA,WAAW,CAAC,GAAG,IAAI,CAAC;;AAExB;AAEA;AACO,MAAM,IAAI,GAAG,CAAC,GAAG,IAAiB,KACvC,qBAAqB,CAAC,CAAC,GAAG,GAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;MAEzE,eAAe,GAAG,CAAC,GAAG,IAAiB,KAAe;AACjE,IAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;AACjD,QAAA,OAAO,MAAO,GAAC;;AAEjB,IAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK;IAC/B,OAAO,qBAAqB,CAAC,CAAC,GAAG,GAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;AACpH;AAEA;MACa,GAAG,GAAG,CAAC,GAAG,IAAiB,KAAU;AAChD,IAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;QACjD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;;AAEhC;;ACnBA;;;;AAIG;MAEU,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE/B,IAAI,CAAA,IAAA,GAA+B,EAAE;QACrC,IAAM,CAAA,MAAA,GAAkC,EAAE;AAC1C,QAAA,IAAA,CAAA,OAAO,GAAkC,IAAI,eAAe,CAAe,EAAE,CAAC;AA6IvF;AA3IC,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CACrC,KAAK,EAAE,EACP,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAC9B;;IAGH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;;IAGV,gBAAgB,CAAC,EAAe,EAAE,UAAgD,EAAA;QACxF,IAAI,UAAU,IAAI,IAAI;YAAE;AAExB,QAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAClD,YAAA,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AAC7B,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,IAAI,CAAC,KAA2D,EAAA;QAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;;QAGjB,MAAM,QAAQ,GAA+B,EAAE;QAC/C;aACG,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,GAAI,EAAE,IAAI,EAAE,CAAC,EAAmB,GAAG,CAAC,CAAC;aACpE,OAAO,CAAC,IAAI,IAAG;YACd,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;iBAClD;AACL,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;AAE1D,SAAC,CAAC;QAEJ,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7B,SAAC,CAAC;;AAOJ,IAAA,UAAU,CACR,IAAY,EACZ,YAAuC,EACvC,UAAgD,EAAA;AAEhD,QAAA,MAAM,OAAO,GACX,OAAO,YAAY,KAAK;AACtB,cAAE;AACF,cAAE;gBACE,YAAY;gBACZ;aACD;AACP,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;YAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;AAC5B,gBAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBACpD;;AAGF,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AACtB,YAAA,MAAM,SAAS,GAAG,CAAC,IAAgB,KAAU;AAC3C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;gBACxB,OAAO,CAAC,IAAI,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,aAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAsB;AAClE,YAAA,IAAI,CAAC,IAAI,GAAG,iBAAiB;AAC7B,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;YACf,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;AAC/C,YAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY;;AAEvC,YAAA,IAAI,CAAC,MAAM,GAAG,MACZ,SAAS,CAAC;gBACR,IAAI;AACJ,gBAAA,MAAM,EAAE;AACT,aAAA,CAAC;YACJ,IAAI,CAAC,OAAO,GAAG,KAAK,IAClB,SAAS,CAAC;gBACR,IAAI;AACJ,gBAAA,MAAM,EAAE,OAAO;gBACf;AACD,aAAA,CAAC;AACJ,YAAA,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5D,SAAC,CAAC;;AAOJ,IAAA,SAAS,CACP,IAAY,EACZ,GAA8B,EAC9B,YAAqB,EACrB,UAAgD,EAAA;AAEhD,QAAA,MAAM,OAAO,GACX,OAAO,GAAG,KAAK;AACb,cAAE;AACF,cAAE;gBACE,GAAG;gBACH,YAAY;gBACZ;aACD;AACP,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;YAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B;;AAGF,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;YAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAoB;YAC9D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,YAAY;AACtC,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;AAC/C,YAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY;;AAEvC,YAAA,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1D,YAAA,MAAM,IAAI,GAAe;gBACvB,IAAI;AACJ,gBAAA,MAAM,EAAE;aACT;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;YACxB,OAAO,CAAC,IAAI,CAAC;AACf,SAAC,CAAC;;+GAhJO,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACtBlC,SAAS,UAAU,CAAC,GAA8B,EAAE,MAAgB,EAAE,QAAkB,EAAE,UAAmB,EAAA;AAC3G,IAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;QACjD,MAAM,IAAI,KAAK,CACb,CAAoB,iBAAA,EAAA,GAAG,GAAG,UAAU,IAAI,IAAI,GAAG,EAAE,GAAG,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA,UAAA,CAAY,CAAE,CAAA,CACnH;;AAEL;AAEA;;;;AAIG;AACa,SAAA,MAAM,CAAC,UAAmB,EAAE,GAAY,EAAA;IACtD,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,CAAC,GAAG,CAAC;;AAEnB;AAEA;;;;AAIG;AACa,SAAA,WAAW,CAAC,MAAe,EAAE,GAAY,EAAA;AACvD,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,UAAU,CAAC,GAAG,EAAE,OAAO,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;;AAEhD;AAEA;;;;AAIG;AACa,SAAA,YAAY,CAAC,MAAe,EAAE,GAAY,EAAA;IACxD,IAAI,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAE;QACjC,UAAU,CAAC,GAAG,EAAE,OAAO,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;;AAEnD;AAEA;;;;AAIG;AACa,SAAA,YAAY,CAAC,MAAe,EAAE,GAAY,EAAA;IACxD,IAAI,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAE;QACjC,UAAU,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;;AAE9E;AAEA;;;;AAIG;AACa,SAAA,WAAW,CAAC,MAAe,EAAE,GAAY,EAAA;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC1B,UAAU,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;;AAE7E;AAEA;;;;AAIG;AACa,SAAA,gBAAgB,CAAC,GAAY,EAAE,GAAY,EAAA;AACzD,IAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QACtB,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC;;AAE5E;;AC9EA;MAQa,mBAAmB,CAAA;AAC9B,IAAA,WAAA,GAAA;QACA,IAAiB,CAAA,iBAAA,GAAG,GAAG;AAEvB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,MAAM,CACtB,CAAC,SAAS,EAAE,qFAAqF,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC5G,GAAG,CACJ;;IAED,KAAK,CAAC,GAAc,EAAE,OAAkB,EAAA;QACtC,MAAM,MAAM,GAAG,EAAE;QACjB,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,IAAI,GAAG,EAAE;AACb,QAAA,MAAM,gBAAgB,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,iBAAiB;QACjF,MAAM,SAAS,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAC7D,IAAI,WAAW,GAAG,KAAK;AACvB,QAAA,IAAI,GAAG;AAEP,QAAA,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE;AAClD,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAChB,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK;YACxB,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;AAChC,YAAA,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM;;YAGzB,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;gBAClB,WAAW,GAAG,IAAI;gBAClB;;YAGF,IAAI,IAAI,GAAG,EAAE;AACb,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACnB,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;AAEvB,YAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AACzB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,gBAAA,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;gBAE5D,IAAI,OAAO,EAAE;oBACX,IAAI,GAAG,CAAC;oBACR,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;;;YAK3B,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjB,IAAI,GAAG,EAAE;gBACT,WAAW,GAAG,KAAK;;YAGrB,MAAM,MAAM,GAAG,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;YACnD,MAAM,QAAQ,GAAG,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;AACrD,YAAA,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK;AAChC,YAAA,MAAM,SAAS,GAAG,IAAI,IAAI,gBAAgB;YAE1C,MAAM,CAAC,IAAI,CAAC;AACV,gBAAA,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE;AACnB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE;AACP,sBAAE,IAAI,CAAC,WAAW,CAAC,OAAO;sBACxB,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,CAAK,GAAA;AAC3G,aAAA,CAAC;;;QAIJ,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAGvC,QAAA,OAAO,MAAM;;IAEf,OAAO,CAAC,GAAc,EAAE,OAAkB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;;IAGjE,gBAAgB,CAAC,MAAiB,EAAE,OAAkB,EAAA;QACpD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBACjC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAO,IAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAI,EAAA,CAAA,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;;QAI9E,OAAO,UAAU,IAAe,EAAE,OAAkB,EAAA;YAClD,IAAI,IAAI,GAAG,EAAE;YACb,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB;AAChE,YAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,GAAG,IAAI;AAE5D,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AAEvB,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC7B,IAAI,IAAI,KAAK;oBACb;;AAGF,gBAAA,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS;AACjD,gBAAA,IAAI,OAAO;AAEX,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;wBACjB,MAAM,IAAI,SAAS,CAAC,CAAA,UAAA,EAAa,KAAK,CAAC,IAAI,CAAgC,8BAAA,CAAA,CAAC;;AAG9E,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,wBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;4BAClB;;wBAGF,MAAM,IAAI,SAAS,CAAC,CAAA,UAAA,EAAa,KAAK,CAAC,IAAI,CAAmB,iBAAA,CAAA,CAAC;;AAGjE,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAEjC,wBAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,4BAAA,MAAM,IAAI,SAAS,CAAC,CAAA,cAAA,EAAiB,KAAK,CAAC,IAAI,CAAA,YAAA,EAAe,KAAK,CAAC,OAAO,CAAA,CAAA,CAAG,CAAC;;wBAGjF,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO;;oBAG9D;;AAGF,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;oBACxF,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;AAEtC,oBAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,wBAAA,MAAM,IAAI,SAAS,CAAC,CAAA,UAAA,EAAa,KAAK,CAAC,IAAI,CAAe,YAAA,EAAA,KAAK,CAAC,OAAO,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA,CAAG,CAAC;;AAGnG,oBAAA,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO;oBAC9B;;AAGF,gBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAClB;;gBAGF,MAAM,IAAI,SAAS,CAAC,CAAA,UAAA,EAAa,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,CAAE,CAAA,CAAC;;AAGjG,YAAA,OAAO,IAAI;AACb,SAAC;;AAGH,IAAA,YAAY,CAAC,GAAc,EAAA;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,MAAM,CAAC;;AAGzD,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;;AAG9C,IAAA,KAAK,CAAC,OAAkB,EAAA;AACtB,QAAA,OAAO,OAAO,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG;;IAGhD,cAAc,CAAC,IAAe,EAAE,IAAe,EAAA;QAC7C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;;QAGb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QAE7C,IAAI,MAAM,EAAE;AACV,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,CAAC,IAAI,CAAC;AACR,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,OAAO,EAAE;AACV,iBAAA,CAAC;;;AAIN,QAAA,OAAO,IAAI;;AAGb,IAAA,aAAa,CAAC,IAAe,EAAE,IAAe,EAAE,OAAkB,EAAA;QAChE,MAAM,KAAK,GAAG,EAAE;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;;AAG9D,QAAA,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;AAGlE,IAAA,cAAc,CAAC,IAAe,EAAE,IAAe,EAAE,OAAkB,EAAA;AACjE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;;AAGtE,IAAA,cAAc,CAAC,MAAiB,EAAE,IAAe,EAAE,OAAkB,EAAA;AACnE,QAAA,OAAO,GAAG,OAAO,IAAI,EAAE;AAEvB,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAC7B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK;AACrC,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,KAAK;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB;QAC7D,MAAM,QAAQ,GAAG;AACd,aAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;AAC7B,aAAA,GAAG,CAAC,IAAI,CAAC,YAAY;aACrB,MAAM,CAAC,GAAG;aACV,IAAI,CAAC,GAAG,CAAC;QACZ,IAAI,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AAEvB,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;iBAC5B;AACL,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC;AACpB,sBAAE,CAAM,GAAA,EAAA,KAAK,CAAC,OAAO,CAAA,IAAA,EAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,OAAO,CAAK,GAAA;AACtF,sBAAE,KAAK,CAAC,OAAO;gBAEjB,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlB,gBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,wBAAA,KAAK,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,EAAA,CAAI;;yBACnB;AACL,wBAAA,KAAK,IAAI,CAAA,GAAA,EAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAI,CAAA,EAAA,OAAO,KAAK;;;qBAE3D;AACL,oBAAA,KAAK,IAAI,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAI,CAAA,EAAA,OAAO,GAAG;;;;QAK/D,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,MAAM,EAAE;gBACX,KAAK,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA,EAAA,CAAI;;AAGjD,YAAA,KAAK,IAAI,QAAQ,KAAK,GAAG,GAAG,GAAG,GAAG,CAAM,GAAA,EAAA,QAAQ,GAAG;;aAC9C;YACL,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1C,MAAM,cAAc,GAClB,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,QAAQ,KAAK,SAAS;YAErG,IAAI,CAAC,MAAM,EAAE;gBACX,KAAK,IAAI,CAAM,GAAA,EAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA,GAAA,EAAM,QAAQ,CAAA,GAAA,CAAK;;YAEhE,IAAI,CAAC,cAAc,EAAE;gBACnB,KAAK,IAAI,CAAM,GAAA,EAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAG;;;AAI9D,QAAA,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;AAG/C,IAAA,YAAY,CAAC,IAAe,EAAE,IAAe,EAAE,OAAkB,EAAA;AAC/D,QAAA,IAAI,IAAI,YAAY,MAAM,EAAE;YAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;;AAGxC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,aAAa,uBAAuB,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;;AAGtE,QAAA,OAAO,IAAI,CAAC,cAAc,uBAAuB,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;;+GAtR5D,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPM,MAAM,YAAY,GAAG,MAAW;IACrC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3C;;ACAM,SAAU,UAAU,CAAC,IAAY,EAAA;AACrC,IAAA,MAAM,IAAI,GAAc,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACrG,IAAA,IAAI,CAAC,IAAI,GAAG,cAAc;AAC1B,IAAA,IAAI,CAAC,GAAG,GAAG,eAAe;AAC1B,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,IAAA,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5D;AAEM,SAAU,UAAU,CAAC,GAAW,EAAA;AACpC,IAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AAC3B,QAAA,IAAI,OAAO;AACX,QAAA,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE;AAC5B,YAAA,OAAO,GAAG,IAAI,cAAc,EAAE;;QAEhC,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;YAC/B,OAAO,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;gBACzB,OAAO,CAAC,KAAK,CAAC;;iBACT;gBACL,OAAO,CAAC,IAAI,CAAC;;;aAEV;YACL,OAAO,CAAC,KAAK,CAAC;;AAElB,KAAC,CAAC;AACJ;;AC5BA;;AAEG;;;;"}
|