declastruct 1.1.12 → 1.3.0

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.
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env tsx
2
2
  /**
3
- * .what = executes the apply command to apply an infrastructure change plan
3
+ * .what = executes the apply command to apply infrastructure changes
4
4
  * .why = provides CLI interface for applying infrastructure changes
5
- * .note = loads plan from file and wish file from plan.wish.uri
5
+ * .note = supports two modes:
6
+ * - standard: load plan from file, validate staleness, apply
7
+ * - yolo: plan from wish directly, skip validation, apply immediately
6
8
  */
7
- export declare const executeApplyCommand: ({ planFilePath, }: {
8
- planFilePath: string;
9
+ export declare const executeApplyCommand: (input: {
10
+ planFilePath?: string;
11
+ wishFilePath?: string;
9
12
  }) => Promise<void>;
@@ -79,7 +79,7 @@ describe('executeApplyCommand', () => {
79
79
  await (0, promises_1.writeFile)(planFilePath, JSON.stringify(invalidPlan, null, 2));
80
80
  await expect((0, apply_1.executeApplyCommand)({ planFilePath })).rejects.toThrow();
81
81
  });
82
- it('should throw when wish file does not export getProviders', async () => {
82
+ it('should throw when wish file does not export getResources', async () => {
83
83
  const badWishPath = (0, path_1.resolve)(process.cwd(), 'src/.test/assets/bad-apply-wish.ts');
84
84
  // create bad wish file
85
85
  await (0, promises_1.writeFile)(badWishPath, 'export const foo = "bar";', 'utf-8');
@@ -91,7 +91,7 @@ describe('executeApplyCommand', () => {
91
91
  changes: [],
92
92
  };
93
93
  await (0, promises_1.writeFile)(planFilePath, JSON.stringify(invalidPlan, null, 2));
94
- await expect((0, apply_1.executeApplyCommand)({ planFilePath })).rejects.toThrow('Wish file must export getProviders() function');
94
+ await expect((0, apply_1.executeApplyCommand)({ planFilePath })).rejects.toThrow('Wish file must export getResources() function');
95
95
  // cleanup
96
96
  await (0, promises_1.rm)(badWishPath);
97
97
  });
@@ -144,5 +144,72 @@ describe('executeApplyCommand', () => {
144
144
  // applying stale plan should throw
145
145
  await expect((0, apply_1.executeApplyCommand)({ planFilePath })).rejects.toThrow('plan is stale');
146
146
  });
147
+ describe('yolo mode (--plan yolo)', () => {
148
+ it('should apply changes directly from wish file without plan file', async () => {
149
+ // create isolated wish file for this test
150
+ const wishFilePath = await createIsolatedWishFile();
151
+ // spy on console to verify yolo logging
152
+ const logSpy = jest.spyOn(console, 'info');
153
+ // apply in yolo mode (no plan file needed)
154
+ await (0, apply_1.executeApplyCommand)({ planFilePath: 'yolo', wishFilePath });
155
+ // verify yolo mode logging occurred
156
+ const logCalls = logSpy.mock.calls.map((call) => call.join(' '));
157
+ expect(logCalls.some((log) => log.includes('yolo'))).toBe(true);
158
+ expect(logCalls.some((log) => log.includes('🤙'))).toBe(true);
159
+ // cleanup spy
160
+ logSpy.mockRestore();
161
+ });
162
+ it('should throw when --wish is not provided with --plan yolo', async () => {
163
+ await expect((0, apply_1.executeApplyCommand)({ planFilePath: 'yolo' })).rejects.toThrow('--wish required when --plan yolo');
164
+ });
165
+ it('should throw when wish file does not exist in yolo mode', async () => {
166
+ await expect((0, apply_1.executeApplyCommand)({
167
+ planFilePath: 'yolo',
168
+ wishFilePath: '/nonexistent/wish.ts',
169
+ })).rejects.toThrow('Wish file not found');
170
+ });
171
+ it('should skip staleness validation in yolo mode', async () => {
172
+ // create isolated wish file for this test
173
+ const wishFilePath = await createIsolatedWishFile();
174
+ // first apply to create resources
175
+ await (0, apply_1.executeApplyCommand)({ planFilePath: 'yolo', wishFilePath });
176
+ // apply again - should succeed without staleness check
177
+ // (in standard mode with stale plan this would fail)
178
+ await (0, apply_1.executeApplyCommand)({ planFilePath: 'yolo', wishFilePath });
179
+ });
180
+ it('should handle CREATE actions in yolo mode', async () => {
181
+ // create isolated wish file for this test
182
+ const wishFilePath = await createIsolatedWishFile();
183
+ // spy on console to verify CREATE logging
184
+ const logSpy = jest.spyOn(console, 'info');
185
+ // apply in yolo mode
186
+ await (0, apply_1.executeApplyCommand)({ planFilePath: 'yolo', wishFilePath });
187
+ // verify CREATE logging occurred (plan phase + apply phase = 4 total, 2 per phase)
188
+ const logCalls = logSpy.mock.calls.map((call) => call.join(' '));
189
+ const createLogs = logCalls.filter((log) => log.includes('CREATE'));
190
+ expect(createLogs.length).toBeGreaterThanOrEqual(2);
191
+ // cleanup spy
192
+ logSpy.mockRestore();
193
+ });
194
+ it('should handle KEEP actions in yolo mode', async () => {
195
+ // create isolated wish file for this test
196
+ const wishFilePath = await createIsolatedWishFile();
197
+ // first apply to create resources
198
+ await (0, apply_1.executeApplyCommand)({ planFilePath: 'yolo', wishFilePath });
199
+ // spy on console to verify KEEP logging
200
+ const logSpy = jest.spyOn(console, 'info');
201
+ // apply again - should show KEEP actions
202
+ await (0, apply_1.executeApplyCommand)({ planFilePath: 'yolo', wishFilePath });
203
+ // verify KEEP logging occurred (plan phase + apply phase = 4 total, 2 per phase)
204
+ const logCalls = logSpy.mock.calls.map((call) => call.join(' '));
205
+ const keepLogs = logCalls.filter((log) => log.includes('KEEP'));
206
+ expect(keepLogs.length).toBeGreaterThanOrEqual(2);
207
+ // cleanup spy
208
+ logSpy.mockRestore();
209
+ });
210
+ });
211
+ it('should throw when neither --plan nor --wish is provided', async () => {
212
+ await expect((0, apply_1.executeApplyCommand)({})).rejects.toThrow('--plan required');
213
+ });
147
214
  });
148
215
  //# sourceMappingURL=apply.integration.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/apply.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/apply.integration.test.ts"],"names":[],"mappings":"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"}
@@ -37,34 +37,59 @@ const DeclastructPlan_1 = require("../../domain.objects/DeclastructPlan");
37
37
  const applyChanges_1 = require("../../domain.operations/apply/applyChanges");
38
38
  const log = console;
39
39
  /**
40
- * .what = executes the apply command to apply an infrastructure change plan
40
+ * .what = executes the apply command to apply infrastructure changes
41
41
  * .why = provides CLI interface for applying infrastructure changes
42
- * .note = loads plan from file and wish file from plan.wish.uri
42
+ * .note = supports two modes:
43
+ * - standard: load plan from file, validate staleness, apply
44
+ * - yolo: plan from wish directly, skip validation, apply immediately
43
45
  */
44
- const executeApplyCommand = async ({ planFilePath, }) => {
45
- // resolve path
46
- const resolvedPlanPath = (0, path_1.resolve)(process.cwd(), planFilePath);
47
- // validate plan file exists
48
- if (!(0, fs_1.existsSync)(resolvedPlanPath)) {
49
- throw new helpful_errors_1.BadRequestError(`Plan file not found: ${resolvedPlanPath}`);
46
+ const executeApplyCommand = async (input) => {
47
+ // determine mode and validate input
48
+ const isYoloMode = input.planFilePath === 'yolo';
49
+ if (isYoloMode) {
50
+ // yolo mode requires --wish
51
+ if (!input.wishFilePath)
52
+ throw new helpful_errors_1.BadRequestError('--wish required when --plan yolo');
50
53
  }
54
+ else {
55
+ // standard mode requires --plan (not "yolo")
56
+ if (!input.planFilePath)
57
+ throw new helpful_errors_1.BadRequestError('--plan required');
58
+ }
59
+ // resolve plan path (null for yolo mode)
60
+ const resolvedPlanPath = isYoloMode
61
+ ? null
62
+ : (0, path_1.resolve)(process.cwd(), input.planFilePath);
63
+ // load plan from file (standard mode only)
64
+ const plan = await (async () => {
65
+ if (!resolvedPlanPath)
66
+ return null;
67
+ if (!(0, fs_1.existsSync)(resolvedPlanPath))
68
+ throw new helpful_errors_1.BadRequestError(`Plan file not found: ${resolvedPlanPath}`);
69
+ const planJson = await (0, promises_1.readFile)(resolvedPlanPath, 'utf-8');
70
+ return new DeclastructPlan_1.DeclastructPlan(JSON.parse(planJson));
71
+ })();
72
+ // resolve wish path (from input or from plan file)
73
+ const resolvedWishPath = isYoloMode
74
+ ? (0, path_1.resolve)(process.cwd(), input.wishFilePath)
75
+ : plan.wish.uri;
76
+ // validate wish file exists
77
+ if (!(0, fs_1.existsSync)(resolvedWishPath))
78
+ throw new helpful_errors_1.BadRequestError(`Wish file not found: ${resolvedWishPath}`);
79
+ // log header
51
80
  log.info('🌊 declastruct apply');
52
- log.info(` plan: ${resolvedPlanPath}`);
81
+ if (resolvedPlanPath)
82
+ log.info(` plan: ${resolvedPlanPath}`);
83
+ log.info(` wish: ${resolvedWishPath}`);
53
84
  log.info('');
54
- // load plan from file
55
- const planJson = await (0, promises_1.readFile)(resolvedPlanPath, 'utf-8');
56
- const plan = new DeclastructPlan_1.DeclastructPlan(JSON.parse(planJson));
57
- // import wish file from plan
58
- const wishPath = plan.wish.uri;
59
- const wish = await Promise.resolve(`${wishPath}`).then(s => __importStar(require(s)));
85
+ // import wish file
86
+ const wish = await Promise.resolve(`${resolvedWishPath}`).then(s => __importStar(require(s)));
60
87
  // validate exports
61
- if (typeof wish.getProviders !== 'function') {
62
- throw new helpful_errors_1.BadRequestError('Wish file must export getProviders() function');
63
- }
64
- if (typeof wish.getResources !== 'function') {
88
+ if (typeof wish.getResources !== 'function')
65
89
  throw new helpful_errors_1.BadRequestError('Wish file must export getResources() function');
66
- }
67
- // get resources and providers from wish file
90
+ if (typeof wish.getProviders !== 'function')
91
+ throw new helpful_errors_1.BadRequestError('Wish file must export getProviders() function');
92
+ // get resources and providers
68
93
  const resources = await wish.getResources();
69
94
  const providers = await wish.getProviders();
70
95
  // initialize providers
@@ -75,8 +100,12 @@ const executeApplyCommand = async ({ planFilePath, }) => {
75
100
  bottleneck: new bottleneck_1.default({ maxConcurrent: 1 }),
76
101
  log,
77
102
  };
78
- // apply changes (logs emitted in real-time by applyChanges)
79
- const result = await (0, applyChanges_1.applyChanges)({ plan, resources, providers }, context);
103
+ // apply changes (plan=null triggers yolo mode, skipping validation)
104
+ const result = await (0, applyChanges_1.applyChanges)({
105
+ plan,
106
+ resources,
107
+ providers,
108
+ }, context);
80
109
  // cleanup providers
81
110
  log.info('');
82
111
  log.info('✨ stop providers...');
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/contract/cli/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/contract/cli/apply.ts"],"names":[],"mappings":"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"}
@@ -40,11 +40,13 @@ const invoke = async ({ args }) => {
40
40
  program
41
41
  .command('apply')
42
42
  .description('Apply changes from a plan file')
43
- .requiredOption('--plan <file>', 'Path to plan file')
43
+ .option('--plan <file>', 'Path to plan file, or "yolo" for immediate apply')
44
+ .option('--wish <file>', 'Path to wish file (required when --plan yolo)')
44
45
  .action(async (options) => {
45
46
  try {
46
47
  await (0, apply_1.executeApplyCommand)({
47
48
  planFilePath: options.plan,
49
+ wishFilePath: options.wish,
48
50
  });
49
51
  }
50
52
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AAEpC,yEAAwC;AACxC,mCAA8C;AAC9C,iCAA4C;AAE5C,MAAM,GAAG,GAAG,OAAO,CAAC;AAEpB;;;;GAIG;AACI,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,EAAsB,EAAiB,EAAE;IAC1E,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,aAAa,CAAC;SACnB,WAAW,CAAC,wCAAwC,CAAC;SACrD,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;SACpD,cAAc,CAAC,eAAe,EAAE,0BAA0B,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,yBAAkB,EAAC;gBACvB,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,2BAAmB,EAAC;gBACxB,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC;AAzCW,QAAA,MAAM,UAyCjB"}
1
+ {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AAEpC,yEAAwC;AACxC,mCAA8C;AAC9C,iCAA4C;AAE5C,MAAM,GAAG,GAAG,OAAO,CAAC;AAEpB;;;;GAIG;AACI,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,IAAI,EAAsB,EAAiB,EAAE;IAC1E,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,aAAa,CAAC;SACnB,WAAW,CAAC,wCAAwC,CAAC;SACrD,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;SACpD,cAAc,CAAC,eAAe,EAAE,0BAA0B,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,yBAAkB,EAAC;gBACvB,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,eAAe,EAAE,kDAAkD,CAAC;SAC3E,MAAM,CAAC,eAAe,EAAE,+CAA+C,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,IAAA,2BAAmB,EAAC;gBACxB,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC;AA3CW,QAAA,MAAM,UA2CjB"}
@@ -5,12 +5,14 @@ import { DeclastructChange } from '../../domain.objects/DeclastructChange';
5
5
  import { DeclastructPlan } from '../../domain.objects/DeclastructPlan';
6
6
  import { DeclastructProvider } from '../../domain.objects/DeclastructProvider';
7
7
  /**
8
- * .what = applies a validated plan to achieve desired state
8
+ * .what = applies changes to achieve desired state
9
9
  * .why = executes infrastructure changes in a controlled, observable manner
10
10
  * .note = idempotent - reapplying same plan is safe (guards check if already applied)
11
+ * - when plan is provided, validates staleness before applying
12
+ * - when plan is null (yolo mode), skips validation and applies immediately
11
13
  */
12
14
  export declare const applyChanges: (input: {
13
- plan: DeclastructPlan;
15
+ plan: DeclastructPlan | null;
14
16
  resources: DomainEntity<any>[];
15
17
  providers: DeclastructProvider<any, any>[];
16
18
  }, context: ContextLogTrail & ContextDeclastruct) => Promise<{
@@ -8,32 +8,41 @@ const planChanges_1 = require("../plan/planChanges");
8
8
  const validate_1 = require("../plan/validate");
9
9
  const applyChange_1 = require("./applyChange");
10
10
  /**
11
- * .what = applies a validated plan to achieve desired state
11
+ * .what = applies changes to achieve desired state
12
12
  * .why = executes infrastructure changes in a controlled, observable manner
13
13
  * .note = idempotent - reapplying same plan is safe (guards check if already applied)
14
+ * - when plan is provided, validates staleness before applying
15
+ * - when plan is null (yolo mode), skips validation and applies immediately
14
16
  */
15
17
  const applyChanges = async (input, context) => {
16
- // replan to ensure plan is still valid
18
+ // replan to get current state
17
19
  const currentPlan = await (0, planChanges_1.planChanges)({
18
20
  resources: input.resources,
19
21
  providers: input.providers,
20
- wishFilePath: input.plan.wish.uri,
22
+ wishFilePath: input.plan?.wish.uri ?? 'ignorable',
21
23
  }, context);
22
- // validate plan matches current state
23
- (0, validate_1.assertPlanStillValid)({
24
- originalPlan: input.plan,
25
- currentPlan,
26
- });
27
- // log plan validation success
28
- context.log.info('');
29
- context.log.info('👌 plan still valid...');
24
+ // validate plan matches current state (skip if no plan provided, i.e. yolo mode)
25
+ if (input.plan) {
26
+ (0, validate_1.assertPlanStillValid)({
27
+ originalPlan: input.plan,
28
+ currentPlan,
29
+ });
30
+ context.log.info('');
31
+ context.log.info('👌 plan still valid...');
32
+ }
33
+ else {
34
+ context.log.info('');
35
+ context.log.info('🤙 yolo, plan not reviewed...');
36
+ }
37
+ // use current plan for apply (works for both modes)
38
+ const planToApply = currentPlan;
30
39
  // log apply phase header
31
40
  context.log.info('');
32
41
  context.log.info('🪄 apply changes...');
33
42
  context.log.info('');
34
43
  // apply each change with real-time logging
35
44
  const appliedChanges = [];
36
- for (const change of input.plan.changes) {
45
+ for (const change of planToApply.changes) {
37
46
  // log KEEP actions and skip
38
47
  if (change.action === DeclastructChange_1.DeclastructChangeAction.KEEP) {
39
48
  context.log.info(`↓ [KEEP] ${change.forResource.slug}`, {});
@@ -42,15 +51,20 @@ const applyChanges = async (input, context) => {
42
51
  // find the desired resource
43
52
  const resourceFound = input.resources.find((candidate) => candidate.constructor.name === change.forResource.class &&
44
53
  (0, domain_objects_1.getUniqueIdentifierSlug)(candidate) === change.forResource.slug) ??
45
- helpful_errors_1.UnexpectedCodePathError.throw('could not find resource specified in plan. was it removed and plan is no longer valid?', { change });
46
- // apply the change
54
+ helpful_errors_1.UnexpectedCodePathError.throw('could not find resource specified in plan. was it removed?', { change });
55
+ // log action start
56
+ context.log.info(`○ [${change.action}] ${change.forResource.slug}`, {});
57
+ // apply the change with timing
58
+ const startMs = Date.now();
47
59
  const applied = await (0, applyChange_1.applyChange)({
48
60
  change,
49
61
  resource: resourceFound,
50
62
  providers: input.providers,
51
63
  });
52
- // log success immediately
53
- context.log.info(`✔ [${applied.action}] ${applied.forResource.slug}`, {});
64
+ const durationMs = Date.now() - startMs;
65
+ // log completion with duration
66
+ const durationSec = (durationMs / 1000).toFixed(2);
67
+ context.log.info(` └─ ✔ done in ${durationSec}s`, {});
54
68
  appliedChanges.push(applied);
55
69
  }
56
70
  return { appliedChanges };
@@ -1 +1 @@
1
- {"version":3,"file":"applyChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.ts"],"names":[],"mappings":";;;AAAA,mDAAuE;AACvE,mDAAyD;AAIzD,8EAGgD;AAGhD,qDAAkD;AAClD,+CAAwD;AACxD,+CAA4C;AAE5C;;;;GAIG;AACI,MAAM,YAAY,GAAG,KAAK,EAC/B,KAIC,EACD,OAA6C,EACK,EAAE;IACpD,uCAAuC;IACvC,MAAM,WAAW,GAAG,MAAM,IAAA,yBAAW,EACnC;QACE,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAClC,EACD,OAAO,CACR,CAAC;IAEF,sCAAsC;IACtC,IAAA,+BAAoB,EAAC;QACnB,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,WAAW;KACZ,CAAC,CAAC;IAEH,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAE3C,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAErB,2CAA2C;IAC3C,MAAM,cAAc,GAAwB,EAAE,CAAC;IAE/C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,4BAA4B;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,2CAAuB,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GACjB,KAAK,CAAC,SAAS,CAAC,IAAI,CAClB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK;YACvD,IAAA,wCAAuB,EAAC,SAAS,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CACjE;YACD,wCAAuB,CAAC,KAAK,CAC3B,wFAAwF,EACxF,EAAE,MAAM,EAAE,CACX,CAAC;QAEJ,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAW,EAAC;YAChC,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QAEH,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1E,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5B,CAAC,CAAC;AArEW,QAAA,YAAY,gBAqEvB"}
1
+ {"version":3,"file":"applyChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "declastruct",
3
3
  "author": "ehmpathy",
4
4
  "description": "Add declarative control to any resource constructs. Declare, plan, and apply within an observable pit-of-success.",
5
- "version": "1.1.12",
5
+ "version": "1.3.0",
6
6
  "repository": "ehmpathy/declastruct",
7
7
  "homepage": "https://github.com/ehmpathy/declastruct",
8
8
  "keywords": [