oidc-client
Version:
OpenID Connect (OIDC) & OAuth2 client library
148 lines • 18.8 kB
JavaScript
"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 entry_1 = require("./entry");
const virtual_1 = require("./virtual");
class FileSystemDirEntry extends virtual_1.VirtualDirEntry {
constructor(_host, tree, path = core_1.normalize('/')) {
super(tree, path);
this._host = _host;
}
_createDir(name) {
return new FileSystemDirEntry(this._host, this._tree, core_1.join(this._path, name));
}
get parent() {
return this._path == '/' ? null : this._tree.getDir(core_1.dirname(this._path));
}
get subdirs() {
const result = new Set();
try {
this._host.list(this._path)
.filter(name => this._host.isDirectory(core_1.join(this._path, name)))
.forEach(name => result.add(core_1.fragment(name)));
}
catch (e) {
if (e.code != 'ENOENT' && e.code != 'ENOTDIR') {
throw e;
}
}
for (const path of this._tree.staging.keys()) {
if (path.startsWith(this._path) && core_1.dirname(path) != this._path) {
result.add(core_1.basename(path));
}
}
return [...result];
}
get subfiles() {
const result = new Set();
try {
this._host.list(this._path)
.filter(name => !this._host.isDirectory(core_1.join(this._path, name)))
.forEach(name => result.add(core_1.fragment(name)));
}
catch (e) {
if (e.code != 'ENOENT' && e.code != 'ENOTDIR') {
throw e;
}
}
for (const path of this._tree.staging.keys()) {
if (path.startsWith(this._path) && core_1.dirname(path) == this._path) {
result.add(core_1.basename(path));
}
}
return [...result];
}
file(name) {
return this._tree.get(core_1.join(this._path, name));
}
}
exports.FileSystemDirEntry = FileSystemDirEntry;
class FileSystemTree extends virtual_1.VirtualTree {
constructor(host) {
super();
this._initialized = false;
this._host = new core_1.virtualFs.SyncDelegateHost(host);
this._root = new FileSystemDirEntry(this._host, this);
}
get tree() {
const host = this._host;
if (!this._initialized) {
this._initialized = true;
this._recursiveFileList().forEach(path => {
this._tree.set(path, new entry_1.LazyFileEntry(path, () => {
return Buffer.from(host.read(path));
}));
});
}
return this._tree;
}
get(path) {
const normalizedPath = this._normalizePath(path);
let entry = this._cacheMap.get(normalizedPath) || this._tree.get(normalizedPath) || null;
if (entry == null && !this._initialized) {
const systemPath = normalizedPath;
const fileExists = this._host.exists(systemPath) && !this._host.isDirectory(systemPath);
if (fileExists) {
const host = this._host;
entry = new entry_1.LazyFileEntry(normalizedPath, () => Buffer.from(host.read(systemPath)));
this._tree.set(normalizedPath, entry);
}
}
return entry;
}
branch() {
const newTree = new FileSystemTree(this._host.delegate);
this._copyTo(newTree);
return newTree;
}
_copyTo(tree) {
if (tree instanceof FileSystemTree) {
const x = tree;
x._tree = this._tree;
x._initialized = this._initialized;
this._actions.forEach(action => x._actions.push(action));
[...this._cacheMap.entries()].forEach(([path, entry]) => {
x._cacheMap.set(path, entry);
});
}
else {
super._copyTo(tree);
}
}
_recursiveFileList() {
const host = this._host;
const list = [];
function recurse(schematicPath) {
for (const name of host.list(schematicPath)) {
const normalizedPath = core_1.join(schematicPath, name);
if (host.isDirectory(normalizedPath)) {
recurse(normalizedPath);
}
else {
list.push(normalizedPath);
}
}
}
recurse(core_1.normalize('/'));
return list;
}
}
exports.FileSystemTree = FileSystemTree;
class FileSystemCreateTree extends FileSystemTree {
constructor(host) {
super(host);
this._recursiveFileList().forEach(path => {
this.create(path, Buffer.from(this._host.read(path)));
});
this._initialized = true;
}
}
exports.FileSystemCreateTree = FileSystemCreateTree;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXN5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvc2NoZW1hdGljcy9zcmMvdHJlZS9maWxlc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsK0NBUzhCO0FBQzlCLG1DQUF3QztBQUV4Qyx1Q0FBeUQ7QUFHekQsTUFBYSxrQkFBbUIsU0FBUSx5QkFBZTtJQUNyRCxZQUNZLEtBQXFDLEVBQy9DLElBQW9CLEVBQ3BCLE9BQWEsZ0JBQVMsQ0FBQyxHQUFHLENBQUM7UUFFM0IsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUpSLFVBQUssR0FBTCxLQUFLLENBQWdDO0lBS2pELENBQUM7SUFFUyxVQUFVLENBQUMsSUFBa0I7UUFDckMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQXVCLEVBQUUsV0FBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO1FBRXZDLElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFJLENBQUMsSUFBSSxDQUFDLEtB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QUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDM0MsTUFBTSxjQUFjLEdBQUcsV0FBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNwQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQzNCO2FBQ0Y7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLGdCQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXJGRCx3Q0FxRkM7QUFHRCxNQUFhLG9CQUFxQixTQUFRLGNBQWM7SUFDdEQsWUFBWSxJQUFvQjtRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFWixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFURCxvREFTQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7XG4gIFBhdGgsXG4gIFBhdGhGcmFnbWVudCxcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGZyYWdtZW50LFxuICBqb2luLFxuICBub3JtYWxpemUsXG4gIHZpcnR1YWxGcyxcbn0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHsgTGF6eUZpbGVFbnRyeSB9IGZyb20gJy4vZW50cnknO1xuaW1wb3J0IHsgRGlyRW50cnksIEZpbGVFbnRyeSwgVHJlZSB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpcnR1YWxEaXJFbnRyeSwgVmlydHVhbFRyZWUgfSBmcm9tICcuL3ZpcnR1YWwnO1xuXG5cbmV4cG9ydCBjbGFzcyBGaWxlU3lzdGVtRGlyRW50cnkgZXh0ZW5kcyBWaXJ0dWFsRGlyRW50cnkge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgX2hvc3Q6IHZpcnR1YWxGcy5TeW5jRGVsZWdhdGVIb3N0PHt9PixcbiAgICB0cmVlOiBGaWxlU3lzdGVtVHJlZSxcbiAgICBwYXRoOiBQYXRoID0gbm9ybWFsaXplKCcvJyksXG4gICkge1xuICAgIHN1cGVyKHRyZWUsIHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jcmVhdGVEaXIobmFtZTogUGF0aEZyYWdtZW50KTogRGlyRW50cnkge1xuICAgIHJldHVybiBuZXcgRmlsZVN5c3RlbURpckVudHJ5KHRoaXMuX2hvc3QsIHRoaXMuX3RyZWUgYXMgRmlsZVN5c3RlbVRyZWUsIGpvaW4odGhpcy5fcGF0aCwgbmFtZSkpO1xuICB9XG5cbiAgZ2V0IHBhcmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGF0aCA9PSAnLycgPyBudWxsIDogdGhpcy5fdHJlZS5nZXREaXIoZGlybmFtZSh0aGlzLl9wYXRoKSk7XG4gIH1cbiAgZ2V0IHN1YmRpcnMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxQYXRoRnJhZ21lbnQ+KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5faG9zdC5saXN0KHRoaXMuX3BhdGgpXG4gICAgICAgICAgLmZpbHRlcihuYW1lID0+IHRoaXMuX2hvc3QuaXNEaXJlY3Rvcnkoam9pbih0aGlzLl9wYXRoLCBuYW1lKSkpXG4gICAgICAgICAgLmZvckVhY2gobmFtZSA9PiByZXN1bHQuYWRkKGZyYWdtZW50KG5hbWUpKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPSAnRU5PRU5UJyAmJiBlLmNvZGUgIT0gJ0VOT1RESVInKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXRoIG9mIHRoaXMuX3RyZWUuc3RhZ2luZy5rZXlzKCkpIHtcbiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgodGhpcy5fcGF0aCkgJiYgZGlybmFtZShwYXRoKSAhPSB0aGlzLl9wYXRoKSB7XG4gICAgICAgIHJlc3VsdC5hZGQoYmFzZW5hbWUocGF0aCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbLi4ucmVzdWx0XTtcbiAgfVxuICBnZXQgc3ViZmlsZXMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxQYXRoRnJhZ21lbnQ+KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5faG9zdC5saXN0KHRoaXMuX3BhdGgpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiAhdGhpcy5faG9zdC5pc0RpcmVjdG9yeShqb2luKHRoaXMuX3BhdGgsIG5hbWUpKSlcbiAgICAgICAgLmZvckVhY2gobmFtZSA9PiByZXN1bHQuYWRkKGZyYWdtZW50KG5hbWUpKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPSAnRU5PRU5UJyAmJiBlLmNvZGUgIT0gJ0VOT1RESVInKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXRoIG9mIHRoaXMuX3RyZWUuc3RhZ2luZy5rZXlzKCkpIHtcbiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgodGhpcy5fcGF0aCkgJiYgZGlybmFtZShwYXRoKSA9PSB0aGlzLl9wYXRoKSB7XG4gICAgICAgIHJlc3VsdC5hZGQoYmFzZW5hbWUocGF0aCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbLi4ucmVzdWx0XTtcbiAgfVxuXG4gIGZpbGUobmFtZTogUGF0aEZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWUuZ2V0KGpvaW4odGhpcy5fcGF0aCwgbmFtZSkpO1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEZpbGVTeXN0ZW1UcmVlIGV4dGVuZHMgVmlydHVhbFRyZWUge1xuICAvLyBUaGlzIG5lZWRzIHRvIGJlIFN5bmNEZWxlZ2F0ZUhvc3QgYmVjYXVzZSBzY2hlbWF0aWNzIFRyZWVzIGFyZSBzeW5jaHJvbm91cy5cbiAgcHJvdGVjdGVkIF9ob3N0OiB2aXJ0dWFsRnMuU3luY0RlbGVnYXRlSG9zdDx7fT47XG4gIHByb3RlY3RlZCBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihob3N0OiB2aXJ0dWFsRnMuSG9zdCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faG9zdCA9IG5ldyB2aXJ0dWFsRnMuU3luY0RlbGVnYXRlSG9zdDx7fT4oaG9zdCk7XG4gICAgdGhpcy5fcm9vdCA9IG5ldyBGaWxlU3lzdGVtRGlyRW50cnkodGhpcy5faG9zdCwgdGhpcyk7XG4gIH1cblxuICBnZXQgdHJlZSgpOiBNYXA8UGF0aCwgRmlsZUVudHJ5PiB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuX2hvc3Q7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fcmVjdXJzaXZlRmlsZUxpc3QoKS5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgICB0aGlzLl90cmVlLnNldChwYXRoLCBuZXcgTGF6eUZpbGVFbnRyeShwYXRoLCAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhvc3QucmVhZChwYXRoKSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90cmVlO1xuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZyk6IEZpbGVFbnRyeSB8IG51bGwge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gdGhpcy5fbm9ybWFsaXplUGF0aChwYXRoKTtcblxuICAgIGxldCBlbnRyeSA9IHRoaXMuX2NhY2hlTWFwLmdldChub3JtYWxpemVkUGF0aCkgfHwgdGhpcy5fdHJlZS5nZXQobm9ybWFsaXplZFBhdGgpIHx8IG51bGw7XG5cbiAgICBpZiAoZW50cnkgPT0gbnVsbCAmJiAhdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IHN5c3RlbVBhdGggPSBub3JtYWxpemVkUGF0aDtcbiAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSB0aGlzLl9ob3N0LmV4aXN0cyhzeXN0ZW1QYXRoKSAmJiAhdGhpcy5faG9zdC5pc0RpcmVjdG9yeShzeXN0ZW1QYXRoKTtcblxuICAgICAgaWYgKGZpbGVFeGlzdHMpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IHRoaXMuX2hvc3Q7XG4gICAgICAgIGVudHJ5ID0gbmV3IExhenlGaWxlRW50cnkobm9ybWFsaXplZFBhdGgsICgpID0+IEJ1ZmZlci5mcm9tKGhvc3QucmVhZChzeXN0ZW1QYXRoKSkpO1xuICAgICAgICB0aGlzLl90cmVlLnNldChub3JtYWxpemVkUGF0aCwgZW50cnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGJyYW5jaCgpOiBUcmVlIHtcbiAgICBjb25zdCBuZXdUcmVlID0gbmV3IEZpbGVTeXN0ZW1UcmVlKHRoaXMuX2hvc3QuZGVsZWdhdGUpO1xuICAgIHRoaXMuX2NvcHlUbyhuZXdUcmVlKTtcblxuICAgIHJldHVybiBuZXdUcmVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jb3B5VG88VCBleHRlbmRzIFZpcnR1YWxUcmVlPih0cmVlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRyZWUgaW5zdGFuY2VvZiBGaWxlU3lzdGVtVHJlZSkge1xuICAgICAgY29uc3QgeCA9IHRyZWUgYXMgRmlsZVN5c3RlbVRyZWU7XG4gICAgICB4Ll90cmVlID0gdGhpcy5fdHJlZTtcbiAgICAgIHguX2luaXRpYWxpemVkID0gdGhpcy5faW5pdGlhbGl6ZWQ7XG5cbiAgICAgIHRoaXMuX2FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4geC5fYWN0aW9ucy5wdXNoKGFjdGlvbikpO1xuICAgICAgWy4uLnRoaXMuX2NhY2hlTWFwLmVudHJpZXMoKV0uZm9yRWFjaCgoW3BhdGgsIGVudHJ5XSkgPT4ge1xuICAgICAgICB4Ll9jYWNoZU1hcC5zZXQocGF0aCwgZW50cnkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLl9jb3B5VG8odHJlZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9yZWN1cnNpdmVGaWxlTGlzdCgpOiBQYXRoW10ge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLl9ob3N0O1xuICAgIGNvbnN0IGxpc3Q6IFBhdGhbXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShzY2hlbWF0aWNQYXRoOiBQYXRoKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgaG9zdC5saXN0KHNjaGVtYXRpY1BhdGgpKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gam9pbihzY2hlbWF0aWNQYXRoLCBuYW1lKTtcbiAgICAgICAgaWYgKGhvc3QuaXNEaXJlY3Rvcnkobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgcmVjdXJzZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlzdC5wdXNoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlY3Vyc2Uobm9ybWFsaXplKCcvJykpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRmlsZVN5c3RlbUNyZWF0ZVRyZWUgZXh0ZW5kcyBGaWxlU3lzdGVtVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGhvc3Q6IHZpcnR1YWxGcy5Ib3N0KSB7XG4gICAgc3VwZXIoaG9zdCk7XG5cbiAgICB0aGlzLl9yZWN1cnNpdmVGaWxlTGlzdCgpLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICB0aGlzLmNyZWF0ZShwYXRoLCBCdWZmZXIuZnJvbSh0aGlzLl9ob3N0LnJlYWQocGF0aCkpKTtcbiAgICB9KTtcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==