@nikovirtala/projen-constructs 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,21 +8,26 @@ Projen project types with standard configuration for consistent project setup ac
8
8
  pnpm add -D @nikovirtala/projen-constructs projen constructs
9
9
  ```
10
10
 
11
- ## Standard Configuration
11
+ ## Features
12
+
13
+ - **Standard Configuration**: Opinionated defaults for author, release branch, package manager, Node.js, TypeScript, and tooling
14
+ - **Automatic Project Type Discovery**: Generates `ProjectType` enum from Projen's JSII manifest (18 project types)
15
+ - **Component System**: Reusable components (Vitest, Mise, TypeDoc, LocalStack, etc.)
16
+ - **Code Generation**: `ProjectGenerator` creates project classes with standard configuration
17
+ - **ES Modules**: TypeScript and CDK App projects use ES modules (JSII uses CommonJS)
18
+ - **Code Quality**: Biome for formatting and linting
19
+ - **Testing**: Vitest with coverage
20
+ - **Auto-merge**: Enabled with auto-approve
21
+ - **VSCode**: Recommended extensions and settings
22
+ - **mise**: Node version management
12
23
 
13
- All project types include:
24
+ ## Standard Configuration
14
25
 
15
26
  - **Author**: Niko Virtala (niko.virtala@hey.com)
16
27
  - **Default Release Branch**: main
17
28
  - **Package Manager**: pnpm 10
18
29
  - **Node Version**: 22.21.1
19
30
  - **TypeScript**: 5.9.3
20
- - **Module Type**: ES modules (TypeScript and CDK App projects only; JSII projects use CommonJS)
21
- - **Code Quality**: Biome for formatting and linting
22
- - **Testing**: Vitest
23
- - **Auto-merge**: Enabled with auto-approve
24
- - **VSCode**: Recommended extensions and settings
25
- - **mise**: Node version management (via Homebrew)
26
31
  - **CDK Version**: 2.223.0 (for CDK projects)
27
32
  - **JSII Version**: ~5.9.3 (for JSII projects)
28
33
 
@@ -235,3 +240,27 @@ new LambdaFunctionCodeBundle(project, {
235
240
  extension: ".lambda.ts",
236
241
  });
237
242
  ```
243
+
244
+ #### ProjectGenerator
245
+
246
+ Generates TypeScript project classes with standard configuration.
247
+
248
+ ```typescript
249
+ import { ProjectGenerator, ProjectType } from "@nikovirtala/projen-constructs";
250
+
251
+ new ProjectGenerator(project, {
252
+ name: "TypeScriptProject",
253
+ projectType: ProjectType.TYPESCRIPT,
254
+ filePath: "./src/projects/typescript.generated.ts",
255
+ components: [
256
+ { componentClass: Mise },
257
+ { componentClass: Vitest }, // Auto-detects VitestOptions from JSII manifest
258
+ ],
259
+ });
260
+ ```
261
+
262
+ Features:
263
+ - Automatically generates the `ProjectType` enum from Projen's JSII manifest
264
+ - Auto-detects component options types from JSII manifests
265
+ - Validates paths to prevent directory traversal attacks
266
+ - Structured error handling with custom error classes
@@ -1,78 +1,399 @@
1
+ /**
2
+ * TypeDoc configuration
3
+ *
4
+ * @see https://typedoc.org/options/
5
+ */
1
6
  export interface TypeDocConfiguration {
7
+ /**
8
+ * Specifies the entry points to be documented by TypeDoc.
9
+ *
10
+ * @see https://typedoc.org/documents/Options.Input.html#entrypoints
11
+ */
2
12
  readonly entryPoints?: string[];
13
+ /**
14
+ * Specifies the strategy to be used to convert entry points into documentation.
15
+ *
16
+ * @see https://typedoc.org/documents/Options.Input.html#entrypointstrategy
17
+ */
3
18
  readonly entryPointStrategy?: EntryPointStrategy;
19
+ /**
20
+ * Define patterns to be excluded when expanding directories.
21
+ *
22
+ * @see https://typedoc.org/documents/Options.Input.html#exclude
23
+ */
4
24
  readonly exclude?: string[];
25
+ /**
26
+ * Prevent externally resolved symbols from being documented.
27
+ *
28
+ * @see https://typedoc.org/documents/Options.Input.html#excludeexternals
29
+ */
5
30
  readonly excludeExternals?: boolean;
31
+ /**
32
+ * Prevent private members from being included in the generated documentation.
33
+ *
34
+ * @see https://typedoc.org/documents/Options.Input.html#excludeprivate
35
+ */
6
36
  readonly excludePrivate?: boolean;
37
+ /**
38
+ * Prevent protected members from being included in the generated documentation.
39
+ *
40
+ * @see https://typedoc.org/documents/Options.Input.html#excludeprotected
41
+ */
7
42
  readonly excludeProtected?: boolean;
43
+ /**
44
+ * Prevent symbols that are not exported from being documented.
45
+ *
46
+ * @see https://typedoc.org/documents/Options.Input.html#excludeinternal
47
+ */
8
48
  readonly excludeInternal?: boolean;
49
+ /**
50
+ * Specifies the output directory the documentation should be written to.
51
+ *
52
+ * @see https://typedoc.org/documents/Options.Output.html#out
53
+ */
9
54
  readonly out?: string;
55
+ /**
56
+ * Specify the location the documentation should be written to.
57
+ *
58
+ * @see https://typedoc.org/documents/Options.Output.html#json
59
+ */
10
60
  readonly json?: string;
61
+ /**
62
+ * Specify a theme name to use.
63
+ *
64
+ * @see https://typedoc.org/documents/Options.Output.html#theme
65
+ */
11
66
  readonly theme?: string;
67
+ /**
68
+ * Specify the base path for all urls.
69
+ *
70
+ * @see https://typedoc.org/documents/Options.Output.html#basepath
71
+ */
12
72
  readonly basePath?: string;
73
+ /**
74
+ * Set the name of the project that will be used in the header of the template.
75
+ *
76
+ * @see https://typedoc.org/documents/Options.Output.html#name
77
+ */
13
78
  readonly name?: string;
79
+ /**
80
+ * Prevent TypeDoc from cleaning the output directory specified with --out.
81
+ *
82
+ * @see https://typedoc.org/documents/Options.Output.html#cleanoutputdir
83
+ */
14
84
  readonly cleanOutputDir?: boolean;
85
+ /**
86
+ * Specify the location to look for included documents.
87
+ *
88
+ * @see https://typedoc.org/documents/Options.Output.html#includes
89
+ */
15
90
  readonly includes?: string;
91
+ /**
92
+ * Specify the location with media files that should be copied to the output directory.
93
+ *
94
+ * @see https://typedoc.org/documents/Options.Output.html#media
95
+ */
16
96
  readonly media?: string;
97
+ /**
98
+ * Specify the location and filename a .tsbuildinfo file should be written to.
99
+ *
100
+ * @see https://typedoc.org/documents/Options.Input.html#tsbuildinfo
101
+ */
17
102
  readonly tsBuildInfo?: string;
103
+ /**
104
+ * Specify a TypeScript config file that should be used to load TypeScript configuration.
105
+ *
106
+ * @see https://typedoc.org/documents/Options.Input.html#tsconfig
107
+ */
18
108
  readonly tsconfig?: string;
109
+ /**
110
+ * Specify the logger that should be used.
111
+ *
112
+ * @see https://typedoc.org/documents/Options.Other.html#loglevel
113
+ */
19
114
  readonly logLevel?: LogLevel;
115
+ /**
116
+ * Specify the sort strategy for documented values.
117
+ *
118
+ * @see https://typedoc.org/documents/Options.Organization.html#sort
119
+ */
20
120
  readonly sort?: string[];
121
+ /**
122
+ * Specify the sort strategy for static and instance members.
123
+ *
124
+ * @see https://typedoc.org/documents/Options.Organization.html#sortentrypoints
125
+ */
21
126
  readonly sortEntryPoints?: boolean;
127
+ /**
128
+ * Specify the documentation mode TypeDoc should use.
129
+ *
130
+ * @see https://typedoc.org/documents/Options.Comments.html#commentstyle
131
+ */
22
132
  readonly commentStyle?: CommentStyle;
133
+ /**
134
+ * Specify the default visibility for members without a visibility tag.
135
+ *
136
+ * @see https://typedoc.org/documents/Options.Comments.html#defaultvisibility
137
+ */
23
138
  readonly defaultVisibility?: Visibility;
139
+ /**
140
+ * Specify the default category for reflections without a category.
141
+ *
142
+ * @see https://typedoc.org/documents/Options.Organization.html#defaultcategory
143
+ */
24
144
  readonly defaultCategory?: string;
145
+ /**
146
+ * Specify the default group for reflections without a group.
147
+ *
148
+ * @see https://typedoc.org/documents/Options.Organization.html#defaultgroup
149
+ */
25
150
  readonly defaultGroup?: string;
151
+ /**
152
+ * Specify the categories that will be used to group reflections.
153
+ *
154
+ * @see https://typedoc.org/documents/Options.Organization.html#categorizebygroup
155
+ */
26
156
  readonly categorizeByGroup?: boolean;
157
+ /**
158
+ * Specify the search group boosts.
159
+ *
160
+ * @see https://typedoc.org/documents/Options.Organization.html#searchgroupboosts
161
+ */
27
162
  readonly searchGroupBoosts?: Record<string, number>;
163
+ /**
164
+ * Specify the search category boosts.
165
+ *
166
+ * @see https://typedoc.org/documents/Options.Organization.html#searchcategoryboosts
167
+ */
28
168
  readonly searchCategoryBoosts?: Record<string, number>;
169
+ /**
170
+ * Specify the readme file that should be displayed on the index page.
171
+ *
172
+ * @see https://typedoc.org/documents/Options.Input.html#readme
173
+ */
29
174
  readonly readme?: string;
175
+ /**
176
+ * Specify the package.json file that should be used to determine the package name.
177
+ *
178
+ * @see https://typedoc.org/documents/Options.Input.html#packagejson
179
+ */
30
180
  readonly packageJson?: string;
181
+ /**
182
+ * Specify the git revision that should be used to link to source files.
183
+ *
184
+ * @see https://typedoc.org/documents/Options.Comments.html#gitrevision
185
+ */
31
186
  readonly gitRevision?: string;
187
+ /**
188
+ * Specify the git remote that should be used to link to source files.
189
+ *
190
+ * @see https://typedoc.org/documents/Options.Comments.html#gitremote
191
+ */
32
192
  readonly gitRemote?: string;
193
+ /**
194
+ * Specify a link template to be used when generating source urls.
195
+ *
196
+ * @see https://typedoc.org/documents/Options.Input.html#sourcelinktemplate
197
+ */
33
198
  readonly sourceLinkTemplate?: string;
199
+ /**
200
+ * Disables automatically linking to source code.
201
+ *
202
+ * @see https://typedoc.org/documents/Options.Comments.html#disablesources
203
+ */
34
204
  readonly disableSources?: boolean;
205
+ /**
206
+ * Disables setting the source of reflections when documenting projects within a Git repository.
207
+ *
208
+ * @see https://typedoc.org/documents/Options.Comments.html#disablegit
209
+ */
35
210
  readonly disableGit?: boolean;
211
+ /**
212
+ * Do not print the TypeDoc link at the end of the page.
213
+ *
214
+ * @see https://typedoc.org/documents/Options.Output.html#hidegenerator
215
+ */
36
216
  readonly hideGenerator?: boolean;
217
+ /**
218
+ * Hide parameter types in the signature.
219
+ *
220
+ * @see https://typedoc.org/documents/Options.Output.html#hideparametertypesintitle
221
+ */
37
222
  readonly hideParameterTypesInTitle?: boolean;
223
+ /**
224
+ * Include the generation time in links to prevent browsers from using a cached version.
225
+ *
226
+ * @see https://typedoc.org/documents/Options.Output.html#cachebust
227
+ */
38
228
  readonly cacheBust?: boolean;
229
+ /**
230
+ * If set, the search index will also include comments.
231
+ *
232
+ * @see https://typedoc.org/documents/Options.Output.html#searchincomments
233
+ */
39
234
  readonly searchInComments?: boolean;
235
+ /**
236
+ * If set, the search index will also include documents.
237
+ *
238
+ * @see https://typedoc.org/documents/Options.Output.html#searchindocuments
239
+ */
40
240
  readonly searchInDocuments?: boolean;
241
+ /**
242
+ * Specify validation options.
243
+ *
244
+ * @see https://typedoc.org/documents/Options.Validation.html
245
+ */
41
246
  readonly validation?: ValidationOptions;
247
+ /**
248
+ * Specify the type of reflections that must be documented.
249
+ *
250
+ * @see https://typedoc.org/documents/Options.Validation.html#requiredtobedocumented
251
+ */
42
252
  readonly requiredToBeDocumented?: string[];
253
+ /**
254
+ * If set, warnings will be treated as errors.
255
+ *
256
+ * @see https://typedoc.org/documents/Options.Validation.html#treatwarningsaserrors
257
+ */
43
258
  readonly treatWarningsAsErrors?: boolean;
259
+ /**
260
+ * If set, validation warnings will be treated as errors.
261
+ *
262
+ * @see https://typedoc.org/documents/Options.Validation.html#treatvalidationwarningsaserrors
263
+ */
44
264
  readonly treatValidationWarningsAsErrors?: boolean;
265
+ /**
266
+ * A list of types that should not produce warnings when not being exported.
267
+ *
268
+ * @see https://typedoc.org/documents/Options.Validation.html#intentionallynotexported
269
+ */
45
270
  readonly intentionallyNotExported?: string[];
271
+ /**
272
+ * Define patterns for files that should be considered external.
273
+ *
274
+ * @see https://typedoc.org/documents/Options.Input.html#externalpattern
275
+ */
46
276
  readonly externalPattern?: string[];
277
+ /**
278
+ * Define custom mappings for symbols in external packages.
279
+ *
280
+ * @see https://typedoc.org/documents/Options.Comments.html#externalsymbollinkmappings
281
+ */
47
282
  readonly externalSymbolLinkMappings?: Record<string, Record<string, string>>;
48
283
  }
284
+ /**
285
+ * Converts TypeDocConfiguration to JSON representation
286
+ * @internal
287
+ */
49
288
  export declare function toJson_TypeDocConfiguration(obj: TypeDocConfiguration | undefined): Record<string, unknown> | undefined;
289
+ /**
290
+ * Specifies the strategy to be used to convert entry points into documentation
291
+ *
292
+ * @see https://typedoc.org/documents/Options.Input.html#entrypointstrategy
293
+ */
50
294
  export declare enum EntryPointStrategy {
295
+ /**
296
+ * Expects all entry points to be contained within a single package
297
+ */
51
298
  RESOLVE = "resolve",
299
+ /**
300
+ * Expects all entry points to be top-level directories
301
+ */
52
302
  EXPAND = "expand",
303
+ /**
304
+ * Expects all entry points to be individual files
305
+ */
53
306
  PACKAGES = "packages",
307
+ /**
308
+ * Merges multiple projects into a single documentation site
309
+ */
54
310
  MERGE = "merge"
55
311
  }
312
+ /**
313
+ * Specifies the logger that should be used
314
+ *
315
+ * @see https://typedoc.org/documents/Options.Other.html#loglevel
316
+ */
56
317
  export declare enum LogLevel {
318
+ /**
319
+ * Log all messages including verbose debug information
320
+ */
57
321
  VERBOSE = "Verbose",
322
+ /**
323
+ * Log informational messages and above
324
+ */
58
325
  INFO = "Info",
326
+ /**
327
+ * Log warnings and errors only
328
+ */
59
329
  WARN = "Warn",
330
+ /**
331
+ * Log errors only
332
+ */
60
333
  ERROR = "Error",
334
+ /**
335
+ * Disable all logging
336
+ */
61
337
  NONE = "None"
62
338
  }
339
+ /**
340
+ * Specifies the documentation mode TypeDoc should use
341
+ *
342
+ * @see https://typedoc.org/documents/Options.Comments.html#commentstyle
343
+ */
63
344
  export declare enum CommentStyle {
345
+ /**
346
+ * Parse JSDoc style comments only
347
+ */
64
348
  JSDOC = "jsdoc",
349
+ /**
350
+ * Parse block comments
351
+ */
65
352
  BLOCK = "block",
353
+ /**
354
+ * Parse line comments (//)
355
+ */
66
356
  LINE = "line",
357
+ /**
358
+ * Parse all comment styles
359
+ */
67
360
  ALL = "all"
68
361
  }
362
+ /**
363
+ * Specifies the default visibility for members without a visibility tag
364
+ *
365
+ * @see https://typedoc.org/documents/Options.Comments.html#defaultvisibility
366
+ */
69
367
  export declare enum Visibility {
368
+ /**
369
+ * Public visibility - accessible from anywhere
370
+ */
70
371
  PUBLIC = "public",
372
+ /**
373
+ * Protected visibility - accessible from class and subclasses
374
+ */
71
375
  PROTECTED = "protected",
376
+ /**
377
+ * Private visibility - accessible only within the class
378
+ */
72
379
  PRIVATE = "private"
73
380
  }
381
+ /**
382
+ * Validation options
383
+ *
384
+ * @see https://typedoc.org/documents/Options.Validation.html
385
+ */
74
386
  export interface ValidationOptions {
387
+ /**
388
+ * If set, TypeDoc will produce warnings when a symbol is referenced by the documentation
389
+ */
75
390
  readonly notExported?: boolean;
391
+ /**
392
+ * If set, TypeDoc will produce warnings when an exported symbol is not documented
393
+ */
76
394
  readonly notDocumented?: boolean;
395
+ /**
396
+ * If set, TypeDoc will produce warnings about \@link tags which will produce broken links
397
+ */
77
398
  readonly invalidLink?: boolean;
78
399
  }
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Visibility = exports.CommentStyle = exports.LogLevel = exports.EntryPointStrategy = void 0;
4
4
  exports.toJson_TypeDocConfiguration = toJson_TypeDocConfiguration;
5
+ /**
6
+ * Converts TypeDocConfiguration to JSON representation
7
+ * @internal
8
+ */
5
9
  function toJson_TypeDocConfiguration(obj) {
6
10
  if (obj === undefined) {
7
11
  return undefined;
@@ -62,32 +66,100 @@ function toJson_TypeDocConfiguration(obj) {
62
66
  }
63
67
  return filtered;
64
68
  }
69
+ /**
70
+ * Specifies the strategy to be used to convert entry points into documentation
71
+ *
72
+ * @see https://typedoc.org/documents/Options.Input.html#entrypointstrategy
73
+ */
65
74
  var EntryPointStrategy;
66
75
  (function (EntryPointStrategy) {
76
+ /**
77
+ * Expects all entry points to be contained within a single package
78
+ */
67
79
  EntryPointStrategy["RESOLVE"] = "resolve";
80
+ /**
81
+ * Expects all entry points to be top-level directories
82
+ */
68
83
  EntryPointStrategy["EXPAND"] = "expand";
84
+ /**
85
+ * Expects all entry points to be individual files
86
+ */
69
87
  EntryPointStrategy["PACKAGES"] = "packages";
88
+ /**
89
+ * Merges multiple projects into a single documentation site
90
+ */
70
91
  EntryPointStrategy["MERGE"] = "merge";
71
92
  })(EntryPointStrategy || (exports.EntryPointStrategy = EntryPointStrategy = {}));
93
+ /**
94
+ * Specifies the logger that should be used
95
+ *
96
+ * @see https://typedoc.org/documents/Options.Other.html#loglevel
97
+ */
72
98
  var LogLevel;
73
99
  (function (LogLevel) {
100
+ /**
101
+ * Log all messages including verbose debug information
102
+ */
74
103
  LogLevel["VERBOSE"] = "Verbose";
104
+ /**
105
+ * Log informational messages and above
106
+ */
75
107
  LogLevel["INFO"] = "Info";
108
+ /**
109
+ * Log warnings and errors only
110
+ */
76
111
  LogLevel["WARN"] = "Warn";
112
+ /**
113
+ * Log errors only
114
+ */
77
115
  LogLevel["ERROR"] = "Error";
116
+ /**
117
+ * Disable all logging
118
+ */
78
119
  LogLevel["NONE"] = "None";
79
120
  })(LogLevel || (exports.LogLevel = LogLevel = {}));
121
+ /**
122
+ * Specifies the documentation mode TypeDoc should use
123
+ *
124
+ * @see https://typedoc.org/documents/Options.Comments.html#commentstyle
125
+ */
80
126
  var CommentStyle;
81
127
  (function (CommentStyle) {
128
+ /**
129
+ * Parse JSDoc style comments only
130
+ */
82
131
  CommentStyle["JSDOC"] = "jsdoc";
132
+ /**
133
+ * Parse block comments
134
+ */
83
135
  CommentStyle["BLOCK"] = "block";
136
+ /**
137
+ * Parse line comments (//)
138
+ */
84
139
  CommentStyle["LINE"] = "line";
140
+ /**
141
+ * Parse all comment styles
142
+ */
85
143
  CommentStyle["ALL"] = "all";
86
144
  })(CommentStyle || (exports.CommentStyle = CommentStyle = {}));
145
+ /**
146
+ * Specifies the default visibility for members without a visibility tag
147
+ *
148
+ * @see https://typedoc.org/documents/Options.Comments.html#defaultvisibility
149
+ */
87
150
  var Visibility;
88
151
  (function (Visibility) {
152
+ /**
153
+ * Public visibility - accessible from anywhere
154
+ */
89
155
  Visibility["PUBLIC"] = "public";
156
+ /**
157
+ * Protected visibility - accessible from class and subclasses
158
+ */
90
159
  Visibility["PROTECTED"] = "protected";
160
+ /**
161
+ * Private visibility - accessible only within the class
162
+ */
91
163
  Visibility["PRIVATE"] = "private";
92
164
  })(Visibility || (exports.Visibility = Visibility = {}));
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy90eXBlZG9jLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpREEsa0VBNkRDO0FBN0RELFNBQWdCLDJCQUEyQixDQUN2QyxHQUFxQztJQUVyQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNwQixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQTRCO1FBQ3BDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztRQUM1QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsa0JBQWtCO1FBQzFDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztRQUNwQixnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3RDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztRQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3RDLGVBQWUsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUNwQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7UUFDWixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztRQUNsQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1FBQ2hCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztRQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLGVBQWUsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUNwQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDOUIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtRQUN4QyxlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWU7UUFDcEMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1FBQzlCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7UUFDeEMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtRQUN4QyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsb0JBQW9CO1FBQzlDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtRQUNsQixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7UUFDNUIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsa0JBQWtCO1FBQzFDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztRQUNsQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7UUFDMUIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1FBQ2hDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyx5QkFBeUI7UUFDeEQsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ3hCLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDdEMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtRQUN4QyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7UUFDMUIsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLHNCQUFzQjtRQUNsRCxxQkFBcUIsRUFBRSxHQUFHLENBQUMscUJBQXFCO1FBQ2hELCtCQUErQixFQUFFLEdBQUcsQ0FBQywrQkFBK0I7UUFDcEUsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLHdCQUF3QjtRQUN0RCxlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWU7UUFDcEMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLDBCQUEwQjtLQUM3RCxDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQTRCLEVBQUUsQ0FBQztJQUM3QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2hELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBRUQsSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzFCLHlDQUFtQixDQUFBO0lBQ25CLHVDQUFpQixDQUFBO0lBQ2pCLDJDQUFxQixDQUFBO0lBQ3JCLHFDQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUxXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBSzdCO0FBRUQsSUFBWSxRQU1YO0FBTkQsV0FBWSxRQUFRO0lBQ2hCLCtCQUFtQixDQUFBO0lBQ25CLHlCQUFhLENBQUE7SUFDYix5QkFBYSxDQUFBO0lBQ2IsMkJBQWUsQ0FBQTtJQUNmLHlCQUFhLENBQUE7QUFDakIsQ0FBQyxFQU5XLFFBQVEsd0JBQVIsUUFBUSxRQU1uQjtBQUVELElBQVksWUFLWDtBQUxELFdBQVksWUFBWTtJQUNwQiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYiwyQkFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUxXLFlBQVksNEJBQVosWUFBWSxRQUt2QjtBQUVELElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNsQiwrQkFBaUIsQ0FBQTtJQUNqQixxQ0FBdUIsQ0FBQTtJQUN2QixpQ0FBbUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsVUFBVSwwQkFBVixVQUFVLFFBSXJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jQ29uZmlndXJhdGlvbiB7XG4gICAgcmVhZG9ubHkgZW50cnlQb2ludHM/OiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBlbnRyeVBvaW50U3RyYXRlZ3k/OiBFbnRyeVBvaW50U3RyYXRlZ3k7XG4gICAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGVFeHRlcm5hbHM/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGVQcml2YXRlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBleGNsdWRlUHJvdGVjdGVkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBleGNsdWRlSW50ZXJuYWw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG91dD86IHN0cmluZztcbiAgICByZWFkb25seSBqc29uPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHRoZW1lPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY2xlYW5PdXRwdXREaXI/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG1lZGlhPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHRzQnVpbGRJbmZvPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHRzY29uZmlnPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxvZ0xldmVsPzogTG9nTGV2ZWw7XG4gICAgcmVhZG9ubHkgc29ydD86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHNvcnRFbnRyeVBvaW50cz86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY29tbWVudFN0eWxlPzogQ29tbWVudFN0eWxlO1xuICAgIHJlYWRvbmx5IGRlZmF1bHRWaXNpYmlsaXR5PzogVmlzaWJpbGl0eTtcbiAgICByZWFkb25seSBkZWZhdWx0Q2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGVmYXVsdEdyb3VwPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNhdGVnb3JpemVCeUdyb3VwPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBzZWFyY2hHcm91cEJvb3N0cz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgcmVhZG9ubHkgc2VhcmNoQ2F0ZWdvcnlCb29zdHM/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIHJlYWRvbmx5IHJlYWRtZT86IHN0cmluZztcbiAgICByZWFkb25seSBwYWNrYWdlSnNvbj86IHN0cmluZztcbiAgICByZWFkb25seSBnaXRSZXZpc2lvbj86IHN0cmluZztcbiAgICByZWFkb25seSBnaXRSZW1vdGU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc291cmNlTGlua1RlbXBsYXRlPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRpc2FibGVTb3VyY2VzPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBkaXNhYmxlR2l0PzogYm9vbGVhbjtcbiAgICByZWFkb25seSBoaWRlR2VuZXJhdG9yPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBoaWRlUGFyYW1ldGVyVHlwZXNJblRpdGxlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBjYWNoZUJ1c3Q/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNlYXJjaEluQ29tbWVudHM/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNlYXJjaEluRG9jdW1lbnRzPzogYm9vbGVhbjtcbiAgICByZWFkb25seSB2YWxpZGF0aW9uPzogVmFsaWRhdGlvbk9wdGlvbnM7XG4gICAgcmVhZG9ubHkgcmVxdWlyZWRUb0JlRG9jdW1lbnRlZD86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHRyZWF0V2FybmluZ3NBc0Vycm9ycz86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgdHJlYXRWYWxpZGF0aW9uV2FybmluZ3NBc0Vycm9ycz86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaW50ZW50aW9uYWxseU5vdEV4cG9ydGVkPzogc3RyaW5nW107XG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxQYXR0ZXJuPzogc3RyaW5nW107XG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxTeW1ib2xMaW5rTWFwcGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UeXBlRG9jQ29uZmlndXJhdGlvbihcbiAgICBvYmo6IFR5cGVEb2NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBlbnRyeVBvaW50czogb2JqLmVudHJ5UG9pbnRzLFxuICAgICAgICBlbnRyeVBvaW50U3RyYXRlZ3k6IG9iai5lbnRyeVBvaW50U3RyYXRlZ3ksXG4gICAgICAgIGV4Y2x1ZGU6IG9iai5leGNsdWRlLFxuICAgICAgICBleGNsdWRlRXh0ZXJuYWxzOiBvYmouZXhjbHVkZUV4dGVybmFscyxcbiAgICAgICAgZXhjbHVkZVByaXZhdGU6IG9iai5leGNsdWRlUHJpdmF0ZSxcbiAgICAgICAgZXhjbHVkZVByb3RlY3RlZDogb2JqLmV4Y2x1ZGVQcm90ZWN0ZWQsXG4gICAgICAgIGV4Y2x1ZGVJbnRlcm5hbDogb2JqLmV4Y2x1ZGVJbnRlcm5hbCxcbiAgICAgICAgb3V0OiBvYmoub3V0LFxuICAgICAgICBqc29uOiBvYmouanNvbixcbiAgICAgICAgdGhlbWU6IG9iai50aGVtZSxcbiAgICAgICAgYmFzZVBhdGg6IG9iai5iYXNlUGF0aCxcbiAgICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICAgIGNsZWFuT3V0cHV0RGlyOiBvYmouY2xlYW5PdXRwdXREaXIsXG4gICAgICAgIGluY2x1ZGVzOiBvYmouaW5jbHVkZXMsXG4gICAgICAgIG1lZGlhOiBvYmoubWVkaWEsXG4gICAgICAgIHRzQnVpbGRJbmZvOiBvYmoudHNCdWlsZEluZm8sXG4gICAgICAgIHRzY29uZmlnOiBvYmoudHNjb25maWcsXG4gICAgICAgIGxvZ0xldmVsOiBvYmoubG9nTGV2ZWwsXG4gICAgICAgIHNvcnQ6IG9iai5zb3J0LFxuICAgICAgICBzb3J0RW50cnlQb2ludHM6IG9iai5zb3J0RW50cnlQb2ludHMsXG4gICAgICAgIGNvbW1lbnRTdHlsZTogb2JqLmNvbW1lbnRTdHlsZSxcbiAgICAgICAgZGVmYXVsdFZpc2liaWxpdHk6IG9iai5kZWZhdWx0VmlzaWJpbGl0eSxcbiAgICAgICAgZGVmYXVsdENhdGVnb3J5OiBvYmouZGVmYXVsdENhdGVnb3J5LFxuICAgICAgICBkZWZhdWx0R3JvdXA6IG9iai5kZWZhdWx0R3JvdXAsXG4gICAgICAgIGNhdGVnb3JpemVCeUdyb3VwOiBvYmouY2F0ZWdvcml6ZUJ5R3JvdXAsXG4gICAgICAgIHNlYXJjaEdyb3VwQm9vc3RzOiBvYmouc2VhcmNoR3JvdXBCb29zdHMsXG4gICAgICAgIHNlYXJjaENhdGVnb3J5Qm9vc3RzOiBvYmouc2VhcmNoQ2F0ZWdvcnlCb29zdHMsXG4gICAgICAgIHJlYWRtZTogb2JqLnJlYWRtZSxcbiAgICAgICAgcGFja2FnZUpzb246IG9iai5wYWNrYWdlSnNvbixcbiAgICAgICAgZ2l0UmV2aXNpb246IG9iai5naXRSZXZpc2lvbixcbiAgICAgICAgZ2l0UmVtb3RlOiBvYmouZ2l0UmVtb3RlLFxuICAgICAgICBzb3VyY2VMaW5rVGVtcGxhdGU6IG9iai5zb3VyY2VMaW5rVGVtcGxhdGUsXG4gICAgICAgIGRpc2FibGVTb3VyY2VzOiBvYmouZGlzYWJsZVNvdXJjZXMsXG4gICAgICAgIGRpc2FibGVHaXQ6IG9iai5kaXNhYmxlR2l0LFxuICAgICAgICBoaWRlR2VuZXJhdG9yOiBvYmouaGlkZUdlbmVyYXRvcixcbiAgICAgICAgaGlkZVBhcmFtZXRlclR5cGVzSW5UaXRsZTogb2JqLmhpZGVQYXJhbWV0ZXJUeXBlc0luVGl0bGUsXG4gICAgICAgIGNhY2hlQnVzdDogb2JqLmNhY2hlQnVzdCxcbiAgICAgICAgc2VhcmNoSW5Db21tZW50czogb2JqLnNlYXJjaEluQ29tbWVudHMsXG4gICAgICAgIHNlYXJjaEluRG9jdW1lbnRzOiBvYmouc2VhcmNoSW5Eb2N1bWVudHMsXG4gICAgICAgIHZhbGlkYXRpb246IG9iai52YWxpZGF0aW9uLFxuICAgICAgICByZXF1aXJlZFRvQmVEb2N1bWVudGVkOiBvYmoucmVxdWlyZWRUb0JlRG9jdW1lbnRlZCxcbiAgICAgICAgdHJlYXRXYXJuaW5nc0FzRXJyb3JzOiBvYmoudHJlYXRXYXJuaW5nc0FzRXJyb3JzLFxuICAgICAgICB0cmVhdFZhbGlkYXRpb25XYXJuaW5nc0FzRXJyb3JzOiBvYmoudHJlYXRWYWxpZGF0aW9uV2FybmluZ3NBc0Vycm9ycyxcbiAgICAgICAgaW50ZW50aW9uYWxseU5vdEV4cG9ydGVkOiBvYmouaW50ZW50aW9uYWxseU5vdEV4cG9ydGVkLFxuICAgICAgICBleHRlcm5hbFBhdHRlcm46IG9iai5leHRlcm5hbFBhdHRlcm4sXG4gICAgICAgIGV4dGVybmFsU3ltYm9sTGlua01hcHBpbmdzOiBvYmouZXh0ZXJuYWxTeW1ib2xMaW5rTWFwcGluZ3MsXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXN1bHQpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xufVxuXG5leHBvcnQgZW51bSBFbnRyeVBvaW50U3RyYXRlZ3kge1xuICAgIFJFU09MVkUgPSBcInJlc29sdmVcIixcbiAgICBFWFBBTkQgPSBcImV4cGFuZFwiLFxuICAgIFBBQ0tBR0VTID0gXCJwYWNrYWdlc1wiLFxuICAgIE1FUkdFID0gXCJtZXJnZVwiLFxufVxuXG5leHBvcnQgZW51bSBMb2dMZXZlbCB7XG4gICAgVkVSQk9TRSA9IFwiVmVyYm9zZVwiLFxuICAgIElORk8gPSBcIkluZm9cIixcbiAgICBXQVJOID0gXCJXYXJuXCIsXG4gICAgRVJST1IgPSBcIkVycm9yXCIsXG4gICAgTk9ORSA9IFwiTm9uZVwiLFxufVxuXG5leHBvcnQgZW51bSBDb21tZW50U3R5bGUge1xuICAgIEpTRE9DID0gXCJqc2RvY1wiLFxuICAgIEJMT0NLID0gXCJibG9ja1wiLFxuICAgIExJTkUgPSBcImxpbmVcIixcbiAgICBBTEwgPSBcImFsbFwiLFxufVxuXG5leHBvcnQgZW51bSBWaXNpYmlsaXR5IHtcbiAgICBQVUJMSUMgPSBcInB1YmxpY1wiLFxuICAgIFBST1RFQ1RFRCA9IFwicHJvdGVjdGVkXCIsXG4gICAgUFJJVkFURSA9IFwicHJpdmF0ZVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25PcHRpb25zIHtcbiAgICByZWFkb25seSBub3RFeHBvcnRlZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgbm90RG9jdW1lbnRlZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaW52YWxpZExpbms/OiBib29sZWFuO1xufVxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy90eXBlZG9jLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2VUEsa0VBNkRDO0FBakVEOzs7R0FHRztBQUNILFNBQWdCLDJCQUEyQixDQUN2QyxHQUFxQztJQUVyQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNwQixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQTRCO1FBQ3BDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztRQUM1QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsa0JBQWtCO1FBQzFDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztRQUNwQixnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3RDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztRQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3RDLGVBQWUsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUNwQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7UUFDWixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztRQUNsQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1FBQ2hCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztRQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLGVBQWUsRUFBRSxHQUFHLENB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RztJQUNILCtCQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gscUNBQXVCLENBQUE7SUFDdkI7O09BRUc7SUFDSCxpQ0FBbUIsQ0FBQTtBQUN2QixDQUFDLEVBYlcsVUFBVSwwQkFBVixVQUFVLFFBYXJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlRG9jIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvb3B0aW9ucy9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jQ29uZmlndXJhdGlvbiB7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBlbnRyeSBwb2ludHMgdG8gYmUgZG9jdW1lbnRlZCBieSBUeXBlRG9jLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLklucHV0Lmh0bWwjZW50cnlwb2ludHNcbiAgICAgKi9cbiAgICByZWFkb25seSBlbnRyeVBvaW50cz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBzdHJhdGVneSB0byBiZSB1c2VkIHRvIGNvbnZlcnQgZW50cnkgcG9pbnRzIGludG8gZG9jdW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI2VudHJ5cG9pbnRzdHJhdGVneVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudHJ5UG9pbnRTdHJhdGVneT86IEVudHJ5UG9pbnRTdHJhdGVneTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZSBwYXR0ZXJucyB0byBiZSBleGNsdWRlZCB3aGVuIGV4cGFuZGluZyBkaXJlY3Rvcmllcy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI2V4Y2x1ZGVcbiAgICAgKi9cbiAgICByZWFkb25seSBleGNsdWRlPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IGV4dGVybmFsbHkgcmVzb2x2ZWQgc3ltYm9scyBmcm9tIGJlaW5nIGRvY3VtZW50ZWQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuSW5wdXQuaHRtbCNleGNsdWRlZXh0ZXJuYWxzXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhjbHVkZUV4dGVybmFscz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHByaXZhdGUgbWVtYmVycyBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI2V4Y2x1ZGVwcml2YXRlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhjbHVkZVByaXZhdGU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUHJldmVudCBwcm90ZWN0ZWQgbWVtYmVycyBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI2V4Y2x1ZGVwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBleGNsdWRlUHJvdGVjdGVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgc3ltYm9scyB0aGF0IGFyZSBub3QgZXhwb3J0ZWQgZnJvbSBiZWluZyBkb2N1bWVudGVkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLklucHV0Lmh0bWwjZXhjbHVkZWludGVybmFsXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhjbHVkZUludGVybmFsPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3V0cHV0IGRpcmVjdG9yeSB0aGUgZG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgd3JpdHRlbiB0by5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5PdXRwdXQuaHRtbCNvdXRcbiAgICAgKi9cbiAgICByZWFkb25seSBvdXQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiB0aGUgZG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgd3JpdHRlbiB0by5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5PdXRwdXQuaHRtbCNqc29uXG4gICAgICovXG4gICAgcmVhZG9ubHkganNvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYSB0aGVtZSBuYW1lIHRvIHVzZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5PdXRwdXQuaHRtbCN0aGVtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHRoZW1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgYmFzZSBwYXRoIGZvciBhbGwgdXJscy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5PdXRwdXQuaHRtbCNiYXNlcGF0aFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBoZWFkZXIgb2YgdGhlIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLk91dHB1dC5odG1sI25hbWVcbiAgICAgKi9cbiAgICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUHJldmVudCBUeXBlRG9jIGZyb20gY2xlYW5pbmcgdGhlIG91dHB1dCBkaXJlY3Rvcnkgc3BlY2lmaWVkIHdpdGggLS1vdXQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3V0cHV0Lmh0bWwjY2xlYW5vdXRwdXRkaXJcbiAgICAgKi9cbiAgICByZWFkb25seSBjbGVhbk91dHB1dERpcj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiB0byBsb29rIGZvciBpbmNsdWRlZCBkb2N1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3V0cHV0Lmh0bWwjaW5jbHVkZXNcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGxvY2F0aW9uIHdpdGggbWVkaWEgZmlsZXMgdGhhdCBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLk91dHB1dC5odG1sI21lZGlhXG4gICAgICovXG4gICAgcmVhZG9ubHkgbWVkaWE/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBhbmQgZmlsZW5hbWUgYSAudHNidWlsZGluZm8gZmlsZSBzaG91bGQgYmUgd3JpdHRlbiB0by5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI3RzYnVpbGRpbmZvXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHNCdWlsZEluZm8/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgVHlwZVNjcmlwdCBjb25maWcgZmlsZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLklucHV0Lmh0bWwjdHNjb25maWdcbiAgICAgKi9cbiAgICByZWFkb25seSB0c2NvbmZpZz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGxvZ2dlciB0aGF0IHNob3VsZCBiZSB1c2VkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLk90aGVyLmh0bWwjbG9nbGV2ZWxcbiAgICAgKi9cbiAgICByZWFkb25seSBsb2dMZXZlbD86IExvZ0xldmVsO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgc29ydCBzdHJhdGVneSBmb3IgZG9jdW1lbnRlZCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3JnYW5pemF0aW9uLmh0bWwjc29ydFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIHNvcnQgc3RyYXRlZ3kgZm9yIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Pcmdhbml6YXRpb24uaHRtbCNzb3J0ZW50cnlwb2ludHNcbiAgICAgKi9cbiAgICByZWFkb25seSBzb3J0RW50cnlQb2ludHM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgZG9jdW1lbnRhdGlvbiBtb2RlIFR5cGVEb2Mgc2hvdWxkIHVzZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Db21tZW50cy5odG1sI2NvbW1lbnRzdHlsZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbW1lbnRTdHlsZT86IENvbW1lbnRTdHlsZTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGRlZmF1bHQgdmlzaWJpbGl0eSBmb3IgbWVtYmVycyB3aXRob3V0IGEgdmlzaWJpbGl0eSB0YWcuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuQ29tbWVudHMuaHRtbCNkZWZhdWx0dmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlZmF1bHRWaXNpYmlsaXR5PzogVmlzaWJpbGl0eTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIGRlZmF1bHQgY2F0ZWdvcnkgZm9yIHJlZmxlY3Rpb25zIHdpdGhvdXQgYSBjYXRlZ29yeS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Pcmdhbml6YXRpb24uaHRtbCNkZWZhdWx0Y2F0ZWdvcnlcbiAgICAgKi9cbiAgICByZWFkb25seSBkZWZhdWx0Q2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBkZWZhdWx0IGdyb3VwIGZvciByZWZsZWN0aW9ucyB3aXRob3V0IGEgZ3JvdXAuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3JnYW5pemF0aW9uLmh0bWwjZGVmYXVsdGdyb3VwXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdEdyb3VwPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgY2F0ZWdvcmllcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBncm91cCByZWZsZWN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Pcmdhbml6YXRpb24uaHRtbCNjYXRlZ29yaXplYnlncm91cFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNhdGVnb3JpemVCeUdyb3VwPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIHNlYXJjaCBncm91cCBib29zdHMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3JnYW5pemF0aW9uLmh0bWwjc2VhcmNoZ3JvdXBib29zdHNcbiAgICAgKi9cbiAgICByZWFkb25seSBzZWFyY2hHcm91cEJvb3N0cz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBzZWFyY2ggY2F0ZWdvcnkgYm9vc3RzLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLk9yZ2FuaXphdGlvbi5odG1sI3NlYXJjaGNhdGVnb3J5Ym9vc3RzXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2VhcmNoQ2F0ZWdvcnlCb29zdHM/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgcmVhZG1lIGZpbGUgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBpbmRleCBwYWdlLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLklucHV0Lmh0bWwjcmVhZG1lXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmVhZG1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgcGFja2FnZS5qc29uIGZpbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBhY2thZ2UgbmFtZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI3BhY2thZ2Vqc29uXG4gICAgICovXG4gICAgcmVhZG9ubHkgcGFja2FnZUpzb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBnaXQgcmV2aXNpb24gdGhhdCBzaG91bGQgYmUgdXNlZCB0byBsaW5rIHRvIHNvdXJjZSBmaWxlcy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Db21tZW50cy5odG1sI2dpdHJldmlzaW9uXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2l0UmV2aXNpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBnaXQgcmVtb3RlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gbGluayB0byBzb3VyY2UgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuQ29tbWVudHMuaHRtbCNnaXRyZW1vdGVcbiAgICAgKi9cbiAgICByZWFkb25seSBnaXRSZW1vdGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgbGluayB0ZW1wbGF0ZSB0byBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBzb3VyY2UgdXJscy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI3NvdXJjZWxpbmt0ZW1wbGF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNvdXJjZUxpbmtUZW1wbGF0ZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIGF1dG9tYXRpY2FsbHkgbGlua2luZyB0byBzb3VyY2UgY29kZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Db21tZW50cy5odG1sI2Rpc2FibGVzb3VyY2VzXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzYWJsZVNvdXJjZXM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgc2V0dGluZyB0aGUgc291cmNlIG9mIHJlZmxlY3Rpb25zIHdoZW4gZG9jdW1lbnRpbmcgcHJvamVjdHMgd2l0aGluIGEgR2l0IHJlcG9zaXRvcnkuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuQ29tbWVudHMuaHRtbCNkaXNhYmxlZ2l0XG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzYWJsZUdpdD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBEbyBub3QgcHJpbnQgdGhlIFR5cGVEb2MgbGluayBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLk91dHB1dC5odG1sI2hpZGVnZW5lcmF0b3JcbiAgICAgKi9cbiAgICByZWFkb25seSBoaWRlR2VuZXJhdG9yPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEhpZGUgcGFyYW1ldGVyIHR5cGVzIGluIHRoZSBzaWduYXR1cmUuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3V0cHV0Lmh0bWwjaGlkZXBhcmFtZXRlcnR5cGVzaW50aXRsZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhpZGVQYXJhbWV0ZXJUeXBlc0luVGl0bGU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSW5jbHVkZSB0aGUgZ2VuZXJhdGlvbiB0aW1lIGluIGxpbmtzIHRvIHByZXZlbnQgYnJvd3NlcnMgZnJvbSB1c2luZyBhIGNhY2hlZCB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLk91dHB1dC5odG1sI2NhY2hlYnVzdFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNhY2hlQnVzdD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQsIHRoZSBzZWFyY2ggaW5kZXggd2lsbCBhbHNvIGluY2x1ZGUgY29tbWVudHMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuT3V0cHV0Lmh0bWwjc2VhcmNoaW5jb21tZW50c1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaEluQ29tbWVudHM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgc2V0LCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYWxzbyBpbmNsdWRlIGRvY3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5PdXRwdXQuaHRtbCNzZWFyY2hpbmRvY3VtZW50c1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaEluRG9jdW1lbnRzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdmFsaWRhdGlvbiBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLlZhbGlkYXRpb24uaHRtbFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHZhbGlkYXRpb24/OiBWYWxpZGF0aW9uT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIHR5cGUgb2YgcmVmbGVjdGlvbnMgdGhhdCBtdXN0IGJlIGRvY3VtZW50ZWQuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuVmFsaWRhdGlvbi5odG1sI3JlcXVpcmVkdG9iZWRvY3VtZW50ZWRcbiAgICAgKi9cbiAgICByZWFkb25seSByZXF1aXJlZFRvQmVEb2N1bWVudGVkPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQsIHdhcm5pbmdzIHdpbGwgYmUgdHJlYXRlZCBhcyBlcnJvcnMuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuVmFsaWRhdGlvbi5odG1sI3RyZWF0d2FybmluZ3Nhc2Vycm9yc1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHRyZWF0V2FybmluZ3NBc0Vycm9ycz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQsIHZhbGlkYXRpb24gd2FybmluZ3Mgd2lsbCBiZSB0cmVhdGVkIGFzIGVycm9ycy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5WYWxpZGF0aW9uLmh0bWwjdHJlYXR2YWxpZGF0aW9ud2FybmluZ3Nhc2Vycm9yc1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHRyZWF0VmFsaWRhdGlvbldhcm5pbmdzQXNFcnJvcnM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHR5cGVzIHRoYXQgc2hvdWxkIG5vdCBwcm9kdWNlIHdhcm5pbmdzIHdoZW4gbm90IGJlaW5nIGV4cG9ydGVkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLlZhbGlkYXRpb24uaHRtbCNpbnRlbnRpb25hbGx5bm90ZXhwb3J0ZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbnRlbnRpb25hbGx5Tm90RXhwb3J0ZWQ/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZSBwYXR0ZXJucyBmb3IgZmlsZXMgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBleHRlcm5hbC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5JbnB1dC5odG1sI2V4dGVybmFscGF0dGVyblxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dGVybmFsUGF0dGVybj86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIGN1c3RvbSBtYXBwaW5ncyBmb3Igc3ltYm9scyBpbiBleHRlcm5hbCBwYWNrYWdlcy5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5Db21tZW50cy5odG1sI2V4dGVybmFsc3ltYm9sbGlua21hcHBpbmdzXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXh0ZXJuYWxTeW1ib2xMaW5rTWFwcGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBUeXBlRG9jQ29uZmlndXJhdGlvbiB0byBKU09OIHJlcHJlc2VudGF0aW9uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UeXBlRG9jQ29uZmlndXJhdGlvbihcbiAgICBvYmo6IFR5cGVEb2NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBlbnRyeVBvaW50czogb2JqLmVudHJ5UG9pbnRzLFxuICAgICAgICBlbnRyeVBvaW50U3RyYXRlZ3k6IG9iai5lbnRyeVBvaW50U3RyYXRlZ3ksXG4gICAgICAgIGV4Y2x1ZGU6IG9iai5leGNsdWRlLFxuICAgICAgICBleGNsdWRlRXh0ZXJuYWxzOiBvYmouZXhjbHVkZUV4dGVybmFscyxcbiAgICAgICAgZXhjbHVkZVByaXZhdGU6IG9iai5leGNsdWRlUHJpdmF0ZSxcbiAgICAgICAgZXhjbHVkZVByb3RlY3RlZDogb2JqLmV4Y2x1ZGVQcm90ZWN0ZWQsXG4gICAgICAgIGV4Y2x1ZGVJbnRlcm5hbDogb2JqLmV4Y2x1ZGVJbnRlcm5hbCxcbiAgICAgICAgb3V0OiBvYmoub3V0LFxuICAgICAgICBqc29uOiBvYmouanNvbixcbiAgICAgICAgdGhlbWU6IG9iai50aGVtZSxcbiAgICAgICAgYmFzZVBhdGg6IG9iai5iYXNlUGF0aCxcbiAgICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICAgIGNsZWFuT3V0cHV0RGlyOiBvYmouY2xlYW5PdXRwdXREaXIsXG4gICAgICAgIGluY2x1ZGVzOiBvYmouaW5jbHVkZXMsXG4gICAgICAgIG1lZGlhOiBvYmoubWVkaWEsXG4gICAgICAgIHRzQnVpbGRJbmZvOiBvYmoudHNCdWlsZEluZm8sXG4gICAgICAgIHRzY29uZmlnOiBvYmoudHNjb25maWcsXG4gICAgICAgIGxvZ0xldmVsOiBvYmoubG9nTGV2ZWwsXG4gICAgICAgIHNvcnQ6IG9iai5zb3J0LFxuICAgICAgICBzb3J0RW50cnlQb2ludHM6IG9iai5zb3J0RW50cnlQb2ludHMsXG4gICAgICAgIGNvbW1lbnRTdHlsZTogb2JqLmNvbW1lbnRTdHlsZSxcbiAgICAgICAgZGVmYXVsdFZpc2liaWxpdHk6IG9iai5kZWZhdWx0VmlzaWJpbGl0eSxcbiAgICAgICAgZGVmYXVsdENhdGVnb3J5OiBvYmouZGVmYXVsdENhdGVnb3J5LFxuICAgICAgICBkZWZhdWx0R3JvdXA6IG9iai5kZWZhdWx0R3JvdXAsXG4gICAgICAgIGNhdGVnb3JpemVCeUdyb3VwOiBvYmouY2F0ZWdvcml6ZUJ5R3JvdXAsXG4gICAgICAgIHNlYXJjaEdyb3VwQm9vc3RzOiBvYmouc2VhcmNoR3JvdXBCb29zdHMsXG4gICAgICAgIHNlYXJjaENhdGVnb3J5Qm9vc3RzOiBvYmouc2VhcmNoQ2F0ZWdvcnlCb29zdHMsXG4gICAgICAgIHJlYWRtZTogb2JqLnJlYWRtZSxcbiAgICAgICAgcGFja2FnZUpzb246IG9iai5wYWNrYWdlSnNvbixcbiAgICAgICAgZ2l0UmV2aXNpb246IG9iai5naXRSZXZpc2lvbixcbiAgICAgICAgZ2l0UmVtb3RlOiBvYmouZ2l0UmVtb3RlLFxuICAgICAgICBzb3VyY2VMaW5rVGVtcGxhdGU6IG9iai5zb3VyY2VMaW5rVGVtcGxhdGUsXG4gICAgICAgIGRpc2FibGVTb3VyY2VzOiBvYmouZGlzYWJsZVNvdXJjZXMsXG4gICAgICAgIGRpc2FibGVHaXQ6IG9iai5kaXNhYmxlR2l0LFxuICAgICAgICBoaWRlR2VuZXJhdG9yOiBvYmouaGlkZUdlbmVyYXRvcixcbiAgICAgICAgaGlkZVBhcmFtZXRlclR5cGVzSW5UaXRsZTogb2JqLmhpZGVQYXJhbWV0ZXJUeXBlc0luVGl0bGUsXG4gICAgICAgIGNhY2hlQnVzdDogb2JqLmNhY2hlQnVzdCxcbiAgICAgICAgc2VhcmNoSW5Db21tZW50czogb2JqLnNlYXJjaEluQ29tbWVudHMsXG4gICAgICAgIHNlYXJjaEluRG9jdW1lbnRzOiBvYmouc2VhcmNoSW5Eb2N1bWVudHMsXG4gICAgICAgIHZhbGlkYXRpb246IG9iai52YWxpZGF0aW9uLFxuICAgICAgICByZXF1aXJlZFRvQmVEb2N1bWVudGVkOiBvYmoucmVxdWlyZWRUb0JlRG9jdW1lbnRlZCxcbiAgICAgICAgdHJlYXRXYXJuaW5nc0FzRXJyb3JzOiBvYmoudHJlYXRXYXJuaW5nc0FzRXJyb3JzLFxuICAgICAgICB0cmVhdFZhbGlkYXRpb25XYXJuaW5nc0FzRXJyb3JzOiBvYmoudHJlYXRWYWxpZGF0aW9uV2FybmluZ3NBc0Vycm9ycyxcbiAgICAgICAgaW50ZW50aW9uYWxseU5vdEV4cG9ydGVkOiBvYmouaW50ZW50aW9uYWxseU5vdEV4cG9ydGVkLFxuICAgICAgICBleHRlcm5hbFBhdHRlcm46IG9iai5leHRlcm5hbFBhdHRlcm4sXG4gICAgICAgIGV4dGVybmFsU3ltYm9sTGlua01hcHBpbmdzOiBvYmouZXh0ZXJuYWxTeW1ib2xMaW5rTWFwcGluZ3MsXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXN1bHQpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xufVxuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgc3RyYXRlZ3kgdG8gYmUgdXNlZCB0byBjb252ZXJ0IGVudHJ5IHBvaW50cyBpbnRvIGRvY3VtZW50YXRpb25cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuSW5wdXQuaHRtbCNlbnRyeXBvaW50c3RyYXRlZ3lcbiAqL1xuZXhwb3J0IGVudW0gRW50cnlQb2ludFN0cmF0ZWd5IHtcbiAgICAvKipcbiAgICAgKiBFeHBlY3RzIGFsbCBlbnRyeSBwb2ludHMgdG8gYmUgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBwYWNrYWdlXG4gICAgICovXG4gICAgUkVTT0xWRSA9IFwicmVzb2x2ZVwiLFxuICAgIC8qKlxuICAgICAqIEV4cGVjdHMgYWxsIGVudHJ5IHBvaW50cyB0byBiZSB0b3AtbGV2ZWwgZGlyZWN0b3JpZXNcbiAgICAgKi9cbiAgICBFWFBBTkQgPSBcImV4cGFuZFwiLFxuICAgIC8qKlxuICAgICAqIEV4cGVjdHMgYWxsIGVudHJ5IHBvaW50cyB0byBiZSBpbmRpdmlkdWFsIGZpbGVzXG4gICAgICovXG4gICAgUEFDS0FHRVMgPSBcInBhY2thZ2VzXCIsXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIG11bHRpcGxlIHByb2plY3RzIGludG8gYSBzaW5nbGUgZG9jdW1lbnRhdGlvbiBzaXRlXG4gICAgICovXG4gICAgTUVSR0UgPSBcIm1lcmdlXCIsXG59XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsb2dnZXIgdGhhdCBzaG91bGQgYmUgdXNlZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly90eXBlZG9jLm9yZy9kb2N1bWVudHMvT3B0aW9ucy5PdGhlci5odG1sI2xvZ2xldmVsXG4gKi9cbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgICAvKipcbiAgICAgKiBMb2cgYWxsIG1lc3NhZ2VzIGluY2x1ZGluZyB2ZXJib3NlIGRlYnVnIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgVkVSQk9TRSA9IFwiVmVyYm9zZVwiLFxuICAgIC8qKlxuICAgICAqIExvZyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFuZCBhYm92ZVxuICAgICAqL1xuICAgIElORk8gPSBcIkluZm9cIixcbiAgICAvKipcbiAgICAgKiBMb2cgd2FybmluZ3MgYW5kIGVycm9ycyBvbmx5XG4gICAgICovXG4gICAgV0FSTiA9IFwiV2FyblwiLFxuICAgIC8qKlxuICAgICAqIExvZyBlcnJvcnMgb25seVxuICAgICAqL1xuICAgIEVSUk9SID0gXCJFcnJvclwiLFxuICAgIC8qKlxuICAgICAqIERpc2FibGUgYWxsIGxvZ2dpbmdcbiAgICAgKi9cbiAgICBOT05FID0gXCJOb25lXCIsXG59XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkb2N1bWVudGF0aW9uIG1vZGUgVHlwZURvYyBzaG91bGQgdXNlXG4gKlxuICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLkNvbW1lbnRzLmh0bWwjY29tbWVudHN0eWxlXG4gKi9cbmV4cG9ydCBlbnVtIENvbW1lbnRTdHlsZSB7XG4gICAgLyoqXG4gICAgICogUGFyc2UgSlNEb2Mgc3R5bGUgY29tbWVudHMgb25seVxuICAgICAqL1xuICAgIEpTRE9DID0gXCJqc2RvY1wiLFxuICAgIC8qKlxuICAgICAqIFBhcnNlIGJsb2NrIGNvbW1lbnRzXG4gICAgICovXG4gICAgQkxPQ0sgPSBcImJsb2NrXCIsXG4gICAgLyoqXG4gICAgICogUGFyc2UgbGluZSBjb21tZW50cyAoLy8pXG4gICAgICovXG4gICAgTElORSA9IFwibGluZVwiLFxuICAgIC8qKlxuICAgICAqIFBhcnNlIGFsbCBjb21tZW50IHN0eWxlc1xuICAgICAqL1xuICAgIEFMTCA9IFwiYWxsXCIsXG59XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHZpc2liaWxpdHkgZm9yIG1lbWJlcnMgd2l0aG91dCBhIHZpc2liaWxpdHkgdGFnXG4gKlxuICogQHNlZSBodHRwczovL3R5cGVkb2Mub3JnL2RvY3VtZW50cy9PcHRpb25zLkNvbW1lbnRzLmh0bWwjZGVmYXVsdHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGVudW0gVmlzaWJpbGl0eSB7XG4gICAgLyoqXG4gICAgICogUHVibGljIHZpc2liaWxpdHkgLSBhY2Nlc3NpYmxlIGZyb20gYW55d2hlcmVcbiAgICAgKi9cbiAgICBQVUJMSUMgPSBcInB1YmxpY1wiLFxuICAgIC8qKlxuICAgICAqIFByb3RlY3RlZCB2aXNpYmlsaXR5IC0gYWNjZXNzaWJsZSBmcm9tIGNsYXNzIGFuZCBzdWJjbGFzc2VzXG4gICAgICovXG4gICAgUFJPVEVDVEVEID0gXCJwcm90ZWN0ZWRcIixcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHZpc2liaWxpdHkgLSBhY2Nlc3NpYmxlIG9ubHkgd2l0aGluIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIFBSSVZBVEUgPSBcInByaXZhdGVcIixcbn1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdHlwZWRvYy5vcmcvZG9jdW1lbnRzL09wdGlvbnMuVmFsaWRhdGlvbi5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbk9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIElmIHNldCwgVHlwZURvYyB3aWxsIHByb2R1Y2Ugd2FybmluZ3Mgd2hlbiBhIHN5bWJvbCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uXG4gICAgICovXG4gICAgcmVhZG9ubHkgbm90RXhwb3J0ZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIElmIHNldCwgVHlwZURvYyB3aWxsIHByb2R1Y2Ugd2FybmluZ3Mgd2hlbiBhbiBleHBvcnRlZCBzeW1ib2wgaXMgbm90IGRvY3VtZW50ZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBub3REb2N1bWVudGVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQsIFR5cGVEb2Mgd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGFib3V0IFxcQGxpbmsgdGFncyB3aGljaCB3aWxsIHByb2R1Y2UgYnJva2VuIGxpbmtzXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW52YWxpZExpbms/OiBib29sZWFuO1xufVxuIl19
@@ -5,13 +5,32 @@ import type { Project } from "projen/lib/project";
5
5
  import type { Task } from "projen/lib/task";
6
6
  import { type TypeDocConfiguration } from "./typedoc-config";
7
7
  export interface TypeDocOptions {
8
+ /**
9
+ * Version of TypeDoc to use
10
+ *
11
+ * @default "^0.28"
12
+ */
8
13
  readonly version?: string;
14
+ /**
15
+ * Full TypeDoc configuration
16
+ *
17
+ * This configuration will be merged with the default configuration
18
+ */
9
19
  readonly typeDocConfig?: TypeDocConfiguration;
10
20
  }
21
+ /**
22
+ * TypeDoc component for projen projects
23
+ */
11
24
  export declare class TypeDoc extends Component {
12
25
  static of(project: Project): TypeDoc | undefined;
13
26
  private readonly typeDocConfiguration;
27
+ /**
28
+ * TypeDoc task
29
+ */
14
30
  readonly task: Task;
31
+ /**
32
+ * TypeDoc configuration file
33
+ */
15
34
  readonly file: JsonFile;
16
35
  constructor(project: NodeProject, options?: TypeDocOptions);
17
36
  }