@macedon-technologies/batman 1.26.1 → 1.28.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,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SecretHandlerFiles = void 0;
4
+ const projen_1 = require("projen");
5
+ /**
6
+ * Scaffolds the Lambda handler sources used by the generated Secret construct
7
+ * (src/constructs/Secret.ts). Copied from @matthewbonig/secret (MIT).
8
+ *
9
+ * The entry file is deliberately not named *.lambda.ts, so projen's lambda
10
+ * auto-discovery does not generate a second function class for it.
11
+ */
12
+ class SecretHandlerFiles {
13
+ constructor(project) {
14
+ new projen_1.SampleFile(project, 'src/constructs/handler/Secret.Function.ts', {
15
+ contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
16
+ // This file is generated by Batman and is yours to modify.
17
+ import { createSecretValue } from './secret/createSecretValue';
18
+ import { updateSecretValue } from './secret/updateSecretValue';
19
+
20
+ interface CustomResource {
21
+ RequestType: 'Create' | 'Update' | 'Delete';
22
+ LogicalResourceId: string;
23
+ ResourceProperties: any;
24
+ OldResourceProperties?: any;
25
+ PhysicalResourceId?: string;
26
+ }
27
+
28
+ export const handler = async (event: CustomResource) => {
29
+ console.log('Received event:', JSON.stringify(event, null, 2));
30
+
31
+ switch (event.RequestType) {
32
+ case 'Create':
33
+ console.log(\`Create secret value for secret \${event.LogicalResourceId};\`);
34
+ await createSecretValue({
35
+ secretArn: event.ResourceProperties.Secret,
36
+ generateSecretString: event.ResourceProperties.GenerateSecretString,
37
+ });
38
+ break;
39
+ case 'Update':
40
+ console.log('Updating secret with physical id:', event.PhysicalResourceId);
41
+ await updateSecretValue({
42
+ secretArn: event.ResourceProperties.Secret,
43
+ generateSecretString: event.ResourceProperties.GenerateSecretString,
44
+ oldGenerateSecretString: event.OldResourceProperties.GenerateSecretString,
45
+ });
46
+ break;
47
+ case 'Delete':
48
+ console.log('Deleting secret with physical id:', event.PhysicalResourceId);
49
+ console.log('Doing nothing. deleting secrets requires no work at all.');
50
+ break;
51
+ }
52
+ };
53
+ `,
54
+ });
55
+ new projen_1.SampleFile(project, 'src/constructs/handler/secret/client.ts', {
56
+ contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
57
+ // This file is generated by Batman and is yours to modify.
58
+ import { SecretsManager } from '@aws-sdk/client-secrets-manager';
59
+
60
+ export const client = new SecretsManager({});
61
+ `,
62
+ });
63
+ new projen_1.SampleFile(project, 'src/constructs/handler/secret/createSecretValue.ts', {
64
+ contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
65
+ // This file is generated by Batman and is yours to modify.
66
+ import { GetRandomPasswordCommand, PutSecretValueCommand } from '@aws-sdk/client-secrets-manager';
67
+ import { client } from './client';
68
+
69
+ export async function createSecretValue({ generateSecretString, secretArn }: {
70
+ secretArn: any;
71
+ generateSecretString: any;
72
+ }) {
73
+ // since this is a create, we can just write the value as-is...
74
+ const secretValue = JSON.parse(generateSecretString.secretStringTemplate);
75
+ if (generateSecretString.generateStringKey) {
76
+ const randomValue = await client.send(new GetRandomPasswordCommand({
77
+ ExcludeCharacters: generateSecretString.excludeCharacters,
78
+ ExcludeLowercase: generateSecretString.excludeLowercase,
79
+ ExcludeNumbers: generateSecretString.excludeNumbers,
80
+ ExcludePunctuation: generateSecretString.excludePunctuation,
81
+ ExcludeUppercase: generateSecretString.excludeUppercase,
82
+ IncludeSpace: generateSecretString.includeSpace,
83
+ PasswordLength: generateSecretString.passwordLength,
84
+ RequireEachIncludedType: generateSecretString.requireEachIncludedType,
85
+ }));
86
+ secretValue[generateSecretString.generateStringKey] = randomValue.RandomPassword;
87
+ }
88
+
89
+ await client.send(new PutSecretValueCommand({
90
+ SecretId: secretArn,
91
+ SecretString: JSON.stringify(secretValue),
92
+ }));
93
+ }
94
+ `,
95
+ });
96
+ new projen_1.SampleFile(project, 'src/constructs/handler/secret/didRandomPropertiesChange.ts', {
97
+ contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
98
+ // This file is generated by Batman and is yours to modify.
99
+ export function didRandomPropertiesChange(oldGenerateSecretString: any, generateSecretString: any) {
100
+ return oldGenerateSecretString.excludeCharacters !== generateSecretString.excludeCharacters ||
101
+ oldGenerateSecretString.excludeLowercase !== generateSecretString.excludeLowercase ||
102
+ oldGenerateSecretString.excludeNumbers !== generateSecretString.excludeNumbers ||
103
+ oldGenerateSecretString.excludePunctuation !== generateSecretString.excludePunctuation ||
104
+ oldGenerateSecretString.excludeUppercase !== generateSecretString.excludeUppercase ||
105
+ oldGenerateSecretString.includeSpace !== generateSecretString.includeSpace ||
106
+ oldGenerateSecretString.passwordLength !== generateSecretString.passwordLength ||
107
+ oldGenerateSecretString.requireEachIncludedType !== generateSecretString.requireEachIncludedType;
108
+
109
+ }
110
+ `,
111
+ });
112
+ new projen_1.SampleFile(project, 'src/constructs/handler/secret/updateSecretValue.ts', {
113
+ contents: `// Copied from @matthewbonig/secret (MIT, https://github.com/mbonig/secret).
114
+ // This file is generated by Batman and is yours to modify.
115
+ import {
116
+ GetRandomPasswordCommand,
117
+ GetSecretValueCommand,
118
+ PutSecretValueCommand,
119
+ } from '@aws-sdk/client-secrets-manager';
120
+ import { client } from './client';
121
+ import { didRandomPropertiesChange } from './didRandomPropertiesChange';
122
+
123
+ export async function updateSecretValue({ oldGenerateSecretString, generateSecretString, secretArn }: {
124
+ secretArn: any;
125
+ generateSecretString: any;
126
+ oldGenerateSecretString: any;
127
+ }) {
128
+ // let's get the existing value
129
+ const existingSecretValue = await client.send(new GetSecretValueCommand({
130
+ SecretId: secretArn,
131
+ }));
132
+ // and parse the existing value
133
+ let parsedValue: any = {};
134
+
135
+ try {
136
+ parsedValue = JSON.parse(existingSecretValue.SecretString!);
137
+ } catch (err) {
138
+ // the existing value couldn't be parsed, it was probably a random string.
139
+ // let's go ahead and just start fresh then,
140
+ }
141
+
142
+ // now let's check what properties have changed
143
+ const newSecretStringTemplate = JSON.parse(generateSecretString.secretStringTemplate);
144
+ const oldSecretStringTemplate = JSON.parse(oldGenerateSecretString.secretStringTemplate);
145
+ for (const key in newSecretStringTemplate) {
146
+ if (oldSecretStringTemplate[key] === undefined) {
147
+ // ok, so here's something to add...
148
+ parsedValue[key] = newSecretStringTemplate[key];
149
+ }
150
+ if (oldSecretStringTemplate[key] !== newSecretStringTemplate[key]) {
151
+ // ok, so here's something to update...
152
+ parsedValue[key] = newSecretStringTemplate[key];
153
+ }
154
+ }
155
+ for (const key in oldSecretStringTemplate) {
156
+ if (newSecretStringTemplate[key] === undefined) {
157
+ // ok, so here's something to remove...
158
+ delete parsedValue[key];
159
+ }
160
+ }
161
+
162
+ // did anything around the GenerateStringKey change?
163
+ if (didRandomPropertiesChange(oldGenerateSecretString, generateSecretString)
164
+ || generateSecretString.generateStringKey !== oldGenerateSecretString.generateStringKey) {
165
+ const { RandomPassword: newRandomValue } = await client.send(new GetRandomPasswordCommand({
166
+ ExcludeLowercase: generateSecretString.excludeLowercase === 'true',
167
+ ExcludeNumbers: generateSecretString.excludeNumbers === 'true',
168
+ ExcludePunctuation: generateSecretString.excludePunctuation === 'true',
169
+ ExcludeUppercase: generateSecretString.excludeUppercase === 'true',
170
+ IncludeSpace: generateSecretString.includeSpace === 'true',
171
+ PasswordLength: +generateSecretString.passwordLength,
172
+ RequireEachIncludedType: generateSecretString.requireEachIncludedType === 'true',
173
+ }));
174
+ parsedValue[generateSecretString.generateStringKey] = newRandomValue;
175
+ }
176
+
177
+ // update the secret in AWS
178
+ await client.send(new PutSecretValueCommand({
179
+ SecretId: secretArn,
180
+ SecretString: JSON.stringify(parsedValue),
181
+ }));
182
+
183
+ }
184
+ `,
185
+ });
186
+ }
187
+ }
188
+ exports.SecretHandlerFiles = SecretHandlerFiles;
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjcmV0SGFuZGxlckZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NlY3JldEhhbmRsZXJGaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFHcEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBWSxPQUE0QjtRQUN0QyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDJDQUEyQyxFQUFFO1lBQ25FLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQ2Y7U0FDSSxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLHlDQUF5QyxFQUFFO1lBQ2pFLFFBQVEsRUFBRTs7Ozs7Q0FLZjtTQUNJLENBQUMsQ0FBQztRQUVILElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsb0RBQW9ELEVBQUU7WUFDNUUsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QmY7U0FDSSxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDREQUE0RCxFQUFFO1lBQ3BGLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztDQWFmO1NBQ0ksQ0FBQyxDQUFDO1FBRUgsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSxvREFBb0QsRUFBRTtZQUM1RSxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUVmO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkxELGdEQW1MQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcblxuLyoqXG4gKiBTY2FmZm9sZHMgdGhlIExhbWJkYSBoYW5kbGVyIHNvdXJjZXMgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIFNlY3JldCBjb25zdHJ1Y3RcbiAqIChzcmMvY29uc3RydWN0cy9TZWNyZXQudHMpLiBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlUKS5cbiAqXG4gKiBUaGUgZW50cnkgZmlsZSBpcyBkZWxpYmVyYXRlbHkgbm90IG5hbWVkICoubGFtYmRhLnRzLCBzbyBwcm9qZW4ncyBsYW1iZGFcbiAqIGF1dG8tZGlzY292ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIGEgc2Vjb25kIGZ1bmN0aW9uIGNsYXNzIGZvciBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldEhhbmRsZXJGaWxlcyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHApIHtcbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9TZWNyZXQuRnVuY3Rpb24udHMnLCB7XG4gICAgICBjb250ZW50czogYC8vIENvcGllZCBmcm9tIEBtYXR0aGV3Ym9uaWcvc2VjcmV0IChNSVQsIGh0dHBzOi8vZ2l0aHViLmNvbS9tYm9uaWcvc2VjcmV0KS5cbi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgQmF0bWFuIGFuZCBpcyB5b3VycyB0byBtb2RpZnkuXG5pbXBvcnQgeyBjcmVhdGVTZWNyZXRWYWx1ZSB9IGZyb20gJy4vc2VjcmV0L2NyZWF0ZVNlY3JldFZhbHVlJztcbmltcG9ydCB7IHVwZGF0ZVNlY3JldFZhbHVlIH0gZnJvbSAnLi9zZWNyZXQvdXBkYXRlU2VjcmV0VmFsdWUnO1xuXG5pbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2Uge1xuICBSZXF1ZXN0VHlwZTogJ0NyZWF0ZScgfCAnVXBkYXRlJyB8ICdEZWxldGUnO1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICBSZXNvdXJjZVByb3BlcnRpZXM6IGFueTtcbiAgT2xkUmVzb3VyY2VQcm9wZXJ0aWVzPzogYW55O1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKGV2ZW50OiBDdXN0b21SZXNvdXJjZSkgPT4ge1xuICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgZXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcblxuICBzd2l0Y2ggKGV2ZW50LlJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSAnQ3JlYXRlJzpcbiAgICAgIGNvbnNvbGUubG9nKFxcYENyZWF0ZSBzZWNyZXQgdmFsdWUgZm9yIHNlY3JldCBcXCR7ZXZlbnQuTG9naWNhbFJlc291cmNlSWR9O1xcYCk7XG4gICAgICBhd2FpdCBjcmVhdGVTZWNyZXRWYWx1ZSh7XG4gICAgICAgIHNlY3JldEFybjogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlNlY3JldCxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFN0cmluZyxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnVXBkYXRlJzpcbiAgICAgIGNvbnNvbGUubG9nKCdVcGRhdGluZyBzZWNyZXQgd2l0aCBwaHlzaWNhbCBpZDonLCBldmVudC5QaHlzaWNhbFJlc291cmNlSWQpO1xuICAgICAgYXdhaXQgdXBkYXRlU2VjcmV0VmFsdWUoe1xuICAgICAgICBzZWNyZXRBcm46IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5TZWNyZXQsXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuR2VuZXJhdGVTZWNyZXRTdHJpbmcsXG4gICAgICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nOiBldmVudC5PbGRSZXNvdXJjZVByb3BlcnRpZXMuR2VuZXJhdGVTZWNyZXRTdHJpbmcsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICBjb25zb2xlLmxvZygnRGVsZXRpbmcgc2VjcmV0IHdpdGggcGh5c2ljYWwgaWQ6JywgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkKTtcbiAgICAgIGNvbnNvbGUubG9nKCdEb2luZyBub3RoaW5nLiBkZWxldGluZyBzZWNyZXRzIHJlcXVpcmVzIG5vIHdvcmsgYXQgYWxsLicpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5gLFxuICAgIH0pO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgJ3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvc2VjcmV0L2NsaWVudC50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgLy8gQ29waWVkIGZyb20gQG1hdHRoZXdib25pZy9zZWNyZXQgKE1JVCwgaHR0cHM6Ly9naXRodWIuY29tL21ib25pZy9zZWNyZXQpLlxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBCYXRtYW4gYW5kIGlzIHlvdXJzIHRvIG1vZGlmeS5cbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5cbmV4cG9ydCBjb25zdCBjbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXIoe30pO1xuYCxcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL3NlY3JldC9jcmVhdGVTZWNyZXRWYWx1ZS50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgLy8gQ29waWVkIGZyb20gQG1hdHRoZXdib25pZy9zZWNyZXQgKE1JVCwgaHR0cHM6Ly9naXRodWIuY29tL21ib25pZy9zZWNyZXQpLlxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBCYXRtYW4gYW5kIGlzIHlvdXJzIHRvIG1vZGlmeS5cbmltcG9ydCB7IEdldFJhbmRvbVBhc3N3b3JkQ29tbWFuZCwgUHV0U2VjcmV0VmFsdWVDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBjbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZWNyZXRWYWx1ZSh7IGdlbmVyYXRlU2VjcmV0U3RyaW5nLCBzZWNyZXRBcm4gfToge1xuICBzZWNyZXRBcm46IGFueTtcbiAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueTtcbn0pIHtcbiAgLy8gc2luY2UgdGhpcyBpcyBhIGNyZWF0ZSwgd2UgY2FuIGp1c3Qgd3JpdGUgdGhlIHZhbHVlIGFzLWlzLi4uXG4gIGNvbnN0IHNlY3JldFZhbHVlID0gSlNPTi5wYXJzZShnZW5lcmF0ZVNlY3JldFN0cmluZy5zZWNyZXRTdHJpbmdUZW1wbGF0ZSk7XG4gIGlmIChnZW5lcmF0ZVNlY3JldFN0cmluZy5nZW5lcmF0ZVN0cmluZ0tleSkge1xuICAgIGNvbnN0IHJhbmRvbVZhbHVlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFJhbmRvbVBhc3N3b3JkQ29tbWFuZCh7XG4gICAgICBFeGNsdWRlQ2hhcmFjdGVyczogZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUNoYXJhY3RlcnMsXG4gICAgICBFeGNsdWRlTG93ZXJjYXNlOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlTG93ZXJjYXNlLFxuICAgICAgRXhjbHVkZU51bWJlcnM6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVOdW1iZXJzLFxuICAgICAgRXhjbHVkZVB1bmN0dWF0aW9uOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlUHVuY3R1YXRpb24sXG4gICAgICBFeGNsdWRlVXBwZXJjYXNlOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlVXBwZXJjYXNlLFxuICAgICAgSW5jbHVkZVNwYWNlOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5pbmNsdWRlU3BhY2UsXG4gICAgICBQYXNzd29yZExlbmd0aDogZ2VuZXJhdGVTZWNyZXRTdHJpbmcucGFzc3dvcmRMZW5ndGgsXG4gICAgICBSZXF1aXJlRWFjaEluY2x1ZGVkVHlwZTogZ2VuZXJhdGVTZWNyZXRTdHJpbmcucmVxdWlyZUVhY2hJbmNsdWRlZFR5cGUsXG4gICAgfSkpO1xuICAgIHNlY3JldFZhbHVlW2dlbmVyYXRlU2VjcmV0U3RyaW5nLmdlbmVyYXRlU3RyaW5nS2V5XSA9IHJhbmRvbVZhbHVlLlJhbmRvbVBhc3N3b3JkO1xuICB9XG5cbiAgYXdhaXQgY2xpZW50LnNlbmQobmV3IFB1dFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgICBTZWNyZXRTdHJpbmc6IEpTT04uc3RyaW5naWZ5KHNlY3JldFZhbHVlKSxcbiAgfSkpO1xufVxuYCxcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL3NlY3JldC9kaWRSYW5kb21Qcm9wZXJ0aWVzQ2hhbmdlLnRzJywge1xuICAgICAgY29udGVudHM6IGAvLyBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vbWJvbmlnL3NlY3JldCkuXG4vLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IEJhdG1hbiBhbmQgaXMgeW91cnMgdG8gbW9kaWZ5LlxuZXhwb3J0IGZ1bmN0aW9uIGRpZFJhbmRvbVByb3BlcnRpZXNDaGFuZ2Uob2xkR2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueSwgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueSkge1xuICByZXR1cm4gb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUNoYXJhY3RlcnMgIT09IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVDaGFyYWN0ZXJzIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUxvd2VyY2FzZSAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZUxvd2VyY2FzZSB8fFxuICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVOdW1iZXJzICE9PSBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlTnVtYmVycyB8fFxuICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVQdW5jdHVhdGlvbiAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZVB1bmN0dWF0aW9uIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZVVwcGVyY2FzZSAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuZXhjbHVkZVVwcGVyY2FzZSB8fFxuICAgIG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLmluY2x1ZGVTcGFjZSAhPT0gZ2VuZXJhdGVTZWNyZXRTdHJpbmcuaW5jbHVkZVNwYWNlIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcucGFzc3dvcmRMZW5ndGggIT09IGdlbmVyYXRlU2VjcmV0U3RyaW5nLnBhc3N3b3JkTGVuZ3RoIHx8XG4gICAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcucmVxdWlyZUVhY2hJbmNsdWRlZFR5cGUgIT09IGdlbmVyYXRlU2VjcmV0U3RyaW5nLnJlcXVpcmVFYWNoSW5jbHVkZWRUeXBlO1xuXG59XG5gLFxuICAgIH0pO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgJ3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvc2VjcmV0L3VwZGF0ZVNlY3JldFZhbHVlLnRzJywge1xuICAgICAgY29udGVudHM6IGAvLyBDb3BpZWQgZnJvbSBAbWF0dGhld2JvbmlnL3NlY3JldCAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vbWJvbmlnL3NlY3JldCkuXG4vLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IEJhdG1hbiBhbmQgaXMgeW91cnMgdG8gbW9kaWZ5LlxuaW1wb3J0IHtcbiAgR2V0UmFuZG9tUGFzc3dvcmRDb21tYW5kLFxuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIFB1dFNlY3JldFZhbHVlQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBjbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBkaWRSYW5kb21Qcm9wZXJ0aWVzQ2hhbmdlIH0gZnJvbSAnLi9kaWRSYW5kb21Qcm9wZXJ0aWVzQ2hhbmdlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNlY3JldFZhbHVlKHsgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcsIGdlbmVyYXRlU2VjcmV0U3RyaW5nLCBzZWNyZXRBcm4gfToge1xuICBzZWNyZXRBcm46IGFueTtcbiAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueTtcbiAgb2xkR2VuZXJhdGVTZWNyZXRTdHJpbmc6IGFueTtcbn0pIHtcbiAgLy8gbGV0J3MgZ2V0IHRoZSBleGlzdGluZyB2YWx1ZVxuICBjb25zdCBleGlzdGluZ1NlY3JldFZhbHVlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldEFybixcbiAgfSkpO1xuICAvLyBhbmQgcGFyc2UgdGhlIGV4aXN0aW5nIHZhbHVlXG4gIGxldCBwYXJzZWRWYWx1ZTogYW55ID0ge307XG5cbiAgdHJ5IHtcbiAgICBwYXJzZWRWYWx1ZSA9IEpTT04ucGFyc2UoZXhpc3RpbmdTZWNyZXRWYWx1ZS5TZWNyZXRTdHJpbmchKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gdGhlIGV4aXN0aW5nIHZhbHVlIGNvdWxkbid0IGJlIHBhcnNlZCwgaXQgd2FzIHByb2JhYmx5IGEgcmFuZG9tIHN0cmluZy5cbiAgICAvLyBsZXQncyBnbyBhaGVhZCBhbmQganVzdCBzdGFydCBmcmVzaCB0aGVuLFxuICB9XG5cbiAgLy8gbm93IGxldCdzIGNoZWNrIHdoYXQgcHJvcGVydGllcyBoYXZlIGNoYW5nZWRcbiAgY29uc3QgbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGUgPSBKU09OLnBhcnNlKGdlbmVyYXRlU2VjcmV0U3RyaW5nLnNlY3JldFN0cmluZ1RlbXBsYXRlKTtcbiAgY29uc3Qgb2xkU2VjcmV0U3RyaW5nVGVtcGxhdGUgPSBKU09OLnBhcnNlKG9sZEdlbmVyYXRlU2VjcmV0U3RyaW5nLnNlY3JldFN0cmluZ1RlbXBsYXRlKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGUpIHtcbiAgICBpZiAob2xkU2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBvaywgc28gaGVyZSdzIHNvbWV0aGluZyB0byBhZGQuLi5cbiAgICAgIHBhcnNlZFZhbHVlW2tleV0gPSBuZXdTZWNyZXRTdHJpbmdUZW1wbGF0ZVtrZXldO1xuICAgIH1cbiAgICBpZiAob2xkU2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSAhPT0gbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSkge1xuICAgICAgLy8gb2ssIHNvIGhlcmUncyBzb21ldGhpbmcgdG8gdXBkYXRlLi4uXG4gICAgICBwYXJzZWRWYWx1ZVtrZXldID0gbmV3U2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gb2xkU2VjcmV0U3RyaW5nVGVtcGxhdGUpIHtcbiAgICBpZiAobmV3U2VjcmV0U3RyaW5nVGVtcGxhdGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBvaywgc28gaGVyZSdzIHNvbWV0aGluZyB0byByZW1vdmUuLi5cbiAgICAgIGRlbGV0ZSBwYXJzZWRWYWx1ZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRpZCBhbnl0aGluZyBhcm91bmQgdGhlIEdlbmVyYXRlU3RyaW5nS2V5IGNoYW5nZT9cbiAgaWYgKGRpZFJhbmRvbVByb3BlcnRpZXNDaGFuZ2Uob2xkR2VuZXJhdGVTZWNyZXRTdHJpbmcsIGdlbmVyYXRlU2VjcmV0U3RyaW5nKVxuICAgIHx8IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmdlbmVyYXRlU3RyaW5nS2V5ICE9PSBvbGRHZW5lcmF0ZVNlY3JldFN0cmluZy5nZW5lcmF0ZVN0cmluZ0tleSkge1xuICAgIGNvbnN0IHsgUmFuZG9tUGFzc3dvcmQ6IG5ld1JhbmRvbVZhbHVlIH0gPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0UmFuZG9tUGFzc3dvcmRDb21tYW5kKHtcbiAgICAgIEV4Y2x1ZGVMb3dlcmNhc2U6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVMb3dlcmNhc2UgPT09ICd0cnVlJyxcbiAgICAgIEV4Y2x1ZGVOdW1iZXJzOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlTnVtYmVycyA9PT0gJ3RydWUnLFxuICAgICAgRXhjbHVkZVB1bmN0dWF0aW9uOiBnZW5lcmF0ZVNlY3JldFN0cmluZy5leGNsdWRlUHVuY3R1YXRpb24gPT09ICd0cnVlJyxcbiAgICAgIEV4Y2x1ZGVVcHBlcmNhc2U6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLmV4Y2x1ZGVVcHBlcmNhc2UgPT09ICd0cnVlJyxcbiAgICAgIEluY2x1ZGVTcGFjZTogZ2VuZXJhdGVTZWNyZXRTdHJpbmcuaW5jbHVkZVNwYWNlID09PSAndHJ1ZScsXG4gICAgICBQYXNzd29yZExlbmd0aDogK2dlbmVyYXRlU2VjcmV0U3RyaW5nLnBhc3N3b3JkTGVuZ3RoLFxuICAgICAgUmVxdWlyZUVhY2hJbmNsdWRlZFR5cGU6IGdlbmVyYXRlU2VjcmV0U3RyaW5nLnJlcXVpcmVFYWNoSW5jbHVkZWRUeXBlID09PSAndHJ1ZScsXG4gICAgfSkpO1xuICAgIHBhcnNlZFZhbHVlW2dlbmVyYXRlU2VjcmV0U3RyaW5nLmdlbmVyYXRlU3RyaW5nS2V5XSA9IG5ld1JhbmRvbVZhbHVlO1xuICB9XG5cbiAgLy8gdXBkYXRlIHRoZSBzZWNyZXQgaW4gQVdTXG4gIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBQdXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgIFNlY3JldElkOiBzZWNyZXRBcm4sXG4gICAgU2VjcmV0U3RyaW5nOiBKU09OLnN0cmluZ2lmeShwYXJzZWRWYWx1ZSksXG4gIH0pKTtcblxufVxuYCxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,10 @@
1
+ import { NodeProject } from 'projen/lib/javascript';
2
+ /**
3
+ * The extension step of `swamp:bootstrap`: a Node script, so it runs the same
4
+ * under projen's PowerShell 5.1 task shell on Windows as under bash/sh, that
5
+ * pulls every extension at the version pinned in the repo's swamp lockfile.
6
+ * Fully generic — no per-repo parameterization.
7
+ */
8
+ export declare class SoftwareFactoryBootstrap {
9
+ constructor(project: NodeProject);
10
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SoftwareFactoryBootstrap = void 0;
4
+ const projen_1 = require("projen");
5
+ /**
6
+ * The extension step of `swamp:bootstrap`: a Node script, so it runs the same
7
+ * under projen's PowerShell 5.1 task shell on Windows as under bash/sh, that
8
+ * pulls every extension at the version pinned in the repo's swamp lockfile.
9
+ * Fully generic — no per-repo parameterization.
10
+ */
11
+ class SoftwareFactoryBootstrap {
12
+ constructor(project) {
13
+ new projen_1.TextFile(project, 'swamp-bootstrap/pull-extensions.ts', {
14
+ marker: true,
15
+ lines: [
16
+ '/**',
17
+ ' * Pulls each swamp extension at the version pinned in',
18
+ ' * extensions/models/upstream_extensions.json, so a fresh clone runs the',
19
+ ' * same extensions as the rest of the team, including any the repo added',
20
+ ' * itself. A repo with no lockfile yet pulls DEFAULT_EXTENSIONS at their',
21
+ ' * latest stable versions, which creates the lockfile.',
22
+ ' *',
23
+ ' * A pull rewrites the lockfile even at an identical version, and on Windows',
24
+ ' * it writes backslash paths and deletes the committed files it tracks (e.g.',
25
+ ' * .claude/skills/software-factory/). So afterwards the lockfile and every',
26
+ ' * git-tracked file it lists are restored from git.',
27
+ ' */',
28
+ "import { execFileSync } from 'node:child_process';",
29
+ "import { existsSync, readFileSync } from 'node:fs';",
30
+ '',
31
+ "const LOCKFILE = 'extensions/models/upstream_extensions.json';",
32
+ "const DEFAULT_EXTENSIONS = ['@swamp/software-factory', '@webframp/github', '@goodcraft/github'];",
33
+ '',
34
+ 'interface LockfileEntry {',
35
+ ' version: string;',
36
+ ' files?: string[];',
37
+ '}',
38
+ '',
39
+ 'function readLockfile(): Record<string, LockfileEntry> | undefined {',
40
+ ' if (!existsSync(LOCKFILE)) {',
41
+ ' return undefined;',
42
+ ' }',
43
+ " return JSON.parse(readFileSync(LOCKFILE, 'utf8')) as Record<string, LockfileEntry>;",
44
+ '}',
45
+ '',
46
+ 'function run(command: string, args: string[]): string {',
47
+ " return execFileSync(command, args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'inherit'] });",
48
+ '}',
49
+ '',
50
+ 'function pull(extension: string): void {',
51
+ ' console.log(`swamp extension pull ${extension} --force`);',
52
+ " execFileSync('swamp', ['extension', 'pull', extension, '--force'], { stdio: 'inherit' });",
53
+ '}',
54
+ '',
55
+ 'function restoreTrackedFiles(lockfile: Record<string, LockfileEntry>): void {',
56
+ ' const listed = Object.values(lockfile)',
57
+ ' .flatMap((entry) => entry.files ?? [])',
58
+ " .map((file) => file.replace(/\\\\/g, '/'))",
59
+ " .filter((file) => !file.startsWith('.swamp/'));",
60
+ " const tracked = run('git', ['ls-files', '-z', '--', LOCKFILE, ...listed])",
61
+ " .split('\\0')",
62
+ ' .filter(Boolean);',
63
+ ' if (tracked.length > 0) {',
64
+ " run('git', ['checkout', '--', ...tracked]);",
65
+ ' console.log(`Restored ${tracked.length} tracked file(s) from git`);',
66
+ ' }',
67
+ '}',
68
+ '',
69
+ 'function main(): void {',
70
+ ' const lockfile = readLockfile();',
71
+ ' if (!lockfile) {',
72
+ ' console.log(`No ${LOCKFILE} yet: pulling the latest stable software-factory extensions`);',
73
+ ' DEFAULT_EXTENSIONS.forEach(pull);',
74
+ ' return;',
75
+ ' }',
76
+ '',
77
+ ' for (const [name, entry] of Object.entries(lockfile)) {',
78
+ ' pull(`${name}@${entry.version}`);',
79
+ ' }',
80
+ ' restoreTrackedFiles(lockfile);',
81
+ '}',
82
+ '',
83
+ 'main();',
84
+ ],
85
+ });
86
+ new projen_1.JsonFile(project, 'swamp-bootstrap/tsconfig.json', {
87
+ marker: false,
88
+ obj: {
89
+ extends: '../tsconfig.json',
90
+ compilerOptions: {
91
+ noEmit: true,
92
+ rootDir: '.',
93
+ },
94
+ include: ['*.ts'],
95
+ exclude: ['node_modules'],
96
+ },
97
+ });
98
+ }
99
+ }
100
+ exports.SoftwareFactoryBootstrap = SoftwareFactoryBootstrap;
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5Qm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NvZnR3YXJlRmFjdG9yeUJvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBNEM7QUFHNUM7Ozs7O0dBS0c7QUFDSCxNQUFhLHdCQUF3QjtJQUNuQyxZQUFZLE9BQW9CO1FBQzlCLElBQUksaUJBQVEsQ0FBQyxPQUFPLEVBQUUsb0NBQW9DLEVBQUU7WUFDMUQsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUU7Z0JBQ0wsS0FBSztnQkFDTCx3REFBd0Q7Z0JBQ3hELDBFQUEwRTtnQkFDMUUsMEVBQTBFO2dCQUMxRSwwRUFBMEU7Z0JBQzFFLHdEQUF3RDtnQkFDeEQsSUFBSTtnQkFDSiw4RUFBOEU7Z0JBQzlFLDhFQUE4RTtnQkFDOUUsNEVBQTRFO2dCQUM1RSxxREFBcUQ7Z0JBQ3JELEtBQUs7Z0JBQ0wsb0RBQW9EO2dCQUNwRCxxREFBcUQ7Z0JBQ3JELEVBQUU7Z0JBQ0YsZ0VBQWdFO2dCQUNoRSxrR0FBa0c7Z0JBQ2xHLEVBQUU7Z0JBQ0YsMkJBQTJCO2dCQUMzQixvQkFBb0I7Z0JBQ3BCLHFCQUFxQjtnQkFDckIsR0FBRztnQkFDSCxFQUFFO2dCQUNGLHNFQUFzRTtnQkFDdEUsZ0NBQWdDO2dCQUNoQyx1QkFBdUI7Z0JBQ3ZCLEtBQUs7Z0JBQ0wsdUZBQXVGO2dCQUN2RixHQUFHO2dCQUNILEVBQUU7Z0JBQ0YseURBQXlEO2dCQUN6RCxtR0FBbUc7Z0JBQ25HLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRiwwQ0FBMEM7Z0JBQzFDLDZEQUE2RDtnQkFDN0QsNkZBQTZGO2dCQUM3RixHQUFHO2dCQUNILEVBQUU7Z0JBQ0YsK0VBQStFO2dCQUMvRSwwQ0FBMEM7Z0JBQzFDLDRDQUE0QztnQkFDNUMsZ0RBQWdEO2dCQUNoRCxxREFBcUQ7Z0JBQ3JELDZFQUE2RTtnQkFDN0UsbUJBQW1CO2dCQUNuQix1QkFBdUI7Z0JBQ3ZCLDZCQUE2QjtnQkFDN0IsaURBQWlEO2dCQUNqRCx5RUFBeUU7Z0JBQ3pFLEtBQUs7Z0JBQ0wsR0FBRztnQkFDSCxFQUFFO2dCQUNGLHlCQUF5QjtnQkFDekIsb0NBQW9DO2dCQUNwQyxvQkFBb0I7Z0JBQ3BCLCtGQUErRjtnQkFDL0YsdUNBQXVDO2dCQUN2QyxhQUFhO2dCQUNiLEtBQUs7Z0JBQ0wsRUFBRTtnQkFDRiwyREFBMkQ7Z0JBQzNELHVDQUF1QztnQkFDdkMsS0FBSztnQkFDTCxrQ0FBa0M7Z0JBQ2xDLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixTQUFTO2FBQ1Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFRLENBQUMsT0FBTyxFQUFFLCtCQUErQixFQUFFO1lBQ3JELE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFO2dCQUNILE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLGVBQWUsRUFBRTtvQkFDZixNQUFNLEVBQUUsSUFBSTtvQkFDWixPQUFPLEVBQUUsR0FBRztpQkFDYjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQzthQUMxQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpGRCw0REF5RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKc29uRmlsZSwgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuXG4vKipcbiAqIFRoZSBleHRlbnNpb24gc3RlcCBvZiBgc3dhbXA6Ym9vdHN0cmFwYDogYSBOb2RlIHNjcmlwdCwgc28gaXQgcnVucyB0aGUgc2FtZVxuICogdW5kZXIgcHJvamVuJ3MgUG93ZXJTaGVsbCA1LjEgdGFzayBzaGVsbCBvbiBXaW5kb3dzIGFzIHVuZGVyIGJhc2gvc2gsIHRoYXRcbiAqIHB1bGxzIGV2ZXJ5IGV4dGVuc2lvbiBhdCB0aGUgdmVyc2lvbiBwaW5uZWQgaW4gdGhlIHJlcG8ncyBzd2FtcCBsb2NrZmlsZS5cbiAqIEZ1bGx5IGdlbmVyaWMg4oCUIG5vIHBlci1yZXBvIHBhcmFtZXRlcml6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUZhY3RvcnlCb290c3RyYXAge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCkge1xuICAgIG5ldyBUZXh0RmlsZShwcm9qZWN0LCAnc3dhbXAtYm9vdHN0cmFwL3B1bGwtZXh0ZW5zaW9ucy50cycsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICcvKionLFxuICAgICAgICAnICogUHVsbHMgZWFjaCBzd2FtcCBleHRlbnNpb24gYXQgdGhlIHZlcnNpb24gcGlubmVkIGluJyxcbiAgICAgICAgJyAqIGV4dGVuc2lvbnMvbW9kZWxzL3Vwc3RyZWFtX2V4dGVuc2lvbnMuanNvbiwgc28gYSBmcmVzaCBjbG9uZSBydW5zIHRoZScsXG4gICAgICAgICcgKiBzYW1lIGV4dGVuc2lvbnMgYXMgdGhlIHJlc3Qgb2YgdGhlIHRlYW0sIGluY2x1ZGluZyBhbnkgdGhlIHJlcG8gYWRkZWQnLFxuICAgICAgICAnICogaXRzZWxmLiBBIHJlcG8gd2l0aCBubyBsb2NrZmlsZSB5ZXQgcHVsbHMgREVGQVVMVF9FWFRFTlNJT05TIGF0IHRoZWlyJyxcbiAgICAgICAgJyAqIGxhdGVzdCBzdGFibGUgdmVyc2lvbnMsIHdoaWNoIGNyZWF0ZXMgdGhlIGxvY2tmaWxlLicsXG4gICAgICAgICcgKicsXG4gICAgICAgICcgKiBBIHB1bGwgcmV3cml0ZXMgdGhlIGxvY2tmaWxlIGV2ZW4gYXQgYW4gaWRlbnRpY2FsIHZlcnNpb24sIGFuZCBvbiBXaW5kb3dzJyxcbiAgICAgICAgJyAqIGl0IHdyaXRlcyBiYWNrc2xhc2ggcGF0aHMgYW5kIGRlbGV0ZXMgdGhlIGNvbW1pdHRlZCBmaWxlcyBpdCB0cmFja3MgKGUuZy4nLFxuICAgICAgICAnICogLmNsYXVkZS9za2lsbHMvc29mdHdhcmUtZmFjdG9yeS8pLiBTbyBhZnRlcndhcmRzIHRoZSBsb2NrZmlsZSBhbmQgZXZlcnknLFxuICAgICAgICAnICogZ2l0LXRyYWNrZWQgZmlsZSBpdCBsaXN0cyBhcmUgcmVzdG9yZWQgZnJvbSBnaXQuJyxcbiAgICAgICAgJyAqLycsXG4gICAgICAgIFwiaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcIixcbiAgICAgICAgXCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcIixcbiAgICAgICAgJycsXG4gICAgICAgIFwiY29uc3QgTE9DS0ZJTEUgPSAnZXh0ZW5zaW9ucy9tb2RlbHMvdXBzdHJlYW1fZXh0ZW5zaW9ucy5qc29uJztcIixcbiAgICAgICAgXCJjb25zdCBERUZBVUxUX0VYVEVOU0lPTlMgPSBbJ0Bzd2FtcC9zb2Z0d2FyZS1mYWN0b3J5JywgJ0B3ZWJmcmFtcC9naXRodWInLCAnQGdvb2RjcmFmdC9naXRodWInXTtcIixcbiAgICAgICAgJycsXG4gICAgICAgICdpbnRlcmZhY2UgTG9ja2ZpbGVFbnRyeSB7JyxcbiAgICAgICAgJyAgdmVyc2lvbjogc3RyaW5nOycsXG4gICAgICAgICcgIGZpbGVzPzogc3RyaW5nW107JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIHJlYWRMb2NrZmlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBMb2NrZmlsZUVudHJ5PiB8IHVuZGVmaW5lZCB7JyxcbiAgICAgICAgJyAgaWYgKCFleGlzdHNTeW5jKExPQ0tGSUxFKSkgeycsXG4gICAgICAgICcgICAgcmV0dXJuIHVuZGVmaW5lZDsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgXCIgIHJldHVybiBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhMT0NLRklMRSwgJ3V0ZjgnKSkgYXMgUmVjb3JkPHN0cmluZywgTG9ja2ZpbGVFbnRyeT47XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiBydW4oY29tbWFuZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7JyxcbiAgICAgICAgXCIgIHJldHVybiBleGVjRmlsZVN5bmMoY29tbWFuZCwgYXJncywgeyBlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdpbmhlcml0J10gfSk7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiBwdWxsKGV4dGVuc2lvbjogc3RyaW5nKTogdm9pZCB7JyxcbiAgICAgICAgJyAgY29uc29sZS5sb2coYHN3YW1wIGV4dGVuc2lvbiBwdWxsICR7ZXh0ZW5zaW9ufSAtLWZvcmNlYCk7JyxcbiAgICAgICAgXCIgIGV4ZWNGaWxlU3luYygnc3dhbXAnLCBbJ2V4dGVuc2lvbicsICdwdWxsJywgZXh0ZW5zaW9uLCAnLS1mb3JjZSddLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XCIsXG4gICAgICAgICd9JyxcbiAgICAgICAgJycsXG4gICAgICAgICdmdW5jdGlvbiByZXN0b3JlVHJhY2tlZEZpbGVzKGxvY2tmaWxlOiBSZWNvcmQ8c3RyaW5nLCBMb2NrZmlsZUVudHJ5Pik6IHZvaWQgeycsXG4gICAgICAgICcgIGNvbnN0IGxpc3RlZCA9IE9iamVjdC52YWx1ZXMobG9ja2ZpbGUpJyxcbiAgICAgICAgJyAgICAuZmxhdE1hcCgoZW50cnkpID0+IGVudHJ5LmZpbGVzID8/IFtdKScsXG4gICAgICAgIFwiICAgIC5tYXAoKGZpbGUpID0+IGZpbGUucmVwbGFjZSgvXFxcXFxcXFwvZywgJy8nKSlcIixcbiAgICAgICAgXCIgICAgLmZpbHRlcigoZmlsZSkgPT4gIWZpbGUuc3RhcnRzV2l0aCgnLnN3YW1wLycpKTtcIixcbiAgICAgICAgXCIgIGNvbnN0IHRyYWNrZWQgPSBydW4oJ2dpdCcsIFsnbHMtZmlsZXMnLCAnLXonLCAnLS0nLCBMT0NLRklMRSwgLi4ubGlzdGVkXSlcIixcbiAgICAgICAgXCIgICAgLnNwbGl0KCdcXFxcMCcpXCIsXG4gICAgICAgICcgICAgLmZpbHRlcihCb29sZWFuKTsnLFxuICAgICAgICAnICBpZiAodHJhY2tlZC5sZW5ndGggPiAwKSB7JyxcbiAgICAgICAgXCIgICAgcnVuKCdnaXQnLCBbJ2NoZWNrb3V0JywgJy0tJywgLi4udHJhY2tlZF0pO1wiLFxuICAgICAgICAnICAgIGNvbnNvbGUubG9nKGBSZXN0b3JlZCAke3RyYWNrZWQubGVuZ3RofSB0cmFja2VkIGZpbGUocykgZnJvbSBnaXRgKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2Z1bmN0aW9uIG1haW4oKTogdm9pZCB7JyxcbiAgICAgICAgJyAgY29uc3QgbG9ja2ZpbGUgPSByZWFkTG9ja2ZpbGUoKTsnLFxuICAgICAgICAnICBpZiAoIWxvY2tmaWxlKSB7JyxcbiAgICAgICAgJyAgICBjb25zb2xlLmxvZyhgTm8gJHtMT0NLRklMRX0geWV0OiBwdWxsaW5nIHRoZSBsYXRlc3Qgc3RhYmxlIHNvZnR3YXJlLWZhY3RvcnkgZXh0ZW5zaW9uc2ApOycsXG4gICAgICAgICcgICAgREVGQVVMVF9FWFRFTlNJT05TLmZvckVhY2gocHVsbCk7JyxcbiAgICAgICAgJyAgICByZXR1cm47JyxcbiAgICAgICAgJyAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICBmb3IgKGNvbnN0IFtuYW1lLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobG9ja2ZpbGUpKSB7JyxcbiAgICAgICAgJyAgICBwdWxsKGAke25hbWV9QCR7ZW50cnkudmVyc2lvbn1gKTsnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJyAgcmVzdG9yZVRyYWNrZWRGaWxlcyhsb2NrZmlsZSk7JyxcbiAgICAgICAgJ30nLFxuICAgICAgICAnJyxcbiAgICAgICAgJ21haW4oKTsnLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIG5ldyBKc29uRmlsZShwcm9qZWN0LCAnc3dhbXAtYm9vdHN0cmFwL3RzY29uZmlnLmpzb24nLCB7XG4gICAgICBtYXJrZXI6IGZhbHNlLFxuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6ICcuLi90c2NvbmZpZy5qc29uJyxcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgbm9FbWl0OiB0cnVlLFxuICAgICAgICAgIHJvb3REaXI6ICcuJyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogWycqLnRzJ10sXG4gICAgICAgIGV4Y2x1ZGU6IFsnbm9kZV9tb2R1bGVzJ10sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -39,11 +39,13 @@ export interface SoftwareFactoryFilesOptions {
39
39
  * the repo is already initialized), so it's wired into the project's
40
40
  * `install`/`install:ci` tasks and runs automatically on every install,
41
41
  * guarded so it's a silent no-op on a machine without `swamp` on PATH (e.g.
42
- * CI). The extension pulls and vault creation are one-time, not idempotent
42
+ * CI). The extension pulls (at the versions pinned in the repo's
43
+ * `extensions/models/upstream_extensions.json`) and vault creation are one-time, not idempotent
43
44
  * in a way that's safe to repeat on every install, so they stay in the
44
45
  * `swamp:bootstrap` task this construct adds. Only exman's own authored
45
46
  * config (the factory's state machine, the architecture-rule engine, the
46
- * attestation mechanism, the OpenSpec task-completion gate, and the 3 swamp
47
+ * attestation mechanism, the OpenSpec task-completion gate, the lockfile-driven
48
+ * extension pull, and the 3 swamp
47
49
  * workflows that wire them together) is templated.
48
50
  */
49
51
  export declare class SoftwareFactoryFiles {
@@ -4,6 +4,7 @@ exports.SoftwareFactoryFiles = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const SoftwareFactoryArchitectureRules_1 = require("./SoftwareFactoryArchitectureRules");
6
6
  const SoftwareFactoryAttestation_1 = require("./SoftwareFactoryAttestation");
7
+ const SoftwareFactoryBootstrap_1 = require("./SoftwareFactoryBootstrap");
7
8
  const SoftwareFactoryModels_1 = require("./SoftwareFactoryModels");
8
9
  const SoftwareFactoryOpenSpecGates_1 = require("./SoftwareFactoryOpenSpecGates");
9
10
  const SoftwareFactoryWorkflows_1 = require("./SoftwareFactoryWorkflows");
@@ -23,15 +24,17 @@ const DEFAULT_GITHUB_OWNER = 'macedon-technologies';
23
24
  * the repo is already initialized), so it's wired into the project's
24
25
  * `install`/`install:ci` tasks and runs automatically on every install,
25
26
  * guarded so it's a silent no-op on a machine without `swamp` on PATH (e.g.
26
- * CI). The extension pulls and vault creation are one-time, not idempotent
27
+ * CI). The extension pulls (at the versions pinned in the repo's
28
+ * `extensions/models/upstream_extensions.json`) and vault creation are one-time, not idempotent
27
29
  * in a way that's safe to repeat on every install, so they stay in the
28
30
  * `swamp:bootstrap` task this construct adds. Only exman's own authored
29
31
  * config (the factory's state machine, the architecture-rule engine, the
30
- * attestation mechanism, the OpenSpec task-completion gate, and the 3 swamp
32
+ * attestation mechanism, the OpenSpec task-completion gate, the lockfile-driven
33
+ * extension pull, and the 3 swamp
31
34
  * workflows that wire them together) is templated.
32
35
  */
33
36
  class SoftwareFactoryFiles {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.26.1" };
37
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.28.0" };
35
38
  constructor(project, options) {
36
39
  const { repoName, actionVersions } = options;
37
40
  const githubOwner = options.githubOwner || DEFAULT_GITHUB_OWNER;
@@ -51,6 +54,7 @@ class SoftwareFactoryFiles {
51
54
  new SoftwareFactoryAttestation_1.SoftwareFactoryAttestation(project, { repoName });
52
55
  new SoftwareFactoryOpenSpecGates_1.SoftwareFactoryOpenSpecGates(project);
53
56
  new SoftwareFactoryWorkflows_1.SoftwareFactoryWorkflows(project, { repoName, actionVersions });
57
+ new SoftwareFactoryBootstrap_1.SoftwareFactoryBootstrap(project);
54
58
  project.addTask('validate:architecture', {
55
59
  description: 'Run the architecture rule registry (architecture-rules/rules.json) against the repo',
56
60
  exec: 'ts-node --project architecture-rules/tsconfig.json architecture-rules/check.ts',
@@ -70,11 +74,9 @@ class SoftwareFactoryFiles {
70
74
  receiveArgs: true,
71
75
  });
72
76
  project.addTask('swamp:bootstrap', {
73
- description: 'One-time setup: pull the software-factory/github extensions and create the secrets vault (swamp init itself already runs on every install)',
77
+ description: 'One-time setup: pull the swamp extensions at the versions pinned in extensions/models/upstream_extensions.json and create the secrets vault (swamp init itself already runs on every install)',
74
78
  steps: [
75
- { exec: 'swamp extension pull @swamp/software-factory' },
76
- { exec: 'swamp extension pull @webframp/github' },
77
- { exec: 'swamp extension pull @goodcraft/github' },
79
+ { exec: 'ts-node --project swamp-bootstrap/tsconfig.json swamp-bootstrap/pull-extensions.ts' },
78
80
  { exec: `swamp vault create local_encryption ${secretsVault}` },
79
81
  {
80
82
  exec: `echo "Next: swamp vault put ${secretsVault} GITHUB_TOKEN --refresh-from 'gh auth token'"`,
@@ -100,4 +102,4 @@ class SoftwareFactoryFiles {
100
102
  }
101
103
  }
102
104
  exports.SoftwareFactoryFiles = SoftwareFactoryFiles;
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5RmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU29mdHdhcmVGYWN0b3J5RmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHlGQUFzRjtBQUN0Riw2RUFBMEU7QUFDMUUsbUVBQWdFO0FBQ2hFLGlGQUE4RTtBQUM5RSx5RUFBc0U7QUFHdEUsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQThCcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsb0JBQW9COztJQUMvQixZQUFZLE9BQW9CLEVBQUUsT0FBb0M7UUFDcEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsVUFBVSxDQUFDO1FBQzNDLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSxNQUFNLGFBQWEsR0FBRyxpRUFBaUUsQ0FBQztRQUV4RixJQUFJLDZDQUFxQixDQUFDLE9BQU8sRUFBRTtZQUNqQyxRQUFRO1lBQ1IsV0FBVztZQUNYLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFFSCxJQUFJLG1FQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlDLElBQUksdURBQTBCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLDJEQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLElBQUksbURBQXdCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFcEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRTtZQUN2QyxXQUFXLEVBQUUscUZBQXFGO1lBQ2xHLElBQUksRUFBRSxnRkFBZ0Y7U0FDdkYsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRTtZQUMvQyxXQUFXLEVBQUUsMkZBQTJGO1lBQ3hHLElBQUksRUFBRSx1RkFBdUY7WUFDN0YsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtZQUN0QyxXQUFXLEVBQUUsd0dBQXdHO1lBQ3JILElBQUksRUFBRSxxRUFBcUU7U0FDNUUsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtZQUNwQyxXQUFXLEVBQUUseUhBQXlIO1lBQ3RJLElBQUksRUFBRSxtRUFBbUU7WUFDekUsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUNqQyxXQUFXLEVBQUUsNElBQTRJO1lBQ3pKLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBRTtnQkFDeEQsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUU7Z0JBQ2pELEVBQUUsSUFBSSxFQUFFLHdDQUF3QyxFQUFFO2dCQUNsRCxFQUFFLElBQUksRUFBRSx1Q0FBdUMsWUFBWSxFQUFFLEVBQUU7Z0JBQy9EO29CQUNFLElBQUksRUFBRSwrQkFBK0IsWUFBWSwrQ0FBK0M7aUJBQ2pHO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxELHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLG1FQUFtRTtRQUNuRSxvREFBb0Q7UUFDcEQsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O0FBOUVILG9EQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeUFyY2hpdGVjdHVyZVJ1bGVzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlBcmNoaXRlY3R1cmVSdWxlcyc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlBdHRlc3RhdGlvbiB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5QXR0ZXN0YXRpb24nO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5TW9kZWxzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlNb2RlbHMnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5T3BlblNwZWNHYXRlcyB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5T3BlblNwZWNHYXRlcyc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3MgfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeVdvcmtmbG93cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvblZlcnNpb25zIH0gZnJvbSAnLi9Xb3JrZmxvd0FjdGlvblZlcnNpb25zJztcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfT1dORVIgPSAnbWFjZWRvbi10ZWNobm9sb2dpZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnR3YXJlRmFjdG9yeUZpbGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFyZSByZXBvIG5hbWUgKGUuZy4gYGV4cGVuc2UtdHJhY2tlcmApLCB1c2VkIHRvIGRlcml2ZSB0aGUgZmFjdG9yeSdzXG4gICAqIG1vZGVsIG5hbWVzIChgPHJlcG9OYW1lPi1mYWN0b3J5YCwgYDxyZXBvTmFtZT4taXNzdWVzYCwgYDxyZXBvTmFtZT4tcHJgLFxuICAgKiBgPHJlcG9OYW1lPi1zaGVsbCpgKSBhbmQgdmF1bHQgbmFtZSAoYDxyZXBvTmFtZT4tc2VjcmV0c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBvcmcvdXNlciB0aGUgcmVwbyBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgJ21hY2Vkb24tdGVjaG5vbG9naWVzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViT3duZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBicmFuY2ggdGhlIGZhY3Rvcnkgb3BlbnMgcHVsbCByZXF1ZXN0cyBhZ2FpbnN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbWFpbidcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBmb3IgdGhlIHBpbm5lZCBhY3Rpb24gdmVyc2lvbnMgdXNlZCBieSBgdmVyaWZ5LWF0dGVzdGF0aW9uLnltbGAuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25WZXJzaW9ucz86IFdvcmtmbG93QWN0aW9uVmVyc2lvbnM7XG59XG5cbi8qKlxuICogQmFja3BvcnRzIGV4bWFuJ3Mgc3dhbXAgXCJzb2Z0d2FyZSBmYWN0b3J5XCIgcGF0dGVyblxuICogKG1hY2Vkb24tdGVjaG5vbG9naWVzL2V4bWFuIzEzKSBhcyBnZW5lcmF0ZWQgc2NhZmZvbGRpbmc6IGFcbiAqIGBAc3dhbXAvc29mdHdhcmUtZmFjdG9yeWAgc3RhdGUgbWFjaGluZSB0aGF0IGRyaXZlcyBhIEdpdEh1YiBpc3N1ZSBmcm9tXG4gKiBpbnRha2UgdGhyb3VnaCBhbiBvcGVuZWQgUFIsIGVuZm9yY2luZyBPcGVuU3BlYyB1c2FnZSwgYW4gYXJjaGl0ZWN0dXJlXG4gKiBydWxlIHJlZ2lzdHJ5LCBhbmQgYSBwcmUtUFIgdmVyaWZpY2F0aW9uIGdhdGUgd2hvc2UgYXR0ZXN0YXRpb24gaXNcbiAqIHJlLWNoZWNrZWQgYXQgbWVyZ2UgdGltZS5cbiAqXG4gKiBXaGF0IHN3YW1wIGl0c2VsZiB3b3VsZCBnZW5lcmF0ZSAoZXh0ZW5zaW9uIGRvY3MgcHVsbGVkIHZpYVxuICogYHN3YW1wIGV4dGVuc2lvbiBwdWxsYCwgYC5zd2FtcC55YW1sYCwgdGhlIHZhdWx0LCBhbmQgdGhlIFwic3dhbXAgbWFuYWdlZFxuICogc2VjdGlvblwiIGluIENMQVVERS5tZCkgaXMgZGVsaWJlcmF0ZWx5IE5PVCBoYW5kLXRlbXBsYXRlZCBoZXJlIOKAlCB0aG9zZSBhcmVcbiAqIHByb2R1Y2VkIGJ5IHRoZSByZWFsIGBzd2FtcGAgQ0xJLiBgc3dhbXAgaW5pdGAgaXMgaWRlbXBvdGVudCAoYSBuby1vcCBpZlxuICogdGhlIHJlcG8gaXMgYWxyZWFkeSBpbml0aWFsaXplZCksIHNvIGl0J3Mgd2lyZWQgaW50byB0aGUgcHJvamVjdCdzXG4gKiBgaW5zdGFsbGAvYGluc3RhbGw6Y2lgIHRhc2tzIGFuZCBydW5zIGF1dG9tYXRpY2FsbHkgb24gZXZlcnkgaW5zdGFsbCxcbiAqIGd1YXJkZWQgc28gaXQncyBhIHNpbGVudCBuby1vcCBvbiBhIG1hY2hpbmUgd2l0aG91dCBgc3dhbXBgIG9uIFBBVEggKGUuZy5cbiAqIENJKS4gVGhlIGV4dGVuc2lvbiBwdWxscyBhbmQgdmF1bHQgY3JlYXRpb24gYXJlIG9uZS10aW1lLCBub3QgaWRlbXBvdGVudFxuICogaW4gYSB3YXkgdGhhdCdzIHNhZmUgdG8gcmVwZWF0IG9uIGV2ZXJ5IGluc3RhbGwsIHNvIHRoZXkgc3RheSBpbiB0aGVcbiAqIGBzd2FtcDpib290c3RyYXBgIHRhc2sgdGhpcyBjb25zdHJ1Y3QgYWRkcy4gT25seSBleG1hbidzIG93biBhdXRob3JlZFxuICogY29uZmlnICh0aGUgZmFjdG9yeSdzIHN0YXRlIG1hY2hpbmUsIHRoZSBhcmNoaXRlY3R1cmUtcnVsZSBlbmdpbmUsIHRoZVxuICogYXR0ZXN0YXRpb24gbWVjaGFuaXNtLCB0aGUgT3BlblNwZWMgdGFzay1jb21wbGV0aW9uIGdhdGUsIGFuZCB0aGUgMyBzd2FtcFxuICogd29ya2Zsb3dzIHRoYXQgd2lyZSB0aGVtIHRvZ2V0aGVyKSBpcyB0ZW1wbGF0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUZhY3RvcnlGaWxlcyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBTb2Z0d2FyZUZhY3RvcnlGaWxlc09wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlcG9OYW1lLCBhY3Rpb25WZXJzaW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnaXRodWJPd25lciA9IG9wdGlvbnMuZ2l0aHViT3duZXIgfHwgREVGQVVMVF9HSVRIVUJfT1dORVI7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IG9wdGlvbnMuYmFzZUJyYW5jaCB8fCAnbWFpbic7XG4gICAgY29uc3Qgc2VjcmV0c1ZhdWx0ID0gYCR7cmVwb05hbWV9LXNlY3JldHNgO1xuICAgIC8vIEEgc2luZ2xlIHJlZGlyZWN0IG9ubHk6IHByb2plbidzIGJ1aWx0LWluIGNyb3NzLXBsYXRmb3JtIHRhc2sgc2hlbGxcbiAgICAvLyAoZGF4KSByZWplY3RzIGEgY29tbWFuZCB3aXRoIG1vcmUgdGhhbiBvbmUgcmVkaXJlY3QgKGUuZy4gY29tYmluaW5nXG4gICAgLy8gYD4vZGV2L251bGxgIHdpdGggYDI+JjFgKSB3aXRoIFwiTXVsdGlwbGUgcmVkaXJlY3RzIGFyZSBjdXJyZW50bHkgbm90XG4gICAgLy8gc3VwcG9ydGVkXCIg4oCUIGNvbmZpcm1lZCBieSBkb2dmb29kaW5nIHRoaXMgY29uc3RydWN0IG9uIHRoaXMgdmVyeSByZXBvLlxuICAgIGNvbnN0IHN3YW1wSW5pdFN0ZXAgPSAnY29tbWFuZCAtdiBzd2FtcCA+L2Rldi9udWxsICYmIHN3YW1wIGluaXQgLS10b29sIGNsYXVkZSB8fCB0cnVlJztcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlNb2RlbHMocHJvamVjdCwge1xuICAgICAgcmVwb05hbWUsXG4gICAgICBnaXRodWJPd25lcixcbiAgICAgIGJhc2VCcmFuY2gsXG4gICAgfSk7XG5cbiAgICBuZXcgU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMocHJvamVjdCk7XG5cbiAgICBuZXcgU29mdHdhcmVGYWN0b3J5QXR0ZXN0YXRpb24ocHJvamVjdCwgeyByZXBvTmFtZSB9KTtcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlPcGVuU3BlY0dhdGVzKHByb2plY3QpO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeVdvcmtmbG93cyhwcm9qZWN0LCB7IHJlcG9OYW1lLCBhY3Rpb25WZXJzaW9ucyB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygndmFsaWRhdGU6YXJjaGl0ZWN0dXJlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdSdW4gdGhlIGFyY2hpdGVjdHVyZSBydWxlIHJlZ2lzdHJ5IChhcmNoaXRlY3R1cmUtcnVsZXMvcnVsZXMuanNvbikgYWdhaW5zdCB0aGUgcmVwbycsXG4gICAgICBleGVjOiAndHMtbm9kZSAtLXByb2plY3QgYXJjaGl0ZWN0dXJlLXJ1bGVzL3RzY29uZmlnLmpzb24gYXJjaGl0ZWN0dXJlLXJ1bGVzL2NoZWNrLnRzJyxcbiAgICB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnb3BlbnNwZWM6Y2hlY2stdGFza3MtY29tcGxldGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0ZhaWwgdW5sZXNzIGV2ZXJ5IHRhc2sgaW4gdGhlIG5hbWVkIE9wZW5TcGVjIGNoYW5nZSBpcyBjb21wbGV0ZSAodXNhZ2U6IC0tIDxjaGFuZ2Utc2x1Zz4pJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBvcGVuc3BlYy1nYXRlcy90c2NvbmZpZy5qc29uIG9wZW5zcGVjLWdhdGVzL2NoZWNrLXRhc2tzLWNvbXBsZXRlLnRzJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdhdHRlc3RhdGlvbjptYW5pZmVzdCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJpbnQgU0hBMjU2IGNoZWNrc3VtcyBvZiB0aGUgZmlsZXMgYSBQUiBhdHRlc3RhdGlvbiBpcyB2ZXJpZmllZCBhZ2FpbnN0IChzZWUgYXR0ZXN0YXRpb24vbWFuaWZlc3QudHMpJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBhdHRlc3RhdGlvbi90c2NvbmZpZy5qc29uIGF0dGVzdGF0aW9uL21hbmlmZXN0LnRzJyxcbiAgICB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnYXR0ZXN0YXRpb246dmVyaWZ5Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYSBQUlxcJ3MgZW1iZWRkZWQgYXR0ZXN0YXRpb24tbWFuaWZlc3QgYWdhaW5zdCB0aGUgY3VycmVudCBjaGVja291dCAodXNhZ2U6IC0tIC0tYm9keS1maWxlIDxwYXRoPiAtLWNvbW1pdCA8c2hhPiknLFxuICAgICAgZXhlYzogJ3RzLW5vZGUgLS1wcm9qZWN0IGF0dGVzdGF0aW9uL3RzY29uZmlnLmpzb24gYXR0ZXN0YXRpb24vdmVyaWZ5LnRzJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdzd2FtcDpib290c3RyYXAnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ09uZS10aW1lIHNldHVwOiBwdWxsIHRoZSBzb2Z0d2FyZS1mYWN0b3J5L2dpdGh1YiBleHRlbnNpb25zIGFuZCBjcmVhdGUgdGhlIHNlY3JldHMgdmF1bHQgKHN3YW1wIGluaXQgaXRzZWxmIGFscmVhZHkgcnVucyBvbiBldmVyeSBpbnN0YWxsKScsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7IGV4ZWM6ICdzd2FtcCBleHRlbnNpb24gcHVsbCBAc3dhbXAvc29mdHdhcmUtZmFjdG9yeScgfSxcbiAgICAgICAgeyBleGVjOiAnc3dhbXAgZXh0ZW5zaW9uIHB1bGwgQHdlYmZyYW1wL2dpdGh1YicgfSxcbiAgICAgICAgeyBleGVjOiAnc3dhbXAgZXh0ZW5zaW9uIHB1bGwgQGdvb2RjcmFmdC9naXRodWInIH0sXG4gICAgICAgIHsgZXhlYzogYHN3YW1wIHZhdWx0IGNyZWF0ZSBsb2NhbF9lbmNyeXB0aW9uICR7c2VjcmV0c1ZhdWx0fWAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IGBlY2hvIFwiTmV4dDogc3dhbXAgdmF1bHQgcHV0ICR7c2VjcmV0c1ZhdWx0fSBHSVRIVUJfVE9LRU4gLS1yZWZyZXNoLWZyb20gJ2doIGF1dGggdG9rZW4nXCJgLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIGBzd2FtcCBpbml0YCBpcyBzYWZlIHRvIHJlLXJ1biAoaWRlbXBvdGVudCB3aGVuIGFscmVhZHkgaW5pdGlhbGl6ZWQpLFxuICAgIC8vIHNvIGV2ZXJ5IGluc3RhbGwga2VlcHMgdGhlIHJlcG8gaW5pdGlhbGl6ZWQgd2l0aG91dCBhIHNlcGFyYXRlIG1hbnVhbFxuICAgIC8vIHN0ZXAg4oCUIGluY2x1ZGluZyBvbiBhIGZyZXNoIGNsb25lIHRoYXQgaGFzbid0IHJ1biBzd2FtcDpib290c3RyYXAgeWV0LlxuICAgIHByb2plY3QucGFja2FnZS5pbnN0YWxsVGFzay5leGVjKHN3YW1wSW5pdFN0ZXApO1xuICAgIHByb2plY3QucGFja2FnZS5pbnN0YWxsQ2lUYXNrLmV4ZWMoc3dhbXBJbml0U3RlcCk7XG5cbiAgICAvLyBNaXJyb3JzIHRoZSBwYXR0ZXJucyBgc3dhbXAgaW5pdGAgaXRzZWxmIHdvdWxkIGFwcGVuZCB0byAuZ2l0aWdub3JlLlxuICAgIC8vIHByb2plbidzIElnbm9yZUZpbGUgZnVsbHkgcmVnZW5lcmF0ZXMgLmdpdGlnbm9yZSBmcm9tIGl0cyBvd24gdHJhY2tlZFxuICAgIC8vIGVudHJpZXMgb24gZXZlcnkgc3ludGgsIHNvIGFueXRoaW5nIGBzd2FtcCBpbml0YCBhcHBlbmRzIG91dC1vZi1iYW5kXG4gICAgLy8gZ2V0cyBzaWxlbnRseSB3aXBlZCBieSB0aGUgbmV4dCBgbnB4IHByb2plbmAgcnVuIChjYXVnaHQgYnkgQ0knc1xuICAgIC8vIHNlbGYtbXV0YXRpb24gY2hlY2spIHVubGVzcyBpdCdzIGFsc28gYWRkZWQgaGVyZS5cbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLnN3YW1wLycpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuc3dhbXAtc291cmNlcy55YW1sJyk7XG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5jbGF1ZGUvd29ya3RyZWVzLycpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuY2xhdWRlL3NldHRpbmdzLmxvY2FsLmpzb24nKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLmNsYXVkZS9zY2hlZHVsZWRfdGFza3MubG9jaycpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuY2xhdWRlL3NjaGVkdWxlZF90YXNrcy5qc29uJyk7XG4gIH1cbn1cbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5RmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU29mdHdhcmVGYWN0b3J5RmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHlGQUFzRjtBQUN0Riw2RUFBMEU7QUFDMUUseUVBQXNFO0FBQ3RFLG1FQUFnRTtBQUNoRSxpRkFBOEU7QUFDOUUseUVBQXNFO0FBR3RFLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7QUE4QnBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsb0JBQW9COztJQUMvQixZQUFZLE9BQW9CLEVBQUUsT0FBb0M7UUFDcEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsVUFBVSxDQUFDO1FBQzNDLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSxNQUFNLGFBQWEsR0FBRyxpRUFBaUUsQ0FBQztRQUV4RixJQUFJLDZDQUFxQixDQUFDLE9BQU8sRUFBRTtZQUNqQyxRQUFRO1lBQ1IsV0FBVztZQUNYLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFFSCxJQUFJLG1FQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlDLElBQUksdURBQTBCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLDJEQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLElBQUksbURBQXdCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFcEUsSUFBSSxtREFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0QyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFO1lBQ3ZDLFdBQVcsRUFBRSxxRkFBcUY7WUFDbEcsSUFBSSxFQUFFLGdGQUFnRjtTQUN2RixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDLCtCQUErQixFQUFFO1lBQy9DLFdBQVcsRUFBRSwyRkFBMkY7WUFDeEcsSUFBSSxFQUFFLHVGQUF1RjtZQUM3RixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO1lBQ3RDLFdBQVcsRUFBRSx3R0FBd0c7WUFDckgsSUFBSSxFQUFFLHFFQUFxRTtTQUM1RSxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1lBQ3BDLFdBQVcsRUFBRSx5SEFBeUg7WUFDdEksSUFBSSxFQUFFLG1FQUFtRTtZQUN6RSxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ2pDLFdBQVcsRUFBRSwrTEFBK0w7WUFDNU0sS0FBSyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLG9GQUFvRixFQUFFO2dCQUM5RixFQUFFLElBQUksRUFBRSx1Q0FBdUMsWUFBWSxFQUFFLEVBQUU7Z0JBQy9EO29CQUNFLElBQUksRUFBRSwrQkFBK0IsWUFBWSwrQ0FBK0M7aUJBQ2pHO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxELHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLG1FQUFtRTtRQUNuRSxvREFBb0Q7UUFDcEQsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O0FBOUVILG9EQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeUFyY2hpdGVjdHVyZVJ1bGVzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlBcmNoaXRlY3R1cmVSdWxlcyc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlBdHRlc3RhdGlvbiB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5QXR0ZXN0YXRpb24nO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5Qm9vdHN0cmFwIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlCb290c3RyYXAnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5TW9kZWxzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlNb2RlbHMnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5T3BlblNwZWNHYXRlcyB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5T3BlblNwZWNHYXRlcyc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3MgfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeVdvcmtmbG93cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvblZlcnNpb25zIH0gZnJvbSAnLi9Xb3JrZmxvd0FjdGlvblZlcnNpb25zJztcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfT1dORVIgPSAnbWFjZWRvbi10ZWNobm9sb2dpZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnR3YXJlRmFjdG9yeUZpbGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFyZSByZXBvIG5hbWUgKGUuZy4gYGV4cGVuc2UtdHJhY2tlcmApLCB1c2VkIHRvIGRlcml2ZSB0aGUgZmFjdG9yeSdzXG4gICAqIG1vZGVsIG5hbWVzIChgPHJlcG9OYW1lPi1mYWN0b3J5YCwgYDxyZXBvTmFtZT4taXNzdWVzYCwgYDxyZXBvTmFtZT4tcHJgLFxuICAgKiBgPHJlcG9OYW1lPi1zaGVsbCpgKSBhbmQgdmF1bHQgbmFtZSAoYDxyZXBvTmFtZT4tc2VjcmV0c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBvcmcvdXNlciB0aGUgcmVwbyBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgJ21hY2Vkb24tdGVjaG5vbG9naWVzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViT3duZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBicmFuY2ggdGhlIGZhY3Rvcnkgb3BlbnMgcHVsbCByZXF1ZXN0cyBhZ2FpbnN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbWFpbidcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBmb3IgdGhlIHBpbm5lZCBhY3Rpb24gdmVyc2lvbnMgdXNlZCBieSBgdmVyaWZ5LWF0dGVzdGF0aW9uLnltbGAuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25WZXJzaW9ucz86IFdvcmtmbG93QWN0aW9uVmVyc2lvbnM7XG59XG5cbi8qKlxuICogQmFja3BvcnRzIGV4bWFuJ3Mgc3dhbXAgXCJzb2Z0d2FyZSBmYWN0b3J5XCIgcGF0dGVyblxuICogKG1hY2Vkb24tdGVjaG5vbG9naWVzL2V4bWFuIzEzKSBhcyBnZW5lcmF0ZWQgc2NhZmZvbGRpbmc6IGFcbiAqIGBAc3dhbXAvc29mdHdhcmUtZmFjdG9yeWAgc3RhdGUgbWFjaGluZSB0aGF0IGRyaXZlcyBhIEdpdEh1YiBpc3N1ZSBmcm9tXG4gKiBpbnRha2UgdGhyb3VnaCBhbiBvcGVuZWQgUFIsIGVuZm9yY2luZyBPcGVuU3BlYyB1c2FnZSwgYW4gYXJjaGl0ZWN0dXJlXG4gKiBydWxlIHJlZ2lzdHJ5LCBhbmQgYSBwcmUtUFIgdmVyaWZpY2F0aW9uIGdhdGUgd2hvc2UgYXR0ZXN0YXRpb24gaXNcbiAqIHJlLWNoZWNrZWQgYXQgbWVyZ2UgdGltZS5cbiAqXG4gKiBXaGF0IHN3YW1wIGl0c2VsZiB3b3VsZCBnZW5lcmF0ZSAoZXh0ZW5zaW9uIGRvY3MgcHVsbGVkIHZpYVxuICogYHN3YW1wIGV4dGVuc2lvbiBwdWxsYCwgYC5zd2FtcC55YW1sYCwgdGhlIHZhdWx0LCBhbmQgdGhlIFwic3dhbXAgbWFuYWdlZFxuICogc2VjdGlvblwiIGluIENMQVVERS5tZCkgaXMgZGVsaWJlcmF0ZWx5IE5PVCBoYW5kLXRlbXBsYXRlZCBoZXJlIOKAlCB0aG9zZSBhcmVcbiAqIHByb2R1Y2VkIGJ5IHRoZSByZWFsIGBzd2FtcGAgQ0xJLiBgc3dhbXAgaW5pdGAgaXMgaWRlbXBvdGVudCAoYSBuby1vcCBpZlxuICogdGhlIHJlcG8gaXMgYWxyZWFkeSBpbml0aWFsaXplZCksIHNvIGl0J3Mgd2lyZWQgaW50byB0aGUgcHJvamVjdCdzXG4gKiBgaW5zdGFsbGAvYGluc3RhbGw6Y2lgIHRhc2tzIGFuZCBydW5zIGF1dG9tYXRpY2FsbHkgb24gZXZlcnkgaW5zdGFsbCxcbiAqIGd1YXJkZWQgc28gaXQncyBhIHNpbGVudCBuby1vcCBvbiBhIG1hY2hpbmUgd2l0aG91dCBgc3dhbXBgIG9uIFBBVEggKGUuZy5cbiAqIENJKS4gVGhlIGV4dGVuc2lvbiBwdWxscyAoYXQgdGhlIHZlcnNpb25zIHBpbm5lZCBpbiB0aGUgcmVwbydzXG4gKiBgZXh0ZW5zaW9ucy9tb2RlbHMvdXBzdHJlYW1fZXh0ZW5zaW9ucy5qc29uYCkgYW5kIHZhdWx0IGNyZWF0aW9uIGFyZSBvbmUtdGltZSwgbm90IGlkZW1wb3RlbnRcbiAqIGluIGEgd2F5IHRoYXQncyBzYWZlIHRvIHJlcGVhdCBvbiBldmVyeSBpbnN0YWxsLCBzbyB0aGV5IHN0YXkgaW4gdGhlXG4gKiBgc3dhbXA6Ym9vdHN0cmFwYCB0YXNrIHRoaXMgY29uc3RydWN0IGFkZHMuIE9ubHkgZXhtYW4ncyBvd24gYXV0aG9yZWRcbiAqIGNvbmZpZyAodGhlIGZhY3RvcnkncyBzdGF0ZSBtYWNoaW5lLCB0aGUgYXJjaGl0ZWN0dXJlLXJ1bGUgZW5naW5lLCB0aGVcbiAqIGF0dGVzdGF0aW9uIG1lY2hhbmlzbSwgdGhlIE9wZW5TcGVjIHRhc2stY29tcGxldGlvbiBnYXRlLCB0aGUgbG9ja2ZpbGUtZHJpdmVuXG4gKiBleHRlbnNpb24gcHVsbCwgYW5kIHRoZSAzIHN3YW1wXG4gKiB3b3JrZmxvd3MgdGhhdCB3aXJlIHRoZW0gdG9nZXRoZXIpIGlzIHRlbXBsYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvZnR3YXJlRmFjdG9yeUZpbGVzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IFNvZnR3YXJlRmFjdG9yeUZpbGVzT3B0aW9ucykge1xuICAgIGNvbnN0IHsgcmVwb05hbWUsIGFjdGlvblZlcnNpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGdpdGh1Yk93bmVyID0gb3B0aW9ucy5naXRodWJPd25lciB8fCBERUZBVUxUX0dJVEhVQl9PV05FUjtcbiAgICBjb25zdCBiYXNlQnJhbmNoID0gb3B0aW9ucy5iYXNlQnJhbmNoIHx8ICdtYWluJztcbiAgICBjb25zdCBzZWNyZXRzVmF1bHQgPSBgJHtyZXBvTmFtZX0tc2VjcmV0c2A7XG4gICAgLy8gQSBzaW5nbGUgcmVkaXJlY3Qgb25seTogcHJvamVuJ3MgYnVpbHQtaW4gY3Jvc3MtcGxhdGZvcm0gdGFzayBzaGVsbFxuICAgIC8vIChkYXgpIHJlamVjdHMgYSBjb21tYW5kIHdpdGggbW9yZSB0aGFuIG9uZSByZWRpcmVjdCAoZS5nLiBjb21iaW5pbmdcbiAgICAvLyBgPi9kZXYvbnVsbGAgd2l0aCBgMj4mMWApIHdpdGggXCJNdWx0aXBsZSByZWRpcmVjdHMgYXJlIGN1cnJlbnRseSBub3RcbiAgICAvLyBzdXBwb3J0ZWRcIiDigJQgY29uZmlybWVkIGJ5IGRvZ2Zvb2RpbmcgdGhpcyBjb25zdHJ1Y3Qgb24gdGhpcyB2ZXJ5IHJlcG8uXG4gICAgY29uc3Qgc3dhbXBJbml0U3RlcCA9ICdjb21tYW5kIC12IHN3YW1wID4vZGV2L251bGwgJiYgc3dhbXAgaW5pdCAtLXRvb2wgY2xhdWRlIHx8IHRydWUnO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeU1vZGVscyhwcm9qZWN0LCB7XG4gICAgICByZXBvTmFtZSxcbiAgICAgIGdpdGh1Yk93bmVyLFxuICAgICAgYmFzZUJyYW5jaCxcbiAgICB9KTtcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlBcmNoaXRlY3R1cmVSdWxlcyhwcm9qZWN0KTtcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlBdHRlc3RhdGlvbihwcm9qZWN0LCB7IHJlcG9OYW1lIH0pO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeU9wZW5TcGVjR2F0ZXMocHJvamVjdCk7XG5cbiAgICBuZXcgU29mdHdhcmVGYWN0b3J5V29ya2Zsb3dzKHByb2plY3QsIHsgcmVwb05hbWUsIGFjdGlvblZlcnNpb25zIH0pO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeUJvb3RzdHJhcChwcm9qZWN0KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygndmFsaWRhdGU6YXJjaGl0ZWN0dXJlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdSdW4gdGhlIGFyY2hpdGVjdHVyZSBydWxlIHJlZ2lzdHJ5IChhcmNoaXRlY3R1cmUtcnVsZXMvcnVsZXMuanNvbikgYWdhaW5zdCB0aGUgcmVwbycsXG4gICAgICBleGVjOiAndHMtbm9kZSAtLXByb2plY3QgYXJjaGl0ZWN0dXJlLXJ1bGVzL3RzY29uZmlnLmpzb24gYXJjaGl0ZWN0dXJlLXJ1bGVzL2NoZWNrLnRzJyxcbiAgICB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnb3BlbnNwZWM6Y2hlY2stdGFza3MtY29tcGxldGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0ZhaWwgdW5sZXNzIGV2ZXJ5IHRhc2sgaW4gdGhlIG5hbWVkIE9wZW5TcGVjIGNoYW5nZSBpcyBjb21wbGV0ZSAodXNhZ2U6IC0tIDxjaGFuZ2Utc2x1Zz4pJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBvcGVuc3BlYy1nYXRlcy90c2NvbmZpZy5qc29uIG9wZW5zcGVjLWdhdGVzL2NoZWNrLXRhc2tzLWNvbXBsZXRlLnRzJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdhdHRlc3RhdGlvbjptYW5pZmVzdCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJpbnQgU0hBMjU2IGNoZWNrc3VtcyBvZiB0aGUgZmlsZXMgYSBQUiBhdHRlc3RhdGlvbiBpcyB2ZXJpZmllZCBhZ2FpbnN0IChzZWUgYXR0ZXN0YXRpb24vbWFuaWZlc3QudHMpJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBhdHRlc3RhdGlvbi90c2NvbmZpZy5qc29uIGF0dGVzdGF0aW9uL21hbmlmZXN0LnRzJyxcbiAgICB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnYXR0ZXN0YXRpb246dmVyaWZ5Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYSBQUlxcJ3MgZW1iZWRkZWQgYXR0ZXN0YXRpb24tbWFuaWZlc3QgYWdhaW5zdCB0aGUgY3VycmVudCBjaGVja291dCAodXNhZ2U6IC0tIC0tYm9keS1maWxlIDxwYXRoPiAtLWNvbW1pdCA8c2hhPiknLFxuICAgICAgZXhlYzogJ3RzLW5vZGUgLS1wcm9qZWN0IGF0dGVzdGF0aW9uL3RzY29uZmlnLmpzb24gYXR0ZXN0YXRpb24vdmVyaWZ5LnRzJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdzd2FtcDpib290c3RyYXAnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ09uZS10aW1lIHNldHVwOiBwdWxsIHRoZSBzd2FtcCBleHRlbnNpb25zIGF0IHRoZSB2ZXJzaW9ucyBwaW5uZWQgaW4gZXh0ZW5zaW9ucy9tb2RlbHMvdXBzdHJlYW1fZXh0ZW5zaW9ucy5qc29uIGFuZCBjcmVhdGUgdGhlIHNlY3JldHMgdmF1bHQgKHN3YW1wIGluaXQgaXRzZWxmIGFscmVhZHkgcnVucyBvbiBldmVyeSBpbnN0YWxsKScsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7IGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBzd2FtcC1ib290c3RyYXAvdHNjb25maWcuanNvbiBzd2FtcC1ib290c3RyYXAvcHVsbC1leHRlbnNpb25zLnRzJyB9LFxuICAgICAgICB7IGV4ZWM6IGBzd2FtcCB2YXVsdCBjcmVhdGUgbG9jYWxfZW5jcnlwdGlvbiAke3NlY3JldHNWYXVsdH1gIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBleGVjOiBgZWNobyBcIk5leHQ6IHN3YW1wIHZhdWx0IHB1dCAke3NlY3JldHNWYXVsdH0gR0lUSFVCX1RPS0VOIC0tcmVmcmVzaC1mcm9tICdnaCBhdXRoIHRva2VuJ1wiYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBgc3dhbXAgaW5pdGAgaXMgc2FmZSB0byByZS1ydW4gKGlkZW1wb3RlbnQgd2hlbiBhbHJlYWR5IGluaXRpYWxpemVkKSxcbiAgICAvLyBzbyBldmVyeSBpbnN0YWxsIGtlZXBzIHRoZSByZXBvIGluaXRpYWxpemVkIHdpdGhvdXQgYSBzZXBhcmF0ZSBtYW51YWxcbiAgICAvLyBzdGVwIOKAlCBpbmNsdWRpbmcgb24gYSBmcmVzaCBjbG9uZSB0aGF0IGhhc24ndCBydW4gc3dhbXA6Ym9vdHN0cmFwIHlldC5cbiAgICBwcm9qZWN0LnBhY2thZ2UuaW5zdGFsbFRhc2suZXhlYyhzd2FtcEluaXRTdGVwKTtcbiAgICBwcm9qZWN0LnBhY2thZ2UuaW5zdGFsbENpVGFzay5leGVjKHN3YW1wSW5pdFN0ZXApO1xuXG4gICAgLy8gTWlycm9ycyB0aGUgcGF0dGVybnMgYHN3YW1wIGluaXRgIGl0c2VsZiB3b3VsZCBhcHBlbmQgdG8gLmdpdGlnbm9yZS5cbiAgICAvLyBwcm9qZW4ncyBJZ25vcmVGaWxlIGZ1bGx5IHJlZ2VuZXJhdGVzIC5naXRpZ25vcmUgZnJvbSBpdHMgb3duIHRyYWNrZWRcbiAgICAvLyBlbnRyaWVzIG9uIGV2ZXJ5IHN5bnRoLCBzbyBhbnl0aGluZyBgc3dhbXAgaW5pdGAgYXBwZW5kcyBvdXQtb2YtYmFuZFxuICAgIC8vIGdldHMgc2lsZW50bHkgd2lwZWQgYnkgdGhlIG5leHQgYG5weCBwcm9qZW5gIHJ1biAoY2F1Z2h0IGJ5IENJJ3NcbiAgICAvLyBzZWxmLW11dGF0aW9uIGNoZWNrKSB1bmxlc3MgaXQncyBhbHNvIGFkZGVkIGhlcmUuXG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5zd2FtcC8nKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLnN3YW1wLXNvdXJjZXMueWFtbCcpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuY2xhdWRlL3dvcmt0cmVlcy8nKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLmNsYXVkZS9zZXR0aW5ncy5sb2NhbC5qc29uJyk7XG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5jbGF1ZGUvc2NoZWR1bGVkX3Rhc2tzLmxvY2snKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLmNsYXVkZS9zY2hlZHVsZWRfdGFza3MuanNvbicpO1xuICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class StagingDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.26.1" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.28.0" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);