tnp-helpers 19.0.0 → 19.0.2
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.
- package/assets/shared/shared_folder_info.txt +3 -3
- package/browser/fesm2022/tnp-helpers.mjs +74 -39
- package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
- package/browser/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
- package/browser/lib/base/classes/base-git.d.ts +1 -1
- package/browser/lib/base/classes/base-node-modules.d.ts +1 -1
- package/browser/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
- package/browser/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
- package/browser/lib/build-info._auto-generated_.d.ts +3 -0
- package/browser/lib/helpers/helpers.d.ts +4 -1
- package/client/fesm2022/tnp-helpers.mjs +74 -39
- package/client/fesm2022/tnp-helpers.mjs.map +1 -1
- package/client/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
- package/client/lib/base/classes/base-git.d.ts +1 -1
- package/client/lib/base/classes/base-node-modules.d.ts +1 -1
- package/client/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
- package/client/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
- package/client/lib/build-info._auto-generated_.d.ts +3 -0
- package/client/lib/helpers/helpers.d.ts +4 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
- package/lib/base/classes/base-cli-worker/base-cli-worker.js +54 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker.js.map +1 -1
- package/lib/base/classes/base-global-command-line.backend.d.ts +2 -0
- package/lib/base/classes/base-global-command-line.backend.js +36 -1
- package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
- package/lib/base/classes/base-node-modules.d.ts +1 -1
- package/lib/base/classes/base-project-resolver.js +4 -2
- package/lib/base/classes/base-project-resolver.js.map +1 -1
- package/lib/base/classes/base-project.d.ts +1 -1
- package/lib/base/classes/base-vscode.js +3 -0
- package/lib/base/classes/base-vscode.js.map +1 -1
- package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -2
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +2 -2
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +3 -33
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -0
- package/lib/build-info._auto-generated_.js +4 -1
- package/lib/build-info._auto-generated_.js.map +1 -1
- package/lib/helpers/for-backend/helpers-file-folders.js.map +1 -1
- package/lib/helpers/for-backend/helpers-git.backend.d.ts +2 -0
- package/lib/helpers/for-backend/helpers-git.backend.js +34 -23
- package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
- package/lib/helpers/for-browser/angular.helper.js +2 -2
- package/lib/helpers/helpers.d.ts +4 -1
- package/lib/helpers/helpers.js +18 -15
- package/lib/helpers/helpers.js.map +1 -1
- package/lib/index._auto-generated_.js +2 -2
- package/lib/index._auto-generated_.js.map +1 -1
- package/lib/old/base-component.js +2 -2
- package/lib/old/base-formly-component.js +2 -2
- package/lib/old/dual-component-ctrl.js +2 -2
- package/package.json +5 -5
- package/src.d.ts +3 -3
- package/tmp-environment.json +5 -4
- package/websql/fesm2022/tnp-helpers.mjs +74 -40
- package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
- package/websql/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
- package/websql/lib/base/classes/base-git.d.ts +1 -1
- package/websql/lib/base/classes/base-node-modules.d.ts +1 -1
- package/websql/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
- package/websql/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
- package/websql/lib/build-info._auto-generated_.d.ts +3 -0
- package/websql/lib/helpers/helpers.d.ts +4 -1
- package/browser/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
- package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-config.mjs +0 -37
- package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-controller.mjs +0 -125
- package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.mjs +0 -133
- package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker.mjs +0 -404
- package/browser/esm2022/lib/base/classes/base-cli-worker/index.mjs +0 -7
- package/browser/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
- package/browser/esm2022/lib/base/classes/base-db.mjs +0 -31
- package/browser/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
- package/browser/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
- package/browser/esm2022/lib/base/classes/base-git.mjs +0 -1175
- package/browser/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
- package/browser/esm2022/lib/base/classes/base-library-build.mjs +0 -613
- package/browser/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
- package/browser/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
- package/browser/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
- package/browser/esm2022/lib/base/classes/base-package-json.mjs +0 -340
- package/browser/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
- package/browser/esm2022/lib/base/classes/base-project-resolver.mjs +0 -282
- package/browser/esm2022/lib/base/classes/base-project.mjs +0 -922
- package/browser/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
- package/browser/esm2022/lib/base/classes/base-release-process.mjs +0 -599
- package/browser/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
- package/browser/esm2022/lib/base/classes/base-vscode.mjs +0 -531
- package/browser/esm2022/lib/base/classes/index.mjs +0 -24
- package/browser/esm2022/lib/base/commit-data.mjs +0 -633
- package/browser/esm2022/lib/base/config-database.mjs +0 -46
- package/browser/esm2022/lib/base/core-project.mjs +0 -115
- package/browser/esm2022/lib/base/index.mjs +0 -10
- package/browser/esm2022/lib/base/linked-project.mjs +0 -90
- package/browser/esm2022/lib/base/project-database.mjs +0 -18
- package/browser/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
- package/browser/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
- package/browser/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -33
- package/browser/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
- package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.mjs +0 -261
- package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -45
- package/browser/esm2022/lib/base/translate.mjs +0 -566
- package/browser/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
- package/browser/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
- package/browser/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
- package/browser/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
- package/browser/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
- package/browser/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
- package/browser/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
- package/browser/esm2022/lib/helpers/helpers-strings.mjs +0 -258
- package/browser/esm2022/lib/helpers/helpers.mjs +0 -428
- package/browser/esm2022/lib/index.mjs +0 -13
- package/browser/esm2022/lib/models.mjs +0 -175
- package/browser/esm2022/lib/utils.mjs +0 -952
- package/browser/esm2022/lib/validators/validators-git.mjs +0 -12
- package/browser/esm2022/lib/validators/validators-network.mjs +0 -18
- package/browser/esm2022/lib/validators/validators.mjs +0 -10
- package/browser/esm2022/migrations/1736198527297_init.mjs +0 -41
- package/browser/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
- package/browser/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
- package/browser/esm2022/migrations/index.mjs +0 -5
- package/browser/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
- package/browser/esm2022/public-api.mjs +0 -2
- package/browser/esm2022/tnp-helpers.mjs +0 -5
- package/client/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
- package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-config.mjs +0 -37
- package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-controller.mjs +0 -125
- package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.mjs +0 -133
- package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker.mjs +0 -404
- package/client/esm2022/lib/base/classes/base-cli-worker/index.mjs +0 -7
- package/client/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
- package/client/esm2022/lib/base/classes/base-db.mjs +0 -31
- package/client/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
- package/client/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
- package/client/esm2022/lib/base/classes/base-git.mjs +0 -1175
- package/client/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
- package/client/esm2022/lib/base/classes/base-library-build.mjs +0 -613
- package/client/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
- package/client/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
- package/client/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
- package/client/esm2022/lib/base/classes/base-package-json.mjs +0 -340
- package/client/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
- package/client/esm2022/lib/base/classes/base-project-resolver.mjs +0 -282
- package/client/esm2022/lib/base/classes/base-project.mjs +0 -922
- package/client/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
- package/client/esm2022/lib/base/classes/base-release-process.mjs +0 -599
- package/client/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
- package/client/esm2022/lib/base/classes/base-vscode.mjs +0 -531
- package/client/esm2022/lib/base/classes/index.mjs +0 -24
- package/client/esm2022/lib/base/commit-data.mjs +0 -633
- package/client/esm2022/lib/base/config-database.mjs +0 -46
- package/client/esm2022/lib/base/core-project.mjs +0 -115
- package/client/esm2022/lib/base/index.mjs +0 -10
- package/client/esm2022/lib/base/linked-project.mjs +0 -90
- package/client/esm2022/lib/base/project-database.mjs +0 -18
- package/client/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
- package/client/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
- package/client/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -33
- package/client/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
- package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.mjs +0 -261
- package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -45
- package/client/esm2022/lib/base/translate.mjs +0 -566
- package/client/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
- package/client/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
- package/client/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
- package/client/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
- package/client/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
- package/client/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
- package/client/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
- package/client/esm2022/lib/helpers/helpers-strings.mjs +0 -258
- package/client/esm2022/lib/helpers/helpers.mjs +0 -428
- package/client/esm2022/lib/index.mjs +0 -13
- package/client/esm2022/lib/models.mjs +0 -175
- package/client/esm2022/lib/utils.mjs +0 -952
- package/client/esm2022/lib/validators/validators-git.mjs +0 -12
- package/client/esm2022/lib/validators/validators-network.mjs +0 -18
- package/client/esm2022/lib/validators/validators.mjs +0 -10
- package/client/esm2022/migrations/1736198527297_init.mjs +0 -41
- package/client/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
- package/client/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
- package/client/esm2022/migrations/index.mjs +0 -5
- package/client/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
- package/client/esm2022/public-api.mjs +0 -2
- package/client/esm2022/tnp-helpers.mjs +0 -5
- package/websql/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
- package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-config.mjs +0 -37
- package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-controller.mjs +0 -125
- package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.mjs +0 -133
- package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker.mjs +0 -404
- package/websql/esm2022/lib/base/classes/base-cli-worker/index.mjs +0 -7
- package/websql/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
- package/websql/esm2022/lib/base/classes/base-db.mjs +0 -31
- package/websql/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
- package/websql/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
- package/websql/esm2022/lib/base/classes/base-git.mjs +0 -1175
- package/websql/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
- package/websql/esm2022/lib/base/classes/base-library-build.mjs +0 -613
- package/websql/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
- package/websql/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
- package/websql/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
- package/websql/esm2022/lib/base/classes/base-package-json.mjs +0 -340
- package/websql/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
- package/websql/esm2022/lib/base/classes/base-project-resolver.mjs +0 -272
- package/websql/esm2022/lib/base/classes/base-project.mjs +0 -891
- package/websql/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
- package/websql/esm2022/lib/base/classes/base-release-process.mjs +0 -599
- package/websql/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
- package/websql/esm2022/lib/base/classes/base-vscode.mjs +0 -531
- package/websql/esm2022/lib/base/classes/index.mjs +0 -24
- package/websql/esm2022/lib/base/commit-data.mjs +0 -633
- package/websql/esm2022/lib/base/config-database.mjs +0 -46
- package/websql/esm2022/lib/base/core-project.mjs +0 -115
- package/websql/esm2022/lib/base/index.mjs +0 -10
- package/websql/esm2022/lib/base/linked-project.mjs +0 -90
- package/websql/esm2022/lib/base/project-database.mjs +0 -18
- package/websql/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
- package/websql/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
- package/websql/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -56
- package/websql/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
- package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.mjs +0 -261
- package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -45
- package/websql/esm2022/lib/base/translate.mjs +0 -566
- package/websql/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
- package/websql/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
- package/websql/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
- package/websql/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
- package/websql/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
- package/websql/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
- package/websql/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
- package/websql/esm2022/lib/helpers/helpers-strings.mjs +0 -258
- package/websql/esm2022/lib/helpers/helpers.mjs +0 -428
- package/websql/esm2022/lib/index.mjs +0 -13
- package/websql/esm2022/lib/models.mjs +0 -175
- package/websql/esm2022/lib/utils.mjs +0 -952
- package/websql/esm2022/lib/validators/validators-git.mjs +0 -12
- package/websql/esm2022/lib/validators/validators-network.mjs +0 -18
- package/websql/esm2022/lib/validators/validators.mjs +0 -10
- package/websql/esm2022/migrations/1736198527297_init.mjs +0 -41
- package/websql/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
- package/websql/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
- package/websql/esm2022/migrations/index.mjs +0 -5
- package/websql/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
- package/websql/esm2022/public-api.mjs +0 -2
- package/websql/esm2022/tnp-helpers.mjs +0 -5
|
@@ -1,891 +0,0 @@
|
|
|
1
|
-
import { path, crossPlatformPath } from 'tnp-core/websql';
|
|
2
|
-
import { _ } from 'tnp-core/websql';
|
|
3
|
-
import { CoreProject, Helpers } from '../../index';
|
|
4
|
-
import { BaseProjectResolver } from './base-project-resolver';
|
|
5
|
-
const takenPorts = [];
|
|
6
|
-
export class BaseProject {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.cache = {};
|
|
9
|
-
this.type = 'unknow';
|
|
10
|
-
this.toString = () => {
|
|
11
|
-
return `${this.name}=>${this.location}`;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
static { this.ins = new BaseProjectResolver(BaseProject, 'taon'); }
|
|
15
|
-
static { this.cache = {}; }
|
|
16
|
-
get globalCache() {
|
|
17
|
-
return BaseProject.cache;
|
|
18
|
-
}
|
|
19
|
-
get packageJson() {
|
|
20
|
-
return this.npmHelpers.packageJson;
|
|
21
|
-
}
|
|
22
|
-
get nodeModules() {
|
|
23
|
-
return this.npmHelpers.nodeModules;
|
|
24
|
-
}
|
|
25
|
-
get location() {
|
|
26
|
-
return this.__location;
|
|
27
|
-
}
|
|
28
|
-
set location(v) {
|
|
29
|
-
this.__location = crossPlatformPath(v);
|
|
30
|
-
}
|
|
31
|
-
/* */
|
|
32
|
-
/* */
|
|
33
|
-
/* */
|
|
34
|
-
/* */
|
|
35
|
-
/* */
|
|
36
|
-
/* */
|
|
37
|
-
/* */
|
|
38
|
-
/* */
|
|
39
|
-
/* */
|
|
40
|
-
/* */
|
|
41
|
-
/* */
|
|
42
|
-
/* */
|
|
43
|
-
/* */
|
|
44
|
-
/* */
|
|
45
|
-
/* */
|
|
46
|
-
/* */
|
|
47
|
-
/* */
|
|
48
|
-
/* */
|
|
49
|
-
/* */
|
|
50
|
-
/* */
|
|
51
|
-
/* */
|
|
52
|
-
/* */
|
|
53
|
-
/* */
|
|
54
|
-
/* */
|
|
55
|
-
/* */
|
|
56
|
-
/* */
|
|
57
|
-
/* */
|
|
58
|
-
/* */
|
|
59
|
-
/* */
|
|
60
|
-
/* */
|
|
61
|
-
/* */
|
|
62
|
-
/* */
|
|
63
|
-
/* */
|
|
64
|
-
/**
|
|
65
|
-
* TODO move this to framework
|
|
66
|
-
* Linked projects are actual inside repo
|
|
67
|
-
* not in separated folders/git sub repos
|
|
68
|
-
*/
|
|
69
|
-
get isMonorepo() {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
orderCoreProjects(coreProjects) {
|
|
73
|
-
const projectMap = new Map();
|
|
74
|
-
for (const project of coreProjects) {
|
|
75
|
-
projectMap.set(project, []);
|
|
76
|
-
}
|
|
77
|
-
for (const project of coreProjects) {
|
|
78
|
-
if (!projectMap.has(project.extends)) {
|
|
79
|
-
projectMap.set(project.extends, []);
|
|
80
|
-
}
|
|
81
|
-
projectMap.get(project.extends).push(project);
|
|
82
|
-
}
|
|
83
|
-
const orderedProjects = [];
|
|
84
|
-
const visited = new Set();
|
|
85
|
-
const visit = (project) => {
|
|
86
|
-
if (!visited.has(project)) {
|
|
87
|
-
visited.add(project);
|
|
88
|
-
const dependencies = projectMap.get(project);
|
|
89
|
-
if (dependencies) {
|
|
90
|
-
for (const dep of dependencies) {
|
|
91
|
-
visit(dep);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
orderedProjects.push(project);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
for (const project of coreProjects) {
|
|
98
|
-
visit(project);
|
|
99
|
-
}
|
|
100
|
-
return orderedProjects.reverse();
|
|
101
|
-
}
|
|
102
|
-
get core() {
|
|
103
|
-
if (!_.isUndefined(this.cache['core'])) {
|
|
104
|
-
return this.cache['core'];
|
|
105
|
-
}
|
|
106
|
-
let coreProjects = CoreProject.coreProjects.filter(p => p.recognizedFn(this));
|
|
107
|
-
coreProjects = this.orderCoreProjects(coreProjects);
|
|
108
|
-
this.cache['core'] = _.first(coreProjects);
|
|
109
|
-
return this.cache['core'];
|
|
110
|
-
}
|
|
111
|
-
get linkedProjectsExisted() {
|
|
112
|
-
/* */
|
|
113
|
-
/* */
|
|
114
|
-
/* */
|
|
115
|
-
/* */
|
|
116
|
-
/* */
|
|
117
|
-
/* */
|
|
118
|
-
/* */
|
|
119
|
-
return (void 0);
|
|
120
|
-
}
|
|
121
|
-
setType(type) {
|
|
122
|
-
// @ts-ignore
|
|
123
|
-
this.type = type;
|
|
124
|
-
}
|
|
125
|
-
typeIs(...types) {
|
|
126
|
-
return this.type && types.includes(this.type);
|
|
127
|
-
}
|
|
128
|
-
typeIsNot(...types) {
|
|
129
|
-
return !this.typeIs(...types);
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* project folder basename
|
|
133
|
-
*/
|
|
134
|
-
get basename() {
|
|
135
|
-
return path.basename(this.location);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* project folder parent basename
|
|
139
|
-
*/
|
|
140
|
-
get parentBasename() {
|
|
141
|
-
return path.basename(path.dirname(this.location));
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* name from package.json
|
|
145
|
-
*/
|
|
146
|
-
get name() {
|
|
147
|
-
return this.packageJson?.name || this.nameFromPomXML;
|
|
148
|
-
}
|
|
149
|
-
get nameForCli() {
|
|
150
|
-
return this.name?.endsWith('-cli') ? this.name : `${this.name}-cli`;
|
|
151
|
-
}
|
|
152
|
-
get nameForNpmPackage() {
|
|
153
|
-
return this.name;
|
|
154
|
-
}
|
|
155
|
-
get nameFromPomXML() {
|
|
156
|
-
const artifactIdPattern = /<artifactId>([^<]+)<\/artifactId>/;
|
|
157
|
-
const match = (this.readFile('pom.xml') || '').match(artifactIdPattern);
|
|
158
|
-
if (match && match[1]) {
|
|
159
|
-
return match[1];
|
|
160
|
-
}
|
|
161
|
-
return '';
|
|
162
|
-
}
|
|
163
|
-
getFoldersForPossibleProjectChildren() {
|
|
164
|
-
/* */
|
|
165
|
-
/* */
|
|
166
|
-
/* */
|
|
167
|
-
/* */
|
|
168
|
-
/* */
|
|
169
|
-
/* */
|
|
170
|
-
/* */
|
|
171
|
-
/* */
|
|
172
|
-
/* */
|
|
173
|
-
/* */
|
|
174
|
-
/* */
|
|
175
|
-
/* */
|
|
176
|
-
/* */
|
|
177
|
-
/* */
|
|
178
|
-
/* */
|
|
179
|
-
/* */
|
|
180
|
-
/* */
|
|
181
|
-
/* */
|
|
182
|
-
/* */
|
|
183
|
-
/* */
|
|
184
|
-
/* */
|
|
185
|
-
return (void 0);
|
|
186
|
-
}
|
|
187
|
-
getAllChildren() {
|
|
188
|
-
/* */
|
|
189
|
-
/* */
|
|
190
|
-
/* */
|
|
191
|
-
/* */
|
|
192
|
-
/* */
|
|
193
|
-
/* */
|
|
194
|
-
/* */
|
|
195
|
-
/* */
|
|
196
|
-
/* */
|
|
197
|
-
return (void 0);
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* alias to getAllChildren
|
|
201
|
-
*/
|
|
202
|
-
get children() {
|
|
203
|
-
return this.getAllChildren();
|
|
204
|
-
}
|
|
205
|
-
getChildBy(nameOrBasename, errors = true) {
|
|
206
|
-
const c = this.children.find(c => c.name === nameOrBasename || c.basename === nameOrBasename);
|
|
207
|
-
if (errors && !c) {
|
|
208
|
-
Helpers.warn(`Project doesnt contain child with name or basename: ${nameOrBasename}`);
|
|
209
|
-
}
|
|
210
|
-
return c;
|
|
211
|
-
}
|
|
212
|
-
get parent() {
|
|
213
|
-
if (!_.isString(this.location) || this.location.trim() === '') {
|
|
214
|
-
return void 0;
|
|
215
|
-
}
|
|
216
|
-
return this.ins.From(path.join(this.location, '..'));
|
|
217
|
-
}
|
|
218
|
-
get nearestParent() {
|
|
219
|
-
if (this.cache['nearestParent']) {
|
|
220
|
-
return this.cache['nearestParent'];
|
|
221
|
-
}
|
|
222
|
-
const nearestParent = this.ins.nearestTo([this.location, '..']);
|
|
223
|
-
if (nearestParent) {
|
|
224
|
-
this.cache['nearestParent'] = nearestParent;
|
|
225
|
-
}
|
|
226
|
-
return nearestParent;
|
|
227
|
-
}
|
|
228
|
-
get grandpa() {
|
|
229
|
-
if (!_.isString(this.location) || this.location.trim() === '') {
|
|
230
|
-
return void 0;
|
|
231
|
-
}
|
|
232
|
-
const grandpa = this.ins.From(path.join(this.location, '..', '..'));
|
|
233
|
-
return grandpa;
|
|
234
|
-
}
|
|
235
|
-
get allNpmPackagesNames() {
|
|
236
|
-
return [this.name];
|
|
237
|
-
}
|
|
238
|
-
get titleBarName() {
|
|
239
|
-
const allPackagesNames = this.allNpmPackagesNames.filter(f => f !== this.basename).length === 0
|
|
240
|
-
? ''
|
|
241
|
-
: `(${this.allNpmPackagesNames.filter(f => f !== this.basename).join(',')})`;
|
|
242
|
-
if (this.parent) {
|
|
243
|
-
return (`${path.basename(path.dirname(this.parent.location))}/${this.parent.name}/` +
|
|
244
|
-
`${this.basename} ${allPackagesNames} [ \${activeEditorShort} ]`);
|
|
245
|
-
}
|
|
246
|
-
return (`${path.basename(path.dirname(this.location))}/` +
|
|
247
|
-
`${this.basename} (${allPackagesNames}) [ \${activeEditorShort}]`);
|
|
248
|
-
}
|
|
249
|
-
get genericName() {
|
|
250
|
-
if (!_.isUndefined(this.cache['genericName'])) {
|
|
251
|
-
return this.cache['genericName'];
|
|
252
|
-
}
|
|
253
|
-
let nameFromPackageJson = this.name;
|
|
254
|
-
/* */
|
|
255
|
-
/* */
|
|
256
|
-
const sliceMinus = 8;
|
|
257
|
-
const shortPath = '/' +
|
|
258
|
-
crossPlatformPath(this.location)
|
|
259
|
-
.split('/')
|
|
260
|
-
.slice(-1 * sliceMinus)
|
|
261
|
-
.join('/');
|
|
262
|
-
const result = (shortPath.includes(crossPlatformPath(this.location)) ? '/' : '(..)') +
|
|
263
|
-
this.checkAndBoldenPath(this.location)
|
|
264
|
-
.split('/')
|
|
265
|
-
.slice(-1 * sliceMinus)
|
|
266
|
-
.join('/') +
|
|
267
|
-
`(${nameFromPackageJson})`;
|
|
268
|
-
this.cache['genericName'] = result.replace(/\/\//g, '/');
|
|
269
|
-
return this.cache['genericName'];
|
|
270
|
-
}
|
|
271
|
-
checkAndBoldenPath(fullPath) {
|
|
272
|
-
const parts = fullPath.split('/');
|
|
273
|
-
const result = parts.map((part, index) => {
|
|
274
|
-
const pathTocheck = parts.slice(0, index + 1).join('/');
|
|
275
|
-
/* */
|
|
276
|
-
/* */
|
|
277
|
-
/* */
|
|
278
|
-
/* */
|
|
279
|
-
return part;
|
|
280
|
-
});
|
|
281
|
-
return result.join('/');
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* same has project.hasFile();
|
|
285
|
-
*/
|
|
286
|
-
pathExists(relativePath) {
|
|
287
|
-
return this.hasFile(relativePath);
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* same as project.pathExists();
|
|
291
|
-
*/
|
|
292
|
-
hasFile(relativePath) {
|
|
293
|
-
/* */
|
|
294
|
-
/* */
|
|
295
|
-
/* */
|
|
296
|
-
return (void 0);
|
|
297
|
-
}
|
|
298
|
-
hasFolder(relativePath) {
|
|
299
|
-
/* */
|
|
300
|
-
/* */
|
|
301
|
-
/* */
|
|
302
|
-
/* */
|
|
303
|
-
/* */
|
|
304
|
-
return (void 0);
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Function will return relative path from project location
|
|
308
|
-
*/
|
|
309
|
-
relative(absoultePath) {
|
|
310
|
-
return crossPlatformPath(path.relative(crossPlatformPath(this.location), crossPlatformPath(absoultePath)));
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
*
|
|
314
|
-
* @param relativePath
|
|
315
|
-
* @param override it will remove ex
|
|
316
|
-
*/
|
|
317
|
-
createFolder(relativePath, options) {
|
|
318
|
-
/* */
|
|
319
|
-
/* */
|
|
320
|
-
/* */
|
|
321
|
-
/* */
|
|
322
|
-
/* */
|
|
323
|
-
/* */
|
|
324
|
-
/* */
|
|
325
|
-
/* */
|
|
326
|
-
/* */
|
|
327
|
-
/* */
|
|
328
|
-
/* */
|
|
329
|
-
/* */
|
|
330
|
-
return (void 0);
|
|
331
|
-
}
|
|
332
|
-
formatFile(specificRelativePath) {
|
|
333
|
-
/* */
|
|
334
|
-
/* */
|
|
335
|
-
/* */
|
|
336
|
-
/* */
|
|
337
|
-
return (void 0);
|
|
338
|
-
}
|
|
339
|
-
formatAllFiles() {
|
|
340
|
-
/* */
|
|
341
|
-
/* */
|
|
342
|
-
/* */
|
|
343
|
-
return (void 0);
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* same as project.pathhasFileExists();
|
|
347
|
-
* but with path.resolve
|
|
348
|
-
*/
|
|
349
|
-
containsFile(fileRelativeToProjectPath) {
|
|
350
|
-
const fullPath = path.resolve(path.join(this.location, fileRelativeToProjectPath));
|
|
351
|
-
return Helpers.exists(fullPath);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* absolute path:
|
|
355
|
-
* concated project location with relative path
|
|
356
|
-
*/
|
|
357
|
-
pathFor(relativePath) {
|
|
358
|
-
/* */
|
|
359
|
-
/* */
|
|
360
|
-
/* */
|
|
361
|
-
/* */
|
|
362
|
-
/* */
|
|
363
|
-
/* */
|
|
364
|
-
/* */
|
|
365
|
-
/* */
|
|
366
|
-
return (void 0);
|
|
367
|
-
}
|
|
368
|
-
writeJson(relativePath, json) {
|
|
369
|
-
/* */
|
|
370
|
-
/* */
|
|
371
|
-
/* */
|
|
372
|
-
/* */
|
|
373
|
-
/* */
|
|
374
|
-
return (void 0);
|
|
375
|
-
}
|
|
376
|
-
writeJsonC(relativePath, json) {
|
|
377
|
-
/* */
|
|
378
|
-
/* */
|
|
379
|
-
/* */
|
|
380
|
-
/* */
|
|
381
|
-
/* */
|
|
382
|
-
return (void 0);
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* @deprecated us execute instead
|
|
386
|
-
* use output from or more preciese crafted api
|
|
387
|
-
*/
|
|
388
|
-
run(command, options) {
|
|
389
|
-
let opt;
|
|
390
|
-
/* */
|
|
391
|
-
/* */
|
|
392
|
-
/* */
|
|
393
|
-
/* */
|
|
394
|
-
/* */
|
|
395
|
-
/* */
|
|
396
|
-
/* */
|
|
397
|
-
/* */
|
|
398
|
-
/* */
|
|
399
|
-
/* */
|
|
400
|
-
/* */
|
|
401
|
-
/* */
|
|
402
|
-
/* */
|
|
403
|
-
/* */
|
|
404
|
-
/* */
|
|
405
|
-
/* */
|
|
406
|
-
/* */
|
|
407
|
-
/* */
|
|
408
|
-
/* */
|
|
409
|
-
/* */
|
|
410
|
-
return Helpers.run(command, opt);
|
|
411
|
-
}
|
|
412
|
-
/**
|
|
413
|
-
* same as run but async
|
|
414
|
-
*/
|
|
415
|
-
async execute(command, options) {
|
|
416
|
-
/* */
|
|
417
|
-
/* */
|
|
418
|
-
/* */
|
|
419
|
-
/* */
|
|
420
|
-
/* */
|
|
421
|
-
/* */
|
|
422
|
-
/* */
|
|
423
|
-
/* */
|
|
424
|
-
/* */
|
|
425
|
-
/* */
|
|
426
|
-
/* */
|
|
427
|
-
/* */
|
|
428
|
-
/* */
|
|
429
|
-
/* */
|
|
430
|
-
/* */
|
|
431
|
-
/* */
|
|
432
|
-
/* */
|
|
433
|
-
/* */
|
|
434
|
-
/* */
|
|
435
|
-
return (void 0);
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* try run but continue when it fails
|
|
439
|
-
* @param command
|
|
440
|
-
* @param options
|
|
441
|
-
* @returns
|
|
442
|
-
*/
|
|
443
|
-
tryRunSync(command) {
|
|
444
|
-
/* */
|
|
445
|
-
/* */
|
|
446
|
-
/* */
|
|
447
|
-
/* */
|
|
448
|
-
/* */
|
|
449
|
-
/* */
|
|
450
|
-
return (void 0);
|
|
451
|
-
}
|
|
452
|
-
outputFrom(command) {
|
|
453
|
-
/* */
|
|
454
|
-
/* */
|
|
455
|
-
return (void 0);
|
|
456
|
-
}
|
|
457
|
-
removeFile(fileRelativeToProjectPath) {
|
|
458
|
-
/* */
|
|
459
|
-
/* */
|
|
460
|
-
/* */
|
|
461
|
-
/* */
|
|
462
|
-
/* */
|
|
463
|
-
return (void 0);
|
|
464
|
-
}
|
|
465
|
-
readFile(fileRelativeToProjectPath) {
|
|
466
|
-
/* */
|
|
467
|
-
/* */
|
|
468
|
-
/* */
|
|
469
|
-
/* */
|
|
470
|
-
/* */
|
|
471
|
-
/* */
|
|
472
|
-
return (void 0);
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* read json file
|
|
476
|
-
* handle all json files
|
|
477
|
-
* jsonc, json5 , json
|
|
478
|
-
* @param fileRelativeToProjectPath
|
|
479
|
-
* @returns
|
|
480
|
-
*/
|
|
481
|
-
readJson(fileRelativeToProjectPath) {
|
|
482
|
-
/* */
|
|
483
|
-
/* */
|
|
484
|
-
/* */
|
|
485
|
-
/* */
|
|
486
|
-
/* */
|
|
487
|
-
return (void 0);
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* copy files or folders from
|
|
491
|
-
* project to destination
|
|
492
|
-
*/
|
|
493
|
-
copy(filesOrFolderRelativePathes) {
|
|
494
|
-
return {
|
|
495
|
-
to: (destination) => {
|
|
496
|
-
/* */
|
|
497
|
-
/* */
|
|
498
|
-
/* */
|
|
499
|
-
/* */
|
|
500
|
-
/* */
|
|
501
|
-
/* */
|
|
502
|
-
/* */
|
|
503
|
-
/* */
|
|
504
|
-
/* */
|
|
505
|
-
/* */
|
|
506
|
-
/* */
|
|
507
|
-
/* */
|
|
508
|
-
/* */
|
|
509
|
-
/* */
|
|
510
|
-
/* */
|
|
511
|
-
/* */
|
|
512
|
-
/* */
|
|
513
|
-
return (void 0);
|
|
514
|
-
},
|
|
515
|
-
};
|
|
516
|
-
}
|
|
517
|
-
remove(relativePath, exactPath = true) {
|
|
518
|
-
/* */
|
|
519
|
-
/* */
|
|
520
|
-
/* */
|
|
521
|
-
/* */
|
|
522
|
-
/* */
|
|
523
|
-
/* */
|
|
524
|
-
/* */
|
|
525
|
-
/* */
|
|
526
|
-
/* */
|
|
527
|
-
return (void 0);
|
|
528
|
-
}
|
|
529
|
-
removeFolderByRelativePath(relativePathToFolder) {
|
|
530
|
-
/* */
|
|
531
|
-
/* */
|
|
532
|
-
/* */
|
|
533
|
-
/* */
|
|
534
|
-
/* */
|
|
535
|
-
}
|
|
536
|
-
get isAngularLib() {
|
|
537
|
-
/* */
|
|
538
|
-
/* */
|
|
539
|
-
/* */
|
|
540
|
-
/* */
|
|
541
|
-
/* */
|
|
542
|
-
/* */
|
|
543
|
-
/* */
|
|
544
|
-
/* */
|
|
545
|
-
/* */
|
|
546
|
-
/* */
|
|
547
|
-
/* */
|
|
548
|
-
/* */
|
|
549
|
-
return (void 0);
|
|
550
|
-
}
|
|
551
|
-
getUniqueForTask(task) {
|
|
552
|
-
return `task(${task}) in ${this.genericName}`;
|
|
553
|
-
}
|
|
554
|
-
async registerAndAssignPort(taskName, options) {
|
|
555
|
-
/* */
|
|
556
|
-
/* */
|
|
557
|
-
/* */
|
|
558
|
-
/* */
|
|
559
|
-
/* */
|
|
560
|
-
/* */
|
|
561
|
-
/* */
|
|
562
|
-
/* */
|
|
563
|
-
/* */
|
|
564
|
-
/* */
|
|
565
|
-
return (void 0);
|
|
566
|
-
}
|
|
567
|
-
/**
|
|
568
|
-
* @deprecated use this.registerAndAssignPort() or Utils.getFreePort() instead
|
|
569
|
-
*/
|
|
570
|
-
async assignFreePort(startFrom = 4200) {
|
|
571
|
-
/* */
|
|
572
|
-
/* */
|
|
573
|
-
return (void 0);
|
|
574
|
-
}
|
|
575
|
-
removeItself() {
|
|
576
|
-
/* */
|
|
577
|
-
/* */
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* Purpose: not initializing all classes at the beginning
|
|
581
|
-
* Only for BaseFeatureForProject class
|
|
582
|
-
*/
|
|
583
|
-
defineProperty(variableName, classFn, options) {
|
|
584
|
-
/* */
|
|
585
|
-
/* */
|
|
586
|
-
/* */
|
|
587
|
-
/* */
|
|
588
|
-
/* */
|
|
589
|
-
/* */
|
|
590
|
-
/* */
|
|
591
|
-
/* */
|
|
592
|
-
/* */
|
|
593
|
-
/* */
|
|
594
|
-
/* */
|
|
595
|
-
/* */
|
|
596
|
-
/* */
|
|
597
|
-
/* */
|
|
598
|
-
/* */
|
|
599
|
-
/* */
|
|
600
|
-
/* */
|
|
601
|
-
/* */
|
|
602
|
-
/* */
|
|
603
|
-
/* */
|
|
604
|
-
/* */
|
|
605
|
-
/* */
|
|
606
|
-
/* */
|
|
607
|
-
/* */
|
|
608
|
-
/* */
|
|
609
|
-
/* */
|
|
610
|
-
/* */
|
|
611
|
-
/* */
|
|
612
|
-
return (void 0);
|
|
613
|
-
}
|
|
614
|
-
/**
|
|
615
|
-
* fs.copy option filter function for copying only selected folders from project
|
|
616
|
-
*/
|
|
617
|
-
filterOnlyCopy(basePathFoldersOnlyToInclude) {
|
|
618
|
-
/* */
|
|
619
|
-
/* */
|
|
620
|
-
return (void 0);
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* fs.copy option filter function for copying only not selected folders from project
|
|
624
|
-
*/
|
|
625
|
-
filterDontCopy(basePathFoldersTosSkip) {
|
|
626
|
-
/* */
|
|
627
|
-
/* */
|
|
628
|
-
return (void 0);
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* main/default hardcoded branches
|
|
632
|
-
*/
|
|
633
|
-
getMainBranches() {
|
|
634
|
-
return ['master', 'develop', 'stage', 'prod', 'test'];
|
|
635
|
-
}
|
|
636
|
-
useFeatureInBranchNameForTests() {
|
|
637
|
-
return false;
|
|
638
|
-
}
|
|
639
|
-
async resetProcess(overrideBranch, recrusive = false) {
|
|
640
|
-
/* */
|
|
641
|
-
/* */
|
|
642
|
-
/* */
|
|
643
|
-
/* */
|
|
644
|
-
/* */
|
|
645
|
-
/* */
|
|
646
|
-
/* */
|
|
647
|
-
/* */
|
|
648
|
-
/* */
|
|
649
|
-
/* */
|
|
650
|
-
/* */
|
|
651
|
-
/* */
|
|
652
|
-
/* */
|
|
653
|
-
/* */
|
|
654
|
-
/* */
|
|
655
|
-
/* */
|
|
656
|
-
/* */
|
|
657
|
-
/* */
|
|
658
|
-
/* */
|
|
659
|
-
/* */
|
|
660
|
-
/* */
|
|
661
|
-
/* */
|
|
662
|
-
/* */
|
|
663
|
-
/* */
|
|
664
|
-
/* */
|
|
665
|
-
/* */
|
|
666
|
-
/* */
|
|
667
|
-
/* */
|
|
668
|
-
/* */
|
|
669
|
-
/* */
|
|
670
|
-
/* */
|
|
671
|
-
/* */
|
|
672
|
-
/* */
|
|
673
|
-
/* */
|
|
674
|
-
/* */
|
|
675
|
-
/* */
|
|
676
|
-
/* */
|
|
677
|
-
/* */
|
|
678
|
-
/* */
|
|
679
|
-
/* */
|
|
680
|
-
/* */
|
|
681
|
-
/* */
|
|
682
|
-
/* */
|
|
683
|
-
/* */
|
|
684
|
-
/* */
|
|
685
|
-
/* */
|
|
686
|
-
/* */
|
|
687
|
-
/* */
|
|
688
|
-
/* */
|
|
689
|
-
/* */
|
|
690
|
-
/* */
|
|
691
|
-
/* */
|
|
692
|
-
/* */
|
|
693
|
-
}
|
|
694
|
-
linkTo(destPackageLocation) {
|
|
695
|
-
/* */
|
|
696
|
-
/* */
|
|
697
|
-
}
|
|
698
|
-
setValueToJSON(relativePath, lodashGetPath, value) {
|
|
699
|
-
/* */
|
|
700
|
-
/* */
|
|
701
|
-
/* */
|
|
702
|
-
/* */
|
|
703
|
-
/* */
|
|
704
|
-
return (void 0);
|
|
705
|
-
}
|
|
706
|
-
setValueToJSONC(relativePath, lodashGetPath, value) {
|
|
707
|
-
/* */
|
|
708
|
-
/* */
|
|
709
|
-
/* */
|
|
710
|
-
/* */
|
|
711
|
-
/* */
|
|
712
|
-
return (void 0);
|
|
713
|
-
}
|
|
714
|
-
setValueToJSON5(relativePath, lodashGetPath, value) {
|
|
715
|
-
/* */
|
|
716
|
-
/* */
|
|
717
|
-
/* */
|
|
718
|
-
/* */
|
|
719
|
-
/* */
|
|
720
|
-
return (void 0);
|
|
721
|
-
}
|
|
722
|
-
getValueFromJSON(relativePath, lodashGetPath, defaultValue = void 0) {
|
|
723
|
-
/* */
|
|
724
|
-
/* */
|
|
725
|
-
/* */
|
|
726
|
-
/* */
|
|
727
|
-
/* */
|
|
728
|
-
/* */
|
|
729
|
-
/* */
|
|
730
|
-
/* */
|
|
731
|
-
/* */
|
|
732
|
-
return (void 0);
|
|
733
|
-
}
|
|
734
|
-
getValueFromJSONC(relativePath, lodashGetPath, defaultValue = void 0) {
|
|
735
|
-
/* */
|
|
736
|
-
/* */
|
|
737
|
-
/* */
|
|
738
|
-
/* */
|
|
739
|
-
/* */
|
|
740
|
-
/* */
|
|
741
|
-
/* */
|
|
742
|
-
/* */
|
|
743
|
-
/* */
|
|
744
|
-
return (void 0);
|
|
745
|
-
}
|
|
746
|
-
writeFile(relativePath, content) {
|
|
747
|
-
/* */
|
|
748
|
-
/* */
|
|
749
|
-
/* */
|
|
750
|
-
/* */
|
|
751
|
-
/* */
|
|
752
|
-
}
|
|
753
|
-
runCommandGetString(command) {
|
|
754
|
-
/* */
|
|
755
|
-
/* */
|
|
756
|
-
/* */
|
|
757
|
-
/* */
|
|
758
|
-
return (void 0);
|
|
759
|
-
}
|
|
760
|
-
get parentsNames() {
|
|
761
|
-
/* */
|
|
762
|
-
/* */
|
|
763
|
-
return (void 0);
|
|
764
|
-
}
|
|
765
|
-
openLocation(relativeFolderPath) {
|
|
766
|
-
/* */
|
|
767
|
-
/* */
|
|
768
|
-
return (void 0);
|
|
769
|
-
}
|
|
770
|
-
findParentsNames(project, parent, result = []) {
|
|
771
|
-
/* */
|
|
772
|
-
/* */
|
|
773
|
-
/* */
|
|
774
|
-
/* */
|
|
775
|
-
/* */
|
|
776
|
-
/* */
|
|
777
|
-
/* */
|
|
778
|
-
/* */
|
|
779
|
-
/* */
|
|
780
|
-
/* */
|
|
781
|
-
/* */
|
|
782
|
-
return (void 0);
|
|
783
|
-
}
|
|
784
|
-
tryKillAllElectronInstances() {
|
|
785
|
-
/* */
|
|
786
|
-
/* */
|
|
787
|
-
/* */
|
|
788
|
-
/* */
|
|
789
|
-
/* */
|
|
790
|
-
/* */
|
|
791
|
-
/* */
|
|
792
|
-
/* */
|
|
793
|
-
/* */
|
|
794
|
-
/* */
|
|
795
|
-
return (void 0);
|
|
796
|
-
}
|
|
797
|
-
/**
|
|
798
|
-
* init project files structure and depedencies
|
|
799
|
-
*/
|
|
800
|
-
async init(initOptions) {
|
|
801
|
-
throw new Error('TODO IMPLEMENT');
|
|
802
|
-
}
|
|
803
|
-
/**
|
|
804
|
-
* globally link npm as package
|
|
805
|
-
*/
|
|
806
|
-
async link() {
|
|
807
|
-
throw new Error('TODO IMPLEMENT');
|
|
808
|
-
}
|
|
809
|
-
/**
|
|
810
|
-
* init project files structure without depedencies
|
|
811
|
-
*/
|
|
812
|
-
async struct(initOptions) {
|
|
813
|
-
throw new Error('TODO IMPLEMENT');
|
|
814
|
-
}
|
|
815
|
-
/**
|
|
816
|
-
* init and build() project
|
|
817
|
-
*/
|
|
818
|
-
async test(testOptions) {
|
|
819
|
-
throw new Error('TODO IMPLEMENT');
|
|
820
|
-
}
|
|
821
|
-
/**
|
|
822
|
-
* init and build() project
|
|
823
|
-
*/
|
|
824
|
-
async build(buildOptions) {
|
|
825
|
-
throw new Error('TODO IMPLEMENT');
|
|
826
|
-
}
|
|
827
|
-
/**
|
|
828
|
-
* publish project to npm
|
|
829
|
-
*/
|
|
830
|
-
async publish(publishOptions) {
|
|
831
|
-
this.npmHelpers.publishToNpmRegistry();
|
|
832
|
-
}
|
|
833
|
-
async release(releaseOptions) {
|
|
834
|
-
throw new Error('TODO IMPLEMENT');
|
|
835
|
-
}
|
|
836
|
-
/**
|
|
837
|
-
* lint porject
|
|
838
|
-
*/
|
|
839
|
-
async lint(lintOptions) {
|
|
840
|
-
Helpers.info(`
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
COMMIT LINT NOT IMPLEMENTED
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
`);
|
|
847
|
-
}
|
|
848
|
-
/**
|
|
849
|
-
* get info about porject
|
|
850
|
-
*/
|
|
851
|
-
async info() {
|
|
852
|
-
/* */
|
|
853
|
-
/* */
|
|
854
|
-
/* */
|
|
855
|
-
/* */
|
|
856
|
-
/* */
|
|
857
|
-
/* */
|
|
858
|
-
/* */
|
|
859
|
-
/* */
|
|
860
|
-
/* */
|
|
861
|
-
/* */
|
|
862
|
-
/* */
|
|
863
|
-
/* */
|
|
864
|
-
/* */
|
|
865
|
-
/* */
|
|
866
|
-
/* */
|
|
867
|
-
/* */
|
|
868
|
-
/* */
|
|
869
|
-
/* */
|
|
870
|
-
/* */
|
|
871
|
-
/* */
|
|
872
|
-
/* */
|
|
873
|
-
/* */
|
|
874
|
-
/* */
|
|
875
|
-
/* */
|
|
876
|
-
/* */
|
|
877
|
-
/* */
|
|
878
|
-
/* */
|
|
879
|
-
/* */
|
|
880
|
-
/* */
|
|
881
|
-
/* */
|
|
882
|
-
/* */
|
|
883
|
-
/* */
|
|
884
|
-
/* */
|
|
885
|
-
/* */
|
|
886
|
-
return (void 0);
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
;
|
|
890
|
-
({}); // @--end-of-file-for-module=tnp-helpers lib/base/classes/base-project.ts
|
|
891
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvYmFzZS9jbGFzc2VzL2Jhc2UtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFtQixNQUFNLGFBQWEsQ0FBQztBQU9wRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU85RCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIsTUFBTSxPQUFnQixXQUFXO0lBQWpDO1FBYVMsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQUtkLFNBQUksR0FBa0IsUUFBUSxDQUFDO1FBdWlDeEMsYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNkLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUM7SUEyS0osQ0FBQzthQS90Q1EsUUFBRyxHQUFHLElBQUksbUJBQW1CLENBQWMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxBQUE1RCxDQUE2RDthQU96RCxVQUFLLEdBQVEsRUFBRSxBQUFWLENBQVc7SUFDOUIsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBZ0JELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7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b0I7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFJRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBaUI7UUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7O0tBTVosQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDWixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7QUFJRixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlFQUF5RSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ3RucC1jb25maWcvd2Vic3FsJztcbmltcG9ydCB7IENvbW1hbmRPdXRwdXRPcHRpb25zIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IENvcmVNb2RlbHMgfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHsgQ0xJIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IHBhdGgsIGNyb3NzUGxhdGZvcm1QYXRoIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IGZzZSwgY2hhbGsgfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5cbmltcG9ydCB7IENvcmVQcm9qZWN0LCBIZWxwZXJzLCBVdGlsc1R5cGVzY3JpcHQgfSBmcm9tICcuLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBCYXNlUHJvamVjdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5pbXBvcnQgeyBCYXNlR2l0IH0gZnJvbSAnLi9iYXNlLWdpdCc7XG5pbXBvcnQgdHlwZSB7IEJhc2VMaWJyYXJ5QnVpbGQgfSBmcm9tICcuL2Jhc2UtbGlicmFyeS1idWlsZCc7XG5pbXBvcnQgeyBCYXNlTGlua2VkUHJvamVjdHMgfSBmcm9tICcuL2Jhc2UtbGlua2VkLXByb2plY3RzJztcbmltcG9ydCB7IEJhc2VOcG1IZWxwZXJzIH0gZnJvbSAnLi9iYXNlLW5wbS1oZWxwZXJzJztcbmltcG9ydCB7IEJhc2VQcm9qZWN0UmVzb2x2ZXIgfSBmcm9tICcuL2Jhc2UtcHJvamVjdC1yZXNvbHZlcic7XG5pbXBvcnQgeyBCYXNlUXVpY2tGaXhlcyB9IGZyb20gJy4vYmFzZS1xdWljay1maXhlcyc7XG5pbXBvcnQgeyBCYXNlUmVsZWFzZVByb2Nlc3MgfSBmcm9tICcuL2Jhc2UtcmVsZWFzZS1wcm9jZXNzJztcbmltcG9ydCB7IEJhc2VTdGF0aWNQYWdlcyB9IGZyb20gJy4vYmFzZS1zdGF0aWMtcGFnZXMnO1xuaW1wb3J0IHsgQmFzZVZzY29kZUhlbHBlcnMgfSBmcm9tICcuL2Jhc2UtdnNjb2RlJztcblxuXG5jb25zdCB0YWtlblBvcnRzID0gW107XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUHJvamVjdDxcbiAgUFJPSkVDVCBleHRlbmRzIEJhc2VQcm9qZWN0PGFueSwgYW55PiA9IEJhc2VQcm9qZWN0PGFueSwgYW55PixcbiAgVFlQRSA9IEJhc2VQcm9qZWN0VHlwZSxcbj4ge1xuXG5cblxuICBzdGF0aWMgaW5zID0gbmV3IEJhc2VQcm9qZWN0UmVzb2x2ZXI8QmFzZVByb2plY3Q+KEJhc2VQcm9qZWN0LCAndGFvbicpO1xuXG5cblxuXG5cbiAgcHVibGljIGNhY2hlOiBhbnkgPSB7fTtcbiAgcHVibGljIHN0YXRpYyBjYWNoZTogYW55ID0ge307XG4gIHB1YmxpYyBnZXQgZ2xvYmFsQ2FjaGUoKTogYW55IHtcbiAgICByZXR1cm4gQmFzZVByb2plY3QuY2FjaGU7XG4gIH1cbiAgcmVhZG9ubHkgdHlwZTogVFlQRSB8IHN0cmluZyA9ICd1bmtub3cnO1xuXG4gIC8qKlxuICAgKiByZXNvbHZlIGluc3RhbmNlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbnM6IEJhc2VQcm9qZWN0UmVzb2x2ZXI8UFJPSkVDVD47XG4gIC8qKlxuICAgKiBVbmlxdWUgZnJlZSBwb3J0IGZvciBwcm9qZWN0IGluc3RhbmNlXG4gICAqIG9ubHkgYXZhaWxhYmxlIGFmdGVyIGV4ZWN1dGluZyAqdGhpcy5hc3NpZ25GcmVlUG9ydCgpKlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogc3RyaW5nO1xuXG4gIHB1YmxpYyBsaWJyYXJ5QnVpbGQ/OiBCYXNlTGlicmFyeUJ1aWxkPEJhc2VQcm9qZWN0PjtcbiAgcHVibGljIG5wbUhlbHBlcnM/OiBCYXNlTnBtSGVscGVycztcblxuICBnZXQgcGFja2FnZUpzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubnBtSGVscGVycy5wYWNrYWdlSnNvbjtcbiAgfVxuXG4gIGdldCBub2RlTW9kdWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5ucG1IZWxwZXJzLm5vZGVNb2R1bGVzO1xuICB9XG5cbiAgcHVibGljIGxpbmtlZFByb2plY3RzPzogQmFzZUxpbmtlZFByb2plY3RzO1xuICBwdWJsaWMgdnNDb2RlSGVscGVycz86IEJhc2VWc2NvZGVIZWxwZXJzO1xuICBwdWJsaWMgcmVsZWFzZVByb2Nlc3M/OiBCYXNlUmVsZWFzZVByb2Nlc3M7XG4gIHB1YmxpYyBnaXQ/OiBCYXNlR2l0O1xuICBwdWJsaWMgcXVpY2tGaXhlcz86IEJhc2VRdWlja0ZpeGVzO1xuICBwdWJsaWMgc3RhdGljUGFnZXM/OiBCYXNlU3RhdGljUGFnZXM7XG5cblxuICBwcml2YXRlIF9fbG9jYXRpb246IHN0cmluZztcbiAgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX19sb2NhdGlvbjtcbiAgfVxuICBzZXQgbG9jYXRpb24odjogc3RyaW5nKSB7XG4gICAgdGhpcy5fX2xvY2F0aW9uID0gY3Jvc3NQbGF0Zm9ybVBhdGgodik7XG4gIH1cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuICAvKipcbiAgICogVE9ETyBtb3ZlIHRoaXMgdG8gZnJhbWV3b3JrXG4gICAqIExpbmtlZCBwcm9qZWN0cyBhcmUgYWN0dWFsIGluc2lkZSByZXBvXG4gICAqIG5vdCBpbiBzZXBhcmF0ZWQgZm9sZGVycy9naXQgc3ViIHJlcG9zXG4gICAqL1xuICBnZXQgaXNNb25vcmVwbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIG9yZGVyQ29yZVByb2plY3RzKGNvcmVQcm9qZWN0czogQ29yZVByb2plY3RbXSk6IENvcmVQcm9qZWN0W10ge1xuICAgIGNvbnN0IHByb2plY3RNYXAgPSBuZXcgTWFwPENvcmVQcm9qZWN0LCBDb3JlUHJvamVjdFtdPigpO1xuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICBwcm9qZWN0TWFwLnNldChwcm9qZWN0LCBbXSk7XG4gICAgfVxuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICBpZiAoIXByb2plY3RNYXAuaGFzKHByb2plY3QuZXh0ZW5kcykpIHtcbiAgICAgICAgcHJvamVjdE1hcC5zZXQocHJvamVjdC5leHRlbmRzLCBbXSk7XG4gICAgICB9XG4gICAgICBwcm9qZWN0TWFwLmdldChwcm9qZWN0LmV4dGVuZHMpIS5wdXNoKHByb2plY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyZWRQcm9qZWN0czogQ29yZVByb2plY3RbXSA9IFtdO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PENvcmVQcm9qZWN0PigpO1xuXG4gICAgY29uc3QgdmlzaXQgPSAocHJvamVjdDogQ29yZVByb2plY3QpID0+IHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMocHJvamVjdCkpIHtcbiAgICAgICAgdmlzaXRlZC5hZGQocHJvamVjdCk7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHByb2plY3RNYXAuZ2V0KHByb2plY3QpO1xuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB2aXNpdChkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcmRlcmVkUHJvamVjdHMucHVzaChwcm9qZWN0KTtcbiAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICB2aXNpdChwcm9qZWN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JkZXJlZFByb2plY3RzLnJldmVyc2UoKTtcbiAgfVxuXG5cblxuXG4gIGdldCBjb3JlKCk6IENvcmVQcm9qZWN0IHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5jYWNoZVsnY29yZSddKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2NvcmUnXTtcbiAgICB9XG5cbiAgICBsZXQgY29yZVByb2plY3RzID0gQ29yZVByb2plY3QuY29yZVByb2plY3RzLmZpbHRlcihwID0+XG4gICAgICBwLnJlY29nbml6ZWRGbih0aGlzIGFzIGFueSksXG4gICAgKTtcbiAgICBjb3JlUHJvamVjdHMgPSB0aGlzLm9yZGVyQ29yZVByb2plY3RzKGNvcmVQcm9qZWN0cyk7XG5cblxuICAgIHRoaXMuY2FjaGVbJ2NvcmUnXSA9IF8uZmlyc3QoY29yZVByb2plY3RzKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVsnY29yZSddO1xuICB9XG5cblxuXG4gIGdldCBsaW5rZWRQcm9qZWN0c0V4aXN0ZWQoKTogUFJPSkVDVFtdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHB1YmxpYyBzZXRUeXBlKHR5cGU6IFRZUEUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHlwZUlzKC4uLnR5cGVzOiBUWVBFW10pIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHR5cGVzLmluY2x1ZGVzKHRoaXMudHlwZSBhcyBhbnkpO1xuICB9XG5cblxuXG4gIHB1YmxpYyB0eXBlSXNOb3QoLi4udHlwZXM6IFRZUEVbXSkge1xuICAgIHJldHVybiAhdGhpcy50eXBlSXMoLi4udHlwZXMpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBwcm9qZWN0IGZvbGRlciBiYXNlbmFtZVxuICAgKi9cbiAgZ2V0IGJhc2VuYW1lKCk6IHN0cmluZyB7XG5cbiAgICByZXR1cm4gcGF0aC5iYXNlbmFtZSh0aGlzLmxvY2F0aW9uKTtcblxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBwcm9qZWN0IGZvbGRlciBwYXJlbnQgYmFzZW5hbWVcbiAgICovXG4gIGdldCBwYXJlbnRCYXNlbmFtZSgpOiBzdHJpbmcge1xuXG4gICAgcmV0dXJuIHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRoaXMubG9jYXRpb24pKTtcblxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBuYW1lIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VKc29uPy5uYW1lIHx8IHRoaXMubmFtZUZyb21Qb21YTUw7XG4gIH1cblxuICBnZXQgbmFtZUZvckNsaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU/LmVuZHNXaXRoKCctY2xpJykgPyB0aGlzLm5hbWUgOiBgJHt0aGlzLm5hbWV9LWNsaWA7XG4gIH1cblxuICBnZXQgbmFtZUZvck5wbVBhY2thZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0IG5hbWVGcm9tUG9tWE1MKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYXJ0aWZhY3RJZFBhdHRlcm4gPSAvPGFydGlmYWN0SWQ+KFtePF0rKTxcXC9hcnRpZmFjdElkPi87XG4gICAgY29uc3QgbWF0Y2ggPSAodGhpcy5yZWFkRmlsZSgncG9tLnhtbCcpIHx8ICcnKS5tYXRjaChhcnRpZmFjdElkUGF0dGVybik7XG4gICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICByZXR1cm4gbWF0Y2hbMV07XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0Rm9sZGVyc0ZvclBvc3NpYmxlUHJvamVjdENoaWxkcmVuKCk6IHN0cmluZ1tdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldEFsbENoaWxkcmVuKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogYWxpYXMgdG8gZ2V0QWxsQ2hpbGRyZW5cbiAgICovXG4gIGdldCBjaGlsZHJlbigpOiBQUk9KRUNUW10ge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsQ2hpbGRyZW4oKTtcblxuICB9XG5cblxuXG4gIGdldENoaWxkQnkobmFtZU9yQmFzZW5hbWU6IHN0cmluZywgZXJyb3JzID0gdHJ1ZSk6IFBST0pFQ1Qge1xuXG4gICAgY29uc3QgYyA9IHRoaXMuY2hpbGRyZW4uZmluZChcbiAgICAgIGMgPT4gYy5uYW1lID09PSBuYW1lT3JCYXNlbmFtZSB8fCBjLmJhc2VuYW1lID09PSBuYW1lT3JCYXNlbmFtZSxcbiAgICApO1xuICAgIGlmIChlcnJvcnMgJiYgIWMpIHtcblxuICAgICAgSGVscGVycy53YXJuKFxuICAgICAgICBgUHJvamVjdCBkb2VzbnQgY29udGFpbiBjaGlsZCB3aXRoIG5hbWUgb3IgYmFzZW5hbWU6ICR7bmFtZU9yQmFzZW5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjO1xuXG4gIH1cblxuXG5cbiAgZ2V0IHBhcmVudCgpOiBQUk9KRUNUIHtcblxuICAgIGlmICghXy5pc1N0cmluZyh0aGlzLmxvY2F0aW9uKSB8fCB0aGlzLmxvY2F0aW9uLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlucy5Gcm9tKHBhdGguam9pbih0aGlzLmxvY2F0aW9uLCAnLi4nKSk7XG5cbiAgfVxuXG5cblxuICBnZXQgbmVhcmVzdFBhcmVudCgpOiBQUk9KRUNUIHtcblxuICAgIGlmICh0aGlzLmNhY2hlWyduZWFyZXN0UGFyZW50J10pIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlWyduZWFyZXN0UGFyZW50J107XG4gICAgfVxuICAgIGNvbnN0IG5lYXJlc3RQYXJlbnQgPSB0aGlzLmlucy5uZWFyZXN0VG8oW3RoaXMubG9jYXRpb24sICcuLiddKSBhcyBQUk9KRUNUO1xuICAgIGlmIChuZWFyZXN0UGFyZW50KSB7XG5cblxuXG5cbiAgICAgIHRoaXMuY2FjaGVbJ25lYXJlc3RQYXJlbnQnXSA9IG5lYXJlc3RQYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBuZWFyZXN0UGFyZW50O1xuXG4gIH1cblxuXG5cbiAgZ2V0IGdyYW5kcGEoKTogUFJPSkVDVCB7XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcodGhpcy5sb2NhdGlvbikgfHwgdGhpcy5sb2NhdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCBncmFuZHBhID0gdGhpcy5pbnMuRnJvbShwYXRoLmpvaW4odGhpcy5sb2NhdGlvbiwgJy4uJywgJy4uJykpO1xuICAgIHJldHVybiBncmFuZHBhO1xuXG4gIH1cblxuXG5cbiAgZ2V0IGFsbE5wbVBhY2thZ2VzTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbdGhpcy5uYW1lXTtcbiAgfVxuXG4gIGdldCB0aXRsZUJhck5hbWUoKSB7XG4gICAgY29uc3QgYWxsUGFja2FnZXNOYW1lcyA9XG4gICAgICB0aGlzLmFsbE5wbVBhY2thZ2VzTmFtZXMuZmlsdGVyKGYgPT4gZiAhPT0gdGhpcy5iYXNlbmFtZSkubGVuZ3RoID09PSAwXG4gICAgICAgID8gJydcbiAgICAgICAgOiBgKCR7dGhpcy5hbGxOcG1QYWNrYWdlc05hbWVzLmZpbHRlcihmID0+IGYgIT09IHRoaXMuYmFzZW5hbWUpLmpvaW4oJywnKX0pYDtcblxuICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYCR7cGF0aC5iYXNlbmFtZShwYXRoLmRpcm5hbWUodGhpcy5wYXJlbnQubG9jYXRpb24pKX0vJHt0aGlzLnBhcmVudC5uYW1lfS9gICtcbiAgICAgICAgYCR7dGhpcy5iYXNlbmFtZX0gJHthbGxQYWNrYWdlc05hbWVzfSBbIFxcJHthY3RpdmVFZGl0b3JTaG9ydH0gXWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBgJHtwYXRoLmJhc2VuYW1lKHBhdGguZGlybmFtZSh0aGlzLmxvY2F0aW9uKSl9L2AgK1xuICAgICAgYCR7dGhpcy5iYXNlbmFtZX0gKCR7YWxsUGFja2FnZXNOYW1lc30pIFsgXFwke2FjdGl2ZUVkaXRvclNob3J0fV1gXG4gICAgKTtcbiAgfVxuXG4gIGdldCBnZW5lcmljTmFtZSgpIHtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmNhY2hlWydnZW5lcmljTmFtZSddKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2dlbmVyaWNOYW1lJ107XG4gICAgfVxuICAgIGxldCBuYW1lRnJvbVBhY2thZ2VKc29uID0gdGhpcy5uYW1lO1xuLyogKi9cbi8qICovXG4gIFxuXG4gICAgY29uc3Qgc2xpY2VNaW51cyA9IDg7XG4gICAgY29uc3Qgc2hvcnRQYXRoID1cbiAgICAgICcvJyArXG4gICAgICBjcm9zc1BsYXRmb3JtUGF0aCh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoLTEgKiBzbGljZU1pbnVzKVxuICAgICAgICAuam9pbignLycpO1xuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIChzaG9ydFBhdGguaW5jbHVkZXMoY3Jvc3NQbGF0Zm9ybVBhdGgodGhpcy5sb2NhdGlvbikpID8gJy8nIDogJyguLiknKSArXG4gICAgICB0aGlzLmNoZWNrQW5kQm9sZGVuUGF0aCh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoLTEgKiBzbGljZU1pbnVzKVxuICAgICAgICAuam9pbignLycpICtcbiAgICAgIGAoJHtuYW1lRnJvbVBhY2thZ2VKc29ufSlgO1xuXG4gICAgdGhpcy5jYWNoZVsnZ2VuZXJpY05hbWUnXSA9IHJlc3VsdC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVsnZ2VuZXJpY05hbWUnXTtcblxuICB9XG5cblxuXG4gIHByaXZhdGUgY2hlY2tBbmRCb2xkZW5QYXRoKGZ1bGxQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJ0cyA9IGZ1bGxQYXRoLnNwbGl0KCcvJyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBwYXJ0cy5tYXAoKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXRoVG9jaGVjayA9IHBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIHJldHVybiBwYXJ0O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCcvJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHNhbWUgaGFzIHByb2plY3QuaGFzRmlsZSgpO1xuICAgKi9cbiAgcGF0aEV4aXN0cyhyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsZShyZWxhdGl2ZVBhdGgpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGFzIHByb2plY3QucGF0aEV4aXN0cygpO1xuICAgKi9cbiAgaGFzRmlsZShyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG4gIGhhc0ZvbGRlcihyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHdpbGwgcmV0dXJuIHJlbGF0aXZlIHBhdGggZnJvbSBwcm9qZWN0IGxvY2F0aW9uXG4gICAqL1xuICByZWxhdGl2ZShhYnNvdWx0ZVBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBjcm9zc1BsYXRmb3JtUGF0aChcbiAgICAgIHBhdGgucmVsYXRpdmUoXG4gICAgICAgIGNyb3NzUGxhdGZvcm1QYXRoKHRoaXMubG9jYXRpb24pLFxuICAgICAgICBjcm9zc1BsYXRmb3JtUGF0aChhYnNvdWx0ZVBhdGgpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVsYXRpdmVQYXRoXG4gICAqIEBwYXJhbSBvdmVycmlkZSBpdCB3aWxsIHJlbW92ZSBleFxuICAgKi9cbiAgY3JlYXRlRm9sZGVyKFxuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIG92ZXJyaWRlPzogYm9vbGVhbjtcbiAgICB9LFxuICApIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZm9ybWF0RmlsZShzcGVjaWZpY1JlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cbiAgZm9ybWF0QWxsRmlsZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGFzIHByb2plY3QucGF0aGhhc0ZpbGVFeGlzdHMoKTtcbiAgICogYnV0IHdpdGggcGF0aC5yZXNvbHZlXG4gICAqL1xuICBjb250YWluc0ZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICBwYXRoLmpvaW4odGhpcy5sb2NhdGlvbiwgZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aCksXG4gICAgKTtcbiAgICByZXR1cm4gSGVscGVycy5leGlzdHMoZnVsbFBhdGgpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBhYnNvbHV0ZSBwYXRoOlxuICAgKiBjb25jYXRlZCBwcm9qZWN0IGxvY2F0aW9uIHdpdGggcmVsYXRpdmUgcGF0aFxuICAgKi9cbiAgcGF0aEZvcihyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgd3JpdGVKc29uKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBqc29uOiBvYmplY3QpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB3cml0ZUpzb25DKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBqc29uOiBvYmplY3QpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXMgZXhlY3V0ZSBpbnN0ZWFkXG4gICAqIHVzZSBvdXRwdXQgZnJvbSBvciBtb3JlIHByZWNpZXNlIGNyYWZ0ZWQgYXBpXG4gICAqL1xuICBydW4oY29tbWFuZDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDb3JlTW9kZWxzLlJ1bk9wdGlvbnMsICdjd2QnPikge1xuICAgIGxldCBvcHQ6IENvcmVNb2RlbHMuUnVuT3B0aW9ucztcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICByZXR1cm4gSGVscGVycy5ydW4oY29tbWFuZCwgb3B0KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBhcyBydW4gYnV0IGFzeW5jXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmVNb2RlbHMuRXhlY3V0ZU9wdGlvbnMgJiB7IHNob3dDb21tYW5kPzogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPGFueT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHRyeSBydW4gYnV0IGNvbnRpbnVlIHdoZW4gaXQgZmFpbHNcbiAgICogQHBhcmFtIGNvbW1hbmRcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyeVJ1blN5bmMoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuLyogKi9cbi8qICovXG4gIFxuICApOiB2b2lkIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgb3V0cHV0RnJvbShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4vKiAqL1xuLyogKi9cbiAgXG4gICkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlbW92ZUZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVhZEZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiByZWFkIGpzb24gZmlsZVxuICAgKiBoYW5kbGUgYWxsIGpzb24gZmlsZXNcbiAgICoganNvbmMsIGpzb241ICwganNvblxuICAgKiBAcGFyYW0gZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcmVhZEpzb248VCA9IHt9PihmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpOiBUIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogY29weSBmaWxlcyBvciBmb2xkZXJzIGZyb21cbiAgICogcHJvamVjdCB0byBkZXN0aW5hdGlvblxuICAgKi9cbiAgY29weShmaWxlc09yRm9sZGVyUmVsYXRpdmVQYXRoZXM6IHN0cmluZ1tdKToge1xuICAgIHRvOiAoZGVzdGluYXRpb246IHN0cmluZykgPT4gdm9pZDtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvOiAoZGVzdGluYXRpb246IHN0cmluZyk6IHZvaWQgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG5cblxuICByZW1vdmUocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgZXhhY3RQYXRoID0gdHJ1ZSkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZW1vdmVGb2xkZXJCeVJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhdGhUb0ZvbGRlcjogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG4gIGdldCBpc0FuZ3VsYXJMaWIoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFVuaXF1ZUZvclRhc2sodGFzazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHRhc2soJHt0YXNrfSkgaW4gJHt0aGlzLmdlbmVyaWNOYW1lfWA7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJBbmRBc3NpZ25Qb3J0KFxuICAgIHRhc2tOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgc3RhcnRGcm9tPzogbnVtYmVyIH0sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSB0aGlzLnJlZ2lzdGVyQW5kQXNzaWduUG9ydCgpIG9yIFV0aWxzLmdldEZyZWVQb3J0KCkgaW5zdGVhZFxuICAgKi9cbiAgYXN5bmMgYXNzaWduRnJlZVBvcnQoc3RhcnRGcm9tOiBudW1iZXIgPSA0MjAwKTogUHJvbWlzZTxudW1iZXI+IHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZW1vdmVJdHNlbGYoKSB7XG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFB1cnBvc2U6IG5vdCBpbml0aWFsaXppbmcgYWxsIGNsYXNzZXMgYXQgdGhlIGJlZ2lubmluZ1xuICAgKiBPbmx5IGZvciBCYXNlRmVhdHVyZUZvclByb2plY3QgY2xhc3NcbiAgICovXG4gIGRlZmluZVByb3BlcnR5PFBST0pFQ1Q+KFxuICAgIHZhcmlhYmxlTmFtZToga2V5b2YgUFJPSkVDVCxcbiAgICBjbGFzc0ZuOiBGdW5jdGlvbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgY3VzdG9tSW5zdGFuY2VSZXR1cm4/OiAoKSA9PiBvYmplY3Q7XG4gICAgfSxcbiAgKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZnMuY29weSBvcHRpb24gZmlsdGVyIGZ1bmN0aW9uIGZvciBjb3B5aW5nIG9ubHkgc2VsZWN0ZWQgZm9sZGVycyBmcm9tIHByb2plY3RcbiAgICovXG4gIGZpbHRlck9ubHlDb3B5KGJhc2VQYXRoRm9sZGVyc09ubHlUb0luY2x1ZGU6IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGZzLmNvcHkgb3B0aW9uIGZpbHRlciBmdW5jdGlvbiBmb3IgY29weWluZyBvbmx5IG5vdCBzZWxlY3RlZCBmb2xkZXJzIGZyb20gcHJvamVjdFxuICAgKi9cbiAgZmlsdGVyRG9udENvcHkoYmFzZVBhdGhGb2xkZXJzVG9zU2tpcDogc3RyaW5nW10pIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogbWFpbi9kZWZhdWx0IGhhcmRjb2RlZCBicmFuY2hlc1xuICAgKi9cbiAgZ2V0TWFpbkJyYW5jaGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydtYXN0ZXInLCAnZGV2ZWxvcCcsICdzdGFnZScsICdwcm9kJywgJ3Rlc3QnXTtcbiAgfVxuXG5cblxuICB1c2VGZWF0dXJlSW5CcmFuY2hOYW1lRm9yVGVzdHMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlc2V0UHJvY2VzcyhvdmVycmlkZUJyYW5jaD86IHN0cmluZywgcmVjcnVzaXZlID0gZmFsc2UpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBsaW5rVG8oZGVzdFBhY2thZ2VMb2NhdGlvbjogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgc2V0VmFsdWVUb0pTT04oXG4gICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBsb2Rhc2hHZXRQYXRoOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgKTogdm9pZCB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgc2V0VmFsdWVUb0pTT05DKFxuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHZvaWQge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHNldFZhbHVlVG9KU09ONShcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGxvZGFzaEdldFBhdGg6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICApOiB2b2lkIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXRWYWx1ZUZyb21KU09OKFxuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogYW55ID0gdm9pZCAwLFxuICApOiBhbnkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXRWYWx1ZUZyb21KU09OQyhcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGxvZGFzaEdldFBhdGg6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IGFueSA9IHZvaWQgMCxcbiAgKTogYW55IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cblxuICB3cml0ZUZpbGUocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgY29udGVudDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcHVibGljIHJ1bkNvbW1hbmRHZXRTdHJpbmcodGhpczogQmFzZVByb2plY3QsIGNvbW1hbmQ6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgdG9TdHJpbmcgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX09PiR7dGhpcy5sb2NhdGlvbn1gO1xuICB9O1xuXG5cblxuICBnZXQgcGFyZW50c05hbWVzKCkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuICBvcGVuTG9jYXRpb24ocmVsYXRpdmVGb2xkZXJQYXRoOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50c05hbWVzKFxuICAgIHByb2plY3Q/OiBQUk9KRUNULFxuICAgIHBhcmVudD86IFBST0pFQ1QsXG4gICAgcmVzdWx0ID0gW10sXG4gICk6IHN0cmluZ1tdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB0cnlLaWxsQWxsRWxlY3Ryb25JbnN0YW5jZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogaW5pdCBwcm9qZWN0IGZpbGVzIHN0cnVjdHVyZSBhbmQgZGVwZWRlbmNpZXNcbiAgICovXG4gIGFzeW5jIGluaXQoaW5pdE9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGdsb2JhbGx5IGxpbmsgbnBtIGFzIHBhY2thZ2VcbiAgICovXG4gIGFzeW5jIGxpbmsoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IHByb2plY3QgZmlsZXMgc3RydWN0dXJlIHdpdGhvdXQgZGVwZWRlbmNpZXNcbiAgICovXG4gIGFzeW5jIHN0cnVjdChpbml0T3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogaW5pdCBhbmQgYnVpbGQoKSBwcm9qZWN0XG4gICAqL1xuICBhc3luYyB0ZXN0KHRlc3RPcHRpb25zPzogYW55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IGFuZCBidWlsZCgpIHByb2plY3RcbiAgICovXG4gIGFzeW5jIGJ1aWxkKGJ1aWxkT3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogcHVibGlzaCBwcm9qZWN0IHRvIG5wbVxuICAgKi9cbiAgYXN5bmMgcHVibGlzaChwdWJsaXNoT3B0aW9ucz86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubnBtSGVscGVycy5wdWJsaXNoVG9OcG1SZWdpc3RyeSgpO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlbGVhc2UocmVsZWFzZU9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGxpbnQgcG9yamVjdFxuICAgKi9cbiAgYXN5bmMgbGludChsaW50T3B0aW9ucz86IGFueSkge1xuICAgIEhlbHBlcnMuaW5mbyhgXG5cblxuICAgIENPTU1JVCBMSU5UIE5PVCBJTVBMRU1FTlRFRFxuXG5cbiAgICBgKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZ2V0IGluZm8gYWJvdXQgcG9yamVjdFxuICAgKi9cbiAgYXN5bmMgaW5mbygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9iYXNlL2NsYXNzZXMvYmFzZS1wcm9qZWN0LnRzIl19
|