@cloud-copilot/iam-convert 0.1.1
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/LICENSE.txt +661 -0
- package/dist/cjs/cli.d.ts +3 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +80 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/convert.d.ts +22 -0
- package/dist/cjs/convert.d.ts.map +1 -0
- package/dist/cjs/convert.js +31 -0
- package/dist/cjs/convert.js.map +1 -0
- package/dist/cjs/converters/converter.d.ts +12 -0
- package/dist/cjs/converters/converter.d.ts.map +1 -0
- package/dist/cjs/converters/converter.js +3 -0
- package/dist/cjs/converters/converter.js.map +1 -0
- package/dist/cjs/converters/terraform.d.ts +14 -0
- package/dist/cjs/converters/terraform.d.ts.map +1 -0
- package/dist/cjs/converters/terraform.js +150 -0
- package/dist/cjs/converters/terraform.js.map +1 -0
- package/dist/cjs/defaults.d.ts +5 -0
- package/dist/cjs/defaults.d.ts.map +1 -0
- package/dist/cjs/defaults.js +8 -0
- package/dist/cjs/defaults.js.map +1 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/util/StringBuffer.d.ts +36 -0
- package/dist/cjs/util/StringBuffer.d.ts.map +1 -0
- package/dist/cjs/util/StringBuffer.js +58 -0
- package/dist/cjs/util/StringBuffer.js.map +1 -0
- package/dist/cjs/util/json.d.ts +8 -0
- package/dist/cjs/util/json.d.ts.map +1 -0
- package/dist/cjs/util/json.js +18 -0
- package/dist/cjs/util/json.js.map +1 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +78 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/convert.d.ts +22 -0
- package/dist/esm/convert.d.ts.map +1 -0
- package/dist/esm/convert.js +28 -0
- package/dist/esm/convert.js.map +1 -0
- package/dist/esm/converters/converter.d.ts +12 -0
- package/dist/esm/converters/converter.d.ts.map +1 -0
- package/dist/esm/converters/converter.js +2 -0
- package/dist/esm/converters/converter.js.map +1 -0
- package/dist/esm/converters/terraform.d.ts +14 -0
- package/dist/esm/converters/terraform.d.ts.map +1 -0
- package/dist/esm/converters/terraform.js +146 -0
- package/dist/esm/converters/terraform.js.map +1 -0
- package/dist/esm/defaults.d.ts +5 -0
- package/dist/esm/defaults.d.ts.map +1 -0
- package/dist/esm/defaults.js +5 -0
- package/dist/esm/defaults.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/util/StringBuffer.d.ts +36 -0
- package/dist/esm/util/StringBuffer.d.ts.map +1 -0
- package/dist/esm/util/StringBuffer.js +52 -0
- package/dist/esm/util/StringBuffer.js.map +1 -0
- package/dist/esm/util/json.d.ts +8 -0
- package/dist/esm/util/json.d.ts.map +1 -0
- package/dist/esm/util/json.js +15 -0
- package/dist/esm/util/json.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Policy } from '@cloud-copilot/iam-policy';
|
|
2
|
+
import { TerraformConverter } from './converters/terraform.js';
|
|
3
|
+
declare const converters: {
|
|
4
|
+
/**
|
|
5
|
+
* Convert to Terraform
|
|
6
|
+
*/
|
|
7
|
+
tf: typeof TerraformConverter;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Convert a policy to a string in the specified format
|
|
11
|
+
*
|
|
12
|
+
* @param policy the policy to convert, it is assumed to be valid
|
|
13
|
+
* @param format the format to convert to
|
|
14
|
+
* @param options optional options for the conversion
|
|
15
|
+
* @returns the policy as a string converted to the specified format
|
|
16
|
+
*/
|
|
17
|
+
export declare function convert(policy: Policy, format: keyof typeof converters, options?: {
|
|
18
|
+
indentBy?: string;
|
|
19
|
+
lineSeparator?: string;
|
|
20
|
+
}): string;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAI9D,QAAA,MAAM,UAAU;IACd;;OAEG;;CAEJ,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAWR"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TerraformConverter } from './converters/terraform.js';
|
|
2
|
+
import { defaultOptions } from './defaults.js';
|
|
3
|
+
import { StringBuffer } from './util/StringBuffer.js';
|
|
4
|
+
const converters = {
|
|
5
|
+
/**
|
|
6
|
+
* Convert to Terraform
|
|
7
|
+
*/
|
|
8
|
+
tf: TerraformConverter
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Convert a policy to a string in the specified format
|
|
12
|
+
*
|
|
13
|
+
* @param policy the policy to convert, it is assumed to be valid
|
|
14
|
+
* @param format the format to convert to
|
|
15
|
+
* @param options optional options for the conversion
|
|
16
|
+
* @returns the policy as a string converted to the specified format
|
|
17
|
+
*/
|
|
18
|
+
export function convert(policy, format, options) {
|
|
19
|
+
if (!converters[format]) {
|
|
20
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
21
|
+
}
|
|
22
|
+
options = { ...defaultOptions, ...(options || {}) };
|
|
23
|
+
const converter = new converters[format]();
|
|
24
|
+
const stringBuffer = new StringBuffer(options.indentBy, options.lineSeparator);
|
|
25
|
+
converter.convert(policy, stringBuffer);
|
|
26
|
+
return stringBuffer.toString();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/convert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD,MAAM,UAAU,GAAG;IACjB;;OAEG;IACH,EAAE,EAAE,kBAAkB;CACvB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,MAA+B,EAC/B,OAAuD;IAEvD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAA;IAEnD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC9E,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACvC,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Policy } from "@cloud-copilot/iam-policy";
|
|
2
|
+
import { StringBuffer } from "../util/StringBuffer.js";
|
|
3
|
+
export interface Converter {
|
|
4
|
+
/**
|
|
5
|
+
* Converts the given policy to a new format in the given StringBuffer
|
|
6
|
+
*
|
|
7
|
+
* @param policy the policy to convert
|
|
8
|
+
* @param buffer the buffer to write the result to
|
|
9
|
+
*/
|
|
10
|
+
convert(policy: Policy, buffer: StringBuffer): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../../src/converters/converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../src/converters/converter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Policy } from '@cloud-copilot/iam-policy';
|
|
2
|
+
import { StringBuffer } from '../util/StringBuffer.js';
|
|
3
|
+
import { Converter } from './converter.js';
|
|
4
|
+
/**
|
|
5
|
+
* Converts an IAM policy to a Terraform aws_iam_policy_document data object.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TerraformConverter implements Converter {
|
|
8
|
+
convert(policy: Policy, stringBuffer: StringBuffer): void;
|
|
9
|
+
private convertActions;
|
|
10
|
+
private convertResources;
|
|
11
|
+
private convertPrincipals;
|
|
12
|
+
private convertConditions;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=terraform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/converters/terraform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAuB,MAAM,2BAA2B,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C;;GAEG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY;IAoElD,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,iBAAiB;CAuB1B"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts an IAM policy to a Terraform aws_iam_policy_document data object.
|
|
3
|
+
*/
|
|
4
|
+
export class TerraformConverter {
|
|
5
|
+
convert(policy, stringBuffer) {
|
|
6
|
+
stringBuffer.pushLine(`data "aws_iam_policy_document" "policy" {`);
|
|
7
|
+
stringBuffer.withIndent((policyBuffer) => {
|
|
8
|
+
if (policy.version() && policy.version() !== '2012-10-17') {
|
|
9
|
+
policyBuffer.pushLine(`version = "${policy.version()}"`);
|
|
10
|
+
}
|
|
11
|
+
for (const statement of policy.statements()) {
|
|
12
|
+
policyBuffer.pushLine(`statement {`);
|
|
13
|
+
policyBuffer.withIndent((statementBuffer) => {
|
|
14
|
+
if (statement.sid()) {
|
|
15
|
+
statementBuffer.pushLine(`sid = "${statement.sid()}"`);
|
|
16
|
+
statementBuffer.pushLine('');
|
|
17
|
+
}
|
|
18
|
+
if (statement.isDeny()) {
|
|
19
|
+
statementBuffer.pushLine(`effect = "Deny"`);
|
|
20
|
+
}
|
|
21
|
+
if (statement.isActionStatement()) {
|
|
22
|
+
statementBuffer.pushLine(`actions = [`);
|
|
23
|
+
this.convertActions(statement.actions(), statementBuffer);
|
|
24
|
+
statementBuffer.pushLine(`]`);
|
|
25
|
+
}
|
|
26
|
+
if (statement.isNotActionStatement()) {
|
|
27
|
+
statementBuffer.pushLine(`not_actions = [`);
|
|
28
|
+
this.convertActions(statement.notActions(), statementBuffer);
|
|
29
|
+
statementBuffer.pushLine(`]`);
|
|
30
|
+
}
|
|
31
|
+
if (statement.isResourceStatement()) {
|
|
32
|
+
statementBuffer.pushLine(`resources = [`);
|
|
33
|
+
this.convertResources(statement.resources(), statementBuffer);
|
|
34
|
+
statementBuffer.pushLine(`]`);
|
|
35
|
+
}
|
|
36
|
+
if (statement.isNotResourceStatement()) {
|
|
37
|
+
statementBuffer.pushLine(`not_resources = [`);
|
|
38
|
+
this.convertResources(statement.notResources(), statementBuffer);
|
|
39
|
+
statementBuffer.pushLine(`]`);
|
|
40
|
+
}
|
|
41
|
+
if (statement.isPrincipalStatement()) {
|
|
42
|
+
this.convertPrincipals(statement.principals(), 'principals', statement.hasSingleWildcardPrincipal(), statementBuffer);
|
|
43
|
+
}
|
|
44
|
+
if (statement.isNotPrincipalStatement()) {
|
|
45
|
+
this.convertPrincipals(statement.notPrincipals(), 'not_principals', statement.hasSingleWildcardNotPrincipal(), statementBuffer);
|
|
46
|
+
}
|
|
47
|
+
this.convertConditions(statement.conditions(), statementBuffer);
|
|
48
|
+
});
|
|
49
|
+
stringBuffer.pushLine(`}`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
stringBuffer.indent();
|
|
53
|
+
stringBuffer.unindent();
|
|
54
|
+
stringBuffer.pushLine(`}`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
convertActions(actions, statementBuffer) {
|
|
58
|
+
const actionCount = actions.length;
|
|
59
|
+
statementBuffer.withIndent((actionsBuffer) => {
|
|
60
|
+
actions.forEach((action, index) => {
|
|
61
|
+
let actionString = `"${action.value()}"`;
|
|
62
|
+
if (actionCount > 1 && index < actionCount - 1) {
|
|
63
|
+
actionString += ',';
|
|
64
|
+
}
|
|
65
|
+
actionsBuffer.pushLine(actionString);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
convertResources(resources, statementBuffer) {
|
|
70
|
+
const resourceCount = resources.length;
|
|
71
|
+
statementBuffer.withIndent((resourcesBuffer) => {
|
|
72
|
+
resources.forEach((resource, index) => {
|
|
73
|
+
let resourceString = `"${resource.value()}"`;
|
|
74
|
+
if (resourceCount > 1 && index < resourceCount - 1) {
|
|
75
|
+
resourceString += ',';
|
|
76
|
+
}
|
|
77
|
+
resourcesBuffer.pushLine(resourceString);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
convertPrincipals(principals, principalType, hasSingleWildcard, statementBuffer) {
|
|
82
|
+
if (hasSingleWildcard) {
|
|
83
|
+
statementBuffer.pushLine(`${principalType} {`);
|
|
84
|
+
statementBuffer.withIndent((principalBuffer) => {
|
|
85
|
+
principalBuffer.pushLine(`type = "*"`);
|
|
86
|
+
principalBuffer.pushLine(`identifiers = "*"`);
|
|
87
|
+
});
|
|
88
|
+
statementBuffer.pushLine(`}`);
|
|
89
|
+
statementBuffer.pushLine('');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const principalsByType = principals.reduce((acc, principal) => {
|
|
93
|
+
const type = principal.type();
|
|
94
|
+
if (!acc[type]) {
|
|
95
|
+
acc[type] = [];
|
|
96
|
+
}
|
|
97
|
+
acc[type].push(principal);
|
|
98
|
+
return acc;
|
|
99
|
+
}, {});
|
|
100
|
+
for (const type in principalsByType) {
|
|
101
|
+
statementBuffer.pushLine(`${principalType} {`);
|
|
102
|
+
statementBuffer.withIndent((principalBuffer) => {
|
|
103
|
+
principalBuffer.pushLine(`type = "${type}"`);
|
|
104
|
+
principalBuffer.pushLine(`identifiers = [`);
|
|
105
|
+
const principalsForType = principalsByType[type];
|
|
106
|
+
const principalCount = principalsForType.length;
|
|
107
|
+
principalBuffer.withIndent((identifiersBuffer) => {
|
|
108
|
+
principalsForType.forEach((principal, index) => {
|
|
109
|
+
let identifierString = `"${principal.value()}"`;
|
|
110
|
+
if (principalCount > 1 && index < principalCount - 1) {
|
|
111
|
+
identifierString += ',';
|
|
112
|
+
}
|
|
113
|
+
identifiersBuffer.pushLine(identifierString);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
principalBuffer.pushLine(`]`);
|
|
117
|
+
});
|
|
118
|
+
statementBuffer.pushLine(`}`);
|
|
119
|
+
statementBuffer.pushLine('');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
convertConditions(conditions, statementBuffer) {
|
|
123
|
+
for (const condition of conditions) {
|
|
124
|
+
statementBuffer.pushLine(`condition {`);
|
|
125
|
+
statementBuffer.withIndent((conditionBuffer) => {
|
|
126
|
+
conditionBuffer.pushLine(`test = "${condition.operation().value()}"`);
|
|
127
|
+
conditionBuffer.pushLine(`variable = "${condition.conditionKey()}"`);
|
|
128
|
+
conditionBuffer.pushLine(`values = [`);
|
|
129
|
+
const numberOfValues = condition.conditionValues().length;
|
|
130
|
+
conditionBuffer.withIndent((valuesBuffer) => {
|
|
131
|
+
condition.conditionValues().forEach((value, index) => {
|
|
132
|
+
let valueString = `"${value}"`;
|
|
133
|
+
if (numberOfValues > 1 && index < numberOfValues - 1) {
|
|
134
|
+
valueString += ',';
|
|
135
|
+
}
|
|
136
|
+
valuesBuffer.pushLine(valueString);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
conditionBuffer.pushLine(']');
|
|
140
|
+
});
|
|
141
|
+
statementBuffer.pushLine('}');
|
|
142
|
+
statementBuffer.pushLine('');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=terraform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../src/converters/terraform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;CAG1B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;CACpB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare class StringBuffer {
|
|
2
|
+
private buffer;
|
|
3
|
+
private indentLevel;
|
|
4
|
+
private indentBy;
|
|
5
|
+
private lineSeparator;
|
|
6
|
+
constructor(indentBy?: string, lineSeparator?: string);
|
|
7
|
+
/**
|
|
8
|
+
* Executes a callback the indent level increased by one level
|
|
9
|
+
*/
|
|
10
|
+
withIndent(callback: (buffer: StringBuffer) => void): void;
|
|
11
|
+
/**
|
|
12
|
+
* Adds a new line to the buffer
|
|
13
|
+
* @param text the text to add
|
|
14
|
+
*/
|
|
15
|
+
pushLine(text: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Increases the indent level
|
|
18
|
+
*/
|
|
19
|
+
indent(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Decreases the indent level
|
|
22
|
+
*/
|
|
23
|
+
unindent(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Create the final string from the buffer
|
|
26
|
+
* @returns the final string of each line joined by a new line
|
|
27
|
+
*/
|
|
28
|
+
toString(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the current buffer contents
|
|
31
|
+
*
|
|
32
|
+
* @returns the string array of buffer contents
|
|
33
|
+
*/
|
|
34
|
+
getBuffer(): string[];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=StringBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringBuffer.d.ts","sourceRoot":"","sources":["../../../src/util/StringBuffer.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAQ;gBAEV,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;IAK5D;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAMjE;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC;;OAEG;IACI,MAAM,IAAI,IAAI;IAIrB;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIzB;;;;OAIG;IACI,SAAS,IAAI,MAAM,EAAE;CAG7B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export class StringBuffer {
|
|
2
|
+
constructor(indentBy, lineSeparator) {
|
|
3
|
+
this.buffer = [];
|
|
4
|
+
this.indentLevel = 0;
|
|
5
|
+
this.indentBy = indentBy ?? ' ';
|
|
6
|
+
this.lineSeparator = lineSeparator ?? '\n';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Executes a callback the indent level increased by one level
|
|
10
|
+
*/
|
|
11
|
+
withIndent(callback) {
|
|
12
|
+
this.indent();
|
|
13
|
+
callback(this);
|
|
14
|
+
this.unindent();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Adds a new line to the buffer
|
|
18
|
+
* @param text the text to add
|
|
19
|
+
*/
|
|
20
|
+
pushLine(text) {
|
|
21
|
+
const indent = this.indentBy.repeat(this.indentLevel);
|
|
22
|
+
this.buffer.push(indent + text);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Increases the indent level
|
|
26
|
+
*/
|
|
27
|
+
indent() {
|
|
28
|
+
this.indentLevel++;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Decreases the indent level
|
|
32
|
+
*/
|
|
33
|
+
unindent() {
|
|
34
|
+
this.indentLevel = Math.max(this.indentLevel - 1, 0);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create the final string from the buffer
|
|
38
|
+
* @returns the final string of each line joined by a new line
|
|
39
|
+
*/
|
|
40
|
+
toString() {
|
|
41
|
+
return this.buffer.join(this.lineSeparator);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the current buffer contents
|
|
45
|
+
*
|
|
46
|
+
* @returns the string array of buffer contents
|
|
47
|
+
*/
|
|
48
|
+
getBuffer() {
|
|
49
|
+
return this.buffer;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=StringBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringBuffer.js","sourceRoot":"","sources":["../../../src/util/StringBuffer.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IAMvB,YAAmB,QAAiB,EAAE,aAAsB;QALpD,WAAM,GAAa,EAAE,CAAA;QACrB,gBAAW,GAAG,CAAC,CAAA;QAKrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAA;QAChC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAA;IAC5C,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,QAAwC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,IAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACjC,CAAC;IAED;;OAEG;IACI,MAAM;QACX,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED;;;OAGG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC7C,CAAC;IAED;;;;OAIG;IACI,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Try to parse a string as JSON. If the string is not valid JSON, return undefined.
|
|
3
|
+
*
|
|
4
|
+
* @param input the string to parse
|
|
5
|
+
* @returns the parsed JSON or undefined if the input is not valid JSON
|
|
6
|
+
*/
|
|
7
|
+
export declare function tryParseJson(input: string): any | undefined;
|
|
8
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/util/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAM3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Try to parse a string as JSON. If the string is not valid JSON, return undefined.
|
|
3
|
+
*
|
|
4
|
+
* @param input the string to parse
|
|
5
|
+
* @returns the parsed JSON or undefined if the input is not valid JSON
|
|
6
|
+
*/
|
|
7
|
+
export function tryParseJson(input) {
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(input);
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/util/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cloud-copilot/iam-convert",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Convert AWS IAM JSON policies to other formats",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/cloud-copilot/iam-convert.git"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/esm/index.js",
|
|
12
|
+
"require": "./dist/cjs/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/**/*"
|
|
17
|
+
],
|
|
18
|
+
"types": "dist/cjs/index.d.ts",
|
|
19
|
+
"bin": {
|
|
20
|
+
"iam-convert": "dist/esm/cli.js"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "npx tsc -p tsconfig.cjs.json && npx tsc -p tsconfig.esm.json && ./postbuild.sh",
|
|
24
|
+
"clean": "rm -rf dist",
|
|
25
|
+
"test": "npx vitest --run --coverage",
|
|
26
|
+
"release": "npm run clean && npm run build && npm run test && npm run format-check && npm publish",
|
|
27
|
+
"format": "npx prettier --write src/",
|
|
28
|
+
"format-check": "npx prettier --check src/"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"AWS",
|
|
32
|
+
"IAM",
|
|
33
|
+
"terraform",
|
|
34
|
+
"cloudformation",
|
|
35
|
+
"cdk"
|
|
36
|
+
],
|
|
37
|
+
"author": "David Kerber <dave@cloudcopilot.io>",
|
|
38
|
+
"license": "AGPL-3.0-or-later",
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/cloud-copilot/iam-convert/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/cloud-copilot/iam-convert#readme",
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@cloud-copilot/prettier-config": "^0.1.1",
|
|
45
|
+
"@types/node": "^22.5.0",
|
|
46
|
+
"@vitest/coverage-v8": "^2.0.5",
|
|
47
|
+
"typescript": "^5.5.4",
|
|
48
|
+
"vitest": "^2.0.5"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@cloud-copilot/cli": "^0.1.1",
|
|
52
|
+
"@cloud-copilot/iam-policy": "^0.1.12"
|
|
53
|
+
},
|
|
54
|
+
"prettier": "@cloud-copilot/prettier-config"
|
|
55
|
+
}
|