@angular/pwa
Advanced tools
+8
-7
| { | ||
| "name": "@angular/pwa", | ||
| "version": "0.8.1", | ||
| "version": "0.9.0-beta.0", | ||
| "description": "PWA schematics for Angular", | ||
@@ -17,6 +17,7 @@ "keywords": [ | ||
| "dependencies": { | ||
| "@angular-devkit/core": "0.8.1", | ||
| "@angular-devkit/schematics": "0.8.1", | ||
| "@schematics/angular": "0.8.1", | ||
| "typescript": "~2.6.2" | ||
| "@angular-devkit/core": "0.9.0-beta.0", | ||
| "@angular-devkit/schematics": "0.9.0-beta.0", | ||
| "@schematics/angular": "0.9.0-beta.0", | ||
| "parse5-html-rewriting-stream": "^5.1.0", | ||
| "rxjs": "^6.0.0" | ||
| }, | ||
@@ -28,4 +29,4 @@ "repository": { | ||
| "engines": { | ||
| "node": ">= 8.9.0", | ||
| "npm": ">= 5.5.1" | ||
| "node": ">=10.3.0 <11.0.0", | ||
| "yarn": ">=1.6.0 <2.0.0" | ||
| }, | ||
@@ -32,0 +33,0 @@ "author": "Angular Authors", |
+123
-88
@@ -12,35 +12,20 @@ "use strict"; | ||
| const schematics_1 = require("@angular-devkit/schematics"); | ||
| const config_1 = require("../utility/config"); | ||
| function addServiceWorker(options) { | ||
| return (host, context) => { | ||
| context.logger.debug('Adding service worker...'); | ||
| const swOptions = Object.assign({}, options); | ||
| delete swOptions.title; | ||
| return schematics_1.externalSchematic('@schematics/angular', 'service-worker', swOptions); | ||
| const rxjs_1 = require("rxjs"); | ||
| const stream_1 = require("stream"); | ||
| const RewritingStream = require('parse5-html-rewriting-stream'); | ||
| function getWorkspace(host) { | ||
| const possibleFiles = ['/angular.json', '/.angular.json']; | ||
| const path = possibleFiles.filter(path => host.exists(path))[0]; | ||
| const configBuffer = host.read(path); | ||
| if (configBuffer === null) { | ||
| throw new schematics_1.SchematicsException(`Could not find (${path})`); | ||
| } | ||
| const content = configBuffer.toString(); | ||
| return { | ||
| path, | ||
| workspace: core_1.parseJson(content, core_1.JsonParseMode.Loose), | ||
| }; | ||
| } | ||
| function getIndent(text) { | ||
| let indent = ''; | ||
| for (const char of text) { | ||
| if (char === ' ' || char === '\t') { | ||
| indent += char; | ||
| } | ||
| else { | ||
| break; | ||
| } | ||
| } | ||
| return indent; | ||
| } | ||
| function updateIndexFile(options) { | ||
| return (host, context) => { | ||
| const workspace = config_1.getWorkspace(host); | ||
| const project = workspace.projects[options.project]; | ||
| let path; | ||
| const projectTargets = project.targets || project.architect; | ||
| if (project && projectTargets && projectTargets.build && projectTargets.build.options.index) { | ||
| path = projectTargets.build.options.index; | ||
| } | ||
| else { | ||
| throw new schematics_1.SchematicsException('Could not find index file for the project'); | ||
| } | ||
| function updateIndexFile(path) { | ||
| return (host) => { | ||
| const buffer = host.read(path); | ||
@@ -50,54 +35,44 @@ if (buffer === null) { | ||
| } | ||
| const content = buffer.toString(); | ||
| const lines = content.split('\n'); | ||
| let closingHeadTagLineIndex = -1; | ||
| let closingBodyTagLineIndex = -1; | ||
| lines.forEach((line, index) => { | ||
| if (closingHeadTagLineIndex === -1 && /<\/head>/.test(line)) { | ||
| closingHeadTagLineIndex = index; | ||
| const rewriter = new RewritingStream(); | ||
| let needsNoScript = true; | ||
| rewriter.on('startTag', (startTag) => { | ||
| if (startTag.tagName === 'noscript') { | ||
| needsNoScript = false; | ||
| } | ||
| else if (closingBodyTagLineIndex === -1 && /<\/body>/.test(line)) { | ||
| closingBodyTagLineIndex = index; | ||
| rewriter.emitStartTag(startTag); | ||
| }); | ||
| rewriter.on('endTag', (endTag) => { | ||
| if (endTag.tagName === 'head') { | ||
| rewriter.emitRaw(' <link rel="manifest" href="manifest.json">\n'); | ||
| rewriter.emitRaw(' <meta name="theme-color" content="#1976d2">\n'); | ||
| } | ||
| else if (endTag.tagName === 'body' && needsNoScript) { | ||
| rewriter.emitRaw(' <noscript>Please enable JavaScript to continue using this application.</noscript>\n'); | ||
| } | ||
| rewriter.emitEndTag(endTag); | ||
| }); | ||
| const headIndent = getIndent(lines[closingHeadTagLineIndex]) + ' '; | ||
| const itemsToAddToHead = [ | ||
| '<link rel="manifest" href="manifest.json">', | ||
| '<meta name="theme-color" content="#1976d2">', | ||
| ]; | ||
| const bodyIndent = getIndent(lines[closingBodyTagLineIndex]) + ' '; | ||
| const itemsToAddToBody = [ | ||
| '<noscript>Please enable JavaScript to continue using this application.</noscript>', | ||
| ]; | ||
| const updatedIndex = [ | ||
| ...lines.slice(0, closingHeadTagLineIndex), | ||
| ...itemsToAddToHead.map(line => headIndent + line), | ||
| ...lines.slice(closingHeadTagLineIndex, closingBodyTagLineIndex), | ||
| ...itemsToAddToBody.map(line => bodyIndent + line), | ||
| ...lines.slice(closingBodyTagLineIndex), | ||
| ].join('\n'); | ||
| host.overwrite(path, updatedIndex); | ||
| return host; | ||
| }; | ||
| } | ||
| function addManifestToAssetsConfig(options) { | ||
| return (host, context) => { | ||
| const workspacePath = config_1.getWorkspacePath(host); | ||
| const workspace = config_1.getWorkspace(host); | ||
| const project = workspace.projects[options.project]; | ||
| if (!project) { | ||
| throw new Error(`Project is not defined in this workspace.`); | ||
| } | ||
| const assetEntry = core_1.join(core_1.normalize(project.root), 'src', 'manifest.json'); | ||
| const projectTargets = project.targets || project.architect; | ||
| if (!projectTargets) { | ||
| throw new Error(`Targets are not defined for this project.`); | ||
| } | ||
| ['build', 'test'].forEach((target) => { | ||
| const applyTo = projectTargets[target].options; | ||
| const assets = applyTo.assets || (applyTo.assets = []); | ||
| assets.push(assetEntry); | ||
| return new rxjs_1.Observable(obs => { | ||
| const input = new stream_1.Readable({ | ||
| encoding: 'utf8', | ||
| read() { | ||
| this.push(buffer); | ||
| this.push(null); | ||
| }, | ||
| }); | ||
| const chunks = []; | ||
| const output = new stream_1.Writable({ | ||
| write(chunk, encoding, callback) { | ||
| chunks.push(typeof chunk === 'string' ? Buffer.from(chunk, encoding) : chunk); | ||
| callback(); | ||
| }, | ||
| final(callback) { | ||
| const full = Buffer.concat(chunks); | ||
| host.overwrite(path, full.toString()); | ||
| callback(); | ||
| obs.next(host); | ||
| obs.complete(); | ||
| }, | ||
| }); | ||
| input.pipe(rewriter).pipe(output); | ||
| }); | ||
| host.overwrite(workspacePath, JSON.stringify(workspace, null, 2)); | ||
| return host; | ||
| }; | ||
@@ -107,3 +82,6 @@ } | ||
| return (host, context) => { | ||
| const workspace = config_1.getWorkspace(host); | ||
| if (!options.title) { | ||
| options.title = options.project; | ||
| } | ||
| const { path: workspacePath, workspace } = getWorkspace(host); | ||
| if (!options.project) { | ||
@@ -113,22 +91,79 @@ throw new schematics_1.SchematicsException('Option "project" is required.'); | ||
| const project = workspace.projects[options.project]; | ||
| if (!project) { | ||
| throw new schematics_1.SchematicsException(`Project is not defined in this workspace.`); | ||
| } | ||
| if (project.projectType !== 'application') { | ||
| throw new schematics_1.SchematicsException(`PWA requires a project type of "application".`); | ||
| } | ||
| const sourcePath = core_1.join(project.root, 'src'); | ||
| // Find all the relevant targets for the project | ||
| const projectTargets = project.targets || project.architect; | ||
| if (!projectTargets || Object.keys(projectTargets).length === 0) { | ||
| throw new schematics_1.SchematicsException(`Targets are not defined for this project.`); | ||
| } | ||
| const buildTargets = []; | ||
| const testTargets = []; | ||
| for (const targetName in projectTargets) { | ||
| const target = projectTargets[targetName]; | ||
| if (!target) { | ||
| continue; | ||
| } | ||
| if (target.builder === '@angular-devkit/build-angular:browser') { | ||
| buildTargets.push(target); | ||
| } | ||
| else if (target.builder === '@angular-devkit/build-angular:karma') { | ||
| testTargets.push(target); | ||
| } | ||
| } | ||
| // Add manifest to asset configuration | ||
| const assetEntry = core_1.join(core_1.normalize(project.root), 'src', 'manifest.json'); | ||
| for (const target of [...buildTargets, ...testTargets]) { | ||
| if (target.options) { | ||
| if (target.options.assets) { | ||
| target.options.assets.push(assetEntry); | ||
| } | ||
| else { | ||
| target.options.assets = [assetEntry]; | ||
| } | ||
| } | ||
| else { | ||
| target.options = { assets: [assetEntry] }; | ||
| } | ||
| } | ||
| host.overwrite(workspacePath, JSON.stringify(workspace, null, 2)); | ||
| // Find all index.html files in build targets | ||
| const indexFiles = new Set(); | ||
| for (const target of buildTargets) { | ||
| if (target.options && target.options.index) { | ||
| indexFiles.add(target.options.index); | ||
| } | ||
| if (!target.configurations) { | ||
| continue; | ||
| } | ||
| for (const configName in target.configurations) { | ||
| const configuration = target.configurations[configName]; | ||
| if (configuration && configuration.index) { | ||
| indexFiles.add(configuration.index); | ||
| } | ||
| } | ||
| } | ||
| // Setup sources for the assets files to add to the project | ||
| const sourcePath = core_1.join(core_1.normalize(project.root), 'src'); | ||
| const assetsPath = core_1.join(sourcePath, 'assets'); | ||
| options.title = options.title || options.project; | ||
| const rootTemplateSource = schematics_1.apply(schematics_1.url('./files/root'), [ | ||
| schematics_1.template(Object.assign({}, options)), | ||
| schematics_1.move(sourcePath), | ||
| schematics_1.move(core_1.getSystemPath(sourcePath)), | ||
| ]); | ||
| const assetsTemplateSource = schematics_1.apply(schematics_1.url('./files/assets'), [ | ||
| schematics_1.template(Object.assign({}, options)), | ||
| schematics_1.move(assetsPath), | ||
| schematics_1.move(core_1.getSystemPath(assetsPath)), | ||
| ]); | ||
| // Setup service worker schematic options | ||
| const swOptions = Object.assign({}, options); | ||
| delete swOptions.title; | ||
| // Chain the rules and return | ||
| return schematics_1.chain([ | ||
| addServiceWorker(options), | ||
| schematics_1.externalSchematic('@schematics/angular', 'service-worker', swOptions), | ||
| schematics_1.mergeWith(rootTemplateSource), | ||
| schematics_1.mergeWith(assetsTemplateSource), | ||
| updateIndexFile(options), | ||
| addManifestToAssetsConfig(options), | ||
| ...[...indexFiles].map(path => updateIndexFile(path)), | ||
| ])(host, context); | ||
@@ -138,2 +173,2 @@ }; | ||
| exports.default = default_1; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXIvcHdhL3B3YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7RUFNRTtBQUNGLCtDQUE2RDtBQUM3RCwyREFZb0M7QUFDcEMsOENBQW1FO0FBSW5FLDBCQUEwQixPQUFtQjtJQUMzQyxPQUFPLENBQUMsSUFBVSxFQUFFLE9BQXlCLEVBQUUsRUFBRTtRQUMvQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRWpELE1BQU0sU0FBUyxxQkFDVixPQUFPLENBQ1gsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztRQUV2QixPQUFPLDhCQUFpQixDQUFDLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxtQkFBbUIsSUFBWTtJQUM3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7UUFDdkIsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakMsTUFBTSxJQUFJLElBQUksQ0FBQztTQUNoQjthQUFNO1lBQ0wsTUFBTTtTQUNQO0tBQ0Y7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQseUJBQXlCLE9BQW1CO0lBQzFDLE9BQU8sQ0FBQyxJQUFVLEVBQUUsT0FBeUIsRUFBRSxFQUFFO1FBQy9DLE1BQU0sU0FBUyxHQUFHLHFCQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBaUIsQ0FBQyxDQUFDO1FBQzlELElBQUksSUFBWSxDQUFDO1FBQ2pCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElB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QUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUU7WUFDekMsTUFBTSxJQUFJLGdDQUFtQixDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDaEY7UUFFRCxNQUFNLFVBQVUsR0FBRyxXQUFJLENBQUMsT0FBTyxDQUFDLElBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxXQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRWpELE1BQU0sa0JBQWtCLEdBQUcsa0JBQUssQ0FBQyxnQkFBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3BELHFCQUFRLG1CQUFNLE9BQU8sRUFBRztZQUN4QixpQkFBSSxDQUFDLFVBQVUsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLG9CQUFvQixHQUFHLGtCQUFLLENBQUMsZ0JBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3hELHFCQUFRLG1CQUFNLE9BQU8sRUFBRztZQUN4QixpQkFBSSxDQUFDLFVBQVUsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFFSCxPQUFPLGtCQUFLLENBQUM7WUFDWCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDekIsc0JBQVMsQ0FBQyxrQkFBa0IsQ0FBQztZQUM3QixzQkFBUyxDQUFDLG9CQUFvQixDQUFDO1lBQy9CLGVBQWUsQ0FBQyxPQUFPLENBQUM7WUFDeEIseUJBQXlCLENBQUMsT0FBTyxDQUFDO1NBQ25DLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWpDRCw0QkFpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiogQGxpY2Vuc2VcbiogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4qXG4qIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4qIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiovXG5pbXBvcnQgeyBQYXRoLCBqb2luLCBub3JtYWxpemUgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1xuICBSdWxlLFxuICBTY2hlbWF0aWNDb250ZXh0LFxuICBTY2hlbWF0aWNzRXhjZXB0aW9uLFxuICBUcmVlLFxuICBhcHBseSxcbiAgY2hhaW4sXG4gIGV4dGVybmFsU2NoZW1hdGljLFxuICBtZXJnZVdpdGgsXG4gIG1vdmUsXG4gIHRlbXBsYXRlLFxuICB1cmwsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7IGdldFdvcmtzcGFjZSwgZ2V0V29ya3NwYWNlUGF0aCB9IGZyb20gJy4uL3V0aWxpdHkvY29uZmlnJztcbmltcG9ydCB7IFNjaGVtYSBhcyBQd2FPcHRpb25zIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5cbmZ1bmN0aW9uIGFkZFNlcnZpY2VXb3JrZXIob3B0aW9uczogUHdhT3B0aW9ucyk6IFJ1bGUge1xuICByZXR1cm4gKGhvc3Q6IFRyZWUsIGNvbnRleHQ6IFNjaGVtYXRpY0NvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmxvZ2dlci5kZWJ1ZygnQWRkaW5nIHNlcnZpY2Ugd29ya2VyLi4uJyk7XG5cbiAgICBjb25zdCBzd09wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gICAgZGVsZXRlIHN3T3B0aW9ucy50aXRsZTtcblxuICAgIHJldHVybiBleHRlcm5hbFNjaGVtYXRpYygnQHNjaGVtYXRpY3MvYW5ndWxhcicsICdzZXJ2aWNlLXdvcmtlcicsIHN3T3B0aW9ucyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgaW5kZW50ID0gJyc7XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHRleHQpIHtcbiAgICBpZiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSB7XG4gICAgICBpbmRlbnQgKz0gY2hhcjtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZGVudDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW5kZXhGaWxlKG9wdGlvbnM6IFB3YU9wdGlvbnMpOiBSdWxlIHtcbiAgcmV0dXJuIChob3N0OiBUcmVlLCBjb250ZXh0OiBTY2hlbWF0aWNDb250ZXh0KSA9PiB7XG4gICAgY29uc3Qgd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKGhvc3QpO1xuICAgIGNvbnN0IHByb2plY3QgPSB3b3Jrc3BhY2UucHJvamVjdHNbb3B0aW9ucy5wcm9qZWN0IGFzIHN0cmluZ107XG4gICAgbGV0IHBhdGg6IHN0cmluZztcbiAgICBjb25zdCBwcm9qZWN0VGFyZ2V0cyA9IHByb2plY3QudGFyZ2V0cyB8fCBwcm9qZWN0LmFyY2hpdGVjdDtcbiAgICBpZiAocHJvamVjdCAmJiBwcm9qZWN0VGFyZ2V0cyAmJiBwcm9qZWN0VGFyZ2V0cy5idWlsZCAmJiBwcm9qZWN0VGFyZ2V0cy5idWlsZC5vcHRpb25zLmluZGV4KSB7XG4gICAgICBwYXRoID0gcHJvamVjdFRhcmdldHMuYnVpbGQub3B0aW9ucy5pbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kIGluZGV4IGZpbGUgZm9yIHRoZSBwcm9qZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGhvc3QucmVhZChwYXRoKTtcbiAgICBpZiAoYnVmZmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgQ291bGQgbm90IHJlYWQgaW5kZXggZmlsZTogJHtwYXRofWApO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICBsZXQgY2xvc2luZ0hlYWRUYWdMaW5lSW5kZXggPSAtMTtcbiAgICBsZXQgY2xvc2luZ0JvZHlUYWdMaW5lSW5kZXggPSAtMTtcbiAgICBsaW5lcy5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNsb3NpbmdIZWFkVGFnTGluZUluZGV4ID09PSAtMSAmJiAvPFxcL2hlYWQ+Ly50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGNsb3NpbmdIZWFkVGFnTGluZUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGNsb3NpbmdCb2R5VGFnTGluZUluZGV4ID09PSAtMSAmJiAvPFxcL2JvZHk+Ly50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGNsb3NpbmdCb2R5VGFnTGluZUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBoZWFkSW5kZW50ID0gZ2V0SW5kZW50KGxpbmVzW2Nsb3NpbmdIZWFkVGFnTGluZUluZGV4XSkgKyAnICAnO1xuICAgIGNvbnN0IGl0ZW1zVG9BZGRUb0hlYWQgPSBbXG4gICAgICAnPGxpbmsgcmVsPVwibWFuaWZlc3RcIiBocmVmPVwibWFuaWZlc3QuanNvblwiPicsXG4gICAgICAnPG1ldGEgbmFtZT1cInRoZW1lLWNvbG9yXCIgY29udGVudD1cIiMxOTc2ZDJcIj4nLFxuICAgIF07XG5cbiAgICBjb25zdCBib2R5SW5kZW50ID0gZ2V0SW5kZW50KGxpbmVzW2Nsb3NpbmdCb2R5VGFnTGluZUluZGV4XSkgKyAnICAnO1xuICAgIGNvbnN0IGl0ZW1zVG9BZGRUb0JvZHkgPSBbXG4gICAgICAnPG5vc2NyaXB0PlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCB0byBjb250aW51ZSB1c2luZyB0aGlzIGFwcGxpY2F0aW9uLjwvbm9zY3JpcHQ+JyxcbiAgICBdO1xuXG4gICAgY29uc3QgdXBkYXRlZEluZGV4ID0gW1xuICAgICAgLi4ubGluZXMuc2xpY2UoMCwgY2xvc2luZ0hlYWRUYWdMaW5lSW5kZXgpLFxuICAgICAgLi4uaXRlbXNUb0FkZFRvSGVhZC5tYXAobGluZSA9PiBoZWFkSW5kZW50ICsgbGluZSksXG4gICAgICAuLi5saW5lcy5zbGljZShjbG9zaW5nSGVhZFRhZ0xpbmVJbmRleCwgY2xvc2luZ0JvZHlUYWdMaW5lSW5kZXgpLFxuICAgICAgLi4uaXRlbXNUb0FkZFRvQm9keS5tYXAobGluZSA9PiBib2R5SW5kZW50ICsgbGluZSksXG4gICAgICAuLi5saW5lcy5zbGljZShjbG9zaW5nQm9keVRhZ0xpbmVJbmRleCksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGhvc3Qub3ZlcndyaXRlKHBhdGgsIHVwZGF0ZWRJbmRleCk7XG5cbiAgICByZXR1cm4gaG9zdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRkTWFuaWZlc3RUb0Fzc2V0c0NvbmZpZyhvcHRpb25zOiBQd2FPcHRpb25zKSB7XG4gIHJldHVybiAoaG9zdDogVHJlZSwgY29udGV4dDogU2NoZW1hdGljQ29udGV4dCkgPT4ge1xuXG4gICAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IGdldFdvcmtzcGFjZVBhdGgoaG9zdCk7XG4gICAgY29uc3Qgd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKGhvc3QpO1xuICAgIGNvbnN0IHByb2plY3QgPSB3b3Jrc3BhY2UucHJvamVjdHNbb3B0aW9ucy5wcm9qZWN0IGFzIHN0cmluZ107XG5cbiAgICBpZiAoIXByb2plY3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvamVjdCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIHdvcmtzcGFjZS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldEVudHJ5ID0gam9pbihub3JtYWxpemUocHJvamVjdC5yb290KSwgJ3NyYycsICdtYW5pZmVzdC5qc29uJyk7XG5cbiAgICBjb25zdCBwcm9qZWN0VGFyZ2V0cyA9IHByb2plY3QudGFyZ2V0cyB8fCBwcm9qZWN0LmFyY2hpdGVjdDtcbiAgICBpZiAoIXByb2plY3RUYXJnZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhcmdldHMgYXJlIG5vdCBkZWZpbmVkIGZvciB0aGlzIHByb2plY3QuYCk7XG4gICAgfVxuXG4gICAgWydidWlsZCcsICd0ZXN0J10uZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG5cbiAgICAgIGNvbnN0IGFwcGx5VG8gPSBwcm9qZWN0VGFyZ2V0c1t0YXJnZXRdLm9wdGlvbnM7XG4gICAgICBjb25zdCBhc3NldHMgPSBhcHBseVRvLmFzc2V0cyB8fCAoYXBwbHlUby5hc3NldHMgPSBbXSk7XG5cbiAgICAgIGFzc2V0cy5wdXNoKGFzc2V0RW50cnkpO1xuXG4gICAgfSk7XG5cbiAgICBob3N0Lm92ZXJ3cml0ZSh3b3Jrc3BhY2VQYXRoLCBKU09OLnN0cmluZ2lmeSh3b3Jrc3BhY2UsIG51bGwsIDIpKTtcblxuICAgIHJldHVybiBob3N0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob3B0aW9uczogUHdhT3B0aW9ucyk6IFJ1bGUge1xuICByZXR1cm4gKGhvc3Q6IFRyZWUsIGNvbnRleHQ6IFNjaGVtYXRpY0NvbnRleHQpID0+IHtcbiAgICBjb25zdCB3b3Jrc3BhY2UgPSBnZXRXb3Jrc3BhY2UoaG9zdCk7XG4gICAgaWYgKCFvcHRpb25zLnByb2plY3QpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKCdPcHRpb24gXCJwcm9qZWN0XCIgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3QgPSB3b3Jrc3BhY2UucHJvamVjdHNbb3B0aW9ucy5wcm9qZWN0XTtcbiAgICBpZiAocHJvamVjdC5wcm9qZWN0VHlwZSAhPT0gJ2FwcGxpY2F0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oYFBXQSByZXF1aXJlcyBhIHByb2plY3QgdHlwZSBvZiBcImFwcGxpY2F0aW9uXCIuYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlUGF0aCA9IGpvaW4ocHJvamVjdC5yb290IGFzIFBhdGgsICdzcmMnKTtcbiAgICBjb25zdCBhc3NldHNQYXRoID0gam9pbihzb3VyY2VQYXRoLCAnYXNzZXRzJyk7XG5cbiAgICBvcHRpb25zLnRpdGxlID0gb3B0aW9ucy50aXRsZSB8fCBvcHRpb25zLnByb2plY3Q7XG5cbiAgICBjb25zdCByb290VGVtcGxhdGVTb3VyY2UgPSBhcHBseSh1cmwoJy4vZmlsZXMvcm9vdCcpLCBbXG4gICAgICB0ZW1wbGF0ZSh7IC4uLm9wdGlvbnMgfSksXG4gICAgICBtb3ZlKHNvdXJjZVBhdGgpLFxuICAgIF0pO1xuICAgIGNvbnN0IGFzc2V0c1RlbXBsYXRlU291cmNlID0gYXBwbHkodXJsKCcuL2ZpbGVzL2Fzc2V0cycpLCBbXG4gICAgICB0ZW1wbGF0ZSh7IC4uLm9wdGlvbnMgfSksXG4gICAgICBtb3ZlKGFzc2V0c1BhdGgpLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGNoYWluKFtcbiAgICAgIGFkZFNlcnZpY2VXb3JrZXIob3B0aW9ucyksXG4gICAgICBtZXJnZVdpdGgocm9vdFRlbXBsYXRlU291cmNlKSxcbiAgICAgIG1lcmdlV2l0aChhc3NldHNUZW1wbGF0ZVNvdXJjZSksXG4gICAgICB1cGRhdGVJbmRleEZpbGUob3B0aW9ucyksXG4gICAgICBhZGRNYW5pZmVzdFRvQXNzZXRzQ29uZmlnKG9wdGlvbnMpLFxuICAgIF0pKGhvc3QsIGNvbnRleHQpO1xuICB9O1xufVxuIl19 | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXIvcHdhL3B3YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7RUFNRTtBQUNGLCtDQU84QjtBQUM5QiwyREFZb0M7QUFDcEMsK0JBQWtDO0FBQ2xDLG1DQUE0QztBQUc1QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUdoRSxTQUFTLFlBQVksQ0FDbkIsSUFBVTtJQUVWLE1BQU0sYUFBYSxHQUFHLENBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFFLENBQUM7SUFDNUQsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLElBQUksWUFBWSxLQUFLLElBQUksRUFBRTtRQUN6QixNQUFNLElBQUksZ0NBQW1CLENBQUMsbUJBQW1CLElBQUksR0FBRyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFeEMsT0FBTztRQUNMLElBQUk7UUFDSixTQUFTLEVBQUUsZ0JBQVMsQ0FDbEIsT0FBTyxFQUNQLG9CQUFhLENBQUMsS0FBSyxDQUM0QjtLQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsT0FBTyxDQUFDLElBQVUsRUFBRSxFQUFFO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxnQ0FBbUIsQ0FBQyw4QkFB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LENBQUM7QUFDSixDQUFDO0FBbEdELDRCQWtHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuKiBAbGljZW5zZVxuKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbipcbiogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuKi9cbmltcG9ydCB7XG4gIEpzb25QYXJzZU1vZGUsXG4gIGV4cGVyaW1lbnRhbCxcbiAgZ2V0U3lzdGVtUGF0aCxcbiAgam9pbixcbiAgbm9ybWFsaXplLFxuICBwYXJzZUpzb24sXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCB7XG4gIFJ1bGUsXG4gIFNjaGVtYXRpY0NvbnRleHQsXG4gIFNjaGVtYXRpY3NFeGNlcHRpb24sXG4gIFRyZWUsXG4gIGFwcGx5LFxuICBjaGFpbixcbiAgZXh0ZXJuYWxTY2hlbWF0aWMsXG4gIG1lcmdlV2l0aCxcbiAgbW92ZSxcbiAgdGVtcGxhdGUsXG4gIHVybCxcbn0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFNjaGVtYSBhcyBQd2FPcHRpb25zIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5jb25zdCBSZXdyaXRpbmdTdHJlYW0gPSByZXF1aXJlKCdwYXJzZTUtaHRtbC1yZXdyaXRpbmctc3RyZWFtJyk7XG5cblxuZnVuY3Rpb24gZ2V0V29ya3NwYWNlKFxuICBob3N0OiBUcmVlLFxuKTogeyBwYXRoOiBzdHJpbmcsIHdvcmtzcGFjZTogZXhwZXJpbWVudGFsLndvcmtzcGFjZS5Xb3Jrc3BhY2VTY2hlbWEgfSB7XG4gIGNvbnN0IHBvc3NpYmxlRmlsZXMgPSBbICcvYW5ndWxhci5qc29uJywgJy8uYW5ndWxhci5qc29uJyBdO1xuICBjb25zdCBwYXRoID0gcG9zc2libGVGaWxlcy5maWx0ZXIocGF0aCA9PiBob3N0LmV4aXN0cyhwYXRoKSlbMF07XG5cbiAgY29uc3QgY29uZmlnQnVmZmVyID0gaG9zdC5yZWFkKHBhdGgpO1xuICBpZiAoY29uZmlnQnVmZmVyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oYENvdWxkIG5vdCBmaW5kICgke3BhdGh9KWApO1xuICB9XG4gIGNvbnN0IGNvbnRlbnQgPSBjb25maWdCdWZmZXIudG9TdHJpbmcoKTtcblxuICByZXR1cm4ge1xuICAgIHBhdGgsXG4gICAgd29ya3NwYWNlOiBwYXJzZUpzb24oXG4gICAgICBjb250ZW50LFxuICAgICAgSnNvblBhcnNlTW9kZS5Mb29zZSxcbiAgICApIGFzIHt9IGFzIGV4cGVyaW1lbnRhbC53b3Jrc3BhY2UuV29ya3NwYWNlU2NoZW1hLFxuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbmRleEZpbGUocGF0aDogc3RyaW5nKTogUnVsZSB7XG4gIHJldHVybiAoaG9zdDogVHJlZSkgPT4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGhvc3QucmVhZChwYXRoKTtcbiAgICBpZiAoYnVmZmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgQ291bGQgbm90IHJlYWQgaW5kZXggZmlsZTogJHtwYXRofWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJld3JpdGVyID0gbmV3IFJld3JpdGluZ1N0cmVhbSgpO1xuXG4gICAgbGV0IG5lZWRzTm9TY3JpcHQgPSB0cnVlO1xuICAgIHJld3JpdGVyLm9uKCdzdGFydFRhZycsIChzdGFydFRhZzogeyB0YWdOYW1lOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKHN0YXJ0VGFnLnRhZ05hbWUgPT09ICdub3NjcmlwdCcpIHtcbiAgICAgICAgbmVlZHNOb1NjcmlwdCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXdyaXRlci5lbWl0U3RhcnRUYWcoc3RhcnRUYWcpO1xuICAgIH0pO1xuXG4gICAgcmV3cml0ZXIub24oJ2VuZFRhZycsIChlbmRUYWc6IHsgdGFnTmFtZTogc3RyaW5nIH0pID0+IHtcbiAgICAgIGlmIChlbmRUYWcudGFnTmFtZSA9PT0gJ2hlYWQnKSB7XG4gICAgICAgIHJld3JpdGVyLmVtaXRSYXcoJyAgPGxpbmsgcmVsPVwibWFuaWZlc3RcIiBocmVmPVwibWFuaWZlc3QuanNvblwiPlxcbicpO1xuICAgICAgICByZXdyaXRlci5lbWl0UmF3KCcgIDxtZXRhIG5hbWU9XCJ0aGVtZS1jb2xvclwiIGNvbnRlbnQ9XCIjMTk3NmQyXCI+XFxuJyk7XG4gICAgICB9IGVsc2UgaWYgKGVuZFRhZy50YWdOYW1lID09PSAnYm9keScgJiYgbmVlZHNOb1NjcmlwdCkge1xuICAgICAgICByZXdyaXRlci5lbWl0UmF3KFxuICAgICAgICAgICcgIDxub3NjcmlwdD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgdG8gY29udGludWUgdXNpbmcgdGhpcyBhcHBsaWNhdGlvbi48L25vc2NyaXB0PlxcbicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJld3JpdGVyLmVtaXRFbmRUYWcoZW5kVGFnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUcmVlPihvYnMgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBuZXcgUmVhZGFibGUoe1xuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICByZWFkKCk6IHZvaWQge1xuICAgICAgICAgIHRoaXMucHVzaChidWZmZXIpO1xuICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjaHVua3M6IEFycmF5PEJ1ZmZlcj4gPSBbXTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBXcml0YWJsZSh7XG4gICAgICAgIHdyaXRlKGNodW5rOiBzdHJpbmcgfCBCdWZmZXIsIGVuY29kaW5nOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICAgIGNodW5rcy5wdXNoKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpIDogY2h1bmspO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbmFsKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICAgIGNvbnN0IGZ1bGwgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgICAgaG9zdC5vdmVyd3JpdGUocGF0aCwgZnVsbC50b1N0cmluZygpKTtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIG9icy5uZXh0KGhvc3QpO1xuICAgICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGlucHV0LnBpcGUocmV3cml0ZXIpLnBpcGUob3V0cHV0KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdGlvbnM6IFB3YU9wdGlvbnMpOiBSdWxlIHtcbiAgcmV0dXJuIChob3N0OiBUcmVlLCBjb250ZXh0OiBTY2hlbWF0aWNDb250ZXh0KSA9PiB7XG4gICAgaWYgKCFvcHRpb25zLnRpdGxlKSB7XG4gICAgICBvcHRpb25zLnRpdGxlID0gb3B0aW9ucy5wcm9qZWN0O1xuICAgIH1cbiAgICBjb25zdCB7cGF0aDogd29ya3NwYWNlUGF0aCwgd29ya3NwYWNlIH0gPSBnZXRXb3Jrc3BhY2UoaG9zdCk7XG5cbiAgICBpZiAoIW9wdGlvbnMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oJ09wdGlvbiBcInByb2plY3RcIiBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9qZWN0ID0gd29ya3NwYWNlLnByb2plY3RzW29wdGlvbnMucHJvamVjdF07XG4gICAgaWYgKCFwcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgUHJvamVjdCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIHdvcmtzcGFjZS5gKTtcbiAgICB9XG5cbiAgICBpZiAocHJvamVjdC5wcm9qZWN0VHlwZSAhPT0gJ2FwcGxpY2F0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oYFBXQSByZXF1aXJlcyBhIHByb2plY3QgdHlwZSBvZiBcImFwcGxpY2F0aW9uXCIuYCk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBhbGwgdGhlIHJlbGV2YW50IHRhcmdldHMgZm9yIHRoZSBwcm9qZWN0XG4gICAgY29uc3QgcHJvamVjdFRhcmdldHMgPSBwcm9qZWN0LnRhcmdldHMgfHwgcHJvamVjdC5hcmNoaXRlY3Q7XG4gICAgaWYgKCFwcm9qZWN0VGFyZ2V0cyB8fCBPYmplY3Qua2V5cyhwcm9qZWN0VGFyZ2V0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihgVGFyZ2V0cyBhcmUgbm90IGRlZmluZWQgZm9yIHRoaXMgcHJvamVjdC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZFRhcmdldHMgPSBbXTtcbiAgICBjb25zdCB0ZXN0VGFyZ2V0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGFyZ2V0TmFtZSBpbiBwcm9qZWN0VGFyZ2V0cykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcHJvamVjdFRhcmdldHNbdGFyZ2V0TmFtZV07XG4gICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldC5idWlsZGVyID09PSAnQGFuZ3VsYXItZGV2a2l0L2J1aWxkLWFuZ3VsYXI6YnJvd3NlcicpIHtcbiAgICAgICAgYnVpbGRUYXJnZXRzLnB1c2godGFyZ2V0KTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmJ1aWxkZXIgPT09ICdAYW5ndWxhci1kZXZraXQvYnVpbGQtYW5ndWxhcjprYXJtYScpIHtcbiAgICAgICAgdGVzdFRhcmdldHMucHVzaCh0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBtYW5pZmVzdCB0byBhc3NldCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgYXNzZXRFbnRyeSA9IGpvaW4obm9ybWFsaXplKHByb2plY3Qucm9vdCksICdzcmMnLCAnbWFuaWZlc3QuanNvbicpO1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIFsuLi5idWlsZFRhcmdldHMsIC4uLnRlc3RUYXJnZXRzXSkge1xuICAgICAgaWYgKHRhcmdldC5vcHRpb25zKSB7XG4gICAgICAgIGlmICh0YXJnZXQub3B0aW9ucy5hc3NldHMpIHtcbiAgICAgICAgICB0YXJnZXQub3B0aW9ucy5hc3NldHMucHVzaChhc3NldEVudHJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQub3B0aW9ucy5hc3NldHMgPSBbIGFzc2V0RW50cnkgXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0Lm9wdGlvbnMgPSB7IGFzc2V0czogWyBhc3NldEVudHJ5IF0gfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaG9zdC5vdmVyd3JpdGUod29ya3NwYWNlUGF0aCwgSlNPTi5zdHJpbmdpZnkod29ya3NwYWNlLCBudWxsLCAyKSk7XG5cbiAgICAvLyBGaW5kIGFsbCBpbmRleC5odG1sIGZpbGVzIGluIGJ1aWxkIHRhcmdldHNcbiAgICBjb25zdCBpbmRleEZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgYnVpbGRUYXJnZXRzKSB7XG4gICAgICBpZiAodGFyZ2V0Lm9wdGlvbnMgJiYgdGFyZ2V0Lm9wdGlvbnMuaW5kZXgpIHtcbiAgICAgICAgaW5kZXhGaWxlcy5hZGQodGFyZ2V0Lm9wdGlvbnMuaW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhcmdldC5jb25maWd1cmF0aW9ucykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgY29uZmlnTmFtZSBpbiB0YXJnZXQuY29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRhcmdldC5jb25maWd1cmF0aW9uc1tjb25maWdOYW1lXTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5pbmRleCkge1xuICAgICAgICAgIGluZGV4RmlsZXMuYWRkKGNvbmZpZ3VyYXRpb24uaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgc291cmNlcyBmb3IgdGhlIGFzc2V0cyBmaWxlcyB0byBhZGQgdG8gdGhlIHByb2plY3RcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gam9pbihub3JtYWxpemUocHJvamVjdC5yb290KSwgJ3NyYycpO1xuICAgIGNvbnN0IGFzc2V0c1BhdGggPSBqb2luKHNvdXJjZVBhdGgsICdhc3NldHMnKTtcbiAgICBjb25zdCByb290VGVtcGxhdGVTb3VyY2UgPSBhcHBseSh1cmwoJy4vZmlsZXMvcm9vdCcpLCBbXG4gICAgICB0ZW1wbGF0ZSh7IC4uLm9wdGlvbnMgfSksXG4gICAgICBtb3ZlKGdldFN5c3RlbVBhdGgoc291cmNlUGF0aCkpLFxuICAgIF0pO1xuICAgIGNvbnN0IGFzc2V0c1RlbXBsYXRlU291cmNlID0gYXBwbHkodXJsKCcuL2ZpbGVzL2Fzc2V0cycpLCBbXG4gICAgICB0ZW1wbGF0ZSh7IC4uLm9wdGlvbnMgfSksXG4gICAgICBtb3ZlKGdldFN5c3RlbVBhdGgoYXNzZXRzUGF0aCkpLFxuICAgIF0pO1xuXG4gICAgLy8gU2V0dXAgc2VydmljZSB3b3JrZXIgc2NoZW1hdGljIG9wdGlvbnNcbiAgICBjb25zdCBzd09wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgICBkZWxldGUgc3dPcHRpb25zLnRpdGxlO1xuXG4gICAgLy8gQ2hhaW4gdGhlIHJ1bGVzIGFuZCByZXR1cm5cbiAgICByZXR1cm4gY2hhaW4oW1xuICAgICAgZXh0ZXJuYWxTY2hlbWF0aWMoJ0BzY2hlbWF0aWNzL2FuZ3VsYXInLCAnc2VydmljZS13b3JrZXInLCBzd09wdGlvbnMpLFxuICAgICAgbWVyZ2VXaXRoKHJvb3RUZW1wbGF0ZVNvdXJjZSksXG4gICAgICBtZXJnZVdpdGgoYXNzZXRzVGVtcGxhdGVTb3VyY2UpLFxuICAgICAgLi4uWy4uLmluZGV4RmlsZXNdLm1hcChwYXRoID0+IHVwZGF0ZUluZGV4RmlsZShwYXRoKSksXG4gICAgXSkoaG9zdCwgY29udGV4dCk7XG4gIH07XG59XG4iXX0= |
| /** | ||
| * @license | ||
| * Copyright Google Inc. All Rights Reserved. | ||
| * | ||
| * Use of this source code is governed by an MIT-style license that can be | ||
| * found in the LICENSE file at https://angular.io/license | ||
| */ | ||
| import { experimental } from '@angular-devkit/core'; | ||
| import { Tree } from '@angular-devkit/schematics'; | ||
| export declare type WorkspaceSchema = experimental.workspace.WorkspaceSchema; | ||
| export declare function getWorkspacePath(host: Tree): string; | ||
| export declare function getWorkspace(host: Tree): WorkspaceSchema; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| /** | ||
| * @license | ||
| * Copyright Google Inc. All Rights Reserved. | ||
| * | ||
| * Use of this source code is governed by an MIT-style license that can be | ||
| * found in the LICENSE file at https://angular.io/license | ||
| */ | ||
| const core_1 = require("@angular-devkit/core"); | ||
| const schematics_1 = require("@angular-devkit/schematics"); | ||
| function getWorkspacePath(host) { | ||
| const possibleFiles = ['/angular.json', '/.angular.json']; | ||
| const path = possibleFiles.filter(path => host.exists(path))[0]; | ||
| return path; | ||
| } | ||
| exports.getWorkspacePath = getWorkspacePath; | ||
| function getWorkspace(host) { | ||
| const path = getWorkspacePath(host); | ||
| const configBuffer = host.read(path); | ||
| if (configBuffer === null) { | ||
| throw new schematics_1.SchematicsException(`Could not find (${path})`); | ||
| } | ||
| const content = configBuffer.toString(); | ||
| return core_1.parseJson(content, core_1.JsonParseMode.Loose); | ||
| } | ||
| exports.getWorkspace = getWorkspace; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9hbmd1bGFyL3B3YS91dGlsaXR5L2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILCtDQUE4RTtBQUM5RSwyREFBdUU7QUFLdkUsMEJBQWlDLElBQVU7SUFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUUsQ0FBQztJQUM1RCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUxELDRDQUtDO0FBRUQsc0JBQTZCLElBQVU7SUFDckMsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUU7UUFDekIsTUFBTSxJQUFJLGdDQUFtQixDQUFDLG1CQUFtQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQzNEO0lBQ0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXhDLE9BQU8sZ0JBQVMsQ0FBQyxPQUFPLEVBQUUsb0JBQWEsQ0FBQyxLQUFLLENBQTBCLENBQUM7QUFDMUUsQ0FBQztBQVRELG9DQVNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgSnNvblBhcnNlTW9kZSwgZXhwZXJpbWVudGFsLCBwYXJzZUpzb24gfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgeyBTY2hlbWF0aWNzRXhjZXB0aW9uLCBUcmVlIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuXG5cbmV4cG9ydCB0eXBlIFdvcmtzcGFjZVNjaGVtYSA9IGV4cGVyaW1lbnRhbC53b3Jrc3BhY2UuV29ya3NwYWNlU2NoZW1hO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUGF0aChob3N0OiBUcmVlKTogc3RyaW5nIHtcbiAgY29uc3QgcG9zc2libGVGaWxlcyA9IFsgJy9hbmd1bGFyLmpzb24nLCAnLy5hbmd1bGFyLmpzb24nIF07XG4gIGNvbnN0IHBhdGggPSBwb3NzaWJsZUZpbGVzLmZpbHRlcihwYXRoID0+IGhvc3QuZXhpc3RzKHBhdGgpKVswXTtcblxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZShob3N0OiBUcmVlKTogV29ya3NwYWNlU2NoZW1hIHtcbiAgY29uc3QgcGF0aCA9IGdldFdvcmtzcGFjZVBhdGgoaG9zdCk7XG4gIGNvbnN0IGNvbmZpZ0J1ZmZlciA9IGhvc3QucmVhZChwYXRoKTtcbiAgaWYgKGNvbmZpZ0J1ZmZlciA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKGBDb3VsZCBub3QgZmluZCAoJHtwYXRofSlgKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gY29uZmlnQnVmZmVyLnRvU3RyaW5nKCk7XG5cbiAgcmV0dXJuIHBhcnNlSnNvbihjb250ZW50LCBKc29uUGFyc2VNb2RlLkxvb3NlKSBhcyB7fSBhcyBXb3Jrc3BhY2VTY2hlbWE7XG59XG4iXX0= |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
43995
1.83%5
25%16
-11.11%286
-1.38%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed