tnp-helpers 13.0.18 → 13.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"tnp-helpers.mjs","sources":["../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-array-obj.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-strings-regexes.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-environment.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-strings.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/condition-wait.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/constants.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/project.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/base-component.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/dual-component-ctrl.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/base-formly-component.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/resize-service.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/long-press.directive.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/index.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/tnp-helpers.ts"],"sourcesContent":["import { _ } from 'tnp-core/browser';\nimport * as fuzzy from 'fuzzy';\nimport { Helpers } from './index';\n\nexport class HelpersArrayObj {\n\n from(s: string | string[]): string[] {\n if (_.isArray(s)) {\n return s;\n }\n if (_.isString(s)) {\n return s.split(' ')\n }\n }\n\n second(arr) {\n if (!Array.isArray(arr) || arr.length < 2) {\n return void 0;\n }\n return arr[1];\n }\n\n arrayMoveElementBefore<T = any>(arr: any[], a: any, b: any, prop?: keyof T) {\n let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);\n _.pullAt(arr, indexA);\n let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);\n if (indexB === 0) {\n arr.unshift(a);\n } else {\n arr.splice(indexB - 1, 0, a);\n }\n return arr;\n }\n arrayMoveElementAfterB<T = any>(arr: any[], a: any, b: any, prop?: keyof T) {\n let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);\n _.pullAt(arr, indexA);\n let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);\n if (indexB === arr.length - 1) {\n arr.push(a);\n } else {\n arr.splice(indexB + 1, 0, a);\n }\n return arr;\n }\n\n uniqArray<T = any>(array: any[], uniqueProperty?: (keyof T)) {\n var seen = {};\n return array\n .filter(f => !!f)\n .filter(function (item) {\n return seen.hasOwnProperty(uniqueProperty ? item[uniqueProperty] : item) ? false\n : (seen[uniqueProperty ? item[uniqueProperty] : item] = true);\n });\n }\n\n sortKeys(obj) {\n if (_.isArray(obj)) {\n return obj.map(Helpers.arrays.sortKeys);\n }\n if (_.isObject(obj)) {\n return _.fromPairs(_.keys(obj).sort().map(key => [key, Helpers.arrays.sortKeys(obj[key])]));\n }\n return obj;\n };\n\n /**\n * Fuzzy search\n */\n fuzzy<T = any>(query: string, list: T[], valueFn?: (modelFromList: T) => string) {\n const resultsFuzzy = fuzzy.filter(\n query,\n list.map(k => valueFn ? valueFn(k) : k),\n )\n const resultsFuzzyKebab = fuzzy.filter(\n _.kebabCase(query),\n list.map(k => _.kebabCase((valueFn ? valueFn(k) : k) as any)),\n )\n const matches = resultsFuzzy.map((el) => el.string);\n const matchesKebab = resultsFuzzyKebab.map((el) => el.string);\n\n const results = (resultsFuzzy.length === 0) ? [] : list.filter(k => {\n return matches.includes((valueFn ? valueFn(k) : k) as any);\n })\n\n if (matches.length === 0 && matchesKebab.length > 0) {\n const m = list.find(k => _.kebabCase((valueFn ? valueFn(k) : k) as any) === _.first(matchesKebab));\n results.push(m);\n matches.push((valueFn ? valueFn(m) : m) as any);\n }\n\n return { matches, results };\n }\n\n}\n","import { _ } from 'tnp-core/browser';\nexport class HelpersStringsRegexes {\n\n\n\n escapeStringForRegEx(s: string) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n matchExactOnce(s: string, regex: RegExp): string {\n if (!_.isString(s) || !_.isRegExp(regex)) {\n return void 0;\n }\n const result = s.match(regex);\n if (_.isNil(result)) {\n return void 0;\n }\n return result.length >= 1 ? _.first(result) : void 0;\n }\n\n get regex() {\n return {\n /**\n * mathes\n * xxx.xxx.xxx.xxx\n * xxx.xxx.xxx.xxx:port\n * http://xxx.xxx.xxx.xxx:port\n * http://xxx.xxx.xxx.xxx\n * https://xxx.xxx.xxx.xxx:port\n * https://xxx.xxx.xxx.xxx *\n */\n get forStringWithIpHost() {\n const regex = /(http(s)?\\:\\/\\/)?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\:[0-9]+)?/;\n return regex;\n },\n /**\n * mathes\n * http://domain.com:port\n * http://domain.com\n * http://domain:port\n * http://domain\n * https://domain.com:port\n * https://domain.com\n * https://domain:port\n * https://domain\n */\n get forStringWithDomainHost() {\n const regex = /(((http(s)?\\:\\/\\/)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+(\\:[0-9]+)?)|((http(s)?\\:\\/\\/)[a-zA-Z0-9-]{1,61}))/;\n return regex;\n }\n }\n }\n}\n","import { _, /* */ /* */ } from 'tnp-core/browser';/* */\n/* */\n/* */\n/* */\n/* */\n\n\nexport class HelpersEnvironment {\n\n environmentName(filename, local_env_name) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n isValidGitRepuUrl(url: string) {\n const regex = /^([A-Za-z0-9]+@|http(|s)\\:\\/\\/)([A-Za-z0-9.]+(:\\d+)?)(?::|\\/)([\\d\\/\\w.-]+?)(\\.git)?$/;\n const res = regex.test(url);\n return res;\n }\n\n isValidIp(ip: string) {\n if (!_.isString(ip)) {\n return false;\n }\n ip = ip.trim();\n if (ip === 'localhost') {\n return true;\n }\n return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ip)\n }\n\n}\n","import { _ } from 'tnp-core/browser';\n\nexport class HelpersStrings {\n\n /**\n * Example:\n *\n * const result = interpolateString(\"I'm {age} years old!\")\n * .withParameters({ age: 29 });\n *\n * const result = interpolateString(\"The {a} says {n}, {n}, {n}!\")\n * .withParameters({ a: 'cow', n: 'moo' });\n *\n *\n * @param value string to interpolate\n * @param parameters object with parametes\n */\n interpolateString<T = any>(value: string) {\n if (typeof value !== 'string') {\n console.warn('[ss-logic][helper] Value for interpolation is not string: ', value);\n return value;\n }\n\n return {\n withParameters(parameters: T) {\n if (typeof parameters !== 'object') {\n console.warn('[ss-logic][helper] Parameters are not a object: ', parameters);\n return value;\n }\n return value.replace(/{([^{}]*)}/g, function (a, b) {\n var r = parameters[b];\n return typeof r === 'string' || typeof r === 'number' ? r : a;\n } as any);\n }\n }\n\n }\n\n numValue(pixelsCss: string) {\n // tslint:disable-next-line:radix\n return parseInt(pixelsCss.replace('px', ''));\n }\n\n /**\n * examples:\n * 'aa bb bb' => ['aa','bb','cc'],\n * 'aa' => ['aa']\n * ['aa'] => ['aa']\n */\n splitIfNeed(stringOrArr: string | string[]): string[] {\n let res = [];\n if (_.isArray(stringOrArr)) {\n res = stringOrArr.map(s => {\n return s.trim();\n })\n }\n if (_.isString(stringOrArr)) {\n res = stringOrArr.split(/\\s*[\\s,]\\s*/);\n }\n return res.filter(f => !!f && (f.trim() !== ''));\n }\n\n removeDoubleOrMoreEmptyLines(s: string) {\n s = s?.split('\\n').map(f => f.trimRight()).join('\\n');\n return s?.replace(/(\\r\\n|\\r|\\n){2,}/g, '$1\\n');\n }\n\n}\n\n","import { _ } from 'tnp-core/browser';\nimport { Helpers } from './index';\n\nexport type Condition = {\n name?: string;\n timeoutCheck?: number;\n timeoutNext?: number;\n callback: (c: Condition) => boolean | Promise<boolean>;\n errorMessage: string;\n}\n\nexport async function conditionWait(conditionAndTimeout: Condition[]) {\n await waitFor(conditionAndTimeout);\n}\n\nfunction waitFor(arr: Condition[], messageToShow: string = void 0) {\n return new Promise(async (resolve, reject) => {\n if (arr.length === 0) {\n resolve(void 0)\n } else {\n // console.log(arr.length)\n const check = arr.shift();\n if (_.isUndefined(check.timeoutCheck)) {\n check.timeoutCheck = 2000;\n }\n if (_.isUndefined(check.timeoutNext)) {\n check.timeoutNext = 4000;\n }\n const { timeoutCheck, timeoutNext, name } = check;\n // console.log(`timeoutCheck: ${timeoutCheck}`);\n // console.log(`timeoutNext: ${timeoutNext}`);\n // console.log(`Checking: ${name}`)\n const resultTrue = await Helpers.runSyncOrAsync(check.callback, check);\n // console.log(`after: ${name}`)\n if (resultTrue) {\n // console.log(`timeout 1 is set to ${timeoutNext}`)\n setTimeout(async () => {\n // console.log(`timeout 1 is over`)\n await waitFor(arr).then(() => {\n resolve(void 0);\n });\n }, timeoutNext);\n } else {\n\n arr.unshift(check);\n if (!messageToShow || check.errorMessage !== messageToShow) {\n Helpers.info(check.errorMessage);\n } else {\n // console.log(`dont show error message ${check.errorMessage}`)\n }\n // console.log(`timeout 2 is set to ${timeoutCheck}, arr.length is ${arr.length}`)\n setTimeout(async () => {\n // console.log(`timeout 2 ${timeoutCheck} ovef`)\n await waitFor(arr, check.errorMessage).then(() => {\n resolve(void 0);\n });\n }, timeoutCheck);\n }\n }\n })\n}\n","import { _ } from 'tnp-core/browser';\nimport { HelpersArrayObj } from './helpers-array-obj';\nimport { HelpersStringsRegexes } from './helpers-strings-regexes';\nimport { HelpersEnvironment } from './helpers-environment';\nimport { HelpersStrings } from './helpers-strings';\nimport { conditionWait } from './condition-wait';\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \nimport { config, ConfigModels } from 'tnp-config/browser';\nimport { Helpers } from './index';\nimport { CLASS } from 'typescript-class-helpers/browser';\nimport { Morphi } from 'morphi/browser';\nimport { CoreHelpers } from 'tnp-core/browser';\n\nexport function applyMixins(derivedCtor: any, baseCtors: any[]) {\n baseCtors.forEach(baseCtor => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {\n Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name));\n });\n });\n}\n\n// @ts-ignore\nexport class HelpersTnp extends CoreHelpers {\n\n private static _instance: HelpersTnp & CoreHelpers;\n public static get Instance() {\n if (!HelpersTnp._instance) {\n HelpersTnp._instance = new HelpersTnp();\n }\n return HelpersTnp._instance;\n }\n\n private constructor(\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n public arrays = new HelpersArrayObj(),\n public strings = new HelpersStrings(),\n\n ) {\n super();\n }\n\n CLIWRAP(f: Function, name: string) {\n CLASS.setName(f, name);\n return f;\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 async isElevated() {\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 async mesureExectionInMs(\n description: string,\n functionToExecute: Function,\n ...functionArguments: any[]): Promise<number> {\n var start = new Date()\n await Helpers.runSyncOrAsync(functionToExecute, ...functionArguments);\n //@ts-ignore\n var end = new Date() - start\n if (Morphi.IsBrowser) {\n Helpers.info(`Execution time: ${end.toString()}ms for \"${description}\"`);\n }\n/* */\n/* */\n \n return end;\n }\n\n mesureExectionInMsSync(\n description: string,\n functionToExecute: () => void): number {\n var start = new Date()\n functionToExecute();\n //@ts-ignore\n var end = new Date() - start\n if (Morphi.IsBrowser) {\n Helpers.info(`Execution time: ${end.toString()}ms for \"${description}\"`);\n }\n/* */\n/* */\n \n return end;\n }\n\n conditionWait = conditionWait;\n\n waitForCondition(conditionFn: (any) => boolean, howOfftenCheckInMs = 1000) {\n return new Promise(async (resolve, reject) => {\n\n const result = await Helpers.runSyncOrAsync(conditionFn);\n if (result) {\n resolve(void 0)\n } else {\n setTimeout(() => {\n Helpers.waitForCondition(conditionFn, howOfftenCheckInMs).then(() => {\n resolve(void 0);\n })\n }, howOfftenCheckInMs);\n }\n })\n }\n\n getBrowserVerPath(moduleName?: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n getMethodName(obj, method): string {\n var methodName = null;\n Object.getOwnPropertyNames(obj).forEach(prop => {\n if (obj[prop] === method) {\n methodName = prop;\n }\n });\n\n if (methodName !== null) {\n return methodName;\n }\n\n var proto = Object.getPrototypeOf(obj);\n if (proto) {\n return Helpers.getMethodName(proto, method);\n }\n return null;\n }\n\n fixWebpackEnv(env: Object) {\n _.forIn(env, (v, k) => {\n const value: string = v as any;\n if (value === 'true') env[k] = true;\n if (value === 'false') env[k] = false;\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/* */\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 public applyMixins = applyMixins;\n}\n\n// @ts-ignore\nexport interface HelpersTnp extends\n HelpersStringsRegexes,\n HelpersEnvironment\n/* */\n/* */\n/* */\n/* */\n \n{ }\n\napplyMixins(HelpersTnp, [\n HelpersStringsRegexes,\n HelpersEnvironment,\n/* */\n/* */\n/* */\n \n]);\n","export const BaselineSiteJoinprefix = '__';\n","/* */\n/* */\n/* */\n/* */\n/* */\n \ndeclare const global: any;\nimport { config, LibTypeArr, ConfigModels } from 'tnp-config/browser';\nimport { _, CoreConfig } from 'tnp-core/browser';\nimport { CLASS } from 'typescript-class-helpers/browser';\nimport { Models } from 'tnp-models/browser';\nimport { Morphi } from 'morphi/browser';\nimport { HelpersTnp } from './helpers';\nconst Helpers = HelpersTnp.Instance;\n\nexport type EmptyProjectStructure = {\n includeContent?: boolean;\n relativePath: string;\n relativeLinkFrom?: string;\n};\n\nexport class Project<T extends Project<any> = any>\n/* */\n/* */\n \n{\n/* */\n/* */\n \n\n protected cache = {};\n\n /**\n * Do use this variable for comparatios\n * ONLY FOR VIEWING\n */\n public readonly _type: ConfigModels.LibType;\n public browser: Pick<Project<any>, 'location' | 'name'> = {} as any;\n public location: string;\n public name: string;\n public genericName: string;\n public isWorkspace: boolean;\n public isVscodeExtension: boolean;\n public isDocker: boolean;\n public isSite: boolean;\n public isSiteInStrictMode?: boolean;\n public isSiteInDependencyMode?: boolean;\n public isCoreProject: boolean;\n public isCommandLineToolOnly: boolean;\n public isGenerated: boolean;\n public isGeneratedForRelease: boolean;\n public isWorkspaceChildProject: boolean;\n public isBasedOnOtherProject: boolean;\n public isForRecreation: boolean;\n public isContainer: boolean;\n public isSmartContainer: boolean;\n public isSmartContainerChild: boolean;\n public isContainerWithLinkedProjects: boolean;\n public isContainerChild: boolean;\n public isContainerCoreProject: boolean;\n public isStandaloneProject: boolean;\n public isMonorepo: boolean;\n public isUnknowNpmProject: boolean;\n public isNaviCli: boolean;\n public useFramework: boolean;\n public defaultPort?: number;\n public version: string;\n public lastNpmVersion?: string;\n public _routerTargetHttp?: string;\n public customizableFilesAndFolders: string[];\n public type: ConfigModels.LibType;\n public backupName: string;\n public resources: string[];\n public env: Models.env.EnvConfig;\n public allowedEnvironments: ConfigModels.EnvironmentName[];\n\n public children: T[];\n public grandpa: T;\n\n public distribution: T;\n\n public childrenThatAreLibs?: T[];\n\n public childrenThatAreClients?: T[];\n\n public childrenThatAreThirdPartyInNodeModules?: T[];\n\n public parent: T;\n\n public preview: T;\n\n public baseline: T;\n\n public static projects: Project<any>[] = [];\n /**\n * To speed up checking folder I am keeping pathes for alterdy checked folder\n * This may break things that are creating new projects\n */\n public static emptyLocations: string[] = [];\n\n static typeFrom(location: string): ConfigModels.LibType {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static unload(project: Project) {\n Project.projects = Project.projects.filter(f => f !== project);\n }\n\n public static From<T = Project<any>>(location: string): T {\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/* */\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/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static nearestTo<T = Project>(\n absoluteLocation: string,\n options?: { type?: ConfigModels.LibType; findGitRoot?: boolean; onlyOutSideNodeModules?: boolean }): T {\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/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static allProjectFrom<T = Project>(absoluteLocation: string, stopOnCwd: string = '/') {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static DefaultPortByType(type: ConfigModels.LibType): number {\n if (type === 'workspace') { return 5000; }\n if (type === 'angular-client') { return 4300; }\n if (type === 'angular-lib') { return 4250; }\n if (type === 'electron-client') { return 4350; }\n if (type === 'ionic-client') { return 8080; }\n if (type === 'docker') { return 5000; }\n if (type === 'isomorphic-lib') { return 4000; }\n if (type === 'container' || type === 'unknow-npm-project') {\n return;\n }\n }\n\n public static get isBundleMode() {\n if (Helpers.isBrowser) {\n return true;\n }\n/* */\n/* */\n \n }\n\n static get Current(): Project<any> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n/* */\n/* */\n/* */\n/* */\n \n\n static get Tnp(): Project<any> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static by<T = Project>(\n libraryType: ConfigModels.NewFactoryType,\n version: ConfigModels.FrameworkVersion\n/* */\n/* */\n \n ): T {\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 return (void 0);\n }\n\n defineProperty<T>(variableName: keyof T, classFn: Function) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public setType(this: Project, type: ConfigModels.LibType) {\n // @ts-ignore\n this._type = type;\n }\n public typeIs(this: Project, ...types: ConfigModels.LibType[]) {\n return this._type && types.includes(this._type);\n }\n\n public typeIsNot(this: Project, ...types: ConfigModels.LibType[]) {\n return !this.typeIs(...types);\n }\n\n forEmptyStructure(): EmptyProjectStructure[] {\n return [\n { relativePath: config.file.package_json, includeContent: true },\n { relativePath: config.folder.src },\n ];\n }\n\n}\n\n\nexport type ProjectBuild = { project: Project; appBuild: boolean; };\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/* */\n/* */\n \n","//#region @browser\nimport { Subscription } from 'rxjs';\nimport { OnDestroy, OnInit, Component, Input } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\n\n@Component({\n selector: 'app-base-component-meta',\n template: '<div></div>'\n})\nexport abstract class BaseComponent implements OnDestroy {\n\n // @ts-ignore\n @Input() model: any = {};\n\n handlers: Subscription[] = [];\n\n ngOnDestroy(): void {\n this.handlers.forEach(h => h.unsubscribe());\n this.handlers.length = 0;\n }\n\n\n}\n\nconst isCalledNgInitAfterInternalRefresh = Symbol()\n\nexport abstract class BaseComponentForRouter extends BaseComponent {\n\n constructor(\n private __router: Router\n ) {\n super();\n this[isCalledNgInitAfterInternalRefresh] = false;\n }\n\n\n protected isCalledNgInitAfterInternalRefresh() {\n return !!this[isCalledNgInitAfterInternalRefresh];\n }\n protected reloadNgOninitOnUrlChange() {\n this.handlers.push(this.__router.events.subscribe(event => {\n if (event instanceof NavigationEnd && this['ngOnInit']) {\n this[isCalledNgInitAfterInternalRefresh] = true;\n this['ngOnInit']();\n if (this[isCalledNgInitAfterInternalRefresh]) {\n this[isCalledNgInitAfterInternalRefresh] = false;\n }\n }\n }) as any);\n }\n\n}\n//#endregion\n","import { _ } from 'tnp-core/browser';\nimport { BaseFormlyComponent } from './base-formly-component';\nimport { CLASS } from 'typescript-class-helpers/browser';\nimport { Component, OnInit, Input, Output, AfterViewInit, } from '@angular/core';/* */\n/* */\n\nimport { FormControl, FormGroup } from '@angular/forms'/* */\n/* */\n/* */\n\nimport { Log, Level } from 'ng2-logger/browser';\nconst log = Log.create(`DualComponentController`);\n\nexport abstract class DualComponentController<T = any> {\n\n constructor(protected cmp: BaseFormlyComponent, public isFormlyMode = false) {\n\n }\n\n protected getValTemplateOptions(propertyName: string) {\n if (this.isFormlyMode) {\n const res = this.cmp.field?.templateOptions[propertyName]\n if (res === void 0 && this.cmp[propertyName]) {\n return this.cmp[propertyName];\n }\n return res;\n }\n return this.cmp[propertyName]\n }\n\n protected getValContext(propertyName: string) {\n if (this.isFormlyMode) {\n const res = this.cmp?.field[propertyName]\n if (res === void 0 && this.cmp[propertyName]) {\n return this.cmp[propertyName];\n }\n return res;\n }\n return this.cmp[propertyName]\n }\n\n get disabled() {\n return this.getValTemplateOptions('disabled') as boolean;\n }\n\n get required() {\n return this.getValTemplateOptions('required') as boolean;\n }\n\n get type() {\n if (!this.isFormlyMode) {\n return CLASS.getNameFromObject(this.cmp)\n }\n return this.getValContext('type') as boolean;\n }\n\n get label() {\n return this.getValTemplateOptions('label') as string;\n }\n\n get placeholder() {\n return this.getValTemplateOptions('placeholder') as string;\n }\n\n get defaultValue(): T {\n return this.getValContext('defaultValue') as any;\n }\n\n get formControl(): any {// FormControl { // TODO QUICK_FIX\n return this.getValContext('formControl') as any;\n }\n\n get key() {\n return this.getValContext('key') as string;\n }\n\n get path() {\n return this.getValContext('path') as string;\n }\n\n __model: any;\n get model(): any {\n if (this.isFormlyMode) {\n return this.getValContext('model') as string;\n } else {\n return this.__model;\n }\n }\n\n set model(v) {\n if (this.isFormlyMode) {\n log.w(`[DualComponentController] You can't set model in formly component mode`);\n } else {\n this.__model = v;\n }\n }\n\n __mode: any;\n get mode(): any {\n if (this.isFormlyMode) {\n return this.getValContext('mode') as string;\n } else {\n return this.__mode;\n }\n }\n\n set mode(v) {\n if (this.isFormlyMode) {\n // this.cmp.field.mode =\n // log.w(`[DualComponentController] You can't set mode in formly component mode`);\n } else {\n this.__mode = v;\n }\n }\n\n\n get value(): T {\n if (this.isFormlyMode) {\n return this.cmp.field.formControl.value;\n }\n if (_.isString(this.path)) {\n return _.get(this.cmp.model, this.path);\n }\n return this.cmp.model;\n }\n\n set value(v) {\n if (this.isFormlyMode) {\n this.cmp.field.formControl.setValue(v);\n // @ts-ignore\n this.cmp.change.next(v);\n return;\n }\n if (_.isString(this.path)) {\n _.set(this.cmp.model, this.path, v);\n } else {\n this.cmp.model = v;\n }\n }\n\n\n}\n","//#region @browser\nimport { Subscription } from 'rxjs';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\nimport { Component, OnInit, Input, Output, AfterViewInit, } from '@angular/core';/* */\n/* */\n\nimport { FormControl, FormGroup } from '@angular/forms';/* */\n/* */\n/* */\n\nimport { Log, Level } from 'ng2-logger/browser';\nimport { DualComponentController } from './dual-component-ctrl';\nimport { EventEmitter } from '@angular/core';\n\nconst log = Log.create('base formly component', Level.__NOTHING)\n\n\n@Component({\n selector: 'app-base-formly-component-meta',\n template: `<div></div>`\n}) // @ts-ignore\nexport abstract class BaseFormlyComponent<T extends DualComponentController = DualComponentController>\n extends FieldType\n implements OnInit, Partial<DualComponentController<T>>, AfterViewInit {\n\n protected DualComponentController = DualComponentController;\n public ctrl: T = {} as any;\n @Input() pizda: any;\n\n // @ts-ignore\n get mode() {\n return this.ctrl.mode;\n }\n\n // @ts-ignore\n @Input() set mode(v) {\n this.ctrl.mode = v;\n }\n @Input() disabled: boolean;\n @Input() required: boolean;\n @Input() label: string;\n @Input() placeholder: string;\n @Input() defaultValue: T;\n\n // @ts-ignore\n @Input() set model(v) {\n this.ctrl.model = v;\n }\n get model() {\n return this.ctrl.model;\n }\n @Input() path: string;\n @Output() change = new EventEmitter();\n\n\n // @ts-ignore\n @Input() set key(value: string) {\n if (this.ctrl && this.ctrl.isFormlyMode) {\n return;\n }\n this.path = value;\n }\n get key(): string {\n if (this.ctrl && this.ctrl.isFormlyMode) {\n return this.field.key as any;\n }\n return this.path;\n }\n\n // @ts-ignore\n // @Input() formControl: FormControl; // TODO QUICK_FIX\n protected handlers: Subscription[] = [];\n\n ngOnDestroy(): void {\n this.handlers.forEach(h => h.unsubscribe());\n this.handlers.length = 0;\n\n }\n\n ngAfterViewInit() {\n\n }\n\n private __field = {\n templateOptions: {\n\n }\n } as FormlyFieldConfig;\n // _model: any;\n ngOnInit() {\n // console.log('model', this.model)\n // console.log('ket', this.key)\n const isFormlyMode = !!this.field;\n log.i(`isFormlyMode: ${isFormlyMode}`);\n if (!isFormlyMode) {\n const that = this;\n Object.defineProperty(this, 'field', {\n get: function () {\n return that.__field;\n },\n set: function (v) {\n that.__field = v;\n }\n })\n }\n\n const existed = this.ctrl;\n this.ctrl = new (this.DualComponentController as any)(this, isFormlyMode);\n // @ts-ignore\n Object.keys(existed).forEach(key => {\n this.ctrl[key] = existed[key];\n });\n\n // if (!this.formControl) {\n // this.formControl = new FormControl({})\n // Object.defineProperty(this, 'field', {\n // get: () => {\n // return {\n // formControl: this.formControl\n // } as FormlyFieldConfig\n // }\n // })\n // // this.formControl = new FormControl({})\n // }\n // @ts-ignore\n this.change.next(this.ctrl.value);\n }\n\n}\n//#endregion\n","import { Injectable } from '@angular/core';\nimport * as elementResizeDetectorMaker from 'element-resize-detector';\n\n@Injectable()\nexport class ResizeService {\n private resizeDetector: any;\n\n constructor() {\n this.resizeDetector = elementResizeDetectorMaker({ strategy: 'scroll' });\n }\n\n addResizeEventListener(element: HTMLElement, handler: Function) {\n this.resizeDetector.listenTo(element, handler);\n }\n\n removeResizeEventListener(element: HTMLElement) {\n this.resizeDetector.uninstall(element);\n }\n}\n","import { Directive, Input, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n\n\nimport { _ } from 'tnp-core/browser';\nimport { Log, Level } from 'ng2-logger/browser';\nconst log = Log.create(`[tnp-helpers] long-press`\n , Level.__NOTHING\n)\n\n@Directive({ selector: '[long-press]' })\nexport class LongPress {\n\n @Input() pressDuration: number = 1000;\n\n @Output() onLongPress: EventEmitter<any> = new EventEmitter();\n @Output() onLongPressing: EventEmitter<any> = new EventEmitter();\n @Output() onLongPressEnd: EventEmitter<any> = new EventEmitter();\n\n private pressing: boolean;\n private longPressing: boolean;\n private timeout: any;\n private mouseX: number = 0;\n private mouseY: number = 0;\n\n @HostBinding('class.press')\n get press() { return this.pressing; }\n\n @HostBinding('class.longpress')\n get longPress() { return this.longPressing; }\n\n allowTrigger = false;\n triggerEnd = _.debounce(() => {\n this.endPress();\n }, 500)\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event) {\n // don't do right/middle clicks\n log.d(`MOUSE DOWN `);\n\n if (event.which !== 1) return;\n this.allowTrigger = true;\n\n this.mouseX = event.clientX;\n this.mouseY = event.clientY;\n\n this.pressing = true;\n this.longPressing = false;\n\n this.timeout = setTimeout(() => {\n if (this.allowTrigger) {\n this.longPressing = true;\n log.d(`long pressing start pressDuration:${this.pressDuration} `);\n this.onLongPress.emit(event);\n this.loop(event);\n }\n }, this.pressDuration);\n\n this.loop(event);\n }\n\n @HostListener('mousemove', ['$event'])\n onMouseMove(event) {\n if (this.pressing && !this.longPressing) {\n const xThres = (event.clientX - this.mouseX) > 10;\n const yThres = (event.clientY - this.mouseY) > 10;\n if (xThres || yThres) {\n this.endPress();\n }\n }\n }\n\n loop(event) {\n if (this.longPressing) {\n this.timeout = setTimeout(() => {\n log.d(`emil longpressing`)\n this.triggerEnd();\n this.onLongPressing.emit(event);\n this.loop(event);\n }, 50);\n }\n }\n\n endPress(emit = true) {\n this.allowTrigger = false;\n clearTimeout(this.timeout);\n this.longPressing = false;\n this.pressing = false;\n if (emit) {\n log.d(`EMIT END`)\n this.onLongPressEnd.emit(true);\n } else {\n log.d(`NOT EMIT END`)\n }\n }\n\n @HostListener('mouseup')\n onMouseUp() {\n this.endPress(false);\n }\n\n}\n","import { HelpersTnp as Base } from './helpers';\nexport * from './constants';\nexport { Condition } from './condition-wait';\n/* */\n/* */\n \n// export * from './git-project';\nexport const Helpers = Base.Instance;\nexport * from './project';\n\n\n//#region @browser\nexport { BaseComponent, BaseComponentForRouter } from './base-component';\nexport { BaseFormlyComponent } from './base-formly-component';\nexport { DualComponentController } from './dual-component-ctrl';\nexport { ResizeService } from './resize-service';\nexport { LongPress } from './long-press.directive';\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Helpers","log","Base"],"mappings":"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"}
1
+ {"version":3,"file":"tnp-helpers.mjs","sources":["../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-array-obj.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-strings-regexes.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-environment.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers-strings.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/condition-wait.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/helpers.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/constants.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/project.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/base-component.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/dual-component-ctrl.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/base-formly-component.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/resize-service.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/long-press.directive.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/lib/index.ts","../../../tmp-libs-for-bundle/tnp-helpers/projects/tnp-helpers/src/tnp-helpers.ts"],"sourcesContent":["import { _ } from 'tnp-core/browser';\nimport * as fuzzy from 'fuzzy';\nimport { Helpers } from './index';\n\nexport class HelpersArrayObj {\n\n from(s: string | string[]): string[] {\n if (_.isArray(s)) {\n return s;\n }\n if (_.isString(s)) {\n return s.split(' ')\n }\n }\n\n second(arr) {\n if (!Array.isArray(arr) || arr.length < 2) {\n return void 0;\n }\n return arr[1];\n }\n\n arrayMoveElementBefore<T = any>(arr: any[], a: any, b: any, prop?: keyof T) {\n let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);\n _.pullAt(arr, indexA);\n let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);\n if (indexB === 0) {\n arr.unshift(a);\n } else {\n arr.splice(indexB - 1, 0, a);\n }\n return arr;\n }\n arrayMoveElementAfterB<T = any>(arr: any[], a: any, b: any, prop?: keyof T) {\n let indexA = prop ? arr.findIndex(elem => elem[prop] === a[prop]) : arr.indexOf(a);\n _.pullAt(arr, indexA);\n let indexB = prop ? arr.findIndex(elem => elem[prop] === b[prop]) : arr.indexOf(b);\n if (indexB === arr.length - 1) {\n arr.push(a);\n } else {\n arr.splice(indexB + 1, 0, a);\n }\n return arr;\n }\n\n uniqArray<T = any>(array: any[], uniqueProperty?: (keyof T)) {\n var seen = {};\n return array\n .filter(f => !!f)\n .filter(function (item) {\n return seen.hasOwnProperty(uniqueProperty ? item[uniqueProperty] : item) ? false\n : (seen[uniqueProperty ? item[uniqueProperty] : item] = true);\n });\n }\n\n sortKeys(obj) {\n if (_.isArray(obj)) {\n return obj.map(Helpers.arrays.sortKeys);\n }\n if (_.isObject(obj)) {\n return _.fromPairs(_.keys(obj).sort().map(key => [key, Helpers.arrays.sortKeys(obj[key])]));\n }\n return obj;\n };\n\n /**\n * Fuzzy search\n */\n fuzzy<T = any>(query: string, list: T[], valueFn?: (modelFromList: T) => string) {\n const resultsFuzzy = fuzzy.filter(\n query,\n list.map(k => valueFn ? valueFn(k) : k),\n )\n const resultsFuzzyKebab = fuzzy.filter(\n _.kebabCase(query),\n list.map(k => _.kebabCase((valueFn ? valueFn(k) : k) as any)),\n )\n const matches = resultsFuzzy.map((el) => el.string);\n const matchesKebab = resultsFuzzyKebab.map((el) => el.string);\n\n const results = (resultsFuzzy.length === 0) ? [] : list.filter(k => {\n return matches.includes((valueFn ? valueFn(k) : k) as any);\n })\n\n if (matches.length === 0 && matchesKebab.length > 0) {\n const m = list.find(k => _.kebabCase((valueFn ? valueFn(k) : k) as any) === _.first(matchesKebab));\n results.push(m);\n matches.push((valueFn ? valueFn(m) : m) as any);\n }\n\n return { matches, results };\n }\n\n}\n","import { _ } from 'tnp-core/browser';\nexport class HelpersStringsRegexes {\n\n\n\n escapeStringForRegEx(s: string) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n matchExactOnce(s: string, regex: RegExp): string {\n if (!_.isString(s) || !_.isRegExp(regex)) {\n return void 0;\n }\n const result = s.match(regex);\n if (_.isNil(result)) {\n return void 0;\n }\n return result.length >= 1 ? _.first(result) : void 0;\n }\n\n get regex() {\n return {\n /**\n * mathes\n * xxx.xxx.xxx.xxx\n * xxx.xxx.xxx.xxx:port\n * http://xxx.xxx.xxx.xxx:port\n * http://xxx.xxx.xxx.xxx\n * https://xxx.xxx.xxx.xxx:port\n * https://xxx.xxx.xxx.xxx *\n */\n get forStringWithIpHost() {\n const regex = /(http(s)?\\:\\/\\/)?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\:[0-9]+)?/;\n return regex;\n },\n /**\n * mathes\n * http://domain.com:port\n * http://domain.com\n * http://domain:port\n * http://domain\n * https://domain.com:port\n * https://domain.com\n * https://domain:port\n * https://domain\n */\n get forStringWithDomainHost() {\n const regex = /(((http(s)?\\:\\/\\/)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+(\\:[0-9]+)?)|((http(s)?\\:\\/\\/)[a-zA-Z0-9-]{1,61}))/;\n return regex;\n }\n }\n }\n}\n","import { _, /* */ /* */ } from 'tnp-core/browser';/* */\n/* */\n/* */\n/* */\n/* */\n\n\nexport class HelpersEnvironment {\n\n environmentName(filename, local_env_name) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n isValidGitRepuUrl(url: string) {\n const regex = /^([A-Za-z0-9]+@|http(|s)\\:\\/\\/)([A-Za-z0-9.]+(:\\d+)?)(?::|\\/)([\\d\\/\\w.-]+?)(\\.git)?$/;\n const res = regex.test(url);\n return res;\n }\n\n isValidIp(ip: string) {\n if (!_.isString(ip)) {\n return false;\n }\n ip = ip.trim();\n if (ip === 'localhost') {\n return true;\n }\n return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ip)\n }\n\n}\n","import { _ } from 'tnp-core/browser';\n\nexport class HelpersStrings {\n\n /**\n * Example:\n *\n * const result = interpolateString(\"I'm {age} years old!\")\n * .withParameters({ age: 29 });\n *\n * const result = interpolateString(\"The {a} says {n}, {n}, {n}!\")\n * .withParameters({ a: 'cow', n: 'moo' });\n *\n *\n * @param value string to interpolate\n * @param parameters object with parametes\n */\n interpolateString<T = any>(value: string) {\n if (typeof value !== 'string') {\n console.warn('[ss-logic][helper] Value for interpolation is not string: ', value);\n return value;\n }\n\n return {\n withParameters(parameters: T) {\n if (typeof parameters !== 'object') {\n console.warn('[ss-logic][helper] Parameters are not a object: ', parameters);\n return value;\n }\n return value.replace(/{([^{}]*)}/g, function (a, b) {\n var r = parameters[b];\n return typeof r === 'string' || typeof r === 'number' ? r : a;\n } as any);\n }\n }\n\n }\n\n numValue(pixelsCss: string) {\n // tslint:disable-next-line:radix\n return parseInt(pixelsCss.replace('px', ''));\n }\n\n /**\n * examples:\n * 'aa bb bb' => ['aa','bb','cc'],\n * 'aa' => ['aa']\n * ['aa'] => ['aa']\n */\n splitIfNeed(stringOrArr: string | string[]): string[] {\n let res = [];\n if (_.isArray(stringOrArr)) {\n res = stringOrArr.map(s => {\n return s.trim();\n })\n }\n if (_.isString(stringOrArr)) {\n res = stringOrArr.split(/\\s*[\\s,]\\s*/);\n }\n return res.filter(f => !!f && (f.trim() !== ''));\n }\n\n removeDoubleOrMoreEmptyLines(s: string) {\n s = s?.split('\\n').map(f => f.trimRight()).join('\\n');\n return s?.replace(/(\\r\\n|\\r|\\n){2,}/g, '$1\\n');\n }\n\n /**\n *\n * https://stackoverflow.com/a/57129703/1345101\n *\n * Returns the plural of an English word.\n *\n * @export\n * @param {string} word\n * @param {number} [amount]\n * @returns {string}\n */\n plural(word: string, amount?: number): string {\n if (amount !== undefined && amount === 1) {\n return word\n }\n const plural: { [key: string]: string } = {\n '(quiz)$': \"$1zes\",\n '^(ox)$': \"$1en\",\n '([m|l])ouse$': \"$1ice\",\n '(matr|vert|ind)ix|ex$': \"$1ices\",\n '(x|ch|ss|sh)$': \"$1es\",\n '([^aeiouy]|qu)y$': \"$1ies\",\n '(hive)$': \"$1s\",\n '(?:([^f])fe|([lr])f)$': \"$1$2ves\",\n '(shea|lea|loa|thie)f$': \"$1ves\",\n 'sis$': \"ses\",\n '([ti])um$': \"$1a\",\n '(tomat|potat|ech|her|vet)o$': \"$1oes\",\n '(bu)s$': \"$1ses\",\n '(alias)$': \"$1es\",\n '(octop)us$': \"$1i\",\n '(ax|test)is$': \"$1es\",\n '(us)$': \"$1es\",\n '([^s]+)$': \"$1s\"\n }\n const irregular: { [key: string]: string } = {\n 'move': 'moves',\n 'foot': 'feet',\n 'goose': 'geese',\n 'sex': 'sexes',\n 'child': 'children',\n 'man': 'men',\n 'tooth': 'teeth',\n 'person': 'people'\n }\n const uncountable: string[] = [\n 'sheep',\n 'fish',\n 'deer',\n 'moose',\n 'series',\n 'species',\n 'money',\n 'rice',\n 'information',\n 'equipment',\n 'bison',\n 'cod',\n 'offspring',\n 'pike',\n 'salmon',\n 'shrimp',\n 'swine',\n 'trout',\n 'aircraft',\n 'hovercraft',\n 'spacecraft',\n 'sugar',\n 'tuna',\n 'you',\n 'wood'\n ]\n // save some time in the case that singular and plural are the same\n if (uncountable.indexOf(word.toLowerCase()) >= 0) {\n return word\n }\n // check for irregular forms\n for (const w in irregular) {\n const pattern = new RegExp(`${w}$`, 'i')\n const replace = irregular[w]\n if (pattern.test(word)) {\n return word.replace(pattern, replace)\n }\n }\n // check for matches using regular expressions\n for (const reg in plural) {\n const pattern = new RegExp(reg, 'i')\n if (pattern.test(word)) {\n return word.replace(pattern, plural[reg])\n }\n }\n return word\n }\n\n\n /**\n * https://stackoverflow.com/a/57129703/1345101\n *\n * Returns the singular of an English word.\n *\n * @export\n * @param {string} word\n * @param {number} [amount]\n * @returns {string}\n */\n singular(word: string, amount?: number): string {\n if (amount !== undefined && amount !== 1) {\n return word\n }\n const singular: { [key: string]: string } = {\n '(quiz)zes$': \"$1\",\n '(matr)ices$': \"$1ix\",\n '(vert|ind)ices$': \"$1ex\",\n '^(ox)en$': \"$1\",\n '(alias)es$': \"$1\",\n '(octop|vir)i$': \"$1us\",\n '(cris|ax|test)es$': \"$1is\",\n '(shoe)s$': \"$1\",\n '(o)es$': \"$1\",\n '(bus)es$': \"$1\",\n '([m|l])ice$': \"$1ouse\",\n '(x|ch|ss|sh)es$': \"$1\",\n '(m)ovies$': \"$1ovie\",\n '(s)eries$': \"$1eries\",\n '([^aeiouy]|qu)ies$': \"$1y\",\n '([lr])ves$': \"$1f\",\n '(tive)s$': \"$1\",\n '(hive)s$': \"$1\",\n '(li|wi|kni)ves$': \"$1fe\",\n '(shea|loa|lea|thie)ves$': \"$1f\",\n '(^analy)ses$': \"$1sis\",\n '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$': \"$1$2sis\",\n '([ti])a$': \"$1um\",\n '(n)ews$': \"$1ews\",\n '(h|bl)ouses$': \"$1ouse\",\n '(corpse)s$': \"$1\",\n '(us)es$': \"$1\",\n 's$': \"\"\n }\n const irregular: { [key: string]: string } = {\n 'move': 'moves',\n 'foot': 'feet',\n 'goose': 'geese',\n 'sex': 'sexes',\n 'child': 'children',\n 'man': 'men',\n 'tooth': 'teeth',\n 'person': 'people'\n }\n const uncountable: string[] = [\n 'sheep',\n 'fish',\n 'deer',\n 'moose',\n 'series',\n 'species',\n 'money',\n 'rice',\n 'information',\n 'equipment',\n 'bison',\n 'cod',\n 'offspring',\n 'pike',\n 'salmon',\n 'shrimp',\n 'swine',\n 'trout',\n 'aircraft',\n 'hovercraft',\n 'spacecraft',\n 'sugar',\n 'tuna',\n 'you',\n 'wood'\n ]\n // save some time in the case that singular and plural are the same\n if (uncountable.indexOf(word.toLowerCase()) >= 0) {\n return word\n }\n // check for irregular forms\n for (const w in irregular) {\n const pattern = new RegExp(`${irregular[w]}$`, 'i')\n const replace = w\n if (pattern.test(word)) {\n return word.replace(pattern, replace)\n }\n }\n // check for matches using regular expressions\n for (const reg in singular) {\n const pattern = new RegExp(reg, 'i')\n if (pattern.test(word)) {\n return word.replace(pattern, singular[reg])\n }\n }\n return word\n }\n\n}\n\n","import { _ } from 'tnp-core/browser';\nimport { Helpers } from './index';\n\nexport type Condition = {\n name?: string;\n timeoutCheck?: number;\n timeoutNext?: number;\n callback: (c: Condition) => boolean | Promise<boolean>;\n errorMessage: string;\n}\n\nexport async function conditionWait(conditionAndTimeout: Condition[]) {\n await waitFor(conditionAndTimeout);\n}\n\nfunction waitFor(arr: Condition[], messageToShow: string = void 0) {\n return new Promise(async (resolve, reject) => {\n if (arr.length === 0) {\n resolve(void 0)\n } else {\n // console.log(arr.length)\n const check = arr.shift();\n if (_.isUndefined(check.timeoutCheck)) {\n check.timeoutCheck = 2000;\n }\n if (_.isUndefined(check.timeoutNext)) {\n check.timeoutNext = 4000;\n }\n const { timeoutCheck, timeoutNext, name } = check;\n // console.log(`timeoutCheck: ${timeoutCheck}`);\n // console.log(`timeoutNext: ${timeoutNext}`);\n // console.log(`Checking: ${name}`)\n const resultTrue = await Helpers.runSyncOrAsync(check.callback, check);\n // console.log(`after: ${name}`)\n if (resultTrue) {\n // console.log(`timeout 1 is set to ${timeoutNext}`)\n setTimeout(async () => {\n // console.log(`timeout 1 is over`)\n await waitFor(arr).then(() => {\n resolve(void 0);\n });\n }, timeoutNext);\n } else {\n\n arr.unshift(check);\n if (!messageToShow || check.errorMessage !== messageToShow) {\n Helpers.info(check.errorMessage);\n } else {\n // console.log(`dont show error message ${check.errorMessage}`)\n }\n // console.log(`timeout 2 is set to ${timeoutCheck}, arr.length is ${arr.length}`)\n setTimeout(async () => {\n // console.log(`timeout 2 ${timeoutCheck} ovef`)\n await waitFor(arr, check.errorMessage).then(() => {\n resolve(void 0);\n });\n }, timeoutCheck);\n }\n }\n })\n}\n","import { _ } from 'tnp-core/browser';\nimport { HelpersArrayObj } from './helpers-array-obj';\nimport { HelpersStringsRegexes } from './helpers-strings-regexes';\nimport { HelpersEnvironment } from './helpers-environment';\nimport { HelpersStrings } from './helpers-strings';\nimport { conditionWait } from './condition-wait';\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \nimport { config, ConfigModels } from 'tnp-config/browser';\nimport { Helpers } from './index';\nimport { CLASS } from 'typescript-class-helpers/browser';\nimport { Morphi } from 'morphi/browser';\nimport { CoreHelpers } from 'tnp-core/browser';\n\nexport function applyMixins(derivedCtor: any, baseCtors: any[]) {\n baseCtors.forEach(baseCtor => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {\n Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name));\n });\n });\n}\n\n// @ts-ignore\nexport class HelpersTnp extends CoreHelpers {\n\n private static _instance: HelpersTnp & CoreHelpers;\n public static get Instance() {\n if (!HelpersTnp._instance) {\n HelpersTnp._instance = new HelpersTnp();\n }\n return HelpersTnp._instance;\n }\n\n private constructor(\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n public arrays = new HelpersArrayObj(),\n public strings = new HelpersStrings(),\n\n ) {\n super();\n }\n\n CLIWRAP(f: Function, name: string) {\n CLASS.setName(f, name);\n return f;\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 async isElevated() {\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 async mesureExectionInMs(\n description: string,\n functionToExecute: Function,\n ...functionArguments: any[]): Promise<number> {\n var start = new Date()\n await Helpers.runSyncOrAsync(functionToExecute, ...functionArguments);\n //@ts-ignore\n var end = new Date() - start\n if (Morphi.IsBrowser) {\n Helpers.info(`Execution time: ${end.toString()}ms for \"${description}\"`);\n }\n/* */\n/* */\n \n return end;\n }\n\n mesureExectionInMsSync(\n description: string,\n functionToExecute: () => void): number {\n var start = new Date()\n functionToExecute();\n //@ts-ignore\n var end = new Date() - start\n if (Morphi.IsBrowser) {\n Helpers.info(`Execution time: ${end.toString()}ms for \"${description}\"`);\n }\n/* */\n/* */\n \n return end;\n }\n\n conditionWait = conditionWait;\n\n waitForCondition(conditionFn: (any) => boolean, howOfftenCheckInMs = 1000) {\n return new Promise(async (resolve, reject) => {\n\n const result = await Helpers.runSyncOrAsync(conditionFn);\n if (result) {\n resolve(void 0)\n } else {\n setTimeout(() => {\n Helpers.waitForCondition(conditionFn, howOfftenCheckInMs).then(() => {\n resolve(void 0);\n })\n }, howOfftenCheckInMs);\n }\n })\n }\n\n getBrowserVerPath(moduleName?: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n getMethodName(obj, method): string {\n var methodName = null;\n Object.getOwnPropertyNames(obj).forEach(prop => {\n if (obj[prop] === method) {\n methodName = prop;\n }\n });\n\n if (methodName !== null) {\n return methodName;\n }\n\n var proto = Object.getPrototypeOf(obj);\n if (proto) {\n return Helpers.getMethodName(proto, method);\n }\n return null;\n }\n\n fixWebpackEnv(env: Object) {\n _.forIn(env, (v, k) => {\n const value: string = v as any;\n if (value === 'true') env[k] = true;\n if (value === 'false') env[k] = false;\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/* */\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 public applyMixins = applyMixins;\n}\n\n// @ts-ignore\nexport interface HelpersTnp extends\n HelpersStringsRegexes,\n HelpersEnvironment\n/* */\n/* */\n/* */\n/* */\n \n{ }\n\napplyMixins(HelpersTnp, [\n HelpersStringsRegexes,\n HelpersEnvironment,\n/* */\n/* */\n/* */\n \n]);\n","export const BaselineSiteJoinprefix = '__';\n","/* */\n/* */\n/* */\n/* */\n/* */\n \ndeclare const global: any;\nimport { config, LibTypeArr, ConfigModels } from 'tnp-config/browser';\nimport { _, CoreConfig } from 'tnp-core/browser';\nimport { CLASS } from 'typescript-class-helpers/browser';\nimport { Models } from 'tnp-models/browser';\nimport { Morphi } from 'morphi/browser';\nimport { HelpersTnp } from './helpers';\nconst Helpers = HelpersTnp.Instance;\n\nexport type EmptyProjectStructure = {\n includeContent?: boolean;\n relativePath: string;\n relativeLinkFrom?: string;\n};\n\nexport class Project<T extends Project<any> = any>\n/* */\n/* */\n \n{\n/* */\n/* */\n \n\n protected cache = {};\n\n /**\n * Do use this variable for comparatios\n * ONLY FOR VIEWING\n */\n public readonly _type: ConfigModels.LibType;\n public browser: Pick<Project<any>, 'location' | 'name'> = {} as any;\n public location: string;\n public name: string;\n public genericName: string;\n public isWorkspace: boolean;\n public isVscodeExtension: boolean;\n public isDocker: boolean;\n public isSite: boolean;\n public isSiteInStrictMode?: boolean;\n public isSiteInDependencyMode?: boolean;\n public isCoreProject: boolean;\n public isCommandLineToolOnly: boolean;\n public isGenerated: boolean;\n public isGeneratedForRelease: boolean;\n public isWorkspaceChildProject: boolean;\n public isBasedOnOtherProject: boolean;\n public isForRecreation: boolean;\n public isContainer: boolean;\n public isSmartContainer: boolean;\n public isSmartContainerChild: boolean;\n public isContainerWithLinkedProjects: boolean;\n public isContainerChild: boolean;\n public isContainerCoreProject: boolean;\n public isStandaloneProject: boolean;\n public isMonorepo: boolean;\n public isUnknowNpmProject: boolean;\n public isNaviCli: boolean;\n public useFramework: boolean;\n public defaultPort?: number;\n public version: string;\n public lastNpmVersion?: string;\n public _routerTargetHttp?: string;\n public customizableFilesAndFolders: string[];\n public type: ConfigModels.LibType;\n public backupName: string;\n public resources: string[];\n public env: Models.env.EnvConfig;\n public allowedEnvironments: ConfigModels.EnvironmentName[];\n\n public children: T[];\n public grandpa: T;\n\n public distribution: T;\n\n public childrenThatAreLibs?: T[];\n\n public childrenThatAreClients?: T[];\n\n public childrenThatAreThirdPartyInNodeModules?: T[];\n\n public parent: T;\n\n public preview: T;\n\n public baseline: T;\n\n public static projects: Project<any>[] = [];\n /**\n * To speed up checking folder I am keeping pathes for alterdy checked folder\n * This may break things that are creating new projects\n */\n public static emptyLocations: string[] = [];\n\n static typeFrom(location: string): ConfigModels.LibType {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static unload(project: Project) {\n Project.projects = Project.projects.filter(f => f !== project);\n }\n\n public static From<T = Project<any>>(location: string): T {\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/* */\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/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static nearestTo<T = Project>(\n absoluteLocation: string,\n options?: { type?: ConfigModels.LibType; findGitRoot?: boolean; onlyOutSideNodeModules?: boolean }): T {\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/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static allProjectFrom<T = Project>(absoluteLocation: string, stopOnCwd: string = '/') {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static DefaultPortByType(type: ConfigModels.LibType): number {\n if (type === 'workspace') { return 5000; }\n if (type === 'angular-client') { return 4300; }\n if (type === 'angular-lib') { return 4250; }\n if (type === 'electron-client') { return 4350; }\n if (type === 'ionic-client') { return 8080; }\n if (type === 'docker') { return 5000; }\n if (type === 'isomorphic-lib') { return 4000; }\n if (type === 'container' || type === 'unknow-npm-project') {\n return;\n }\n }\n\n public static get isBundleMode() {\n if (Helpers.isBrowser) {\n return true;\n }\n/* */\n/* */\n \n }\n\n static get Current(): Project<any> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n/* */\n/* */\n/* */\n/* */\n \n\n static get Tnp(): Project<any> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public static by<T = Project>(\n libraryType: ConfigModels.NewFactoryType,\n version: ConfigModels.FrameworkVersion\n/* */\n/* */\n \n ): T {\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 return (void 0);\n }\n\n defineProperty<T>(variableName: keyof T, classFn: Function) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n public setType(this: Project, type: ConfigModels.LibType) {\n // @ts-ignore\n this._type = type;\n }\n public typeIs(this: Project, ...types: ConfigModels.LibType[]) {\n return this._type && types.includes(this._type);\n }\n\n public typeIsNot(this: Project, ...types: ConfigModels.LibType[]) {\n return !this.typeIs(...types);\n }\n\n forEmptyStructure(): EmptyProjectStructure[] {\n return [\n { relativePath: config.file.package_json, includeContent: true },\n { relativePath: config.folder.src },\n ];\n }\n\n}\n\n\nexport type ProjectBuild = { project: Project; appBuild: boolean; };\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/* */\n/* */\n \n","//#region @browser\nimport { Subscription } from 'rxjs';\nimport { OnDestroy, OnInit, Component, Input } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\n\n@Component({\n selector: 'app-base-component-meta',\n template: '<div></div>'\n})\nexport abstract class BaseComponent implements OnDestroy {\n\n // @ts-ignore\n @Input() model: any = {};\n\n handlers: Subscription[] = [];\n\n ngOnDestroy(): void {\n this.handlers.forEach(h => h.unsubscribe());\n this.handlers.length = 0;\n }\n\n\n}\n\nconst isCalledNgInitAfterInternalRefresh = Symbol()\n\nexport abstract class BaseComponentForRouter extends BaseComponent {\n\n constructor(\n private __router: Router\n ) {\n super();\n this[isCalledNgInitAfterInternalRefresh] = false;\n }\n\n\n protected isCalledNgInitAfterInternalRefresh() {\n return !!this[isCalledNgInitAfterInternalRefresh];\n }\n protected reloadNgOninitOnUrlChange() {\n this.handlers.push(this.__router.events.subscribe(event => {\n if (event instanceof NavigationEnd && this['ngOnInit']) {\n this[isCalledNgInitAfterInternalRefresh] = true;\n this['ngOnInit']();\n if (this[isCalledNgInitAfterInternalRefresh]) {\n this[isCalledNgInitAfterInternalRefresh] = false;\n }\n }\n }) as any);\n }\n\n}\n//#endregion\n","import { _ } from 'tnp-core/browser';\nimport { BaseFormlyComponent } from './base-formly-component';\nimport { CLASS } from 'typescript-class-helpers/browser';\nimport { Component, OnInit, Input, Output, AfterViewInit, } from '@angular/core';/* */\n/* */\n\nimport { FormControl, FormGroup } from '@angular/forms'/* */\n/* */\n/* */\n\nimport { Log, Level } from 'ng2-logger/browser';\nconst log = Log.create(`DualComponentController`);\n\nexport abstract class DualComponentController<T = any> {\n\n constructor(protected cmp: BaseFormlyComponent, public isFormlyMode = false) {\n\n }\n\n protected getValTemplateOptions(propertyName: string) {\n if (this.isFormlyMode) {\n const res = this.cmp.field?.templateOptions[propertyName]\n if (res === void 0 && this.cmp[propertyName]) {\n return this.cmp[propertyName];\n }\n return res;\n }\n return this.cmp[propertyName]\n }\n\n protected getValContext(propertyName: string) {\n if (this.isFormlyMode) {\n const res = this.cmp?.field[propertyName]\n if (res === void 0 && this.cmp[propertyName]) {\n return this.cmp[propertyName];\n }\n return res;\n }\n return this.cmp[propertyName]\n }\n\n get disabled() {\n return this.getValTemplateOptions('disabled') as boolean;\n }\n\n get required() {\n return this.getValTemplateOptions('required') as boolean;\n }\n\n get type() {\n if (!this.isFormlyMode) {\n return CLASS.getNameFromObject(this.cmp)\n }\n return this.getValContext('type') as boolean;\n }\n\n get label() {\n return this.getValTemplateOptions('label') as string;\n }\n\n get placeholder() {\n return this.getValTemplateOptions('placeholder') as string;\n }\n\n get defaultValue(): T {\n return this.getValContext('defaultValue') as any;\n }\n\n get formControl(): any {// FormControl { // TODO QUICK_FIX\n return this.getValContext('formControl') as any;\n }\n\n get key() {\n return this.getValContext('key') as string;\n }\n\n get path() {\n return this.getValContext('path') as string;\n }\n\n __model: any;\n get model(): any {\n if (this.isFormlyMode) {\n return this.getValContext('model') as string;\n } else {\n return this.__model;\n }\n }\n\n set model(v) {\n if (this.isFormlyMode) {\n log.w(`[DualComponentController] You can't set model in formly component mode`);\n } else {\n this.__model = v;\n }\n }\n\n __mode: any;\n get mode(): any {\n if (this.isFormlyMode) {\n return this.getValContext('mode') as string;\n } else {\n return this.__mode;\n }\n }\n\n set mode(v) {\n if (this.isFormlyMode) {\n // this.cmp.field.mode =\n // log.w(`[DualComponentController] You can't set mode in formly component mode`);\n } else {\n this.__mode = v;\n }\n }\n\n\n get value(): T {\n if (this.isFormlyMode) {\n return this.cmp.field.formControl.value;\n }\n if (_.isString(this.path)) {\n return _.get(this.cmp.model, this.path);\n }\n return this.cmp.model;\n }\n\n set value(v) {\n if (this.isFormlyMode) {\n this.cmp.field.formControl.setValue(v);\n // @ts-ignore\n this.cmp.change.next(v);\n return;\n }\n if (_.isString(this.path)) {\n _.set(this.cmp.model, this.path, v);\n } else {\n this.cmp.model = v;\n }\n }\n\n\n}\n","//#region @browser\nimport { Subscription } from 'rxjs';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\nimport { Component, OnInit, Input, Output, AfterViewInit, } from '@angular/core';/* */\n/* */\n\nimport { FormControl, FormGroup } from '@angular/forms';/* */\n/* */\n/* */\n\nimport { Log, Level } from 'ng2-logger/browser';\nimport { DualComponentController } from './dual-component-ctrl';\nimport { EventEmitter } from '@angular/core';\n\nconst log = Log.create('base formly component', Level.__NOTHING)\n\n\n@Component({\n selector: 'app-base-formly-component-meta',\n template: `<div></div>`\n}) // @ts-ignore\nexport abstract class BaseFormlyComponent<T extends DualComponentController = DualComponentController>\n extends FieldType\n implements OnInit, Partial<DualComponentController<T>>, AfterViewInit {\n\n protected DualComponentController = DualComponentController;\n public ctrl: T = {} as any;\n @Input() pizda: any;\n\n // @ts-ignore\n get mode() {\n return this.ctrl.mode;\n }\n\n // @ts-ignore\n @Input() set mode(v) {\n this.ctrl.mode = v;\n }\n @Input() disabled: boolean;\n @Input() required: boolean;\n @Input() label: string;\n @Input() placeholder: string;\n @Input() defaultValue: T;\n\n // @ts-ignore\n @Input() set model(v) {\n this.ctrl.model = v;\n }\n get model() {\n return this.ctrl.model;\n }\n @Input() path: string;\n @Output() change = new EventEmitter();\n\n\n // @ts-ignore\n @Input() set key(value: string) {\n if (this.ctrl && this.ctrl.isFormlyMode) {\n return;\n }\n this.path = value;\n }\n get key(): string {\n if (this.ctrl && this.ctrl.isFormlyMode) {\n return this.field.key as any;\n }\n return this.path;\n }\n\n // @ts-ignore\n // @Input() formControl: FormControl; // TODO QUICK_FIX\n protected handlers: Subscription[] = [];\n\n ngOnDestroy(): void {\n this.handlers.forEach(h => h.unsubscribe());\n this.handlers.length = 0;\n\n }\n\n ngAfterViewInit() {\n\n }\n\n private __field = {\n templateOptions: {\n\n }\n } as FormlyFieldConfig;\n // _model: any;\n ngOnInit() {\n // console.log('model', this.model)\n // console.log('ket', this.key)\n const isFormlyMode = !!this.field;\n log.i(`isFormlyMode: ${isFormlyMode}`);\n if (!isFormlyMode) {\n const that = this;\n Object.defineProperty(this, 'field', {\n get: function () {\n return that.__field;\n },\n set: function (v) {\n that.__field = v;\n }\n })\n }\n\n const existed = this.ctrl;\n this.ctrl = new (this.DualComponentController as any)(this, isFormlyMode);\n // @ts-ignore\n Object.keys(existed).forEach(key => {\n this.ctrl[key] = existed[key];\n });\n\n // if (!this.formControl) {\n // this.formControl = new FormControl({})\n // Object.defineProperty(this, 'field', {\n // get: () => {\n // return {\n // formControl: this.formControl\n // } as FormlyFieldConfig\n // }\n // })\n // // this.formControl = new FormControl({})\n // }\n // @ts-ignore\n this.change.next(this.ctrl.value);\n }\n\n}\n//#endregion\n","import { Injectable } from '@angular/core';\nimport * as elementResizeDetectorMaker from 'element-resize-detector';\n\n@Injectable()\nexport class ResizeService {\n private resizeDetector: any;\n\n constructor() {\n this.resizeDetector = elementResizeDetectorMaker({ strategy: 'scroll' });\n }\n\n addResizeEventListener(element: HTMLElement, handler: Function) {\n this.resizeDetector.listenTo(element, handler);\n }\n\n removeResizeEventListener(element: HTMLElement) {\n this.resizeDetector.uninstall(element);\n }\n}\n","import { Directive, Input, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n\n\nimport { _ } from 'tnp-core/browser';\nimport { Log, Level } from 'ng2-logger/browser';\nconst log = Log.create(`[tnp-helpers] long-press`\n , Level.__NOTHING\n)\n\n@Directive({ selector: '[long-press]' })\nexport class LongPress {\n\n @Input() pressDuration: number = 1000;\n\n @Output() onLongPress: EventEmitter<any> = new EventEmitter();\n @Output() onLongPressing: EventEmitter<any> = new EventEmitter();\n @Output() onLongPressEnd: EventEmitter<any> = new EventEmitter();\n\n private pressing: boolean;\n private longPressing: boolean;\n private timeout: any;\n private mouseX: number = 0;\n private mouseY: number = 0;\n\n @HostBinding('class.press')\n get press() { return this.pressing; }\n\n @HostBinding('class.longpress')\n get longPress() { return this.longPressing; }\n\n allowTrigger = false;\n triggerEnd = _.debounce(() => {\n this.endPress();\n }, 500)\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event) {\n // don't do right/middle clicks\n log.d(`MOUSE DOWN `);\n\n if (event.which !== 1) return;\n this.allowTrigger = true;\n\n this.mouseX = event.clientX;\n this.mouseY = event.clientY;\n\n this.pressing = true;\n this.longPressing = false;\n\n this.timeout = setTimeout(() => {\n if (this.allowTrigger) {\n this.longPressing = true;\n log.d(`long pressing start pressDuration:${this.pressDuration} `);\n this.onLongPress.emit(event);\n this.loop(event);\n }\n }, this.pressDuration);\n\n this.loop(event);\n }\n\n @HostListener('mousemove', ['$event'])\n onMouseMove(event) {\n if (this.pressing && !this.longPressing) {\n const xThres = (event.clientX - this.mouseX) > 10;\n const yThres = (event.clientY - this.mouseY) > 10;\n if (xThres || yThres) {\n this.endPress();\n }\n }\n }\n\n loop(event) {\n if (this.longPressing) {\n this.timeout = setTimeout(() => {\n log.d(`emil longpressing`)\n this.triggerEnd();\n this.onLongPressing.emit(event);\n this.loop(event);\n }, 50);\n }\n }\n\n endPress(emit = true) {\n this.allowTrigger = false;\n clearTimeout(this.timeout);\n this.longPressing = false;\n this.pressing = false;\n if (emit) {\n log.d(`EMIT END`)\n this.onLongPressEnd.emit(true);\n } else {\n log.d(`NOT EMIT END`)\n }\n }\n\n @HostListener('mouseup')\n onMouseUp() {\n this.endPress(false);\n }\n\n}\n","import { HelpersTnp as Base } from './helpers';\nexport * from './constants';\nexport { Condition } from './condition-wait';\n/* */\n/* */\n \n// export * from './git-project';\nexport const Helpers = Base.Instance;\nexport * from './project';\n\n\n//#region @browser\nexport { BaseComponent, BaseComponentForRouter } from './base-component';\nexport { BaseFormlyComponent } from './base-formly-component';\nexport { DualComponentController } from './dual-component-ctrl';\nexport { ResizeService } from './resize-service';\nexport { LongPress } from './long-press.directive';\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Helpers","log","Base"],"mappings":"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"}
@@ -24,4 +24,27 @@ export declare class HelpersStrings {
24
24
  */
25
25
  splitIfNeed(stringOrArr: string | string[]): string[];
26
26
  removeDoubleOrMoreEmptyLines(s: string): string;
27
+ /**
28
+ *
29
+ * https://stackoverflow.com/a/57129703/1345101
30
+ *
31
+ * Returns the plural of an English word.
32
+ *
33
+ * @export
34
+ * @param {string} word
35
+ * @param {number} [amount]
36
+ * @returns {string}
37
+ */
38
+ plural(word: string, amount?: number): string;
39
+ /**
40
+ * https://stackoverflow.com/a/57129703/1345101
41
+ *
42
+ * Returns the singular of an English word.
43
+ *
44
+ * @export
45
+ * @param {string} word
46
+ * @param {number} [amount]
47
+ * @returns {string}
48
+ */
49
+ singular(word: string, amount?: number): string;
27
50
  }
@@ -57,5 +57,200 @@ export class HelpersStrings {
57
57
  s = s?.split('\n').map(f => f.trimRight()).join('\n');
58
58
  return s?.replace(/(\r\n|\r|\n){2,}/g, '$1\n');
59
59
  }
60
+ /**
61
+ *
62
+ * https://stackoverflow.com/a/57129703/1345101
63
+ *
64
+ * Returns the plural of an English word.
65
+ *
66
+ * @export
67
+ * @param {string} word
68
+ * @param {number} [amount]
69
+ * @returns {string}
70
+ */
71
+ plural(word, amount) {
72
+ if (amount !== undefined && amount === 1) {
73
+ return word;
74
+ }
75
+ const plural = {
76
+ '(quiz)$': "$1zes",
77
+ '^(ox)$': "$1en",
78
+ '([m|l])ouse$': "$1ice",
79
+ '(matr|vert|ind)ix|ex$': "$1ices",
80
+ '(x|ch|ss|sh)$': "$1es",
81
+ '([^aeiouy]|qu)y$': "$1ies",
82
+ '(hive)$': "$1s",
83
+ '(?:([^f])fe|([lr])f)$': "$1$2ves",
84
+ '(shea|lea|loa|thie)f$': "$1ves",
85
+ 'sis$': "ses",
86
+ '([ti])um$': "$1a",
87
+ '(tomat|potat|ech|her|vet)o$': "$1oes",
88
+ '(bu)s$': "$1ses",
89
+ '(alias)$': "$1es",
90
+ '(octop)us$': "$1i",
91
+ '(ax|test)is$': "$1es",
92
+ '(us)$': "$1es",
93
+ '([^s]+)$': "$1s"
94
+ };
95
+ const irregular = {
96
+ 'move': 'moves',
97
+ 'foot': 'feet',
98
+ 'goose': 'geese',
99
+ 'sex': 'sexes',
100
+ 'child': 'children',
101
+ 'man': 'men',
102
+ 'tooth': 'teeth',
103
+ 'person': 'people'
104
+ };
105
+ const uncountable = [
106
+ 'sheep',
107
+ 'fish',
108
+ 'deer',
109
+ 'moose',
110
+ 'series',
111
+ 'species',
112
+ 'money',
113
+ 'rice',
114
+ 'information',
115
+ 'equipment',
116
+ 'bison',
117
+ 'cod',
118
+ 'offspring',
119
+ 'pike',
120
+ 'salmon',
121
+ 'shrimp',
122
+ 'swine',
123
+ 'trout',
124
+ 'aircraft',
125
+ 'hovercraft',
126
+ 'spacecraft',
127
+ 'sugar',
128
+ 'tuna',
129
+ 'you',
130
+ 'wood'
131
+ ];
132
+ // save some time in the case that singular and plural are the same
133
+ if (uncountable.indexOf(word.toLowerCase()) >= 0) {
134
+ return word;
135
+ }
136
+ // check for irregular forms
137
+ for (const w in irregular) {
138
+ const pattern = new RegExp(`${w}$`, 'i');
139
+ const replace = irregular[w];
140
+ if (pattern.test(word)) {
141
+ return word.replace(pattern, replace);
142
+ }
143
+ }
144
+ // check for matches using regular expressions
145
+ for (const reg in plural) {
146
+ const pattern = new RegExp(reg, 'i');
147
+ if (pattern.test(word)) {
148
+ return word.replace(pattern, plural[reg]);
149
+ }
150
+ }
151
+ return word;
152
+ }
153
+ /**
154
+ * https://stackoverflow.com/a/57129703/1345101
155
+ *
156
+ * Returns the singular of an English word.
157
+ *
158
+ * @export
159
+ * @param {string} word
160
+ * @param {number} [amount]
161
+ * @returns {string}
162
+ */
163
+ singular(word, amount) {
164
+ if (amount !== undefined && amount !== 1) {
165
+ return word;
166
+ }
167
+ const singular = {
168
+ '(quiz)zes$': "$1",
169
+ '(matr)ices$': "$1ix",
170
+ '(vert|ind)ices$': "$1ex",
171
+ '^(ox)en$': "$1",
172
+ '(alias)es$': "$1",
173
+ '(octop|vir)i$': "$1us",
174
+ '(cris|ax|test)es$': "$1is",
175
+ '(shoe)s$': "$1",
176
+ '(o)es$': "$1",
177
+ '(bus)es$': "$1",
178
+ '([m|l])ice$': "$1ouse",
179
+ '(x|ch|ss|sh)es$': "$1",
180
+ '(m)ovies$': "$1ovie",
181
+ '(s)eries$': "$1eries",
182
+ '([^aeiouy]|qu)ies$': "$1y",
183
+ '([lr])ves$': "$1f",
184
+ '(tive)s$': "$1",
185
+ '(hive)s$': "$1",
186
+ '(li|wi|kni)ves$': "$1fe",
187
+ '(shea|loa|lea|thie)ves$': "$1f",
188
+ '(^analy)ses$': "$1sis",
189
+ '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$': "$1$2sis",
190
+ '([ti])a$': "$1um",
191
+ '(n)ews$': "$1ews",
192
+ '(h|bl)ouses$': "$1ouse",
193
+ '(corpse)s$': "$1",
194
+ '(us)es$': "$1",
195
+ 's$': ""
196
+ };
197
+ const irregular = {
198
+ 'move': 'moves',
199
+ 'foot': 'feet',
200
+ 'goose': 'geese',
201
+ 'sex': 'sexes',
202
+ 'child': 'children',
203
+ 'man': 'men',
204
+ 'tooth': 'teeth',
205
+ 'person': 'people'
206
+ };
207
+ const uncountable = [
208
+ 'sheep',
209
+ 'fish',
210
+ 'deer',
211
+ 'moose',
212
+ 'series',
213
+ 'species',
214
+ 'money',
215
+ 'rice',
216
+ 'information',
217
+ 'equipment',
218
+ 'bison',
219
+ 'cod',
220
+ 'offspring',
221
+ 'pike',
222
+ 'salmon',
223
+ 'shrimp',
224
+ 'swine',
225
+ 'trout',
226
+ 'aircraft',
227
+ 'hovercraft',
228
+ 'spacecraft',
229
+ 'sugar',
230
+ 'tuna',
231
+ 'you',
232
+ 'wood'
233
+ ];
234
+ // save some time in the case that singular and plural are the same
235
+ if (uncountable.indexOf(word.toLowerCase()) >= 0) {
236
+ return word;
237
+ }
238
+ // check for irregular forms
239
+ for (const w in irregular) {
240
+ const pattern = new RegExp(`${irregular[w]}$`, 'i');
241
+ const replace = w;
242
+ if (pattern.test(word)) {
243
+ return word.replace(pattern, replace);
244
+ }
245
+ }
246
+ // check for matches using regular expressions
247
+ for (const reg in singular) {
248
+ const pattern = new RegExp(reg, 'i');
249
+ if (pattern.test(word)) {
250
+ return word.replace(pattern, singular[reg]);
251
+ }
252
+ }
253
+ return word;
254
+ }
60
255
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMtc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckMsTUFBTSxPQUFPLGNBQWM7SUFFekI7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsaUJBQWlCLENBQVUsS0FBYTtRQUN0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPO1lBQ0wsY0FBYyxDQUFDLFVBQWE7Z0JBQzFCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUM3RSxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsQ0FBUSxDQUFDLENBQUM7WUFDWixDQUFDO1NBQ0YsQ0FBQTtJQUVILENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUI7UUFDeEIsaUNBQWlDO1FBQ2pDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLFdBQThCO1FBQ3hDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxQixHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMzQixHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsQ0FBUztRQUNwQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcblxuZXhwb3J0IGNsYXNzIEhlbHBlcnNTdHJpbmdzIHtcblxuICAvKipcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogY29uc3QgcmVzdWx0ID0gaW50ZXJwb2xhdGVTdHJpbmcoXCJJJ20ge2FnZX0geWVhcnMgb2xkIVwiKVxuICAgKiAud2l0aFBhcmFtZXRlcnMoeyBhZ2U6IDI5IH0pO1xuICAgKlxuICAgKiBjb25zdCByZXN1bHQgPSBpbnRlcnBvbGF0ZVN0cmluZyhcIlRoZSB7YX0gc2F5cyB7bn0sIHtufSwge259IVwiKVxuICAgKiAud2l0aFBhcmFtZXRlcnMoeyBhOiAnY293JywgbjogJ21vbycgfSk7XG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgdG8gaW50ZXJwb2xhdGVcbiAgICogQHBhcmFtIHBhcmFtZXRlcnMgb2JqZWN0IHdpdGggcGFyYW1ldGVzXG4gICAqL1xuICBpbnRlcnBvbGF0ZVN0cmluZzxUID0gYW55Pih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUud2FybignW3NzLWxvZ2ljXVtoZWxwZXJdIFZhbHVlIGZvciBpbnRlcnBvbGF0aW9uIGlzIG5vdCBzdHJpbmc6ICcsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2l0aFBhcmFtZXRlcnMocGFyYW1ldGVyczogVCkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbc3MtbG9naWNdW2hlbHBlcl0gUGFyYW1ldGVycyBhcmUgbm90IGEgb2JqZWN0OiAnLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL3soW157fV0qKX0vZywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICB2YXIgciA9IHBhcmFtZXRlcnNbYl07XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiByID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgciA9PT0gJ251bWJlcicgPyByIDogYTtcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbnVtVmFsdWUocGl4ZWxzQ3NzOiBzdHJpbmcpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cmFkaXhcbiAgICByZXR1cm4gcGFyc2VJbnQocGl4ZWxzQ3NzLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleGFtcGxlczpcbiAgICogJ2FhIGJiIGJiJyA9PiBbJ2FhJywnYmInLCdjYyddLFxuICAgKiAnYWEnID0+IFsnYWEnXVxuICAgKiBbJ2FhJ10gPT4gWydhYSddXG4gICAqL1xuICBzcGxpdElmTmVlZChzdHJpbmdPckFycjogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIGlmIChfLmlzQXJyYXkoc3RyaW5nT3JBcnIpKSB7XG4gICAgICByZXMgPSBzdHJpbmdPckFyci5tYXAocyA9PiB7XG4gICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChfLmlzU3RyaW5nKHN0cmluZ09yQXJyKSkge1xuICAgICAgcmVzID0gc3RyaW5nT3JBcnIuc3BsaXQoL1xccypbXFxzLF1cXHMqLyk7XG4gICAgfVxuICAgIHJldHVybiByZXMuZmlsdGVyKGYgPT4gISFmICYmIChmLnRyaW0oKSAhPT0gJycpKTtcbiAgfVxuXG4gIHJlbW92ZURvdWJsZU9yTW9yZUVtcHR5TGluZXMoczogc3RyaW5nKSB7XG4gICAgcyA9IHM/LnNwbGl0KCdcXG4nKS5tYXAoZiA9PiBmLnRyaW1SaWdodCgpKS5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gcz8ucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKXsyLH0vZywgJyQxXFxuJyk7XG4gIH1cblxufVxuXG4iXX0=
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1zdHJpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2hlbHBlcnMtc3RyaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckMsTUFBTSxPQUFPLGNBQWM7SUFFekI7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsaUJBQWlCLENBQVUsS0FBYTtRQUN0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPO1lBQ0wsY0FBYyxDQUFDLFVBQWE7Z0JBQzFCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUM3RSxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsQ0FBUSxDQUFDLENBQUM7WUFDWixDQUFDO1NBQ0YsQ0FBQTtJQUVILENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUI7UUFDeEIsaUNBQWlDO1FBQ2pDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxF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WUFDTixLQUFLO1lBQ0wsTUFBTTtTQUNQLENBQUE7UUFDRCxtRUFBbUU7UUFDbkUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoRCxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsNEJBQTRCO1FBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFBO1lBQ2pCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTthQUN0QztTQUNGO1FBQ0QsOENBQThDO1FBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNwQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7YUFDNUM7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5leHBvcnQgY2xhc3MgSGVscGVyc1N0cmluZ3Mge1xuXG4gIC8qKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiBjb25zdCByZXN1bHQgPSBpbnRlcnBvbGF0ZVN0cmluZyhcIkknbSB7YWdlfSB5ZWFycyBvbGQhXCIpXG4gICAqIC53aXRoUGFyYW1ldGVycyh7IGFnZTogMjkgfSk7XG4gICAqXG4gICAqIGNvbnN0IHJlc3VsdCA9IGludGVycG9sYXRlU3RyaW5nKFwiVGhlIHthfSBzYXlzIHtufSwge259LCB7bn0hXCIpXG4gICAqIC53aXRoUGFyYW1ldGVycyh7IGE6ICdjb3cnLCBuOiAnbW9vJyB9KTtcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB0byBpbnRlcnBvbGF0ZVxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBvYmplY3Qgd2l0aCBwYXJhbWV0ZXNcbiAgICovXG4gIGludGVycG9sYXRlU3RyaW5nPFQgPSBhbnk+KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS53YXJuKCdbc3MtbG9naWNdW2hlbHBlcl0gVmFsdWUgZm9yIGludGVycG9sYXRpb24gaXMgbm90IHN0cmluZzogJywgdmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB3aXRoUGFyYW1ldGVycyhwYXJhbWV0ZXJzOiBUKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tzcy1sb2dpY11baGVscGVyXSBQYXJhbWV0ZXJzIGFyZSBub3QgYSBvYmplY3Q6ICcsIHBhcmFtZXRlcnMpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgveyhbXnt9XSopfS9nLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciByID0gcGFyYW1ldGVyc1tiXTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByID09PSAnbnVtYmVyJyA/IHIgOiBhO1xuICAgICAgICB9IGFzIGFueSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBudW1WYWx1ZShwaXhlbHNDc3M6IHN0cmluZykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpyYWRpeFxuICAgIHJldHVybiBwYXJzZUludChwaXhlbHNDc3MucmVwbGFjZSgncHgnLCAnJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4YW1wbGVzOlxuICAgKiAnYWEgYmIgYmInID0+IFsnYWEnLCdiYicsJ2NjJ10sXG4gICAqICdhYScgPT4gWydhYSddXG4gICAqIFsnYWEnXSA9PiBbJ2FhJ11cbiAgICovXG4gIHNwbGl0SWZOZWVkKHN0cmluZ09yQXJyOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgaWYgKF8uaXNBcnJheShzdHJpbmdPckFycikpIHtcbiAgICAgIHJlcyA9IHN0cmluZ09yQXJyLm1hcChzID0+IHtcbiAgICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKF8uaXNTdHJpbmcoc3RyaW5nT3JBcnIpKSB7XG4gICAgICByZXMgPSBzdHJpbmdPckFyci5zcGxpdCgvXFxzKltcXHMsXVxccyovKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5maWx0ZXIoZiA9PiAhIWYgJiYgKGYudHJpbSgpICE9PSAnJykpO1xuICB9XG5cbiAgcmVtb3ZlRG91YmxlT3JNb3JlRW1wdHlMaW5lcyhzOiBzdHJpbmcpIHtcbiAgICBzID0gcz8uc3BsaXQoJ1xcbicpLm1hcChmID0+IGYudHJpbVJpZ2h0KCkpLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiBzPy5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pezIsfS9nLCAnJDFcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTcxMjk3MDMvMTM0NTEwMVxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBwbHVyYWwgb2YgYW4gRW5nbGlzaCB3b3JkLlxuICAgKlxuICAgKiBAZXhwb3J0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50XVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGx1cmFsKHdvcmQ6IHN0cmluZywgYW1vdW50PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoYW1vdW50ICE9PSB1bmRlZmluZWQgJiYgYW1vdW50ID09PSAxKSB7XG4gICAgICByZXR1cm4gd29yZFxuICAgIH1cbiAgICBjb25zdCBwbHVyYWw6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnKHF1aXopJCc6IFwiJDF6ZXNcIixcbiAgICAgICdeKG94KSQnOiBcIiQxZW5cIixcbiAgICAgICcoW218bF0pb3VzZSQnOiBcIiQxaWNlXCIsXG4gICAgICAnKG1hdHJ8dmVydHxpbmQpaXh8ZXgkJzogXCIkMWljZXNcIixcbiAgICAgICcoeHxjaHxzc3xzaCkkJzogXCIkMWVzXCIsXG4gICAgICAnKFteYWVpb3V5XXxxdSl5JCc6IFwiJDFpZXNcIixcbiAgICAgICcoaGl2ZSkkJzogXCIkMXNcIixcbiAgICAgICcoPzooW15mXSlmZXwoW2xyXSlmKSQnOiBcIiQxJDJ2ZXNcIixcbiAgICAgICcoc2hlYXxsZWF8bG9hfHRoaWUpZiQnOiBcIiQxdmVzXCIsXG4gICAgICAnc2lzJCc6IFwic2VzXCIsXG4gICAgICAnKFt0aV0pdW0kJzogXCIkMWFcIixcbiAgICAgICcodG9tYXR8cG90YXR8ZWNofGhlcnx2ZXQpbyQnOiBcIiQxb2VzXCIsXG4gICAgICAnKGJ1KXMkJzogXCIkMXNlc1wiLFxuICAgICAgJyhhbGlhcykkJzogXCIkMWVzXCIsXG4gICAgICAnKG9jdG9wKXVzJCc6IFwiJDFpXCIsXG4gICAgICAnKGF4fHRlc3QpaXMkJzogXCIkMWVzXCIsXG4gICAgICAnKHVzKSQnOiBcIiQxZXNcIixcbiAgICAgICcoW15zXSspJCc6IFwiJDFzXCJcbiAgICB9XG4gICAgY29uc3QgaXJyZWd1bGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ21vdmUnOiAnbW92ZXMnLFxuICAgICAgJ2Zvb3QnOiAnZmVldCcsXG4gICAgICAnZ29vc2UnOiAnZ2Vlc2UnLFxuICAgICAgJ3NleCc6ICdzZXhlcycsXG4gICAgICAnY2hpbGQnOiAnY2hpbGRyZW4nLFxuICAgICAgJ21hbic6ICdtZW4nLFxuICAgICAgJ3Rvb3RoJzogJ3RlZXRoJyxcbiAgICAgICdwZXJzb24nOiAncGVvcGxlJ1xuICAgIH1cbiAgICBjb25zdCB1bmNvdW50YWJsZTogc3RyaW5nW10gPSBbXG4gICAgICAnc2hlZXAnLFxuICAgICAgJ2Zpc2gnLFxuICAgICAgJ2RlZXInLFxuICAgICAgJ21vb3NlJyxcbiAgICAgICdzZXJpZXMnLFxuICAgICAgJ3NwZWNpZXMnLFxuICAgICAgJ21vbmV5JyxcbiAgICAgICdyaWNlJyxcbiAgICAgICdpbmZvcm1hdGlvbicsXG4gICAgICAnZXF1aXBtZW50JyxcbiAgICAgICdiaXNvbicsXG4gICAgICAnY29kJyxcbiAgICAgICdvZmZzcHJpbmcnLFxuICAgICAgJ3Bpa2UnLFxuICAgICAgJ3NhbG1vbicsXG4gICAgICAnc2hyaW1wJyxcbiAgICAgICdzd2luZScsXG4gICAgICAndHJvdXQnLFxuICAgICAgJ2FpcmNyYWZ0JyxcbiAgICAgICdob3ZlcmNyYWZ0JyxcbiAgICAgICdzcGFjZWNyYWZ0JyxcbiAgICAgICdzdWdhcicsXG4gICAgICAndHVuYScsXG4gICAgICAneW91JyxcbiAgICAgICd3b29kJ1xuICAgIF1cbiAgICAvLyBzYXZlIHNvbWUgdGltZSBpbiB0aGUgY2FzZSB0aGF0IHNpbmd1bGFyIGFuZCBwbHVyYWwgYXJlIHRoZSBzYW1lXG4gICAgaWYgKHVuY291bnRhYmxlLmluZGV4T2Yod29yZC50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7XG4gICAgICByZXR1cm4gd29yZFxuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgaXJyZWd1bGFyIGZvcm1zXG4gICAgZm9yIChjb25zdCB3IGluIGlycmVndWxhcikge1xuICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7d30kYCwgJ2knKVxuICAgICAgY29uc3QgcmVwbGFjZSA9IGlycmVndWxhclt3XVxuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2UpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGZvciBtYXRjaGVzIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgICBmb3IgKGNvbnN0IHJlZyBpbiBwbHVyYWwpIHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHJlZywgJ2knKVxuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHBsdXJhbFtyZWddKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd29yZFxuICB9XG5cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU3MTI5NzAzLzEzNDUxMDFcbiAgICpcbiAgKiBSZXR1cm5zIHRoZSBzaW5ndWxhciBvZiBhbiBFbmdsaXNoIHdvcmQuXG4gICpcbiAgKiBAZXhwb3J0XG4gICogQHBhcmFtIHtzdHJpbmd9IHdvcmRcbiAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudF1cbiAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAqL1xuICBzaW5ndWxhcih3b3JkOiBzdHJpbmcsIGFtb3VudD86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGFtb3VudCAhPT0gdW5kZWZpbmVkICYmIGFtb3VudCAhPT0gMSkge1xuICAgICAgcmV0dXJuIHdvcmRcbiAgICB9XG4gICAgY29uc3Qgc2luZ3VsYXI6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnKHF1aXopemVzJCc6IFwiJDFcIixcbiAgICAgICcobWF0cilpY2VzJCc6IFwiJDFpeFwiLFxuICAgICAgJyh2ZXJ0fGluZClpY2VzJCc6IFwiJDFleFwiLFxuICAgICAgJ14ob3gpZW4kJzogXCIkMVwiLFxuICAgICAgJyhhbGlhcyllcyQnOiBcIiQxXCIsXG4gICAgICAnKG9jdG9wfHZpcilpJCc6IFwiJDF1c1wiLFxuICAgICAgJyhjcmlzfGF4fHRlc3QpZXMkJzogXCIkMWlzXCIsXG4gICAgICAnKHNob2UpcyQnOiBcIiQxXCIsXG4gICAgICAnKG8pZXMkJzogXCIkMVwiLFxuICAgICAgJyhidXMpZXMkJzogXCIkMVwiLFxuICAgICAgJyhbbXxsXSlpY2UkJzogXCIkMW91c2VcIixcbiAgICAgICcoeHxjaHxzc3xzaCllcyQnOiBcIiQxXCIsXG4gICAgICAnKG0pb3ZpZXMkJzogXCIkMW92aWVcIixcbiAgICAgICcocyllcmllcyQnOiBcIiQxZXJpZXNcIixcbiAgICAgICcoW15hZWlvdXldfHF1KWllcyQnOiBcIiQxeVwiLFxuICAgICAgJyhbbHJdKXZlcyQnOiBcIiQxZlwiLFxuICAgICAgJyh0aXZlKXMkJzogXCIkMVwiLFxuICAgICAgJyhoaXZlKXMkJzogXCIkMVwiLFxuICAgICAgJyhsaXx3aXxrbmkpdmVzJCc6IFwiJDFmZVwiLFxuICAgICAgJyhzaGVhfGxvYXxsZWF8dGhpZSl2ZXMkJzogXCIkMWZcIixcbiAgICAgICcoXmFuYWx5KXNlcyQnOiBcIiQxc2lzXCIsXG4gICAgICAnKChhKW5hbHl8KGIpYXwoZClpYWdub3wocClhcmVudGhlfChwKXJvZ25vfChzKXlub3B8KHQpaGUpc2VzJCc6IFwiJDEkMnNpc1wiLFxuICAgICAgJyhbdGldKWEkJzogXCIkMXVtXCIsXG4gICAgICAnKG4pZXdzJCc6IFwiJDFld3NcIixcbiAgICAgICcoaHxibClvdXNlcyQnOiBcIiQxb3VzZVwiLFxuICAgICAgJyhjb3Jwc2UpcyQnOiBcIiQxXCIsXG4gICAgICAnKHVzKWVzJCc6IFwiJDFcIixcbiAgICAgICdzJCc6IFwiXCJcbiAgICB9XG4gICAgY29uc3QgaXJyZWd1bGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ21vdmUnOiAnbW92ZXMnLFxuICAgICAgJ2Zvb3QnOiAnZmVldCcsXG4gICAgICAnZ29vc2UnOiAnZ2Vlc2UnLFxuICAgICAgJ3NleCc6ICdzZXhlcycsXG4gICAgICAnY2hpbGQnOiAnY2hpbGRyZW4nLFxuICAgICAgJ21hbic6ICdtZW4nLFxuICAgICAgJ3Rvb3RoJzogJ3RlZXRoJyxcbiAgICAgICdwZXJzb24nOiAncGVvcGxlJ1xuICAgIH1cbiAgICBjb25zdCB1bmNvdW50YWJsZTogc3RyaW5nW10gPSBbXG4gICAgICAnc2hlZXAnLFxuICAgICAgJ2Zpc2gnLFxuICAgICAgJ2RlZXInLFxuICAgICAgJ21vb3NlJyxcbiAgICAgICdzZXJpZXMnLFxuICAgICAgJ3NwZWNpZXMnLFxuICAgICAgJ21vbmV5JyxcbiAgICAgICdyaWNlJyxcbiAgICAgICdpbmZvcm1hdGlvbicsXG4gICAgICAnZXF1aXBtZW50JyxcbiAgICAgICdiaXNvbicsXG4gICAgICAnY29kJyxcbiAgICAgICdvZmZzcHJpbmcnLFxuICAgICAgJ3Bpa2UnLFxuICAgICAgJ3NhbG1vbicsXG4gICAgICAnc2hyaW1wJyxcbiAgICAgICdzd2luZScsXG4gICAgICAndHJvdXQnLFxuICAgICAgJ2FpcmNyYWZ0JyxcbiAgICAgICdob3ZlcmNyYWZ0JyxcbiAgICAgICdzcGFjZWNyYWZ0JyxcbiAgICAgICdzdWdhcicsXG4gICAgICAndHVuYScsXG4gICAgICAneW91JyxcbiAgICAgICd3b29kJ1xuICAgIF1cbiAgICAvLyBzYXZlIHNvbWUgdGltZSBpbiB0aGUgY2FzZSB0aGF0IHNpbmd1bGFyIGFuZCBwbHVyYWwgYXJlIHRoZSBzYW1lXG4gICAgaWYgKHVuY291bnRhYmxlLmluZGV4T2Yod29yZC50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7XG4gICAgICByZXR1cm4gd29yZFxuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgaXJyZWd1bGFyIGZvcm1zXG4gICAgZm9yIChjb25zdCB3IGluIGlycmVndWxhcikge1xuICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7aXJyZWd1bGFyW3ddfSRgLCAnaScpXG4gICAgICBjb25zdCByZXBsYWNlID0gd1xuICAgICAgaWYgKHBhdHRlcm4udGVzdCh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2UpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGZvciBtYXRjaGVzIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgICBmb3IgKGNvbnN0IHJlZyBpbiBzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAocmVnLCAnaScpXG4gICAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpKSB7XG4gICAgICAgIHJldHVybiB3b3JkLnJlcGxhY2UocGF0dGVybiwgc2luZ3VsYXJbcmVnXSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdvcmRcbiAgfVxuXG59XG5cbiJdfQ==