codify-plugin-lib 1.0.75 → 1.0.77

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 (76) hide show
  1. package/.eslintrc.json +11 -4
  2. package/.github/workflows/release.yaml +19 -0
  3. package/.github/workflows/unit-test-ci.yaml +19 -0
  4. package/dist/entities/plugin.d.ts +1 -1
  5. package/dist/entities/plugin.js +5 -5
  6. package/dist/entities/resource-options.d.ts +6 -6
  7. package/dist/entities/resource-options.js +7 -9
  8. package/dist/entities/resource.d.ts +2 -3
  9. package/dist/entities/resource.js +2 -2
  10. package/dist/errors.d.ts +4 -0
  11. package/dist/errors.js +7 -0
  12. package/dist/index.d.ts +10 -10
  13. package/dist/index.js +9 -9
  14. package/dist/messages/handlers.d.ts +1 -1
  15. package/dist/messages/handlers.js +25 -24
  16. package/dist/plan/change-set.d.ts +37 -0
  17. package/dist/plan/change-set.js +146 -0
  18. package/dist/plan/plan-types.d.ts +23 -0
  19. package/dist/plan/plan-types.js +1 -0
  20. package/dist/plan/plan.d.ts +59 -0
  21. package/dist/plan/plan.js +228 -0
  22. package/dist/plugin/plugin.d.ts +17 -0
  23. package/dist/plugin/plugin.js +83 -0
  24. package/dist/resource/config-parser.d.ts +14 -0
  25. package/dist/resource/config-parser.js +48 -0
  26. package/dist/resource/parsed-resource-settings.d.ts +26 -0
  27. package/dist/resource/parsed-resource-settings.js +126 -0
  28. package/dist/resource/resource-controller.d.ts +30 -0
  29. package/dist/resource/resource-controller.js +247 -0
  30. package/dist/resource/resource-settings.d.ts +149 -0
  31. package/dist/resource/resource-settings.js +9 -0
  32. package/dist/resource/resource.d.ts +137 -0
  33. package/dist/resource/resource.js +44 -0
  34. package/dist/resource/stateful-parameter.d.ts +164 -0
  35. package/dist/resource/stateful-parameter.js +94 -0
  36. package/dist/utils/utils.d.ts +19 -3
  37. package/dist/utils/utils.js +52 -3
  38. package/package.json +6 -4
  39. package/src/index.ts +10 -11
  40. package/src/messages/handlers.test.ts +21 -42
  41. package/src/messages/handlers.ts +28 -27
  42. package/src/plan/change-set.test.ts +220 -0
  43. package/src/plan/change-set.ts +225 -0
  44. package/src/plan/plan-types.ts +27 -0
  45. package/src/{entities → plan}/plan.test.ts +35 -29
  46. package/src/plan/plan.ts +353 -0
  47. package/src/{entities → plugin}/plugin.test.ts +14 -13
  48. package/src/{entities → plugin}/plugin.ts +32 -27
  49. package/src/resource/config-parser.ts +77 -0
  50. package/src/{entities/resource-options.test.ts → resource/parsed-resource-settings.test.ts} +8 -7
  51. package/src/resource/parsed-resource-settings.ts +179 -0
  52. package/src/{entities/resource-stateful-mode.test.ts → resource/resource-controller-stateful-mode.test.ts} +36 -39
  53. package/src/{entities/resource.test.ts → resource/resource-controller.test.ts} +116 -176
  54. package/src/resource/resource-controller.ts +340 -0
  55. package/src/resource/resource-settings.test.ts +494 -0
  56. package/src/resource/resource-settings.ts +192 -0
  57. package/src/resource/resource.ts +149 -0
  58. package/src/resource/stateful-parameter.test.ts +93 -0
  59. package/src/resource/stateful-parameter.ts +217 -0
  60. package/src/utils/test-utils.test.ts +87 -0
  61. package/src/utils/utils.test.ts +2 -2
  62. package/src/utils/utils.ts +51 -5
  63. package/tsconfig.json +0 -1
  64. package/vitest.config.ts +10 -0
  65. package/src/entities/change-set.test.ts +0 -155
  66. package/src/entities/change-set.ts +0 -244
  67. package/src/entities/plan-types.ts +0 -44
  68. package/src/entities/plan.ts +0 -178
  69. package/src/entities/resource-options.ts +0 -156
  70. package/src/entities/resource-parameters.test.ts +0 -604
  71. package/src/entities/resource-types.ts +0 -31
  72. package/src/entities/resource.ts +0 -471
  73. package/src/entities/stateful-parameter.test.ts +0 -114
  74. package/src/entities/stateful-parameter.ts +0 -92
  75. package/src/entities/transform-parameter.ts +0 -13
  76. /package/src/{entities/errors.ts → errors.ts} +0 -0
@@ -1,156 +0,0 @@
1
- import { StringIndexedObject } from 'codify-schemas';
2
- import { StatefulParameter } from './stateful-parameter.js';
3
- import { TransformParameter } from './transform-parameter.js';
4
- import { ResourceParameterOptions } from './resource-types.js';
5
- import { ParameterOptions } from './plan-types.js';
6
-
7
- export interface ResourceOptions<T extends StringIndexedObject> {
8
-
9
- /**
10
- * The id of the resource.
11
- */
12
- type: string;
13
-
14
- /**
15
- * Schema to validate user configs with. Must be in the format JSON Schema 2020-12
16
- */
17
- schema?: unknown
18
-
19
- /**
20
- * If true, statefulParameter.applyRemove() will be called before resource destruction.
21
- * Defaults to false.
22
- */
23
- callStatefulParameterRemoveOnDestroy?: boolean,
24
-
25
- /**
26
- * An array of type ids of resources that this resource depends on. This affects the order in which the resources are
27
- * planned and applied.
28
- */
29
- dependencies?: string[];
30
-
31
- /**
32
- * Additional options for configuring parameters.
33
- */
34
- parameterOptions?: Partial<Record<keyof T,
35
- ResourceParameterOptions
36
- | ResourceStatefulParameterOptions<T>
37
- | ResourceTransformParameterOptions<T>
38
- >>
39
- }
40
-
41
- export interface ResourceStatefulParameterOptions<T extends StringIndexedObject> {
42
- statefulParameter: StatefulParameter<T, T[keyof T]>;
43
- order?: number;
44
- }
45
-
46
- export interface ResourceTransformParameterOptions<T extends StringIndexedObject> {
47
- transformParameter: TransformParameter<T>;
48
- order?: number;
49
- }
50
-
51
- export class ResourceOptionsParser<T extends StringIndexedObject> {
52
- private options: ResourceOptions<T>;
53
-
54
- constructor(options: ResourceOptions<T>) {
55
- this.options = options;
56
- }
57
-
58
- get statefulParameters(): Map<keyof T, StatefulParameter<T, T[keyof T]>> {
59
- const statefulParameters = Object.entries(this.options.parameterOptions ?? {})
60
- .filter(([, p]) => p?.hasOwnProperty('statefulParameter'))
61
- .map(([k, v]) => [k, v as ResourceStatefulParameterOptions<T>] as const)
62
- .map(([k, v]) => [k, v.statefulParameter] as const)
63
-
64
- return new Map(statefulParameters);
65
- }
66
-
67
- get transformParameters(): Map<keyof T, TransformParameter<T>> {
68
- const transformParameters =
69
- Object.entries(this.options.parameterOptions ?? {})
70
- .filter(([, p]) => p?.hasOwnProperty('transformParameter'))
71
- .map(([k, v]) => [k, v as ResourceTransformParameterOptions<T>] as const)
72
- .map(([k, v]) => [k, v.transformParameter] as const)
73
-
74
- return new Map(transformParameters);
75
- }
76
-
77
- get resourceParameters(): Map<keyof T, ResourceParameterOptions> {
78
- const resourceParameters =
79
- Object.entries(this.options.parameterOptions ?? {})
80
- .filter(([, p]) => !(p?.hasOwnProperty('statefulParameter') || p?.hasOwnProperty('transformParameter')))
81
- .map(([k, v]) => [k, v as ResourceParameterOptions] as const)
82
-
83
- return new Map(resourceParameters);
84
- }
85
-
86
- get changeSetParameterOptions(): Record<keyof T, ParameterOptions> {
87
- const resourceParameters = Object.fromEntries(
88
- [...this.resourceParameters.entries()]
89
- .map(([name, value]) => ([name, { ...value, isStatefulParameter: false }]))
90
- );
91
-
92
- const statefulParameters = [...this.statefulParameters.entries()]
93
- ?.reduce((obj, sp) => {
94
- return {
95
- ...obj,
96
- [sp[0]]: {
97
- ...sp[1].options,
98
- isStatefulParameter: true,
99
- }
100
- }
101
- }, {} as Record<keyof T, ParameterOptions>)
102
-
103
- return {
104
- ...resourceParameters,
105
- ...statefulParameters,
106
- }
107
- }
108
-
109
- get defaultValues(): Partial<Record<keyof T, unknown>> {
110
- if (!this.options.parameterOptions) {
111
- return {};
112
- }
113
-
114
- return Object.fromEntries(
115
- [...this.resourceParameters.entries()]
116
- .filter(([, rp]) => rp.default !== undefined)
117
- .map(([name, rp]) => [name, rp.default])
118
- ) as Partial<Record<keyof T, unknown>>;
119
- }
120
-
121
- get statefulParameterOrder(): Map<keyof T, number> {
122
- const entries = Object.entries(this.options.parameterOptions ?? {})
123
- .filter(([, v]) => v?.hasOwnProperty('statefulParameter'))
124
- .map(([k, v]) => [k, v as ResourceStatefulParameterOptions<T>] as const)
125
-
126
- const orderedEntries = entries.filter(([, v]) => v.order !== undefined)
127
- const unorderedEntries = entries.filter(([, v]) => v.order === undefined)
128
-
129
- orderedEntries.sort((a, b) => a[1].order! - b[1].order!);
130
-
131
- const resultArray = [
132
- ...orderedEntries.map(([k]) => k),
133
- ...unorderedEntries.map(([k]) => k)
134
- ]
135
-
136
- return new Map(resultArray.map((key, idx) => [key, idx]));
137
- }
138
-
139
- get transformParameterOrder(): Map<keyof T, number> {
140
- const entries = Object.entries(this.options.parameterOptions ?? {})
141
- .filter(([, v]) => v?.hasOwnProperty('transformParameter'))
142
- .map(([k, v]) => [k, v as ResourceTransformParameterOptions<T>] as const)
143
-
144
- const orderedEntries = entries.filter(([, v]) => v.order !== undefined)
145
- const unorderedEntries = entries.filter(([, v]) => v.order === undefined)
146
-
147
- orderedEntries.sort((a, b) => a[1].order! - b[1].order!);
148
-
149
- const resultArray = [
150
- ...orderedEntries.map(([k]) => k),
151
- ...unorderedEntries.map(([k]) => k)
152
- ]
153
-
154
- return new Map(resultArray.map((key, idx) => [key, idx]));
155
- }
156
- }