@nikovirtala/projen-constructs 0.1.3 → 0.1.5

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,20 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.JsiiProject = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
7
+ const projen_1 = require("projen");
8
+ const config_1 = require("../config");
9
+ const utils_1 = require("../utils");
10
+ class JsiiProject extends projen_1.cdk.JsiiProject {
11
+ constructor(options) {
12
+ const { mise, vitest, vitestOptions, ...baseOptions } = options;
13
+ super((0, utils_1.deepMerge)(config_1.jsiiProjectDefaultOptions, baseOptions));
14
+ (0, config_1.applyDefaultConfig)(this, vitest, vitestOptions, mise);
15
+ }
16
+ }
17
+ exports.JsiiProject = JsiiProject;
18
+ _a = JSII_RTTI_SYMBOL_1;
19
+ JsiiProject[_a] = { fqn: "@nikovirtala/projen-constructs.JsiiProject", version: "0.1.5" };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvanNpaS5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2RUFBNkU7QUFDN0UsbUNBQTZCO0FBQzdCLHNDQUEwRTtBQUMxRSxvQ0FBcUM7QUFLckMsTUFBYSxXQUFZLFNBQVEsWUFBRyxDQUFDLFdBQVc7SUFDNUMsWUFBWSxPQUEyQjtRQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFaEUsS0FBSyxDQUFDLElBQUEsaUJBQVMsRUFBeUIsa0NBQXlCLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVqRixJQUFBLDJCQUFrQixFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7O0FBUEwsa0NBUUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJucHggcHJvamVuXCIuXG5pbXBvcnQgeyBjZGsgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBhcHBseURlZmF1bHRDb25maWcsIGpzaWlQcm9qZWN0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vY29uZmlnXCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSnNpaVByb2plY3RPcHRpb25zIH0gZnJvbSBcIi4vanNpaS1vcHRpb25zLmdlbmVyYXRlZFwiO1xuXG5leHBvcnQgeyBKc2lpUHJvamVjdE9wdGlvbnMgfSBmcm9tIFwiLi9qc2lpLW9wdGlvbnMuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjbGFzcyBKc2lpUHJvamVjdCBleHRlbmRzIGNkay5Kc2lpUHJvamVjdCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSnNpaVByb2plY3RPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgbWlzZSwgdml0ZXN0LCB2aXRlc3RPcHRpb25zLCAuLi5iYXNlT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgICAgICBzdXBlcihkZWVwTWVyZ2U8Y2RrLkpzaWlQcm9qZWN0T3B0aW9ucz4oanNpaVByb2plY3REZWZhdWx0T3B0aW9ucywgYmFzZU9wdGlvbnMpKTtcblxuICAgICAgICBhcHBseURlZmF1bHRDb25maWcodGhpcywgdml0ZXN0LCB2aXRlc3RPcHRpb25zLCBtaXNlKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TypeScriptProject = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
7
+ const projen_1 = require("projen");
8
+ const config_1 = require("../config");
9
+ const utils_1 = require("../utils");
10
+ class TypeScriptProject extends projen_1.typescript.TypeScriptProject {
11
+ constructor(options) {
12
+ const { mise, vitest, vitestOptions, ...baseOptions } = options;
13
+ super((0, utils_1.deepMerge)(config_1.typescriptProjectDefaultOptions, baseOptions));
14
+ (0, config_1.applyDefaultConfig)(this, vitest, vitestOptions, mise);
15
+ }
16
+ }
17
+ exports.TypeScriptProject = TypeScriptProject;
18
+ _a = JSII_RTTI_SYMBOL_1;
19
+ TypeScriptProject[_a] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.1.5" };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvdHlwZXNjcmlwdC5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2RUFBNkU7QUFDN0UsbUNBQW9DO0FBQ3BDLHNDQUFnRjtBQUNoRixvQ0FBcUM7QUFLckMsTUFBYSxpQkFBa0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjtJQUMvRCxZQUFZLE9BQWlDO1FBQ3pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVoRSxLQUFLLENBQUMsSUFBQSxpQkFBUyxFQUFzQyx3Q0FBK0IsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXBHLElBQUEsMkJBQWtCLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7QUFQTCw4Q0FRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5weCBwcm9qZW5cIi5cbmltcG9ydCB7IHR5cGVzY3JpcHQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBhcHBseURlZmF1bHRDb25maWcsIHR5cGVzY3JpcHRQcm9qZWN0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vY29uZmlnXCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNjcmlwdC1vcHRpb25zLmdlbmVyYXRlZFwiO1xuXG5leHBvcnQgeyBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc2NyaXB0LW9wdGlvbnMuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjbGFzcyBUeXBlU2NyaXB0UHJvamVjdCBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG1pc2UsIHZpdGVzdCwgdml0ZXN0T3B0aW9ucywgLi4uYmFzZU9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgc3VwZXIoZGVlcE1lcmdlPHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RPcHRpb25zPih0eXBlc2NyaXB0UHJvamVjdERlZmF1bHRPcHRpb25zLCBiYXNlT3B0aW9ucykpO1xuXG4gICAgICAgIGFwcGx5RGVmYXVsdENvbmZpZyh0aGlzLCB2aXRlc3QsIHZpdGVzdE9wdGlvbnMsIG1pc2UpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import type { Project, SourceCodeOptions } from "projen";
2
+ import { Component } from "projen";
3
+ export interface ProjenProjectClassOptions extends SourceCodeOptions {
4
+ /**
5
+ * The name of the generated class
6
+ */
7
+ readonly name: string;
8
+ /**
9
+ * The base class to extend (e.g., "typescript.TypeScriptProject")
10
+ */
11
+ readonly baseClass: string;
12
+ /**
13
+ * The options interface name (e.g., "TypeScriptProjectOptions")
14
+ */
15
+ readonly optionsInterface: string;
16
+ /**
17
+ * The base options type (e.g., "typescript.TypeScriptProjectOptions")
18
+ */
19
+ readonly baseOptionsType: string;
20
+ /**
21
+ * The default config constant name (e.g., "typescriptProjectDefaultOptions")
22
+ */
23
+ readonly defaultConfig: string;
24
+ /**
25
+ * Output file path
26
+ */
27
+ readonly filePath: string;
28
+ /**
29
+ * Custom options to extract from constructor
30
+ * @default ["mise", "vitest", "vitestOptions"]
31
+ */
32
+ readonly customOptions?: string[];
33
+ /**
34
+ * Indentation size
35
+ * @default 4
36
+ */
37
+ readonly indent?: number;
38
+ }
39
+ export declare class ProjenProjectClass extends Component {
40
+ private readonly options;
41
+ private renderer;
42
+ constructor(project: Project, options: ProjenProjectClassOptions);
43
+ preSynthesize(): void;
44
+ }
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjenProjectClass = void 0;
4
+ const projen_1 = require("projen");
5
+ class CodeBuffer {
6
+ constructor(indent = " ") {
7
+ this.indent = indent;
8
+ this.lines = [];
9
+ this.indentLevel = 0;
10
+ }
11
+ flush() {
12
+ const current = this.lines;
13
+ this.reset();
14
+ return current;
15
+ }
16
+ line(code) {
17
+ const prefix = this.indent.repeat(this.indentLevel);
18
+ this.lines.push((prefix + (code ?? "")).trimEnd());
19
+ }
20
+ open(code) {
21
+ if (code) {
22
+ this.line(code);
23
+ }
24
+ this.indentLevel++;
25
+ }
26
+ close(code) {
27
+ if (this.indentLevel === 0) {
28
+ throw new Error("Cannot decrease indent level below zero");
29
+ }
30
+ this.indentLevel--;
31
+ if (code) {
32
+ this.line(code);
33
+ }
34
+ }
35
+ reset() {
36
+ this.lines = [];
37
+ this.indentLevel = 0;
38
+ }
39
+ }
40
+ class TypeScriptClassRenderer {
41
+ constructor(indent = 4) {
42
+ this.buffer = new CodeBuffer(" ".repeat(indent));
43
+ }
44
+ render(options) {
45
+ this.buffer.flush();
46
+ const customOptions = options.customOptions ?? ["mise", "vitest", "vitestOptions"];
47
+ const imports = this.extractImports(options);
48
+ this.renderImports(imports);
49
+ this.buffer.line();
50
+ this.renderExport(options);
51
+ this.buffer.line();
52
+ this.renderClass(options, customOptions);
53
+ this.buffer.line();
54
+ return this.buffer.flush().join("\n");
55
+ }
56
+ extractImports(options) {
57
+ const imports = new Map();
58
+ const baseModule = options.baseClass.split(".")[0];
59
+ const optionsFileName = this.getOptionsFileName(options.optionsInterface);
60
+ // Projen imports
61
+ imports.set("projen", new Set([baseModule]));
62
+ // Config imports
63
+ imports.set("../config", new Set(["applyDefaultConfig", options.defaultConfig]));
64
+ // Utils imports
65
+ imports.set("../utils", new Set(["deepMerge"]));
66
+ // Options interface import (type-only)
67
+ imports.set(`./${optionsFileName}.generated`, new Set([options.optionsInterface]));
68
+ return imports;
69
+ }
70
+ renderImports(imports) {
71
+ const sortedModules = Array.from(imports.keys()).sort((a, b) => {
72
+ // Sort: external packages first, then relative imports
73
+ const aIsRelative = a.startsWith(".");
74
+ const bIsRelative = b.startsWith(".");
75
+ if (aIsRelative !== bIsRelative) {
76
+ return aIsRelative ? 1 : -1;
77
+ }
78
+ return a.localeCompare(b);
79
+ });
80
+ for (const mod of sortedModules) {
81
+ const names = Array.from(imports.get(mod) || []).sort();
82
+ const isTypeOnly = mod.includes(".generated");
83
+ const importStmt = isTypeOnly ? "import type" : "import";
84
+ this.buffer.line(`${importStmt} { ${names.join(", ")} } from "${mod}";`);
85
+ }
86
+ }
87
+ renderExport(options) {
88
+ const optionsFileName = this.getOptionsFileName(options.optionsInterface);
89
+ this.buffer.line(`export { ${options.optionsInterface} } from "./${optionsFileName}.generated";`);
90
+ }
91
+ renderClass(options, customOptions) {
92
+ this.buffer.open(`export class ${options.name} extends ${options.baseClass} {`);
93
+ this.renderConstructor(options, customOptions);
94
+ this.buffer.close("}");
95
+ }
96
+ renderConstructor(options, customOptions) {
97
+ this.buffer.open(`constructor(options: ${options.optionsInterface}) {`);
98
+ this.buffer.line(`const { ${customOptions.join(", ")}, ...baseOptions } = options;`);
99
+ this.buffer.line();
100
+ this.buffer.line(`super(deepMerge<${options.baseOptionsType}>(${options.defaultConfig}, baseOptions));`);
101
+ this.buffer.line();
102
+ this.buffer.line("applyDefaultConfig(this, vitest, vitestOptions, mise);");
103
+ this.buffer.close("}");
104
+ }
105
+ getOptionsFileName(optionsInterface) {
106
+ // Map known interfaces to their file names
107
+ const mapping = {
108
+ TypeScriptProjectOptions: "typescript-options",
109
+ JsiiProjectOptions: "jsii-options",
110
+ AwsCdkTypeScriptAppProjectOptions: "awscdk-typescript-app-options",
111
+ AwsCdkConstructLibraryProjectOptions: "awscdk-construct-library-options",
112
+ };
113
+ return mapping[optionsInterface] || optionsInterface.toLowerCase();
114
+ }
115
+ }
116
+ class ProjenProjectClass extends projen_1.Component {
117
+ constructor(project, options) {
118
+ super(project);
119
+ this.options = options;
120
+ this.renderer = new TypeScriptClassRenderer(options.indent);
121
+ }
122
+ preSynthesize() {
123
+ const content = this.renderer.render(this.options);
124
+ new TypeScriptClassFile(this.project, this.options.filePath, content, {
125
+ readonly: this.options.readonly ?? true,
126
+ });
127
+ }
128
+ }
129
+ exports.ProjenProjectClass = ProjenProjectClass;
130
+ class TypeScriptClassFile extends projen_1.TextFile {
131
+ constructor(project, filePath, content, options = {}) {
132
+ super(project, filePath, options);
133
+ this.addLine(`// ${this.marker}`);
134
+ this.addLine(content);
135
+ }
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVuLXByb2plY3QtY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvamVuLXByb2plY3QtY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQTZDO0FBOEM3QyxNQUFNLFVBQVU7SUFJWixZQUE2QixTQUFTLEdBQUc7UUFBWixXQUFNLEdBQU4sTUFBTSxDQUFNO1FBSGpDLFVBQUssR0FBRyxFQUFjLENBQUM7UUFDdkIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7SUFFb0IsQ0FBQztJQUU3QyxLQUFLO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQWE7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLENBQUMsSUFBYTtRQUNkLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFhO1FBQ2YsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxF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LEdBQVAsT0FBTyxDQUEyQjtRQUduRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUJBQXVCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxhQUFhO1FBQ1QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5ELElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUk7U0FDMUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBbEJELGdEQWtCQztBQUVELE1BQU0sbUJBQW9CLFNBQVEsaUJBQVE7SUFDdEMsWUFBWSxPQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBZSxFQUFFLFVBQTZCLEVBQUU7UUFDNUYsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9qZWN0LCBTb3VyY2VDb2RlT3B0aW9ucyB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUgfSBmcm9tIFwicHJvamVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVuUHJvamVjdENsYXNzT3B0aW9ucyBleHRlbmRzIFNvdXJjZUNvZGVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGNsYXNzXG4gICAgICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgY2xhc3MgdG8gZXh0ZW5kIChlLmcuLCBcInR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RcIilcbiAgICAgKi9cbiAgICByZWFkb25seSBiYXNlQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIGludGVyZmFjZSBuYW1lIChlLmcuLCBcIlR5cGVTY3JpcHRQcm9qZWN0T3B0aW9uc1wiKVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9wdGlvbnNJbnRlcmZhY2U6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIG9wdGlvbnMgdHlwZSAoZS5nLiwgXCJ0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0T3B0aW9uc1wiKVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhc2VPcHRpb25zVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY29uZmlnIGNvbnN0YW50IG5hbWUgKGUuZy4sIFwidHlwZXNjcmlwdFByb2plY3REZWZhdWx0T3B0aW9uc1wiKVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlZmF1bHRDb25maWc6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE91dHB1dCBmaWxlIHBhdGhcbiAgICAgKi9cbiAgICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIG9wdGlvbnMgdG8gZXh0cmFjdCBmcm9tIGNvbnN0cnVjdG9yXG4gICAgICogQGRlZmF1bHQgW1wibWlzZVwiLCBcInZpdGVzdFwiLCBcInZpdGVzdE9wdGlvbnNcIl1cbiAgICAgKi9cbiAgICByZWFkb25seSBjdXN0b21PcHRpb25zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBJbmRlbnRhdGlvbiBzaXplXG4gICAgICogQGRlZmF1bHQgNFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluZGVudD86IG51bWJlcjtcbn1cblxuY2xhc3MgQ29kZUJ1ZmZlciB7XG4gICAgcHJpdmF0ZSBsaW5lcyA9IFtdIGFzIHN0cmluZ1tdO1xuICAgIHByaXZhdGUgaW5kZW50TGV2ZWwgPSAwO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmRlbnQgPSBcIiBcIikge31cblxuICAgIGZsdXNoKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMubGluZXM7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgbGluZShjb2RlPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuaW5kZW50LnJlcGVhdCh0aGlzLmluZGVudExldmVsKTtcbiAgICAgICAgdGhpcy5saW5lcy5wdXNoKChwcmVmaXggKyAoY29kZSA/PyBcIlwiKSkudHJpbUVuZCgpKTtcbiAgICB9XG5cbiAgICBvcGVuKGNvZGU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMubGluZShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGVudExldmVsKys7XG4gICAgfVxuXG4gICAgY2xvc2UoY29kZT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5pbmRlbnRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlY3JlYXNlIGluZGVudCBsZXZlbCBiZWxvdyB6ZXJvXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZW50TGV2ZWwtLTtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMubGluZShjb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGluZXMgPSBbXSBhcyBzdHJpbmdbXTtcbiAgICAgICAgdGhpcy5pbmRlbnRMZXZlbCA9IDA7XG4gICAgfVxufVxuXG5jbGFzcyBUeXBlU2NyaXB0Q2xhc3NSZW5kZXJlciB7XG4gICAgcHJpdmF0ZSBidWZmZXI6IENvZGVCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihpbmRlbnQgPSA0KSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IENvZGVCdWZmZXIoXCIgXCIucmVwZWF0KGluZGVudCkpO1xuICAgIH1cblxuICAgIHJlbmRlcihvcHRpb25zOiBQcm9qZW5Qcm9qZWN0Q2xhc3NPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgdGhpcy5idWZmZXIuZmx1c2goKTtcblxuICAgICAgICBjb25zdCBjdXN0b21PcHRpb25zID0gb3B0aW9ucy5jdXN0b21PcHRpb25zID8/IFtcIm1pc2VcIiwgXCJ2aXRlc3RcIiwgXCJ2aXRlc3RPcHRpb25zXCJdO1xuICAgICAgICBjb25zdCBpbXBvcnRzID0gdGhpcy5leHRyYWN0SW1wb3J0cyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnJlbmRlckltcG9ydHMoaW1wb3J0cyk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmxpbmUoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJFeHBvcnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmxpbmUoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDbGFzcyhvcHRpb25zLCBjdXN0b21PcHRpb25zKTtcbiAgICAgICAgdGhpcy5idWZmZXIubGluZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5mbHVzaCgpLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRyYWN0SW1wb3J0cyhvcHRpb25zOiBQcm9qZW5Qcm9qZWN0Q2xhc3NPcHRpb25zKTogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+IHtcbiAgICAgICAgY29uc3QgaW1wb3J0cyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgICAgICAgY29uc3QgYmFzZU1vZHVsZSA9IG9wdGlvbnMuYmFzZUNsYXNzLnNwbGl0KFwiLlwiKVswXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0ZpbGVOYW1lID0gdGhpcy5nZXRPcHRpb25zRmlsZU5hbWUob3B0aW9ucy5vcHRpb25zSW50ZXJmYWNlKTtcblxuICAgICAgICAvLyBQcm9qZW4gaW1wb3J0c1xuICAgICAgICBpbXBvcnRzLnNldChcInByb2plblwiLCBuZXcgU2V0KFtiYXNlTW9kdWxlXSkpO1xuXG4gICAgICAgIC8vIENvbmZpZyBpbXBvcnRzXG4gICAgICAgIGltcG9ydHMuc2V0KFwiLi4vY29uZmlnXCIsIG5ldyBTZXQoW1wiYXBwbHlEZWZhdWx0Q29uZmlnXCIsIG9wdGlvbnMuZGVmYXVsdENvbmZpZ10pKTtcblxuICAgICAgICAvLyBVdGlscyBpbXBvcnRzXG4gICAgICAgIGltcG9ydHMuc2V0KFwiLi4vdXRpbHNcIiwgbmV3IFNldChbXCJkZWVwTWVyZ2VcIl0pKTtcblxuICAgICAgICAvLyBPcHRpb25zIGludGVyZmFjZSBpbXBvcnQgKHR5cGUtb25seSlcbiAgICAgICAgaW1wb3J0cy5zZXQoYC4vJHtvcHRpb25zRmlsZU5hbWV9LmdlbmVyYXRlZGAsIG5ldyBTZXQoW29wdGlvbnMub3B0aW9uc0ludGVyZmFjZV0pKTtcblxuICAgICAgICByZXR1cm4gaW1wb3J0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckltcG9ydHMoaW1wb3J0czogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZE1vZHVsZXMgPSBBcnJheS5mcm9tKGltcG9ydHMua2V5cygpKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAvLyBTb3J0OiBleHRlcm5hbCBwYWNrYWdlcyBmaXJzdCwgdGhlbiByZWxhdGl2ZSBpbXBvcnRzXG4gICAgICAgICAgICBjb25zdCBhSXNSZWxhdGl2ZSA9IGEuc3RhcnRzV2l0aChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBiSXNSZWxhdGl2ZSA9IGIuc3RhcnRzV2l0aChcIi5cIik7XG4gICAgICAgICAgICBpZiAoYUlzUmVsYXRpdmUgIT09IGJJc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFJc1JlbGF0aXZlID8gMSA6IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBtb2Qgb2Ygc29ydGVkTW9kdWxlcykge1xuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBBcnJheS5mcm9tKGltcG9ydHMuZ2V0KG1vZCkgfHwgW10pLnNvcnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVHlwZU9ubHkgPSBtb2QuaW5jbHVkZXMoXCIuZ2VuZXJhdGVkXCIpO1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0U3RtdCA9IGlzVHlwZU9ubHkgPyBcImltcG9ydCB0eXBlXCIgOiBcImltcG9ydFwiO1xuICAgICAgICAgICAgdGhpcy5idWZmZXIubGluZShgJHtpbXBvcnRTdG10fSB7ICR7bmFtZXMuam9pbihcIiwgXCIpfSB9IGZyb20gXCIke21vZH1cIjtgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRXhwb3J0KG9wdGlvbnM6IFByb2plblByb2plY3RDbGFzc09wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0ZpbGVOYW1lID0gdGhpcy5nZXRPcHRpb25zRmlsZU5hbWUob3B0aW9ucy5vcHRpb25zSW50ZXJmYWNlKTtcbiAgICAgICAgdGhpcy5idWZmZXIubGluZShgZXhwb3J0IHsgJHtvcHRpb25zLm9wdGlvbnNJbnRlcmZhY2V9IH0gZnJvbSBcIi4vJHtvcHRpb25zRmlsZU5hbWV9LmdlbmVyYXRlZFwiO2ApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2xhc3Mob3B0aW9uczogUHJvamVuUHJvamVjdENsYXNzT3B0aW9ucywgY3VzdG9tT3B0aW9uczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5idWZmZXIub3BlbihgZXhwb3J0IGNsYXNzICR7b3B0aW9ucy5uYW1lfSBleHRlbmRzICR7b3B0aW9ucy5iYXNlQ2xhc3N9IHtgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDb25zdHJ1Y3RvcihvcHRpb25zLCBjdXN0b21PcHRpb25zKTtcbiAgICAgICAgdGhpcy5idWZmZXIuY2xvc2UoXCJ9XCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29uc3RydWN0b3Iob3B0aW9uczogUHJvamVuUHJvamVjdENsYXNzT3B0aW9ucywgY3VzdG9tT3B0aW9uczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5idWZmZXIub3BlbihgY29uc3RydWN0b3Iob3B0aW9uczogJHtvcHRpb25zLm9wdGlvbnNJbnRlcmZhY2V9KSB7YCk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmxpbmUoYGNvbnN0IHsgJHtjdXN0b21PcHRpb25zLmpvaW4oXCIsIFwiKX0sIC4uLmJhc2VPcHRpb25zIH0gPSBvcHRpb25zO2ApO1xuICAgICAgICB0aGlzLmJ1ZmZlci5saW5lKCk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmxpbmUoYHN1cGVyKGRlZXBNZXJnZTwke29wdGlvbnMuYmFzZU9wdGlvbnNUeXBlfT4oJHtvcHRpb25zLmRlZmF1bHRDb25maWd9LCBiYXNlT3B0aW9ucykpO2ApO1xuICAgICAgICB0aGlzLmJ1ZmZlci5saW5lKCk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmxpbmUoXCJhcHBseURlZmF1bHRDb25maWcodGhpcywgdml0ZXN0LCB2aXRlc3RPcHRpb25zLCBtaXNlKTtcIik7XG4gICAgICAgIHRoaXMuYnVmZmVyLmNsb3NlKFwifVwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wdGlvbnNGaWxlTmFtZShvcHRpb25zSW50ZXJmYWNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAvLyBNYXAga25vd24gaW50ZXJmYWNlcyB0byB0aGVpciBmaWxlIG5hbWVzXG4gICAgICAgIGNvbnN0IG1hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnM6IFwidHlwZXNjcmlwdC1vcHRpb25zXCIsXG4gICAgICAgICAgICBKc2lpUHJvamVjdE9wdGlvbnM6IFwianNpaS1vcHRpb25zXCIsXG4gICAgICAgICAgICBBd3NDZGtUeXBlU2NyaXB0QXBwUHJvamVjdE9wdGlvbnM6IFwiYXdzY2RrLXR5cGVzY3JpcHQtYXBwLW9wdGlvbnNcIixcbiAgICAgICAgICAgIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlQcm9qZWN0T3B0aW9uczogXCJhd3NjZGstY29uc3RydWN0LWxpYnJhcnktb3B0aW9uc1wiLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBtYXBwaW5nW29wdGlvbnNJbnRlcmZhY2VdIHx8IG9wdGlvbnNJbnRlcmZhY2UudG9Mb3dlckNhc2UoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9qZW5Qcm9qZWN0Q2xhc3MgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVuZGVyZXI6IFR5cGVTY3JpcHRDbGFzc1JlbmRlcmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb2plY3Q6IFByb2plY3QsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUHJvamVuUHJvamVjdENsYXNzT3B0aW9ucyxcbiAgICApIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgVHlwZVNjcmlwdENsYXNzUmVuZGVyZXIob3B0aW9ucy5pbmRlbnQpO1xuICAgIH1cblxuICAgIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgIG5ldyBUeXBlU2NyaXB0Q2xhc3NGaWxlKHRoaXMucHJvamVjdCwgdGhpcy5vcHRpb25zLmZpbGVQYXRoLCBjb250ZW50LCB7XG4gICAgICAgICAgICByZWFkb25seTogdGhpcy5vcHRpb25zLnJlYWRvbmx5ID8/IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY2xhc3MgVHlwZVNjcmlwdENsYXNzRmlsZSBleHRlbmRzIFRleHRGaWxlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9wdGlvbnM6IFNvdXJjZUNvZGVPcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCwgZmlsZVBhdGgsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZExpbmUoYC8vICR7dGhpcy5tYXJrZXJ9YCk7XG4gICAgICAgIHRoaXMuYWRkTGluZShjb250ZW50KTtcbiAgICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -50,7 +50,7 @@
50
50
  "publishConfig": {
51
51
  "access": "public"
52
52
  },
53
- "version": "0.1.3",
53
+ "version": "0.1.5",
54
54
  "types": "lib/index.d.ts",
55
55
  "stability": "stable",
56
56
  "jsii": {