cdk8s-cli 2.0.34 → 2.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.gitattributes CHANGED
@@ -8,6 +8,7 @@
8
8
  /.github/workflows/auto-approve.yml linguist-generated
9
9
  /.github/workflows/backport.yml linguist-generated
10
10
  /.github/workflows/build.yml linguist-generated
11
+ /.github/workflows/integ.yml linguist-generated
11
12
  /.github/workflows/pull-request-lint.yml linguist-generated
12
13
  /.github/workflows/release-1.x.yml linguist-generated
13
14
  /.github/workflows/release.yml linguist-generated
package/.projenrc.ts ADDED
@@ -0,0 +1,185 @@
1
+ import { Cdk8sCommon } from '@cdk8s/projen-common';
2
+ import { github, typescript, JsonFile, DependencyType } from 'projen';
3
+ import { addIntegTests } from './projenrc/integ';
4
+
5
+ const project = new typescript.TypeScriptProject({
6
+ ...Cdk8sCommon.props,
7
+
8
+ projenrcTs: true,
9
+ name: 'cdk8s-cli',
10
+ description: 'This is the command line tool for Cloud Development Kit (CDK) for Kubernetes (cdk8s).',
11
+ repositoryUrl: 'https://github.com/cdk8s-team/cdk8s-cli.git',
12
+ projenUpgradeSecret: 'PROJEN_GITHUB_TOKEN',
13
+ authorName: 'Amazon Web Services',
14
+ authorUrl: 'https://aws.amazon.com',
15
+ minNodeVersion: '14.17.0',
16
+
17
+ keywords: [
18
+ 'k8s',
19
+ 'cdk8s',
20
+ 'kubernetes',
21
+ 'cli',
22
+ 'tools',
23
+ 'automation',
24
+ 'containers',
25
+ ],
26
+
27
+ workflowBootstrapSteps: [{ run: 'pip3 install pipenv' }],
28
+
29
+ defaultReleaseBranch: '2.x',
30
+ majorVersion: 2,
31
+ releaseBranches: {
32
+ '1.x': {
33
+ majorVersion: 1,
34
+ npmDistTag: 'latest-1',
35
+ },
36
+ },
37
+
38
+ releaseToNpm: true,
39
+ bin: {
40
+ cdk8s: 'bin/cdk8s',
41
+ },
42
+ deps: [
43
+ 'cdk8s',
44
+ 'cdk8s-plus-22',
45
+ 'codemaker',
46
+ 'constructs',
47
+ 'fs-extra@^8',
48
+ 'jsii-srcmak',
49
+ 'jsii-pacmak',
50
+ 'sscaff',
51
+ 'yaml',
52
+ 'yargs@^15',
53
+ 'json2jsii',
54
+ 'colors',
55
+ 'ajv',
56
+ ],
57
+ devDeps: [
58
+ '@cdk8s/projen-common',
59
+ '@types/fs-extra@^8',
60
+ '@types/json-schema',
61
+ 'glob',
62
+ '@types/glob',
63
+ 'typescript-json-schema',
64
+ ],
65
+
66
+ tsconfig: {
67
+ include: ['src/schemas/*.json'],
68
+ },
69
+
70
+ // run upgrade-dependencies workflow at a different hour than other cdk8s
71
+ // repos to decrease flakiness of integration tests caused by new versions of
72
+ // cdk8s and cdk8s+ being published to different languages at the same time
73
+ depsUpgradeOptions: {
74
+ // the latest versions of yaml require node > 12, which
75
+ // is a change we are still not willing to make.
76
+ exclude: ['yaml'],
77
+ workflowOptions: {
78
+ schedule: Cdk8sCommon.upgradeScheduleFor('cdk8s-cli'),
79
+ },
80
+ },
81
+ });
82
+
83
+ // ignore integration tests since they need to executed after packaging
84
+ // and are defined in a separate tasks.
85
+ project.jest?.addIgnorePattern('/test/integ/');
86
+
87
+ project.gitignore.exclude('.vscode/');
88
+
89
+ new Cdk8sCommon(project);
90
+
91
+ // add @types/node as a regular dependency since it's needed to during "import"
92
+ // to compile the generated jsii code.
93
+ project.deps.removeDependency('@types/node', DependencyType.BUILD);
94
+ project.deps.addDependency('@types/node@^12', DependencyType.RUNTIME);
95
+
96
+ const schemas = project.addTask('schemas');
97
+ schemas.exec('ts-node scripts/crd.schema.ts');
98
+
99
+ project.compileTask.spawn(schemas);
100
+
101
+ // run backport in clean directories every time.
102
+ const backportHome = '/tmp/.backport/';
103
+ const backportDir = `${backportHome}/repositories/cdk8s-team/cdk8s-cli`;
104
+ const backportConfig = new JsonFile(project, '.backportrc.json', {
105
+ // see https://github.com/sqren/backport/blob/main/docs/config-file-options.md
106
+ obj: {
107
+ repoOwner: 'cdk8s-team',
108
+ repoName: 'cdk8s-cli',
109
+ signoff: true,
110
+ branchLabelMapping: {
111
+ '^backport-to-(.+)$': '$1',
112
+ },
113
+ prTitle: '{commitMessages}',
114
+ fork: false,
115
+ publishStatusCommentOnFailure: true,
116
+ publishStatusCommentOnSuccess: true,
117
+ publishStatusCommentOnAbort: true,
118
+ targetPRLabels: [project.autoApprove!.label],
119
+ dir: backportDir,
120
+ },
121
+ });
122
+
123
+ // backport task to branches based on pr labels
124
+ const backportTask = createBackportTask();
125
+
126
+ // backport tasks to the explicit release branches
127
+ for (const branch of project.release!.branches) {
128
+ createBackportTask(branch);
129
+ }
130
+
131
+ const backportWorkflow = project.github!.addWorkflow('backport');
132
+ backportWorkflow.on({ pullRequestTarget: { types: ['closed'] } });
133
+ backportWorkflow.addJob('backport', {
134
+ runsOn: ['ubuntu-18.04'],
135
+ permissions: {
136
+ contents: github.workflows.JobPermission.WRITE,
137
+ },
138
+ steps: [
139
+ // needed in order to run the projen task as well
140
+ // as use the backport configuration in the repo.
141
+ {
142
+ name: 'checkout',
143
+ uses: 'actions/checkout@v3',
144
+ with: {
145
+ // required because we need the full history
146
+ // for proper backports.
147
+ 'fetch-depth': 0,
148
+ },
149
+ },
150
+ {
151
+ name: 'Set Git Identity',
152
+ run: 'git config --global user.name "github-actions" && git config --global user.email "github-actions@github.com"',
153
+ },
154
+ {
155
+ name: 'backport',
156
+ if: 'github.event.pull_request.merged == true',
157
+ run: `npx projen ${backportTask.name}`,
158
+ env: {
159
+ GITHUB_TOKEN: '${{ secrets.PROJEN_GITHUB_TOKEN }}',
160
+ BACKPORT_PR_NUMBER: '${{ github.event.pull_request.number }}',
161
+ },
162
+ },
163
+ ],
164
+ });
165
+
166
+ function createBackportTask(branch?: string) {
167
+ const name = branch ? `backport:${branch}` : 'backport';
168
+ const task = project.addTask(name, { requiredEnv: ['BACKPORT_PR_NUMBER', 'GITHUB_TOKEN'] });
169
+ task.exec(`rm -rf ${backportHome}`);
170
+ task.exec(`mkdir -p ${backportHome}`);
171
+ task.exec(`cp ${backportConfig.path} ${backportHome}`);
172
+
173
+ const command = ['npx', 'backport', '--accesstoken', '${GITHUB_TOKEN}', '--pr', '${BACKPORT_PR_NUMBER}'];
174
+ if (branch) {
175
+ command.push(...['--branch', branch]);
176
+ } else {
177
+ command.push('--non-interactive');
178
+ }
179
+ task.exec(command.join(' '), { cwd: backportHome });
180
+ return task;
181
+ }
182
+
183
+ addIntegTests(project);
184
+
185
+ project.synth();
@@ -61,6 +61,7 @@ class Command {
61
61
  }
62
62
  }
63
63
  async function determineDeps() {
64
+ var _a;
64
65
  const cdk8s = new ModuleVersion('cdk8s', { jsii: true });
65
66
  const cdk8sPlus = new ModuleVersion('cdk8s-plus-22', { jsii: true });
66
67
  const cdk8sCli = new ModuleVersion('cdk8s-cli');
@@ -76,8 +77,8 @@ async function determineDeps() {
76
77
  cdk8s_plus_version: cdk8sPlus.version,
77
78
  constructs_version: constructsVersion,
78
79
  jsii_version: jsii.version,
79
- // do not attempt to install cdk8s cli if we are running in a test context
80
- npm_cdk8s_cli: process.env.CDK8S_TEST ? undefined : cdk8sCli.npmDependency,
80
+ // when running tests, install the tarball created from our source
81
+ npm_cdk8s_cli: (_a = process.env.CDK8S_TARBALL) !== null && _a !== void 0 ? _a : cdk8sCli.npmDependency,
81
82
  };
82
83
  }
83
84
  class ModuleVersion {
@@ -123,4 +124,4 @@ class ModuleVersion {
123
124
  }
124
125
  }
125
126
  module.exports = new Command();
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY21kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsNkNBQStCO0FBQy9CLG9EQUFzQztBQUN0QywrRUFBaUU7QUFDakUsbUNBQWdDO0FBR2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFdkQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV2RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEYsTUFBTSxPQUFPO0lBQWI7UUFDa0IsWUFBTyxHQUFHLFdBQVcsQ0FBQztRQUN0QixhQUFRLEdBQUcsNkNBQTZDLENBQUM7UUFDekQsWUFBTyxHQUFHLENBQUMsSUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSTthQUNqRCxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7YUFDaEUsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixPQUFP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QVUsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFjO1FBQ25DLElBQUksTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUMxQixNQUFNLEdBQUcsV0FBVyxDQUFDO1NBQ3RCO1FBRUQsaUVBQWlFO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbkQsQ0FBQztDQUNGO0FBR0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHBhY21hayBmcm9tICdqc2lpLXBhY21hayc7XG5pbXBvcnQgKiBhcyBwYWNtYWt2IGZyb20gJ2pzaWktcGFjbWFrL2xpYi90YXJnZXRzL3ZlcnNpb24tdXRpbHMnO1xuaW1wb3J0IHsgc3NjYWZmIH0gZnJvbSAnc3NjYWZmJztcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcblxuY29uc3QgcGtncm9vdCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicpO1xuXG5jb25zdCBwa2cgPSBmcy5yZWFkSnNvblN5bmMocGF0aC5qb2luKHBrZ3Jvb3QsICdwYWNrYWdlLmpzb24nKSk7XG5jb25zdCBjb25zdHJ1Y3RzVmVyc2lvbiA9IHBrZy5kZXBlbmRlbmNpZXMuY29uc3RydWN0cy5yZXBsYWNlKCdeJywgJycpO1xuXG5jb25zdCB0ZW1wbGF0ZXNEaXIgPSBwYXRoLmpvaW4ocGtncm9vdCwgJ3RlbXBsYXRlcycpO1xuY29uc3QgYXZhaWxhYmxlVGVtcGxhdGVzID0gZnMucmVhZGRpclN5bmModGVtcGxhdGVzRGlyKS5maWx0ZXIoeCA9PiAheC5zdGFydHNXaXRoKCcuJykpO1xuXG5jbGFzcyBDb21tYW5kIGltcGxlbWVudHMgeWFyZ3MuQ29tbWFuZE1vZHVsZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gJ2luaXQgVFlQRSc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmliZSA9ICdDcmVhdGUgYSBuZXcgY2RrOHMgcHJvamVjdCBmcm9tIGEgdGVtcGxhdGUuJztcbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkZXIgPSAoYXJnczogeWFyZ3MuQXJndikgPT4gYXJnc1xuICAgIC5wb3NpdGlvbmFsKCdUWVBFJywgeyBkZW1hbmRPcHRpb246IHRydWUsIGRlc2M6ICdQcm9qZWN0IHR5cGUnIH0pXG4gICAgLnNob3dIZWxwT25GYWlsKGZhbHNlKVxuICAgIC5jaG9pY2VzKCdUWVBFJywgYXZhaWxhYmxlVGVtcGxhdGVzKTtcblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlcihhcmd2OiBhbnkpIHtcbiAgICBpZiAoZnMucmVhZGRpclN5bmMoJy4nKS5maWx0ZXIoZiA9PiAhZi5zdGFydHNXaXRoKCcuJykpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBpbml0aWFsaXplIGEgcHJvamVjdCBpbiBhIG5vbi1lbXB0eSBkaXJlY3RvcnknKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGBJbml0aWFsaXppbmcgYSBwcm9qZWN0IGZyb20gdGhlICR7YXJndi50eXBlfSB0ZW1wbGF0ZWApO1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZXNEaXIsIGFyZ3YudHlwZSk7XG4gICAgY29uc3QgZGVwczogYW55ID0gYXdhaXQgZGV0ZXJtaW5lRGVwcygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNzY2FmZih0ZW1wbGF0ZVBhdGgsICcuJywgZGVwcyk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIGNvbnN0IGUgPSBlciBhcyBhbnk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGVycm9yIGR1cmluZyBwcm9qZWN0IGluaXRpYWxpemF0aW9uOiAke2Uuc3RhY2t9XFxuU1RET1VUOlxcbiR7ZS5zdGRvdXQ/LnRvU3RyaW5nKCl9XFxuU1RERVJSOlxcbiR7ZS5zdGRlcnI/LnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVybWluZURlcHMoKTogUHJvbWlzZTxEZXBzPiB7XG4gIGNvbnN0IGNkazhzID0gbmV3IE1vZHVsZVZlcnNpb24oJ2NkazhzJywgeyBqc2lpOiB0cnVlIH0pO1xuICBjb25zdCBjZGs4c1BsdXMgPSBuZXcgTW9kdWxlVmVyc2lvbignY2RrOHMtcGx1cy0yMicsIHsganNpaTogdHJ1ZSB9KTtcbiAgY29uc3QgY2RrOHNDbGkgPSBuZXcgTW9kdWxlVmVyc2lvbignY2RrOHMtY2xpJyk7XG4gIGNvbnN0IGpzaWkgPSBuZXcgTW9kdWxlVmVyc2lvbignanNpaScpO1xuXG4gIHJldHVybiB7XG4gICAgbnBtX2NkazhzOiBjZGs4cy5ucG1EZXBlbmRlbmN5LFxuICAgIG5wbV9jZGs4c19wbHVzOiBjZGs4c1BsdXMubnBtRGVwZW5kZW5jeSxcbiAgICBweXBpX2NkazhzOiBjZGs4cy5weXBpRGVwZW5kZW5jeSxcbiAgICBweXBpX2NkazhzX3BsdXM6IGNkazhzUGx1cy5weXBpRGVwZW5kZW5jeSxcbiAgICBtdm5fY2RrOHM6IGNkazhzLm1hdmVuRGVwZW5kZW5jeSxcbiAgICBtdm5fY2RrOHNfcGx1czogY2RrOHNQbHVzLm1hdmVuRGVwZW5kZW5jeSxcbiAgICBjZGs4c19jb3JlX3ZlcnNpb246IGNkazhzLnZlcnNpb24sXG4gICAgY2RrOHNfcGx1c192ZXJzaW9uOiBjZGs4c1BsdXMudmVyc2lvbixcbiAgICBjb25zdHJ1Y3RzX3ZlcnNpb246IGNvbnN0cnVjdHNWZXJzaW9uLFxuICAgIGpzaWlfdmVyc2lvbjoganNpaS52ZXJzaW9uLFxuXG4gICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gaW5zdGFsbCBjZGs4cyBjbGkgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSB0ZXN0IGNvbnRleHRcbiAgICBucG1fY2RrOHNfY2xpOiBwcm9jZXNzLmVudi5DREs4U19URVNUID8gdW5kZWZpbmVkIDogY2RrOHNDbGkubnBtRGVwZW5kZW5jeSxcbiAgfTtcbn1cblxuaW50ZXJmYWNlIERlcHMge1xuICBucG1fY2RrOHM6IHN0cmluZztcbiAgbnBtX2NkazhzX2NsaT86IHN0cmluZztcbiAgbnBtX2NkazhzX3BsdXM6IHN0cmluZztcbiAgcHlwaV9jZGs4czogc3RyaW5nO1xuICBweXBpX2NkazhzX3BsdXM6IHN0cmluZztcbiAgbXZuX2NkazhzOiBzdHJpbmc7XG4gIG12bl9jZGs4c19wbHVzOiBzdHJpbmc7XG4gIGNkazhzX2NvcmVfdmVyc2lvbjogc3RyaW5nO1xuICBjZGs4c19wbHVzX3ZlcnNpb246IHN0cmluZztcbiAgY29uc3RydWN0c192ZXJzaW9uOiBzdHJpbmc7XG4gIGpzaWlfdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jbGFzcyBNb2R1bGVWZXJzaW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHB5cGlWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBucG1WZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtYXZlblZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGpzaWk6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBtb2R1bGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IHsganNpaT86IGJvb2xlYW4gfSA9IHsgfSkge1xuICAgIHRoaXMudmVyc2lvbiA9IHRoaXMucmVzb2x2ZVZlcnNpb24obW9kdWxlTmFtZSk7XG4gICAgdGhpcy5ucG1WZXJzaW9uID0gdGhpcy52ZXJzaW9uO1xuICAgIHRoaXMucHlwaVZlcnNpb24gPSBwYWNtYWt2LnRvUmVsZWFzZVZlcnNpb24odGhpcy52ZXJzaW9uLCBwYWNtYWsuVGFyZ2V0TmFtZS5QWVRIT04pO1xuICAgIHRoaXMubWF2ZW5WZXJzaW9uID0gcGFjbWFrdi50b1JlbGVhc2VWZXJzaW9uKHRoaXMudmVyc2lvbiwgcGFjbWFrLlRhcmdldE5hbWUuSkFWQSk7XG4gICAgdGhpcy5qc2lpID0gb3B0aW9ucy5qc2lpID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBucG1UYXJiYWxsRmlsZSgpIHtcbiAgICBpZiAodGhpcy5qc2lpKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5tb2R1bGVOYW1lfUAke3RoaXMudmVyc2lvbn0uanNpaS50Z3pgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5tb2R1bGVOYW1lfS12JHt0aGlzLnZlcnNpb259LnRnemA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBweXBpV2hlZWxGaWxlKCkge1xuICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoLCBwcmVdID0gdGhpcy5weXBpVmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIHJldHVybiBgJHt0aGlzLm1vZHVsZU5hbWUucmVwbGFjZSgvLS9nLCAnXycpfS0ke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7cHJlID8/ICcnfS1weTMtbm9uZS1hbnkud2hsYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgamF2YUphckZpbGUoKSB7XG4gICAgcmV0dXJuIGBvcmcvY2RrOHMvJHt0aGlzLm1vZHVsZU5hbWV9LyR7dGhpcy5tYXZlblZlcnNpb259LyR7dGhpcy5tb2R1bGVOYW1lfS0ke3RoaXMubWF2ZW5WZXJzaW9ufS5qYXJgO1xuICB9XG5cbiAgcHVibGljIGdldCBucG1EZXBlbmRlbmN5KCkge1xuICAgIHJldHVybiBgJHt0aGlzLm1vZHVsZU5hbWV9QF4ke3RoaXMubnBtVmVyc2lvbn1gO1xuICB9XG5cbiAgcHVibGljIGdldCBweXBpRGVwZW5kZW5jeSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5tb2R1bGVOYW1lfX49JHt0aGlzLnB5cGlWZXJzaW9ufWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hdmVuRGVwZW5kZW5jeSgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXZlblZlcnNpb247XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVWZXJzaW9uKG1vZHVsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAobW9kdWxlID09PSAnY2RrOHMtY2xpJykge1xuICAgICAgbW9kdWxlID0gJy4uLy4uLy4uLyc7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICByZXR1cm4gcmVxdWlyZShgJHttb2R1bGV9L3BhY2thZ2UuanNvbmApLnZlcnNpb247XG4gIH1cbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBDb21tYW5kKCk7XG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY21kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsNkNBQStCO0FBQy9CLG9EQUFzQztBQUN0QywrRUFBaUU7QUFDakUsbUNBQWdDO0FBR2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFdkQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV2RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEYsTUFBTSxPQUFPO0lBQWI7UUFDa0IsWUFBTyxHQUFHLFdBQVcsQ0FBQztRQUN0QixhQUFRLEdBQUcsNkNBQTZDLENBQUM7UUFDekQsWUFBTyxHQUFHLENBQUMsSUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSTthQUNqRCxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7YUFDaEUsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixPQUFPLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFtQnpDLENBQUM7SUFqQlEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFTOztRQUM1QixJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRSxPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDdEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQjtRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBUSxNQUFNLGFBQWEsRUFBRSxDQUFDO1FBRXhDLElBQUk7WUFDRixNQUFNLElBQUEsZUFBTSxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sQ0FBQyxHQUFHLEVBQVMsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsS0FBSyxjQUFjLE1BQUEsQ0FBQyxDQUFDLE1BQU0sMENBQUUsUUFBUSxFQUFFLGNBQWMsTUFBQSxDQUFDLENBQUMsTUFBTSwwQ0FBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDeEk7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxLQUFLLFVBQVUsYUFBYTs7SUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdkMsT0FBTztRQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYTtRQUM5QixjQUFjLEVBQUUsU0FBUyxDQUFDLGFBQWE7UUFDdkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxjQUFjO1FBQ2hDLGVBQWUsRUFBRSxTQUFTLENBQUMsY0FBYztRQUN6QyxTQUFTLEVBQUUsS0FBSyxDQUFDLGVBQWU7UUFDaEMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxlQUFlO1FBQ3pDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ2pDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxPQUFPO1FBQ3JDLGtCQUFrQixFQUFFLGlCQUFpQjtRQUNyQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFFMUIsa0VBQWtFO1FBQ2xFLGFBQWEsRUFBRSxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxtQ0FBSSxRQUFRLENBQUMsYUFBYTtLQUNuRSxDQUFDO0FBQ0osQ0FBQztBQWdCRCxNQUFNLGFBQWE7SUFRakIsWUFBNkIsVUFBa0IsRUFBRSxVQUE4QixFQUFHOztRQUFyRCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQUEsT0FBTyxDQUFDLElBQUksbUNBQUksS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sV0FBVyxDQUFDO1NBQ3REO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsYUFBSCxHQUFHLGNBQUgsR0FBRyxHQUFJLEVBQUUsbUJBQW1CLENBQUM7SUFDekcsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLGFBQWEsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDO0lBQ3pHLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYztRQUNuQyxJQUFJLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDMUIsTUFBTSxHQUFHLFdBQVcsQ0FBQztTQUN0QjtRQUVELGlFQUFpRTtRQUNqRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQUdELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBwYWNtYWsgZnJvbSAnanNpaS1wYWNtYWsnO1xuaW1wb3J0ICogYXMgcGFjbWFrdiBmcm9tICdqc2lpLXBhY21hay9saWIvdGFyZ2V0cy92ZXJzaW9uLXV0aWxzJztcbmltcG9ydCB7IHNzY2FmZiB9IGZyb20gJ3NzY2FmZic7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmNvbnN0IHBrZ3Jvb3QgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nKTtcblxuY29uc3QgcGtnID0gZnMucmVhZEpzb25TeW5jKHBhdGguam9pbihwa2dyb290LCAncGFja2FnZS5qc29uJykpO1xuY29uc3QgY29uc3RydWN0c1ZlcnNpb24gPSBwa2cuZGVwZW5kZW5jaWVzLmNvbnN0cnVjdHMucmVwbGFjZSgnXicsICcnKTtcblxuY29uc3QgdGVtcGxhdGVzRGlyID0gcGF0aC5qb2luKHBrZ3Jvb3QsICd0ZW1wbGF0ZXMnKTtcbmNvbnN0IGF2YWlsYWJsZVRlbXBsYXRlcyA9IGZzLnJlYWRkaXJTeW5jKHRlbXBsYXRlc0RpcikuZmlsdGVyKHggPT4gIXguc3RhcnRzV2l0aCgnLicpKTtcblxuY2xhc3MgQ29tbWFuZCBpbXBsZW1lbnRzIHlhcmdzLkNvbW1hbmRNb2R1bGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZCA9ICdpbml0IFRZUEUnO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpYmUgPSAnQ3JlYXRlIGEgbmV3IGNkazhzIHByb2plY3QgZnJvbSBhIHRlbXBsYXRlLic7XG4gIHB1YmxpYyByZWFkb25seSBidWlsZGVyID0gKGFyZ3M6IHlhcmdzLkFyZ3YpID0+IGFyZ3NcbiAgICAucG9zaXRpb25hbCgnVFlQRScsIHsgZGVtYW5kT3B0aW9uOiB0cnVlLCBkZXNjOiAnUHJvamVjdCB0eXBlJyB9KVxuICAgIC5zaG93SGVscE9uRmFpbChmYWxzZSlcbiAgICAuY2hvaWNlcygnVFlQRScsIGF2YWlsYWJsZVRlbXBsYXRlcyk7XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZXIoYXJndjogYW55KSB7XG4gICAgaWYgKGZzLnJlYWRkaXJTeW5jKCcuJykuZmlsdGVyKGYgPT4gIWYuc3RhcnRzV2l0aCgnLicpKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgaW5pdGlhbGl6ZSBhIHByb2plY3QgaW4gYSBub24tZW1wdHkgZGlyZWN0b3J5Jyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihgSW5pdGlhbGl6aW5nIGEgcHJvamVjdCBmcm9tIHRoZSAke2FyZ3YudHlwZX0gdGVtcGxhdGVgKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4odGVtcGxhdGVzRGlyLCBhcmd2LnR5cGUpO1xuICAgIGNvbnN0IGRlcHM6IGFueSA9IGF3YWl0IGRldGVybWluZURlcHMoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzc2NhZmYodGVtcGxhdGVQYXRoLCAnLicsIGRlcHMpO1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICBjb25zdCBlID0gZXIgYXMgYW55O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBkdXJpbmcgcHJvamVjdCBpbml0aWFsaXphdGlvbjogJHtlLnN0YWNrfVxcblNURE9VVDpcXG4ke2Uuc3Rkb3V0Py50b1N0cmluZygpfVxcblNUREVSUjpcXG4ke2Uuc3RkZXJyPy50b1N0cmluZygpfWApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlcm1pbmVEZXBzKCk6IFByb21pc2U8RGVwcz4ge1xuICBjb25zdCBjZGs4cyA9IG5ldyBNb2R1bGVWZXJzaW9uKCdjZGs4cycsIHsganNpaTogdHJ1ZSB9KTtcbiAgY29uc3QgY2RrOHNQbHVzID0gbmV3IE1vZHVsZVZlcnNpb24oJ2NkazhzLXBsdXMtMjInLCB7IGpzaWk6IHRydWUgfSk7XG4gIGNvbnN0IGNkazhzQ2xpID0gbmV3IE1vZHVsZVZlcnNpb24oJ2NkazhzLWNsaScpO1xuICBjb25zdCBqc2lpID0gbmV3IE1vZHVsZVZlcnNpb24oJ2pzaWknKTtcblxuICByZXR1cm4ge1xuICAgIG5wbV9jZGs4czogY2RrOHMubnBtRGVwZW5kZW5jeSxcbiAgICBucG1fY2RrOHNfcGx1czogY2RrOHNQbHVzLm5wbURlcGVuZGVuY3ksXG4gICAgcHlwaV9jZGs4czogY2RrOHMucHlwaURlcGVuZGVuY3ksXG4gICAgcHlwaV9jZGs4c19wbHVzOiBjZGs4c1BsdXMucHlwaURlcGVuZGVuY3ksXG4gICAgbXZuX2NkazhzOiBjZGs4cy5tYXZlbkRlcGVuZGVuY3ksXG4gICAgbXZuX2NkazhzX3BsdXM6IGNkazhzUGx1cy5tYXZlbkRlcGVuZGVuY3ksXG4gICAgY2RrOHNfY29yZV92ZXJzaW9uOiBjZGs4cy52ZXJzaW9uLFxuICAgIGNkazhzX3BsdXNfdmVyc2lvbjogY2RrOHNQbHVzLnZlcnNpb24sXG4gICAgY29uc3RydWN0c192ZXJzaW9uOiBjb25zdHJ1Y3RzVmVyc2lvbixcbiAgICBqc2lpX3ZlcnNpb246IGpzaWkudmVyc2lvbixcblxuICAgIC8vIHdoZW4gcnVubmluZyB0ZXN0cywgaW5zdGFsbCB0aGUgdGFyYmFsbCBjcmVhdGVkIGZyb20gb3VyIHNvdXJjZVxuICAgIG5wbV9jZGs4c19jbGk6IHByb2Nlc3MuZW52LkNESzhTX1RBUkJBTEwgPz8gY2RrOHNDbGkubnBtRGVwZW5kZW5jeSxcbiAgfTtcbn1cblxuaW50ZXJmYWNlIERlcHMge1xuICBucG1fY2RrOHM6IHN0cmluZztcbiAgbnBtX2NkazhzX2NsaT86IHN0cmluZztcbiAgbnBtX2NkazhzX3BsdXM6IHN0cmluZztcbiAgcHlwaV9jZGs4czogc3RyaW5nO1xuICBweXBpX2NkazhzX3BsdXM6IHN0cmluZztcbiAgbXZuX2NkazhzOiBzdHJpbmc7XG4gIG12bl9jZGs4c19wbHVzOiBzdHJpbmc7XG4gIGNkazhzX2NvcmVfdmVyc2lvbjogc3RyaW5nO1xuICBjZGs4c19wbHVzX3ZlcnNpb246IHN0cmluZztcbiAgY29uc3RydWN0c192ZXJzaW9uOiBzdHJpbmc7XG4gIGpzaWlfdmVyc2lvbjogc3RyaW5nO1xufVxuXG5jbGFzcyBNb2R1bGVWZXJzaW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHB5cGlWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBucG1WZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtYXZlblZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGpzaWk6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBtb2R1bGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IHsganNpaT86IGJvb2xlYW4gfSA9IHsgfSkge1xuICAgIHRoaXMudmVyc2lvbiA9IHRoaXMucmVzb2x2ZVZlcnNpb24obW9kdWxlTmFtZSk7XG4gICAgdGhpcy5ucG1WZXJzaW9uID0gdGhpcy52ZXJzaW9uO1xuICAgIHRoaXMucHlwaVZlcnNpb24gPSBwYWNtYWt2LnRvUmVsZWFzZVZlcnNpb24odGhpcy52ZXJzaW9uLCBwYWNtYWsuVGFyZ2V0TmFtZS5QWVRIT04pO1xuICAgIHRoaXMubWF2ZW5WZXJzaW9uID0gcGFjbWFrdi50b1JlbGVhc2VWZXJzaW9uKHRoaXMudmVyc2lvbiwgcGFjbWFrLlRhcmdldE5hbWUuSkFWQSk7XG4gICAgdGhpcy5qc2lpID0gb3B0aW9ucy5qc2lpID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBucG1UYXJiYWxsRmlsZSgpIHtcbiAgICBpZiAodGhpcy5qc2lpKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5tb2R1bGVOYW1lfUAke3RoaXMudmVyc2lvbn0uanNpaS50Z3pgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5tb2R1bGVOYW1lfS12JHt0aGlzLnZlcnNpb259LnRnemA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBweXBpV2hlZWxGaWxlKCkge1xuICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoLCBwcmVdID0gdGhpcy5weXBpVmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIHJldHVybiBgJHt0aGlzLm1vZHVsZU5hbWUucmVwbGFjZSgvLS9nLCAnXycpfS0ke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7cHJlID8/ICcnfS1weTMtbm9uZS1hbnkud2hsYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgamF2YUphckZpbGUoKSB7XG4gICAgcmV0dXJuIGBvcmcvY2RrOHMvJHt0aGlzLm1vZHVsZU5hbWV9LyR7dGhpcy5tYXZlblZlcnNpb259LyR7dGhpcy5tb2R1bGVOYW1lfS0ke3RoaXMubWF2ZW5WZXJzaW9ufS5qYXJgO1xuICB9XG5cbiAgcHVibGljIGdldCBucG1EZXBlbmRlbmN5KCkge1xuICAgIHJldHVybiBgJHt0aGlzLm1vZHVsZU5hbWV9QF4ke3RoaXMubnBtVmVyc2lvbn1gO1xuICB9XG5cbiAgcHVibGljIGdldCBweXBpRGVwZW5kZW5jeSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5tb2R1bGVOYW1lfX49JHt0aGlzLnB5cGlWZXJzaW9ufWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hdmVuRGVwZW5kZW5jeSgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXZlblZlcnNpb247XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVWZXJzaW9uKG1vZHVsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAobW9kdWxlID09PSAnY2RrOHMtY2xpJykge1xuICAgICAgbW9kdWxlID0gJy4uLy4uLy4uLyc7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICByZXR1cm4gcmVxdWlyZShgJHttb2R1bGV9L3BhY2thZ2UuanNvbmApLnZlcnNpb247XG4gIH1cbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBDb21tYW5kKCk7XG4iXX0=
package/package.json CHANGED
@@ -15,6 +15,11 @@
15
15
  "default": "npx projen default",
16
16
  "eject": "npx projen eject",
17
17
  "eslint": "npx projen eslint",
18
+ "integ:init": "npx projen integ:init",
19
+ "integ:init:go-app": "npx projen integ:init:go-app",
20
+ "integ:init:java-app": "npx projen integ:init:java-app",
21
+ "integ:init:python-app": "npx projen integ:init:python-app",
22
+ "integ:init:typescript-app": "npx projen integ:init:typescript-app",
18
23
  "package": "npx projen package",
19
24
  "post-compile": "npx projen post-compile",
20
25
  "post-upgrade": "npx projen post-upgrade",
@@ -36,7 +41,7 @@
36
41
  "organization": false
37
42
  },
38
43
  "devDependencies": {
39
- "@cdk8s/projen-common": "^0.0.18",
44
+ "@cdk8s/projen-common": "^0.0.19",
40
45
  "@types/fs-extra": "^8",
41
46
  "@types/glob": "^7.2.0",
42
47
  "@types/jest": "^26.0.24",
@@ -52,24 +57,25 @@
52
57
  "jest-junit": "^13",
53
58
  "json-schema": "^0.4.0",
54
59
  "npm-check-updates": "^12",
55
- "projen": "^0.58.17",
60
+ "projen": "^0.58.21",
56
61
  "standard-version": "^9",
57
62
  "ts-jest": "^27",
63
+ "ts-node": "^10.8.1",
58
64
  "typescript": "~4.7.4",
59
65
  "typescript-json-schema": "^0.53.1"
60
66
  },
61
67
  "dependencies": {
62
68
  "@types/node": "^12",
63
69
  "ajv": "^8.11.0",
64
- "cdk8s": "^2.3.40",
65
- "cdk8s-plus-22": "^2.0.0-rc.32",
70
+ "cdk8s": "^2.3.41",
71
+ "cdk8s-plus-22": "^2.0.0-rc.36",
66
72
  "codemaker": "^1.61.0",
67
73
  "colors": "1.4.0",
68
- "constructs": "^10.1.42",
74
+ "constructs": "^10.1.43",
69
75
  "fs-extra": "^8",
70
76
  "jsii-pacmak": "^1.61.0",
71
- "jsii-srcmak": "^0.1.603",
72
- "json2jsii": "^0.3.52",
77
+ "jsii-srcmak": "^0.1.604",
78
+ "json2jsii": "^0.3.53",
73
79
  "sscaff": "^1.2.274",
74
80
  "yaml": "2.0.0-11",
75
81
  "yargs": "^15"
@@ -88,7 +94,7 @@
88
94
  },
89
95
  "main": "lib/index.js",
90
96
  "license": "Apache-2.0",
91
- "version": "2.0.34",
97
+ "version": "2.0.37",
92
98
  "jest": {
93
99
  "testMatch": [
94
100
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",
@@ -105,10 +111,12 @@
105
111
  ],
106
112
  "coverageDirectory": "coverage",
107
113
  "coveragePathIgnorePatterns": [
108
- "/node_modules/"
114
+ "/node_modules/",
115
+ "/test/integ/"
109
116
  ],
110
117
  "testPathIgnorePatterns": [
111
- "/node_modules/"
118
+ "/node_modules/",
119
+ "/test/integ/"
112
120
  ],
113
121
  "watchPathIgnorePatterns": [
114
122
  "/node_modules/"
@@ -0,0 +1,103 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { typescript, github } from 'projen';
4
+
5
+ export function addIntegTests(project: typescript.TypeScriptProject) {
6
+
7
+ const integWorkflow = project.github!.addWorkflow('integ');
8
+ integWorkflow.on({ pullRequest: {}, workflowDispatch: {} });
9
+
10
+ const initTask = project.addTask('integ:init');
11
+ initTask.exec(`yarn run ${project.compileTask.name}`);
12
+ initTask.exec(`yarn run ${project.packageTask.name}`);
13
+ initTask.exec(jest('integ/init.test.ts'));
14
+
15
+ const templatesDir = path.join(__dirname, '..', 'templates');
16
+ for (const template of fs.readdirSync(templatesDir)) {
17
+ if (fs.statSync(path.join(templatesDir, template)).isDirectory()) {
18
+ const task = project.addTask(`integ:init:${template}`);
19
+ task.exec(`yarn run ${project.compileTask.name}`);
20
+ task.exec(`yarn run ${project.packageTask.name}`);
21
+ task.exec(jest(`integ/init.test.ts -t ${template}`));
22
+ }
23
+ }
24
+
25
+ // run all init tests on node 14
26
+ integWorkflow.addJob('init', {
27
+ runsOn: ['ubuntu-latest'],
28
+ permissions: { contents: github.workflows.JobPermission.READ },
29
+ steps: runSteps(initTask.name, '14', true, true),
30
+ });
31
+
32
+ // run typescript app on node 16 and 18 as well
33
+ const nodeVersions = [16, 18];
34
+ integWorkflow.addJob('init-typescript-app', {
35
+ runsOn: ['ubuntu-latest'],
36
+ strategy: {
37
+ failFast: false,
38
+ matrix: { domain: { nodeVersion: nodeVersions } },
39
+ },
40
+ permissions: {
41
+ contents: github.workflows.JobPermission.READ,
42
+ },
43
+ steps: runSteps('integ:init:typescript-app', '${{ matrix.nodeVersion }}', false, false),
44
+ });
45
+
46
+ project.autoMerge!.addConditions('status-success=init');
47
+
48
+ for (const nodeVersion of nodeVersions) {
49
+ project.autoMerge!.addConditions(`status-success=init-typescript-app (${nodeVersion})`);
50
+ }
51
+
52
+ }
53
+
54
+ function jest(args: string) {
55
+ // we override 'testPathIgnorePatterns' so that it matches only integration tests
56
+ return `jest --testPathIgnorePatterns "^((?!integ).)*$" --passWithNoTests --all --updateSnapshot --coverageProvider=v8 ${args}`;
57
+ };
58
+
59
+ function runSteps(task: string, nodeVersion: string, python: boolean, go: boolean): github.workflows.JobStep[] {
60
+ const steps: github.workflows.JobStep[] = [
61
+ { uses: 'actions/checkout@v2' },
62
+ {
63
+ name: 'Set up Node.js',
64
+ uses: 'actions/setup-node@v2',
65
+ with: { 'node-version': nodeVersion },
66
+ },
67
+ {
68
+ name: 'Install dependencies',
69
+ run: 'yarn install --frozen-lockfile',
70
+ },
71
+ ];
72
+
73
+ if (python) {
74
+ steps.push({
75
+ name: 'Set up Python 3.x',
76
+ uses: 'actions/setup-python@v2',
77
+ with: {
78
+ 'python-version': '3.x',
79
+ },
80
+ });
81
+ steps.push({
82
+ name: 'Install pipenv',
83
+ run: 'pip install pipenv',
84
+ });
85
+ }
86
+
87
+ if (go) {
88
+ steps.push({
89
+ name: 'Set up Go',
90
+ uses: 'actions/setup-go@v2',
91
+ with: {
92
+ 'go-version': '1.16',
93
+ },
94
+ });
95
+ }
96
+
97
+ steps.push({
98
+ name: 'Run integration tests',
99
+ run: `yarn run ${task}`,
100
+ },
101
+ );
102
+ return steps;
103
+ }
@@ -8,8 +8,8 @@
8
8
  "scripts": {
9
9
  "import": "cdk8s import",
10
10
  "synth": "cdk8s synth",
11
- "compile": "tsc",
12
- "watch": "tsc -w",
11
+ "compile": "./node_modules/typescript/bin/tsc",
12
+ "watch": "./node_modules/typescript/bin/tsc -w",
13
13
  "test": "jest",
14
14
  "build": "npm run compile && npm run test && npm run synth",
15
15
  "upgrade": "npm i cdk8s@latest cdk8s-cli@latest",