@angular-devkit/core 0.0.14 → 0.0.15
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/{src/logger → node}/cli-logger.d.ts +2 -2
- package/node/cli-logger.js +43 -0
- package/node/fs.d.ts +1 -0
- package/node/fs.js +25 -0
- package/node/index.d.ts +11 -0
- package/node/index.js +17 -0
- package/node/resolve.d.ts +58 -0
- package/node/resolve.js +214 -0
- package/package.json +4 -2
- package/src/index.d.ts +2 -1
- package/src/index.js +3 -2
- package/src/json/index.d.ts +2 -0
- package/src/json/index.js +3 -1
- package/src/json/schema/index.d.ts +14 -0
- package/src/json/schema/index.js +19 -0
- package/src/json/schema/registry.d.ts +19 -0
- package/src/json/schema/registry.js +34 -0
- package/src/json/schema/schema.d.ts +83 -0
- package/src/json/schema/schema.js +3 -0
- package/src/json/schema/serializers/interface.d.ts +11 -0
- package/src/json/schema/serializers/interface.js +6 -0
- package/src/json/schema/serializers/javascript.d.ts +46 -0
- package/src/json/schema/serializers/javascript.js +94 -0
- package/src/json/schema/serializers/javascript_benchmark.d.ts +0 -0
- package/src/json/schema/serializers/javascript_benchmark.js +45 -0
- package/src/json/schema/serializers/templates/javascript/index.d.ts +11 -0
- package/src/json/schema/serializers/templates/javascript/index.js +21 -0
- package/src/json/schema/serializers/templates/javascript/prop-any.js +40 -0
- package/src/json/schema/serializers/templates/javascript/prop-array.js +166 -0
- package/src/json/schema/serializers/templates/javascript/prop-boolean.js +54 -0
- package/src/json/schema/serializers/templates/javascript/prop-number.js +130 -0
- package/src/json/schema/serializers/templates/javascript/prop-object.js +231 -0
- package/src/json/schema/serializers/templates/javascript/prop-string.js +98 -0
- package/src/json/schema/serializers/templates/javascript/root.js +41 -0
- package/src/json/schema/serializers/templates/javascript/subschema.js +65 -0
- package/src/logger/index.d.ts +0 -1
- package/src/logger/index.js +1 -2
- package/src/logger/logger.d.ts +12 -1
- package/src/logger/logger.js +17 -1
- package/src/logger/null-logger.d.ts +2 -1
- package/src/logger/null-logger.js +12 -1
- package/src/utils/index.d.ts +3 -0
- package/src/utils/index.js +4 -1
- package/src/utils/literals.d.ts +12 -0
- package/src/utils/literals.js +42 -0
- package/src/utils/template.d.ts +82 -0
- package/src/utils/template.js +258 -0
- package/src/logger/cli-logger.js +0 -44
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
+
import { Logger } from '@angular-devkit/core';
|
|
8
9
|
import 'rxjs/add/operator/filter';
|
|
9
|
-
import { Logger } from './logger';
|
|
10
10
|
/**
|
|
11
11
|
* A Logger that sends information to STDOUT and STDERR.
|
|
12
12
|
*/
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function createConsoleLogger(verbose?: boolean): Logger;
|
|
@@ -0,0 +1,43 @@
|
|
|
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 core_1 = require("@angular-devkit/core");
|
|
11
|
+
require("rxjs/add/operator/filter");
|
|
12
|
+
/**
|
|
13
|
+
* A Logger that sends information to STDOUT and STDERR.
|
|
14
|
+
*/
|
|
15
|
+
function createConsoleLogger(verbose = false) {
|
|
16
|
+
const logger = new core_1.IndentLogger('cling');
|
|
17
|
+
logger
|
|
18
|
+
.filter((entry) => (entry.level != 'debug' || verbose))
|
|
19
|
+
.subscribe((entry) => {
|
|
20
|
+
let color = x => core_1.terminal.dim(core_1.terminal.white(x));
|
|
21
|
+
let output = process.stdout;
|
|
22
|
+
switch (entry.level) {
|
|
23
|
+
case 'info':
|
|
24
|
+
color = core_1.terminal.white;
|
|
25
|
+
break;
|
|
26
|
+
case 'warn':
|
|
27
|
+
color = core_1.terminal.yellow;
|
|
28
|
+
break;
|
|
29
|
+
case 'error':
|
|
30
|
+
color = core_1.terminal.red;
|
|
31
|
+
output = process.stderr;
|
|
32
|
+
break;
|
|
33
|
+
case 'fatal':
|
|
34
|
+
color = (x) => core_1.terminal.bold(core_1.terminal.red(x));
|
|
35
|
+
output = process.stderr;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
output.write(color(entry.message) + '\n');
|
|
39
|
+
});
|
|
40
|
+
return logger;
|
|
41
|
+
}
|
|
42
|
+
exports.createConsoleLogger = createConsoleLogger;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFuc2wvU291cmNlcy9kZXZraXQvIiwic291cmNlcyI6WyJwYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9jb3JlL25vZGUvY2xpLWxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILCtDQUFnRjtBQUNoRixvQ0FBa0M7QUFHbEM7O0dBRUc7QUFDSCw2QkFBb0MsT0FBTyxHQUFHLEtBQUs7SUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpDLE1BQU07U0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFlLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQztTQUNoRSxTQUFTLENBQUMsQ0FBQyxLQUFlO1FBQ3pCLElBQUksS0FBSyxHQUEwQixDQUFDLElBQUksZUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLE1BQU07Z0JBQ1QsS0FBSyxHQUFHLGVBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQztZQUNSLEtBQUssTUFBTTtnQkFDVCxLQUFLLEdBQUcsZUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsS0FBSyxDQUFDO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLEtBQUssR0FBRyxlQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNyQixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsS0FBSyxDQUFDO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLEtBQUssR0FBRyxDQUFDLENBQVMsS0FBSyxlQUFRLENBQUMsSUFBSSxDQUFDLGVBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQztRQUNWLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFTCxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUE3QkQsa0RBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgSW5kZW50TG9nZ2VyLCBMb2dFbnRyeSwgTG9nZ2VyLCB0ZXJtaW5hbCB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZmlsdGVyJztcblxuXG4vKipcbiAqIEEgTG9nZ2VyIHRoYXQgc2VuZHMgaW5mb3JtYXRpb24gdG8gU1RET1VUIGFuZCBTVERFUlIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25zb2xlTG9nZ2VyKHZlcmJvc2UgPSBmYWxzZSk6IExvZ2dlciB7XG4gIGNvbnN0IGxvZ2dlciA9IG5ldyBJbmRlbnRMb2dnZXIoJ2NsaW5nJyk7XG5cbiAgbG9nZ2VyXG4gICAgLmZpbHRlcigoZW50cnk6IExvZ0VudHJ5KSA9PiAoZW50cnkubGV2ZWwgIT0gJ2RlYnVnJyB8fCB2ZXJib3NlKSlcbiAgICAuc3Vic2NyaWJlKChlbnRyeTogTG9nRW50cnkpID0+IHtcbiAgICAgIGxldCBjb2xvcjogKHM6IHN0cmluZykgPT4gc3RyaW5nID0geCA9PiB0ZXJtaW5hbC5kaW0odGVybWluYWwud2hpdGUoeCkpO1xuICAgICAgbGV0IG91dHB1dCA9IHByb2Nlc3Muc3Rkb3V0O1xuICAgICAgc3dpdGNoIChlbnRyeS5sZXZlbCkge1xuICAgICAgICBjYXNlICdpbmZvJzpcbiAgICAgICAgICBjb2xvciA9IHRlcm1pbmFsLndoaXRlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgICBjb2xvciA9IHRlcm1pbmFsLnllbGxvdztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgIGNvbG9yID0gdGVybWluYWwucmVkO1xuICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmYXRhbCc6XG4gICAgICAgICAgY29sb3IgPSAoeDogc3RyaW5nKSA9PiB0ZXJtaW5hbC5ib2xkKHRlcm1pbmFsLnJlZCh4KSk7XG4gICAgICAgICAgb3V0cHV0ID0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dC53cml0ZShjb2xvcihlbnRyeS5tZXNzYWdlKSArICdcXG4nKTtcbiAgICB9KTtcblxuICByZXR1cm4gbG9nZ2VyO1xufVxuIl19
|
package/node/fs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isFile(filePath: string): boolean;
|
package/node/fs.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
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 fs = require("fs");
|
|
11
|
+
function isFile(filePath) {
|
|
12
|
+
let stat;
|
|
13
|
+
try {
|
|
14
|
+
stat = fs.statSync(filePath);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
throw e;
|
|
21
|
+
}
|
|
22
|
+
return stat.isFile() || stat.isFIFO();
|
|
23
|
+
}
|
|
24
|
+
exports.isFile = isFile;
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9ub2RlL2ZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7OztHQU1HO0FBQ0gseUJBQXlCO0FBR3pCLGdCQUF1QixRQUFnQjtJQUNyQyxJQUFJLElBQUksQ0FBQztJQUNULElBQUksQ0FBQztRQUNILElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBWkQsd0JBWUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsZShmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBzdGF0O1xuICB0cnkge1xuICAgIHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSAmJiAoZS5jb2RlID09PSAnRU5PRU5UJyB8fCBlLmNvZGUgPT09ICdFTk9URElSJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0LmlzRmlsZSgpIHx8IHN0YXQuaXNGSUZPKCk7XG59XG4iXX0=
|
package/node/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
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 * as fs from './fs';
|
|
9
|
+
export * from './cli-logger';
|
|
10
|
+
export * from './resolve';
|
|
11
|
+
export { fs };
|
package/node/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
const fs = require("./fs");
|
|
14
|
+
exports.fs = fs;
|
|
15
|
+
__export(require("./cli-logger"));
|
|
16
|
+
__export(require("./resolve"));
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9ub2RlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsMkJBQTJCO0FBS2xCLGdCQUFFO0FBSFgsa0NBQTZCO0FBQzdCLCtCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIGZzIGZyb20gJy4vZnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NsaS1sb2dnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvbHZlJztcblxuZXhwb3J0IHsgZnMgfTtcbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { BaseException } from '@angular-devkit/core';
|
|
9
|
+
/**
|
|
10
|
+
* Exception thrown when a module could not be resolved.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ModuleNotFoundException extends BaseException {
|
|
13
|
+
readonly moduleName: string;
|
|
14
|
+
readonly basePath: string;
|
|
15
|
+
readonly code: string;
|
|
16
|
+
constructor(moduleName: string, basePath: string);
|
|
17
|
+
}
|
|
18
|
+
export interface ResolveOptions {
|
|
19
|
+
/**
|
|
20
|
+
* The basedir to use from which to resolve.
|
|
21
|
+
*/
|
|
22
|
+
basedir: string;
|
|
23
|
+
/**
|
|
24
|
+
* The list of extensions to resolve. By default uses Object.keys(require.extensions).
|
|
25
|
+
*/
|
|
26
|
+
extensions?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* An additional list of paths to look into.
|
|
29
|
+
*/
|
|
30
|
+
paths?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Whether or not to preserve symbolic links. If false, the actual paths pointed by
|
|
33
|
+
* the symbolic links will be used. This defaults to true.
|
|
34
|
+
*/
|
|
35
|
+
preserveSymlinks?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether to fallback to a global lookup if the basedir one failed.
|
|
38
|
+
*/
|
|
39
|
+
checkGlobal?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Whether to fallback to using the local caller's directory if the basedir failed.
|
|
42
|
+
*/
|
|
43
|
+
checkLocal?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Whether to only resolve and return the first package.json file found. By default,
|
|
46
|
+
* resolves the main field or the index of the package.
|
|
47
|
+
*/
|
|
48
|
+
resolvePackageJson?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve a package using a logic similar to npm require.resolve, but with more options.
|
|
52
|
+
* @param x The package name to resolve.
|
|
53
|
+
* @param options A list of options. See documentation of those options.
|
|
54
|
+
* @returns {string} Path to the index to include, or if `resolvePackageJson` option was
|
|
55
|
+
* passed, a path to that file.
|
|
56
|
+
* @throws {ModuleNotFoundException} If no module with that name was found anywhere.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolve(x: string, options: ResolveOptions): string;
|
package/node/resolve.js
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
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 core_1 = require("@angular-devkit/core");
|
|
11
|
+
const fs = require("fs");
|
|
12
|
+
const path = require("path");
|
|
13
|
+
const fs_1 = require("./fs");
|
|
14
|
+
/**
|
|
15
|
+
* Exception thrown when a module could not be resolved.
|
|
16
|
+
*/
|
|
17
|
+
class ModuleNotFoundException extends core_1.BaseException {
|
|
18
|
+
constructor(moduleName, basePath) {
|
|
19
|
+
super(`Could not find module ${JSON.stringify(moduleName)} from ${JSON.stringify(basePath)}.`);
|
|
20
|
+
this.moduleName = moduleName;
|
|
21
|
+
this.basePath = basePath;
|
|
22
|
+
this.code = 'MODULE_NOT_FOUND';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ModuleNotFoundException = ModuleNotFoundException;
|
|
26
|
+
/**
|
|
27
|
+
* Returns a list of all the callers from the resolve() call.
|
|
28
|
+
* @returns {string[]}
|
|
29
|
+
* @private
|
|
30
|
+
*/
|
|
31
|
+
function _caller() {
|
|
32
|
+
// see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
|
|
33
|
+
const error = Error;
|
|
34
|
+
const origPrepareStackTrace = error.prepareStackTrace;
|
|
35
|
+
error.prepareStackTrace = (_, stack) => stack;
|
|
36
|
+
const stack = (new Error()).stack;
|
|
37
|
+
error.prepareStackTrace = origPrepareStackTrace;
|
|
38
|
+
return stack ? stack.map(x => x.getFileName()) : [];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the global directory for node_modules. This is based on NPM code itself, and may be subject
|
|
42
|
+
* to change, but is relatively stable.
|
|
43
|
+
* @returns {string} The path to node_modules itself.
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
function _getGlobalNodeModules() {
|
|
47
|
+
let globalPrefix;
|
|
48
|
+
if (process.env.PREFIX) {
|
|
49
|
+
globalPrefix = process.env.PREFIX;
|
|
50
|
+
}
|
|
51
|
+
else if (process.platform === 'win32') {
|
|
52
|
+
// c:\node\node.exe --> prefix=c:\node\
|
|
53
|
+
globalPrefix = path.dirname(process.execPath);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// /usr/local/bin/node --> prefix=/usr/local
|
|
57
|
+
globalPrefix = path.dirname(path.dirname(process.execPath));
|
|
58
|
+
// destdir only is respected on Unix
|
|
59
|
+
if (process.env.DESTDIR) {
|
|
60
|
+
globalPrefix = path.join(process.env.DESTDIR, globalPrefix);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return (process.platform !== 'win32')
|
|
64
|
+
? path.resolve(globalPrefix, 'lib', 'node_modules')
|
|
65
|
+
: path.resolve(globalPrefix, 'node_modules');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolve a package using a logic similar to npm require.resolve, but with more options.
|
|
69
|
+
* @param x The package name to resolve.
|
|
70
|
+
* @param options A list of options. See documentation of those options.
|
|
71
|
+
* @returns {string} Path to the index to include, or if `resolvePackageJson` option was
|
|
72
|
+
* passed, a path to that file.
|
|
73
|
+
* @throws {ModuleNotFoundException} If no module with that name was found anywhere.
|
|
74
|
+
*/
|
|
75
|
+
function resolve(x, options) {
|
|
76
|
+
const readFileSync = fs.readFileSync;
|
|
77
|
+
const extensions = options.extensions || Object.keys(require.extensions);
|
|
78
|
+
const basePath = options.basedir;
|
|
79
|
+
options.paths = options.paths || [];
|
|
80
|
+
if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) {
|
|
81
|
+
let res = path.resolve(basePath, x);
|
|
82
|
+
if (x === '..' || x.slice(-1) === '/') {
|
|
83
|
+
res += '/';
|
|
84
|
+
}
|
|
85
|
+
const m = loadAsFileSync(res) || loadAsDirectorySync(res);
|
|
86
|
+
if (m) {
|
|
87
|
+
return m;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const n = loadNodeModulesSync(x, basePath);
|
|
92
|
+
if (n) {
|
|
93
|
+
return n;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Fallback to checking the local (callee) node modules.
|
|
97
|
+
if (options.checkLocal) {
|
|
98
|
+
const callers = _caller();
|
|
99
|
+
for (const caller of callers) {
|
|
100
|
+
const localDir = path.dirname(caller);
|
|
101
|
+
if (localDir !== options.basedir) {
|
|
102
|
+
try {
|
|
103
|
+
return resolve(x, Object.assign({}, options, { checkLocal: false, checkGlobal: false, basedir: localDir }));
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
// Just swap the basePath with the original call one.
|
|
107
|
+
if (!(e instanceof ModuleNotFoundException)) {
|
|
108
|
+
throw e;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Fallback to checking the global node modules.
|
|
115
|
+
if (options.checkGlobal) {
|
|
116
|
+
const globalDir = path.dirname(_getGlobalNodeModules());
|
|
117
|
+
if (globalDir !== options.basedir) {
|
|
118
|
+
try {
|
|
119
|
+
return resolve(x, Object.assign({}, options, { checkLocal: false, checkGlobal: false, basedir: globalDir }));
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
// Just swap the basePath with the original call one.
|
|
123
|
+
if (!(e instanceof ModuleNotFoundException)) {
|
|
124
|
+
throw e;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
throw new ModuleNotFoundException(x, basePath);
|
|
130
|
+
function loadAsFileSync(x) {
|
|
131
|
+
if (fs_1.isFile(x)) {
|
|
132
|
+
return x;
|
|
133
|
+
}
|
|
134
|
+
return extensions.map(ex => x + ex).find(f => fs_1.isFile(f)) || null;
|
|
135
|
+
}
|
|
136
|
+
function loadAsDirectorySync(x) {
|
|
137
|
+
const pkgfile = path.join(x, 'package.json');
|
|
138
|
+
if (fs_1.isFile(pkgfile)) {
|
|
139
|
+
if (options.resolvePackageJson) {
|
|
140
|
+
return pkgfile;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const body = readFileSync(pkgfile, 'UTF8');
|
|
144
|
+
const pkg = JSON.parse(body);
|
|
145
|
+
if (pkg['main']) {
|
|
146
|
+
if (pkg['main'] === '.' || pkg['main'] === './') {
|
|
147
|
+
pkg['main'] = 'index';
|
|
148
|
+
}
|
|
149
|
+
const m = loadAsFileSync(path.resolve(x, pkg['main']));
|
|
150
|
+
if (m) {
|
|
151
|
+
return m;
|
|
152
|
+
}
|
|
153
|
+
const n = loadAsDirectorySync(path.resolve(x, pkg['main']));
|
|
154
|
+
if (n) {
|
|
155
|
+
return n;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (e) { }
|
|
160
|
+
}
|
|
161
|
+
return loadAsFileSync(path.join(x, '/index'));
|
|
162
|
+
}
|
|
163
|
+
function loadNodeModulesSync(x, start) {
|
|
164
|
+
const dirs = nodeModulesPaths(start, options);
|
|
165
|
+
for (const dir of dirs) {
|
|
166
|
+
const m = loadAsFileSync(path.join(dir, '/', x));
|
|
167
|
+
if (m) {
|
|
168
|
+
return m;
|
|
169
|
+
}
|
|
170
|
+
const n = loadAsDirectorySync(path.join(dir, '/', x));
|
|
171
|
+
if (n) {
|
|
172
|
+
return n;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
function nodeModulesPaths(start, opts) {
|
|
178
|
+
const modules = ['node_modules'];
|
|
179
|
+
// ensure that `start` is an absolute path at this point,
|
|
180
|
+
// resolving against the process' current working directory
|
|
181
|
+
let absoluteStart = path.resolve(start);
|
|
182
|
+
if (opts && opts.preserveSymlinks === false) {
|
|
183
|
+
try {
|
|
184
|
+
absoluteStart = fs.realpathSync(absoluteStart);
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
if (err.code !== 'ENOENT') {
|
|
188
|
+
throw err;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
let prefix = '/';
|
|
193
|
+
if (/^([A-Za-z]:)/.test(absoluteStart)) {
|
|
194
|
+
prefix = '';
|
|
195
|
+
}
|
|
196
|
+
else if (/^\\\\/.test(absoluteStart)) {
|
|
197
|
+
prefix = '\\\\';
|
|
198
|
+
}
|
|
199
|
+
const paths = [absoluteStart];
|
|
200
|
+
let parsed = path.parse(absoluteStart);
|
|
201
|
+
while (parsed.dir !== paths[paths.length - 1]) {
|
|
202
|
+
paths.push(parsed.dir);
|
|
203
|
+
parsed = path.parse(parsed.dir);
|
|
204
|
+
}
|
|
205
|
+
const dirs = paths.reduce((dirs, aPath) => {
|
|
206
|
+
return dirs.concat(modules.map(function (moduleDir) {
|
|
207
|
+
return path.join(prefix, aPath, moduleDir);
|
|
208
|
+
}));
|
|
209
|
+
}, []);
|
|
210
|
+
return opts && opts.paths ? dirs.concat(opts.paths) : dirs;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.resolve = resolve;
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFuc2wvU291cmNlcy9kZXZraXQvIiwic291cmNlcyI6WyJwYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9jb3JlL25vZGUvcmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILCtDQUFxRDtBQUNyRCx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUE4QjtBQUU5Qjs7R0FFRztBQUNILDZCQUFxQyxTQUFRLG9CQUFhO0lBR3hELFlBQTRCLFVBQWtCLEVBQWtCLFFBQWdCO1FBQzlFLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURyRSxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQWtCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFFOUUsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFQRCwwREFPQztBQUVEOzs7O0dBSUc7QUFDSDtJQUNFLGdFQUFnRTtJQUNoRSxNQUFNLEtBQUssR0FBRyxLQUE4RCxDQUFDO0lBQzdFLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0lBQ3RELEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssS0FBSyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQW9FLENBQUM7SUFDakcsS0FBSyxDQUFDLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDO0lBRWhELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RELENBQUM7QUFHRDs7Ozs7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QyxDQUFDO1FBQzlCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBYyxFQUFFLEtBQWE7WUFDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLFNBQVM7Z0JBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUM7QUFwS0QsMEJBb0tDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgQmFzZUV4Y2VwdGlvbiB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBpc0ZpbGUgfSBmcm9tICcuL2ZzJztcblxuLyoqXG4gKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBtb2R1bGUgY291bGQgbm90IGJlIHJlc29sdmVkLlxuICovXG5leHBvcnQgY2xhc3MgTW9kdWxlTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbW9kdWxlTmFtZTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgYmFzZVBhdGg6IHN0cmluZykge1xuICAgIHN1cGVyKGBDb3VsZCBub3QgZmluZCBtb2R1bGUgJHtKU09OLnN0cmluZ2lmeShtb2R1bGVOYW1lKX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KGJhc2VQYXRoKX0uYCk7XG4gICAgdGhpcy5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIGZyb20gdGhlIHJlc29sdmUoKSBjYWxsLlxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2NhbGxlcigpOiBzdHJpbmdbXSB7XG4gIC8vIHNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L3dpa2kvSmF2YVNjcmlwdFN0YWNrVHJhY2VBcGlcbiAgY29uc3QgZXJyb3IgPSBFcnJvciBhcyB7fSBhcyB7IHByZXBhcmVTdGFja1RyYWNlOiAoeDoge30sIHN0YWNrOiB7fSkgPT4ge30gfTtcbiAgY29uc3Qgb3JpZ1ByZXBhcmVTdGFja1RyYWNlID0gZXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gIGVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gKF8sIHN0YWNrKSA9PiBzdGFjaztcbiAgY29uc3Qgc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrIGFzIHt9W10gfCB1bmRlZmluZWQgYXMgeyBnZXRGaWxlTmFtZSgpOiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkO1xuICBlcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9yaWdQcmVwYXJlU3RhY2tUcmFjZTtcblxuICByZXR1cm4gc3RhY2sgPyBzdGFjay5tYXAoeCA9PiB4LmdldEZpbGVOYW1lKCkpIDogW107XG59XG5cblxuLyoqXG4gKiBHZXQgdGhlIGdsb2JhbCBkaXJlY3RvcnkgZm9yIG5vZGVfbW9kdWxlcy4gVGhpcyBpcyBiYXNlZCBvbiBOUE0gY29kZSBpdHNlbGYsIGFuZCBtYXkgYmUgc3ViamVjdFxuICogdG8gY2hhbmdlLCBidXQgaXMgcmVsYXRpdmVseSBzdGFibGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byBub2RlX21vZHVsZXMgaXRzZWxmLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2dldEdsb2JhbE5vZGVNb2R1bGVzKCkge1xuICBsZXQgZ2xvYmFsUHJlZml4O1xuXG4gIGlmIChwcm9jZXNzLmVudi5QUkVGSVgpIHtcbiAgICBnbG9iYWxQcmVmaXggPSBwcm9jZXNzLmVudi5QUkVGSVg7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIC8vIGM6XFxub2RlXFxub2RlLmV4ZSAtLT4gcHJlZml4PWM6XFxub2RlXFxcbiAgICBnbG9iYWxQcmVmaXggPSBwYXRoLmRpcm5hbWUocHJvY2Vzcy5leGVjUGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gL3Vzci9sb2NhbC9iaW4vbm9kZSAtLT4gcHJlZml4PS91c3IvbG9jYWxcbiAgICBnbG9iYWxQcmVmaXggPSBwYXRoLmRpcm5hbWUocGF0aC5kaXJuYW1lKHByb2Nlc3MuZXhlY1BhdGgpKTtcblxuICAgIC8vIGRlc3RkaXIgb25seSBpcyByZXNwZWN0ZWQgb24gVW5peFxuICAgIGlmIChwcm9jZXNzLmVudi5ERVNURElSKSB7XG4gICAgICBnbG9iYWxQcmVmaXggPSBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuREVTVERJUiwgZ2xvYmFsUHJlZml4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpXG4gICAgPyBwYXRoLnJlc29sdmUoZ2xvYmFsUHJlZml4LCAnbGliJywgJ25vZGVfbW9kdWxlcycpXG4gICAgOiBwYXRoLnJlc29sdmUoZ2xvYmFsUHJlZml4LCAnbm9kZV9tb2R1bGVzJyk7XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZWRpciB0byB1c2UgZnJvbSB3aGljaCB0byByZXNvbHZlLlxuICAgKi9cbiAgYmFzZWRpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBleHRlbnNpb25zIHRvIHJlc29sdmUuIEJ5IGRlZmF1bHQgdXNlcyBPYmplY3Qua2V5cyhyZXF1aXJlLmV4dGVuc2lvbnMpLlxuICAgKi9cbiAgZXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbiBhZGRpdGlvbmFsIGxpc3Qgb2YgcGF0aHMgdG8gbG9vayBpbnRvLlxuICAgKi9cbiAgcGF0aHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcHJlc2VydmUgc3ltYm9saWMgbGlua3MuIElmIGZhbHNlLCB0aGUgYWN0dWFsIHBhdGhzIHBvaW50ZWQgYnlcbiAgICogdGhlIHN5bWJvbGljIGxpbmtzIHdpbGwgYmUgdXNlZC4gVGhpcyBkZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcHJlc2VydmVTeW1saW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZmFsbGJhY2sgdG8gYSBnbG9iYWwgbG9va3VwIGlmIHRoZSBiYXNlZGlyIG9uZSBmYWlsZWQuXG4gICAqL1xuICBjaGVja0dsb2JhbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZmFsbGJhY2sgdG8gdXNpbmcgdGhlIGxvY2FsIGNhbGxlcidzIGRpcmVjdG9yeSBpZiB0aGUgYmFzZWRpciBmYWlsZWQuXG4gICAqL1xuICBjaGVja0xvY2FsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBvbmx5IHJlc29sdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgcGFja2FnZS5qc29uIGZpbGUgZm91bmQuIEJ5IGRlZmF1bHQsXG4gICAqIHJlc29sdmVzIHRoZSBtYWluIGZpZWxkIG9yIHRoZSBpbmRleCBvZiB0aGUgcGFja2FnZS5cbiAgICovXG4gIHJlc29sdmVQYWNrYWdlSnNvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHBhY2thZ2UgdXNpbmcgYSBsb2dpYyBzaW1pbGFyIHRvIG5wbSByZXF1aXJlLnJlc29sdmUsIGJ1dCB3aXRoIG1vcmUgb3B0aW9ucy5cbiAqIEBwYXJhbSB4IFRoZSBwYWNrYWdlIG5hbWUgdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBvcHRpb25zIEEgbGlzdCBvZiBvcHRpb25zLiBTZWUgZG9jdW1lbnRhdGlvbiBvZiB0aG9zZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gUGF0aCB0byB0aGUgaW5kZXggdG8gaW5jbHVkZSwgb3IgaWYgYHJlc29sdmVQYWNrYWdlSnNvbmAgb3B0aW9uIHdhc1xuICogICAgICAgICAgICAgICAgICAgcGFzc2VkLCBhIHBhdGggdG8gdGhhdCBmaWxlLlxuICogQHRocm93cyB7TW9kdWxlTm90Rm91bmRFeGNlcHRpb259IElmIG5vIG1vZHVsZSB3aXRoIHRoYXQgbmFtZSB3YXMgZm91bmQgYW55d2hlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKHg6IHN0cmluZywgb3B0aW9uczogUmVzb2x2ZU9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCByZWFkRmlsZVN5bmMgPSBmcy5yZWFkRmlsZVN5bmM7XG5cbiAgY29uc3QgZXh0ZW5zaW9uczogc3RyaW5nW10gPSBvcHRpb25zLmV4dGVuc2lvbnMgfHwgT2JqZWN0LmtleXMocmVxdWlyZS5leHRlbnNpb25zKTtcbiAgY29uc3QgYmFzZVBhdGggPSBvcHRpb25zLmJhc2VkaXI7XG5cbiAgb3B0aW9ucy5wYXRocyA9IG9wdGlvbnMucGF0aHMgfHwgW107XG5cbiAgaWYgKC9eKD86XFwuXFwuPyg/OlxcL3wkKXxcXC98KFtBLVphLXpdOik/Wy9cXFxcXSkvLnRlc3QoeCkpIHtcbiAgICBsZXQgcmVzID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCB4KTtcbiAgICBpZiAoeCA9PT0gJy4uJyB8fCB4LnNsaWNlKC0xKSA9PT0gJy8nKSB7XG4gICAgICByZXMgKz0gJy8nO1xuICAgIH1cblxuICAgIGNvbnN0IG0gPSBsb2FkQXNGaWxlU3luYyhyZXMpIHx8IGxvYWRBc0RpcmVjdG9yeVN5bmMocmVzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIG07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG4gPSBsb2FkTm9kZU1vZHVsZXNTeW5jKHgsIGJhc2VQYXRoKTtcbiAgICBpZiAobikge1xuICAgICAgcmV0dXJuIG47XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gY2hlY2tpbmcgdGhlIGxvY2FsIChjYWxsZWUpIG5vZGUgbW9kdWxlcy5cbiAgaWYgKG9wdGlvbnMuY2hlY2tMb2NhbCkge1xuICAgIGNvbnN0IGNhbGxlcnMgPSBfY2FsbGVyKCk7XG4gICAgZm9yIChjb25zdCBjYWxsZXIgb2YgY2FsbGVycykge1xuICAgICAgY29uc3QgbG9jYWxEaXIgPSBwYXRoLmRpcm5hbWUoY2FsbGVyKTtcbiAgICAgIGlmIChsb2NhbERpciAhPT0gb3B0aW9ucy5iYXNlZGlyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeCwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGNoZWNrTG9jYWw6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tHbG9iYWw6IGZhbHNlLFxuICAgICAgICAgICAgYmFzZWRpcjogbG9jYWxEaXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBKdXN0IHN3YXAgdGhlIGJhc2VQYXRoIHdpdGggdGhlIG9yaWdpbmFsIGNhbGwgb25lLlxuICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBNb2R1bGVOb3RGb3VuZEV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gY2hlY2tpbmcgdGhlIGdsb2JhbCBub2RlIG1vZHVsZXMuXG4gIGlmIChvcHRpb25zLmNoZWNrR2xvYmFsKSB7XG4gICAgY29uc3QgZ2xvYmFsRGlyID0gcGF0aC5kaXJuYW1lKF9nZXRHbG9iYWxOb2RlTW9kdWxlcygpKTtcbiAgICBpZiAoZ2xvYmFsRGlyICE9PSBvcHRpb25zLmJhc2VkaXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHgsIHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGNoZWNrTG9jYWw6IGZhbHNlLFxuICAgICAgICAgIGNoZWNrR2xvYmFsOiBmYWxzZSxcbiAgICAgICAgICBiYXNlZGlyOiBnbG9iYWxEaXIsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBKdXN0IHN3YXAgdGhlIGJhc2VQYXRoIHdpdGggdGhlIG9yaWdpbmFsIGNhbGwgb25lLlxuICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgTW9kdWxlTm90Rm91bmRFeGNlcHRpb24pKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBNb2R1bGVOb3RGb3VuZEV4Y2VwdGlvbih4LCBiYXNlUGF0aCk7XG5cbiAgZnVuY3Rpb24gbG9hZEFzRmlsZVN5bmMoeDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGlzRmlsZSh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuc2lvbnMubWFwKGV4ID0+IHggKyBleCkuZmluZChmID0+IGlzRmlsZShmKSkgfHwgbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWRBc0RpcmVjdG9yeVN5bmMoeDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGtnZmlsZSA9IHBhdGguam9pbih4LCAncGFja2FnZS5qc29uJyk7XG4gICAgaWYgKGlzRmlsZShwa2dmaWxlKSkge1xuICAgICAgaWYgKG9wdGlvbnMucmVzb2x2ZVBhY2thZ2VKc29uKSB7XG4gICAgICAgIHJldHVybiBwa2dmaWxlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gcmVhZEZpbGVTeW5jKHBrZ2ZpbGUsICdVVEY4Jyk7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoYm9keSk7XG5cbiAgICAgICAgaWYgKHBrZ1snbWFpbiddKSB7XG4gICAgICAgICAgaWYgKHBrZ1snbWFpbiddID09PSAnLicgfHwgcGtnWydtYWluJ10gPT09ICcuLycpIHtcbiAgICAgICAgICAgIHBrZ1snbWFpbiddID0gJ2luZGV4JztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtID0gbG9hZEFzRmlsZVN5bmMocGF0aC5yZXNvbHZlKHgsIHBrZ1snbWFpbiddKSk7XG4gICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuID0gbG9hZEFzRGlyZWN0b3J5U3luYyhwYXRoLnJlc29sdmUoeCwgcGtnWydtYWluJ10pKTtcbiAgICAgICAgICBpZiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cblxuICAgIHJldHVybiBsb2FkQXNGaWxlU3luYyhwYXRoLmpvaW4oeCwgJy9pbmRleCcpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWROb2RlTW9kdWxlc1N5bmMoeDogc3RyaW5nLCBzdGFydDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgZGlycyA9IG5vZGVNb2R1bGVzUGF0aHMoc3RhcnQsIG9wdGlvbnMpO1xuICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgIGNvbnN0IG0gPSBsb2FkQXNGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCAnLycsIHgpKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfVxuICAgICAgY29uc3QgbiA9IGxvYWRBc0RpcmVjdG9yeVN5bmMocGF0aC5qb2luKGRpciwgJy8nLCB4KSk7XG4gICAgICBpZiAobikge1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vZGVNb2R1bGVzUGF0aHMoc3RhcnQ6IHN0cmluZywgb3B0czogUmVzb2x2ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2R1bGVzID0gWydub2RlX21vZHVsZXMnXTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IGBzdGFydGAgaXMgYW4gYWJzb2x1dGUgcGF0aCBhdCB0aGlzIHBvaW50LFxuICAgIC8vIHJlc29sdmluZyBhZ2FpbnN0IHRoZSBwcm9jZXNzJyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgbGV0IGFic29sdXRlU3RhcnQgPSBwYXRoLnJlc29sdmUoc3RhcnQpO1xuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wcmVzZXJ2ZVN5bWxpbmtzID09PSBmYWxzZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWJzb2x1dGVTdGFydCA9IGZzLnJlYWxwYXRoU3luYyhhYnNvbHV0ZVN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHByZWZpeCA9ICcvJztcbiAgICBpZiAoL14oW0EtWmEtel06KS8udGVzdChhYnNvbHV0ZVN0YXJ0KSkge1xuICAgICAgcHJlZml4ID0gJyc7XG4gICAgfSBlbHNlIGlmICgvXlxcXFxcXFxcLy50ZXN0KGFic29sdXRlU3RhcnQpKSB7XG4gICAgICBwcmVmaXggPSAnXFxcXFxcXFwnO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGhzID0gW2Fic29sdXRlU3RhcnRdO1xuICAgIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGFic29sdXRlU3RhcnQpO1xuICAgIHdoaWxlIChwYXJzZWQuZGlyICE9PSBwYXRoc1twYXRocy5sZW5ndGggLSAxXSkge1xuICAgICAgcGF0aHMucHVzaChwYXJzZWQuZGlyKTtcbiAgICAgIHBhcnNlZCA9IHBhdGgucGFyc2UocGFyc2VkLmRpcik7XG4gICAgfVxuXG4gICAgY29uc3QgZGlycyA9IHBhdGhzLnJlZHVjZSgoZGlyczogc3RyaW5nW10sIGFQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBkaXJzLmNvbmNhdChtb2R1bGVzLm1hcChmdW5jdGlvbiAobW9kdWxlRGlyKSB7XG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4ocHJlZml4LCBhUGF0aCwgbW9kdWxlRGlyKTtcbiAgICAgIH0pKTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gb3B0cyAmJiBvcHRzLnBhdGhzID8gZGlycy5jb25jYXQob3B0cy5wYXRocykgOiBkaXJzO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-devkit/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"description": "Angular DevKit - Core Utility Library",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"typings": "src/index.d.ts",
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
"Angular DevKit",
|
|
12
12
|
"core"
|
|
13
13
|
],
|
|
14
|
-
"dependencies": {
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"source-map": "^0.5.6"
|
|
16
|
+
},
|
|
15
17
|
"repository": {
|
|
16
18
|
"type": "git",
|
|
17
19
|
"url": "https://github.com/angular/devkit.git"
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -13,7 +13,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
__export(require("./exception/exception"));
|
|
14
14
|
__export(require("./json"));
|
|
15
15
|
__export(require("./logger"));
|
|
16
|
-
|
|
16
|
+
const terminal = require("./terminal");
|
|
17
|
+
exports.terminal = terminal;
|
|
17
18
|
__export(require("./utils"));
|
|
18
19
|
__export(require("./virtual-fs"));
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCwyQ0FBc0M7QUFDdEMsNEJBQXVCO0FBQ3ZCLDhCQUF5QjtBQUN6Qix1Q0FBdUM7QUFLOUIsNEJBQVE7QUFKakIsNkJBQXdCO0FBQ3hCLGtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vZXhjZXB0aW9uL2V4Y2VwdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2pzb24nO1xuZXhwb3J0ICogZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0ICogYXMgdGVybWluYWwgZnJvbSAnLi90ZXJtaW5hbCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC1mcyc7XG5cblxuZXhwb3J0IHsgdGVybWluYWwgfTtcbiJdfQ==
|
package/src/json/index.d.ts
CHANGED
package/src/json/index.js
CHANGED
|
@@ -4,4 +4,6 @@ function __export(m) {
|
|
|
4
4
|
}
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
__export(require("./parser"));
|
|
7
|
-
|
|
7
|
+
const schema = require("./schema");
|
|
8
|
+
exports.schema = schema;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9zcmMvanNvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBLDhCQUF5QjtBQUV6QixtQ0FBbUM7QUFDMUIsd0JBQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlcic7XG5cbmltcG9ydCAqIGFzIHNjaGVtYSBmcm9tICcuL3NjaGVtYSc7XG5leHBvcnQgeyBzY2hlbWEgfTtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
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 * as javascript from './serializers/javascript';
|
|
9
|
+
export * from './registry';
|
|
10
|
+
export * from './schema';
|
|
11
|
+
export { javascript };
|
|
12
|
+
export declare const serializers: {
|
|
13
|
+
JavascriptSerializer: typeof javascript.JavascriptSerializer;
|
|
14
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
const javascript = require("./serializers/javascript");
|
|
14
|
+
exports.javascript = javascript;
|
|
15
|
+
__export(require("./registry"));
|
|
16
|
+
exports.serializers = {
|
|
17
|
+
JavascriptSerializer: javascript.JavascriptSerializer,
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9zcmMvanNvbi9zY2hlbWEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCx1REFBdUQ7QUFNOUMsZ0NBQVU7QUFKbkIsZ0NBQTJCO0FBTWQsUUFBQSxXQUFXLEdBQUc7SUFDekIsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLG9CQUFvQjtDQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgamF2YXNjcmlwdCBmcm9tICcuL3NlcmlhbGl6ZXJzL2phdmFzY3JpcHQnO1xuXG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hJztcblxuXG5leHBvcnQgeyBqYXZhc2NyaXB0IH07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVycyA9IHtcbiAgSmF2YXNjcmlwdFNlcmlhbGl6ZXI6IGphdmFzY3JpcHQuSmF2YXNjcmlwdFNlcmlhbGl6ZXIsXG59O1xuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
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 { BaseException } from '../../exception/exception';
|
|
9
|
+
import { JsonSchema } from './schema';
|
|
10
|
+
export declare class JsonSchemaNotFoundException extends BaseException {
|
|
11
|
+
constructor(ref: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class JsonSchemaRegistry {
|
|
14
|
+
private _cache;
|
|
15
|
+
constructor();
|
|
16
|
+
addSchema(ref: string, schema: JsonSchema): void;
|
|
17
|
+
hasSchema(ref: string): boolean;
|
|
18
|
+
getSchemaFromRef(ref: string): JsonSchema;
|
|
19
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 JsonSchemaNotFoundException extends exception_1.BaseException {
|
|
12
|
+
constructor(ref) { super(`Reference "${ref}" could not be found in registry.`); }
|
|
13
|
+
}
|
|
14
|
+
exports.JsonSchemaNotFoundException = JsonSchemaNotFoundException;
|
|
15
|
+
class JsonSchemaRegistry {
|
|
16
|
+
constructor() {
|
|
17
|
+
this._cache = new Map();
|
|
18
|
+
}
|
|
19
|
+
addSchema(ref, schema) {
|
|
20
|
+
this._cache.set(ref, schema);
|
|
21
|
+
}
|
|
22
|
+
hasSchema(ref) {
|
|
23
|
+
return this._cache.has(ref);
|
|
24
|
+
}
|
|
25
|
+
getSchemaFromRef(ref) {
|
|
26
|
+
const schemaCache = this._cache.get(ref);
|
|
27
|
+
if (!schemaCache) {
|
|
28
|
+
throw new JsonSchemaNotFoundException(ref);
|
|
29
|
+
}
|
|
30
|
+
return schemaCache;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.JsonSchemaRegistry = JsonSchemaRegistry;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9zcmMvanNvbi9zY2hlbWEvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUc7QUFDSCx5REFBMEQ7QUFJMUQsaUNBQXlDLFNBQVEseUJBQWE7SUFDNUQsWUFBWSxHQUFXLElBQUksS0FBSyxDQUFDLGNBQWMsR0FBRyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRjtBQUZELGtFQUVDO0FBR0Q7SUFHRTtRQUZRLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUVoQyxDQUFDO0lBRWhCLFNBQVMsQ0FBQyxHQUFXLEVBQUUsTUFBa0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVc7UUFDMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUF0QkQsZ0RBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgQmFzZUV4Y2VwdGlvbiB9IGZyb20gJy4uLy4uL2V4Y2VwdGlvbi9leGNlcHRpb24nO1xuaW1wb3J0IHsgSnNvblNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcblxuXG5leHBvcnQgY2xhc3MgSnNvblNjaGVtYU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJlZjogc3RyaW5nKSB7IHN1cGVyKGBSZWZlcmVuY2UgXCIke3JlZn1cIiBjb3VsZCBub3QgYmUgZm91bmQgaW4gcmVnaXN0cnkuYCk7IH1cbn1cblxuXG5leHBvcnQgY2xhc3MgSnNvblNjaGVtYVJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSBfY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgSnNvblNjaGVtYT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgYWRkU2NoZW1hKHJlZjogc3RyaW5nLCBzY2hlbWE6IEpzb25TY2hlbWEpIHtcbiAgICB0aGlzLl9jYWNoZS5zZXQocmVmLCBzY2hlbWEpO1xuICB9XG5cbiAgaGFzU2NoZW1hKHJlZjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmhhcyhyZWYpO1xuICB9XG5cbiAgZ2V0U2NoZW1hRnJvbVJlZihyZWY6IHN0cmluZyk6IEpzb25TY2hlbWEge1xuICAgIGNvbnN0IHNjaGVtYUNhY2hlID0gdGhpcy5fY2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAoIXNjaGVtYUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgSnNvblNjaGVtYU5vdEZvdW5kRXhjZXB0aW9uKHJlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVtYUNhY2hlO1xuICB9XG59XG4iXX0=
|