@inizioevoke/evosynth 1.8.1 → 2.0.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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { program } from 'commander';
3
+ import { evosynth } from './evosynth.js';
4
+ program
5
+ .name('evosynth')
6
+ .description('CDK utility')
7
+ .version('2.0.0')
8
+ .option('--profile <profile>', 'The AWS profile');
9
+ // program
10
+ // .command('bootstrap')
11
+ // .action(bootstrap);
12
+ ['deploy', 'destroy', 'diff', 'drift', 'rollback', 'synth']
13
+ .forEach((cmd) => {
14
+ program.command(`${cmd} <env>`).action(action);
15
+ });
16
+ program.parse();
17
+ // async function bootstrap(options: Record<string, string>, command: Command) {
18
+ // await evosynth('bootstrap', )
19
+ // }
20
+ async function action(env, options, command) {
21
+ await evosynth(command.name(), env, program.opts());
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBVyxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTztLQUNKLElBQUksQ0FBQyxVQUFVLENBQUM7S0FDaEIsV0FBVyxDQUFDLGFBQWEsQ0FBQztLQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBR3BELFVBQVU7QUFDViwwQkFBMEI7QUFDMUIsd0JBQXdCO0FBRVQsQ0FBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE9BQU8sQ0FBRTtLQUNuRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsQ0FBQztBQUVMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUVoQixnRkFBZ0Y7QUFDaEYsa0NBQWtDO0FBQ2xDLElBQUk7QUFDSixLQUFLLFVBQVUsTUFBTSxDQUFDLEdBQVcsRUFBRSxPQUErQixFQUFFLE9BQWdCO0lBQ2xGLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQWdCLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQW1CLENBQUMsQ0FBQztBQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kLCBwcm9ncmFtIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGV2b3N5bnRoLCBFdm9zeW50aFByb3BzLCBDZGtDb21tYW5kIH0gZnJvbSAnLi9ldm9zeW50aC5qcyc7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2V2b3N5bnRoJylcbiAgLmRlc2NyaXB0aW9uKCdDREsgdXRpbGl0eScpXG4gIC52ZXJzaW9uKCcyLjAuMCcpXG4gIC5vcHRpb24oJy0tcHJvZmlsZSA8cHJvZmlsZT4nLCAnVGhlIEFXUyBwcm9maWxlJyk7XG5cblxuLy8gcHJvZ3JhbVxuLy8gICAuY29tbWFuZCgnYm9vdHN0cmFwJylcbi8vICAgLmFjdGlvbihib290c3RyYXApO1xuXG4oPENka0NvbW1hbmRbXT5bJ2RlcGxveScsJ2Rlc3Ryb3knLCdkaWZmJywnZHJpZnQnLCdyb2xsYmFjaycsJ3N5bnRoJ10pXG4gIC5mb3JFYWNoKChjbWQpID0+IHtcbiAgICBwcm9ncmFtLmNvbW1hbmQoYCR7Y21kfSA8ZW52PmApLmFjdGlvbihhY3Rpb24pO1xuICB9KTtcblxucHJvZ3JhbS5wYXJzZSgpO1xuXG4vLyBhc3luYyBmdW5jdGlvbiBib290c3RyYXAob3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29tbWFuZDogQ29tbWFuZCkge1xuLy8gICBhd2FpdCBldm9zeW50aCgnYm9vdHN0cmFwJywgKVxuLy8gfVxuYXN5bmMgZnVuY3Rpb24gYWN0aW9uKGVudjogc3RyaW5nLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb21tYW5kOiBDb21tYW5kKSB7XG4gIGF3YWl0IGV2b3N5bnRoKGNvbW1hbmQubmFtZSgpIGFzIENka0NvbW1hbmQsIGVudiwgcHJvZ3JhbS5vcHRzKCkgYXMgRXZvc3ludGhQcm9wcyk7XG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import type { EvosynthTagKey } from '../types.js';
2
+ import { WebStaticServerlessAppConfig } from './web-static-serverless.js';
3
+ export { WebStaticServerlessAppConfig };
4
+ export type EnvironmentType = 'dev' | 'test' | 'stage' | 'uat' | 'preprod' | 'prod' | (string & {});
5
+ export type CdkCommand = 'deploy' | 'destroy' | 'diff' | 'drift' | 'rollback' | 'synth';
6
+ export type EvosynthAppType = 'str8r-clm' | 'web-static-serverless';
7
+ export interface EvosynthAppConfig {
8
+ type: EvosynthAppType;
9
+ envType?: EnvironmentType;
10
+ name: string;
11
+ region: 'us-east-1' | 'us-east-2' | 'us-west-1' | 'us-west-2' | (string & {});
12
+ tags?: Record<EvosynthTagKey, string>;
13
+ }
14
+ export interface EvosynthProps {
15
+ profile?: string;
16
+ }
17
+ export declare function evosynth(cmd: CdkCommand, env: string, props: EvosynthProps): Promise<void>;
@@ -0,0 +1,61 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { readdir } from 'node:fs/promises';
10
+ import { join } from 'node:path';
11
+ import { pathToFileURL } from 'node:url';
12
+ import { runWebStaticServerlessApp } from './web-static-serverless.js';
13
+ export async function evosynth(cmd, env, props) {
14
+ const files = await readdir(process.cwd(), { withFileTypes: true });
15
+ const configFiles = files
16
+ .filter((dirent) => {
17
+ if (dirent.isFile()) {
18
+ return /^\.evosynth(.*?)\.(?:js|mjs|ts|mts)$/i.test(dirent.name);
19
+ }
20
+ else {
21
+ return false;
22
+ }
23
+ })
24
+ .map((dirent) => {
25
+ const parts = dirent.name.split('.').filter(p => p !== '');
26
+ return {
27
+ name: dirent.name,
28
+ env: parts.length > 2 ? parts[1] : undefined,
29
+ dir: dirent.parentPath
30
+ };
31
+ });
32
+ let configIndex = configFiles.findIndex(c => c.env && env && c.env.toLowerCase() === env.toLowerCase());
33
+ if (configIndex === -1) {
34
+ configIndex = configFiles.findIndex(c => c.env === undefined);
35
+ }
36
+ if (configIndex != -1) {
37
+ const configFile = configFiles[configIndex];
38
+ const module = await import(__rewriteRelativeImportExtension(pathToFileURL(join(configFile.dir, configFile.name)).toString()));
39
+ let config = undefined;
40
+ if (configFile.env) {
41
+ config = module.default;
42
+ }
43
+ else {
44
+ config = module[env]?.();
45
+ }
46
+ if (config) {
47
+ if (props.profile) {
48
+ process.env.AWS_PROFILE = props.profile;
49
+ }
50
+ switch (config.type) {
51
+ case 'web-static-serverless':
52
+ await runWebStaticServerlessApp(cmd, config);
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ else {
58
+ console.error('evosynth config not found!');
59
+ }
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvc3ludGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2V2b3N5bnRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV6QyxPQUFPLEVBQUUseUJBQXlCLEVBQWdDLE1BQU0sNEJBQTRCLENBQUM7QUFtQnJHLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLEdBQWUsRUFBRSxHQUFXLEVBQUUsS0FBb0I7SUFDL0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFcEUsTUFBTSxXQUFXLEdBQUcsS0FBSztTQUN0QixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNqQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sdUNBQXVDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNELE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDNUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQ3ZCLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hHLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sa0NBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFDLENBQUM7UUFDN0YsSUFBSSxNQUFNLEdBQWtDLFNBQVMsQ0FBQztRQUN0RCxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDMUMsQ0FBQztZQUNELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixLQUFLLHVCQUF1QjtvQkFDMUIsTUFBTSx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsTUFBc0MsQ0FBQyxDQUFDO29CQUM3RSxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUM7SUFFSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRkaXIgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB0eXBlIHsgRXZvc3ludGhUYWdLZXkgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBydW5XZWJTdGF0aWNTZXJ2ZXJsZXNzQXBwLCBXZWJTdGF0aWNTZXJ2ZXJsZXNzQXBwQ29uZmlnIH0gZnJvbSAnLi93ZWItc3RhdGljLXNlcnZlcmxlc3MuanMnO1xuXG5leHBvcnQgeyBXZWJTdGF0aWNTZXJ2ZXJsZXNzQXBwQ29uZmlnIH07XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VHlwZSA9ICdkZXYnIHwgJ3Rlc3QnIHwgJ3N0YWdlJyB8ICd1YXQnIHwgJ3ByZXByb2QnICB8ICdwcm9kJyB8IChzdHJpbmcgJiB7fSk7XG5leHBvcnQgdHlwZSBDZGtDb21tYW5kID0gJ2RlcGxveScgfCAnZGVzdHJveScgfCAnZGlmZicgfCAnZHJpZnQnIHwgJ3JvbGxiYWNrJyB8ICdzeW50aCc7IC8vICdib290c3RyYXAnIHwgXG5leHBvcnQgdHlwZSBFdm9zeW50aEFwcFR5cGUgPSAnc3RyOHItY2xtJyB8ICd3ZWItc3RhdGljLXNlcnZlcmxlc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2b3N5bnRoQXBwQ29uZmlnIHtcbiAgdHlwZTogRXZvc3ludGhBcHBUeXBlO1xuICBlbnZUeXBlPzogRW52aXJvbm1lbnRUeXBlO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogJ3VzLWVhc3QtMScgfCAndXMtZWFzdC0yJyB8ICd1cy13ZXN0LTEnIHwgJ3VzLXdlc3QtMicgfCAoc3RyaW5nICYge30pO1xuICB0YWdzPzogUmVjb3JkPEV2b3N5bnRoVGFnS2V5LCBzdHJpbmc+LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2b3N5bnRoUHJvcHMge1xuICBwcm9maWxlPzogc3RyaW5nO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2b3N5bnRoKGNtZDogQ2RrQ29tbWFuZCwgZW52OiBzdHJpbmcsIHByb3BzOiBFdm9zeW50aFByb3BzKSB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihwcm9jZXNzLmN3ZCgpLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgY29uc3QgY29uZmlnRmlsZXMgPSBmaWxlc1xuICAgIC5maWx0ZXIoKGRpcmVudCkgPT4ge1xuICAgICAgaWYgKGRpcmVudC5pc0ZpbGUoKSkge1xuICAgICAgICByZXR1cm4gL15cXC5ldm9zeW50aCguKj8pXFwuKD86anN8bWpzfHRzfG10cykkL2kudGVzdChkaXJlbnQubmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSlcbiAgICAubWFwKChkaXJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gZGlyZW50Lm5hbWUuc3BsaXQoJy4nKS5maWx0ZXIocCA9PiBwICE9PSAnJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBkaXJlbnQubmFtZSxcbiAgICAgICAgZW52OiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHNbMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGRpcjogZGlyZW50LnBhcmVudFBhdGhcbiAgICAgIH1cbiAgICB9KTtcbiAgXG4gIGxldCBjb25maWdJbmRleCA9IGNvbmZpZ0ZpbGVzLmZpbmRJbmRleChjID0+IGMuZW52ICYmIGVudiAmJiBjLmVudi50b0xvd2VyQ2FzZSgpID09PSBlbnYudG9Mb3dlckNhc2UoKSk7XG4gIGlmIChjb25maWdJbmRleCA9PT0gLTEpIHtcbiAgICBjb25maWdJbmRleCA9IGNvbmZpZ0ZpbGVzLmZpbmRJbmRleChjID0+IGMuZW52ID09PSB1bmRlZmluZWQpO1xuICB9XG4gIGlmIChjb25maWdJbmRleCAhPSAtMSkge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBjb25maWdGaWxlc1tjb25maWdJbmRleF07XG4gICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KHBhdGhUb0ZpbGVVUkwoam9pbihjb25maWdGaWxlLmRpciwgY29uZmlnRmlsZS5uYW1lKSkudG9TdHJpbmcoKSk7XG4gICAgbGV0IGNvbmZpZzogRXZvc3ludGhBcHBDb25maWcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZ0ZpbGUuZW52KSB7XG4gICAgICBjb25maWcgPSBtb2R1bGUuZGVmYXVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gbW9kdWxlW2Vudl0/LigpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGlmIChwcm9wcy5wcm9maWxlKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkFXU19QUk9GSUxFID0gcHJvcHMucHJvZmlsZTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnd2ViLXN0YXRpYy1zZXJ2ZXJsZXNzJzpcbiAgICAgICAgICBhd2FpdCBydW5XZWJTdGF0aWNTZXJ2ZXJsZXNzQXBwKGNtZCwgY29uZmlnIGFzIFdlYlN0YXRpY1NlcnZlcmxlc3NBcHBDb25maWcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdldm9zeW50aCBjb25maWcgbm90IGZvdW5kIScpO1xuICB9XG59Il19
@@ -0,0 +1,2 @@
1
+ export * from './evosynth.js';
2
+ export * from './web-static-serverless.js';
@@ -0,0 +1,3 @@
1
+ export * from './evosynth.js';
2
+ export * from './web-static-serverless.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V2b3N5bnRoLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2ViLXN0YXRpYy1zZXJ2ZXJsZXNzLmpzJzsiXX0=
@@ -0,0 +1,52 @@
1
+ import { ResponseHeadersPolicyProps } from 'aws-cdk-lib/aws-cloudfront';
2
+ import { IBuildImage } from 'aws-cdk-lib/aws-codebuild';
3
+ import { CloudFrontFunctionRedirects } from '../constructs/cloudfront.js';
4
+ import { CodeBuildImageId, EcrBuildImage, CodeBuildSsmParameter, CodeBuildComputeType, CodeBuildNodeJs, EnvironmentVariables } from '../constructs/codebuild.ts';
5
+ import type { EvosynthAppConfig, CdkCommand, EvosynthAppType } from './evosynth.ts';
6
+ import type { CloudFrontFunctionEventType, CspHeaders, UUID, AWSManagedResponseHeadersPolicy } from '../types.d.ts';
7
+ export interface WebStaticServerlessAppConfig extends EvosynthAppConfig {
8
+ type: Extract<EvosynthAppType, 'web-static-serverless'>;
9
+ description?: string;
10
+ dns: {
11
+ record: string;
12
+ zone: string;
13
+ };
14
+ security?: {
15
+ basicAuth?: string;
16
+ basicAuthParam?: string;
17
+ webAcl?: string | false;
18
+ webAclParam?: string;
19
+ };
20
+ cloudfront?: {
21
+ responseHeaders?: AWSManagedResponseHeadersPolicy | UUID | false;
22
+ responseHeadersParam?: string;
23
+ responseHeadersPolicy?: ResponseHeadersPolicyProps;
24
+ cspHeaders?: CspHeaders;
25
+ redirects?: CloudFrontFunctionRedirects;
26
+ function?: string | {
27
+ code: string;
28
+ eventType: CloudFrontFunctionEventType[];
29
+ };
30
+ };
31
+ pipeline?: {
32
+ source: {
33
+ codestarConnection?: string;
34
+ codestarConnectionParam?: string;
35
+ owner: 'evokegroup' | 'meltmedia' | (string & {});
36
+ repo: string;
37
+ branch: string;
38
+ fullClone?: boolean;
39
+ };
40
+ build?: {
41
+ buildSpec?: string | object;
42
+ buildImage?: IBuildImage;
43
+ buildImageEcr?: EcrBuildImage;
44
+ buildImageNodeJS?: CodeBuildNodeJs;
45
+ buildImageId?: CodeBuildImageId;
46
+ computeType?: CodeBuildComputeType;
47
+ environmentVariables?: EnvironmentVariables;
48
+ ssmParameters?: CodeBuildSsmParameter[];
49
+ };
50
+ };
51
+ }
52
+ export declare function runWebStaticServerlessApp(cmd: CdkCommand, config: WebStaticServerlessAppConfig): Promise<void>;
@@ -0,0 +1,73 @@
1
+ import { join } from 'node:path';
2
+ import * as core from 'aws-cdk-lib/core';
3
+ import { Toolkit } from '@aws-cdk/toolkit-lib';
4
+ import { getEnv } from '../index.js';
5
+ import { WebStaticServerlessStage } from '../stages/web-static-serverless-stage.js';
6
+ const cdk = new Toolkit();
7
+ export async function runWebStaticServerlessApp(cmd, config) {
8
+ const cx = await cdk.fromAssemblyBuilder(async (props) => {
9
+ const app = new core.App({
10
+ outdir: join(process.cwd(), '.evosynth'),
11
+ });
12
+ const stageProps = {
13
+ env: getEnv(config.region),
14
+ stageName: `${config.name}${config.envType ? `-${config.envType}` : ''}`,
15
+ tags: config.tags,
16
+ envType: config.envType === 'prod' ? 'PROD' : 'NOT_PROD',
17
+ description: `${config.description}${config.envType ? ` ${config.envType.toUpperCase()}` : ''}`,
18
+ hostedZone: config.dns.zone,
19
+ domainName: `${config.dns.record}.${config.dns.zone}`,
20
+ basicAuth: config.security?.basicAuthParam ? { path: config.security?.basicAuthParam } : config.security?.basicAuth,
21
+ webAcl: config.security?.webAclParam ? { path: config.security.webAclParam } : config.security?.webAcl,
22
+ redirects: config.cloudfront?.redirects,
23
+ responseCspHeaders: config.cloudfront?.cspHeaders,
24
+ responseHeadersPolicy: config.cloudfront?.responseHeadersParam ? { path: config.cloudfront.responseHeadersParam } : config.cloudfront?.responseHeaders,
25
+ responseHeadersPolicyProps: config.cloudfront?.responseHeadersPolicy,
26
+ cloudfrontFunction: config.cloudfront?.function && typeof config.cloudfront.function == 'string' ? {
27
+ code: config.cloudfront.function,
28
+ eventType: ['VIEWER_REQUEST', 'VIEWER_RESPONSE'],
29
+ } : config.cloudfront?.function
30
+ };
31
+ if (config.pipeline) {
32
+ stageProps.pipeline = {
33
+ sourceStage: {
34
+ codestarConnection: config.pipeline.source.codestarConnectionParam ? { path: config.pipeline.source.codestarConnectionParam } : config.pipeline.source.codestarConnection,
35
+ repoOwner: config.pipeline.source.owner,
36
+ repo: config.pipeline.source.repo,
37
+ branch: config.pipeline.source.branch,
38
+ fullClone: config.pipeline.source.fullClone
39
+ }
40
+ };
41
+ if (config.pipeline.build) {
42
+ stageProps.pipeline.buildStage = {
43
+ environmentVariables: config.pipeline.build.environmentVariables
44
+ };
45
+ stageProps.pipeline.codeBuildProject = {
46
+ buildImage: config.pipeline.build.buildImage,
47
+ buildImageId: config.pipeline.build.buildImageId,
48
+ buildImageNodeJS: config.pipeline.build.buildImageNodeJS,
49
+ buildSpec: config.pipeline.build.buildSpec,
50
+ computeType: config.pipeline.build.computeType,
51
+ ecrBuildImage: config.pipeline.build.buildImageEcr,
52
+ ssmParameters: config.pipeline.build.ssmParameters
53
+ };
54
+ }
55
+ }
56
+ new WebStaticServerlessStage(app, config.type, stageProps);
57
+ return app.synth();
58
+ });
59
+ switch (cmd) {
60
+ // case 'bootstrap':
61
+ // await cdk.bootstrap(BootstrapEnvironments.fromList([`aws://${process.env.CDK_DEFAULT_ACCOUNT}/${config.region}`]));
62
+ // break;
63
+ case 'deploy':
64
+ case 'destroy':
65
+ case 'diff':
66
+ case 'drift':
67
+ case 'rollback':
68
+ case 'synth':
69
+ await cdk[cmd](cx);
70
+ break;
71
+ }
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXN0YXRpYy1zZXJ2ZXJsZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS93ZWItc3RhdGljLXNlcnZlcmxlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBK0MsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPNUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsd0JBQXdCLEVBQWlDLE1BQU0sMENBQTBDLENBQUM7QUFFbkgsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQWdEMUIsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxHQUFlLEVBQUUsTUFBb0M7SUFDbkcsTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQW9EO1lBQ2xFLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUMxQixTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxLQUFLLE1BQU0s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LFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVTtvQkFDNUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVk7b0JBQ2hELGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVM7b0JBQzFDLFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXO29CQUM5QyxhQUFhLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYTtvQkFDbEQsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWE7aUJBQ25ELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksd0JBQXdCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFM0QsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ1osb0JBQW9CO1FBQ3BCLHdIQUF3SDtRQUN4SCxXQUFXO1FBQ1gsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLE9BQU87WUFDVixNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQixNQUFNO0lBQ1YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBCb290c3RyYXBFbnZpcm9ubWVudHMsIElDbG91ZEFzc2VtYmx5U291cmNlLCBUb29sa2l0IH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBJQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RzIH0gZnJvbSAnLi4vY29uc3RydWN0cy9jbG91ZGZyb250LmpzJztcbmltcG9ydCB7IENvZGVCdWlsZEltYWdlSWQsIEVjckJ1aWxkSW1hZ2UsIENvZGVCdWlsZFNzbVBhcmFtZXRlciwgQ29kZUJ1aWxkQ29tcHV0ZVR5cGUsIENvZGVCdWlsZE5vZGVKcywgRW52aXJvbm1lbnRWYXJpYWJsZXMgfSBmcm9tICcuLi9jb25zdHJ1Y3RzL2NvZGVidWlsZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV2b3N5bnRoQXBwQ29uZmlnLCBDZGtDb21tYW5kLCBFdm9zeW50aEFwcFR5cGUgfSBmcm9tICcuL2V2b3N5bnRoLnRzJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGcm9udEZ1bmN0aW9uRXZlbnRUeXBlLCBDc3BIZWFkZXJzLCBVVUlELCBBV1NNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5IH0gZnJvbSAnLi4vdHlwZXMuZC50cyc7XG5pbXBvcnQgeyBnZXRFbnYgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5pbXBvcnQgeyBXZWJTdGF0aWNTZXJ2ZXJsZXNzU3RhZ2UsIFdlYlN0YXRpY1NlcnZlcmxlc3NTdGFnZVByb3BzIH0gZnJvbSAnLi4vc3RhZ2VzL3dlYi1zdGF0aWMtc2VydmVybGVzcy1zdGFnZS5qcyc7XG5cbmNvbnN0IGNkayA9IG5ldyBUb29sa2l0KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU3RhdGljU2VydmVybGVzc0FwcENvbmZpZyBleHRlbmRzIEV2b3N5bnRoQXBwQ29uZmlnIHtcbiAgdHlwZTogRXh0cmFjdDxFdm9zeW50aEFwcFR5cGUsICd3ZWItc3RhdGljLXNlcnZlcmxlc3MnPixcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRuczoge1xuICAgIHJlY29yZDogc3RyaW5nO1xuICAgIHpvbmU6IHN0cmluZztcbiAgfSxcbiAgc2VjdXJpdHk/OiB7XG4gICAgYmFzaWNBdXRoPzogc3RyaW5nO1xuICAgIGJhc2ljQXV0aFBhcmFtPzogc3RyaW5nO1xuICAgIHdlYkFjbD86IHN0cmluZyB8IGZhbHNlO1xuICAgIHdlYkFjbFBhcmFtPzogc3RyaW5nO1xuICB9LFxuICBjbG91ZGZyb250Pzoge1xuICAgIHJlc3BvbnNlSGVhZGVycz86IEFXU01hbmFnZWRSZXNwb25zZUhlYWRlcnNQb2xpY3kgfCBVVUlEIHwgZmFsc2U7XG4gICAgcmVzcG9uc2VIZWFkZXJzUGFyYW0/OiBzdHJpbmc7XG4gICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5PzogUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM7XG4gICAgY3NwSGVhZGVycz86IENzcEhlYWRlcnM7XG4gICAgcmVkaXJlY3RzPzogQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RzO1xuICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwge1xuICAgICAgY29kZTogc3RyaW5nO1xuICAgICAgZXZlbnRUeXBlOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXTtcbiAgICB9XG4gIH0sXG4gIHBpcGVsaW5lPzoge1xuICAgIHNvdXJjZToge1xuICAgICAgY29kZXN0YXJDb25uZWN0aW9uPzogc3RyaW5nO1xuICAgICAgY29kZXN0YXJDb25uZWN0aW9uUGFyYW0/OiBzdHJpbmc7XG4gICAgICBvd25lcjogJ2V2b2tlZ3JvdXAnIHwgJ21lbHRtZWRpYScgfCAoc3RyaW5nICYge30pO1xuICAgICAgcmVwbzogc3RyaW5nO1xuICAgICAgYnJhbmNoOiBzdHJpbmc7XG4gICAgICBmdWxsQ2xvbmU/OiBib29sZWFuO1xuICAgIH0sXG4gICAgYnVpbGQ/OiB7XG4gICAgICBidWlsZFNwZWM/OiBzdHJpbmcgfCBvYmplY3Q7XG4gICAgICBidWlsZEltYWdlPzogSUJ1aWxkSW1hZ2U7XG4gICAgICBidWlsZEltYWdlRWNyPzogRWNyQnVpbGRJbWFnZTtcbiAgICAgIGJ1aWxkSW1hZ2VOb2RlSlM/OiBDb2RlQnVpbGROb2RlSnM7XG4gICAgICBidWlsZEltYWdlSWQ/OiBDb2RlQnVpbGRJbWFnZUlkO1xuICAgICAgY29tcHV0ZVR5cGU/OiBDb2RlQnVpbGRDb21wdXRlVHlwZTtcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzPzogRW52aXJvbm1lbnRWYXJpYWJsZXM7XG4gICAgICBzc21QYXJhbWV0ZXJzPzogQ29kZUJ1aWxkU3NtUGFyYW1ldGVyW11cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldlYlN0YXRpY1NlcnZlcmxlc3NBcHAoY21kOiBDZGtDb21tYW5kLCBjb25maWc6IFdlYlN0YXRpY1NlcnZlcmxlc3NBcHBDb25maWcpIHtcbiAgY29uc3QgY3ggPSBhd2FpdCBjZGsuZnJvbUFzc2VtYmx5QnVpbGRlcihhc3luYyAocHJvcHMpID0+IHtcbiAgICBjb25zdCBhcHAgPSBuZXcgY29yZS5BcHAoe1xuICAgICAgb3V0ZGlyOiBqb2luKHByb2Nlc3MuY3dkKCksICcuZXZvc3ludGgnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YWdlUHJvcHM6IFdlYlN0YXRpY1NlcnZlcmxlc3NTdGFnZVByb3BzICYgY29yZS5TdGFnZVByb3BzID0ge1xuICAgICAgZW52OiBnZXRFbnYoY29uZmlnLnJlZ2lvbiksXG4gICAgICBzdGFnZU5hbWU6IGAke2NvbmZpZy5uYW1lfSR7Y29uZmlnLmVudlR5cGUgPyBgLSR7Y29uZmlnLmVudlR5cGV9YCA6ICcnfWAsXG4gICAgICB0YWdzOiBjb25maWcudGFncyxcbiAgICAgIGVudlR5cGU6IGNvbmZpZy5lbnZUeXBlID09PSAncHJvZCcgPyAnUFJPRCcgOiAnTk9UX1BST0QnLFxuICAgICAgZGVzY3JpcHRpb246IGAke2NvbmZpZy5kZXNjcmlwdGlvbn0ke2NvbmZpZy5lbnZUeXBlID8gYCAke2NvbmZpZy5lbnZUeXBlLnRvVXBwZXJDYXNlKCl9YCA6ICcnfWAsXG4gICAgICBob3N0ZWRab25lOiBjb25maWcuZG5zLnpvbmUsXG4gICAgICBkb21haW5OYW1lOiBgJHtjb25maWcuZG5zLnJlY29yZH0uJHtjb25maWcuZG5zLnpvbmV9YCxcbiAgICAgIGJhc2ljQXV0aDogY29uZmlnLnNlY3VyaXR5Py5iYXNpY0F1dGhQYXJhbSA/IHsgcGF0aDogY29uZmlnLnNlY3VyaXR5Py5iYXNpY0F1dGhQYXJhbSB9IDogY29uZmlnLnNlY3VyaXR5Py5iYXNpY0F1dGgsXG4gICAgICB3ZWJBY2w6IGNvbmZpZy5zZWN1cml0eT8ud2ViQWNsUGFyYW0gPyB7IHBhdGg6IGNvbmZpZy5zZWN1cml0eS53ZWJBY2xQYXJhbSB9IDogY29uZmlnLnNlY3VyaXR5Py53ZWJBY2wsXG4gICAgICByZWRpcmVjdHM6IGNvbmZpZy5jbG91ZGZyb250Py5yZWRpcmVjdHMsXG4gICAgICByZXNwb25zZUNzcEhlYWRlcnM6IGNvbmZpZy5jbG91ZGZyb250Py5jc3BIZWFkZXJzLFxuICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5OiBjb25maWcuY2xvdWRmcm9udD8ucmVzcG9uc2VIZWFkZXJzUGFyYW0gPyB7IHBhdGg6IGNvbmZpZy5jbG91ZGZyb250LnJlc3BvbnNlSGVhZGVyc1BhcmFtIH0gOiBjb25maWcuY2xvdWRmcm9udD8ucmVzcG9uc2VIZWFkZXJzLFxuICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM6IGNvbmZpZy5jbG91ZGZyb250Py5yZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICBjbG91ZGZyb250RnVuY3Rpb246IGNvbmZpZy5jbG91ZGZyb250Py5mdW5jdGlvbiAmJiB0eXBlb2YgY29uZmlnLmNsb3VkZnJvbnQuZnVuY3Rpb24gPT0gJ3N0cmluZycgPyB7XG4gICAgICAgIGNvZGU6IGNvbmZpZy5jbG91ZGZyb250LmZ1bmN0aW9uLFxuICAgICAgICBldmVudFR5cGU6IFsnVklFV0VSX1JFUVVFU1QnLCdWSUVXRVJfUkVTUE9OU0UnXSxcbiAgICAgIH0gOiBjb25maWcuY2xvdWRmcm9udD8uZnVuY3Rpb24gYXMgYW55XG4gICAgfVxuICAgIGlmIChjb25maWcucGlwZWxpbmUpIHtcbiAgICAgIHN0YWdlUHJvcHMucGlwZWxpbmUgPSB7XG4gICAgICAgIHNvdXJjZVN0YWdlOiB7XG4gICAgICAgICAgY29kZXN0YXJDb25uZWN0aW9uOiBjb25maWcucGlwZWxpbmUuc291cmNlLmNvZGVzdGFyQ29ubmVjdGlvblBhcmFtID8geyBwYXRoOiBjb25maWcucGlwZWxpbmUuc291cmNlLmNvZGVzdGFyQ29ubmVjdGlvblBhcmFtIH0gOiBjb25maWcucGlwZWxpbmUuc291cmNlLmNvZGVzdGFyQ29ubmVjdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgcmVwb093bmVyOiBjb25maWcucGlwZWxpbmUuc291cmNlLm93bmVyLFxuICAgICAgICAgIHJlcG86IGNvbmZpZy5waXBlbGluZS5zb3VyY2UucmVwbyxcbiAgICAgICAgICBicmFuY2g6IGNvbmZpZy5waXBlbGluZS5zb3VyY2UuYnJhbmNoLFxuICAgICAgICAgIGZ1bGxDbG9uZTogY29uZmlnLnBpcGVsaW5lLnNvdXJjZS5mdWxsQ2xvbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5waXBlbGluZS5idWlsZCkge1xuICAgICAgICBzdGFnZVByb3BzLnBpcGVsaW5lLmJ1aWxkU3RhZ2UgPSB7XG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IGNvbmZpZy5waXBlbGluZS5idWlsZC5lbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICAgICB9O1xuICAgICAgICBzdGFnZVByb3BzLnBpcGVsaW5lLmNvZGVCdWlsZFByb2plY3QgPSB7XG4gICAgICAgICAgYnVpbGRJbWFnZTogY29uZmlnLnBpcGVsaW5lLmJ1aWxkLmJ1aWxkSW1hZ2UsXG4gICAgICAgICAgYnVpbGRJbWFnZUlkOiBjb25maWcucGlwZWxpbmUuYnVpbGQuYnVpbGRJbWFnZUlkLFxuICAgICAgICAgIGJ1aWxkSW1hZ2VOb2RlSlM6IGNvbmZpZy5waXBlbGluZS5idWlsZC5idWlsZEltYWdlTm9kZUpTLFxuICAgICAgICAgIGJ1aWxkU3BlYzogY29uZmlnLnBpcGVsaW5lLmJ1aWxkLmJ1aWxkU3BlYyxcbiAgICAgICAgICBjb21wdXRlVHlwZTogY29uZmlnLnBpcGVsaW5lLmJ1aWxkLmNvbXB1dGVUeXBlLFxuICAgICAgICAgIGVjckJ1aWxkSW1hZ2U6IGNvbmZpZy5waXBlbGluZS5idWlsZC5idWlsZEltYWdlRWNyLFxuICAgICAgICAgIHNzbVBhcmFtZXRlcnM6IGNvbmZpZy5waXBlbGluZS5idWlsZC5zc21QYXJhbWV0ZXJzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3IFdlYlN0YXRpY1NlcnZlcmxlc3NTdGFnZShhcHAsIGNvbmZpZy50eXBlLCBzdGFnZVByb3BzKTtcblxuICAgIHJldHVybiBhcHAuc3ludGgoKTtcbiAgfSk7XG5cbiAgc3dpdGNoIChjbWQpIHtcbiAgICAvLyBjYXNlICdib290c3RyYXAnOlxuICAgIC8vICAgYXdhaXQgY2RrLmJvb3RzdHJhcChCb290c3RyYXBFbnZpcm9ubWVudHMuZnJvbUxpc3QoW2Bhd3M6Ly8ke3Byb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlR9LyR7Y29uZmlnLnJlZ2lvbn1gXSkpO1xuICAgIC8vICAgYnJlYWs7XG4gICAgY2FzZSAnZGVwbG95JzpcbiAgICBjYXNlICdkZXN0cm95JzpcbiAgICBjYXNlICdkaWZmJzpcbiAgICBjYXNlICdkcmlmdCc6XG4gICAgY2FzZSAncm9sbGJhY2snOlxuICAgIGNhc2UgJ3N5bnRoJzpcbiAgICAgIGF3YWl0IGNka1tjbWRdKGN4KTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG4iXX0=
@@ -6,7 +6,14 @@ export type EnvironmentVariables = Record<string, {
6
6
  value: any;
7
7
  type?: BuildEnvironmentVariableType;
8
8
  }>;
9
- interface SsmParameter extends SsmStringParameter {
9
+ export type CodeBuildImageId = 'aws/codebuild/amazonlinux2-aarch64-standard:1.0' | 'aws/codebuild/amazonlinux2-x86_64-standard:2.0' | 'aws/codebuild/amazonlinux2-x86_64-standard:3.0' | 'aws/codebuild/amazonlinux-x86_64-standard:4.0' | 'aws/codebuild/amazonlinux-x86_64-standard:5.0' | 'aws/codebuild/amazonlinux-x86_64-standard:6.0' | 'aws/codebuild/amazonlinux-x86_64-standard:corretto8' | 'aws/codebuild/amazonlinux-x86_64-standard:corretto11' | 'aws/codebuild/amazonlinux-aarch64-standard:2.0' | 'aws/codebuild/amazonlinux-aarch64-standard:3.0' | 'aws/codebuild/standard:3.0' | 'aws/codebuild/standard:4.0' | 'aws/codebuild/standard:5.0' | // nodejs 12, 14
10
+ 'aws/codebuild/standard:6.0' | // nodejs 16
11
+ 'aws/codebuild/standard:7.0' | // nodejs 18, 20, 22, 24
12
+ 'aws/codebuild/standard:8.0' | // nodejs 22, 24
13
+ 'aws/codebuild/windows-base:2019-1.0' | 'aws/codebuild/windows-base:2019-2.0' | 'aws/codebuild/windows-base:2019-3.0' | 'aws/codebuild/windows-base:2022-1.0' | (string & {});
14
+ export type CodeBuildComputeType = 'SMALL' | 'MEDIUM' | 'LARGE' | 'X_LARGE' | 'X2_LARGE' | (string & {});
15
+ export type CodeBuildNodeJs = 12 | 14 | 16 | 18 | 20 | 22 | 24 | (number & {});
16
+ export interface CodeBuildSsmParameter extends SsmStringParameter {
10
17
  encrypted?: boolean;
11
18
  }
12
19
  export interface EcrBuildImage {
@@ -16,16 +23,17 @@ export interface EcrBuildImage {
16
23
  export interface CodeBuildPipelineProjectProps extends ResourceProps {
17
24
  projectName?: string;
18
25
  buildSpec?: string | object;
19
- buildImage?: ('STANDARD_5_0' | 'STANDARD_6_0' | 'STANDARD_7_0') | IBuildImage;
20
26
  ecrBuildImage?: EcrBuildImage;
21
- computeType?: ('SMALL' | 'MEDIUM' | 'LARGE' | 'X_LARGE' | 'X2_LARGE') | string;
27
+ buildImage?: IBuildImage;
28
+ buildImageNodeJS?: CodeBuildNodeJs;
29
+ buildImageId?: CodeBuildImageId;
30
+ computeType?: CodeBuildComputeType;
22
31
  environmentVariables?: EnvironmentVariables;
23
32
  cloudFrontDistributionArn?: string;
24
33
  s3BucketName?: string;
25
- ssmParameters?: SsmParameter[];
34
+ ssmParameters?: CodeBuildSsmParameter[];
26
35
  }
27
36
  export declare class CodeBuildPipelineProject extends Construct {
28
37
  readonly project: PipelineProject;
29
38
  constructor(scope: Construct, id: string, props: CodeBuildPipelineProjectProps);
30
39
  }
31
- export {};
@@ -31,12 +31,27 @@ export class CodeBuildPipelineProject extends Construct {
31
31
  buildImage = LinuxBuildImage.fromEcrRepository(repository, props.ecrBuildImage.tag);
32
32
  }
33
33
  else if (props.buildImage) {
34
- if (typeof props.buildImage == 'string') {
35
- buildImage = LinuxBuildImage[props.buildImage ?? 'STANDARD_7_0'];
36
- }
37
- else {
38
- buildImage = props.buildImage;
34
+ buildImage = props.buildImage;
35
+ }
36
+ else if (props.buildImageNodeJS) {
37
+ let standard = 8;
38
+ switch (props.buildImageNodeJS) {
39
+ case 12:
40
+ case 14:
41
+ standard = 5;
42
+ break;
43
+ case 16:
44
+ standard = 6;
45
+ break;
46
+ case 18:
47
+ case 20:
48
+ standard = 7;
49
+ break;
39
50
  }
51
+ buildImage = LinuxBuildImage.fromCodeBuildImageId(`aws/codebuild/standard:${standard}.0`);
52
+ }
53
+ else if (props.buildImageId) {
54
+ buildImage = LinuxBuildImage.fromCodeBuildImageId(props.buildImageId);
40
55
  }
41
56
  this.project = new PipelineProject(this, 'CodeBuildPipelineProjectProps', {
42
57
  projectName: props.projectName,
@@ -96,4 +111,4 @@ export class CodeBuildPipelineProject extends Construct {
96
111
  }
97
112
  }
98
113
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZWJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQWdDLFNBQVMsRUFBRSxXQUFXLEVBQWUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBb0IsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBd0I3QyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsU0FBUztJQUNyQyxPQUFPLENBQWtCO0lBRXpDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUM5RixLQUFLLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEdBQUc7Z0JBQ3RELEtBQUssRUFBRSxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcs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TCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxHQUFHLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTt3QkFDekUsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJO3dCQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87cUJBQ3ZCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLCBCdWlsZFNwZWMsIENvbXB1dGVUeXBlLCBJQnVpbGRJbWFnZSwgTGludXhCdWlsZEltYWdlLCBQaXBlbGluZVByb2plY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgdHlwZSB7IFNzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuL3NzbS50c1wiO1xuaW1wb3J0IHsgdGFnUmVzb3VyY2UgfSBmcm9tIFwiLi4vbGliL3RhZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VQcm9wcyB9IGZyb20gXCIuLi90eXBlcy5kLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VmFyaWFibGVzID0gUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogYW55LCB0eXBlPzogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSB9PjtcblxuaW50ZXJmYWNlIFNzbVBhcmFtZXRlciBleHRlbmRzIFNzbVN0cmluZ1BhcmFtZXRlciB7XG4gIGVuY3J5cHRlZD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEVjckJ1aWxkSW1hZ2Uge1xuICByZXBvc2l0b3J5OiBzdHJpbmc7XG4gIHRhZzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRQaXBlbGluZVByb2plY3RQcm9wcyBleHRlbmRzIFJlc291cmNlUHJvcHMge1xuICBwcm9qZWN0TmFtZT86IHN0cmluZztcbiAgYnVpbGRTcGVjPzogc3RyaW5nIHwgb2JqZWN0O1xuICBidWlsZEltYWdlPzogKCdTVEFOREFSRF81XzAnIHwgJ1NUQU5EQVJEXzZfMCcgfCAnU1RBTkRBUkRfN18wJykgfCBJQnVpbGRJbWFnZTtcbiAgZWNyQnVpbGRJbWFnZT86IEVjckJ1aWxkSW1hZ2UsXG4gIGNvbXB1dGVUeXBlPzogKCdTTUFMTCcgfCAnTUVESVVNJyB8ICdMQVJHRScgfCAnWF9MQVJHRScgfCAnWDJfTEFSR0UnKSB8IHN0cmluZztcbiAgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiBFbnZpcm9ubWVudFZhcmlhYmxlcztcbiAgY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybj86IHN0cmluZztcbiAgczNCdWNrZXROYW1lPzogc3RyaW5nO1xuICBzc21QYXJhbWV0ZXJzPzogU3NtUGFyYW1ldGVyW107XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlQnVpbGRQaXBlbGluZVByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUGlwZWxpbmVQcm9qZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlQnVpbGRQaXBlbGluZVByb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICBpZiAocHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybiAmJiAhcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMuQ0xPVURGUk9OVF9ESVNUUklCVVRJT05fSUQpIHtcbiAgICAgIHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLkNMT1VERlJPTlRfRElTVFJJQlVUSU9OX0lEID0ge1xuICAgICAgICB2YWx1ZTogcHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybi5zcGxpdCgnLycpLnBvcCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zM0J1Y2tldE5hbWUgJiYgIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLlMzX0JVQ0tFVF9OQU1FKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcy5TM19CVUNLRVRfTkFNRSA9IHtcbiAgICAgICAgdmFsdWU6IHByb3BzLnMzQnVja2V0TmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgYnVpbGRJbWFnZTogSUJ1aWxkSW1hZ2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmVjckJ1aWxkSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkuc3RhcnRzV2l0aCgnYXJuOmF3cycpID8gXG4gICAgICAgIFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlBcm4odGhpcywgJ0VjclJlcG9zaXRvcnknLCBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkpIDpcbiAgICAgICAgUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeU5hbWUodGhpcywgJ0VjclJlcG9zaXRvcnknLCBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkpO1xuICAgICAgYnVpbGRJbWFnZSA9IExpbnV4QnVpbGRJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBwcm9wcy5lY3JCdWlsZEltYWdlLnRhZyk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5idWlsZEltYWdlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmJ1aWxkSW1hZ2UgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgYnVpbGRJbWFnZSA9IExpbnV4QnVpbGRJbWFnZVtwcm9wcy5idWlsZEltYWdlID8/ICdTVEFOREFSRF83XzAnXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRJbWFnZSA9IHByb3BzLmJ1aWxkSW1hZ2UgYXMgSUJ1aWxkSW1hZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0ID0gbmV3IFBpcGVsaW5lUHJvamVjdCh0aGlzLCAnQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMnLCB7XG4gICAgICBwcm9qZWN0TmFtZTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgICBidWlsZFNwZWM6IHByb3BzLmJ1aWxkU3BlYyA/IHR5cGVvZiBwcm9wcy5idWlsZFNwZWMgPT0gJ29iamVjdCcgPyBCdWlsZFNwZWMuZnJvbU9iamVjdFRvWWFtbChwcm9wcy5idWlsZFNwZWMpIDogQnVpbGRTcGVjLmZyb21Tb3VyY2VGaWxlbmFtZShwcm9wcy5idWlsZFNwZWMgPz8gJ2J1aWxkc3BlYy55bWwnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IGJ1aWxkSW1hZ2UgPz8gTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlW3Byb3BzLmNvbXB1dGVUeXBlIGFzIChrZXlvZiB0eXBlb2YgQ29tcHV0ZVR5cGUgfCB1bmRlZmluZWQpID8/ICdTTUFMTCddLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLnByb2plY3QsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMuZGVzdHJveSA/IFJlbW92YWxQb2xpY3kuREVTVFJPWSA6IFJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgQ2xvdWRXYXRjaCBsb2cgcGVybWlzc2lvbnNcbiAgICB0aGlzLnByb2plY3QuYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnbG9nczpDcmVhdGVMb2dHcm91cCcsXG4gICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cydcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFt0aGlzLnByb2plY3QucHJvamVjdEFybl1cbiAgICB9KSk7XG5cbiAgICAvLyBBbGxvdyB0aGUgcHJvamVjdCB0byBjcmVhdGUgYW4gaW52YWxpZGF0aW9uXG4gICAgaWYgKHByb3BzLmNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm4pIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnY2xvdWRmcm9udDpDcmVhdGVJbnZhbGlkYXRpb24nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybl1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyB0aGUgcHJvamVjdCB0byBzeW5jIGZpbGVzIHRvIFMzXG4gICAgaWYgKHByb3BzLnMzQnVja2V0TmFtZSkge1xuICAgICAgY29uc3QgczNCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ1MzQnVja2V0QnlOYW1lJywgcHJvcHMuczNCdWNrZXROYW1lKTtcbiAgICAgIHMzQnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMucHJvamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnNzbVBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIGRlZHVwXG4gICAgICBwcm9wcy5zc21QYXJhbWV0ZXJzID0gcHJvcHMuc3NtUGFyYW1ldGVycy5maWx0ZXIoKHYsIGksIGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGEuZmluZEluZGV4KHAgPT4gcC5wYXRoID09PSB2LnBhdGgpID09PSBpO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHByb3BzLnNzbVBhcmFtZXRlcnMpIHtcbiAgICAgICAgbGV0IHN0clBhcmFtOiBJU3RyaW5nUGFyYW1ldGVyO1xuICAgICAgICBpZiAocGFyYW0uZW5jcnlwdGVkKSB7XG4gICAgICAgICAgc3RyUGFyYW0gPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgcGFyYW0ucGF0aCwge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogcGFyYW0ucGF0aCxcbiAgICAgICAgICAgIHZlcnNpb246IHBhcmFtLnZlcnNpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJQYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCBwYXJhbS5wYXRoLCB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiBwYXJhbS5wYXRoLFxuICAgICAgICAgICAgdmVyc2lvbjogcGFyYW0udmVyc2lvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0clBhcmFtLmdyYW50UmVhZCh0aGlzLnByb2plY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZWJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQWdDLFNBQVMsRUFBRSxXQUFXLEVBQWUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBb0IsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0Q3QyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsU0FBUztJQUNyQyxPQUFPLENBQWtCO0lBRXpDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUM5RixLQUFLLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEdBQUc7Z0JBQ3RELEtBQUssRUFBRSxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcs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QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxRQUEwQixDQUFDO2dCQUMvQixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDcEIsUUFBUSxHQUFHLGVBQWUsQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTt3QkFDL0UsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJO3dCQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87cUJBQ3ZCLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxHQUFHLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTt3QkFDekUsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJO3dCQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87cUJBQ3ZCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLCBCdWlsZFNwZWMsIENvbXB1dGVUeXBlLCBJQnVpbGRJbWFnZSwgTGludXhCdWlsZEltYWdlLCBQaXBlbGluZVByb2plY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgdHlwZSB7IFNzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuL3NzbS50c1wiO1xuaW1wb3J0IHsgdGFnUmVzb3VyY2UgfSBmcm9tIFwiLi4vbGliL3RhZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VQcm9wcyB9IGZyb20gXCIuLi90eXBlcy5kLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VmFyaWFibGVzID0gUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogYW55LCB0eXBlPzogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSB9PjtcblxuZXhwb3J0IHR5cGUgQ29kZUJ1aWxkSW1hZ2VJZCA9IFxuICAnYXdzL2NvZGVidWlsZC9hbWF6b25saW51eDItYWFyY2g2NC1zdGFuZGFyZDoxLjAnIHwgXG4gICdhd3MvY29kZWJ1aWxkL2FtYXpvbmxpbnV4Mi14ODZfNjQtc3RhbmRhcmQ6Mi4wJyB8XG4gICdhd3MvY29kZWJ1aWxkL2FtYXpvbmxpbnV4Mi14ODZfNjQtc3RhbmRhcmQ6My4wJyB8XG4gICdhd3MvY29kZWJ1aWxkL2FtYXpvbmxpbnV4LXg4Nl82NC1zdGFuZGFyZDo0LjAnIHxcbiAgJ2F3cy9jb2RlYnVpbGQvYW1hem9ubGludXgteDg2XzY0LXN0YW5kYXJkOjUuMCcgfFxuICAnYXdzL2NvZGVidWlsZC9hbWF6b25saW51eC14ODZfNjQtc3RhbmRhcmQ6Ni4wJyB8XG4gICdhd3MvY29kZWJ1aWxkL2FtYXpvbmxpbnV4LXg4Nl82NC1zdGFuZGFyZDpjb3JyZXR0bzgnIHxcbiAgJ2F3cy9jb2RlYnVpbGQvYW1hem9ubGludXgteDg2XzY0LXN0YW5kYXJkOmNvcnJldHRvMTEnIHxcbiAgJ2F3cy9jb2RlYnVpbGQvYW1hem9ubGludXgtYWFyY2g2NC1zdGFuZGFyZDoyLjAnIHxcbiAgJ2F3cy9jb2RlYnVpbGQvYW1hem9ubGludXgtYWFyY2g2NC1zdGFuZGFyZDozLjAnIHxcbiAgJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6My4wJyB8XG4gICdhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjQuMCcgfCBcbiAgJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6NS4wJyB8IC8vIG5vZGVqcyAxMiwgMTRcbiAgJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ni4wJyB8IC8vIG5vZGVqcyAxNlxuICAnYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjAnIHwgLy8gbm9kZWpzIDE4LCAyMCwgMjIsIDI0XG4gICdhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjguMCcgfCAvLyBub2RlanMgMjIsIDI0XG4gICdhd3MvY29kZWJ1aWxkL3dpbmRvd3MtYmFzZToyMDE5LTEuMCcgfFxuICAnYXdzL2NvZGVidWlsZC93aW5kb3dzLWJhc2U6MjAxOS0yLjAnIHxcbiAgJ2F3cy9jb2RlYnVpbGQvd2luZG93cy1iYXNlOjIwMTktMy4wJyB8XG4gICdhd3MvY29kZWJ1aWxkL3dpbmRvd3MtYmFzZToyMDIyLTEuMCcgfFxuICAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgdHlwZSBDb2RlQnVpbGRDb21wdXRlVHlwZSA9ICdTTUFMTCcgfCAnTUVESVVNJyB8ICdMQVJHRScgfCAnWF9MQVJHRScgfCAnWDJfTEFSR0UnIHwgKHN0cmluZyAmIHt9KTtcbmV4cG9ydCB0eXBlIENvZGVCdWlsZE5vZGVKcyA9IDEyIHwgMTQgfCAxNiB8IDE4IHwgMjAgfCAyMiB8IDI0IHwgKG51bWJlciAmIHt9KTtcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTc21QYXJhbWV0ZXIgZXh0ZW5kcyBTc21TdHJpbmdQYXJhbWV0ZXIge1xuICBlbmNyeXB0ZWQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBFY3JCdWlsZEltYWdlIHtcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xuICB0YWc6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG4gIGJ1aWxkU3BlYz86IHN0cmluZyB8IG9iamVjdDtcbiAgZWNyQnVpbGRJbWFnZT86IEVjckJ1aWxkSW1hZ2UsXG4gIGJ1aWxkSW1hZ2U/OiBJQnVpbGRJbWFnZTtcbiAgYnVpbGRJbWFnZU5vZGVKUz86IENvZGVCdWlsZE5vZGVKcztcbiAgYnVpbGRJbWFnZUlkPzogQ29kZUJ1aWxkSW1hZ2VJZDtcbiAgY29tcHV0ZVR5cGU/OiBDb2RlQnVpbGRDb21wdXRlVHlwZTtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiBFbnZpcm9ubWVudFZhcmlhYmxlcztcbiAgY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybj86IHN0cmluZztcbiAgczNCdWNrZXROYW1lPzogc3RyaW5nO1xuICBzc21QYXJhbWV0ZXJzPzogQ29kZUJ1aWxkU3NtUGFyYW1ldGVyW107XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlQnVpbGRQaXBlbGluZVByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUGlwZWxpbmVQcm9qZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlQnVpbGRQaXBlbGluZVByb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICBpZiAocHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybiAmJiAhcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMuQ0xPVURGUk9OVF9ESVNUUklCVVRJT05fSUQpIHtcbiAgICAgIHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLkNMT1VERlJPTlRfRElTVFJJQlVUSU9OX0lEID0ge1xuICAgICAgICB2YWx1ZTogcHJvcHMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbkFybi5zcGxpdCgnLycpLnBvcCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zM0J1Y2tldE5hbWUgJiYgIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLlMzX0JVQ0tFVF9OQU1FKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcy5TM19CVUNLRVRfTkFNRSA9IHtcbiAgICAgICAgdmFsdWU6IHByb3BzLnMzQnVja2V0TmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgYnVpbGRJbWFnZTogSUJ1aWxkSW1hZ2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmVjckJ1aWxkSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkuc3RhcnRzV2l0aCgnYXJuOmF3cycpID8gXG4gICAgICAgIFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlBcm4odGhpcywgJ0VjclJlcG9zaXRvcnknLCBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkpIDpcbiAgICAgICAgUmVwb3NpdG9yeS5mcm9tUmVwb3NpdG9yeU5hbWUodGhpcywgJ0VjclJlcG9zaXRvcnknLCBwcm9wcy5lY3JCdWlsZEltYWdlLnJlcG9zaXRvcnkpO1xuICAgICAgYnVpbGRJbWFnZSA9IExpbnV4QnVpbGRJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBwcm9wcy5lY3JCdWlsZEltYWdlLnRhZyk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5idWlsZEltYWdlKSB7XG4gICAgICBidWlsZEltYWdlID0gcHJvcHMuYnVpbGRJbWFnZSBhcyBJQnVpbGRJbWFnZTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmJ1aWxkSW1hZ2VOb2RlSlMpIHtcbiAgICAgIGxldCBzdGFuZGFyZCA9IDg7XG4gICAgICBzd2l0Y2ggKHByb3BzLmJ1aWxkSW1hZ2VOb2RlSlMpIHtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICBzdGFuZGFyZCA9IDU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgc3RhbmRhcmQgPSA2O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHN0YW5kYXJkID0gNztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGJ1aWxkSW1hZ2UgPSBMaW51eEJ1aWxkSW1hZ2UuZnJvbUNvZGVCdWlsZEltYWdlSWQoYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6JHtzdGFuZGFyZH0uMGApO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuYnVpbGRJbWFnZUlkKSB7XG4gICAgICBidWlsZEltYWdlID0gTGludXhCdWlsZEltYWdlLmZyb21Db2RlQnVpbGRJbWFnZUlkKHByb3BzLmJ1aWxkSW1hZ2VJZCk7XG4gICAgfSBcbiAgICBcblxuICAgIHRoaXMucHJvamVjdCA9IG5ldyBQaXBlbGluZVByb2plY3QodGhpcywgJ0NvZGVCdWlsZFBpcGVsaW5lUHJvamVjdFByb3BzJywge1xuICAgICAgcHJvamVjdE5hbWU6IHByb3BzLnByb2plY3ROYW1lLFxuICAgICAgYnVpbGRTcGVjOiBwcm9wcy5idWlsZFNwZWMgPyB0eXBlb2YgcHJvcHMuYnVpbGRTcGVjID09ICdvYmplY3QnID8gQnVpbGRTcGVjLmZyb21PYmplY3RUb1lhbWwocHJvcHMuYnVpbGRTcGVjKSA6IEJ1aWxkU3BlYy5mcm9tU291cmNlRmlsZW5hbWUocHJvcHMuYnVpbGRTcGVjID8/ICdidWlsZHNwZWMueW1sJykgOiB1bmRlZmluZWQsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBidWlsZEltYWdlID8/IExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzAsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZVtwcm9wcy5jb21wdXRlVHlwZSBhcyAoa2V5b2YgdHlwZW9mIENvbXB1dGVUeXBlIHwgdW5kZWZpbmVkKSA/PyAnU01BTEwnXSxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5wcm9qZWN0LCBwcm9wcy50YWdzKTtcbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnByb2plY3QuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfVxuXG4gICAgLy8gQWRkIENsb3VkV2F0Y2ggbG9nIHBlcm1pc3Npb25zXG4gICAgdGhpcy5wcm9qZWN0LmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nR3JvdXAnLFxuICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAnbG9nczpQdXRMb2dFdmVudHMnXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbdGhpcy5wcm9qZWN0LnByb2plY3RBcm5dXG4gICAgfSkpO1xuXG4gICAgLy8gQWxsb3cgdGhlIHByb2plY3QgdG8gY3JlYXRlIGFuIGludmFsaWRhdGlvblxuICAgIGlmIChwcm9wcy5jbG91ZEZyb250RGlzdHJpYnV0aW9uQXJuKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZnJvbnQ6Q3JlYXRlSW52YWxpZGF0aW9uJ10sXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLmNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm5dXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgdGhlIHByb2plY3QgdG8gc3luYyBmaWxlcyB0byBTM1xuICAgIGlmIChwcm9wcy5zM0J1Y2tldE5hbWUpIHtcbiAgICAgIGNvbnN0IHMzQnVja2V0ID0gQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdTM0J1Y2tldEJ5TmFtZScsIHByb3BzLnMzQnVja2V0TmFtZSk7XG4gICAgICBzM0J1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLnByb2plY3QpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zc21QYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBkZWR1cFxuICAgICAgcHJvcHMuc3NtUGFyYW1ldGVycyA9IHByb3BzLnNzbVBhcmFtZXRlcnMuZmlsdGVyKCh2LCBpLCBhKSA9PiB7XG4gICAgICAgIHJldHVybiBhLmZpbmRJbmRleChwID0+IHAucGF0aCA9PT0gdi5wYXRoKSA9PT0gaTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBwcm9wcy5zc21QYXJhbWV0ZXJzKSB7XG4gICAgICAgIGxldCBzdHJQYXJhbTogSVN0cmluZ1BhcmFtZXRlcjtcbiAgICAgICAgaWYgKHBhcmFtLmVuY3J5cHRlZCkge1xuICAgICAgICAgIHN0clBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsIHBhcmFtLnBhdGgsIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHBhcmFtLnBhdGgsXG4gICAgICAgICAgICB2ZXJzaW9uOiBwYXJhbS52ZXJzaW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyUGFyYW0gPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgcGFyYW0ucGF0aCwge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogcGFyYW0ucGF0aCxcbiAgICAgICAgICAgIHZlcnNpb246IHBhcmFtLnZlcnNpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdHJQYXJhbS5ncmFudFJlYWQodGhpcy5wcm9qZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXX0=
@@ -1,6 +1,6 @@
1
1
  import { RemovalPolicy, PhysicalName } from "aws-cdk-lib";
2
2
  import { Construct } from 'constructs';
3
- import { Artifact, Pipeline } from "aws-cdk-lib/aws-codepipeline";
3
+ import { Artifact, Pipeline, PipelineType } from "aws-cdk-lib/aws-codepipeline";
4
4
  import { CodeBuildAction, CodeStarConnectionsSourceAction } from "aws-cdk-lib/aws-codepipeline-actions";
5
5
  import { Bucket } from 'aws-cdk-lib/aws-s3';
6
6
  import { StringParameter } from 'aws-cdk-lib/aws-ssm';
@@ -18,7 +18,8 @@ export class CodePipelineProject extends Construct {
18
18
  tagResource(this.s3Bucket, props.tags);
19
19
  this.pipeline = new Pipeline(this, 'CodePipelineProject', {
20
20
  pipelineName: props.pipelineName,
21
- artifactBucket: this.s3Bucket
21
+ artifactBucket: this.s3Bucket,
22
+ pipelineType: PipelineType.V2
22
23
  });
23
24
  tagResource(this.pipeline, props.tags);
24
25
  if (typeof props.destroy == 'boolean') {
@@ -60,4 +61,4 @@ export class CodePipelineProject extends Construct {
60
61
  });
61
62
  }
62
63
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFPLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFxQjdDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUFTO0lBQ2hDLFFBQVEsQ0FBUztJQUNqQixRQUFRLENBQVc7SUFFbkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQzdELFVBQVUsRUFBRSxZQUFZLENBQUMsa0JBQWtCO1lBQzNDLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNySCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdELENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN4RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzlCLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUE0QjtRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBRWhDLE1BQU0sYUFBYSxHQUFXLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNCLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUcsTUFBTSxDQUFDLGtCQUF5QyxDQUFDLElBQUksRUFBRyxNQUFNLENBQUMsa0JBQXlDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEssSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTtZQUN2QyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSwrQkFBK0IsQ0FBQztvQkFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTtvQkFDeEMsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGFBQWE7b0JBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtvQkFDckIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFNBQVM7aUJBQ3ZDLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBMkI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksT0FBTztZQUN0QyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxlQUFlLENBQUM7b0JBQ2xCLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLE9BQU87b0JBQ3ZDLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCO29CQUNoQyxLQUFLLEVBQUUsTUFBTSxDQUFDLGNBQWM7b0JBQzVCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7aUJBQ2xELENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFBoeXNpY2FsTmFtZSwgQXdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElQcm9qZWN0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIjtcbmltcG9ydCB7IEFydGlmYWN0LCBQaXBlbGluZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lXCI7XG5pbXBvcnQgeyBDb2RlQnVpbGRBY3Rpb24sIENvZGVTdGFyQ29ubmVjdGlvbnNTb3VyY2VBY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5cbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRWYXJpYWJsZXMgfSBmcm9tICcuL2NvZGVidWlsZC50cyc7XG5pbXBvcnQgdHlwZSB7IFNzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4vc3NtLnRzJztcbmltcG9ydCB7IHRhZ1Jlc291cmNlIH0gZnJvbSBcIi4uL2xpYi90YWdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlUHJvcHMgfSBmcm9tICcuLi90eXBlcy5kLnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBBZGRTb3VyY2VTdGFnZVBhcmFtcyB7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgY29kZXN0YXJDb25uZWN0aW9uOiBzdHJpbmcgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlcG9Pd25lcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBmdWxsQ2xvbmU/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBBZGRCdWlsZFN0YWdlUGFyYW1zIHtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICBjb2RlQnVpbGRQcm9qZWN0OiBJUHJvamVjdDtcbiAgc291cmNlQXJ0aWZhY3Q6IEFydGlmYWN0O1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcz86IEVudmlyb25tZW50VmFyaWFibGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVQaXBlbGluZVByb2plY3RQcm9wcyBleHRlbmRzIFJlc291cmNlUHJvcHMge1xuICBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgQ29kZVBpcGVsaW5lUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBzM0J1Y2tldDogQnVja2V0O1xuICBwdWJsaWMgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2RlUGlwZWxpbmVQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zM0J1Y2tldCA9IG5ldyBCdWNrZXQodGhpcywgJ0NvZGVQaXBlbGluZUFydGlmYWN0QnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogUGh5c2ljYWxOYW1lLkdFTkVSQVRFX0lGX05FRURFRCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLmRlc3Ryb3kgIT09IHVuZGVmaW5lZCA/IHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTiA6IHVuZGVmaW5lZCxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiBwcm9wcy5kZXN0cm95ID09PSB0cnVlID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuczNCdWNrZXQsIHByb3BzLnRhZ3MpO1xuXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBQaXBlbGluZSh0aGlzLCAnQ29kZVBpcGVsaW5lUHJvamVjdCcsIHtcbiAgICAgIHBpcGVsaW5lTmFtZTogcHJvcHMucGlwZWxpbmVOYW1lLFxuICAgICAgYXJ0aWZhY3RCdWNrZXQ6IHRoaXMuczNCdWNrZXRcbiAgICB9KTtcblxuICAgIHRhZ1Jlc291cmNlKHRoaXMucGlwZWxpbmUsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMucGlwZWxpbmUuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlU3RhZ2UocGFyYW1zOiBBZGRTb3VyY2VTdGFnZVBhcmFtcyk6IEFydGlmYWN0IHtcbiAgICBjb25zdCBhcnRpZmFjdCA9IG5ldyBBcnRpZmFjdCgpO1xuXG4gICAgY29uc3QgY29ubmVjdGlvbkFybjogc3RyaW5nID0gdHlwZW9mIHBhcmFtcy5jb2Rlc3RhckNvbm5lY3Rpb24gPT0gJ3N0cmluZycgP1xuICAgICAgIHBhcmFtcy5jb2Rlc3RhckNvbm5lY3Rpb24gOlxuICAgICAgIFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCAocGFyYW1zLmNvZGVzdGFyQ29ubmVjdGlvbiBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgsIChwYXJhbXMuY29kZXN0YXJDb25uZWN0aW9uIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikudmVyc2lvbik7XG5cbiAgICB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHtcbiAgICAgIHN0YWdlTmFtZTogcGFyYW1zLnN0YWdlTmFtZSA/PyAnU291cmNlJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgbmV3IENvZGVTdGFyQ29ubmVjdGlvbnNTb3VyY2VBY3Rpb24oe1xuICAgICAgICAgIGFjdGlvbk5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ1NvdXJjZScsXG4gICAgICAgICAgb3V0cHV0OiBhcnRpZmFjdCxcbiAgICAgICAgICBjb25uZWN0aW9uQXJuLFxuICAgICAgICAgIG93bmVyOiBwYXJhbXMucmVwb093bmVyLFxuICAgICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgICAgIGJyYW5jaDogcGFyYW1zLmJyYW5jaCxcbiAgICAgICAgICBjb2RlQnVpbGRDbG9uZU91dHB1dDogcGFyYW1zLmZ1bGxDbG9uZVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBhcnRpZmFjdDtcbiAgfVxuXG4gIGFkZEJ1aWxkU3RhZ2UocGFyYW1zOiBBZGRCdWlsZFN0YWdlUGFyYW1zKSB7XG4gICAgdGhpcy5waXBlbGluZS5hZGRTdGFnZSh7XG4gICAgICBzdGFnZU5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ0J1aWxkJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgbmV3IENvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgICAgYWN0aW9uTmFtZTogcGFyYW1zLnN0YWdlTmFtZSA/PyAnQnVpbGQnLFxuICAgICAgICAgIHByb2plY3Q6IHBhcmFtcy5jb2RlQnVpbGRQcm9qZWN0LFxuICAgICAgICAgIGlucHV0OiBwYXJhbXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHBhcmFtcy5lbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuICB9XG59Il19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFPLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBcUI3QyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsU0FBUztJQUNoQyxRQUFRLENBQVM7SUFDakIsUUFBUSxDQUFXO0lBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDdkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtZQUM3RCxVQUFVLEVBQUUsWUFBWSxDQUFDLGtCQUFrQjtZQUMzQyxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDckgsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RCxDQUFDLENBQUM7UUFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDeEQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUM3QixZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQUU7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pHLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQTRCO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFFaEMsTUFBTSxhQUFhLEdBQVcsT0FBTyxNQUFNLENBQUMsa0JBQWtCLElBQUksUUFBUSxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0IsZUFBZSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRyxNQUFNLENBQUMsa0JBQXlDLENBQUMsSUFBSSxFQUFHLE1BQU0sQ0FBQyxrQkFBeUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwSyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxRQUFRO1lBQ3ZDLE9BQU8sRUFBRTtnQkFDUCxJQUFJLCtCQUErQixDQUFDO29CQUNsQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxRQUFRO29CQUN4QyxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsYUFBYTtvQkFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQ3ZCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO29CQUNyQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsU0FBUztpQkFDdkMsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUEyQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxPQUFPO1lBQ3RDLE9BQU8sRUFBRTtnQkFDUCxJQUFJLGVBQWUsQ0FBQztvQkFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksT0FBTztvQkFDdkMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7b0JBQ2hDLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYztvQkFDNUIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtpQkFDbEQsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSwgUGh5c2ljYWxOYW1lLCBBd3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSVByb2plY3QgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZFwiO1xuaW1wb3J0IHsgQXJ0aWZhY3QsIFBpcGVsaW5lLCBQaXBlbGluZVR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHsgQ29kZUJ1aWxkQWN0aW9uLCBDb2RlU3RhckNvbm5lY3Rpb25zU291cmNlQWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuXG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnLi9jb2RlYnVpbGQudHMnO1xuaW1wb3J0IHR5cGUgeyBTc21TdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICcuL3NzbS50cyc7XG5pbXBvcnQgeyB0YWdSZXNvdXJjZSB9IGZyb20gXCIuLi9saWIvdGFncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZVByb3BzIH0gZnJvbSAnLi4vdHlwZXMuZC50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU291cmNlU3RhZ2VQYXJhbXMge1xuICBzdGFnZU5hbWU/OiBzdHJpbmc7XG4gIGNvZGVzdGFyQ29ubmVjdGlvbjogc3RyaW5nIHwgU3NtU3RyaW5nUGFyYW1ldGVyO1xuICByZXBvT3duZXI6IHN0cmluZztcbiAgcmVwbzogc3RyaW5nO1xuICBicmFuY2g6IHN0cmluZztcbiAgZnVsbENsb25lPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQnVpbGRTdGFnZVBhcmFtcyB7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgY29kZUJ1aWxkUHJvamVjdDogSVByb2plY3Q7XG4gIHNvdXJjZUFydGlmYWN0OiBBcnRpZmFjdDtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiBFbnZpcm9ubWVudFZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlUGlwZWxpbmVQcm9qZWN0UHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIENvZGVQaXBlbGluZVByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXQ6IEJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZVBpcGVsaW5lUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuczNCdWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsICdDb2RlUGlwZWxpbmVBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IFBoeXNpY2FsTmFtZS5HRU5FUkFURV9JRl9ORUVERUQsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5kZXN0cm95ICE9PSB1bmRlZmluZWQgPyBwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4gOiB1bmRlZmluZWQsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMuZGVzdHJveSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLnMzQnVja2V0LCBwcm9wcy50YWdzKTtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgJ0NvZGVQaXBlbGluZVByb2plY3QnLCB7XG4gICAgICBwaXBlbGluZU5hbWU6IHByb3BzLnBpcGVsaW5lTmFtZSxcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLnMzQnVja2V0LFxuICAgICAgcGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGUuVjJcbiAgICB9KTtcblxuICAgIHRhZ1Jlc291cmNlKHRoaXMucGlwZWxpbmUsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMucGlwZWxpbmUuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlU3RhZ2UocGFyYW1zOiBBZGRTb3VyY2VTdGFnZVBhcmFtcyk6IEFydGlmYWN0IHtcbiAgICBjb25zdCBhcnRpZmFjdCA9IG5ldyBBcnRpZmFjdCgpO1xuXG4gICAgY29uc3QgY29ubmVjdGlvbkFybjogc3RyaW5nID0gdHlwZW9mIHBhcmFtcy5jb2Rlc3RhckNvbm5lY3Rpb24gPT0gJ3N0cmluZycgP1xuICAgICAgIHBhcmFtcy5jb2Rlc3RhckNvbm5lY3Rpb24gOlxuICAgICAgIFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCAocGFyYW1zLmNvZGVzdGFyQ29ubmVjdGlvbiBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgsIChwYXJhbXMuY29kZXN0YXJDb25uZWN0aW9uIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikudmVyc2lvbik7XG5cbiAgICB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHtcbiAgICAgIHN0YWdlTmFtZTogcGFyYW1zLnN0YWdlTmFtZSA/PyAnU291cmNlJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgbmV3IENvZGVTdGFyQ29ubmVjdGlvbnNTb3VyY2VBY3Rpb24oe1xuICAgICAgICAgIGFjdGlvbk5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ1NvdXJjZScsXG4gICAgICAgICAgb3V0cHV0OiBhcnRpZmFjdCxcbiAgICAgICAgICBjb25uZWN0aW9uQXJuLFxuICAgICAgICAgIG93bmVyOiBwYXJhbXMucmVwb093bmVyLFxuICAgICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgICAgIGJyYW5jaDogcGFyYW1zLmJyYW5jaCxcbiAgICAgICAgICBjb2RlQnVpbGRDbG9uZU91dHB1dDogcGFyYW1zLmZ1bGxDbG9uZVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBhcnRpZmFjdDtcbiAgfVxuXG4gIGFkZEJ1aWxkU3RhZ2UocGFyYW1zOiBBZGRCdWlsZFN0YWdlUGFyYW1zKSB7XG4gICAgdGhpcy5waXBlbGluZS5hZGRTdGFnZSh7XG4gICAgICBzdGFnZU5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ0J1aWxkJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgbmV3IENvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgICAgYWN0aW9uTmFtZTogcGFyYW1zLnN0YWdlTmFtZSA/PyAnQnVpbGQnLFxuICAgICAgICAgIHByb2plY3Q6IHBhcmFtcy5jb2RlQnVpbGRQcm9qZWN0LFxuICAgICAgICAgIGlucHV0OiBwYXJhbXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHBhcmFtcy5lbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuICB9XG59Il19
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Environment } from "aws-cdk-lib";
2
- export * from './lib/tags.ts';
2
+ export * from './lib/tags.js';
3
+ export * from './cli/index.js';
3
4
  interface GetEnvParams {
4
5
  account?: number | string;
5
6
  region?: string;
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
- export * from "./lib/tags.js";
1
+ export * from './lib/tags.js';
2
+ export * from './cli/index.js';
2
3
  export function getEnv(env) {
3
4
  let account = process.env.CDK_DEFAULT_ACCOUNT || '';
4
5
  let region = process.env.CDK_DEFAULT_REGION || 'us-east-1';
@@ -23,4 +24,4 @@ export function getEnv(env) {
23
24
  }
24
25
  return { account, region };
25
26
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxlQUFlLENBQUM7QUFVOUIsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFrRDtJQUN2RSxJQUFJLE9BQU8sR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUM1RCxJQUFJLE1BQU0sR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztJQUNuRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsUUFBUSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QixPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDZixDQUFDO2dCQUNELE1BQU07WUFDUjtnQkFDRSxPQUFPLEdBQUksR0FBbUIsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUM3QyxNQUFNLEdBQUksR0FBbUIsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDO2dCQUMvQyxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWdzLnRzJztcblxuaW50ZXJmYWNlIEdldEVudlBhcmFtcyB7IFxuICBhY2NvdW50PzogbnVtYmVyIHwgc3RyaW5nO1xuICByZWdpb24/OiBzdHJpbmc7IFxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihyZWdpb24/OiBzdHJpbmcpOiBFbnZpcm9ubWVudDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoYWNjb3VudD86IHN0cmluZyB8IG51bWJlcik6IEVudmlyb25tZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudih7IGFjY291bnQsIHJlZ2lvbiB9OiBHZXRFbnZQYXJhbXMpOiBFbnZpcm9ubWVudDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoZW52PzogRW52aXJvbm1lbnQpOiBFbnZpcm9ubWVudDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoZW52Pzogc3RyaW5nIHwgbnVtYmVyIHwgR2V0RW52UGFyYW1zIHwgRW52aXJvbm1lbnQpIHtcbiAgbGV0IGFjY291bnQ6IHN0cmluZyA9IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQgfHwgJyc7XG4gIGxldCByZWdpb246IHN0cmluZyA9IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTiB8fCAndXMtZWFzdC0xJztcbiAgaWYgKGVudikge1xuICAgIHN3aXRjaCAodHlwZW9mIGVudikge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgYWNjb3VudCA9IGVudi50b1N0cmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGlmICgvXlxcZCskLy50ZXN0KGVudikpIHtcbiAgICAgICAgICBhY2NvdW50ID0gZW52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZ2lvbiA9IGVudjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFjY291bnQgPSAoZW52IGFzIEVudmlyb25tZW50KS5hY2NvdW50ID8/ICcnO1xuICAgICAgICByZWdpb24gPSAoZW52IGFzIEVudmlyb25tZW50KS5yZWdpb24gPz8gcmVnaW9uO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYWNjb3VudCwgcmVnaW9uIH07XG59Il19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQVUvQixNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQWtEO0lBQ3ZFLElBQUksT0FBTyxHQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO0lBQzVELElBQUksTUFBTSxHQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksV0FBVyxDQUFDO0lBQ25FLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixRQUFRLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsTUFBTTtZQUNSO2dCQUNFLE9BQU8sR0FBSSxHQUFtQixDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sR0FBSSxHQUFtQixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUM7Z0JBQy9DLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGkvaW5kZXguanMnO1xuXG5pbnRlcmZhY2UgR2V0RW52UGFyYW1zIHsgXG4gIGFjY291bnQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJlZ2lvbj86IHN0cmluZzsgXG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KHJlZ2lvbj86IHN0cmluZyk6IEVudmlyb25tZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihhY2NvdW50Pzogc3RyaW5nIHwgbnVtYmVyKTogRW52aXJvbm1lbnQ7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KHsgYWNjb3VudCwgcmVnaW9uIH06IEdldEVudlBhcmFtcyk6IEVudmlyb25tZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihlbnY/OiBFbnZpcm9ubWVudCk6IEVudmlyb25tZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihlbnY/OiBzdHJpbmcgfCBudW1iZXIgfCBHZXRFbnZQYXJhbXMgfCBFbnZpcm9ubWVudCkge1xuICBsZXQgYWNjb3VudDogc3RyaW5nID0gcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVCB8fCAnJztcbiAgbGV0IHJlZ2lvbjogc3RyaW5nID0gcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OIHx8ICd1cy1lYXN0LTEnO1xuICBpZiAoZW52KSB7XG4gICAgc3dpdGNoICh0eXBlb2YgZW52KSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBhY2NvdW50ID0gZW52LnRvU3RyaW5nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QoZW52KSkge1xuICAgICAgICAgIGFjY291bnQgPSBlbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVnaW9uID0gZW52O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYWNjb3VudCA9IChlbnYgYXMgRW52aXJvbm1lbnQpLmFjY291bnQgPz8gJyc7XG4gICAgICAgIHJlZ2lvbiA9IChlbnYgYXMgRW52aXJvbm1lbnQpLnJlZ2lvbiA/PyByZWdpb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBhY2NvdW50LCByZWdpb24gfTtcbn0iXX0=
@@ -1,16 +1,13 @@
1
1
  import { Stack, StackProps } from 'aws-cdk-lib/core';
2
2
  import { Construct } from 'constructs';
3
3
  import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
4
- import { Distribution, Function, FunctionEventType, IResponseHeadersPolicy, ResponseHeadersPolicyProps } from 'aws-cdk-lib/aws-cloudfront';
4
+ import { Distribution, Function, IResponseHeadersPolicy, ResponseHeadersPolicyProps } from 'aws-cdk-lib/aws-cloudfront';
5
5
  import { ARecord, AaaaRecord } from "aws-cdk-lib/aws-route53";
6
6
  import { Bucket } from "aws-cdk-lib/aws-s3";
7
7
  import { CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
8
8
  import { CloudFrontFunctionRedirects } from '../../constructs/cloudfront.js';
9
9
  import type { SsmStringParameter } from '../../constructs/ssm.ts';
10
- import type { BasicAuthCredentials, CspHeaders } from '../../types.d.ts';
11
- type AWSManagedResponseHeadersPolicy = 'CORS_ALLOW_ALL_ORIGINS' | 'CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS' | 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT' | 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS' | 'SECURITY_HEADERS';
12
- type UUID = `${string}-${string}-${string}-${string}-${string}`;
13
- type CloudFrontFunctionEventType = keyof typeof FunctionEventType;
10
+ import type { BasicAuthCredentials, CspHeaders, CloudFrontFunctionEventType, UUID, AWSManagedResponseHeadersPolicy } from '../../types.d.ts';
14
11
  export interface WebGlobalStackProps {
15
12
  envType: 'NOT_PROD' | 'PROD';
16
13
  description?: string;
@@ -19,8 +16,8 @@ export interface WebGlobalStackProps {
19
16
  domainName: string;
20
17
  basicAuth?: string | BasicAuthCredentials | SsmStringParameter;
21
18
  cloudfrontFunction?: {
22
- eventType: CloudFrontFunctionEventType[];
23
19
  code: string;
20
+ eventType: CloudFrontFunctionEventType[];
24
21
  };
25
22
  redirects?: CloudFrontFunctionRedirects;
26
23
  redirectsCsvPath?: string;
@@ -42,4 +39,3 @@ export declare class WebGlobalStack extends Stack {
42
39
  readonly aaaaRecord: AaaaRecord;
43
40
  constructor(scope: Construct, id: string, props: WebGlobalStackProps & StackProps);
44
41
  }
45
- export {};
@@ -93,6 +93,7 @@ export class WebGlobalStack extends Stack {
93
93
  });
94
94
  }
95
95
  }
96
+ // TODO: Figure out why the the policy is not getting updated in the CloudFront behavior
96
97
  this.responseHeadersPolicy = responseHeadersPolicy;
97
98
  const defaultBehavior = {
98
99
  origin: S3BucketOrigin.withOriginAccessControl(this.s3Bucket),
@@ -191,4 +192,4 @@ export class WebGlobalStack extends Stack {
191
192
  this.aaaaRecord = cfAlias.aaaaRecord;
192
193
  }
193
194
  }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWdsb2JhbC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGFja3Mvd2ViLXN0YXRpYy1zZXJ2ZXJsZXNzL3dlYi1nbG9iYWwtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBYyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0UsT0FBTyxFQUEwQixpQkFBaUIsRUFBd0cscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUcvUCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQW9DcEUsTUFBTSxPQUFPLGNBQWUsU0FBUSxLQUFLO0lBQ3ZCLGNBQWMsQ0FBYztJQUM1QixRQUFRLENBQVM7SUFDakIsa0JBQWtCLENBQVc7SUFDN0Isc0JBQXNCLENBQWU7SUFDckMsTUFBTSxDQUF3QjtJQUM5QixxQkFBcUIsQ0FBcUM7SUFDMUQsT0FBTyxDQUFVO0lBQ2pCLFVBQVUsQ0FBYTtJQUV2QyxZQUFZLEtBQWdC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QUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3RCLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM3QixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDaEYsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVO1lBQ2xELFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTztZQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDaEMsZUFBZTtZQUNmLFFBQVE7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUUxRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDM0QsWUFBWSxFQUFFLGNBQWMsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzLCBQaHlzaWNhbE5hbWUsIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgRGlzdHJpYnV0aW9uLCBGdW5jdGlvbiwgRnVuY3Rpb25FdmVudFR5cGUsIElSZXNwb25zZUhlYWRlcnNQb2xpY3ksIFJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLCBSZXNwb25zZVNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLCBCZWhhdmlvck9wdGlvbnMsIFJlc3BvbnNlSGVhZGVyc1BvbGljeSwgSGVhZGVyc0ZyYW1lT3B0aW9uLCBIZWFkZXJzUmVmZXJyZXJQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBBUmVjb3JkLCBBYWFhUmVjb3JkIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IENmbldlYkFDTCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy13YWZ2Mic7XG5cbmltcG9ydCB7IFNTTENlcnRpZmljYXRlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9jZXJ0aWZpY2F0ZW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RzLCBDbG91ZEZyb250RnVuY3Rpb24sIENsb3VkRnJvbnREaXN0cmlidXRpb24gfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL2Nsb3VkZnJvbnQuanMnO1xuaW1wb3J0IHsgZ2V0SG9zdGVkWm9uZSwgQ2xvdWRGcm9udEFsaWFzIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9yb3V0ZTUzLmpzJztcbmltcG9ydCB7IFMzQnVja2V0IH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9zMy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvc3NtLnRzJztcbmltcG9ydCB7IENsb3VkRnJvbnRXZWJBY2wgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL3dhZi5qcyc7XG5pbXBvcnQgeyBkb21haW5Bc0lkIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzLmpzJztcbmltcG9ydCB7IGFkZEV2b1N0YWNrVGFncyB9IGZyb20gJy4uLy4uL2xpYi90YWdzLnRzJztcbmltcG9ydCB7IFMzQnVja2V0T3JpZ2luIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2lucyc7XG5pbXBvcnQgdHlwZSB7IEJhc2ljQXV0aENyZWRlbnRpYWxzLCBDc3BIZWFkZXJzIH0gZnJvbSAnLi4vLi4vdHlwZXMuZC50cyc7XG5cblxudHlwZSBBV1NNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gXG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TJyB8XG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TX0FORF9TRUNVUklUWV9IRUFERVJTJyB8XG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUJyB8XG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUX0FORF9TRUNVUklUWV9IRUFERVJTJyB8XG4gICdTRUNVUklUWV9IRUFERVJTJztcblxudHlwZSBVVUlEID0gYCR7c3RyaW5nfS0ke3N0cmluZ30tJHtzdHJpbmd9LSR7c3RyaW5nfS0ke3N0cmluZ31gO1xudHlwZSBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGUgPSBrZXlvZiB0eXBlb2YgRnVuY3Rpb25FdmVudFR5cGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViR2xvYmFsU3RhY2tQcm9wcyB7XG4gIGVudlR5cGU6ICdOT1RfUFJPRCcgfCAnUFJPRCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBidWNrZXROYW1lPzogc3RyaW5nO1xuICBob3N0ZWRab25lOiBzdHJpbmc7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgYmFzaWNBdXRoPzogc3RyaW5nIHwgQmFzaWNBdXRoQ3JlZGVudGlhbHMgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIGNsb3VkZnJvbnRGdW5jdGlvbj86IHtcbiAgICBldmVudFR5cGU6IENsb3VkRnJvbnRGdW5jdGlvbkV2ZW50VHlwZVtdO1xuICAgIGNvZGU6IHN0cmluZztcbiAgfVxuICByZWRpcmVjdHM/OiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdHM7XG4gIHJlZGlyZWN0c0NzdlBhdGg/OiBzdHJpbmc7XG4gIC8vIGF0dGFjaFdlYkFjbD86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHdlYkFjbD86IGJvb2xlYW4gfCBzdHJpbmcgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlc3BvbnNlSGVhZGVyc1BvbGljeT86IGZhbHNlIHwgQVdTTWFuYWdlZFJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IFVVSUQgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzPzogUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM7XG4gIHJlc3BvbnNlQ3NwSGVhZGVycz86IENzcEhlYWRlcnM7XG4gIGRlc3Ryb3k/OiBib29sZWFuO1xuICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIFdlYkdsb2JhbFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBwdWJsaWMgcmVhZG9ubHkgc3NsQ2VydGlmaWNhdGU6IENlcnRpZmljYXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXQ6IEJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRnJvbnRGdW5jdGlvbjogRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBjbG91ZEZyb250RGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG4gIHB1YmxpYyByZWFkb25seSB3ZWJBY2w6IENmbldlYkFDTCB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IGFSZWNvcmQ6IEFSZWNvcmQ7XG4gIHB1YmxpYyByZWFkb25seSBhYWFhUmVjb3JkOiBBYWFhUmVjb3JkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXZWJHbG9iYWxTdGFja1Byb3BzICYgU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGFkZEV2b1N0YWNrVGFncyh0aGlzLCAnV2ViR2xvYmFsU3RhY2snKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBnZXRIb3N0ZWRab25lKHRoaXMsICdnZXRIb3N0ZWRab25lJywgcHJvcHMuaG9zdGVkWm9uZSk7XG5cbiAgICBjb25zdCBfc3NsQ2VydCA9IG5ldyBTU0xDZXJ0aWZpY2F0ZSh0aGlzLCAnU1NMQ2VydGlmaWNhdGUnLCB7XG4gICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lLFxuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICB9KTtcbiAgICB0aGlzLnNzbENlcnRpZmljYXRlID0gX3NzbENlcnQuY2VydGlmaWNhdGU7XG5cbiAgICBjb25zdCBfczNCdWNrZXQgPSBuZXcgUzNCdWNrZXQodGhpcywgJ1MzQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogcHJvcHMuYnVja2V0TmFtZSA/PyBQaHlzaWNhbE5hbWUuR0VORVJBVEVfSUZfTkVFREVELFxuICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgIH0pO1xuICAgIHRoaXMuczNCdWNrZXQgPSBfczNCdWNrZXQuYnVja2V0O1xuXG4gICAgbGV0IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5KSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSA9PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2kudGVzdChwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gUmVzcG9uc2VIZWFkZXJzUG9saWN5LmZyb21SZXNwb25zZUhlYWRlcnNQb2xpY3lJZCh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3ktYnktaWQnLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IFJlc3BvbnNlSGVhZGVyc1BvbGljeVtwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgYXMga2V5b2YgdHlwZW9mIFJlc3BvbnNlSGVhZGVyc1BvbGljeV0gYXMgSVJlc3BvbnNlSGVhZGVyc1BvbGljeSA/PyBSZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kucGF0aCkge1xuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBSZXNwb25zZUhlYWRlcnNQb2xpY3kuZnJvbVJlc3BvbnNlSGVhZGVyc1BvbGljeUlkKHRoaXMsICdyZXNwb25zZS1oZWFkZXJzLXBvbGljeS1ieS1pZCcsIFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kucGF0aCwgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LnZlcnNpb24pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmFzZUhlYWRlcnNCZWhhdmlvcjogUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciA9IHtcbiAgICAgICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKVxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50VHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmcmFtZU9wdGlvbnM6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBmcmFtZU9wdGlvbjogSGVhZGVyc0ZyYW1lT3B0aW9uLlNBTUVPUklHSU4sXG4gICAgICAgIH0sXG4gICAgICAgIHJlZmVycmVyUG9saWN5OiB7XG4gICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IEhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOXG4gICAgICAgIH0sXG4gICAgICAgIHhzc1Byb3RlY3Rpb246IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBwcm90ZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIG1vZGVCbG9jazogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lID0gYCR7ZG9tYWluQXNJZChwcm9wcy5kb21haW5OYW1lKX0tcmVzcG9uc2UtaGVhZGVycy1wb2xpY3lgO1xuICAgICAgXG4gICAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHMpIHtcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gbmV3IFJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3knLCB7XG4gICAgICAgICAgLi4uYmFzZUhlYWRlcnNCZWhhdmlvcixcbiAgICAgICAgICAuLi5wcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lOiBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lIHx8IHJlc3BvbnNlSGVhZGVyc1BvbGljeU5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnJlc3BvbnNlQ3NwSGVhZGVycykge1xuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsICdyZXNwb25zZS1oZWFkZXJzLXBvbGljeScsIHtcbiAgICAgICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgICAgLi4uYmFzZUhlYWRlcnNCZWhhdmlvcixcbiAgICAgICAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeToge1xuICAgICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiBPYmplY3QuZW50cmllcyhwcm9wcy5yZXNwb25zZUNzcEhlYWRlcnMpLm1hcCgoW2RpcmVjdGl2ZSwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtkaXJlY3RpdmV9ICR7dmFsdWVzLmpvaW4oJyAnKX07YFxuICAgICAgICAgICAgICB9KS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IHJlc3BvbnNlSGVhZGVyc1BvbGljeTtcblxuICAgIGNvbnN0IGRlZmF1bHRCZWhhdmlvcjogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgb3JpZ2luOiBTM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbCh0aGlzLnMzQnVja2V0KSxcbiAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXSxcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeTogcmVzcG9uc2VIZWFkZXJzUG9saWN5ID8/IHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSAhPT0gZmFsc2UgPyBSZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUyA6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICBsZXQgY2ZmbjogQ2xvdWRGcm9udEZ1bmN0aW9uO1xuICAgIGlmIChwcm9wcy5iYXNpY0F1dGgpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuYmFzaWNBdXRoICE9ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICgocHJvcHMuYmFzaWNBdXRoIGFzIEJhc2ljQXV0aENyZWRlbnRpYWxzKS51c2VyICYmIChwcm9wcy5iYXNpY0F1dGggYXMgQmFzaWNBdXRoQ3JlZGVudGlhbHMpLnBhc3N3b3JkKSB7XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoID0gQnVmZmVyLmZyb20oYCR7KHByb3BzLmJhc2ljQXV0aCBhcyBCYXNpY0F1dGhDcmVkZW50aWFscykudXNlcn06JHsocHJvcHMuYmFzaWNBdXRoIGFzIEJhc2ljQXV0aENyZWRlbnRpYWxzKS5wYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHByb3BzLmJhc2ljQXV0aCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgpIHtcbiAgICAgICAgICBwcm9wcy5iYXNpY0F1dGggPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgKHByb3BzLmJhc2ljQXV0aCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgsIChwcm9wcy5iYXNpY0F1dGggYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS52ZXJzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wcy5iYXNpY0F1dGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbikge1xuICAgICAgY2ZmbiA9IENsb3VkRnJvbnRGdW5jdGlvbi5jcmVhdGVGdW5jdGlvbih0aGlzLCBudWxsLCB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5iYXNpY0F1dGgsXG4gICAgICAgIHJlZGlyZWN0czogcHJvcHMucmVkaXJlY3RzLFxuICAgICAgICByZWRpcmVjdHNDc3ZQYXRoOiBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoLFxuICAgICAgICBjb2RlOiBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uY29kZSxcbiAgICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5iYXNpY0F1dGgpIHtcbiAgICAgIGNmZm4gPSBDbG91ZEZyb250RnVuY3Rpb24uY3JlYXRlQmFzaWNBdXRoRGVmYXVsdERvYyh0aGlzLCB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5iYXNpY0F1dGgsXG4gICAgICAgIHJlZGlyZWN0czogcHJvcHMucmVkaXJlY3RzLFxuICAgICAgICByZWRpcmVjdHNDc3ZQYXRoOiBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoLFxuICAgICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2ZmbiA9IENsb3VkRnJvbnRGdW5jdGlvbi5jcmVhdGVEZWZhdWx0RG9jKHRoaXMsIHtcbiAgICAgICAgcmVkaXJlY3RzOiBwcm9wcy5yZWRpcmVjdHMsXG4gICAgICAgIHJlZGlyZWN0c0NzdlBhdGg6IHByb3BzLnJlZGlyZWN0c0NzdlBhdGgsXG4gICAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNsb3VkRnJvbnRGdW5jdGlvbiA9IGNmZm4uZm47XG5cbiAgICAvLyBjb25zdCBldmVudFR5cGVzOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXSA9IHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbj8uZXZlbnRUeXBlICYmIHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbi5ldmVudFR5cGUubGVuZ3RoID4gMCA/IHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbi5ldmVudFR5cGUgOiBbJ1ZJRVdFUl9SRVFVRVNUJywgJ1ZJRVdFUl9SRVNQT05TRSddO1xuXG4gICAgbGV0IGV2ZW50VHlwZXM6IENsb3VkRnJvbnRGdW5jdGlvbkV2ZW50VHlwZVtdID0gWydWSUVXRVJfUkVRVUVTVCcsICdWSUVXRVJfUkVTUE9OU0UnXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24/LmV2ZW50VHlwZSkgJiYgcHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uLmV2ZW50VHlwZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBldHMgPSBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uZXZlbnRUeXBlXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIHYgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICh2ID09PSAnVklFV0VSX1JFUVVFU1QnIHx8IHYgPT09ICdWSUVXRVJfUkVTUE9OU0UnKSAmJlxuICAgICAgICAgICAgYS5pbmRleE9mKHYpID09PSBpIC8vIGRlZHVwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAoZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXZlbnRUeXBlcyA9IGV0cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBldmVudFR5cGVzKSB7XG4gICAgICBkZWZhdWx0QmVoYXZpb3IuZnVuY3Rpb25Bc3NvY2lhdGlvbnMhLnB1c2goe1xuICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlW2V2ZW50VHlwZV0sXG4gICAgICAgIGZ1bmN0aW9uOiB0aGlzLmNsb3VkRnJvbnRGdW5jdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIGxldCB3ZWJBY2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgcHJvcHMud2ViQWNsID09ICdzdHJpbmcnICYmIHByb3BzLndlYkFjbC5zdGFydHNXaXRoKCdhcm46YXdzJykpIHtcbiAgICAgIHdlYkFjbElkID0gcHJvcHMud2ViQWNsO1xuICAgIH0gZWxzZSBpZiAoKHByb3BzLndlYkFjbCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgpIHtcbiAgICAgIHdlYkFjbElkID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIChwcm9wcy53ZWJBY2wgYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoLCAocHJvcHMud2ViQWNsIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikudmVyc2lvbik7XG4gICAgfSBlbHNlIGlmIChwcm9wcy53ZWJBY2wgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHdhZiA9IG5ldyBDbG91ZEZyb250V2ViQWNsKHRoaXMsICdDbG91ZEZyb250V2ViQWNsJywge1xuICAgICAgICBuYW1lOiBgJHtkb21haW5Bc0lkKHByb3BzLmRvbWFpbk5hbWUpfWAsXG4gICAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICAgIH0pO1xuICAgICAgdGhpcy53ZWJBY2wgPSB3YWYuYWNsO1xuICAgICAgd2ViQWNsSWQgPSB3YWYuYWNsLmF0dHJBcm47XG4gICAgfVxuXG4gICAgY29uc3QgY2ZEaXN0cmlidXRpb24gPSBuZXcgQ2xvdWRGcm9udERpc3RyaWJ1dGlvbih0aGlzLCAnQ2xvdWRGcm9udERpc3RyaWJ1dGlvbicsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24gPz8gcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIHByaWNlQ2xhc3M6IHByb3BzLmVudlR5cGUsXG4gICAgICBjZXJ0aWZpY2F0ZTogdGhpcy5zc2xDZXJ0aWZpY2F0ZSxcbiAgICAgIGRlZmF1bHRCZWhhdmlvcixcbiAgICAgIHdlYkFjbElkXG4gICAgfSk7XG4gICAgdGhpcy5jbG91ZEZyb250RGlzdHJpYnV0aW9uID0gY2ZEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uO1xuXG4gICAgY29uc3QgY2ZBbGlhcyA9IG5ldyBDbG91ZEZyb250QWxpYXModGhpcywgJ0Nsb3VkRnJvbnRBbGlhcycsIHtcbiAgICAgIGRpc3RyaWJ1dGlvbjogY2ZEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uLFxuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmVcbiAgICB9KTtcbiAgICB0aGlzLmFSZWNvcmQgPSBjZkFsaWFzLmFSZWNvcmQ7XG4gICAgdGhpcy5hYWFhUmVjb3JkID0gY2ZBbGlhcy5hYWFhUmVjb3JkO1xuICB9XG59Il19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWdsb2JhbC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGFja3Mvd2ViLXN0YXRpYy1zZXJ2ZXJsZXNzL3dlYi1nbG9iYWwtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBYyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0UsT0FBTyxFQUEwQixpQkFBaUIsRUFBd0cscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUcvUCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQXlCcEUsTUFBTSxPQUFPLGNBQWUsU0FBUSxLQUFLO0lBQ3ZCLGNBQWMsQ0FBYztJQUM1QixRQUFRLENBQVM7SUFDakIsa0JBQWtCLENBQVc7SUFDN0Isc0JBQXNCLENBQWU7SUFDckMsTUFBTSxDQUF3QjtJQUM5QixxQkFBcUIsQ0FBcUM7SUFDMUQsT0FBTyxDQUFVO0lBQ2pCLFVBQVUsQ0FBYTtJQUV2QyxZQUFZLEtBQWdC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QztZQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDN0IsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ2hGLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsVUFBVTtZQUNsRCxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ2hDLGVBQWU7WUFDZixRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFFMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzNELFlBQVksRUFBRSxjQUFjLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcywgUGh5c2ljYWxOYW1lLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IENlcnRpZmljYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiwgRnVuY3Rpb24sIEZ1bmN0aW9uRXZlbnRUeXBlLCBJUmVzcG9uc2VIZWFkZXJzUG9saWN5LCBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcywgUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciwgQmVoYXZpb3JPcHRpb25zLCBSZXNwb25zZUhlYWRlcnNQb2xpY3ksIEhlYWRlcnNGcmFtZU9wdGlvbiwgSGVhZGVyc1JlZmVycmVyUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgQVJlY29yZCwgQWFhYVJlY29yZCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDZm5XZWJBQ0wgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtd2FmdjInO1xuXG5pbXBvcnQgeyBTU0xDZXJ0aWZpY2F0ZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvY2VydGlmaWNhdGVtYW5hZ2VyLmpzJztcbmltcG9ydCB7IENsb3VkRnJvbnRGdW5jdGlvblJlZGlyZWN0cywgQ2xvdWRGcm9udEZ1bmN0aW9uLCBDbG91ZEZyb250RGlzdHJpYnV0aW9uIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9jbG91ZGZyb250LmpzJztcbmltcG9ydCB7IGdldEhvc3RlZFpvbmUsIENsb3VkRnJvbnRBbGlhcyB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvcm91dGU1My5qcyc7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvczMuanMnO1xuaW1wb3J0IHR5cGUgeyBTc21TdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL3NzbS50cyc7XG5pbXBvcnQgeyBDbG91ZEZyb250V2ViQWNsIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy93YWYuanMnO1xuaW1wb3J0IHsgZG9tYWluQXNJZCB9IGZyb20gJy4uLy4uL2xpYi91dGlscy5qcyc7XG5pbXBvcnQgeyBhZGRFdm9TdGFja1RhZ3MgfSBmcm9tICcuLi8uLi9saWIvdGFncy50cyc7XG5pbXBvcnQgeyBTM0J1Y2tldE9yaWdpbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0IHR5cGUgeyBCYXNpY0F1dGhDcmVkZW50aWFscywgQ3NwSGVhZGVycywgQ2xvdWRGcm9udEZ1bmN0aW9uRXZlbnRUeXBlLCBVVUlELCBBV1NNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5IH0gZnJvbSAnLi4vLi4vdHlwZXMuZC50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViR2xvYmFsU3RhY2tQcm9wcyB7XG4gIGVudlR5cGU6ICdOT1RfUFJPRCcgfCAnUFJPRCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBidWNrZXROYW1lPzogc3RyaW5nO1xuICBob3N0ZWRab25lOiBzdHJpbmc7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgYmFzaWNBdXRoPzogc3RyaW5nIHwgQmFzaWNBdXRoQ3JlZGVudGlhbHMgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIGNsb3VkZnJvbnRGdW5jdGlvbj86IHtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgZXZlbnRUeXBlOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXTtcbiAgfVxuICByZWRpcmVjdHM/OiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdHM7XG4gIHJlZGlyZWN0c0NzdlBhdGg/OiBzdHJpbmc7XG4gIC8vIGF0dGFjaFdlYkFjbD86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHdlYkFjbD86IGJvb2xlYW4gfCBzdHJpbmcgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlc3BvbnNlSGVhZGVyc1BvbGljeT86IGZhbHNlIHwgQVdTTWFuYWdlZFJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IFVVSUQgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzPzogUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM7XG4gIHJlc3BvbnNlQ3NwSGVhZGVycz86IENzcEhlYWRlcnM7XG4gIGRlc3Ryb3k/OiBib29sZWFuO1xuICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIFdlYkdsb2JhbFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBwdWJsaWMgcmVhZG9ubHkgc3NsQ2VydGlmaWNhdGU6IENlcnRpZmljYXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXQ6IEJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRnJvbnRGdW5jdGlvbjogRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBjbG91ZEZyb250RGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG4gIHB1YmxpYyByZWFkb25seSB3ZWJBY2w6IENmbldlYkFDTCB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IGFSZWNvcmQ6IEFSZWNvcmQ7XG4gIHB1YmxpYyByZWFkb25seSBhYWFhUmVjb3JkOiBBYWFhUmVjb3JkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXZWJHbG9iYWxTdGFja1Byb3BzICYgU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGFkZEV2b1N0YWNrVGFncyh0aGlzLCAnV2ViR2xvYmFsU3RhY2snKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBnZXRIb3N0ZWRab25lKHRoaXMsICdnZXRIb3N0ZWRab25lJywgcHJvcHMuaG9zdGVkWm9uZSk7XG5cbiAgICBjb25zdCBfc3NsQ2VydCA9IG5ldyBTU0xDZXJ0aWZpY2F0ZSh0aGlzLCAnU1NMQ2VydGlmaWNhdGUnLCB7XG4gICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lLFxuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICB9KTtcbiAgICB0aGlzLnNzbENlcnRpZmljYXRlID0gX3NzbENlcnQuY2VydGlmaWNhdGU7XG5cbiAgICBjb25zdCBfczNCdWNrZXQgPSBuZXcgUzNCdWNrZXQodGhpcywgJ1MzQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogcHJvcHMuYnVja2V0TmFtZSA/PyBQaHlzaWNhbE5hbWUuR0VORVJBVEVfSUZfTkVFREVELFxuICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgIH0pO1xuICAgIHRoaXMuczNCdWNrZXQgPSBfczNCdWNrZXQuYnVja2V0O1xuXG4gICAgbGV0IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5KSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSA9PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2kudGVzdChwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gUmVzcG9uc2VIZWFkZXJzUG9saWN5LmZyb21SZXNwb25zZUhlYWRlcnNQb2xpY3lJZCh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3ktYnktaWQnLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IFJlc3BvbnNlSGVhZGVyc1BvbGljeVtwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgYXMga2V5b2YgdHlwZW9mIFJlc3BvbnNlSGVhZGVyc1BvbGljeV0gYXMgSVJlc3BvbnNlSGVhZGVyc1BvbGljeSA/PyBSZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kucGF0aCkge1xuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBSZXNwb25zZUhlYWRlcnNQb2xpY3kuZnJvbVJlc3BvbnNlSGVhZGVyc1BvbGljeUlkKHRoaXMsICdyZXNwb25zZS1oZWFkZXJzLXBvbGljeS1ieS1pZCcsIFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kucGF0aCwgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LnZlcnNpb24pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmFzZUhlYWRlcnNCZWhhdmlvcjogUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciA9IHtcbiAgICAgICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKVxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50VHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmcmFtZU9wdGlvbnM6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBmcmFtZU9wdGlvbjogSGVhZGVyc0ZyYW1lT3B0aW9uLlNBTUVPUklHSU4sXG4gICAgICAgIH0sXG4gICAgICAgIHJlZmVycmVyUG9saWN5OiB7XG4gICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IEhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOXG4gICAgICAgIH0sXG4gICAgICAgIHhzc1Byb3RlY3Rpb246IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBwcm90ZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIG1vZGVCbG9jazogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lID0gYCR7ZG9tYWluQXNJZChwcm9wcy5kb21haW5OYW1lKX0tcmVzcG9uc2UtaGVhZGVycy1wb2xpY3lgO1xuICAgICAgXG4gICAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHMpIHtcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gbmV3IFJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3knLCB7XG4gICAgICAgICAgLi4uYmFzZUhlYWRlcnNCZWhhdmlvcixcbiAgICAgICAgICAuLi5wcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lOiBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lIHx8IHJlc3BvbnNlSGVhZGVyc1BvbGljeU5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnJlc3BvbnNlQ3NwSGVhZGVycykge1xuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsICdyZXNwb25zZS1oZWFkZXJzLXBvbGljeScsIHtcbiAgICAgICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgICAgLi4uYmFzZUhlYWRlcnNCZWhhdmlvcixcbiAgICAgICAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeToge1xuICAgICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiBPYmplY3QuZW50cmllcyhwcm9wcy5yZXNwb25zZUNzcEhlYWRlcnMpLm1hcCgoW2RpcmVjdGl2ZSwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtkaXJlY3RpdmV9ICR7dmFsdWVzLmpvaW4oJyAnKX07YFxuICAgICAgICAgICAgICB9KS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSB0aGUgdGhlIHBvbGljeSBpcyBub3QgZ2V0dGluZyB1cGRhdGVkIGluIHRoZSBDbG91ZEZyb250IGJlaGF2aW9yXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgPSByZXNwb25zZUhlYWRlcnNQb2xpY3k7XG5cbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3I6IEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgIG9yaWdpbjogUzNCdWNrZXRPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2wodGhpcy5zM0J1Y2tldCksXG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW10sXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3k6IHJlc3BvbnNlSGVhZGVyc1BvbGljeSA/PyBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgIT09IGZhbHNlID8gUmVzcG9uc2VIZWFkZXJzUG9saWN5LlNFQ1VSSVRZX0hFQURFUlMgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgbGV0IGNmZm46IENsb3VkRnJvbnRGdW5jdGlvbjtcbiAgICBpZiAocHJvcHMuYmFzaWNBdXRoKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmJhc2ljQXV0aCAhPSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoKHByb3BzLmJhc2ljQXV0aCBhcyBCYXNpY0F1dGhDcmVkZW50aWFscykudXNlciAmJiAocHJvcHMuYmFzaWNBdXRoIGFzIEJhc2ljQXV0aENyZWRlbnRpYWxzKS5wYXNzd29yZCkge1xuICAgICAgICAgIHByb3BzLmJhc2ljQXV0aCA9IEJ1ZmZlci5mcm9tKGAkeyhwcm9wcy5iYXNpY0F1dGggYXMgQmFzaWNBdXRoQ3JlZGVudGlhbHMpLnVzZXJ9OiR7KHByb3BzLmJhc2ljQXV0aCBhcyBCYXNpY0F1dGhDcmVkZW50aWFscykucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICB9IGVsc2UgaWYgKChwcm9wcy5iYXNpY0F1dGggYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoKSB7XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIChwcm9wcy5iYXNpY0F1dGggYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoLCAocHJvcHMuYmFzaWNBdXRoIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikudmVyc2lvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24pIHtcbiAgICAgIGNmZm4gPSBDbG91ZEZyb250RnVuY3Rpb24uY3JlYXRlRnVuY3Rpb24odGhpcywgbnVsbCwge1xuICAgICAgICBjcmVkZW50aWFsczogcHJvcHMuYmFzaWNBdXRoLFxuICAgICAgICByZWRpcmVjdHM6IHByb3BzLnJlZGlyZWN0cyxcbiAgICAgICAgcmVkaXJlY3RzQ3N2UGF0aDogcHJvcHMucmVkaXJlY3RzQ3N2UGF0aCxcbiAgICAgICAgY29kZTogcHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uLmNvZGUsXG4gICAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuYmFzaWNBdXRoKSB7XG4gICAgICBjZmZuID0gQ2xvdWRGcm9udEZ1bmN0aW9uLmNyZWF0ZUJhc2ljQXV0aERlZmF1bHREb2ModGhpcywge1xuICAgICAgICBjcmVkZW50aWFsczogcHJvcHMuYmFzaWNBdXRoLFxuICAgICAgICByZWRpcmVjdHM6IHByb3BzLnJlZGlyZWN0cyxcbiAgICAgICAgcmVkaXJlY3RzQ3N2UGF0aDogcHJvcHMucmVkaXJlY3RzQ3N2UGF0aCxcbiAgICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNmZm4gPSBDbG91ZEZyb250RnVuY3Rpb24uY3JlYXRlRGVmYXVsdERvYyh0aGlzLCB7XG4gICAgICAgIHJlZGlyZWN0czogcHJvcHMucmVkaXJlY3RzLFxuICAgICAgICByZWRpcmVjdHNDc3ZQYXRoOiBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoLFxuICAgICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jbG91ZEZyb250RnVuY3Rpb24gPSBjZmZuLmZuO1xuXG4gICAgLy8gY29uc3QgZXZlbnRUeXBlczogQ2xvdWRGcm9udEZ1bmN0aW9uRXZlbnRUeXBlW10gPSBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24/LmV2ZW50VHlwZSAmJiBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uZXZlbnRUeXBlLmxlbmd0aCA+IDAgPyBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uZXZlbnRUeXBlIDogWydWSUVXRVJfUkVRVUVTVCcsICdWSUVXRVJfUkVTUE9OU0UnXTtcblxuICAgIGxldCBldmVudFR5cGVzOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXSA9IFsnVklFV0VSX1JFUVVFU1QnLCAnVklFV0VSX1JFU1BPTlNFJ107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uPy5ldmVudFR5cGUpICYmIHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbi5ldmVudFR5cGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXRzID0gcHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uLmV2ZW50VHlwZVxuICAgICAgICAuZmlsdGVyKCh2LCBpLCBhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiB2ID09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAodiA9PT0gJ1ZJRVdFUl9SRVFVRVNUJyB8fCB2ID09PSAnVklFV0VSX1JFU1BPTlNFJykgJiZcbiAgICAgICAgICAgIGEuaW5kZXhPZih2KSA9PT0gaSAvLyBkZWR1cFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKGV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV2ZW50VHlwZXMgPSBldHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBldmVudFR5cGUgb2YgZXZlbnRUeXBlcykge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yLmZ1bmN0aW9uQXNzb2NpYXRpb25zIS5wdXNoKHtcbiAgICAgICAgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZVtldmVudFR5cGVdLFxuICAgICAgICBmdW5jdGlvbjogdGhpcy5jbG91ZEZyb250RnVuY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBsZXQgd2ViQWNsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHByb3BzLndlYkFjbCA9PSAnc3RyaW5nJyAmJiBwcm9wcy53ZWJBY2wuc3RhcnRzV2l0aCgnYXJuOmF3cycpKSB7XG4gICAgICB3ZWJBY2xJZCA9IHByb3BzLndlYkFjbDtcbiAgICB9IGVsc2UgaWYgKChwcm9wcy53ZWJBY2wgYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoKSB7XG4gICAgICB3ZWJBY2xJZCA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCAocHJvcHMud2ViQWNsIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikucGF0aCwgKHByb3BzLndlYkFjbCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnZlcnNpb24pO1xuICAgIH0gZWxzZSBpZiAocHJvcHMud2ViQWNsID09PSB0cnVlKSB7XG4gICAgICBjb25zdCB3YWYgPSBuZXcgQ2xvdWRGcm9udFdlYkFjbCh0aGlzLCAnQ2xvdWRGcm9udFdlYkFjbCcsIHtcbiAgICAgICAgbmFtZTogYCR7ZG9tYWluQXNJZChwcm9wcy5kb21haW5OYW1lKX1gLFxuICAgICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgICB9KTtcbiAgICAgIHRoaXMud2ViQWNsID0gd2FmLmFjbDtcbiAgICAgIHdlYkFjbElkID0gd2FmLmFjbC5hdHRyQXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNmRGlzdHJpYnV0aW9uID0gbmV3IENsb3VkRnJvbnREaXN0cmlidXRpb24odGhpcywgJ0Nsb3VkRnJvbnREaXN0cmlidXRpb24nLCB7XG4gICAgICBkb21haW5OYW1lOiBwcm9wcy5kb21haW5OYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uID8/IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBwcmljZUNsYXNzOiBwcm9wcy5lbnZUeXBlLFxuICAgICAgY2VydGlmaWNhdGU6IHRoaXMuc3NsQ2VydGlmaWNhdGUsXG4gICAgICBkZWZhdWx0QmVoYXZpb3IsXG4gICAgICB3ZWJBY2xJZFxuICAgIH0pO1xuICAgIHRoaXMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbiA9IGNmRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbjtcblxuICAgIGNvbnN0IGNmQWxpYXMgPSBuZXcgQ2xvdWRGcm9udEFsaWFzKHRoaXMsICdDbG91ZEZyb250QWxpYXMnLCB7XG4gICAgICBkaXN0cmlidXRpb246IGNmRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbixcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lXG4gICAgfSk7XG4gICAgdGhpcy5hUmVjb3JkID0gY2ZBbGlhcy5hUmVjb3JkO1xuICAgIHRoaXMuYWFhYVJlY29yZCA9IGNmQWxpYXMuYWFhYVJlY29yZDtcbiAgfVxufSJdfQ==
package/dist/types.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+
2
+ import { FunctionEventType } from 'aws-cdk-lib/aws-cloudfront';
3
+
1
4
  export type DeepPartial<T> = T extends object ? {
2
5
  [P in keyof T]?: DeepPartial<T[P]>;
3
6
  } : T;
@@ -6,6 +9,11 @@ export type WithRequiredProperty<Type, Key extends keyof Type> = Omit<Type, Key>
6
9
  [Property in Key]-?: Type[Property];
7
10
  };
8
11
 
12
+ export type UUID = `${string}-${string}-${string}-${string}-${string}`; // & { readonly __brand: unique symbol };
13
+
14
+ export type EvosynthTagKey = 'Account' | 'Brand' | (string & {});
15
+ export type CloudFrontFunctionEventType = keyof typeof FunctionEventType;
16
+
9
17
  export interface ResourceProps {
10
18
  destroy?: boolean;
11
19
  tags?: Record<string, string>;
@@ -18,4 +26,11 @@ export interface BasicAuthCredentials {
18
26
 
19
27
  export type CspDirective = 'connect-src' | 'default-src' | 'font-src' | 'frame-src' | 'img-src' | 'media-src' | 'object-src' | 'script-src' | 'style-src';
20
28
  export type CspDirectiveValue = "'self'" | "'none'" | "'unsafe-inline'" | "https:";
21
- export type CspHeaders = Partial<Record<CspDirective, CspDirectiveValue[] | string[]>>;
29
+ export type CspHeaders = Partial<Record<CspDirective, CspDirectiveValue[] | string[]>>;
30
+
31
+ export type AWSManagedResponseHeadersPolicy =
32
+ 'CORS_ALLOW_ALL_ORIGINS' |
33
+ 'CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS' |
34
+ 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT' |
35
+ 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS' |
36
+ 'SECURITY_HEADERS';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inizioevoke/evosynth",
3
- "version": "1.8.1",
3
+ "version": "2.0.0",
4
4
  "author": "",
5
5
  "license": "ISC",
6
6
  "description": "",
@@ -12,14 +12,21 @@
12
12
  "./stages/*": "./dist/stages/*.js",
13
13
  "./types/*": "./dist/types.d.ts"
14
14
  },
15
+ "bin": {
16
+ "evosynth": "./dist/cli/cli.js"
17
+ },
15
18
  "scripts": {
16
19
  "prepublishOnly": "npm run build",
17
20
  "build": "node ./tasks/clean.js && npx tsc && node ./tasks/dist.js"
18
21
  },
19
22
  "devDependencies": {
20
23
  "@types/node": "^25.3.0",
21
- "aws-cdk-lib": "^2.238.0",
24
+ "aws-cdk-lib": "^2.253.1",
22
25
  "constructs": "^10.5.1",
23
26
  "typescript": "^5.9.3"
27
+ },
28
+ "dependencies": {
29
+ "@aws-cdk/toolkit-lib": "^1.25.2",
30
+ "commander": "^14.0.3"
24
31
  }
25
32
  }
package/readme.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @inizioevoke/evosynth
2
2
 
3
- EvoSynth/EvoGen is an npm package providing reusable AWS CDK stacks for deploying static serverless websites. It targets S3 + CloudFront + Route53 + ACM + WAF + CodePipeline architectures.
3
+ EvoSynth is an npm package providing reusable AWS CDK stacks for deploying static serverless websites. It targets S3 + CloudFront + Route53 + ACM + WAF + CodePipeline architectures.
4
4
 
5
5
  ## Prerequisites
6
6
  - [CDK v2.238.x](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
package/samples/app.ts CHANGED
@@ -59,7 +59,7 @@ new WebStaticServerlessStage(app, 'dev', {
59
59
 
60
60
  // responseHeadersPolicyProps: { /* full CDK policy */},
61
61
  // responseHeadersPolicy: 'SECURITY_HEADERS', // AWS managed policy
62
- // responseHeadersPolicy: 'NONE', // Not recommended
62
+ // responseHeadersPolicy: false, // Not recommended
63
63
  // responseHeadersPolicy: '[UUID from CloudFront > Policies > Response headers]',
64
64
  // responseHeadersPolicy: { path: '/evosynth/web/security/response-headers' }, // UUID from Parameter Store
65
65
  // responseCspHeaders: { // just CSP headers, extends ResponseHeadersPolicy.SECURITY_HEADERS
package/src/cli/cli.ts ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command, program } from 'commander';
4
+ import { evosynth, EvosynthProps, CdkCommand } from './evosynth.js';
5
+
6
+ program
7
+ .name('evosynth')
8
+ .description('CDK utility')
9
+ .version('2.0.0')
10
+ .option('--profile <profile>', 'The AWS profile');
11
+
12
+
13
+ // program
14
+ // .command('bootstrap')
15
+ // .action(bootstrap);
16
+
17
+ (<CdkCommand[]>['deploy','destroy','diff','drift','rollback','synth'])
18
+ .forEach((cmd) => {
19
+ program.command(`${cmd} <env>`).action(action);
20
+ });
21
+
22
+ program.parse();
23
+
24
+ // async function bootstrap(options: Record<string, string>, command: Command) {
25
+ // await evosynth('bootstrap', )
26
+ // }
27
+ async function action(env: string, options: Record<string, string>, command: Command) {
28
+ await evosynth(command.name() as CdkCommand, env, program.opts() as EvosynthProps);
29
+ }
@@ -0,0 +1,72 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import type { EvosynthTagKey } from '../types.js';
5
+ import { runWebStaticServerlessApp, WebStaticServerlessAppConfig } from './web-static-serverless.js';
6
+
7
+ export { WebStaticServerlessAppConfig };
8
+
9
+ export type EnvironmentType = 'dev' | 'test' | 'stage' | 'uat' | 'preprod' | 'prod' | (string & {});
10
+ export type CdkCommand = 'deploy' | 'destroy' | 'diff' | 'drift' | 'rollback' | 'synth'; // 'bootstrap' |
11
+ export type EvosynthAppType = 'str8r-clm' | 'web-static-serverless';
12
+
13
+ export interface EvosynthAppConfig {
14
+ type: EvosynthAppType;
15
+ envType?: EnvironmentType;
16
+ name: string;
17
+ region: 'us-east-1' | 'us-east-2' | 'us-west-1' | 'us-west-2' | (string & {});
18
+ tags?: Record<EvosynthTagKey, string>,
19
+ }
20
+
21
+ export interface EvosynthProps {
22
+ profile?: string;
23
+ }
24
+ export async function evosynth(cmd: CdkCommand, env: string, props: EvosynthProps) {
25
+ const files = await readdir(process.cwd(), { withFileTypes: true });
26
+
27
+ const configFiles = files
28
+ .filter((dirent) => {
29
+ if (dirent.isFile()) {
30
+ return /^\.evosynth(.*?)\.(?:js|mjs|ts|mts)$/i.test(dirent.name);
31
+ } else {
32
+ return false;
33
+ }
34
+ })
35
+ .map((dirent) => {
36
+ const parts = dirent.name.split('.').filter(p => p !== '');
37
+ return {
38
+ name: dirent.name,
39
+ env: parts.length > 2 ? parts[1] : undefined,
40
+ dir: dirent.parentPath
41
+ }
42
+ });
43
+
44
+ let configIndex = configFiles.findIndex(c => c.env && env && c.env.toLowerCase() === env.toLowerCase());
45
+ if (configIndex === -1) {
46
+ configIndex = configFiles.findIndex(c => c.env === undefined);
47
+ }
48
+ if (configIndex != -1) {
49
+ const configFile = configFiles[configIndex];
50
+ const module = await import(pathToFileURL(join(configFile.dir, configFile.name)).toString());
51
+ let config: EvosynthAppConfig | undefined = undefined;
52
+ if (configFile.env) {
53
+ config = module.default;
54
+ } else {
55
+ config = module[env]?.();
56
+ }
57
+
58
+ if (config) {
59
+ if (props.profile) {
60
+ process.env.AWS_PROFILE = props.profile;
61
+ }
62
+ switch (config.type) {
63
+ case 'web-static-serverless':
64
+ await runWebStaticServerlessApp(cmd, config as WebStaticServerlessAppConfig);
65
+ break;
66
+ }
67
+ }
68
+
69
+ } else {
70
+ console.error('evosynth config not found!');
71
+ }
72
+ }
@@ -0,0 +1,2 @@
1
+ export * from './evosynth.js';
2
+ export * from './web-static-serverless.js';
@@ -0,0 +1,130 @@
1
+ import { join } from 'node:path';
2
+ import * as core from 'aws-cdk-lib/core';
3
+ import { BootstrapEnvironments, ICloudAssemblySource, Toolkit } from '@aws-cdk/toolkit-lib';
4
+ import { ResponseHeadersPolicyProps } from 'aws-cdk-lib/aws-cloudfront';
5
+ import { IBuildImage } from 'aws-cdk-lib/aws-codebuild';
6
+ import { CloudFrontFunctionRedirects } from '../constructs/cloudfront.js';
7
+ import { CodeBuildImageId, EcrBuildImage, CodeBuildSsmParameter, CodeBuildComputeType, CodeBuildNodeJs, EnvironmentVariables } from '../constructs/codebuild.ts';
8
+ import type { EvosynthAppConfig, CdkCommand, EvosynthAppType } from './evosynth.ts';
9
+ import type { CloudFrontFunctionEventType, CspHeaders, UUID, AWSManagedResponseHeadersPolicy } from '../types.d.ts';
10
+ import { getEnv } from '../index.js';
11
+ import { WebStaticServerlessStage, WebStaticServerlessStageProps } from '../stages/web-static-serverless-stage.js';
12
+
13
+ const cdk = new Toolkit();
14
+
15
+ export interface WebStaticServerlessAppConfig extends EvosynthAppConfig {
16
+ type: Extract<EvosynthAppType, 'web-static-serverless'>,
17
+ description?: string;
18
+ dns: {
19
+ record: string;
20
+ zone: string;
21
+ },
22
+ security?: {
23
+ basicAuth?: string;
24
+ basicAuthParam?: string;
25
+ webAcl?: string | false;
26
+ webAclParam?: string;
27
+ },
28
+ cloudfront?: {
29
+ responseHeaders?: AWSManagedResponseHeadersPolicy | UUID | false;
30
+ responseHeadersParam?: string;
31
+ responseHeadersPolicy?: ResponseHeadersPolicyProps;
32
+ cspHeaders?: CspHeaders;
33
+ redirects?: CloudFrontFunctionRedirects;
34
+ function?: string | {
35
+ code: string;
36
+ eventType: CloudFrontFunctionEventType[];
37
+ }
38
+ },
39
+ pipeline?: {
40
+ source: {
41
+ codestarConnection?: string;
42
+ codestarConnectionParam?: string;
43
+ owner: 'evokegroup' | 'meltmedia' | (string & {});
44
+ repo: string;
45
+ branch: string;
46
+ fullClone?: boolean;
47
+ },
48
+ build?: {
49
+ buildSpec?: string | object;
50
+ buildImage?: IBuildImage;
51
+ buildImageEcr?: EcrBuildImage;
52
+ buildImageNodeJS?: CodeBuildNodeJs;
53
+ buildImageId?: CodeBuildImageId;
54
+ computeType?: CodeBuildComputeType;
55
+ environmentVariables?: EnvironmentVariables;
56
+ ssmParameters?: CodeBuildSsmParameter[]
57
+ }
58
+ }
59
+ }
60
+
61
+ export async function runWebStaticServerlessApp(cmd: CdkCommand, config: WebStaticServerlessAppConfig) {
62
+ const cx = await cdk.fromAssemblyBuilder(async (props) => {
63
+ const app = new core.App({
64
+ outdir: join(process.cwd(), '.evosynth'),
65
+ });
66
+
67
+ const stageProps: WebStaticServerlessStageProps & core.StageProps = {
68
+ env: getEnv(config.region),
69
+ stageName: `${config.name}${config.envType ? `-${config.envType}` : ''}`,
70
+ tags: config.tags,
71
+ envType: config.envType === 'prod' ? 'PROD' : 'NOT_PROD',
72
+ description: `${config.description}${config.envType ? ` ${config.envType.toUpperCase()}` : ''}`,
73
+ hostedZone: config.dns.zone,
74
+ domainName: `${config.dns.record}.${config.dns.zone}`,
75
+ basicAuth: config.security?.basicAuthParam ? { path: config.security?.basicAuthParam } : config.security?.basicAuth,
76
+ webAcl: config.security?.webAclParam ? { path: config.security.webAclParam } : config.security?.webAcl,
77
+ redirects: config.cloudfront?.redirects,
78
+ responseCspHeaders: config.cloudfront?.cspHeaders,
79
+ responseHeadersPolicy: config.cloudfront?.responseHeadersParam ? { path: config.cloudfront.responseHeadersParam } : config.cloudfront?.responseHeaders,
80
+ responseHeadersPolicyProps: config.cloudfront?.responseHeadersPolicy,
81
+ cloudfrontFunction: config.cloudfront?.function && typeof config.cloudfront.function == 'string' ? {
82
+ code: config.cloudfront.function,
83
+ eventType: ['VIEWER_REQUEST','VIEWER_RESPONSE'],
84
+ } : config.cloudfront?.function as any
85
+ }
86
+ if (config.pipeline) {
87
+ stageProps.pipeline = {
88
+ sourceStage: {
89
+ codestarConnection: config.pipeline.source.codestarConnectionParam ? { path: config.pipeline.source.codestarConnectionParam } : config.pipeline.source.codestarConnection as string,
90
+ repoOwner: config.pipeline.source.owner,
91
+ repo: config.pipeline.source.repo,
92
+ branch: config.pipeline.source.branch,
93
+ fullClone: config.pipeline.source.fullClone
94
+ }
95
+ }
96
+ if (config.pipeline.build) {
97
+ stageProps.pipeline.buildStage = {
98
+ environmentVariables: config.pipeline.build.environmentVariables
99
+ };
100
+ stageProps.pipeline.codeBuildProject = {
101
+ buildImage: config.pipeline.build.buildImage,
102
+ buildImageId: config.pipeline.build.buildImageId,
103
+ buildImageNodeJS: config.pipeline.build.buildImageNodeJS,
104
+ buildSpec: config.pipeline.build.buildSpec,
105
+ computeType: config.pipeline.build.computeType,
106
+ ecrBuildImage: config.pipeline.build.buildImageEcr,
107
+ ssmParameters: config.pipeline.build.ssmParameters
108
+ };
109
+ }
110
+ }
111
+
112
+ new WebStaticServerlessStage(app, config.type, stageProps);
113
+
114
+ return app.synth();
115
+ });
116
+
117
+ switch (cmd) {
118
+ // case 'bootstrap':
119
+ // await cdk.bootstrap(BootstrapEnvironments.fromList([`aws://${process.env.CDK_DEFAULT_ACCOUNT}/${config.region}`]));
120
+ // break;
121
+ case 'deploy':
122
+ case 'destroy':
123
+ case 'diff':
124
+ case 'drift':
125
+ case 'rollback':
126
+ case 'synth':
127
+ await cdk[cmd](cx);
128
+ break;
129
+ }
130
+ }
@@ -11,7 +11,33 @@ import type { ResourceProps } from "../types.d.ts";
11
11
 
12
12
  export type EnvironmentVariables = Record<string, { value: any, type?: BuildEnvironmentVariableType }>;
13
13
 
14
- interface SsmParameter extends SsmStringParameter {
14
+ export type CodeBuildImageId =
15
+ 'aws/codebuild/amazonlinux2-aarch64-standard:1.0' |
16
+ 'aws/codebuild/amazonlinux2-x86_64-standard:2.0' |
17
+ 'aws/codebuild/amazonlinux2-x86_64-standard:3.0' |
18
+ 'aws/codebuild/amazonlinux-x86_64-standard:4.0' |
19
+ 'aws/codebuild/amazonlinux-x86_64-standard:5.0' |
20
+ 'aws/codebuild/amazonlinux-x86_64-standard:6.0' |
21
+ 'aws/codebuild/amazonlinux-x86_64-standard:corretto8' |
22
+ 'aws/codebuild/amazonlinux-x86_64-standard:corretto11' |
23
+ 'aws/codebuild/amazonlinux-aarch64-standard:2.0' |
24
+ 'aws/codebuild/amazonlinux-aarch64-standard:3.0' |
25
+ 'aws/codebuild/standard:3.0' |
26
+ 'aws/codebuild/standard:4.0' |
27
+ 'aws/codebuild/standard:5.0' | // nodejs 12, 14
28
+ 'aws/codebuild/standard:6.0' | // nodejs 16
29
+ 'aws/codebuild/standard:7.0' | // nodejs 18, 20, 22, 24
30
+ 'aws/codebuild/standard:8.0' | // nodejs 22, 24
31
+ 'aws/codebuild/windows-base:2019-1.0' |
32
+ 'aws/codebuild/windows-base:2019-2.0' |
33
+ 'aws/codebuild/windows-base:2019-3.0' |
34
+ 'aws/codebuild/windows-base:2022-1.0' |
35
+ (string & {});
36
+
37
+ export type CodeBuildComputeType = 'SMALL' | 'MEDIUM' | 'LARGE' | 'X_LARGE' | 'X2_LARGE' | (string & {});
38
+ export type CodeBuildNodeJs = 12 | 14 | 16 | 18 | 20 | 22 | 24 | (number & {});
39
+
40
+ export interface CodeBuildSsmParameter extends SsmStringParameter {
15
41
  encrypted?: boolean;
16
42
  }
17
43
  export interface EcrBuildImage {
@@ -21,13 +47,15 @@ export interface EcrBuildImage {
21
47
  export interface CodeBuildPipelineProjectProps extends ResourceProps {
22
48
  projectName?: string;
23
49
  buildSpec?: string | object;
24
- buildImage?: ('STANDARD_5_0' | 'STANDARD_6_0' | 'STANDARD_7_0') | IBuildImage;
25
50
  ecrBuildImage?: EcrBuildImage,
26
- computeType?: ('SMALL' | 'MEDIUM' | 'LARGE' | 'X_LARGE' | 'X2_LARGE') | string;
51
+ buildImage?: IBuildImage;
52
+ buildImageNodeJS?: CodeBuildNodeJs;
53
+ buildImageId?: CodeBuildImageId;
54
+ computeType?: CodeBuildComputeType;
27
55
  environmentVariables?: EnvironmentVariables;
28
56
  cloudFrontDistributionArn?: string;
29
57
  s3BucketName?: string;
30
- ssmParameters?: SsmParameter[];
58
+ ssmParameters?: CodeBuildSsmParameter[];
31
59
  }
32
60
 
33
61
  export class CodeBuildPipelineProject extends Construct {
@@ -58,12 +86,27 @@ export class CodeBuildPipelineProject extends Construct {
58
86
  Repository.fromRepositoryName(this, 'EcrRepository', props.ecrBuildImage.repository);
59
87
  buildImage = LinuxBuildImage.fromEcrRepository(repository, props.ecrBuildImage.tag);
60
88
  } else if (props.buildImage) {
61
- if (typeof props.buildImage == 'string') {
62
- buildImage = LinuxBuildImage[props.buildImage ?? 'STANDARD_7_0']
63
- } else {
64
- buildImage = props.buildImage as IBuildImage;
89
+ buildImage = props.buildImage as IBuildImage;
90
+ } else if (props.buildImageNodeJS) {
91
+ let standard = 8;
92
+ switch (props.buildImageNodeJS) {
93
+ case 12:
94
+ case 14:
95
+ standard = 5;
96
+ break;
97
+ case 16:
98
+ standard = 6;
99
+ break;
100
+ case 18:
101
+ case 20:
102
+ standard = 7;
103
+ break;
65
104
  }
66
- }
105
+ buildImage = LinuxBuildImage.fromCodeBuildImageId(`aws/codebuild/standard:${standard}.0`);
106
+ } else if (props.buildImageId) {
107
+ buildImage = LinuxBuildImage.fromCodeBuildImageId(props.buildImageId);
108
+ }
109
+
67
110
 
68
111
  this.project = new PipelineProject(this, 'CodeBuildPipelineProjectProps', {
69
112
  projectName: props.projectName,
@@ -1,7 +1,7 @@
1
1
  import { RemovalPolicy, PhysicalName, Aws } from "aws-cdk-lib";
2
2
  import { Construct } from 'constructs';
3
3
  import { IProject } from "aws-cdk-lib/aws-codebuild";
4
- import { Artifact, Pipeline } from "aws-cdk-lib/aws-codepipeline";
4
+ import { Artifact, Pipeline, PipelineType } from "aws-cdk-lib/aws-codepipeline";
5
5
  import { CodeBuildAction, CodeStarConnectionsSourceAction } from "aws-cdk-lib/aws-codepipeline-actions";
6
6
  import { Bucket } from 'aws-cdk-lib/aws-s3';
7
7
  import { StringParameter } from 'aws-cdk-lib/aws-ssm';
@@ -45,7 +45,8 @@ export class CodePipelineProject extends Construct {
45
45
 
46
46
  this.pipeline = new Pipeline(this, 'CodePipelineProject', {
47
47
  pipelineName: props.pipelineName,
48
- artifactBucket: this.s3Bucket
48
+ artifactBucket: this.s3Bucket,
49
+ pipelineType: PipelineType.V2
49
50
  });
50
51
 
51
52
  tagResource(this.pipeline, props.tags);
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Environment } from "aws-cdk-lib";
2
2
 
3
- export * from './lib/tags.ts';
3
+ export * from './lib/tags.js';
4
+ export * from './cli/index.js';
4
5
 
5
6
  interface GetEnvParams {
6
7
  account?: number | string;
@@ -17,18 +17,7 @@ import { CloudFrontWebAcl } from '../../constructs/waf.js';
17
17
  import { domainAsId } from '../../lib/utils.js';
18
18
  import { addEvoStackTags } from '../../lib/tags.ts';
19
19
  import { S3BucketOrigin } from 'aws-cdk-lib/aws-cloudfront-origins';
20
- import type { BasicAuthCredentials, CspHeaders } from '../../types.d.ts';
21
-
22
-
23
- type AWSManagedResponseHeadersPolicy =
24
- 'CORS_ALLOW_ALL_ORIGINS' |
25
- 'CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS' |
26
- 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT' |
27
- 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS' |
28
- 'SECURITY_HEADERS';
29
-
30
- type UUID = `${string}-${string}-${string}-${string}-${string}`;
31
- type CloudFrontFunctionEventType = keyof typeof FunctionEventType;
20
+ import type { BasicAuthCredentials, CspHeaders, CloudFrontFunctionEventType, UUID, AWSManagedResponseHeadersPolicy } from '../../types.d.ts';
32
21
 
33
22
  export interface WebGlobalStackProps {
34
23
  envType: 'NOT_PROD' | 'PROD';
@@ -38,8 +27,8 @@ export interface WebGlobalStackProps {
38
27
  domainName: string;
39
28
  basicAuth?: string | BasicAuthCredentials | SsmStringParameter;
40
29
  cloudfrontFunction?: {
41
- eventType: CloudFrontFunctionEventType[];
42
30
  code: string;
31
+ eventType: CloudFrontFunctionEventType[];
43
32
  }
44
33
  redirects?: CloudFrontFunctionRedirects;
45
34
  redirectsCsvPath?: string;
@@ -139,6 +128,7 @@ export class WebGlobalStack extends Stack {
139
128
  });
140
129
  }
141
130
  }
131
+ // TODO: Figure out why the the policy is not getting updated in the CloudFront behavior
142
132
  this.responseHeadersPolicy = responseHeadersPolicy;
143
133
 
144
134
  const defaultBehavior: BehaviorOptions = {
package/src/types.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+
2
+ import { FunctionEventType } from 'aws-cdk-lib/aws-cloudfront';
3
+
1
4
  export type DeepPartial<T> = T extends object ? {
2
5
  [P in keyof T]?: DeepPartial<T[P]>;
3
6
  } : T;
@@ -6,6 +9,11 @@ export type WithRequiredProperty<Type, Key extends keyof Type> = Omit<Type, Key>
6
9
  [Property in Key]-?: Type[Property];
7
10
  };
8
11
 
12
+ export type UUID = `${string}-${string}-${string}-${string}-${string}`; // & { readonly __brand: unique symbol };
13
+
14
+ export type EvosynthTagKey = 'Account' | 'Brand' | (string & {});
15
+ export type CloudFrontFunctionEventType = keyof typeof FunctionEventType;
16
+
9
17
  export interface ResourceProps {
10
18
  destroy?: boolean;
11
19
  tags?: Record<string, string>;
@@ -18,4 +26,11 @@ export interface BasicAuthCredentials {
18
26
 
19
27
  export type CspDirective = 'connect-src' | 'default-src' | 'font-src' | 'frame-src' | 'img-src' | 'media-src' | 'object-src' | 'script-src' | 'style-src';
20
28
  export type CspDirectiveValue = "'self'" | "'none'" | "'unsafe-inline'" | "https:";
21
- export type CspHeaders = Partial<Record<CspDirective, CspDirectiveValue[] | string[]>>;
29
+ export type CspHeaders = Partial<Record<CspDirective, CspDirectiveValue[] | string[]>>;
30
+
31
+ export type AWSManagedResponseHeadersPolicy =
32
+ 'CORS_ALLOW_ALL_ORIGINS' |
33
+ 'CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS' |
34
+ 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT' |
35
+ 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS' |
36
+ 'SECURITY_HEADERS';