@angular-devkit/schematics 0.0.21 → 0.0.25
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/bin/schematics.js +62 -17
- package/collection-schema.json +40 -0
- package/package.json +2 -2
- package/src/engine/engine.d.ts +8 -3
- package/src/engine/engine.js +28 -9
- package/src/engine/interface.d.ts +10 -6
- package/src/engine/interface.js +1 -1
- package/src/engine/schematic.d.ts +4 -4
- package/src/engine/schematic.js +10 -12
- package/src/exception/exception.d.ts +2 -4
- package/src/exception/exception.js +11 -16
- package/src/index.d.ts +2 -2
- package/src/index.js +3 -3
- package/src/rules/call.d.ts +2 -2
- package/src/rules/call.js +8 -5
- package/src/rules/move.d.ts +0 -7
- package/src/rules/move.js +12 -5
- package/src/rules/schematic.js +3 -3
- package/src/rules/template.d.ts +1 -1
- package/src/rules/template.js +14 -9
- package/src/rules/url.js +2 -2
- package/src/sink/dryrun.js +1 -1
- package/src/tree/action.d.ts +7 -8
- package/src/tree/action.js +3 -3
- package/src/tree/entry.d.ts +5 -5
- package/src/tree/entry.js +1 -1
- package/src/tree/filesystem.d.ts +2 -2
- package/src/tree/filesystem.js +3 -3
- package/src/tree/interface.d.ts +3 -3
- package/src/tree/interface.js +1 -1
- package/src/tree/memory-host.d.ts +1 -1
- package/src/tree/memory-host.js +7 -7
- package/src/tree/null.d.ts +1 -1
- package/src/tree/null.js +3 -2
- package/src/tree/virtual.d.ts +18 -11
- package/src/tree/virtual.js +3 -3
- package/src/utility/update-buffer.d.ts +1 -1
- package/src/utility/update-buffer.js +4 -4
- package/tools/description.d.ts +3 -1
- package/tools/description.js +1 -1
- package/tools/fallback-engine-host.d.ts +34 -0
- package/tools/fallback-engine-host.js +52 -0
- package/tools/file-system-engine-host-base.d.ts +41 -13
- package/tools/file-system-engine-host-base.js +93 -38
- package/tools/file-system-engine-host.d.ts +5 -10
- package/tools/file-system-engine-host.js +8 -10
- package/tools/file-system-utility.d.ts +1 -1
- package/tools/file-system-utility.js +3 -3
- package/tools/index.d.ts +3 -1
- package/tools/index.js +5 -10
- package/tools/node-module-engine-host.d.ts +8 -17
- package/tools/node-module-engine-host.js +53 -15
- package/tools/node-modules-test-engine-host.d.ts +17 -0
- package/tools/node-modules-test-engine-host.js +32 -0
- package/src/rules/template/template.d.ts +0 -16
- package/src/rules/template/template.js +0 -110
- package/src/utility/path.d.ts +0 -16
- package/src/utility/path.js +0 -61
- package/test/index.d.ts +0 -8
- package/test/index.js +0 -14
- package/test/schematic-test-runner.d.ts +0 -21
- package/test/schematic-test-runner.js +0 -50
- package/tools/registry-engine-host.d.ts +0 -32
- package/tools/registry-engine-host.js +0 -86
package/src/utility/path.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* @license
|
|
5
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
6
|
-
*
|
|
7
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
8
|
-
* found in the LICENSE file at https://angular.io/license
|
|
9
|
-
*/
|
|
10
|
-
const exception_1 = require("../exception/exception");
|
|
11
|
-
class InvalidPathException extends exception_1.BaseException {
|
|
12
|
-
constructor(path) { super(`Path "${path}" is invalid.`); }
|
|
13
|
-
}
|
|
14
|
-
exports.InvalidPathException = InvalidPathException;
|
|
15
|
-
function relativePath(from, to) {
|
|
16
|
-
let p;
|
|
17
|
-
if (from == to) {
|
|
18
|
-
p = '';
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
const splitFrom = from.split('/');
|
|
22
|
-
const splitTo = to.split('/');
|
|
23
|
-
while (splitFrom.length > 0 && splitTo.length > 0 && splitFrom[0] == splitTo[0]) {
|
|
24
|
-
splitFrom.shift();
|
|
25
|
-
splitTo.shift();
|
|
26
|
-
}
|
|
27
|
-
if (splitFrom.length == 0) {
|
|
28
|
-
p = splitTo.join('/');
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
p = splitFrom.map(_ => '..').concat(splitTo).join('/');
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return p;
|
|
35
|
-
}
|
|
36
|
-
exports.relativePath = relativePath;
|
|
37
|
-
function normalizePath(path) {
|
|
38
|
-
let p = path;
|
|
39
|
-
if (p[0] != '/') {
|
|
40
|
-
p = '/' + p;
|
|
41
|
-
}
|
|
42
|
-
if (p.endsWith('..')) {
|
|
43
|
-
throw new InvalidPathException(path);
|
|
44
|
-
}
|
|
45
|
-
let oldP = null;
|
|
46
|
-
while (oldP !== p) {
|
|
47
|
-
oldP = p;
|
|
48
|
-
p = p
|
|
49
|
-
.replace(/\/[^\/]+\/\.\.\//g, '/')
|
|
50
|
-
.replace(/\/[^\/]+\/\.\.$/g, '/')
|
|
51
|
-
.replace(/\/\.?$/g, '/')
|
|
52
|
-
.replace(/\/\.?\//g, '/')
|
|
53
|
-
.replace(/\\/g, '/');
|
|
54
|
-
}
|
|
55
|
-
if (p.startsWith('/../') || (p.endsWith('/') && p !== '/')) {
|
|
56
|
-
throw new InvalidPathException(path);
|
|
57
|
-
}
|
|
58
|
-
return p;
|
|
59
|
-
}
|
|
60
|
-
exports.normalizePath = normalizePath;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFuc2wvU291cmNlcy9kZXZraXQvIiwic291cmNlcyI6WyJwYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9zY2hlbWF0aWNzL3NyYy91dGlsaXR5L3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxzREFBdUQ7QUFRdkQsMEJBQWtDLFNBQVEseUJBQWE7SUFDckQsWUFBWSxJQUFZLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkU7QUFGRCxvREFFQztBQUdELHNCQUE2QixJQUFtQixFQUFFLEVBQWlCO0lBQ2pFLElBQUksQ0FBUyxDQUFDO0lBRWQsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLE9BQU8sU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hGLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBRSxDQUFtQixDQUFDO0FBQzlCLENBQUM7QUF0QkQsb0NBc0JDO0FBR0QsdUJBQThCLElBQVk7SUFDeEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsTUFBTSxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLElBQUksR0FBa0IsSUFBSSxDQUFDO0lBQy9CLE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxDQUFDLEdBQUcsQ0FBQzthQUNGLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUM7YUFDakMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQzthQUNoQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQzthQUN2QixPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQzthQUN4QixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFFLENBQW1CLENBQUM7QUFDOUIsQ0FBQztBQXpCRCxzQ0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgeyBCYXNlRXhjZXB0aW9uIH0gZnJvbSAnLi4vZXhjZXB0aW9uL2V4Y2VwdGlvbic7XG5cblxuZXhwb3J0IHR5cGUgU2NoZW1hdGljUGF0aCA9IHN0cmluZyAmIHtcbiAgX19QUklWQVRFX1NDSEVNQVRJQ19QQVRIOiB2b2lkO1xufTtcblxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFBhdGhFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IocGF0aDogc3RyaW5nKSB7IHN1cGVyKGBQYXRoIFwiJHtwYXRofVwiIGlzIGludmFsaWQuYCk7IH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmVQYXRoKGZyb206IFNjaGVtYXRpY1BhdGgsIHRvOiBTY2hlbWF0aWNQYXRoKTogU2NoZW1hdGljUGF0aCB7XG4gIGxldCBwOiBzdHJpbmc7XG5cbiAgaWYgKGZyb20gPT0gdG8pIHtcbiAgICBwID0gJyc7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3BsaXRGcm9tID0gZnJvbS5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNwbGl0VG8gPSB0by5zcGxpdCgnLycpO1xuXG4gICAgd2hpbGUgKHNwbGl0RnJvbS5sZW5ndGggPiAwICYmIHNwbGl0VG8ubGVuZ3RoID4gMCAmJiBzcGxpdEZyb21bMF0gPT0gc3BsaXRUb1swXSkge1xuICAgICAgc3BsaXRGcm9tLnNoaWZ0KCk7XG4gICAgICBzcGxpdFRvLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgaWYgKHNwbGl0RnJvbS5sZW5ndGggPT0gMCkge1xuICAgICAgcCA9IHNwbGl0VG8uam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gc3BsaXRGcm9tLm1hcChfID0+ICcuLicpLmNvbmNhdChzcGxpdFRvKS5qb2luKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChwIGFzIFNjaGVtYXRpY1BhdGgpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IFNjaGVtYXRpY1BhdGgge1xuICBsZXQgcCA9IHBhdGg7XG4gIGlmIChwWzBdICE9ICcvJykge1xuICAgIHAgPSAnLycgKyBwO1xuICB9XG4gIGlmIChwLmVuZHNXaXRoKCcuLicpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXRoRXhjZXB0aW9uKHBhdGgpO1xuICB9XG5cbiAgbGV0IG9sZFA6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB3aGlsZSAob2xkUCAhPT0gcCkge1xuICAgIG9sZFAgPSBwO1xuICAgIHAgPSBwXG4gICAgICAucmVwbGFjZSgvXFwvW15cXC9dK1xcL1xcLlxcLlxcLy9nLCAnLycpXG4gICAgICAucmVwbGFjZSgvXFwvW15cXC9dK1xcL1xcLlxcLiQvZywgJy8nKVxuICAgICAgLnJlcGxhY2UoL1xcL1xcLj8kL2csICcvJylcbiAgICAgIC5yZXBsYWNlKC9cXC9cXC4/XFwvL2csICcvJylcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH1cblxuICBpZiAocC5zdGFydHNXaXRoKCcvLi4vJykgfHwgKHAuZW5kc1dpdGgoJy8nKSAmJiBwICE9PSAnLycpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXRoRXhjZXB0aW9uKHBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIChwIGFzIFNjaGVtYXRpY1BhdGgpO1xufVxuIl19
|
package/test/index.d.ts
DELETED
package/test/index.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
function __export(m) {
|
|
3
|
-
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
4
|
-
}
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
/**
|
|
7
|
-
* @license
|
|
8
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
9
|
-
*
|
|
10
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
11
|
-
* found in the LICENSE file at https://angular.io/license
|
|
12
|
-
*/
|
|
13
|
-
__export(require("./schematic-test-runner"));
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvc2NoZW1hdGljcy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsNkNBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWF0aWMtdGVzdC1ydW5uZXInO1xuIl19
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { Tree } from '@angular-devkit/schematics';
|
|
9
|
-
import { Observable } from 'rxjs/Observable';
|
|
10
|
-
export interface SchematicSchemaT {
|
|
11
|
-
}
|
|
12
|
-
export declare class SchematicTestRunner {
|
|
13
|
-
private collectionName;
|
|
14
|
-
private engineHost;
|
|
15
|
-
private engine;
|
|
16
|
-
private collection;
|
|
17
|
-
constructor(collectionName: string);
|
|
18
|
-
private prepareCollection();
|
|
19
|
-
runSchematicAsync(schematicName: string, opts?: SchematicSchemaT, tree?: Tree): Observable<Tree>;
|
|
20
|
-
runSchematic(schematicName: string, opts?: SchematicSchemaT, tree?: Tree): Tree;
|
|
21
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* @license
|
|
5
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
6
|
-
*
|
|
7
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
8
|
-
* found in the LICENSE file at https://angular.io/license
|
|
9
|
-
*/
|
|
10
|
-
const schematics_1 = require("@angular-devkit/schematics");
|
|
11
|
-
const tools_1 = require("@angular-devkit/schematics/tools");
|
|
12
|
-
const json_schema_1 = require("@ngtools/json-schema");
|
|
13
|
-
const Observable_1 = require("rxjs/Observable");
|
|
14
|
-
class SchematicTestRunner {
|
|
15
|
-
constructor(collectionName) {
|
|
16
|
-
this.collectionName = collectionName;
|
|
17
|
-
this.prepareCollection();
|
|
18
|
-
}
|
|
19
|
-
prepareCollection() {
|
|
20
|
-
this.engineHost = new tools_1.NodeModulesEngineHost();
|
|
21
|
-
this.engine = new schematics_1.SchematicEngine(this.engineHost);
|
|
22
|
-
this.engineHost.registerOptionsTransform((schematic, opts) => {
|
|
23
|
-
if (schematic.schema && schematic.schemaJson) {
|
|
24
|
-
const SchemaMetaClass = json_schema_1.SchemaClassFactory(schematic.schemaJson);
|
|
25
|
-
const schemaClass = new SchemaMetaClass(opts);
|
|
26
|
-
return schemaClass.$$root();
|
|
27
|
-
}
|
|
28
|
-
return opts;
|
|
29
|
-
});
|
|
30
|
-
this.collection = this.engine.createCollection(this.collectionName);
|
|
31
|
-
}
|
|
32
|
-
runSchematicAsync(schematicName, opts, tree) {
|
|
33
|
-
const schematic = this.collection.createSchematic(schematicName);
|
|
34
|
-
const host = Observable_1.Observable.of(tree || new schematics_1.VirtualTree);
|
|
35
|
-
return schematic.call(opts || {}, host);
|
|
36
|
-
}
|
|
37
|
-
runSchematic(schematicName, opts, tree) {
|
|
38
|
-
const schematic = this.collection.createSchematic(schematicName);
|
|
39
|
-
let result = null;
|
|
40
|
-
const host = Observable_1.Observable.of(tree || new schematics_1.VirtualTree);
|
|
41
|
-
schematic.call(opts || {}, host)
|
|
42
|
-
.subscribe(t => result = t);
|
|
43
|
-
if (result === null) {
|
|
44
|
-
throw new Error('Schematic is async, please use runSchematicAsync');
|
|
45
|
-
}
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
exports.SchematicTestRunner = SchematicTestRunner;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hdGljLXRlc3QtcnVubmVyLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9oYW5zbC9Tb3VyY2VzL2RldmtpdC8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L3NjaGVtYXRpY3MvdGVzdC9zY2hlbWF0aWMtdGVzdC1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUc7QUFDSCwyREFLb0M7QUFDcEMsNERBRzBDO0FBQzFDLHNEQUEwRDtBQUMxRCxnREFBNkM7QUFLN0M7SUFLRSxZQUFvQixjQUFzQjtRQUF0QixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSw2QkFBcUIsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSw0QkFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQ3ZDLFNBQWtDLEVBQUUsSUFBc0I7WUFDMUQsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxlQUFlLEdBQUcsZ0NBQWtCLENBQW1CLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGlCQUFpQixDQUFDLGFBQXFCLEVBQUUsSUFBdUIsRUFBRSxJQUFXO1FBQzNFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLHVCQUFVLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLHdCQUFXLENBQUMsQ0FBQztRQUVwRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUFZLENBQUMsYUFBcUIsRUFBRSxJQUF1QixFQUFFLElBQVc7UUFDdEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFakUsSUFBSSxNQUFNLEdBQWdCLElBQUksQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyx1QkFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSx3QkFBVyxDQUFDLENBQUM7UUFFcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQzthQUM3QixTQUFTLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU5QixFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBaERELGtEQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7XG4gIENvbGxlY3Rpb24sXG4gIFNjaGVtYXRpY0VuZ2luZSxcbiAgVHJlZSxcbiAgVmlydHVhbFRyZWUsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7XG4gIEZpbGVTeXN0ZW1TY2hlbWF0aWNEZXNjLFxuICBOb2RlTW9kdWxlc0VuZ2luZUhvc3QsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzL3Rvb2xzJztcbmltcG9ydCB7IFNjaGVtYUNsYXNzRmFjdG9yeSB9IGZyb20gJ0BuZ3Rvb2xzL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hdGljU2NoZW1hVCB7fVxuXG5leHBvcnQgY2xhc3MgU2NoZW1hdGljVGVzdFJ1bm5lciB7XG4gIHByaXZhdGUgZW5naW5lSG9zdDogTm9kZU1vZHVsZXNFbmdpbmVIb3N0O1xuICBwcml2YXRlIGVuZ2luZTogU2NoZW1hdGljRW5naW5lPHt9LCB7fT47XG4gIHByaXZhdGUgY29sbGVjdGlvbjogQ29sbGVjdGlvbjx7fSwge30+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29sbGVjdGlvbk5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHJlcGFyZUNvbGxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUNvbGxlY3Rpb24oKSB7XG4gICAgdGhpcy5lbmdpbmVIb3N0ID0gbmV3IE5vZGVNb2R1bGVzRW5naW5lSG9zdCgpO1xuICAgIHRoaXMuZW5naW5lID0gbmV3IFNjaGVtYXRpY0VuZ2luZSh0aGlzLmVuZ2luZUhvc3QpO1xuICAgIHRoaXMuZW5naW5lSG9zdC5yZWdpc3Rlck9wdGlvbnNUcmFuc2Zvcm0oKFxuICAgICAgc2NoZW1hdGljOiBGaWxlU3lzdGVtU2NoZW1hdGljRGVzYywgb3B0czogU2NoZW1hdGljU2NoZW1hVCkgPT4ge1xuICAgICAgaWYgKHNjaGVtYXRpYy5zY2hlbWEgJiYgc2NoZW1hdGljLnNjaGVtYUpzb24pIHtcbiAgICAgICAgY29uc3QgU2NoZW1hTWV0YUNsYXNzID0gU2NoZW1hQ2xhc3NGYWN0b3J5PFNjaGVtYXRpY1NjaGVtYVQ+KHNjaGVtYXRpYy5zY2hlbWFKc29uKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hQ2xhc3MgPSBuZXcgU2NoZW1hTWV0YUNsYXNzKG9wdHMpO1xuXG4gICAgICAgIHJldHVybiBzY2hlbWFDbGFzcy4kJHJvb3QoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdHM7XG4gICAgfSk7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5lbmdpbmUuY3JlYXRlQ29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb25OYW1lKTtcbiAgfVxuXG4gIHJ1blNjaGVtYXRpY0FzeW5jKHNjaGVtYXRpY05hbWU6IHN0cmluZywgb3B0cz86IFNjaGVtYXRpY1NjaGVtYVQsIHRyZWU/OiBUcmVlKTogT2JzZXJ2YWJsZTxUcmVlPiB7XG4gICAgY29uc3Qgc2NoZW1hdGljID0gdGhpcy5jb2xsZWN0aW9uLmNyZWF0ZVNjaGVtYXRpYyhzY2hlbWF0aWNOYW1lKTtcbiAgICBjb25zdCBob3N0ID0gT2JzZXJ2YWJsZS5vZih0cmVlIHx8IG5ldyBWaXJ0dWFsVHJlZSk7XG5cbiAgICByZXR1cm4gc2NoZW1hdGljLmNhbGwob3B0cyB8fCB7fSwgaG9zdCk7XG4gIH1cblxuICBydW5TY2hlbWF0aWMoc2NoZW1hdGljTmFtZTogc3RyaW5nLCBvcHRzPzogU2NoZW1hdGljU2NoZW1hVCwgdHJlZT86IFRyZWUpOiBUcmVlIHtcbiAgICBjb25zdCBzY2hlbWF0aWMgPSB0aGlzLmNvbGxlY3Rpb24uY3JlYXRlU2NoZW1hdGljKHNjaGVtYXRpY05hbWUpO1xuXG4gICAgbGV0IHJlc3VsdDogVHJlZSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGhvc3QgPSBPYnNlcnZhYmxlLm9mKHRyZWUgfHwgbmV3IFZpcnR1YWxUcmVlKTtcblxuICAgIHNjaGVtYXRpYy5jYWxsKG9wdHMgfHwge30sIGhvc3QpXG4gICAgICAuc3Vic2NyaWJlKHQgPT4gcmVzdWx0ID0gdCk7XG5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjaGVtYXRpYyBpcyBhc3luYywgcGxlYXNlIHVzZSBydW5TY2hlbWF0aWNBc3luYycpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { CollectionDescription, RuleFactory, SchematicDescription } from '@angular-devkit/schematics';
|
|
9
|
-
import { FileSystemCollectionDescription, FileSystemSchematicDescription } from './description';
|
|
10
|
-
import { FileSystemEngineHostBase } from './file-system-engine-host-base';
|
|
11
|
-
/**
|
|
12
|
-
* Used to simplify typings.
|
|
13
|
-
*/
|
|
14
|
-
export declare type FileSystemCollectionDesc = CollectionDescription<FileSystemCollectionDescription>;
|
|
15
|
-
export declare type FileSystemSchematicDesc = SchematicDescription<FileSystemCollectionDescription, FileSystemSchematicDescription>;
|
|
16
|
-
/**
|
|
17
|
-
* A simple EngineHost that uses a registry of {name => path} to find collections. This can be
|
|
18
|
-
* useful for tooling that want to load generic collections from random places.
|
|
19
|
-
*/
|
|
20
|
-
export declare class RegistryEngineHost extends FileSystemEngineHostBase {
|
|
21
|
-
protected _registry: Map<string, string>;
|
|
22
|
-
registerPath(path: string): void;
|
|
23
|
-
removePath(path: string): void;
|
|
24
|
-
removeName(name: string): void;
|
|
25
|
-
protected _resolveCollectionPath(name: string): string | null;
|
|
26
|
-
protected _resolveReferenceString(refString: string, parentPath: string): {
|
|
27
|
-
ref: RuleFactory<{}>;
|
|
28
|
-
path: string;
|
|
29
|
-
} | null;
|
|
30
|
-
protected _transformCollectionDescription(_name: string, desc: Partial<FileSystemCollectionDesc>): CollectionDescription<FileSystemCollectionDescription> | null;
|
|
31
|
-
protected _transformSchematicDescription(_name: string, _collection: FileSystemCollectionDesc, desc: Partial<FileSystemSchematicDesc>): SchematicDescription<FileSystemCollectionDescription, FileSystemSchematicDescription> | null;
|
|
32
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const fs_1 = require("fs");
|
|
4
|
-
const path_1 = require("path");
|
|
5
|
-
const export_ref_1 = require("./export-ref");
|
|
6
|
-
const file_system_engine_host_base_1 = require("./file-system-engine-host-base");
|
|
7
|
-
const file_system_utility_1 = require("./file-system-utility");
|
|
8
|
-
/**
|
|
9
|
-
* A simple EngineHost that uses a registry of {name => path} to find collections. This can be
|
|
10
|
-
* useful for tooling that want to load generic collections from random places.
|
|
11
|
-
*/
|
|
12
|
-
class RegistryEngineHost extends file_system_engine_host_base_1.FileSystemEngineHostBase {
|
|
13
|
-
constructor() {
|
|
14
|
-
super(...arguments);
|
|
15
|
-
this._registry = new Map();
|
|
16
|
-
}
|
|
17
|
-
registerPath(path) {
|
|
18
|
-
// Read the collection from the path.
|
|
19
|
-
if (fs_1.existsSync(path) && fs_1.statSync(path).isFile()) {
|
|
20
|
-
// Allow path to be fully qualified to a JSON file.
|
|
21
|
-
}
|
|
22
|
-
else if (fs_1.existsSync(path_1.join(path, 'collection.json')) && fs_1.statSync(path).isFile()) {
|
|
23
|
-
// Allow path to point to a directory containing a `collection.json`.
|
|
24
|
-
path = path_1.join(path, 'collection.json');
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
throw new Error(`Invalid path: "${path}".`);
|
|
28
|
-
}
|
|
29
|
-
const json = file_system_utility_1.readJsonFile(path);
|
|
30
|
-
if (!json) {
|
|
31
|
-
throw new Error(`Invalid path for collection: "${path}".`);
|
|
32
|
-
}
|
|
33
|
-
// Validate that the name is not in the registry already (and that the registry does not
|
|
34
|
-
// contain this path under another name.
|
|
35
|
-
const name = json.name;
|
|
36
|
-
const maybePath = this._registry.get(name);
|
|
37
|
-
if (maybePath && maybePath != path) {
|
|
38
|
-
throw new Error(`Collection name "${name}" already registered.`);
|
|
39
|
-
}
|
|
40
|
-
for (const registryPath of this._registry.values()) {
|
|
41
|
-
if (registryPath == path) {
|
|
42
|
-
throw new Error(`Collection path "${path}" already registered under another name.`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
this._registry.set(name, path);
|
|
46
|
-
}
|
|
47
|
-
removePath(path) {
|
|
48
|
-
for (const [key, p] of this._registry.entries()) {
|
|
49
|
-
if (p == path) {
|
|
50
|
-
this._registry.delete(key);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
removeName(name) {
|
|
55
|
-
this._registry.delete(name);
|
|
56
|
-
}
|
|
57
|
-
_resolveCollectionPath(name) {
|
|
58
|
-
const maybePath = this._registry.get(name);
|
|
59
|
-
return maybePath || null;
|
|
60
|
-
}
|
|
61
|
-
_resolveReferenceString(refString, parentPath) {
|
|
62
|
-
// Use the same kind of export strings as NodeModule.
|
|
63
|
-
const ref = new export_ref_1.ExportStringRef(refString, parentPath);
|
|
64
|
-
if (!ref.ref) {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
return { ref: ref.ref, path: ref.module };
|
|
68
|
-
}
|
|
69
|
-
_transformCollectionDescription(_name, desc) {
|
|
70
|
-
if (!desc.name || !desc.path || !desc.schematics || !desc.version) {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
if (typeof desc.schematics != 'object') {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
return desc;
|
|
77
|
-
}
|
|
78
|
-
_transformSchematicDescription(_name, _collection, desc) {
|
|
79
|
-
if (!desc.factoryFn || !desc.path || !desc.description) {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
return desc;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
exports.RegistryEngineHost = RegistryEngineHost;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnktZW5naW5lLWhvc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvc2NoZW1hdGljcy90b29scy9yZWdpc3RyeS1lbmdpbmUtaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLDJCQUEwQztBQUMxQywrQkFBNEI7QUFFNUIsNkNBQStDO0FBQy9DLGlGQUEwRTtBQUMxRSwrREFBcUQ7QUFZckQ7OztHQUdHO0FBQ0gsd0JBQWdDLFNBQVEsdURBQXdCO0lBQWhFOztRQUNZLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQXFGbEQsQ0FBQztJQW5GQyxZQUFZLENBQUMsSUFBWTtRQUN2QixxQ0FBcUM7UUFFckMsRUFBRSxDQUFDLENBQUMsZUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsbURBQW1EO1FBQ3JELENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBVSxDQUFDLFdBQUksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLGFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEYscUVBQXFFO1lBQ3JFLElBQUksR0FBRyxXQUFJLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQTZCLGtDQUFZLENBQUMsSUFBSSxDQUE2QixDQUFDO1FBQ3RGLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0s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QUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBK0IsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUF0RkQsZ0RBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtcbiAgQ29sbGVjdGlvbkRlc2NyaXB0aW9uLFxuICBSdWxlRmFjdG9yeSxcbiAgU2NoZW1hdGljRGVzY3JpcHRpb24sXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRmlsZVN5c3RlbUNvbGxlY3Rpb25EZXNjcmlwdGlvbiwgRmlsZVN5c3RlbVNjaGVtYXRpY0Rlc2NyaXB0aW9uIH0gZnJvbSAnLi9kZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBFeHBvcnRTdHJpbmdSZWYgfSBmcm9tICcuL2V4cG9ydC1yZWYnO1xuaW1wb3J0IHsgRmlsZVN5c3RlbUVuZ2luZUhvc3RCYXNlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS1lbmdpbmUtaG9zdC1iYXNlJztcbmltcG9ydCB7IHJlYWRKc29uRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0tdXRpbGl0eSc7XG5cblxuLyoqXG4gKiBVc2VkIHRvIHNpbXBsaWZ5IHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRmlsZVN5c3RlbUNvbGxlY3Rpb25EZXNjXG4gID0gQ29sbGVjdGlvbkRlc2NyaXB0aW9uPEZpbGVTeXN0ZW1Db2xsZWN0aW9uRGVzY3JpcHRpb24+O1xuZXhwb3J0IGRlY2xhcmUgdHlwZSBGaWxlU3lzdGVtU2NoZW1hdGljRGVzY1xuICA9IFNjaGVtYXRpY0Rlc2NyaXB0aW9uPEZpbGVTeXN0ZW1Db2xsZWN0aW9uRGVzY3JpcHRpb24sIEZpbGVTeXN0ZW1TY2hlbWF0aWNEZXNjcmlwdGlvbj47XG5cblxuLyoqXG4gKiBBIHNpbXBsZSBFbmdpbmVIb3N0IHRoYXQgdXNlcyBhIHJlZ2lzdHJ5IG9mIHtuYW1lID0+IHBhdGh9IHRvIGZpbmQgY29sbGVjdGlvbnMuIFRoaXMgY2FuIGJlXG4gKiB1c2VmdWwgZm9yIHRvb2xpbmcgdGhhdCB3YW50IHRvIGxvYWQgZ2VuZXJpYyBjb2xsZWN0aW9ucyBmcm9tIHJhbmRvbSBwbGFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdpc3RyeUVuZ2luZUhvc3QgZXh0ZW5kcyBGaWxlU3lzdGVtRW5naW5lSG9zdEJhc2Uge1xuICBwcm90ZWN0ZWQgX3JlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICByZWdpc3RlclBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgLy8gUmVhZCB0aGUgY29sbGVjdGlvbiBmcm9tIHRoZSBwYXRoLlxuXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkgJiYgc3RhdFN5bmMocGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgIC8vIEFsbG93IHBhdGggdG8gYmUgZnVsbHkgcXVhbGlmaWVkIHRvIGEgSlNPTiBmaWxlLlxuICAgIH0gZWxzZSBpZiAoZXhpc3RzU3luYyhqb2luKHBhdGgsICdjb2xsZWN0aW9uLmpzb24nKSkgJiYgc3RhdFN5bmMocGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgIC8vIEFsbG93IHBhdGggdG8gcG9pbnQgdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIGBjb2xsZWN0aW9uLmpzb25gLlxuICAgICAgcGF0aCA9IGpvaW4ocGF0aCwgJ2NvbGxlY3Rpb24uanNvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF0aDogXCIke3BhdGh9XCIuYCk7XG4gICAgfVxuXG4gICAgY29uc3QganNvbjogRmlsZVN5c3RlbUNvbGxlY3Rpb25EZXNjID0gcmVhZEpzb25GaWxlKHBhdGgpIGFzIEZpbGVTeXN0ZW1Db2xsZWN0aW9uRGVzYztcbiAgICBpZiAoIWpzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXRoIGZvciBjb2xsZWN0aW9uOiBcIiR7cGF0aH1cIi5gKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBuYW1lIGlzIG5vdCBpbiB0aGUgcmVnaXN0cnkgYWxyZWFkeSAoYW5kIHRoYXQgdGhlIHJlZ2lzdHJ5IGRvZXMgbm90XG4gICAgLy8gY29udGFpbiB0aGlzIHBhdGggdW5kZXIgYW5vdGhlciBuYW1lLlxuICAgIGNvbnN0IG5hbWUgPSBqc29uLm5hbWU7XG4gICAgY29uc3QgbWF5YmVQYXRoID0gdGhpcy5fcmVnaXN0cnkuZ2V0KG5hbWUpO1xuICAgIGlmIChtYXliZVBhdGggJiYgbWF5YmVQYXRoICE9IHBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sbGVjdGlvbiBuYW1lIFwiJHtuYW1lfVwiIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByZWdpc3RyeVBhdGggb2YgdGhpcy5fcmVnaXN0cnkudmFsdWVzKCkpIHtcbiAgICAgIGlmIChyZWdpc3RyeVBhdGggPT0gcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbGxlY3Rpb24gcGF0aCBcIiR7cGF0aH1cIiBhbHJlYWR5IHJlZ2lzdGVyZWQgdW5kZXIgYW5vdGhlciBuYW1lLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3JlZ2lzdHJ5LnNldChuYW1lLCBwYXRoKTtcbiAgfVxuXG4gIHJlbW92ZVBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBwXSBvZiB0aGlzLl9yZWdpc3RyeS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChwID09IHBhdGgpIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RyeS5kZWxldGUobmFtZSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBfcmVzb2x2ZUNvbGxlY3Rpb25QYXRoKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1heWJlUGF0aCA9IHRoaXMuX3JlZ2lzdHJ5LmdldChuYW1lKTtcblxuICAgIHJldHVybiBtYXliZVBhdGggfHwgbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVzb2x2ZVJlZmVyZW5jZVN0cmluZyhyZWZTdHJpbmc6IHN0cmluZywgcGFyZW50UGF0aDogc3RyaW5nKSB7XG4gICAgLy8gVXNlIHRoZSBzYW1lIGtpbmQgb2YgZXhwb3J0IHN0cmluZ3MgYXMgTm9kZU1vZHVsZS5cbiAgICBjb25zdCByZWYgPSBuZXcgRXhwb3J0U3RyaW5nUmVmPFJ1bGVGYWN0b3J5PHt9Pj4ocmVmU3RyaW5nLCBwYXJlbnRQYXRoKTtcbiAgICBpZiAoIXJlZi5yZWYpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJlZjogcmVmLnJlZiwgcGF0aDogcmVmLm1vZHVsZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm1Db2xsZWN0aW9uRGVzY3JpcHRpb24oX25hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogUGFydGlhbDxGaWxlU3lzdGVtQ29sbGVjdGlvbkRlc2M+KSB7XG4gICAgaWYgKCFkZXNjLm5hbWUgfHwgIWRlc2MucGF0aCB8fCAhZGVzYy5zY2hlbWF0aWNzIHx8ICFkZXNjLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRlc2Muc2NoZW1hdGljcyAhPSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2MgYXMgRmlsZVN5c3RlbUNvbGxlY3Rpb25EZXNjO1xuICB9XG5cbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm1TY2hlbWF0aWNEZXNjcmlwdGlvbihfbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0aW9uOiBGaWxlU3lzdGVtQ29sbGVjdGlvbkRlc2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogUGFydGlhbDxGaWxlU3lzdGVtU2NoZW1hdGljRGVzYz4pIHtcbiAgICBpZiAoIWRlc2MuZmFjdG9yeUZuIHx8ICFkZXNjLnBhdGggfHwgIWRlc2MuZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkZXNjIGFzIEZpbGVTeXN0ZW1TY2hlbWF0aWNEZXNjO1xuICB9XG59XG5cbiJdfQ==
|