@aws-cdk/toolkit-lib 1.14.2 → 1.15.0
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/build-info.json +2 -2
- package/lib/api/bootstrap/deploy-bootstrap.js +36 -31
- package/lib/api/cloud-assembly/stack-collection.js +5 -2
- package/lib/api/io/private/messages.d.ts +3 -3
- package/lib/api/io/private/messages.js +2 -2
- package/lib/api/io/private/span.d.ts +1 -1
- package/lib/api/io/private/span.js +1 -1
- package/lib/api/refactoring/index.d.ts +0 -1
- package/lib/api/refactoring/index.js +1 -2
- package/lib/api/resource-metadata/resource-metadata.js +2 -2
- package/lib/api/stack-events/stack-activity-monitor.js +2 -2
- package/lib/payloads/types.d.ts +9 -0
- package/lib/payloads/types.js +1 -1
- package/lib/toolkit/toolkit.js +57 -38
- package/lib/util/glob-matcher.d.ts +34 -0
- package/lib/util/glob-matcher.js +76 -0
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.js +2 -1
- package/package.json +5 -3
- package/lib/api/refactoring/exclude.d.ts +0 -35
- package/lib/api/refactoring/exclude.js +0 -98
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for creating a glob matcher
|
|
3
|
+
*/
|
|
4
|
+
export interface GlobMatcherOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Patterns for files to include (glob patterns)
|
|
7
|
+
* @default ['**'] - match all files
|
|
8
|
+
*/
|
|
9
|
+
include?: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Patterns for files to exclude (glob patterns)
|
|
12
|
+
*/
|
|
13
|
+
exclude?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* The root directory for matching. If provided, absolute paths will be
|
|
16
|
+
* converted to relative paths before matching against patterns.
|
|
17
|
+
* This is necessary because chokidar v4 passes absolute paths to the
|
|
18
|
+
* ignored callback even when a cwd is specified.
|
|
19
|
+
*/
|
|
20
|
+
rootDir?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates a function that returns true if a file should be ignored.
|
|
24
|
+
* A file is ignored if:
|
|
25
|
+
* - It matches any exclude pattern, OR
|
|
26
|
+
* - It does NOT match any include pattern
|
|
27
|
+
*
|
|
28
|
+
* This replicates the behavior of chokidar v3's glob pattern support.
|
|
29
|
+
*
|
|
30
|
+
* @param options - The include and exclude patterns
|
|
31
|
+
* @returns A function that takes a file path and returns true if it should be ignored
|
|
32
|
+
*/
|
|
33
|
+
export declare function createIgnoreMatcher(options: GlobMatcherOptions): (filePath: string) => boolean;
|
|
34
|
+
//# sourceMappingURL=glob-matcher.d.ts.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIgnoreMatcher = createIgnoreMatcher;
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
5
|
+
const picomatch = require("picomatch");
|
|
6
|
+
/**
|
|
7
|
+
* Normalizes a pattern to ensure it matches files within directories.
|
|
8
|
+
* If a pattern doesn't contain glob characters, it's treated as a directory
|
|
9
|
+
* and `/**` is appended to match all files within it.
|
|
10
|
+
*
|
|
11
|
+
* @param pattern - The pattern to normalize
|
|
12
|
+
* @returns The normalized pattern
|
|
13
|
+
*/
|
|
14
|
+
function normalizePattern(pattern) {
|
|
15
|
+
// If pattern already contains glob characters, use as-is
|
|
16
|
+
if (pattern.includes('*') || pattern.includes('?') || pattern.includes('[')) {
|
|
17
|
+
return pattern;
|
|
18
|
+
}
|
|
19
|
+
// Otherwise, treat as a directory and match all files within
|
|
20
|
+
// Remove trailing slash if present, then append /**
|
|
21
|
+
const normalized = pattern.replace(/\/+$/, '');
|
|
22
|
+
return `${normalized}/**`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a function that returns true if a file should be ignored.
|
|
26
|
+
* A file is ignored if:
|
|
27
|
+
* - It matches any exclude pattern, OR
|
|
28
|
+
* - It does NOT match any include pattern
|
|
29
|
+
*
|
|
30
|
+
* This replicates the behavior of chokidar v3's glob pattern support.
|
|
31
|
+
*
|
|
32
|
+
* @param options - The include and exclude patterns
|
|
33
|
+
* @returns A function that takes a file path and returns true if it should be ignored
|
|
34
|
+
*/
|
|
35
|
+
function createIgnoreMatcher(options) {
|
|
36
|
+
const includePatterns = options.include && options.include.length > 0
|
|
37
|
+
? options.include.map(normalizePattern)
|
|
38
|
+
: ['**'];
|
|
39
|
+
const excludePatterns = (options.exclude ?? []).map(normalizePattern);
|
|
40
|
+
const rootDir = options.rootDir ? options.rootDir.replace(/\\/g, '/').replace(/\/+$/, '') : undefined;
|
|
41
|
+
// Compile patterns into matchers for better performance
|
|
42
|
+
const picomatchOptions = {
|
|
43
|
+
dot: true, // Match dotfiles when pattern explicitly includes them
|
|
44
|
+
};
|
|
45
|
+
const includeMatcher = picomatch(includePatterns, picomatchOptions);
|
|
46
|
+
const excludeMatcher = excludePatterns.length > 0
|
|
47
|
+
? picomatch(excludePatterns, picomatchOptions)
|
|
48
|
+
: () => false;
|
|
49
|
+
return (filePath) => {
|
|
50
|
+
// Normalize path separators for cross-platform compatibility
|
|
51
|
+
let normalizedPath = filePath.replace(/\\/g, '/');
|
|
52
|
+
// If rootDir is provided and the path appears to be absolute, make it relative
|
|
53
|
+
// This is necessary because chokidar v4 passes absolute paths to the
|
|
54
|
+
// ignored callback even when a cwd is specified
|
|
55
|
+
if (rootDir) {
|
|
56
|
+
if (normalizedPath.startsWith(rootDir + '/')) {
|
|
57
|
+
normalizedPath = normalizedPath.slice(rootDir.length + 1);
|
|
58
|
+
}
|
|
59
|
+
else if (normalizedPath === rootDir) {
|
|
60
|
+
// The root directory itself - don't ignore it
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// A file is ignored if:
|
|
65
|
+
// 1. It matches any exclude pattern, OR
|
|
66
|
+
// 2. It does NOT match any include pattern
|
|
67
|
+
if (excludeMatcher(normalizedPath)) {
|
|
68
|
+
return true; // Ignore: matches exclude
|
|
69
|
+
}
|
|
70
|
+
if (!includeMatcher(normalizedPath)) {
|
|
71
|
+
return true; // Ignore: doesn't match include
|
|
72
|
+
}
|
|
73
|
+
return false; // Don't ignore: matches include and doesn't match exclude
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYi1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2xvYi1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeURBLGtEQThDQztBQXZHRCxpRUFBaUU7QUFDakUsdUNBQXdDO0FBMEJ4Qzs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFlO0lBQ3ZDLHlEQUF5RDtJQUN6RCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELDZEQUE2RDtJQUM3RCxvREFBb0Q7SUFDcEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsT0FBTyxHQUFHLFVBQVUsS0FBSyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBMkI7SUFDN0QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNYLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXRHLHdEQUF3RDtJQUN4RCxNQUFNLGdCQUFnQixHQUErQjtRQUNuRCxHQUFHLEVBQUUsSUFBSSxFQUFFLHVEQUF1RDtLQUNuRSxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQztRQUM5QyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBRWhCLE9BQU8sQ0FBQyxRQUFnQixFQUFXLEVBQUU7UUFDbkMsNkRBQTZEO1FBQzdELElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxELCtFQUErRTtRQUMvRSxxRUFBcUU7UUFDckUsZ0RBQWdEO1FBQ2hELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLGNBQWMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLGNBQWMsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDdEMsOENBQThDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLHdDQUF3QztRQUN4QywyQ0FBMkM7UUFDM0MsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxDQUFDLDBCQUEwQjtRQUN6QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQy9DLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDLDBEQUEwRDtJQUMxRSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmltcG9ydCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIGdsb2IgbWF0Y2hlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JNYXRjaGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXR0ZXJucyBmb3IgZmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucylcbiAgICogQGRlZmF1bHQgWycqKiddIC0gbWF0Y2ggYWxsIGZpbGVzXG4gICAqL1xuICBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdHRlcm5zIGZvciBmaWxlcyB0byBleGNsdWRlIChnbG9iIHBhdHRlcm5zKVxuICAgKi9cbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIG1hdGNoaW5nLiBJZiBwcm92aWRlZCwgYWJzb2x1dGUgcGF0aHMgd2lsbCBiZVxuICAgKiBjb252ZXJ0ZWQgdG8gcmVsYXRpdmUgcGF0aHMgYmVmb3JlIG1hdGNoaW5nIGFnYWluc3QgcGF0dGVybnMuXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgY2hva2lkYXIgdjQgcGFzc2VzIGFic29sdXRlIHBhdGhzIHRvIHRoZVxuICAgKiBpZ25vcmVkIGNhbGxiYWNrIGV2ZW4gd2hlbiBhIGN3ZCBpcyBzcGVjaWZpZWQuXG4gICAqL1xuICByb290RGlyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXR0ZXJuIHRvIGVuc3VyZSBpdCBtYXRjaGVzIGZpbGVzIHdpdGhpbiBkaXJlY3Rvcmllcy5cbiAqIElmIGEgcGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gZ2xvYiBjaGFyYWN0ZXJzLCBpdCdzIHRyZWF0ZWQgYXMgYSBkaXJlY3RvcnlcbiAqIGFuZCBgLyoqYCBpcyBhcHBlbmRlZCB0byBtYXRjaCBhbGwgZmlsZXMgd2l0aGluIGl0LlxuICpcbiAqIEBwYXJhbSBwYXR0ZXJuIC0gVGhlIHBhdHRlcm4gdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXR0ZXJuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gSWYgcGF0dGVybiBhbHJlYWR5IGNvbnRhaW5zIGdsb2IgY2hhcmFjdGVycywgdXNlIGFzLWlzXG4gIGlmIChwYXR0ZXJuLmluY2x1ZGVzKCcqJykgfHwgcGF0dGVybi5pbmNsdWRlcygnPycpIHx8IHBhdHRlcm4uaW5jbHVkZXMoJ1snKSkge1xuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgdHJlYXQgYXMgYSBkaXJlY3RvcnkgYW5kIG1hdGNoIGFsbCBmaWxlcyB3aXRoaW5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIHByZXNlbnQsIHRoZW4gYXBwZW5kIC8qKlxuICBjb25zdCBub3JtYWxpemVkID0gcGF0dGVybi5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgcmV0dXJuIGAke25vcm1hbGl6ZWR9LyoqYDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkLlxuICogQSBmaWxlIGlzIGlnbm9yZWQgaWY6XG4gKiAtIEl0IG1hdGNoZXMgYW55IGV4Y2x1ZGUgcGF0dGVybiwgT1JcbiAqIC0gSXQgZG9lcyBOT1QgbWF0Y2ggYW55IGluY2x1ZGUgcGF0dGVyblxuICpcbiAqIFRoaXMgcmVwbGljYXRlcyB0aGUgYmVoYXZpb3Igb2YgY2hva2lkYXIgdjMncyBnbG9iIHBhdHRlcm4gc3VwcG9ydC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIHBhdHRlcm5zXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBmaWxlIHBhdGggYW5kIHJldHVybnMgdHJ1ZSBpZiBpdCBzaG91bGQgYmUgaWdub3JlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSWdub3JlTWF0Y2hlcihvcHRpb25zOiBHbG9iTWF0Y2hlck9wdGlvbnMpOiAoZmlsZVBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IGluY2x1ZGVQYXR0ZXJucyA9IG9wdGlvbnMuaW5jbHVkZSAmJiBvcHRpb25zLmluY2x1ZGUubGVuZ3RoID4gMFxuICAgID8gb3B0aW9ucy5pbmNsdWRlLm1hcChub3JtYWxpemVQYXR0ZXJuKVxuICAgIDogWycqKiddO1xuICBjb25zdCBleGNsdWRlUGF0dGVybnMgPSAob3B0aW9ucy5leGNsdWRlID8/IFtdKS5tYXAobm9ybWFsaXplUGF0dGVybik7XG4gIGNvbnN0IHJvb3REaXIgPSBvcHRpb25zLnJvb3REaXIgPyBvcHRpb25zLnJvb3REaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpLnJlcGxhY2UoL1xcLyskLywgJycpIDogdW5kZWZpbmVkO1xuXG4gIC8vIENvbXBpbGUgcGF0dGVybnMgaW50byBtYXRjaGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gIGNvbnN0IHBpY29tYXRjaE9wdGlvbnM6IHBpY29tYXRjaC5QaWNvbWF0Y2hPcHRpb25zID0ge1xuICAgIGRvdDogdHJ1ZSwgLy8gTWF0Y2ggZG90ZmlsZXMgd2hlbiBwYXR0ZXJuIGV4cGxpY2l0bHkgaW5jbHVkZXMgdGhlbVxuICB9O1xuXG4gIGNvbnN0IGluY2x1ZGVNYXRjaGVyID0gcGljb21hdGNoKGluY2x1ZGVQYXR0ZXJucywgcGljb21hdGNoT3B0aW9ucyk7XG4gIGNvbnN0IGV4Y2x1ZGVNYXRjaGVyID0gZXhjbHVkZVBhdHRlcm5zLmxlbmd0aCA+IDBcbiAgICA/IHBpY29tYXRjaChleGNsdWRlUGF0dGVybnMsIHBpY29tYXRjaE9wdGlvbnMpXG4gICAgOiAoKSA9PiBmYWxzZTtcblxuICByZXR1cm4gKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAvLyBOb3JtYWxpemUgcGF0aCBzZXBhcmF0b3JzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXRpYmlsaXR5XG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgLy8gSWYgcm9vdERpciBpcyBwcm92aWRlZCBhbmQgdGhlIHBhdGggYXBwZWFycyB0byBiZSBhYnNvbHV0ZSwgbWFrZSBpdCByZWxhdGl2ZVxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgY2hva2lkYXIgdjQgcGFzc2VzIGFic29sdXRlIHBhdGhzIHRvIHRoZVxuICAgIC8vIGlnbm9yZWQgY2FsbGJhY2sgZXZlbiB3aGVuIGEgY3dkIGlzIHNwZWNpZmllZFxuICAgIGlmIChyb290RGlyKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChyb290RGlyICsgJy8nKSkge1xuICAgICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNsaWNlKHJvb3REaXIubGVuZ3RoICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQYXRoID09PSByb290RGlyKSB7XG4gICAgICAgIC8vIFRoZSByb290IGRpcmVjdG9yeSBpdHNlbGYgLSBkb24ndCBpZ25vcmUgaXRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEEgZmlsZSBpcyBpZ25vcmVkIGlmOlxuICAgIC8vIDEuIEl0IG1hdGNoZXMgYW55IGV4Y2x1ZGUgcGF0dGVybiwgT1JcbiAgICAvLyAyLiBJdCBkb2VzIE5PVCBtYXRjaCBhbnkgaW5jbHVkZSBwYXR0ZXJuXG4gICAgaWYgKGV4Y2x1ZGVNYXRjaGVyKG5vcm1hbGl6ZWRQYXRoKSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIElnbm9yZTogbWF0Y2hlcyBleGNsdWRlXG4gICAgfVxuXG4gICAgaWYgKCFpbmNsdWRlTWF0Y2hlcihub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBJZ25vcmU6IGRvZXNuJ3QgbWF0Y2ggaW5jbHVkZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gRG9uJ3QgaWdub3JlOiBtYXRjaGVzIGluY2x1ZGUgYW5kIGRvZXNuJ3QgbWF0Y2ggZXhjbHVkZVxuICB9O1xufVxuIl19
|
package/lib/util/index.d.ts
CHANGED
package/lib/util/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./archive"), exports);
|
|
18
18
|
__exportStar(require("./arrays"), exports);
|
|
19
|
+
__exportStar(require("./glob-matcher"), exports);
|
|
19
20
|
__exportStar(require("./bool"), exports);
|
|
20
21
|
__exportStar(require("./bytes"), exports);
|
|
21
22
|
__exportStar(require("./cloudformation"), exports);
|
|
@@ -33,4 +34,4 @@ __exportStar(require("./type-brands"), exports);
|
|
|
33
34
|
__exportStar(require("./types"), exports);
|
|
34
35
|
__exportStar(require("./version-range"), exports);
|
|
35
36
|
__exportStar(require("./yaml-cfn"), exports);
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDJDQUF5QjtBQUN6QixpREFBK0I7QUFDL0IseUNBQXVCO0FBQ3ZCLDBDQUF3QjtBQUN4QixtREFBaUM7QUFDakMsaURBQStCO0FBQy9CLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IseUNBQXVCO0FBQ3ZCLHdDQUFzQjtBQUN0Qiw0Q0FBMEI7QUFDMUIsNkNBQTJCO0FBQzNCLGlEQUErQjtBQUMvQiw4Q0FBNEI7QUFDNUIsd0RBQXNDO0FBQ3RDLGdEQUE4QjtBQUM5QiwwQ0FBd0I7QUFDeEIsa0RBQWdDO0FBQ2hDLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXJjaGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2FycmF5cyc7XG5leHBvcnQgKiBmcm9tICcuL2dsb2ItbWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL2Jvb2wnO1xuZXhwb3J0ICogZnJvbSAnLi9ieXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGVudC1oYXNoJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtYXQtZXJyb3InO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0JztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL3BhcmFsbGVsJztcbmV4cG9ydCAqIGZyb20gJy4vcGFja2FnZS1pbmZvJztcbmV4cG9ydCAqIGZyb20gJy4vc2VyaWFsaXplJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nLW1hbmlwdWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtYnJhbmRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJzaW9uLXJhbmdlJztcbmV4cG9ydCAqIGZyb20gJy4veWFtbC1jZm4nO1xuIl19
|
package/package.json
CHANGED
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"@types/jest": "^29.5.14",
|
|
48
48
|
"@types/jest-when": "^3.5.5",
|
|
49
49
|
"@types/node": "^16",
|
|
50
|
+
"@types/picomatch": "^4",
|
|
50
51
|
"@types/split2": "^4.2.3",
|
|
51
52
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
52
53
|
"@typescript-eslint/parser": "^8",
|
|
@@ -79,8 +80,8 @@
|
|
|
79
80
|
},
|
|
80
81
|
"dependencies": {
|
|
81
82
|
"@aws-cdk/cdk-assets-lib": "^1",
|
|
82
|
-
"@aws-cdk/cloud-assembly-api": "2.0
|
|
83
|
-
"@aws-cdk/cloud-assembly-schema": ">=
|
|
83
|
+
"@aws-cdk/cloud-assembly-api": "2.1.0",
|
|
84
|
+
"@aws-cdk/cloud-assembly-schema": ">=52.0.0",
|
|
84
85
|
"@aws-cdk/cloudformation-diff": "^2",
|
|
85
86
|
"@aws-cdk/cx-api": "^2",
|
|
86
87
|
"@aws-sdk/client-appsync": "^3",
|
|
@@ -119,6 +120,7 @@
|
|
|
119
120
|
"glob": "^11.1.0",
|
|
120
121
|
"minimatch": "10.0.1",
|
|
121
122
|
"p-limit": "^3",
|
|
123
|
+
"picomatch": "^4",
|
|
122
124
|
"semver": "^7.7.3",
|
|
123
125
|
"split2": "^4.2.0",
|
|
124
126
|
"uuid": "^11.1.0",
|
|
@@ -138,7 +140,7 @@
|
|
|
138
140
|
"publishConfig": {
|
|
139
141
|
"access": "public"
|
|
140
142
|
},
|
|
141
|
-
"version": "1.
|
|
143
|
+
"version": "1.15.0",
|
|
142
144
|
"types": "lib/index.d.ts",
|
|
143
145
|
"exports": {
|
|
144
146
|
".": {
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { AssemblyManifest } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
-
import type { ResourceLocation } from './cloudformation';
|
|
3
|
-
export interface ExcludeList {
|
|
4
|
-
isExcluded(location: ResourceLocation): boolean;
|
|
5
|
-
union(other: ExcludeList): ExcludeList;
|
|
6
|
-
}
|
|
7
|
-
declare abstract class AbstractExcludeList implements ExcludeList {
|
|
8
|
-
abstract isExcluded(location: ResourceLocation): boolean;
|
|
9
|
-
union(other: ExcludeList): ExcludeList;
|
|
10
|
-
}
|
|
11
|
-
export declare class ManifestExcludeList extends AbstractExcludeList {
|
|
12
|
-
private readonly excludedLocations;
|
|
13
|
-
constructor(manifest: AssemblyManifest);
|
|
14
|
-
private getExcludedLocations;
|
|
15
|
-
isExcluded(location: ResourceLocation): boolean;
|
|
16
|
-
}
|
|
17
|
-
export declare class InMemoryExcludeList extends AbstractExcludeList {
|
|
18
|
-
private readonly excludedLocations;
|
|
19
|
-
private readonly excludedPaths;
|
|
20
|
-
constructor(items: string[]);
|
|
21
|
-
isExcluded(location: ResourceLocation): boolean;
|
|
22
|
-
}
|
|
23
|
-
export declare class UnionExcludeList extends AbstractExcludeList {
|
|
24
|
-
private readonly excludeLists;
|
|
25
|
-
constructor(excludeLists: ExcludeList[]);
|
|
26
|
-
isExcluded(location: ResourceLocation): boolean;
|
|
27
|
-
}
|
|
28
|
-
export declare class NeverExclude extends AbstractExcludeList {
|
|
29
|
-
isExcluded(_location: ResourceLocation): boolean;
|
|
30
|
-
}
|
|
31
|
-
export declare class AlwaysExclude extends AbstractExcludeList {
|
|
32
|
-
isExcluded(_location: ResourceLocation): boolean;
|
|
33
|
-
}
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=exclude.d.ts.map
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AlwaysExclude = exports.NeverExclude = exports.UnionExcludeList = exports.InMemoryExcludeList = exports.ManifestExcludeList = void 0;
|
|
4
|
-
const cloud_assembly_schema_1 = require("@aws-cdk/cloud-assembly-schema");
|
|
5
|
-
class AbstractExcludeList {
|
|
6
|
-
union(other) {
|
|
7
|
-
return new UnionExcludeList([this, other]);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
class ManifestExcludeList extends AbstractExcludeList {
|
|
11
|
-
excludedLocations;
|
|
12
|
-
constructor(manifest) {
|
|
13
|
-
super();
|
|
14
|
-
this.excludedLocations = this.getExcludedLocations(manifest);
|
|
15
|
-
}
|
|
16
|
-
getExcludedLocations(asmManifest) {
|
|
17
|
-
// First, we need to filter the artifacts to only include CloudFormation stacks
|
|
18
|
-
const stackManifests = Object.entries(asmManifest.artifacts ?? {}).filter(([_, manifest]) => manifest.type === cloud_assembly_schema_1.ArtifactType.AWS_CLOUDFORMATION_STACK);
|
|
19
|
-
const result = [];
|
|
20
|
-
for (let [stackName, manifest] of stackManifests) {
|
|
21
|
-
const locations = Object.values(manifest.metadata ?? {})
|
|
22
|
-
// Then pick only the resources in each stack marked with DO_NOT_REFACTOR
|
|
23
|
-
.filter((entries) => entries.some((entry) => entry.type === cloud_assembly_schema_1.ArtifactMetadataEntryType.DO_NOT_REFACTOR && entry.data === true))
|
|
24
|
-
// Finally, get the logical ID of each resource
|
|
25
|
-
.map((entries) => {
|
|
26
|
-
const logicalIdEntry = entries.find((entry) => entry.type === cloud_assembly_schema_1.ArtifactMetadataEntryType.LOGICAL_ID);
|
|
27
|
-
const location = {
|
|
28
|
-
StackName: stackName,
|
|
29
|
-
LogicalResourceId: logicalIdEntry.data,
|
|
30
|
-
};
|
|
31
|
-
return location;
|
|
32
|
-
});
|
|
33
|
-
result.push(...locations);
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
isExcluded(location) {
|
|
38
|
-
return this.excludedLocations.some((loc) => loc.StackName === location.stack.stackName && loc.LogicalResourceId === location.logicalResourceId);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
exports.ManifestExcludeList = ManifestExcludeList;
|
|
42
|
-
class InMemoryExcludeList extends AbstractExcludeList {
|
|
43
|
-
excludedLocations;
|
|
44
|
-
excludedPaths;
|
|
45
|
-
constructor(items) {
|
|
46
|
-
super();
|
|
47
|
-
this.excludedLocations = [];
|
|
48
|
-
this.excludedPaths = [];
|
|
49
|
-
if (items.length === 0) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const locationRegex = /^[A-Za-z0-9]+\.[A-Za-z0-9]+$/;
|
|
53
|
-
items.forEach((item) => {
|
|
54
|
-
if (locationRegex.test(item)) {
|
|
55
|
-
const [stackName, logicalId] = item.split('.');
|
|
56
|
-
this.excludedLocations.push({
|
|
57
|
-
StackName: stackName,
|
|
58
|
-
LogicalResourceId: logicalId,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
this.excludedPaths.push(item);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
isExcluded(location) {
|
|
67
|
-
const containsLocation = this.excludedLocations.some((loc) => {
|
|
68
|
-
return loc.StackName === location.stack.stackName && loc.LogicalResourceId === location.logicalResourceId;
|
|
69
|
-
});
|
|
70
|
-
const containsPath = this.excludedPaths.some((path) => location.toPath() === path);
|
|
71
|
-
return containsLocation || containsPath;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
exports.InMemoryExcludeList = InMemoryExcludeList;
|
|
75
|
-
class UnionExcludeList extends AbstractExcludeList {
|
|
76
|
-
excludeLists;
|
|
77
|
-
constructor(excludeLists) {
|
|
78
|
-
super();
|
|
79
|
-
this.excludeLists = excludeLists;
|
|
80
|
-
}
|
|
81
|
-
isExcluded(location) {
|
|
82
|
-
return this.excludeLists.some((excludeList) => excludeList.isExcluded(location));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
exports.UnionExcludeList = UnionExcludeList;
|
|
86
|
-
class NeverExclude extends AbstractExcludeList {
|
|
87
|
-
isExcluded(_location) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
exports.NeverExclude = NeverExclude;
|
|
92
|
-
class AlwaysExclude extends AbstractExcludeList {
|
|
93
|
-
isExcluded(_location) {
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.AlwaysExclude = AlwaysExclude;
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4Y2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMEVBQXlGO0FBVXpGLE1BQWUsbUJBQW1CO0lBR2hDLEtBQUssQ0FBQyxLQUFrQjtRQUN0QixPQUFPLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFFRCxNQUFhLG1CQUFvQixTQUFRLG1CQUFtQjtJQUN6QyxpQkFBaUIsQ0FBd0I7SUFFMUQsWUFBWSxRQUEwQjtRQUNwQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFdBQTZCO1FBQ3hELCtFQUErRTtRQUMvRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9DQUFZLENBQUMsd0JBQXdCLENBQzNFLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUN0RCx5RUFBeUU7aUJBQ3hFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssaURBQXlC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R0FBWixZQUFZLENBQWU7SUFFeEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUEwQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUNGO0FBUkQsNENBUUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxtQkFBbUI7SUFDbkQsVUFBVSxDQUFDLFNBQTJCO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBSkQsb0NBSUM7QUFFRCxNQUFhLGFBQWMsU0FBUSxtQkFBbUI7SUFDcEQsVUFBVSxDQUFDLFNBQTJCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBSkQsc0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFzc2VtYmx5TWFuaWZlc3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZSwgQXJ0aWZhY3RUeXBlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NhdGlvbiBhcyBDZm5SZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NhdGlvbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1ZGVMaXN0IHtcbiAgaXNFeGNsdWRlZChsb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbik6IGJvb2xlYW47XG5cbiAgdW5pb24ob3RoZXI6IEV4Y2x1ZGVMaXN0KTogRXhjbHVkZUxpc3Q7XG59XG5cbmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RXhjbHVkZUxpc3QgaW1wbGVtZW50cyBFeGNsdWRlTGlzdCB7XG4gIGFic3RyYWN0IGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuO1xuXG4gIHVuaW9uKG90aGVyOiBFeGNsdWRlTGlzdCk6IEV4Y2x1ZGVMaXN0IHtcbiAgICByZXR1cm4gbmV3IFVuaW9uRXhjbHVkZUxpc3QoW3RoaXMsIG90aGVyXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hbmlmZXN0RXhjbHVkZUxpc3QgZXh0ZW5kcyBBYnN0cmFjdEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0OiBBc3NlbWJseU1hbmlmZXN0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmV4Y2x1ZGVkTG9jYXRpb25zID0gdGhpcy5nZXRFeGNsdWRlZExvY2F0aW9ucyhtYW5pZmVzdCk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4Y2x1ZGVkTG9jYXRpb25zKGFzbU1hbmlmZXN0OiBBc3NlbWJseU1hbmlmZXN0KTogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdIHtcbiAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBmaWx0ZXIgdGhlIGFydGlmYWN0cyB0byBvbmx5IGluY2x1ZGUgQ2xvdWRGb3JtYXRpb24gc3RhY2tzXG4gICAgY29uc3Qgc3RhY2tNYW5pZmVzdHMgPSBPYmplY3QuZW50cmllcyhhc21NYW5pZmVzdC5hcnRpZmFjdHMgPz8ge30pLmZpbHRlcihcbiAgICAgIChbXywgbWFuaWZlc3RdKSA9PiBtYW5pZmVzdC50eXBlID09PSBBcnRpZmFjdFR5cGUuQVdTX0NMT1VERk9STUFUSU9OX1NUQUNLLFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQ6IENmblJlc291cmNlTG9jYXRpb25bXSA9IFtdO1xuICAgIGZvciAobGV0IFtzdGFja05hbWUsIG1hbmlmZXN0XSBvZiBzdGFja01hbmlmZXN0cykge1xuICAgICAgY29uc3QgbG9jYXRpb25zID0gT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5tZXRhZGF0YSA/PyB7fSlcbiAgICAgICAgLy8gVGhlbiBwaWNrIG9ubHkgdGhlIHJlc291cmNlcyBpbiBlYWNoIHN0YWNrIG1hcmtlZCB3aXRoIERPX05PVF9SRUZBQ1RPUlxuICAgICAgICAuZmlsdGVyKChlbnRyaWVzKSA9PlxuICAgICAgICAgIGVudHJpZXMuc29tZSgoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09IEFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuRE9fTk9UX1JFRkFDVE9SICYmIGVudHJ5LmRhdGEgPT09IHRydWUpLFxuICAgICAgICApXG4gICAgICAgIC8vIEZpbmFsbHksIGdldCB0aGUgbG9naWNhbCBJRCBvZiBlYWNoIHJlc291cmNlXG4gICAgICAgIC5tYXAoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dpY2FsSWRFbnRyeSA9IGVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09IEFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCk7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb246IENmblJlc291cmNlTG9jYXRpb24gPSB7XG4gICAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBsb2dpY2FsSWRFbnRyeSEuZGF0YSEgYXMgc3RyaW5nLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmxvY2F0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMuc29tZShcbiAgICAgIChsb2MpID0+IGxvYy5TdGFja05hbWUgPT09IGxvY2F0aW9uLnN0YWNrLnN0YWNrTmFtZSAmJiBsb2MuTG9naWNhbFJlc291cmNlSWQgPT09IGxvY2F0aW9uLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5RXhjbHVkZUxpc3QgZXh0ZW5kcyBBYnN0cmFjdEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5leGNsdWRlZExvY2F0aW9ucyA9IFtdO1xuICAgIHRoaXMuZXhjbHVkZWRQYXRocyA9IFtdO1xuXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uUmVnZXggPSAvXltBLVphLXowLTldK1xcLltBLVphLXowLTldKyQvO1xuXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobG9jYXRpb25SZWdleC50ZXN0KGl0ZW0pKSB7XG4gICAgICAgIGNvbnN0IFtzdGFja05hbWUsIGxvZ2ljYWxJZF0gPSBpdGVtLnNwbGl0KCcuJyk7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMucHVzaCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkUGF0aHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250YWluc0xvY2F0aW9uID0gdGhpcy5leGNsdWRlZExvY2F0aW9ucy5zb21lKChsb2MpID0+IHtcbiAgICAgIHJldHVybiBsb2MuU3RhY2tOYW1lID09PSBsb2NhdGlvbi5zdGFjay5zdGFja05hbWUgJiYgbG9jLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2NhdGlvbi5sb2dpY2FsUmVzb3VyY2VJZDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbnRhaW5zUGF0aCA9IHRoaXMuZXhjbHVkZWRQYXRocy5zb21lKChwYXRoKSA9PiBsb2NhdGlvbi50b1BhdGgoKSA9PT0gcGF0aCk7XG4gICAgcmV0dXJuIGNvbnRhaW5zTG9jYXRpb24gfHwgY29udGFpbnNQYXRoO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlvbkV4Y2x1ZGVMaXN0IGV4dGVuZHMgQWJzdHJhY3RFeGNsdWRlTGlzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZUxpc3RzOiBFeGNsdWRlTGlzdFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlTGlzdHMuc29tZSgoZXhjbHVkZUxpc3QpID0+IGV4Y2x1ZGVMaXN0LmlzRXhjbHVkZWQobG9jYXRpb24pKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV2ZXJFeGNsdWRlIGV4dGVuZHMgQWJzdHJhY3RFeGNsdWRlTGlzdCB7XG4gIGlzRXhjbHVkZWQoX2xvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBbHdheXNFeGNsdWRlIGV4dGVuZHMgQWJzdHJhY3RFeGNsdWRlTGlzdCB7XG4gIGlzRXhjbHVkZWQoX2xvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
|