declastruct 1.3.1 → 1.4.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.
@@ -77,6 +77,7 @@ const executeApplyCommand = async (input) => {
77
77
  if (!(0, fs_1.existsSync)(resolvedWishPath))
78
78
  throw new helpful_errors_1.BadRequestError(`Wish file not found: ${resolvedWishPath}`);
79
79
  // log header
80
+ log.info('');
80
81
  log.info('🌊 declastruct apply');
81
82
  if (resolvedPlanPath)
82
83
  log.info(` plan: ${resolvedPlanPath}`);
@@ -93,7 +94,7 @@ const executeApplyCommand = async (input) => {
93
94
  const resources = await wish.getResources();
94
95
  const providers = await wish.getProviders();
95
96
  // initialize providers
96
- log.info('✨ start providers...');
97
+ // log.info('✨ start providers...');
97
98
  await Promise.all(providers.map((p) => p.hooks.beforeAll()));
98
99
  // create context
99
100
  const context = {
@@ -107,8 +108,8 @@ const executeApplyCommand = async (input) => {
107
108
  providers,
108
109
  }, context);
109
110
  // cleanup providers
110
- log.info('');
111
- log.info('✨ stop providers...');
111
+ // log.info('');
112
+ // log.info('✨ stop providers...');
112
113
  await Promise.all(providers.map((p) => p.hooks.afterAll()));
113
114
  // log summary
114
115
  log.info('');
@@ -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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"}
@@ -48,6 +48,7 @@ const executePlanCommand = async ({ wishFilePath, planFilePath, }) => {
48
48
  if (!(0, fs_1.existsSync)(resolvedWishPath)) {
49
49
  throw new helpful_errors_1.BadRequestError(`Wish file not found: ${resolvedWishPath}`);
50
50
  }
51
+ log.info('');
51
52
  log.info('🌊 declastruct plan');
52
53
  log.info(` wish: ${resolvedWishPath}`);
53
54
  log.info(` plan: ${resolvedPlanPath}`);
@@ -65,7 +66,7 @@ const executePlanCommand = async ({ wishFilePath, planFilePath, }) => {
65
66
  const resources = await wish.getResources();
66
67
  const providers = await wish.getProviders();
67
68
  // initialize providers
68
- log.info('✨ start providers...');
69
+ // log.info('✨ start providers...');
69
70
  await Promise.all(providers.map((p) => p.hooks.beforeAll()));
70
71
  // create context
71
72
  const context = {
@@ -84,8 +85,8 @@ const executePlanCommand = async ({ wishFilePath, planFilePath, }) => {
84
85
  // write plan to file
85
86
  await (0, promises_1.writeFile)(resolvedPlanPath, JSON.stringify(plan, null, 2), 'utf-8');
86
87
  // cleanup providers
87
- log.info('');
88
- log.info('✨ stop providers...');
88
+ // log.info('');
89
+ // log.info('✨ stop providers...');
89
90
  await Promise.all(providers.map((p) => p.hooks.afterAll()));
90
91
  // log summary
91
92
  log.info('');
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/contract/cli/plan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4DAAoC;AACpC,2BAAgC;AAChC,0CAA+C;AAC/C,mDAAiD;AACjD,+BAAwC;AAExC,0EAAuE;AAEvE,MAAM,GAAG,GAAG,OAAO,CAAC;AAEpB;;;;GAIG;AACI,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,YAAY,EACZ,YAAY,GAIb,EAAiB,EAAE;IAClB,gBAAgB;IAChB,MAAM,gBAAgB,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAE9D,4BAA4B;IAC5B,IAAI,CAAC,IAAA,eAAU,EAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,gCAAe,CAAC,wBAAwB,gBAAgB,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,YAAY,gBAAgB,EAAE,CAAC,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEb,mBAAmB;IACnB,MAAM,IAAI,GAAG,yBAAa,gBAAgB,uCAAC,CAAC;IAE5C,mBAAmB;IACnB,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,gCAAe,CAAC,+CAA+C,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,gCAAe,CAAC,+CAA+C,CAAC,CAAC;IAC7E,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAE5C,uBAAuB;IACvB,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACjC,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAElE,iBAAiB;IACjB,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,IAAI,oBAAU,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QAChD,GAAG;KACJ,CAAC;IAEF,0DAA0D;IAC1D,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAW,EAC5B;QACE,SAAS;QACT,SAAS;QACT,YAAY,EAAE,gBAAgB;KAC/B,EACD,OAAO,CACR,CAAC;IAEF,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,IAAA,gBAAK,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,qBAAqB;IACrB,MAAM,IAAA,oBAAS,EAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAE1E,oBAAoB;IACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChC,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEjE,cAAc;IACd,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;IAC5D,GAAG,CAAC,IAAI,CAAC,WAAW,gBAAgB,EAAE,CAAC,CAAC;IACxC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACf,CAAC,CAAC;AAzEW,QAAA,kBAAkB,sBAyE7B"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/contract/cli/plan.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { DomainEntity } from 'domain-objects';
2
- import { ContextLogTrail } from 'simple-log-methods';
3
- import { ContextDeclastruct } from '../../domain.objects/ContextDeclastruct';
4
- import { DeclastructChange } from '../../domain.objects/DeclastructChange';
5
- import { DeclastructPlan } from '../../domain.objects/DeclastructPlan';
6
- import { DeclastructProvider } from '../../domain.objects/DeclastructProvider';
1
+ import { type DomainEntity } from 'domain-objects';
2
+ import { type ContextLogTrail } from 'simple-log-methods';
3
+ import { type ContextDeclastruct } from '../../domain.objects/ContextDeclastruct';
4
+ import { type DeclastructChange } from '../../domain.objects/DeclastructChange';
5
+ import { type DeclastructPlan } from '../../domain.objects/DeclastructPlan';
6
+ import { type DeclastructProvider } from '../../domain.objects/DeclastructProvider';
7
7
  /**
8
8
  * .what = applies changes to achieve desired state
9
9
  * .why = executes infrastructure changes in a controlled, observable manner
@@ -4,6 +4,8 @@ exports.applyChanges = void 0;
4
4
  const domain_objects_1 = require("domain-objects");
5
5
  const helpful_errors_1 = require("helpful-errors");
6
6
  const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
7
+ const colorizeAction_1 = require("../../infra/colorizeAction");
8
+ const withSpinner_1 = require("../../infra/withSpinner");
7
9
  const planChanges_1 = require("../plan/planChanges");
8
10
  const validate_1 = require("../plan/validate");
9
11
  const applyChange_1 = require("./applyChange");
@@ -21,6 +23,13 @@ const applyChanges = async (input, context) => {
21
23
  providers: input.providers,
22
24
  wishFilePath: input.plan?.wish.uri ?? 'ignorable',
23
25
  }, context);
26
+ // use current plan for apply (works for both modes)
27
+ const planToApply = currentPlan;
28
+ // check if there are any actionable changes (non-KEEP)
29
+ const hasActionableChanges = planToApply.changes.some((change) => change.action !== DeclastructChange_1.DeclastructChangeAction.KEEP);
30
+ // skip apply phase if everything is in sync
31
+ if (!hasActionableChanges)
32
+ return { appliedChanges: [] };
24
33
  // validate plan matches current state (skip if no plan provided, i.e. yolo mode)
25
34
  if (input.plan) {
26
35
  (0, validate_1.assertPlanStillValid)({
@@ -32,10 +41,8 @@ const applyChanges = async (input, context) => {
32
41
  }
33
42
  else {
34
43
  context.log.info('');
35
- context.log.info('🤙 yolo, plan not reviewed...');
44
+ context.log.info('🤙 yolo, plan auto approved...');
36
45
  }
37
- // use current plan for apply (works for both modes)
38
- const planToApply = currentPlan;
39
46
  // log apply phase header
40
47
  context.log.info('');
41
48
  context.log.info('🪄 apply changes...');
@@ -45,26 +52,29 @@ const applyChanges = async (input, context) => {
45
52
  for (const change of planToApply.changes) {
46
53
  // log KEEP actions and skip
47
54
  if (change.action === DeclastructChange_1.DeclastructChangeAction.KEEP) {
48
- context.log.info(`↓ [KEEP] ${change.forResource.slug}`, {});
55
+ context.log.info(`↓ ${(0, colorizeAction_1.colorizeAction)(change.action)} ${change.forResource.slug}`);
49
56
  continue;
50
57
  }
51
58
  // find the desired resource
52
59
  const resourceFound = input.resources.find((candidate) => candidate.constructor.name === change.forResource.class &&
53
60
  (0, domain_objects_1.getUniqueIdentifierSlug)(candidate) === change.forResource.slug) ??
54
61
  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();
59
- const applied = await (0, applyChange_1.applyChange)({
60
- change,
61
- resource: resourceFound,
62
- providers: input.providers,
62
+ // log the action line (stays fixed)
63
+ const actionLabel = (0, colorizeAction_1.colorizeAction)(change.action);
64
+ context.log.info(`○ ${actionLabel} ${change.forResource.slug}`);
65
+ // apply the change with spinner on line below
66
+ const { result: applied, durationMs } = await (0, withSpinner_1.withSpinner)({
67
+ message: 'inflight',
68
+ operation: () => (0, applyChange_1.applyChange)({
69
+ change,
70
+ resource: resourceFound,
71
+ providers: input.providers,
72
+ }),
63
73
  });
64
- const durationMs = Date.now() - startMs;
65
74
  // log completion with duration
66
75
  const durationSec = (durationMs / 1000).toFixed(2);
67
- context.log.info(` └─ ✔ done in ${durationSec}s`, {});
76
+ context.log.info(` └─ ✔ done in ${durationSec}s`);
77
+ context.log.info('');
68
78
  appliedChanges.push(applied);
69
79
  }
70
80
  return { appliedChanges };
@@ -1 +1 @@
1
- {"version":3,"file":"applyChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"applyChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/apply/applyChanges.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { DomainEntity } from 'domain-objects';
2
- import { ContextLogTrail } from 'simple-log-methods';
3
- import { ContextDeclastruct } from '../../domain.objects/ContextDeclastruct';
1
+ import { type DomainEntity } from 'domain-objects';
2
+ import { type ContextLogTrail } from 'simple-log-methods';
3
+ import { type ContextDeclastruct } from '../../domain.objects/ContextDeclastruct';
4
4
  import { DeclastructPlan } from '../../domain.objects/DeclastructPlan';
5
- import { DeclastructProvider } from '../../domain.objects/DeclastructProvider';
5
+ import { type DeclastructProvider } from '../../domain.objects/DeclastructProvider';
6
6
  /**
7
7
  * .what = generates a plan of changes required to achieve desired state
8
8
  * .why = enables users to review infrastructure changes before applying them
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.planChanges = void 0;
4
+ const domain_objects_1 = require("domain-objects");
4
5
  const DeclastructChange_1 = require("../../domain.objects/DeclastructChange");
5
6
  const DeclastructPlan_1 = require("../../domain.objects/DeclastructPlan");
6
7
  const asIsoTimestamp_1 = require("../../infra/asIsoTimestamp");
8
+ const colorizeAction_1 = require("../../infra/colorizeAction");
9
+ const withSpinner_1 = require("../../infra/withSpinner");
7
10
  const computeChange_1 = require("./computeChange");
8
11
  const getDaoByResource_1 = require("./getDaoByResource");
9
12
  const hashChanges_1 = require("./hashChanges");
@@ -14,7 +17,6 @@ const hashChanges_1 = require("./hashChanges");
14
17
  */
15
18
  const planChanges = async (input, context) => {
16
19
  // log plan phase header
17
- context.log.info('');
18
20
  context.log.info('🔮 plan changes...');
19
21
  context.log.info('');
20
22
  // extract bottleneck for planning
@@ -22,29 +24,44 @@ const planChanges = async (input, context) => {
22
24
  ? context.bottleneck.onPlan
23
25
  : context.bottleneck;
24
26
  // compute change for each resource with real-time logging
25
- const changes = await Promise.all(input.resources.map((resource) => bottleneck.schedule(async () => {
26
- // find DAO and provider context for this resource
27
- const { dao, context: providerContext } = (0, getDaoByResource_1.getDaoByResource)({
28
- resource,
29
- providers: input.providers,
30
- });
31
- // fetch current remote state using provider context
32
- const remoteState = await dao.get.byUnique(resource, providerContext);
33
- // compute change
34
- const change = (0, computeChange_1.computeChange)({
35
- desired: resource,
36
- remote: remoteState,
37
- });
38
- // log change as it's computed
39
- const symbol = change.action === DeclastructChange_1.DeclastructChangeAction.KEEP ? '↓' : '○';
40
- context.log.info(`${symbol} [${change.action}] ${change.forResource.slug}`, {});
41
- // and the diff too
42
- if (change.state.difference) {
43
- context.log.info(change.state.difference);
27
+ const changes = [];
28
+ for (const resource of input.resources) {
29
+ const change = await bottleneck.schedule(async () => {
30
+ // find DAO and provider context for this resource
31
+ const { dao, context: providerContext } = (0, getDaoByResource_1.getDaoByResource)({
32
+ resource,
33
+ providers: input.providers,
34
+ });
35
+ // log the resource being planned
36
+ context.log.info(`○ ${(0, domain_objects_1.getUniqueIdentifierSlug)(resource)}`);
37
+ // fetch current remote state using provider context with spinner
38
+ const { result: remoteState, durationMs } = await (0, withSpinner_1.withSpinner)({
39
+ message: 'inflight',
40
+ operation: () => dao.get.byUnique(resource, providerContext),
41
+ });
42
+ // log done (replaces spinner)
43
+ const durationSec = (durationMs / 1000).toFixed(2);
44
+ context.log.info(` ├─ ✔ done in ${durationSec}s`);
45
+ // compute change
46
+ const computed = (0, computeChange_1.computeChange)({
47
+ desired: resource,
48
+ remote: remoteState,
49
+ });
50
+ // log decision
51
+ context.log.info(` └─ decision ${(0, colorizeAction_1.colorizeAction)(computed.action)}`);
52
+ // and the diff too, indented to align with tree
53
+ if (computed.state.difference) {
54
+ const indentedDiff = computed.state.difference
55
+ .split('\n')
56
+ .map((line) => ` ${line}`)
57
+ .join('\n');
58
+ context.log.info(indentedDiff);
59
+ }
44
60
  context.log.info('');
45
- }
46
- return change;
47
- })));
61
+ return computed;
62
+ });
63
+ changes.push(change);
64
+ }
48
65
  // log success message if everything is in sync
49
66
  const allInSync = changes.every((change) => change.action === DeclastructChange_1.DeclastructChangeAction.KEEP);
50
67
  if (allInSync) {
@@ -1 +1 @@
1
- {"version":3,"file":"planChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/planChanges.ts"],"names":[],"mappings":";;;AAIA,8EAAiF;AACjF,0EAAuE;AAEvE,+DAA4D;AAC5D,mDAAgD;AAChD,yDAAsD;AACtD,+CAA4C;AAE5C;;;;GAIG;AACI,MAAM,WAAW,GAAG,KAAK,EAC9B,KAIC,EACD,OAA6C,EACnB,EAAE;IAC5B,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAErB,kCAAkC;IAClC,MAAM,UAAU,GACd,QAAQ,IAAI,OAAO,CAAC,UAAU;QAC5B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;QAC3B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAEzB,0DAA0D;IAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC/B,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC7B,kDAAkD;QAClD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAA,mCAAgB,EAAC;YACzD,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QAEH,oDAAoD;QACpD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAEtE,iBAAiB;QACjB,MAAM,MAAM,GAAG,IAAA,6BAAa,EAAC;YAC3B,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,2CAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CACd,GAAG,MAAM,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EACzD,EAAE,CACH,CAAC;QAEF,mBAAmB;QACnB,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CACH,CACF,CAAC;IAEF,+CAA+C;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAC7B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,2CAAuB,CAAC,IAAI,CAC3D,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAChD,CAAC;IAED,cAAc;IACd,OAAO,IAAI,iCAAe,CAAC;QACzB,IAAI,EAAE,IAAA,yBAAW,EAAC,OAAO,CAAC;QAC1B,SAAS,EAAE,IAAA,+BAAc,EAAC,IAAI,IAAI,EAAE,CAAC;QACrC,IAAI,EAAE;YACJ,GAAG,EAAE,KAAK,CAAC,YAAY;SACxB;QACD,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AA3EW,QAAA,WAAW,eA2EtB"}
1
+ {"version":3,"file":"planChanges.js","sourceRoot":"","sources":["../../../src/domain.operations/plan/planChanges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { DeclastructChangeAction } from '../domain.objects/DeclastructChange';
2
+ /**
3
+ * .what = returns a colorized action label for CLI output
4
+ * .why = improves visual distinction between action types
5
+ * .note = uses pastel colors for a softer, zen aesthetic
6
+ */
7
+ export declare const colorizeAction: (action: DeclastructChangeAction) => string;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.colorizeAction = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const DeclastructChange_1 = require("../domain.objects/DeclastructChange");
9
+ /**
10
+ * .what = returns a colorized action label for CLI output
11
+ * .why = improves visual distinction between action types
12
+ * .note = uses pastel colors for a softer, zen aesthetic
13
+ */
14
+ const colorizeAction = (action) => {
15
+ switch (action) {
16
+ case DeclastructChange_1.DeclastructChangeAction.KEEP:
17
+ return chalk_1.default.hex('#9ca3af')('[KEEP]'); // pastel gray
18
+ case DeclastructChange_1.DeclastructChangeAction.CREATE:
19
+ return chalk_1.default.hex('#86efac')('[CREATE]'); // pastel green
20
+ case DeclastructChange_1.DeclastructChangeAction.UPDATE:
21
+ return chalk_1.default.hex('#fde047')('[UPDATE]'); // pastel yellow
22
+ case DeclastructChange_1.DeclastructChangeAction.DESTROY:
23
+ return chalk_1.default.hex('#fca5a5')('[DESTROY]'); // pastel red
24
+ case DeclastructChange_1.DeclastructChangeAction.REPLACE:
25
+ return chalk_1.default.hex('#fca5a5')('[REPLACE]'); // pastel red, since it includes a destroy
26
+ default:
27
+ return `[${action}]`;
28
+ }
29
+ };
30
+ exports.colorizeAction = colorizeAction;
31
+ //# sourceMappingURL=colorizeAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorizeAction.js","sourceRoot":"","sources":["../../src/infra/colorizeAction.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,2EAA8E;AAE9E;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,MAA+B,EAAU,EAAE;IACxE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,2CAAuB,CAAC,IAAI;YAC/B,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc;QACvD,KAAK,2CAAuB,CAAC,MAAM;YACjC,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe;QAC1D,KAAK,2CAAuB,CAAC,MAAM;YACjC,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB;QAC3D,KAAK,2CAAuB,CAAC,OAAO;YAClC,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;QACzD,KAAK,2CAAuB,CAAC,OAAO;YAClC,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,0CAA0C;QACtF;YACE,OAAO,IAAI,MAAM,GAAG,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAfW,QAAA,cAAc,kBAezB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * .what = wraps an async operation with a CLI spinner showing elapsed time
3
+ * .why = provides visual feedback during long-running operations
4
+ * .note = spinner renders on its own line below the action, cleared on completion
5
+ */
6
+ export declare const withSpinner: <T>(input: {
7
+ message: string;
8
+ operation: () => Promise<T>;
9
+ }) => Promise<{
10
+ result: T;
11
+ durationMs: number;
12
+ }>;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSpinner = void 0;
4
+ /**
5
+ * .what = wraps an async operation with a CLI spinner showing elapsed time
6
+ * .why = provides visual feedback during long-running operations
7
+ * .note = spinner renders on its own line below the action, cleared on completion
8
+ */
9
+ const withSpinner = async (input) => {
10
+ // spinner frames (braille pattern)
11
+ const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
12
+ let frameIndex = 0;
13
+ const startMs = Date.now();
14
+ // track if we own the current line (no other output since last render)
15
+ let ownsCurrentLine = false; // start false since we haven't rendered yet
16
+ let isSpinnerWriting = false;
17
+ // intercept stdout to detect if other output occurred
18
+ const originalWrite = process.stdout.write.bind(process.stdout);
19
+ process.stdout.write = ((chunk, ...args) => {
20
+ // if this write is not from the spinner, mark that we lost ownership
21
+ if (!isSpinnerWriting) {
22
+ ownsCurrentLine = false;
23
+ }
24
+ return originalWrite(chunk, ...args);
25
+ });
26
+ // format elapsed time as human readable
27
+ const formatElapsed = (ms) => {
28
+ const seconds = ms / 1000;
29
+ if (seconds < 60)
30
+ return `${seconds.toFixed(1)}s`;
31
+ const minutes = Math.floor(seconds / 60);
32
+ const remainingSeconds = seconds % 60;
33
+ return `${minutes}m ${remainingSeconds.toFixed(0)}s`;
34
+ };
35
+ // render the current spinner state
36
+ const render = () => {
37
+ const elapsed = formatElapsed(Date.now() - startMs);
38
+ const frame = frames[frameIndex % frames.length];
39
+ const line = ` └─ ${frame} ${input.message} ${elapsed}`;
40
+ // mark that we're the ones writing
41
+ isSpinnerWriting = true;
42
+ if (ownsCurrentLine) {
43
+ // move up, clear line, write new frame, newline
44
+ process.stdout.write(`\x1b[A\r\x1b[K${line}\n`);
45
+ }
46
+ else {
47
+ // first render with trailing newline for whitespace
48
+ process.stdout.write(`${line}\n`);
49
+ ownsCurrentLine = true;
50
+ }
51
+ isSpinnerWriting = false;
52
+ frameIndex++;
53
+ };
54
+ // start spinner interval (80ms for smooth animation)
55
+ const interval = setInterval(render, 80);
56
+ render(); // render immediately
57
+ try {
58
+ // execute the operation
59
+ const result = await input.operation();
60
+ const durationMs = Date.now() - startMs;
61
+ // stop spinner
62
+ clearInterval(interval);
63
+ // restore original stdout.write
64
+ process.stdout.write = originalWrite;
65
+ // move up to spinner line, clear it
66
+ if (ownsCurrentLine) {
67
+ originalWrite('\x1b[A\r\x1b[K'); // move up + clear line
68
+ }
69
+ else {
70
+ originalWrite('\n'); // newline if other output occurred
71
+ }
72
+ return { result, durationMs };
73
+ }
74
+ catch (error) {
75
+ // stop spinner on error
76
+ clearInterval(interval);
77
+ // restore original stdout.write
78
+ process.stdout.write = originalWrite;
79
+ // move up to spinner line, clear it
80
+ if (ownsCurrentLine) {
81
+ originalWrite('\x1b[A\r\x1b[K');
82
+ }
83
+ else {
84
+ originalWrite('\n');
85
+ }
86
+ throw error;
87
+ }
88
+ };
89
+ exports.withSpinner = withSpinner;
90
+ //# sourceMappingURL=withSpinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withSpinner.js","sourceRoot":"","sources":["../../src/infra/withSpinner.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACI,MAAM,WAAW,GAAG,KAAK,EAAK,KAGpC,EAA8C,EAAE;IAC/C,mCAAmC;IACnC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,uEAAuE;IACvE,IAAI,eAAe,GAAG,KAAK,CAAC,CAAC,4CAA4C;IACzE,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,sDAAsD;IACtD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CACtB,KAA0B,EAC1B,GAAG,IAAe,EACT,EAAE;QACX,qEAAqE;QACrE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,eAAe,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,OAAO,aAAa,CAAC,KAAK,EAAE,GAAI,IAAyB,CAAC,CAAC;IAC7D,CAAC,CAAgC,CAAC;IAElC,wCAAwC;IACxC,MAAM,aAAa,GAAG,CAAC,EAAU,EAAU,EAAE;QAC3C,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,CAAC,CAAC;IAEF,mCAAmC;IACnC,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,SAAS,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;QAE1D,mCAAmC;QACnC,gBAAgB,GAAG,IAAI,CAAC;QAExB,IAAI,eAAe,EAAE,CAAC;YACpB,gDAAgD;YAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,gBAAgB,GAAG,KAAK,CAAC;QACzB,UAAU,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,qDAAqD;IACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,qBAAqB;IAE/B,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QAExC,eAAe;QACf,aAAa,CAAC,QAAQ,CAAC,CAAC;QAExB,gCAAgC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;QAErC,oCAAoC;QACpC,IAAI,eAAe,EAAE,CAAC;YACpB,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB;QAC1D,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC1D,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wBAAwB;QACxB,aAAa,CAAC,QAAQ,CAAC,CAAC;QAExB,gCAAgC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;QAErC,oCAAoC;QACpC,IAAI,eAAe,EAAE,CAAC;YACpB,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAjGW,QAAA,WAAW,eAiGtB"}
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.3.1",
5
+ "version": "1.4.0",
6
6
  "repository": "ehmpathy/declastruct",
7
7
  "homepage": "https://github.com/ehmpathy/declastruct",
8
8
  "keywords": [
@@ -55,6 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "bottleneck": "2.19.5",
58
+ "chalk": "5.4.1",
58
59
  "commander": "14.0.2",
59
60
  "helpful-errors": "1.5.3",
60
61
  "jest-diff": "30.0.2",