@terraforge/terraform 0.0.20 → 0.0.22
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/dist/index.d.mts +26 -0
- package/dist/index.mjs +28 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -191,6 +191,17 @@ type GetDataProps<T = State> = {
|
|
|
191
191
|
type: string;
|
|
192
192
|
state: T;
|
|
193
193
|
};
|
|
194
|
+
type RefreshResourceProps<T = State> = {
|
|
195
|
+
type: string;
|
|
196
|
+
priorInputState: T;
|
|
197
|
+
priorOutputState: T;
|
|
198
|
+
};
|
|
199
|
+
type RefreshResourceResult<T = State> = {
|
|
200
|
+
kind: 'unchanged' | 'updated';
|
|
201
|
+
state: T;
|
|
202
|
+
} | {
|
|
203
|
+
kind: 'deleted';
|
|
204
|
+
};
|
|
194
205
|
interface Provider {
|
|
195
206
|
ownResource(id: string): boolean;
|
|
196
207
|
getResource(props: GetProps): Promise<{
|
|
@@ -214,6 +225,7 @@ interface Provider {
|
|
|
214
225
|
getData?(props: GetDataProps): Promise<{
|
|
215
226
|
state: State;
|
|
216
227
|
}>;
|
|
228
|
+
refreshResource?(props: RefreshResourceProps): Promise<RefreshResourceResult | undefined>;
|
|
217
229
|
destroy?(): Promise<void>;
|
|
218
230
|
}
|
|
219
231
|
//#endregion
|
|
@@ -284,6 +296,20 @@ declare class TerraformProvider implements Provider {
|
|
|
284
296
|
}: GetDataProps): Promise<{
|
|
285
297
|
state: State$1;
|
|
286
298
|
}>;
|
|
299
|
+
refreshResource({
|
|
300
|
+
type,
|
|
301
|
+
priorInputState,
|
|
302
|
+
priorOutputState
|
|
303
|
+
}: RefreshResourceProps): Promise<{
|
|
304
|
+
kind: "deleted";
|
|
305
|
+
state?: undefined;
|
|
306
|
+
} | {
|
|
307
|
+
kind: "unchanged";
|
|
308
|
+
state: State$1;
|
|
309
|
+
} | {
|
|
310
|
+
kind: "updated";
|
|
311
|
+
state: State$1;
|
|
312
|
+
}>;
|
|
287
313
|
}
|
|
288
314
|
//#endregion
|
|
289
315
|
//#region src/plugin/registry.d.ts
|
package/dist/index.mjs
CHANGED
|
@@ -217,6 +217,16 @@ const generateValue = (prop, ctx) => {
|
|
|
217
217
|
|
|
218
218
|
//#endregion
|
|
219
219
|
//#region src/provider.ts
|
|
220
|
+
const areStatesEqual = (left, right) => {
|
|
221
|
+
const replacer = (_, value) => {
|
|
222
|
+
if (value !== null && value instanceof Object && !Array.isArray(value)) return Object.keys(value).sort().reduce((sorted, key) => {
|
|
223
|
+
sorted[key] = value[key];
|
|
224
|
+
return sorted;
|
|
225
|
+
}, {});
|
|
226
|
+
return value;
|
|
227
|
+
};
|
|
228
|
+
return JSON.stringify(left, replacer) === JSON.stringify(right, replacer);
|
|
229
|
+
};
|
|
220
230
|
var TerraformProvider = class {
|
|
221
231
|
configured;
|
|
222
232
|
plugin;
|
|
@@ -305,6 +315,24 @@ var TerraformProvider = class {
|
|
|
305
315
|
if (!data) throw new Error(`Data source not found ${type}`);
|
|
306
316
|
return { state: data };
|
|
307
317
|
}
|
|
318
|
+
async refreshResource({ type, priorInputState, priorOutputState }) {
|
|
319
|
+
const plugin = await this.configure();
|
|
320
|
+
const refreshedState = await plugin.readResource(type, priorOutputState);
|
|
321
|
+
if (!refreshedState) return { kind: "deleted" };
|
|
322
|
+
const mergedState = {
|
|
323
|
+
...refreshedState,
|
|
324
|
+
...priorInputState
|
|
325
|
+
};
|
|
326
|
+
const { requiresReplace, plannedState } = await plugin.planResourceChange(type, refreshedState, mergedState, priorInputState);
|
|
327
|
+
if (requiresReplace.length === 0 && areStatesEqual(plannedState, refreshedState)) return {
|
|
328
|
+
kind: "unchanged",
|
|
329
|
+
state: refreshedState
|
|
330
|
+
};
|
|
331
|
+
return {
|
|
332
|
+
kind: "updated",
|
|
333
|
+
state: refreshedState
|
|
334
|
+
};
|
|
335
|
+
}
|
|
308
336
|
};
|
|
309
337
|
|
|
310
338
|
//#endregion
|