@terra-graph/conventions-aws 1.0.0-rc.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.
Files changed (91) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +25 -0
  3. package/dist/cjs/conventions/dataflow/profiles/base.js +89 -0
  4. package/dist/cjs/conventions/dataflow/profiles/dot.js +44 -0
  5. package/dist/cjs/conventions/dataflow/profiles/dot.test.js +147 -0
  6. package/dist/cjs/conventions/dataflow/rules.js +4 -0
  7. package/dist/cjs/conventions/dataflow/rules.test.js +11 -0
  8. package/dist/cjs/conventions/dataflow/rulesets.js +751 -0
  9. package/dist/cjs/conventions/dataflow/rulesets.test.js +27 -0
  10. package/dist/cjs/conventions/index.js +7 -0
  11. package/dist/cjs/conventions/index.test.js +8 -0
  12. package/dist/cjs/index.js +70 -0
  13. package/dist/cjs/index.test.js +58 -0
  14. package/dist/cjs/namespaces.js +14 -0
  15. package/dist/cjs/namespaces.test.js +17 -0
  16. package/dist/cjs/package.json +1 -0
  17. package/dist/cjs/plugins/AwsApiGateway.js +218 -0
  18. package/dist/cjs/plugins/AwsApiGateway.test.js +427 -0
  19. package/dist/cjs/plugins/AwsIam.js +432 -0
  20. package/dist/cjs/plugins/AwsIam.test.js +468 -0
  21. package/dist/cjs/plugins/AwsS3.js +107 -0
  22. package/dist/cjs/plugins/AwsS3.test.js +102 -0
  23. package/dist/cjs/plugins/AwsSns.js +52 -0
  24. package/dist/cjs/plugins/AwsSns.test.js +55 -0
  25. package/dist/cjs/plugins/AwsTransferFamily.js +105 -0
  26. package/dist/cjs/plugins/AwsTransferFamily.test.js +279 -0
  27. package/dist/cjs/rules/dot.js +36 -0
  28. package/dist/cjs/rules/dot.test.js +42 -0
  29. package/dist/cjs/rules/general.js +69 -0
  30. package/dist/cjs/rules/general.test.js +47 -0
  31. package/dist/cjs/rulesets/dot.js +25 -0
  32. package/dist/cjs/rulesets/dot.test.js +48 -0
  33. package/dist/esm/conventions/dataflow/profiles/base.d.ts +4 -0
  34. package/dist/esm/conventions/dataflow/profiles/base.js +86 -0
  35. package/dist/esm/conventions/dataflow/profiles/dot.d.ts +4 -0
  36. package/dist/esm/conventions/dataflow/profiles/dot.js +38 -0
  37. package/dist/esm/conventions/dataflow/profiles/dot.test.d.ts +1 -0
  38. package/dist/esm/conventions/dataflow/profiles/dot.test.js +109 -0
  39. package/dist/esm/conventions/dataflow/rules.d.ts +3 -0
  40. package/dist/esm/conventions/dataflow/rules.js +2 -0
  41. package/dist/esm/conventions/dataflow/rules.test.d.ts +1 -0
  42. package/dist/esm/conventions/dataflow/rules.test.js +6 -0
  43. package/dist/esm/conventions/dataflow/rulesets.d.ts +3 -0
  44. package/dist/esm/conventions/dataflow/rulesets.js +749 -0
  45. package/dist/esm/conventions/dataflow/rulesets.test.d.ts +1 -0
  46. package/dist/esm/conventions/dataflow/rulesets.test.js +22 -0
  47. package/dist/esm/conventions/index.d.ts +3 -0
  48. package/dist/esm/conventions/index.js +4 -0
  49. package/dist/esm/conventions/index.test.d.ts +1 -0
  50. package/dist/esm/conventions/index.test.js +6 -0
  51. package/dist/esm/index.d.ts +3 -0
  52. package/dist/esm/index.js +32 -0
  53. package/dist/esm/index.test.d.ts +1 -0
  54. package/dist/esm/index.test.js +53 -0
  55. package/dist/esm/namespaces.d.ts +7 -0
  56. package/dist/esm/namespaces.js +6 -0
  57. package/dist/esm/namespaces.test.d.ts +1 -0
  58. package/dist/esm/namespaces.test.js +15 -0
  59. package/dist/esm/plugins/AwsApiGateway.d.ts +6 -0
  60. package/dist/esm/plugins/AwsApiGateway.js +214 -0
  61. package/dist/esm/plugins/AwsApiGateway.test.d.ts +1 -0
  62. package/dist/esm/plugins/AwsApiGateway.test.js +425 -0
  63. package/dist/esm/plugins/AwsIam.d.ts +32 -0
  64. package/dist/esm/plugins/AwsIam.js +428 -0
  65. package/dist/esm/plugins/AwsIam.test.d.ts +1 -0
  66. package/dist/esm/plugins/AwsIam.test.js +466 -0
  67. package/dist/esm/plugins/AwsS3.d.ts +12 -0
  68. package/dist/esm/plugins/AwsS3.js +103 -0
  69. package/dist/esm/plugins/AwsS3.test.d.ts +1 -0
  70. package/dist/esm/plugins/AwsS3.test.js +100 -0
  71. package/dist/esm/plugins/AwsSns.d.ts +6 -0
  72. package/dist/esm/plugins/AwsSns.js +48 -0
  73. package/dist/esm/plugins/AwsSns.test.d.ts +1 -0
  74. package/dist/esm/plugins/AwsSns.test.js +53 -0
  75. package/dist/esm/plugins/AwsTransferFamily.d.ts +6 -0
  76. package/dist/esm/plugins/AwsTransferFamily.js +101 -0
  77. package/dist/esm/plugins/AwsTransferFamily.test.d.ts +1 -0
  78. package/dist/esm/plugins/AwsTransferFamily.test.js +277 -0
  79. package/dist/esm/rules/dot.d.ts +3 -0
  80. package/dist/esm/rules/dot.js +34 -0
  81. package/dist/esm/rules/dot.test.d.ts +1 -0
  82. package/dist/esm/rules/dot.test.js +37 -0
  83. package/dist/esm/rules/general.d.ts +3 -0
  84. package/dist/esm/rules/general.js +67 -0
  85. package/dist/esm/rules/general.test.d.ts +1 -0
  86. package/dist/esm/rules/general.test.js +42 -0
  87. package/dist/esm/rulesets/dot.d.ts +3 -0
  88. package/dist/esm/rulesets/dot.js +23 -0
  89. package/dist/esm/rulesets/dot.test.d.ts +1 -0
  90. package/dist/esm/rulesets/dot.test.js +43 -0
  91. package/package.json +45 -0
@@ -0,0 +1,42 @@
1
+ import { ruleName } from '../namespaces.js';
2
+ import generalRules from './general.js';
3
+ const serialize = (name) => {
4
+ return generalRules.resolve(name).serialize();
5
+ };
6
+ describe('general rules', () => {
7
+ it('shoud expose all general named rules', () => {
8
+ expect(generalRules.names().sort()).toStrictEqual([
9
+ ruleName('data.remove'),
10
+ ruleName('lambda.only_event_source_mapping'),
11
+ ruleName('log_groups.only_event_bridge'),
12
+ ].sort());
13
+ });
14
+ it('shoud remove data nodes except policy artifacts by default', () => {
15
+ expect(serialize(ruleName('data.remove'))).toStrictEqual({
16
+ id: 'RemoveNode',
17
+ config: {
18
+ node: {
19
+ or: [
20
+ {
21
+ and: [
22
+ { attr: { key: 'terraform.kind', eq: 'data' } },
23
+ {
24
+ not: {
25
+ attr: {
26
+ key: 'terraform.resource',
27
+ in: ['aws_iam_policy_document', 'aws_iam_policy'],
28
+ },
29
+ },
30
+ },
31
+ ],
32
+ },
33
+ ],
34
+ },
35
+ },
36
+ });
37
+ });
38
+ it('shoud remove non-event-bridge log groups and non-core lambda resources by query', () => {
39
+ expect(serialize(ruleName('log_groups.only_event_bridge')).id).toBe('RemoveNode');
40
+ expect(serialize(ruleName('lambda.only_event_source_mapping')).id).toBe('RemoveNode');
41
+ });
42
+ });
@@ -0,0 +1,3 @@
1
+ import { NamedRuleSetRegistry } from '@terra-graph/core';
2
+ declare const _default: NamedRuleSetRegistry;
3
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import { EdgeLegend, NamedRuleSetRegistry, RuleSet } from '@terra-graph/core';
2
+ import { ruleName, ruleSetName } from '../namespaces.js';
3
+ export default new NamedRuleSetRegistry({
4
+ [ruleSetName('dot.sqs.dlq')]: new RuleSet({
5
+ rules: [
6
+ { namedRule: ruleName('dot.sqs.dlq.align') },
7
+ new EdgeLegend({
8
+ options: {
9
+ colour: '#c20202',
10
+ title: 'SQS dead letters / failures',
11
+ },
12
+ edge: {
13
+ from: {
14
+ attr: { key: 'terraform.resource', eq: 'aws_sqs_queue' },
15
+ },
16
+ to: {
17
+ attr: { key: 'terraform.resource', eq: 'aws_sqs_queue' },
18
+ },
19
+ },
20
+ }),
21
+ ],
22
+ }),
23
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import { ruleSetName } from '../namespaces.js';
2
+ import dotRules from '../rules/dot.js';
3
+ import dotRuleSet from './dot.js';
4
+ describe('dot rule sets', () => {
5
+ it('shoud expose the SQS dead-letter rule set', () => {
6
+ const name = ruleSetName('dot.sqs.dlq');
7
+ expect(dotRuleSet.names()).toEqual([name]);
8
+ const resolved = dotRuleSet.resolve(name);
9
+ const phases = resolved.resolvePhases(dotRules);
10
+ expect(phases).toHaveLength(1);
11
+ expect(phases[0]).toHaveLength(2);
12
+ expect(phases[0][0].serialize()).toStrictEqual({
13
+ id: 'AlignNodes',
14
+ config: {
15
+ edge: {
16
+ from: {
17
+ attr: { key: 'terraform.resource', eq: 'aws_sqs_queue' },
18
+ },
19
+ to: {
20
+ attr: { key: 'terraform.resource', eq: 'aws_sqs_queue' },
21
+ },
22
+ },
23
+ },
24
+ });
25
+ expect(phases[0][1]).toMatchObject({
26
+ serialize: expect.any(Function),
27
+ });
28
+ expect(phases[0][1].serialize().id).toBe('EdgeLegend');
29
+ expect(phases[0][1].serialize().config.options).toMatchObject({
30
+ colour: '#c20202',
31
+ title: 'SQS dead letters / failures',
32
+ });
33
+ const edgeLegend = phases[0][1].serialize();
34
+ if (!('edge' in edgeLegend.config)) {
35
+ throw new Error('Expected EdgeLegend to provide an edge config');
36
+ }
37
+ expect(edgeLegend.config.edge).toMatchObject({
38
+ from: {
39
+ attr: { key: 'terraform.resource', eq: 'aws_sqs_queue' },
40
+ },
41
+ });
42
+ });
43
+ });
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@terra-graph/conventions-aws",
3
+ "version": "1.0.0-rc.1",
4
+ "description": "AWS convention assets for terra-graph",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/terra-graph/conventions"
9
+ },
10
+ "main": "./dist/cjs/index.js",
11
+ "module": "./dist/esm/index.js",
12
+ "types": "./dist/esm/index.d.ts",
13
+ "type": "module",
14
+ "files": [
15
+ "dist",
16
+ "CHANGELOG.md",
17
+ "README.md"
18
+ ],
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/esm/index.d.ts",
22
+ "import": "./dist/esm/index.js",
23
+ "require": "./dist/cjs/index.js",
24
+ "default": "./dist/esm/index.js"
25
+ }
26
+ },
27
+ "scripts": {
28
+ "prebuild": "yarn workspace @terra-graph/conventions-core build",
29
+ "build": "rm -rf dist && tsc -p tsconfig.json && tsc -p tsconfig-commonjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
30
+ "test": "jest --config jest.config.cjs --coverage",
31
+ "semantic-release": "semantic-release"
32
+ },
33
+ "peerDependencies": {
34
+ "@terra-graph/core": "^1.0.0-rc.4"
35
+ },
36
+ "devDependencies": {
37
+ "@terra-graph/core": "^1.0.0-rc.4"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "dependencies": {
43
+ "@terra-graph/conventions-core": "^1.0.0-rc.3"
44
+ }
45
+ }