@awsless/cli 0.1.2 → 0.1.4

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/bin.js CHANGED
@@ -6,39 +6,60 @@ var __defProp = Object.defineProperty;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ function __accessProp(key) {
10
+ return this[key];
11
+ }
12
+ var __toESMCache_node;
13
+ var __toESMCache_esm;
9
14
  var __toESM = (mod, isNodeMode, target) => {
15
+ var canCache = mod != null && typeof mod === "object";
16
+ if (canCache) {
17
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
18
+ var cached = cache.get(mod);
19
+ if (cached)
20
+ return cached;
21
+ }
10
22
  target = mod != null ? __create(__getProtoOf(mod)) : {};
11
23
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
12
24
  for (let key of __getOwnPropNames(mod))
13
25
  if (!__hasOwnProp.call(to, key))
14
26
  __defProp(to, key, {
15
- get: () => mod[key],
27
+ get: __accessProp.bind(mod, key),
16
28
  enumerable: true
17
29
  });
30
+ if (canCache)
31
+ cache.set(mod, to);
18
32
  return to;
19
33
  };
20
- var __moduleCache = /* @__PURE__ */ new WeakMap;
21
34
  var __toCommonJS = (from) => {
22
- var entry = __moduleCache.get(from), desc;
35
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
23
36
  if (entry)
24
37
  return entry;
25
38
  entry = __defProp({}, "__esModule", { value: true });
26
- if (from && typeof from === "object" || typeof from === "function")
27
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
28
- get: () => from[key],
29
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
30
- }));
39
+ if (from && typeof from === "object" || typeof from === "function") {
40
+ for (var key of __getOwnPropNames(from))
41
+ if (!__hasOwnProp.call(entry, key))
42
+ __defProp(entry, key, {
43
+ get: __accessProp.bind(from, key),
44
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
45
+ });
46
+ }
31
47
  __moduleCache.set(from, entry);
32
48
  return entry;
33
49
  };
50
+ var __moduleCache;
34
51
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
52
+ var __returnValue = (v) => v;
53
+ function __exportSetter(name, newValue) {
54
+ this[name] = __returnValue.bind(null, newValue);
55
+ }
35
56
  var __export = (target, all) => {
36
57
  for (var name in all)
37
58
  __defProp(target, name, {
38
59
  get: all[name],
39
60
  enumerable: true,
40
61
  configurable: true,
41
- set: (newValue) => all[name] = () => newValue
62
+ set: __exportSetter.bind(all, name)
42
63
  });
43
64
  };
44
65
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
@@ -832,7 +853,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
832
853
  this._exitCallback = (err) => {
833
854
  if (err.code !== "commander.executeSubCommandAsync") {
834
855
  throw err;
835
- } else {}
856
+ }
836
857
  };
837
858
  }
838
859
  return this;
@@ -3069,7 +3090,7 @@ var require_cell = __commonJS((exports, module) => {
3069
3090
  let content = utils.truncate(this.content, 10, this.truncate);
3070
3091
  if (!lineNum) {
3071
3092
  info(`${this.y}-${this.x}: ${this.rowSpan - lineNum}x${this.colSpan} Cell ${content}`);
3072
- } else {}
3093
+ }
3073
3094
  let padLen = Math.max(this.height - this.lines.length, 0);
3074
3095
  let padTop;
3075
3096
  switch (this.vAlign) {
@@ -26838,7 +26859,7 @@ var require_node_gyp_build_optional_packages = __commonJS((exports, module) => {
26838
26859
 
26839
26860
  // ../../node_modules/.pnpm/msgpackr-extract@3.0.4/node_modules/msgpackr-extract/index.js
26840
26861
  var require_msgpackr_extract = __commonJS((exports, module) => {
26841
- var __dirname = "/Users/ivandasilveira/Sites/@awsless/node_modules/.pnpm/msgpackr-extract@3.0.4/node_modules/msgpackr-extract";
26862
+ var __dirname = "/Users/work/Code/awsless/node_modules/.pnpm/msgpackr-extract@3.0.4/node_modules/msgpackr-extract";
26842
26863
  module.exports = require_node_gyp_build_optional_packages()(__dirname);
26843
26864
  });
26844
26865
 
@@ -39706,7 +39727,7 @@ var require_src3 = __commonJS((exports) => {
39706
39727
 
39707
39728
  // ../../node_modules/.pnpm/@grpc+grpc-js@1.12.6/node_modules/@grpc/grpc-js/build/src/channelz.js
39708
39729
  var require_channelz = __commonJS((exports) => {
39709
- var __dirname = "/Users/ivandasilveira/Sites/@awsless/node_modules/.pnpm/@grpc+grpc-js@1.12.6/node_modules/@grpc/grpc-js/build/src";
39730
+ var __dirname = "/Users/work/Code/awsless/node_modules/.pnpm/@grpc+grpc-js@1.12.6/node_modules/@grpc/grpc-js/build/src";
39710
39731
  Object.defineProperty(exports, "__esModule", { value: true });
39711
39732
  exports.registerChannelzSocket = exports.registerChannelzServer = exports.registerChannelzSubchannel = exports.registerChannelzChannel = exports.ChannelzCallTrackerStub = exports.ChannelzCallTracker = exports.ChannelzChildrenTrackerStub = exports.ChannelzChildrenTracker = exports.ChannelzTrace = exports.ChannelzTraceStub = undefined;
39712
39733
  exports.unregisterChannelzRef = unregisterChannelzRef;
@@ -57210,7 +57231,7 @@ var require_zipEntries = __commonJS((exports, module) => {
57210
57231
  if (this.centralDirRecords !== this.files.length) {
57211
57232
  if (this.centralDirRecords !== 0 && this.files.length === 0) {
57212
57233
  throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
57213
- } else {}
57234
+ }
57214
57235
  }
57215
57236
  },
57216
57237
  readEndOfCentral: function() {
@@ -74431,7 +74452,7 @@ WD9f
74431
74452
 
74432
74453
  // ../../node_modules/.pnpm/ioredis@5.10.1_supports-color@8.1.1/node_modules/ioredis/built/utils/index.js
74433
74454
  var require_utils5 = __commonJS((exports) => {
74434
- var __dirname = "/Users/ivandasilveira/Sites/@awsless/node_modules/.pnpm/ioredis@5.10.1_supports-color@8.1.1/node_modules/ioredis/built/utils";
74455
+ var __dirname = "/Users/work/Code/awsless/node_modules/.pnpm/ioredis@5.10.1_supports-color@8.1.1/node_modules/ioredis/built/utils";
74435
74456
  Object.defineProperty(exports, "__esModule", { value: true });
74436
74457
  exports.noop = exports.defaults = exports.Debug = exports.getPackageMeta = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = undefined;
74437
74458
  var fs_1 = __require("fs");
@@ -74717,7 +74738,7 @@ var require_argumentParsers = __commonJS((exports) => {
74717
74738
 
74718
74739
  // ../../node_modules/.pnpm/ioredis@5.10.1_supports-color@8.1.1/node_modules/ioredis/built/Command.js
74719
74740
  var require_Command = __commonJS((exports) => {
74720
- var __dirname = "/Users/ivandasilveira/Sites/@awsless/node_modules/.pnpm/ioredis@5.10.1_supports-color@8.1.1/node_modules/ioredis/built";
74741
+ var __dirname = "/Users/work/Code/awsless/node_modules/.pnpm/ioredis@5.10.1_supports-color@8.1.1/node_modules/ioredis/built";
74721
74742
  Object.defineProperty(exports, "__esModule", { value: true });
74722
74743
  var commands_1 = require_built();
74723
74744
  var calculateSlot = require_lib4();
@@ -95364,7 +95385,7 @@ var require_db_util = __commonJS((exports) => {
95364
95385
 
95365
95386
  // ../../node_modules/.pnpm/redis-memory-server@0.16.1_supports-color@8.1.1/node_modules/redis-memory-server/lib/util/RedisInstance.js
95366
95387
  var require_RedisInstance = __commonJS((exports) => {
95367
- var __dirname = "/Users/ivandasilveira/Sites/@awsless/node_modules/.pnpm/redis-memory-server@0.16.1_supports-color@8.1.1/node_modules/redis-memory-server/lib/util";
95388
+ var __dirname = "/Users/work/Code/awsless/node_modules/.pnpm/redis-memory-server@0.16.1_supports-color@8.1.1/node_modules/redis-memory-server/lib/util";
95368
95389
  var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P3, generator) {
95369
95390
  function adopt(value) {
95370
95391
  return value instanceof P3 ? value : new P3(function(resolve3) {
@@ -101278,7 +101299,7 @@ var require_unbzip2_stream = __commonJS((exports, module) => {
101278
101299
  stream2.queue(d5);
101279
101300
  if (d5 !== null) {
101280
101301
  outlength += d5.length;
101281
- } else {}
101302
+ }
101282
101303
  });
101283
101304
  } catch (e4) {
101284
101305
  stream2.emit("error", e4);
@@ -103024,7 +103045,8 @@ var import_decompress, import_sleep_await, mock, searchClient = (options = {}, s
103024
103045
  if (mock) {
103025
103046
  return mock;
103026
103047
  }
103027
- const node = options.node ?? "https://" + process.env.SEARCH_DOMAIN;
103048
+ const scheme = process.env.AWSLESS_ENV === "local" ? "http://" : "https://";
103049
+ const node = options.node ?? scheme + process.env.SEARCH_DOMAIN;
103028
103050
  const first = Array.isArray(node) ? node[0] : node;
103029
103051
  const nodeUrl = typeof first === "string" ? first : String(first?.url ?? "");
103030
103052
  return new Client4({
@@ -108458,6 +108480,10 @@ var format = (parts) => {
108458
108480
  if (part instanceof Error) {
108459
108481
  return part.stack ?? part.message;
108460
108482
  }
108483
+ if (Array.isArray(part)) {
108484
+ return part.map((entry) => format([entry])).join(`
108485
+ `);
108486
+ }
108461
108487
  return JSON.stringify(part);
108462
108488
  }).join(" ");
108463
108489
  };
@@ -114453,7 +114479,7 @@ var getSanitizedDevTypeScriptVersion = (version2 = "") => {
114453
114479
  };
114454
114480
 
114455
114481
  // ../../node_modules/.pnpm/@aws-sdk+util-user-agent-node@3.973.14_aws-crt@1.30.0_supports-color@8.1.1_/node_modules/@aws-sdk/util-user-agent-node/dist-es/getTypeScriptUserAgentPair.js
114456
- var __dirname = "/Users/ivandasilveira/Sites/@awsless/node_modules/.pnpm/@aws-sdk+util-user-agent-node@3.973.14_aws-crt@1.30.0_supports-color@8.1.1_/node_modules/@aws-sdk/util-user-agent-node/dist-es";
114482
+ var __dirname = "/Users/work/Code/awsless/node_modules/.pnpm/@aws-sdk+util-user-agent-node@3.973.14_aws-crt@1.30.0_supports-color@8.1.1_/node_modules/@aws-sdk/util-user-agent-node/dist-es";
114457
114483
  var tscVersion;
114458
114484
  var TS_PACKAGE_JSON = join7("node_modules", "typescript", "package.json");
114459
114485
  var getTypeScriptUserAgentPair = async () => {
@@ -128375,7 +128401,7 @@ import {
128375
128401
  UpdateKeysCommand
128376
128402
  } from "@aws-sdk/client-cloudfront-keyvaluestore";
128377
128403
 
128378
- // ../../node_modules/.pnpm/@terraforge+core@0.0.43_aws-crt@1.30.0_debug@4.4.3_supports-color@8.1.1__supports-color@8.1.1__graphology-types@0.24.8/node_modules/@terraforge/core/dist/index.mjs
128404
+ // ../../node_modules/.pnpm/@terraforge+core@0.0.44_aws-crt@1.30.0_debug@4.4.3_supports-color@8.1.1__supports-color@8.1.1__graphology-types@0.24.8/node_modules/@terraforge/core/dist/index.mjs
128379
128405
  var import_async_on_exit = __toESM(require_async_on_exit(), 1);
128380
128406
 
128381
128407
  // ../../node_modules/.pnpm/p-limit@6.2.0/node_modules/p-limit/index.js
@@ -131530,6 +131556,17 @@ var $forEachNodeInTopologicalOrder = sort.forEachNodeInTopologicalOrder;
131530
131556
  var $topologicalSort = sort.topologicalSort;
131531
131557
  var $topologicalGenerations = sort.topologicalGenerations;
131532
131558
  var $forEachTopologicalGeneration = sort.forEachTopologicalGeneration;
131559
+ // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm/sha1.js
131560
+ import { createHash as createHash3 } from "crypto";
131561
+ function sha1(bytes) {
131562
+ if (Array.isArray(bytes)) {
131563
+ bytes = Buffer.from(bytes);
131564
+ } else if (typeof bytes === "string") {
131565
+ bytes = Buffer.from(bytes, "utf8");
131566
+ }
131567
+ return createHash3("sha1").update(bytes).digest();
131568
+ }
131569
+ var sha1_default = sha1;
131533
131570
 
131534
131571
  // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm/regex.js
131535
131572
  var regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
@@ -131595,18 +131632,6 @@ function v35(version2, hash, value, namespace, buf, offset) {
131595
131632
  return unsafeStringify(bytes);
131596
131633
  }
131597
131634
 
131598
- // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm/sha1.js
131599
- import { createHash as createHash3 } from "crypto";
131600
- function sha1(bytes) {
131601
- if (Array.isArray(bytes)) {
131602
- bytes = Buffer.from(bytes);
131603
- } else if (typeof bytes === "string") {
131604
- bytes = Buffer.from(bytes, "utf8");
131605
- }
131606
- return createHash3("sha1").update(bytes).digest();
131607
- }
131608
- var sha1_default = sha1;
131609
-
131610
131635
  // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm/v5.js
131611
131636
  function v5(value, namespace, buf, offset) {
131612
131637
  return v35(80, sha1_default, value, namespace, buf, offset);
@@ -131713,7 +131738,7 @@ var getter = (options = {}) => {
131713
131738
  };
131714
131739
  var get = getter();
131715
131740
 
131716
- // ../../node_modules/.pnpm/@terraforge+core@0.0.43_aws-crt@1.30.0_debug@4.4.3_supports-color@8.1.1__supports-color@8.1.1__graphology-types@0.24.8/node_modules/@terraforge/core/dist/index.mjs
131741
+ // ../../node_modules/.pnpm/@terraforge+core@0.0.44_aws-crt@1.30.0_debug@4.4.3_supports-color@8.1.1__supports-color@8.1.1__graphology-types@0.24.8/node_modules/@terraforge/core/dist/index.mjs
131717
131742
  import { appendFile, mkdir, readFile as readFile4, rename, rm, writeFile as writeFile2 } from "fs/promises";
131718
131743
  var import_proper_lockfile = __toESM(require_proper_lockfile(), 1);
131719
131744
  import { DynamoDB } from "@aws-sdk/client-dynamodb";
@@ -131986,7 +132011,7 @@ var unmarshall = (data, options) => {
131986
132011
  return convertToNative({ M: data }, options);
131987
132012
  };
131988
132013
 
131989
- // ../../node_modules/.pnpm/@terraforge+core@0.0.43_aws-crt@1.30.0_debug@4.4.3_supports-color@8.1.1__supports-color@8.1.1__graphology-types@0.24.8/node_modules/@terraforge/core/dist/index.mjs
132014
+ // ../../node_modules/.pnpm/@terraforge+core@0.0.44_aws-crt@1.30.0_debug@4.4.3_supports-color@8.1.1__supports-color@8.1.1__graphology-types@0.24.8/node_modules/@terraforge/core/dist/index.mjs
131990
132015
  import { createHash as createHash4, randomUUID as randomUUID2 } from "crypto";
131991
132016
  import { DeleteObjectCommand, GetObjectCommand, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
131992
132017
  var nodeMetaSymbol = Symbol("metadata");
@@ -132004,9 +132029,6 @@ var isDataSource = (obj) => {
132004
132029
  return isNode(obj) && obj[nodeMetaSymbol].tag === "data";
132005
132030
  };
132006
132031
  var Group = class Group2 {
132007
- parent;
132008
- type;
132009
- name;
132010
132032
  children = [];
132011
132033
  constructor(parent, type, name) {
132012
132034
  this.parent = parent;
@@ -132052,7 +132074,6 @@ var Group = class Group2 {
132052
132074
  }
132053
132075
  };
132054
132076
  var Stack = class extends Group {
132055
- app;
132056
132077
  dependencies = /* @__PURE__ */ new Set;
132057
132078
  constructor(app, name) {
132058
132079
  super(app, "stack", name);
@@ -132067,7 +132088,6 @@ var findParentStack = (group4) => {
132067
132088
  return findParentStack(group4.parent);
132068
132089
  };
132069
132090
  var App = class extends Group {
132070
- name;
132071
132091
  constructor(name) {
132072
132092
  super(undefined, "app", name);
132073
132093
  this.name = name;
@@ -132081,8 +132101,6 @@ var PENDING = 1;
132081
132101
  var RESOLVED = 2;
132082
132102
  var REJECTED = 3;
132083
132103
  var Future = class Future2 {
132084
- callback;
132085
- volatile;
132086
132104
  listeners = /* @__PURE__ */ new Set;
132087
132105
  status = IDLE;
132088
132106
  data;
@@ -132104,28 +132122,28 @@ var Future = class Future2 {
132104
132122
  }
132105
132123
  }
132106
132124
  pipe(cb) {
132107
- return new Future2((resolve, reject) => {
132125
+ return new Future2((resolve$1, reject) => {
132108
132126
  this.then((value) => {
132109
- Promise.resolve(cb(value)).then((value2) => {
132110
- resolve(value2);
132127
+ Promise.resolve(cb(value)).then((value$1) => {
132128
+ resolve$1(value$1);
132111
132129
  }).catch(reject);
132112
132130
  }, reject);
132113
132131
  }, this.volatile);
132114
132132
  }
132115
- then(resolve, reject) {
132133
+ then(resolve$1, reject) {
132116
132134
  if (this.volatile)
132117
132135
  try {
132118
- Promise.resolve(this.callback(resolve, (error3) => reject?.(error3))).catch((error3) => reject?.(error3));
132136
+ Promise.resolve(this.callback(resolve$1, (error3) => reject?.(error3))).catch((error3) => reject?.(error3));
132119
132137
  } catch (error3) {
132120
132138
  reject?.(error3);
132121
132139
  }
132122
132140
  else if (this.status === RESOLVED)
132123
- resolve(this.data);
132141
+ resolve$1(this.data);
132124
132142
  else if (this.status === REJECTED)
132125
132143
  reject?.(this.error);
132126
132144
  else {
132127
132145
  this.listeners.add({
132128
- resolve,
132146
+ resolve: resolve$1,
132129
132147
  reject
132130
132148
  });
132131
132149
  if (this.status === IDLE) {
@@ -132134,7 +132152,7 @@ var Future = class Future2 {
132134
132152
  if (this.status === PENDING) {
132135
132153
  this.status = RESOLVED;
132136
132154
  this.data = data;
132137
- this.listeners.forEach(({ resolve: resolve2 }) => resolve2(data));
132155
+ this.listeners.forEach(({ resolve: resolve$2 }) => resolve$2(data));
132138
132156
  this.listeners.clear();
132139
132157
  }
132140
132158
  };
@@ -132142,7 +132160,7 @@ var Future = class Future2 {
132142
132160
  if (this.status === PENDING) {
132143
132161
  this.status = REJECTED;
132144
132162
  this.error = error3;
132145
- this.listeners.forEach(({ reject: reject2 }) => reject2?.(error3));
132163
+ this.listeners.forEach(({ reject: reject$1 }) => reject$1?.(error3));
132146
132164
  this.listeners.clear();
132147
132165
  }
132148
132166
  };
@@ -132157,13 +132175,13 @@ var Future = class Future2 {
132157
132175
  };
132158
132176
  var findInputDeps = (props) => {
132159
132177
  const deps = [];
132160
- const find = (props2) => {
132161
- if (props2 instanceof Output)
132162
- deps.push(...props2.dependencies);
132163
- else if (Array.isArray(props2))
132164
- props2.map(find);
132165
- else if (props2?.constructor === Object)
132166
- Object.values(props2).map(find);
132178
+ const find = (props$1) => {
132179
+ if (props$1 instanceof Output)
132180
+ deps.push(...props$1.dependencies);
132181
+ else if (Array.isArray(props$1))
132182
+ props$1.map(find);
132183
+ else if (props$1?.constructor === Object)
132184
+ Object.values(props$1).map(find);
132167
132185
  };
132168
132186
  find(props);
132169
132187
  return deps;
@@ -132186,7 +132204,7 @@ var resolveWithTimeout = async (promise) => {
132186
132204
  }
132187
132205
  };
132188
132206
  var resolveInputs = async (inputs, fallback) => {
132189
- const resolve = async (value, path) => {
132207
+ const resolve$1 = async (value, path) => {
132190
132208
  if (value instanceof Output || value instanceof Future || value instanceof Promise)
132191
132209
  try {
132192
132210
  return await resolveWithTimeout(value);
@@ -132196,31 +132214,30 @@ var resolveInputs = async (inputs, fallback) => {
132196
132214
  throw error3;
132197
132215
  }
132198
132216
  if (Array.isArray(value))
132199
- return Promise.all(value.map((item, index) => resolve(item, [...path, index])));
132217
+ return Promise.all(value.map((item, index) => resolve$1(item, [...path, index])));
132200
132218
  if (value?.constructor === Object) {
132201
- const entries = Object.entries(value);
132202
- const resolved = await Promise.all(entries.map(([key, item]) => resolve(item, [...path, key])));
132219
+ const entries$1 = Object.entries(value);
132220
+ const resolved = await Promise.all(entries$1.map(([key, item]) => resolve$1(item, [...path, key])));
132203
132221
  const result = {};
132204
- entries.forEach(([key], i3) => {
132222
+ entries$1.forEach(([key], i3) => {
132205
132223
  result[key] = resolved[i3];
132206
132224
  });
132207
132225
  return result;
132208
132226
  }
132209
132227
  return value;
132210
132228
  };
132211
- return resolve(inputs, []);
132229
+ return resolve$1(inputs, []);
132212
132230
  };
132213
132231
  var Output = class Output2 extends Future {
132214
- dependencies;
132215
132232
  constructor(dependencies, callback, volatile = false) {
132216
132233
  super(callback, volatile);
132217
132234
  this.dependencies = dependencies;
132218
132235
  }
132219
132236
  pipe(cb) {
132220
- return new Output2(this.dependencies, (resolve, reject) => {
132237
+ return new Output2(this.dependencies, (resolve$1, reject) => {
132221
132238
  this.then((value) => {
132222
- Promise.resolve(cb(value)).then((value2) => {
132223
- resolve(value2);
132239
+ Promise.resolve(cb(value)).then((value$1) => {
132240
+ resolve$1(value$1);
132224
132241
  }).catch(reject);
132225
132242
  }, reject);
132226
132243
  }, this.volatile);
@@ -132236,9 +132253,9 @@ var hasVolatileInput = (props) => {
132236
132253
  return false;
132237
132254
  };
132238
132255
  var combine = (...inputs) => {
132239
- return new Output(new Set(findInputDeps(inputs)), (resolve, reject) => {
132256
+ return new Output(new Set(findInputDeps(inputs)), (resolve$1, reject) => {
132240
132257
  Promise.all(inputs).then(resolveInputs).then((result) => {
132241
- resolve(result);
132258
+ resolve$1(result);
132242
132259
  }, reject);
132243
132260
  }, hasVolatileInput(inputs));
132244
132261
  };
@@ -132262,7 +132279,7 @@ var createUrn = (tag, type, name, parentUrn) => {
132262
132279
  var createMeta = (tag, provider, parent, type, logicalId, input, config) => {
132263
132280
  const urn = createUrn(tag, type, logicalId, parent.urn);
132264
132281
  const stack = findParentStack(parent);
132265
- let output;
132282
+ let output$1;
132266
132283
  let resolved = false;
132267
132284
  return {
132268
132285
  tag,
@@ -132287,16 +132304,16 @@ var createMeta = (tag, provider, parent, type, logicalId, input, config) => {
132287
132304
  return dependencies;
132288
132305
  },
132289
132306
  resolve(data) {
132290
- output = data;
132307
+ output$1 = data;
132291
132308
  resolved = true;
132292
132309
  },
132293
132310
  output(cb) {
132294
- return new Output(/* @__PURE__ */ new Set([this]), (resolve2, reject) => {
132311
+ return new Output(new Set([this]), (resolve$1, reject) => {
132295
132312
  if (!resolved) {
132296
132313
  reject(/* @__PURE__ */ new Error(`Unresolved output for ${tag}: ${urn}`));
132297
132314
  return;
132298
132315
  }
132299
- resolve2(cb(output));
132316
+ resolve$1(cb(output$1));
132300
132317
  }, true);
132301
132318
  }
132302
132319
  };
@@ -132316,7 +132333,6 @@ var createDebugger = (group4) => {
132316
132333
  };
132317
132334
  };
132318
132335
  var AlreadyLockedError = class extends Error {
132319
- urn;
132320
132336
  constructor(urn) {
132321
132337
  super(`Already locked: ${urn}`);
132322
132338
  this.urn = urn;
@@ -132522,9 +132538,6 @@ var allowsDependentReplace = (replaceOnChanges, dependencyPaths) => {
132522
132538
  return false;
132523
132539
  };
132524
132540
  var ResourceError = class ResourceError2 extends Error {
132525
- urn;
132526
- type;
132527
- operation;
132528
132541
  static wrap(urn, type, operation, error3) {
132529
132542
  if (error3 instanceof Error)
132530
132543
  return new ResourceError2(urn, type, operation, error3.message);
@@ -132538,8 +132551,6 @@ var ResourceError = class ResourceError2 extends Error {
132538
132551
  }
132539
132552
  };
132540
132553
  var AppError = class extends Error {
132541
- app;
132542
- issues;
132543
132554
  constructor(app, issues, message4) {
132544
132555
  super(message4);
132545
132556
  this.app = app;
@@ -132568,8 +132579,8 @@ var v1 = (oldAppState) => {
132568
132579
  const stacks = {};
132569
132580
  for (const [urn, stack] of entries(oldAppState.stacks)) {
132570
132581
  const nodes2 = {};
132571
- for (const [urn2, resource] of entries(stack.resources))
132572
- nodes2[urn2] = {
132582
+ for (const [urn$1, resource] of entries(stack.resources))
132583
+ nodes2[urn$1] = {
132573
132584
  ...resource,
132574
132585
  tag: "resource"
132575
132586
  };
@@ -132810,6 +132821,8 @@ var importResource = async (resource, input, opt) => {
132810
132821
  }
132811
132822
  });
132812
132823
  } catch (error3) {
132824
+ if (error3 instanceof ResourceNotFound)
132825
+ throw new ResourceNotFound(`The "${meta.type}" resource import "${meta.config?.import}" doesn't exist. (${meta.urn})`);
132813
132826
  throw ResourceError.wrap(meta.urn, meta.type, "import", error3);
132814
132827
  }
132815
132828
  return {
@@ -132991,11 +133004,11 @@ var deployApp = async (app, opt) => {
132991
133004
  });
132992
133005
  const isFilteredIn = !opt.filters?.length || opt.filters.includes(stackState.name);
132993
133006
  if (!found && isFilteredIn)
132994
- for (const [urn2, nodeState] of entries(stackState.nodes))
132995
- graph.add(urn2, dependentsOn(allNodes, urn2), async () => {
133007
+ for (const [urn$1, nodeState] of entries(stackState.nodes))
133008
+ graph.add(urn$1, dependentsOn(allNodes, urn$1), async () => {
132996
133009
  if (nodeState.tag === "resource")
132997
- await queue(() => deleteResource(appState.idempotentToken, urn2, nodeState, opt));
132998
- delete stackState.nodes[urn2];
133010
+ await queue(() => deleteResource(appState.idempotentToken, urn$1, nodeState, opt));
133011
+ delete stackState.nodes[urn$1];
132999
133012
  });
133000
133013
  }
133001
133014
  for (const stack of stacks) {
@@ -133024,16 +133037,16 @@ var deployApp = async (app, opt) => {
133024
133037
  throw ResourceError.wrap(meta.urn, meta.type, "resolve", error3);
133025
133038
  }
133026
133039
  if (isDataSource(node)) {
133027
- const meta2 = getMeta(node);
133040
+ const meta$1 = getMeta(node);
133028
133041
  if (!nodeState) {
133029
- const dataSourceState = await getDataSource(meta2, input, opt);
133030
- nodeState = stackState.nodes[meta2.urn] = {
133042
+ const dataSourceState = await getDataSource(meta$1, input, opt);
133043
+ nodeState = stackState.nodes[meta$1.urn] = {
133031
133044
  ...dataSourceState,
133032
133045
  drifted: undefined,
133033
133046
  ...partialNewResourceState
133034
133047
  };
133035
133048
  } else if (!compareState(nodeState.input, input) || nodeState.drifted) {
133036
- const dataSourceState = await getDataSource(meta2, input, opt);
133049
+ const dataSourceState = await getDataSource(meta$1, input, opt);
133037
133050
  Object.assign(nodeState, {
133038
133051
  ...dataSourceState,
133039
133052
  drifted: undefined,
@@ -133043,78 +133056,87 @@ var deployApp = async (app, opt) => {
133043
133056
  Object.assign(nodeState, partialNewResourceState);
133044
133057
  }
133045
133058
  if (isResource(node)) {
133046
- const meta2 = getMeta(node);
133047
- if (!nodeState)
133048
- if (meta2.config?.import) {
133059
+ const meta$1 = getMeta(node);
133060
+ if (!nodeState) {
133061
+ if (meta$1.config?.import) {
133049
133062
  const importedState = await importResource(node, input, opt);
133050
- const newResourceState = await updateResource(node, appState.idempotentToken, importedState.input, importedState.output, input, opt);
133051
- nodeState = stackState.nodes[meta2.urn] = {
133052
- ...importedState,
133053
- ...newResourceState,
133054
- ...partialNewResourceState
133055
- };
133056
- } else {
133063
+ if (importedState) {
133064
+ const newResourceState = await updateResource(node, appState.idempotentToken, importedState.input, importedState.output, input, opt);
133065
+ nodeState = stackState.nodes[meta$1.urn] = {
133066
+ ...importedState,
133067
+ ...newResourceState,
133068
+ ...partialNewResourceState
133069
+ };
133070
+ }
133071
+ }
133072
+ if (!nodeState) {
133057
133073
  const newResourceState = await createResource(node, appState.idempotentToken, input, opt);
133058
- nodeState = stackState.nodes[meta2.urn] = {
133074
+ nodeState = stackState.nodes[meta$1.urn] = {
133059
133075
  ...newResourceState,
133060
133076
  ...partialNewResourceState
133061
133077
  };
133062
133078
  }
133063
- else {
133079
+ } else {
133064
133080
  const inputChanged = !compareState(nodeState.input, input);
133065
133081
  const hasDrift = !!nodeState.drifted;
133066
133082
  if (!inputChanged && !hasDrift)
133067
133083
  Object.assign(nodeState, partialNewResourceState);
133068
133084
  else {
133069
133085
  let newResourceState;
133070
- const ignoreReplace = forcedUpdateDependents.has(meta2.urn);
133071
- if (!ignoreReplace && requiresReplacement(nodeState.input, input, meta2.config?.replaceOnChanges ?? []))
133072
- if (meta2.config?.createBeforeReplace) {
133073
- meta2.resolve(input);
133086
+ const ignoreReplace = forcedUpdateDependents.has(meta$1.urn);
133087
+ if (!ignoreReplace && requiresReplacement(nodeState.input, input, meta$1.config?.replaceOnChanges ?? []))
133088
+ if (meta$1.config?.createBeforeReplace) {
133089
+ meta$1.resolve(input);
133074
133090
  try {
133075
133091
  for (const [dependentUrn, dependentNode] of nodeByUrn.entries()) {
133076
133092
  if (!isResource(dependentNode))
133077
133093
  continue;
133078
133094
  const dependentMeta = getMeta(dependentNode);
133079
- if (!dependentMeta.dependencies.has(meta2.urn))
133095
+ if (!dependentMeta.dependencies.has(meta$1.urn))
133080
133096
  continue;
133081
133097
  const dependentStackState = stackStates.get(dependentMeta.stack.urn);
133082
133098
  const dependentState = dependentStackState?.nodes[dependentUrn];
133083
133099
  if (!dependentStackState || !dependentState)
133084
133100
  continue;
133085
- const dependencyPaths = findDependencyPaths(dependentMeta.input, meta2.urn);
133101
+ const dependencyPaths = findDependencyPaths(dependentMeta.input, meta$1.urn);
133086
133102
  if (dependencyPaths.length === 0)
133087
133103
  continue;
133088
133104
  const dependentProvider = findProvider(opt.providers, dependentMeta.provider);
133089
133105
  if (dependentProvider.planResourceChange) {
133090
133106
  const dependentProposedInput = await resolveInputs(dependentMeta.input, (path) => getAtPath(dependentState.input, path));
133091
- if ((await dependentProvider.planResourceChange({
133092
- type: dependentMeta.type,
133093
- priorState: dependentState.output,
133094
- proposedState: dependentProposedInput
133095
- })).requiresReplacement) {
133107
+ let dependentRequiresReplacement;
133108
+ try {
133109
+ dependentRequiresReplacement = !!(await dependentProvider.planResourceChange({
133110
+ type: dependentMeta.type,
133111
+ priorState: dependentState.output,
133112
+ proposedState: dependentProposedInput
133113
+ })).requiresReplacement;
133114
+ } catch {
133115
+ dependentRequiresReplacement = true;
133116
+ }
133117
+ if (dependentRequiresReplacement) {
133096
133118
  if (!allowsDependentReplace(dependentMeta.config?.replaceOnChanges, dependencyPaths))
133097
- throw ResourceError.wrap(dependentMeta.urn, dependentMeta.type, "update", /* @__PURE__ */ new Error(`Replacing ${meta2.urn} requires ${dependentMeta.urn} to set replaceOnChanges for its dependency fields.`));
133119
+ throw ResourceError.wrap(dependentMeta.urn, dependentMeta.type, "update", /* @__PURE__ */ new Error(`Replacing ${meta$1.urn} requires ${dependentMeta.urn} to set replaceOnChanges for its dependency fields.`));
133098
133120
  }
133099
133121
  }
133100
133122
  }
133101
133123
  } finally {
133102
- meta2.resolve(nodeState.output);
133124
+ meta$1.resolve(nodeState.output);
133103
133125
  }
133104
133126
  const priorState = { ...nodeState };
133105
133127
  newResourceState = await createResource(node, appState.idempotentToken, input, opt);
133106
133128
  if (newResourceState.output)
133107
- meta2.resolve(newResourceState.output);
133108
- if (!meta2.config?.retainOnDelete) {
133129
+ meta$1.resolve(newResourceState.output);
133130
+ if (!meta$1.config?.retainOnDelete) {
133109
133131
  appState.pendingDeletes ??= {};
133110
- appState.pendingDeletes[meta2.urn] = priorState;
133132
+ appState.pendingDeletes[meta$1.urn] = priorState;
133111
133133
  }
133112
133134
  } else {
133113
133135
  for (const [dependentUrn, dependentNode] of nodeByUrn.entries()) {
133114
133136
  if (!isResource(dependentNode))
133115
133137
  continue;
133116
133138
  const dependentMeta = getMeta(dependentNode);
133117
- if (!dependentMeta.dependencies.has(meta2.urn))
133139
+ if (!dependentMeta.dependencies.has(meta$1.urn))
133118
133140
  continue;
133119
133141
  if (plannedDependents.has(dependentUrn))
133120
133142
  continue;
@@ -133122,10 +133144,10 @@ var deployApp = async (app, opt) => {
133122
133144
  const dependentState = dependentStackState?.nodes[dependentUrn];
133123
133145
  if (!dependentStackState || !dependentState)
133124
133146
  continue;
133125
- const dependencyPaths = findDependencyPaths(dependentMeta.input, meta2.urn);
133147
+ const dependencyPaths = findDependencyPaths(dependentMeta.input, meta$1.urn);
133126
133148
  if (dependencyPaths.length === 0)
133127
133149
  continue;
133128
- const detachedInput = stripDependencyInputs(dependentState.input, dependentMeta.input, meta2.urn);
133150
+ const detachedInput = stripDependencyInputs(dependentState.input, dependentMeta.input, meta$1.urn);
133129
133151
  if (compareState(dependentState.input, detachedInput))
133130
133152
  continue;
133131
133153
  plannedDependents.add(dependentUrn);
@@ -133143,7 +133165,7 @@ var deployApp = async (app, opt) => {
133143
133165
  }
133144
133166
  if (dependentRequiresReplacement) {
133145
133167
  if (!allowsDependentReplace(dependentMeta.config?.replaceOnChanges, dependencyPaths))
133146
- throw ResourceError.wrap(dependentMeta.urn, dependentMeta.type, "update", /* @__PURE__ */ new Error(`Replacing ${meta2.urn} requires ${dependentMeta.urn} to set replaceOnChanges for its dependency fields.`));
133168
+ throw ResourceError.wrap(dependentMeta.urn, dependentMeta.type, "update", /* @__PURE__ */ new Error(`Replacing ${meta$1.urn} requires ${dependentMeta.urn} to set replaceOnChanges for its dependency fields.`));
133147
133169
  await deleteResource(appState.idempotentToken, dependentUrn, dependentState, opt);
133148
133170
  delete dependentStackState.nodes[dependentUrn];
133149
133171
  } else {
@@ -133157,12 +133179,12 @@ var deployApp = async (app, opt) => {
133157
133179
  }
133158
133180
  newResourceState = await replaceResource(node, appState.idempotentToken, nodeState.input, nodeState.output, input, opt);
133159
133181
  if (newResourceState.output)
133160
- meta2.resolve(newResourceState.output);
133182
+ meta$1.resolve(newResourceState.output);
133161
133183
  }
133162
133184
  else {
133163
133185
  newResourceState = await updateResource(node, appState.idempotentToken, nodeState.input, nodeState.output, input, opt);
133164
133186
  if (ignoreReplace)
133165
- forcedUpdateDependents.delete(meta2.urn);
133187
+ forcedUpdateDependents.delete(meta$1.urn);
133166
133188
  }
133167
133189
  Object.assign(nodeState, {
133168
133190
  input,
@@ -133411,7 +133433,6 @@ var status = async (app, opt) => {
133411
133433
  return stacks;
133412
133434
  };
133413
133435
  var WorkSpace = class {
133414
- props;
133415
133436
  constructor(props) {
133416
133437
  this.props = props;
133417
133438
  }
@@ -133506,7 +133527,6 @@ var isConditionalCheckFailed = (error3) => {
133506
133527
  return error3 instanceof Error && error3.name === "ConditionalCheckFailedException";
133507
133528
  };
133508
133529
  var DynamoLockBackend = class {
133509
- props;
133510
133530
  client;
133511
133531
  constructor(props) {
133512
133532
  this.props = props;
@@ -133590,7 +133610,6 @@ var DynamoLockBackend = class {
133590
133610
  }
133591
133611
  };
133592
133612
  var S3StateBackend = class {
133593
- props;
133594
133613
  client;
133595
133614
  constructor(props) {
133596
133615
  this.props = props;
@@ -133628,16 +133647,16 @@ var S3StateBackend = class {
133628
133647
  }
133629
133648
  };
133630
133649
  var file = (path, encoding = "utf8") => {
133631
- return new Future(async (resolve2, reject) => {
133650
+ return new Future(async (resolve$1, reject) => {
133632
133651
  try {
133633
- resolve2(await readFile4(path, { encoding }));
133652
+ resolve$1(await readFile4(path, { encoding }));
133634
133653
  } catch (error3) {
133635
133654
  reject(error3);
133636
133655
  }
133637
133656
  });
133638
133657
  };
133639
133658
  var hash = (path, algo = "sha256") => {
133640
- return file(path).pipe((file2) => createHash4(algo).update(file2).digest("hex"));
133659
+ return file(path).pipe((file$1) => createHash4(algo).update(file$1).digest("hex"));
133641
133660
  };
133642
133661
  globalThis.$resolve = resolve;
133643
133662
  globalThis.$combine = combine;
@@ -133648,7 +133667,7 @@ var createCustomResourceClass = (providerId, resourceType) => {
133648
133667
  return new Proxy(class {
133649
133668
  }, { construct(_3, [parent, id, input, config]) {
133650
133669
  const meta = createMeta("resource", `custom:${providerId}`, parent, resourceType, id, input, config);
133651
- const node = new Proxy({}, { get(_4, key) {
133670
+ const node = new Proxy({}, { get(_$1, key) {
133652
133671
  if (key === nodeMetaSymbol)
133653
133672
  return meta;
133654
133673
  if (key === "urn")
@@ -133663,68 +133682,67 @@ var createCustomResourceClass = (providerId, resourceType) => {
133663
133682
  };
133664
133683
  var createCustomProvider = (providerId, resourceProviders) => {
133665
133684
  const version2 = 1;
133666
- const hasRefreshResource = Object.values(resourceProviders).some((provider2) => !!provider2.refreshResource);
133685
+ const hasRefreshResource = Object.values(resourceProviders).some((provider$1) => !!provider$1.refreshResource);
133667
133686
  const getProvider = (type) => {
133668
- const provider2 = resourceProviders[type];
133669
- if (!provider2)
133687
+ const provider$1 = resourceProviders[type];
133688
+ if (!provider$1)
133670
133689
  throw new Error(`The "${providerId}" provider doesn't support the "${type}" resource type.`);
133671
- return provider2;
133690
+ return provider$1;
133672
133691
  };
133673
133692
  const provider = {
133674
133693
  ownResource(id) {
133675
133694
  return id === `custom:${providerId}`;
133676
133695
  },
133677
133696
  async getResource({ type, ...props }) {
133678
- const provider2 = getProvider(type);
133679
- if (!provider2.getResource)
133697
+ const provider$1 = getProvider(type);
133698
+ if (!provider$1.getResource)
133680
133699
  return {
133681
133700
  version: version2,
133682
133701
  state: props.state
133683
133702
  };
133684
133703
  return {
133685
133704
  version: version2,
133686
- state: await provider2.getResource(props)
133705
+ state: await provider$1.getResource(props)
133687
133706
  };
133688
133707
  },
133689
133708
  async createResource({ type, ...props }) {
133690
- const provider2 = getProvider(type);
133691
- if (!provider2.createResource)
133709
+ const provider$1 = getProvider(type);
133710
+ if (!provider$1.createResource)
133692
133711
  return {
133693
133712
  version: version2,
133694
133713
  state: props.state
133695
133714
  };
133696
133715
  return {
133697
133716
  version: version2,
133698
- state: await provider2.createResource(props)
133717
+ state: await provider$1.createResource(props)
133699
133718
  };
133700
133719
  },
133701
133720
  async updateResource({ type, ...props }) {
133702
- const provider2 = getProvider(type);
133703
- if (!provider2.updateResource)
133721
+ const provider$1 = getProvider(type);
133722
+ if (!provider$1.updateResource)
133704
133723
  return {
133705
133724
  version: version2,
133706
133725
  state: props.proposedState
133707
133726
  };
133708
133727
  return {
133709
133728
  version: version2,
133710
- state: await provider2.updateResource(props)
133729
+ state: await provider$1.updateResource(props)
133711
133730
  };
133712
133731
  },
133713
133732
  async deleteResource({ type, ...props }) {
133714
133733
  await getProvider(type).deleteResource?.(props);
133715
133734
  },
133716
133735
  async planResourceChange({ type, ...props }) {
133717
- const provider2 = getProvider(type);
133718
- if (!provider2.planResourceChange)
133736
+ const provider$1 = getProvider(type);
133737
+ if (!provider$1.planResourceChange)
133719
133738
  return {
133720
133739
  version: version2,
133721
133740
  state: props.proposedState,
133722
133741
  requiresReplacement: false
133723
133742
  };
133724
- const result = await provider2.planResourceChange(props);
133725
133743
  return {
133726
133744
  version: version2,
133727
- ...result
133745
+ ...await provider$1.planResourceChange(props)
133728
133746
  };
133729
133747
  },
133730
133748
  async getData({ type, ...props }) {
@@ -141079,14 +141097,12 @@ if (!nativeAccelerationDisabled) {
141079
141097
  try {
141080
141098
  if (true)
141081
141099
  extractor = require_msgpackr_extract();
141082
- else
141083
- ;
141084
141100
  if (extractor)
141085
141101
  setExtractor(extractor.extractStrings);
141086
141102
  } catch (error3) {}
141087
141103
  }
141088
141104
 
141089
- // ../../node_modules/.pnpm/@terraforge+terraform@0.0.35_@terraforge+core@0.0.43_aws-crt@1.30.0_debug@4.4.3_support_5cbec650153056d375307c2d151398c3/node_modules/@terraforge/terraform/dist/index.mjs
141105
+ // ../../node_modules/.pnpm/@terraforge+terraform@0.0.35_@terraforge+core@0.0.44_aws-crt@1.30.0_debug@4.4.3_support_4501f5c353e25a801cf638e931a8dd2d/node_modules/@terraforge/terraform/dist/index.mjs
141090
141106
  var import_grpc_js = __toESM(require_src4(), 1);
141091
141107
  var import_proto_loader = __toESM(require_src3(), 1);
141092
141108
  var import_jszip = __toESM(require_lib3(), 1);
@@ -143597,7 +143613,7 @@ var createTerraformProxy = (props) => {
143597
143613
  });
143598
143614
  };
143599
143615
 
143600
- // ../../node_modules/.pnpm/@terraforge+aws@6.53.0_@terraforge+core@0.0.43_aws-crt@1.30.0_debug@4.4.3_supports-colo_8ae6ada9f1b5b5808a0d42265f99939f/node_modules/@terraforge/aws/dist/index.js
143616
+ // ../../node_modules/.pnpm/@terraforge+aws@6.53.0_@terraforge+core@0.0.44_aws-crt@1.30.0_debug@4.4.3_supports-colo_7835ee9c943a9b106f7a0c962824b2e8/node_modules/@terraforge/aws/dist/index.js
143601
143617
  var aws2 = createTerraformProxy({
143602
143618
  namespace: "aws",
143603
143619
  provider: { org: "hashicorp", type: "aws", version: "6.53.0" }
@@ -155591,7 +155607,11 @@ var createDnsValidatedCertificate = (group4, id, props) => {
155591
155607
  validationMethod: "DNS",
155592
155608
  keyAlgorithm: "RSA_2048",
155593
155609
  subjectAlternativeNames: props.subjectAlternativeNames
155594
- }, props.provider ? { provider: props.provider } : undefined);
155610
+ }, {
155611
+ ...props.provider ? { provider: props.provider } : {},
155612
+ replaceOnChanges: ["domainName", "subjectAlternativeNames"],
155613
+ createBeforeReplace: true
155614
+ });
155595
155615
  const option = (index) => {
155596
155616
  return certificate.domainValidationOptions.pipe((options) => {
155597
155617
  return options[index];
@@ -155604,6 +155624,8 @@ var createDnsValidatedCertificate = (group4, id, props) => {
155604
155624
  ttl: toSeconds2(minutes5(5)),
155605
155625
  records: [option(0).pipe((r4) => r4.resourceRecordValue)],
155606
155626
  allowOverwrite: true
155627
+ }, {
155628
+ replaceOnChanges: ["name", "type", "zoneId", "records"]
155607
155629
  });
155608
155630
  const record2 = new aws2.route53.Record(group4, `${props.recordIdPrefix}-2`, {
155609
155631
  zoneId: props.zoneId,
@@ -155612,14 +155634,17 @@ var createDnsValidatedCertificate = (group4, id, props) => {
155612
155634
  ttl: toSeconds2(minutes5(5)),
155613
155635
  records: [option(1).pipe((r4) => r4.resourceRecordValue)],
155614
155636
  allowOverwrite: true
155637
+ }, {
155638
+ replaceOnChanges: ["name", "type", "zoneId", "records"]
155615
155639
  });
155616
155640
  const validation = new aws2.acm.CertificateValidation(group4, id, {
155617
155641
  certificateArn: certificate.arn,
155618
155642
  validationRecordFqdns: [record1.fqdn, record2.fqdn]
155619
- }, props.provider || props.dependsOn ? {
155643
+ }, {
155620
155644
  ...props.dependsOn ? { dependsOn: props.dependsOn } : {},
155621
- ...props.provider ? { provider: props.provider } : {}
155622
- } : undefined);
155645
+ ...props.provider ? { provider: props.provider } : {},
155646
+ replaceOnChanges: ["certificateArn", "validationRecordFqdns"]
155647
+ });
155623
155648
  return validation;
155624
155649
  };
155625
155650
  var getDomainNameById = (config, id) => {
@@ -155660,9 +155685,14 @@ var domainFeature = defineFeature({
155660
155685
  const zone = new aws2.route53.Zone(ctx.zones, "zone", {
155661
155686
  name: props.domain,
155662
155687
  forceDestroy: true
155688
+ }, {
155689
+ replaceOnChanges: ["name"],
155690
+ createBeforeReplace: true
155663
155691
  });
155664
155692
  const nsCheck = new NsCheck(group5, "check", {
155665
155693
  zoneId: zone.id
155694
+ }, {
155695
+ replaceOnChanges: ["zoneId"]
155666
155696
  });
155667
155697
  ctx.registerDomainZone(zone);
155668
155698
  ctx.shared.add("domain", `zone-id`, id, zone.id);
@@ -155689,7 +155719,9 @@ var domainFeature = defineFeature({
155689
155719
  const identity = new aws2.ses.DomainIdentity(group5, "mail", {
155690
155720
  domain: props.domain
155691
155721
  }, {
155692
- import: ctx.import ? props.domain : undefined
155722
+ import: ctx.import ? props.domain : undefined,
155723
+ replaceOnChanges: ["domain"],
155724
+ createBeforeReplace: true
155693
155725
  });
155694
155726
  const verificationRecord = new aws2.route53.Record(group5, `verification`, {
155695
155727
  zoneId: zone.id,
@@ -155697,11 +155729,15 @@ var domainFeature = defineFeature({
155697
155729
  type: "TXT",
155698
155730
  ttl: toSeconds3(minutes6(5)),
155699
155731
  records: [identity.verificationToken]
155732
+ }, {
155733
+ replaceOnChanges: ["name", "type", "zoneId", "records"]
155700
155734
  });
155701
155735
  const dkim = new aws2.ses.DomainDkim(group5, "dkim", {
155702
155736
  domain: props.domain
155703
155737
  }, {
155704
- import: ctx.import ? props.domain : undefined
155738
+ import: ctx.import ? props.domain : undefined,
155739
+ replaceOnChanges: ["domain"],
155740
+ createBeforeReplace: true
155705
155741
  });
155706
155742
  for (let i3 = 0;i3 < 3; i3++) {
155707
155743
  new aws2.route53.Record(group5, `dkim-${i3}`, {
@@ -155710,6 +155746,8 @@ var domainFeature = defineFeature({
155710
155746
  name: dkim.dkimTokens.pipe((t2) => `${t2.at(i3)}._domainkey`),
155711
155747
  ttl: toSeconds3(minutes6(5)),
155712
155748
  records: [dkim.dkimTokens.pipe((t2) => `${t2.at(i3)}.dkim.amazonses.com`)]
155749
+ }, {
155750
+ replaceOnChanges: ["name", "type", "zoneId", "records"]
155713
155751
  });
155714
155752
  }
155715
155753
  const mailFrom = new aws2.ses.DomainMailFrom(group5, "mail-from", {
@@ -155717,7 +155755,9 @@ var domainFeature = defineFeature({
155717
155755
  mailFromDomain: `mail.${props.domain}`,
155718
155756
  behaviorOnMxFailure: "UseDefaultValue"
155719
155757
  }, {
155720
- import: ctx.import ? props.domain : undefined
155758
+ import: ctx.import ? props.domain : undefined,
155759
+ replaceOnChanges: ["domain"],
155760
+ createBeforeReplace: true
155721
155761
  });
155722
155762
  new aws2.route53.Record(group5, `MX`, {
155723
155763
  zoneId: zone.id,
@@ -155725,6 +155765,8 @@ var domainFeature = defineFeature({
155725
155765
  type: "MX",
155726
155766
  ttl: toSeconds3(minutes6(5)),
155727
155767
  records: [`10 feedback-smtp.${ctx.appConfig.region}.amazonses.com`]
155768
+ }, {
155769
+ replaceOnChanges: ["name", "type", "zoneId"]
155728
155770
  });
155729
155771
  new aws2.route53.Record(group5, `SPF`, {
155730
155772
  zoneId: zone.id,
@@ -155732,6 +155774,8 @@ var domainFeature = defineFeature({
155732
155774
  type: "TXT",
155733
155775
  ttl: toSeconds3(minutes6(5)),
155734
155776
  records: ["v=spf1 include:amazonses.com -all"]
155777
+ }, {
155778
+ replaceOnChanges: ["name", "type", "zoneId"]
155735
155779
  });
155736
155780
  new aws2.route53.Record(group5, `DMARC`, {
155737
155781
  zoneId: zone.id,
@@ -155739,8 +155783,13 @@ var domainFeature = defineFeature({
155739
155783
  type: "TXT",
155740
155784
  ttl: toSeconds3(minutes6(5)),
155741
155785
  records: ["v=DMARC1; p=none;"]
155786
+ }, {
155787
+ replaceOnChanges: ["name", "type", "zoneId"]
155788
+ });
155789
+ new aws2.ses.DomainIdentityVerification(group5, "mail", { domain: props.domain }, {
155790
+ dependsOn: [identity, verificationRecord, nsCheck],
155791
+ replaceOnChanges: ["domain"]
155742
155792
  });
155743
- new aws2.ses.DomainIdentityVerification(group5, "mail", { domain: props.domain }, { dependsOn: [identity, verificationRecord, nsCheck] });
155744
155793
  for (const record of props.dns ?? []) {
155745
155794
  const name = record.name ?? props.domain;
155746
155795
  new aws2.route53.Record(group5, `${name}-${record.type}`, {
@@ -155749,6 +155798,8 @@ var domainFeature = defineFeature({
155749
155798
  ttl: toSeconds3(record.ttl),
155750
155799
  type: record.type,
155751
155800
  records: record.records
155801
+ }, {
155802
+ replaceOnChanges: ["name", "type", "zoneId"]
155752
155803
  });
155753
155804
  }
155754
155805
  }
@@ -158381,11 +158432,16 @@ var restFeature = defineFeature({
158381
158432
  endpointType: "REGIONAL",
158382
158433
  securityPolicy: "TLS_1_2"
158383
158434
  }
158435
+ }, {
158436
+ replaceOnChanges: ["domainName", "domainNameConfiguration"],
158437
+ createBeforeReplace: true
158384
158438
  });
158385
158439
  const mapping = new aws2.apigatewayv2.ApiMapping(group4, "mapping", {
158386
158440
  apiId: api.id,
158387
158441
  domainName: domain.domainName,
158388
158442
  stage: stage.name
158443
+ }, {
158444
+ replaceOnChanges: ["domainName"]
158389
158445
  });
158390
158446
  new aws2.route53.Record(group4, "record", {
158391
158447
  zoneId,
@@ -158397,7 +158453,8 @@ var restFeature = defineFeature({
158397
158453
  evaluateTargetHealth: false
158398
158454
  }
158399
158455
  }, {
158400
- dependsOn: [mapping]
158456
+ dependsOn: [mapping],
158457
+ replaceOnChanges: ["name", "type", "zoneId", "alias"]
158401
158458
  });
158402
158459
  ctx.bind(`REST_${constantCase(id)}_ENDPOINT`, domainName);
158403
158460
  } else {
@@ -162836,6 +162893,8 @@ var routerFeature = defineFeature({
162836
162893
  zoneId: "Z2FDTNDATAQYW2",
162837
162894
  evaluateTargetHealth: false
162838
162895
  }
162896
+ }, {
162897
+ replaceOnChanges: ["name", "type", "zoneId", "alias"]
162839
162898
  });
162840
162899
  new aws2.route53.Record(group4, `${recordId}-ipv6`, {
162841
162900
  zoneId,
@@ -162846,6 +162905,8 @@ var routerFeature = defineFeature({
162846
162905
  zoneId: "Z2FDTNDATAQYW2",
162847
162906
  evaluateTargetHealth: false
162848
162907
  }
162908
+ }, {
162909
+ replaceOnChanges: ["name", "type", "zoneId", "alias"]
162849
162910
  });
162850
162911
  }
162851
162912
  ctx.bind(`ROUTER_${constantCase(id)}_ENDPOINT`, domainName);
@@ -164231,16 +164292,148 @@ var del9 = (program3) => {
164231
164292
  import { LambdaClient as LambdaClient4 } from "@aws-sdk/client-lambda";
164232
164293
  import { DynamoDBClient as DynamoDBClient4 } from "@awsless/dynamodb";
164233
164294
 
164295
+ // src/test/environment.ts
164296
+ import { mkdir as mkdir7, writeFile as writeFile10 } from "fs/promises";
164297
+ import { join as join47 } from "path";
164298
+
164299
+ // src/test/manifest.ts
164300
+ import { isAbsolute as isAbsolute5, join as join46 } from "path";
164301
+ var absolute = (file2) => {
164302
+ return isAbsolute5(file2) ? file2 : join46(directories.root, file2);
164303
+ };
164304
+ var createTestManifest = (appConfig, stackConfigs) => {
164305
+ const manifest = {
164306
+ app: appConfig.name,
164307
+ region: appConfig.region,
164308
+ configs: appConfig.test.configs,
164309
+ tables: [],
164310
+ tableKeys: [],
164311
+ streams: [],
164312
+ searches: [],
164313
+ functions: [],
164314
+ tasks: [],
164315
+ queues: [],
164316
+ topics: appConfig.topics ?? [],
164317
+ pubsub: Object.keys(appConfig.pubsub ?? {}),
164318
+ caches: [],
164319
+ alerts: Object.keys(appConfig.alerts ?? {}),
164320
+ jobs: [],
164321
+ instances: []
164322
+ };
164323
+ for (const stack of stackConfigs) {
164324
+ for (const [id, props] of Object.entries(stack.tables ?? {})) {
164325
+ const name = formatLocalResourceName({
164326
+ appName: appConfig.name,
164327
+ stackName: stack.name,
164328
+ resourceType: "table",
164329
+ resourceName: id
164330
+ });
164331
+ manifest.tables.push(createTableInput(name, props));
164332
+ manifest.tableKeys.push({ stack: stack.name, id, keys: formatTableKeys(props) });
164333
+ if (props.stream) {
164334
+ manifest.streams.push({
164335
+ stack: stack.name,
164336
+ id,
164337
+ file: absolute(props.stream.consumer.code.file),
164338
+ hash: props.hash,
164339
+ sort: props.sort
164340
+ });
164341
+ }
164342
+ }
164343
+ for (const [id, props] of Object.entries(stack.searchs ?? {})) {
164344
+ manifest.searches.push({
164345
+ stack: stack.name,
164346
+ id,
164347
+ mappings: resolveSearchMappings(props),
164348
+ settings: props.settings
164349
+ });
164350
+ }
164351
+ for (const [id, props] of Object.entries(stack.functions ?? {})) {
164352
+ manifest.functions.push({ stack: stack.name, id, file: absolute(props.code.file) });
164353
+ }
164354
+ for (const [id, props] of Object.entries(stack.tasks ?? {})) {
164355
+ manifest.tasks.push({ stack: stack.name, id, file: absolute(props.consumer.code.file) });
164356
+ }
164357
+ for (const [id, props] of Object.entries(stack.queues ?? {})) {
164358
+ manifest.queues.push({
164359
+ stack: stack.name,
164360
+ id,
164361
+ file: props.consumer ? absolute(props.consumer.code.file) : undefined
164362
+ });
164363
+ }
164364
+ for (const id of Object.keys(stack.caches ?? {})) {
164365
+ manifest.caches.push({ stack: stack.name, id });
164366
+ }
164367
+ for (const id of Object.keys(stack.jobs ?? {})) {
164368
+ manifest.jobs.push({ stack: stack.name, id });
164369
+ }
164370
+ for (const id of Object.keys(stack.instances ?? {})) {
164371
+ manifest.instances.push({ stack: stack.name, id });
164372
+ }
164373
+ }
164374
+ return manifest;
164375
+ };
164376
+
164377
+ // src/test/environment.ts
164378
+ var waitForSearch2 = async (port, timeoutMs) => {
164379
+ const deadline = Date.now() + timeoutMs;
164380
+ while (Date.now() < deadline) {
164381
+ try {
164382
+ const res = await fetch(`http://localhost:${port}`);
164383
+ if (res.ok) {
164384
+ return;
164385
+ }
164386
+ } catch (_4) {}
164387
+ await new Promise((resolve5) => setTimeout(resolve5, 500));
164388
+ }
164389
+ throw new Error("The local OpenSearch server never became ready.");
164390
+ };
164391
+ var withTestEnvironment = async (appConfig, stackConfigs, run) => {
164392
+ const manifest = createTestManifest(appConfig, stackConfigs);
164393
+ const manifestFile = join47(directories.output, "test", "manifest.json");
164394
+ let redis;
164395
+ let killSearch;
164396
+ manifest.servers = {};
164397
+ try {
164398
+ if (manifest.searches.length > 0) {
164399
+ const { download: download2, launch: launch2, VERSION_3_5_0_MIN: VERSION_3_5_0_MIN2 } = await Promise.resolve().then(() => (init_dist2(), exports_dist));
164400
+ const port = await findFreePort();
164401
+ const path6 = await download2(VERSION_3_5_0_MIN2);
164402
+ killSearch = await launch2({
164403
+ path: path6,
164404
+ port,
164405
+ host: "localhost",
164406
+ version: VERSION_3_5_0_MIN2,
164407
+ debug: false
164408
+ });
164409
+ await waitForSearch2(port, 60000);
164410
+ manifest.servers.search = { domain: `localhost:${port}` };
164411
+ }
164412
+ if (manifest.caches.length > 0) {
164413
+ redis = new RedisServer;
164414
+ await redis.start(undefined, undefined, ["--databases", "256"]);
164415
+ await redis.ping();
164416
+ manifest.servers.redis = { host: "127.0.0.1", port: await redis.getPort() };
164417
+ }
164418
+ await mkdir7(join47(directories.output, "test"), { recursive: true });
164419
+ await writeFile10(manifestFile, JSON.stringify(manifest));
164420
+ return await run({ manifest, manifestFile });
164421
+ } finally {
164422
+ await redis?.kill();
164423
+ await killSearch?.();
164424
+ }
164425
+ };
164426
+
164234
164427
  // src/cli/ui/complex/run-tests.ts
164235
164428
  var import_wildstring2 = __toESM(require_wildstring(), 1);
164236
- import { mkdir as mkdir7, readFile as readFile19, writeFile as writeFile10 } from "fs/promises";
164237
- import { join as join47 } from "path";
164429
+ import { mkdir as mkdir8, readFile as readFile19, writeFile as writeFile11 } from "fs/promises";
164430
+ import { join as join49 } from "path";
164238
164431
  import { parse as parse7, stringify as stringify4 } from "@awsless/json";
164239
164432
  import { generateFileHash as generateFileHash5, generateFolderHash, loadWorkspace as loadWorkspace2 } from "@awsless/ts-file-cache";
164240
164433
  import { createHash as createHash21 } from "crypto";
164241
164434
 
164242
164435
  // src/test/start.ts
164243
- import { dirname as dirname21, join as join46 } from "path";
164436
+ import { dirname as dirname21, join as join48 } from "path";
164244
164437
  import { fileURLToPath as fileURLToPath15 } from "url";
164245
164438
  import { configDefaults } from "vitest/config";
164246
164439
  import { startVitest } from "vitest/node";
@@ -164316,7 +164509,7 @@ var startTest = async (props) => {
164316
164509
  reporters: [new NullReporter],
164317
164510
  env: props.env,
164318
164511
  setupFiles: [
164319
- join46(__dirname4, "test-global-setup.js")
164512
+ join48(__dirname4, "test-global-setup.js")
164320
164513
  ]
164321
164514
  }, {
164322
164515
  logLevel: "silent",
@@ -164471,8 +164664,8 @@ var logTestErrors = (event) => {
164471
164664
  }
164472
164665
  };
164473
164666
  var runTest = async (stack, dir, filters, workspace, opts) => {
164474
- await mkdir7(directories.test, { recursive: true });
164475
- const file2 = join47(directories.test, `${stack}.json`);
164667
+ await mkdir8(directories.test, { recursive: true });
164668
+ const file2 = join49(directories.test, `${stack}.json`);
164476
164669
  const fingerprint = await generateFolderHash(workspace, dir) + (opts.fingerprint ?? "");
164477
164670
  if (!process.env.NO_CACHE) {
164478
164671
  const exists4 = await fileExist(file2);
@@ -164503,7 +164696,7 @@ var runTest = async (stack, dir, filters, workspace, opts) => {
164503
164696
  env: opts.env
164504
164697
  });
164505
164698
  if (result2.errors.length > 0) {
164506
- throw result2.errors.map((error3) => new ExpectedError(error3.message));
164699
+ throw result2.errors.map((error3) => new ExpectedError(error3.type && error3.type !== "Error" ? `${error3.type}: ${error3.message}` : error3.message));
164507
164700
  }
164508
164701
  ctx.updateSuccessMessage(formatResult({
164509
164702
  stack,
@@ -164517,7 +164710,7 @@ var runTest = async (stack, dir, filters, workspace, opts) => {
164517
164710
  logTestLogs(result);
164518
164711
  }
164519
164712
  logTestErrors(result);
164520
- await writeFile10(file2, stringify4({
164713
+ await writeFile11(file2, stringify4({
164521
164714
  ...result,
164522
164715
  fingerprint
164523
164716
  }));
@@ -164789,14 +164982,18 @@ var deploy = (program3) => {
164789
164982
  }
164790
164983
  }
164791
164984
  if (!options.skipTests) {
164792
- const passed = await runTests(tests, [], [], {
164793
- showLogs: false,
164794
- env: {
164795
- APP: appConfig.name,
164796
- APP_ID: appId,
164797
- AWS_REGION: appConfig.region,
164798
- AWS_ACCOUNT_ID: accountId
164799
- }
164985
+ const passed = await withTestEnvironment(appConfig, stackConfigs, ({ manifest, manifestFile }) => {
164986
+ return runTests(tests, [], [], {
164987
+ showLogs: false,
164988
+ manifest,
164989
+ env: {
164990
+ APP: appConfig.name,
164991
+ APP_ID: appId,
164992
+ AWS_REGION: appConfig.region,
164993
+ AWS_ACCOUNT_ID: accountId,
164994
+ AWSLESS_TEST_MANIFEST: manifestFile
164995
+ }
164996
+ });
164800
164997
  });
164801
164998
  if (!passed) {
164802
164999
  throw new ExpectedError("Tests failed.");
@@ -165352,12 +165549,12 @@ var auth = (program3) => {
165352
165549
 
165353
165550
  // src/cli/command/bind.ts
165354
165551
  import { readFile as readFile20 } from "fs/promises";
165355
- import { join as join48 } from "path";
165552
+ import { join as join50 } from "path";
165356
165553
  var bind = (program3) => {
165357
165554
  program3.command("bind").argument("[command...]", "The command to execute").option("--config <string...>", "List of config values that will be accessable", (v3) => v3.split(",")).option("--local", "Bind against the running local dev environment instead of the deployed app").description(`Bind your site environment variables to a command`).action(async (commands5 = [], opts) => {
165358
165555
  await layout("bind", async ({ appConfig, stackConfigs }) => {
165359
165556
  if (opts.local) {
165360
- const file2 = join48(directories.output, "local", "env.json");
165557
+ const file2 = join50(directories.output, "local", "env.json");
165361
165558
  let env5;
165362
165559
  try {
165363
165560
  env5 = JSON.parse(await readFile20(file2, "utf8"));
@@ -166153,18 +166350,18 @@ var watchConfig = async (options, resolve5, reject) => {
166153
166350
 
166154
166351
  // src/dev/index.ts
166155
166352
  import { loadWorkspace as loadWorkspace3 } from "@awsless/ts-file-cache";
166156
- import { mkdir as mkdir10, rm as rm12, writeFile as writeFile14 } from "fs/promises";
166157
- import { join as join55 } from "path";
166353
+ import { mkdir as mkdir11, rm as rm12, writeFile as writeFile15 } from "fs/promises";
166354
+ import { join as join57 } from "path";
166158
166355
 
166159
166356
  // src/dev/context.ts
166160
166357
  import { DynamoDBServer } from "@awsless/dynamodb-server";
166161
- import { join as join50 } from "path";
166358
+ import { join as join52 } from "path";
166162
166359
 
166163
166360
  // src/dev/servers/s3.ts
166164
166361
  import { createHash as createHash22 } from "crypto";
166165
- import { mkdir as mkdir8, readdir as readdir8, readFile as readFile21, rm as rm10, stat as stat7, writeFile as writeFile11 } from "fs/promises";
166362
+ import { mkdir as mkdir9, readdir as readdir8, readFile as readFile21, rm as rm10, stat as stat7, writeFile as writeFile12 } from "fs/promises";
166166
166363
  import { createServer as createServer7 } from "http";
166167
- import { dirname as dirname22, isAbsolute as isAbsolute5, join as join49, relative as relative10, sep as sep4 } from "path";
166364
+ import { dirname as dirname22, isAbsolute as isAbsolute6, join as join51, relative as relative10, sep as sep4 } from "path";
166168
166365
  var escapeXml = (value) => {
166169
166366
  return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&apos;");
166170
166367
  };
@@ -166229,11 +166426,11 @@ var createS3Server = (props) => {
166229
166426
  res.end(xmlError("InvalidRequest", "Missing bucket name"));
166230
166427
  return;
166231
166428
  }
166232
- const bucketDir = join49(props.root, bucket);
166233
- const file2 = join49(bucketDir, ...keyParts);
166429
+ const bucketDir = join51(props.root, bucket);
166430
+ const file2 = join51(bucketDir, ...keyParts);
166234
166431
  const escapes = (base, path6) => {
166235
166432
  const rel = relative10(base, path6);
166236
- return rel.startsWith("..") || isAbsolute5(rel);
166433
+ return rel.startsWith("..") || isAbsolute6(rel);
166237
166434
  };
166238
166435
  if (escapes(props.root, bucketDir) || escapes(bucketDir, file2)) {
166239
166436
  res.writeHead(400, { "content-type": "application/xml" });
@@ -166251,7 +166448,7 @@ var createS3Server = (props) => {
166251
166448
  return;
166252
166449
  }
166253
166450
  for (const entry of entries2) {
166254
- const path6 = join49(dir, entry.name);
166451
+ const path6 = join51(dir, entry.name);
166255
166452
  if (entry.isDirectory()) {
166256
166453
  await walk2(path6);
166257
166454
  } else {
@@ -166277,8 +166474,8 @@ var createS3Server = (props) => {
166277
166474
  if (typeof encoding === "string" && encoding.includes("aws-chunked") || typeof sha === "string" && sha.startsWith("STREAMING")) {
166278
166475
  body = decodeAwsChunked(body);
166279
166476
  }
166280
- await mkdir8(dirname22(file2), { recursive: true });
166281
- await writeFile11(file2, body);
166477
+ await mkdir9(dirname22(file2), { recursive: true });
166478
+ await writeFile12(file2, body);
166282
166479
  const eTag = createHash22("md5").update(body).digest("hex");
166283
166480
  res.writeHead(200, { etag: `"${eTag}"` });
166284
166481
  res.end();
@@ -166719,7 +166916,7 @@ var createDevContext = (props) => {
166719
166916
  const value = await props.pool.keep("store", null, async () => {
166720
166917
  const rules = [];
166721
166918
  const server = createS3Server({
166722
- root: join50(directories.output, "local", "store"),
166919
+ root: join52(directories.output, "local", "store"),
166723
166920
  region: props.appConfig.region,
166724
166921
  rules
166725
166922
  });
@@ -166819,9 +167016,9 @@ var createDevContext = (props) => {
166819
167016
 
166820
167017
  // src/dev/seed.ts
166821
167018
  import { spawn as spawn6 } from "child_process";
166822
- import { isAbsolute as isAbsolute6, join as join51 } from "path";
167019
+ import { isAbsolute as isAbsolute7, join as join53 } from "path";
166823
167020
  var createSeedRunner = (props) => {
166824
- const file2 = props.seed && (isAbsolute6(props.seed) ? props.seed : join51(directories.root, props.seed));
167021
+ const file2 = props.seed && (isAbsolute7(props.seed) ? props.seed : join53(directories.root, props.seed));
166825
167022
  let running;
166826
167023
  const run = () => {
166827
167024
  running ??= (async () => {
@@ -166870,15 +167067,15 @@ var import_ioredis5 = __toESM(require_built3(), 1);
166870
167067
  import { DynamoDBClient as DynamoDBClient5 } from "@aws-sdk/client-dynamodb";
166871
167068
  import { DynamoDBDocumentClient, ScanCommand as ScanCommand2 } from "@aws-sdk/lib-dynamodb";
166872
167069
  import { randomUUID as randomUUID8 } from "crypto";
166873
- import { readdir as readdir9, readFile as readFile22, stat as stat8, writeFile as writeFile13 } from "fs/promises";
167070
+ import { readdir as readdir9, readFile as readFile22, stat as stat8, writeFile as writeFile14 } from "fs/promises";
166874
167071
  import { createServer as createServer9 } from "http";
166875
- import { join as join53, relative as relative11, sep as sep5 } from "path";
167072
+ import { join as join55, relative as relative11, sep as sep5 } from "path";
166876
167073
 
166877
167074
  // src/dev/worker.ts
166878
167075
  import { spawn as spawn7 } from "child_process";
166879
- import { writeFile as writeFile12 } from "fs/promises";
167076
+ import { writeFile as writeFile13 } from "fs/promises";
166880
167077
  import { availableParallelism } from "os";
166881
- import { join as join52 } from "path";
167078
+ import { join as join54 } from "path";
166882
167079
  class WorkerError extends Error {
166883
167080
  name;
166884
167081
  constructor(name, message4, stack) {
@@ -166995,7 +167192,7 @@ var createBundleWorker = (props) => {
166995
167192
  throw new Error("The bundle worker never became ready.");
166996
167193
  };
166997
167194
  const startWorker = async () => {
166998
- const entry = join52(props.buildDir, "worker.mjs");
167195
+ const entry = join54(props.buildDir, "worker.mjs");
166999
167196
  const port = await findFreePort();
167000
167197
  const child = spawn7("node", ["--enable-source-maps", entry], {
167001
167198
  cwd: props.buildDir,
@@ -167054,7 +167251,7 @@ var createBundleWorker = (props) => {
167054
167251
  return worker;
167055
167252
  };
167056
167253
  const doStart = async () => {
167057
- await writeFile12(join52(props.buildDir, "worker.mjs"), WORKER_ENTRY);
167254
+ await writeFile13(join54(props.buildDir, "worker.mjs"), WORKER_ENTRY);
167058
167255
  const results = await Promise.allSettled(Array.from({ length: concurrency }, () => startWorker()));
167059
167256
  const started = results.filter((result) => result.status === "fulfilled").map((result) => result.value);
167060
167257
  const failed = results.find((result) => result.status === "rejected");
@@ -168718,7 +168915,7 @@ var createDashboardServer = (props) => {
168718
168915
  return;
168719
168916
  }
168720
168917
  for (const entry of entries2) {
168721
- const path6 = join53(dir, entry.name);
168918
+ const path6 = join55(dir, entry.name);
168722
168919
  if (entry.isDirectory()) {
168723
168920
  await walk2(path6);
168724
168921
  } else {
@@ -168783,7 +168980,7 @@ var createDashboardServer = (props) => {
168783
168980
  if (url.pathname === "/api/config") {
168784
168981
  if (req.method === "PUT") {
168785
168982
  const values2 = JSON.parse((await readBody(req)).toString() || "{}");
168786
- await writeFile13(props.configFile, JSON.stringify(values2, null, "\t") + `
168983
+ await writeFile14(props.configFile, JSON.stringify(values2, null, "\t") + `
168787
168984
  `);
168788
168985
  return { status: 200, body: JSON.stringify({ ok: true }) };
168789
168986
  }
@@ -169029,43 +169226,49 @@ var createLambdaServer = (props) => {
169029
169226
  };
169030
169227
 
169031
169228
  // src/dev/sdk.ts
169032
- import { readdir as readdir10, readFile as readFile23, mkdir as mkdir9, rm as rm11, stat as stat9, symlink } from "fs/promises";
169229
+ import { readdir as readdir10, readFile as readFile23, mkdir as mkdir10, rm as rm11, stat as stat9, symlink } from "fs/promises";
169033
169230
  import { createRequire } from "module";
169034
- import { dirname as dirname23, join as join54 } from "path";
169231
+ import { dirname as dirname23, join as join56 } from "path";
169035
169232
  var linkSdkPackages = async (buildDir, onWarn) => {
169036
- const filesDir = join54(buildDir, "files");
169233
+ const filesDir = join56(buildDir, "files");
169037
169234
  const packages = new Set;
169038
169235
  for (const file2 of await readdir10(filesDir)) {
169039
169236
  if (!file2.endsWith(".mjs")) {
169040
169237
  continue;
169041
169238
  }
169042
- const code = await readFile23(join54(filesDir, file2), "utf8");
169239
+ const code = await readFile23(join56(filesDir, file2), "utf8");
169043
169240
  for (const match3 of code.matchAll(/(?:from\s*|import\()\s*["'](@aws-sdk\/[a-z0-9-]+|sharp)["']/g)) {
169044
169241
  packages.add(match3[1]);
169045
169242
  }
169046
169243
  }
169047
- const projectRequire = createRequire(join54(directories.root, "noop.js"));
169048
169244
  const ownRequire = createRequire(import.meta.url);
169245
+ const isProjectDep = async (name) => {
169246
+ try {
169247
+ await stat9(join56(directories.root, "node_modules", name, "package.json"));
169248
+ return true;
169249
+ } catch (_4) {
169250
+ return false;
169251
+ }
169252
+ };
169049
169253
  const resolveFromStore = async (name) => {
169050
- const store = join54(directories.root, "node_modules", ".pnpm");
169254
+ const store = join56(directories.root, "node_modules", ".pnpm");
169051
169255
  const prefix = name.replaceAll("/", "+") + "@";
169052
169256
  try {
169053
169257
  const entries2 = (await readdir10(store)).filter((entry) => entry.startsWith(prefix));
169054
169258
  const best = entries2.sort((a4, b6) => a4.slice(prefix.length).localeCompare(b6.slice(prefix.length), undefined, { numeric: true })).at(-1);
169055
- return best ? join54(store, best, "node_modules", name) : undefined;
169259
+ return best ? join56(store, best, "node_modules", name) : undefined;
169056
169260
  } catch (_4) {
169057
169261
  return;
169058
169262
  }
169059
169263
  };
169060
169264
  for (const name of packages) {
169061
- const target2 = join54(buildDir, "node_modules", name);
169265
+ const target2 = join56(buildDir, "node_modules", name);
169062
169266
  try {
169063
- try {
169064
- projectRequire.resolve(`${name}/package.json`);
169267
+ if (await isProjectDep(name)) {
169065
169268
  await rm11(target2, { recursive: true, force: true });
169066
169269
  debug(`Sdk link ${name}: project resolves`);
169067
169270
  continue;
169068
- } catch (_4) {}
169271
+ }
169069
169272
  let source = await resolveFromStore(name);
169070
169273
  if (!source) {
169071
169274
  try {
@@ -169075,10 +169278,10 @@ var linkSdkPackages = async (buildDir, onWarn) => {
169075
169278
  continue;
169076
169279
  }
169077
169280
  }
169078
- await mkdir9(dirname23(target2), { recursive: true });
169281
+ await mkdir10(dirname23(target2), { recursive: true });
169079
169282
  await rm11(target2, { recursive: true, force: true });
169080
169283
  await symlink(source, target2, "dir");
169081
- await stat9(join54(target2, "package.json"));
169284
+ await stat9(join56(target2, "package.json"));
169082
169285
  debug(`Sdk link ${name}: ${source}`);
169083
169286
  } catch (error3) {
169084
169287
  onWarn?.(`Linking the "${name}" sdk package failed: ${error3 instanceof Error ? error3.message : String(error3)}`);
@@ -169102,7 +169305,7 @@ var startDev = async (props) => {
169102
169305
  dev: true
169103
169306
  });
169104
169307
  ready2();
169105
- await mkdir10(join55(directories.output, "local"), { recursive: true });
169308
+ await mkdir11(join57(directories.output, "local"), { recursive: true });
169106
169309
  const routerPorts = {};
169107
169310
  Object.keys(appConfig.router ?? {}).forEach((id, index) => {
169108
169311
  routerPorts[id] = props.port + 1 + index;
@@ -169157,7 +169360,7 @@ var startDev = async (props) => {
169157
169360
  for (const [id, port] of Object.entries(routerPorts)) {
169158
169361
  env5[`ROUTER_${constantCase(id)}_ENDPOINT`] = `localhost:${port}`;
169159
169362
  }
169160
- await writeFile14(join55(directories.output, "local", "env.json"), JSON.stringify(env5, null, "\t") + `
169363
+ await writeFile15(join57(directories.output, "local", "env.json"), JSON.stringify(env5, null, "\t") + `
169161
169364
  `);
169162
169365
  return { env: env5, lambda: lambda2 };
169163
169366
  });
@@ -169172,7 +169375,7 @@ var startDev = async (props) => {
169172
169375
  }
169173
169376
  debug(`Build ${builder.type}:${builder.name}`, meta?.cached ? "cached" : String(meta?.buildTime));
169174
169377
  }
169175
- await writeFile14(getBuildPath("bundle", bundleName, "files/awsless-env.mjs"), `export default {}
169378
+ await writeFile15(getBuildPath("bundle", bundleName, "files/awsless-env.mjs"), `export default {}
169176
169379
  `);
169177
169380
  await linkSdkPackages(buildDir, log);
169178
169381
  return changed;
@@ -169299,8 +169502,8 @@ var startDev = async (props) => {
169299
169502
  resources: dev.resources,
169300
169503
  routes: dev.routes,
169301
169504
  env: env4,
169302
- storeRoot: join55(directories.output, "local", "store"),
169303
- configFile: join55(directories.output, "local", "config.json"),
169505
+ storeRoot: join57(directories.output, "local", "store"),
169506
+ configFile: join57(directories.output, "local", "config.json"),
169304
169507
  getEmails: () => props.pool.peek("shim:ses-email")?.server.list() ?? [],
169305
169508
  configPulled: Object.keys(props.pool.peek("config:pull") ?? {}),
169306
169509
  auth: createAuthAdmin({
@@ -169342,7 +169545,7 @@ var startDev = async (props) => {
169342
169545
  routerPorts,
169343
169546
  async stop() {
169344
169547
  stopping = true;
169345
- await rm12(join55(directories.output, "local", "env.json"), { force: true });
169548
+ await rm12(join57(directories.output, "local", "env.json"), { force: true });
169346
169549
  clearTimeout(rebuildTimer);
169347
169550
  await watcher.close();
169348
169551
  await restartWatcher?.close();
@@ -169407,8 +169610,8 @@ var createServerPool = () => {
169407
169610
  };
169408
169611
 
169409
169612
  // src/type-gen/generate.ts
169410
- import { mkdir as mkdir11, writeFile as writeFile15 } from "fs/promises";
169411
- import { dirname as dirname24, join as join56, relative as relative12 } from "path";
169613
+ import { mkdir as mkdir12, writeFile as writeFile16 } from "fs/promises";
169614
+ import { dirname as dirname24, join as join58, relative as relative12 } from "path";
169412
169615
  var generateTypes = async (props) => {
169413
169616
  const files = [];
169414
169617
  await Promise.all(features.map((feature) => {
@@ -169416,13 +169619,13 @@ var generateTypes = async (props) => {
169416
169619
  ...props,
169417
169620
  async write(file2, data, include = false) {
169418
169621
  const code = data?.toString("utf8");
169419
- const path6 = join56(directories.types, file2);
169622
+ const path6 = join58(directories.types, file2);
169420
169623
  if (code) {
169421
169624
  if (include) {
169422
169625
  files.push(relative12(directories.root, path6));
169423
169626
  }
169424
- await mkdir11(dirname24(path6), { recursive: true });
169425
- await writeFile15(path6, code);
169627
+ await mkdir12(dirname24(path6), { recursive: true });
169628
+ await writeFile16(path6, code);
169426
169629
  }
169427
169630
  }
169428
169631
  });
@@ -169430,7 +169633,7 @@ var generateTypes = async (props) => {
169430
169633
  if (files.length) {
169431
169634
  const code = files.map((file2) => `/// <reference path='${file2}' />`).join(`
169432
169635
  `);
169433
- await writeFile15(join56(directories.root, `awsless.d.ts`), code);
169636
+ await writeFile16(join58(directories.root, `awsless.d.ts`), code);
169434
169637
  }
169435
169638
  };
169436
169639
 
@@ -176706,7 +176909,7 @@ ${job.error.stack.split(`
176706
176909
  stream2.shift();
176707
176910
  } else if (stream2.length > 0) {
176708
176911
  this._BOMseen = true;
176709
- } else {}
176912
+ }
176710
176913
  }
176711
176914
  return codePointsToString(stream2);
176712
176915
  }
@@ -185082,101 +185285,6 @@ var state = (program3) => {
185082
185285
  };
185083
185286
 
185084
185287
  // src/cli/command/test.ts
185085
- import { mkdir as mkdir12, writeFile as writeFile16 } from "fs/promises";
185086
- import { join as join58 } from "path";
185087
-
185088
- // src/test/manifest.ts
185089
- import { isAbsolute as isAbsolute7, join as join57 } from "path";
185090
- var absolute = (file2) => {
185091
- return isAbsolute7(file2) ? file2 : join57(directories.root, file2);
185092
- };
185093
- var createTestManifest = (appConfig, stackConfigs) => {
185094
- const manifest = {
185095
- app: appConfig.name,
185096
- region: appConfig.region,
185097
- configs: appConfig.test.configs,
185098
- tables: [],
185099
- tableKeys: [],
185100
- streams: [],
185101
- searches: [],
185102
- functions: [],
185103
- tasks: [],
185104
- queues: [],
185105
- topics: appConfig.topics ?? [],
185106
- pubsub: Object.keys(appConfig.pubsub ?? {}),
185107
- caches: [],
185108
- alerts: Object.keys(appConfig.alerts ?? {}),
185109
- jobs: [],
185110
- instances: []
185111
- };
185112
- for (const stack of stackConfigs) {
185113
- for (const [id, props] of Object.entries(stack.tables ?? {})) {
185114
- const name = formatLocalResourceName({
185115
- appName: appConfig.name,
185116
- stackName: stack.name,
185117
- resourceType: "table",
185118
- resourceName: id
185119
- });
185120
- manifest.tables.push(createTableInput(name, props));
185121
- manifest.tableKeys.push({ stack: stack.name, id, keys: formatTableKeys(props) });
185122
- if (props.stream) {
185123
- manifest.streams.push({
185124
- stack: stack.name,
185125
- id,
185126
- file: absolute(props.stream.consumer.code.file),
185127
- hash: props.hash,
185128
- sort: props.sort
185129
- });
185130
- }
185131
- }
185132
- for (const [id, props] of Object.entries(stack.searchs ?? {})) {
185133
- manifest.searches.push({
185134
- stack: stack.name,
185135
- id,
185136
- mappings: resolveSearchMappings(props),
185137
- settings: props.settings
185138
- });
185139
- }
185140
- for (const [id, props] of Object.entries(stack.functions ?? {})) {
185141
- manifest.functions.push({ stack: stack.name, id, file: absolute(props.code.file) });
185142
- }
185143
- for (const [id, props] of Object.entries(stack.tasks ?? {})) {
185144
- manifest.tasks.push({ stack: stack.name, id, file: absolute(props.consumer.code.file) });
185145
- }
185146
- for (const [id, props] of Object.entries(stack.queues ?? {})) {
185147
- manifest.queues.push({
185148
- stack: stack.name,
185149
- id,
185150
- file: props.consumer ? absolute(props.consumer.code.file) : undefined
185151
- });
185152
- }
185153
- for (const id of Object.keys(stack.caches ?? {})) {
185154
- manifest.caches.push({ stack: stack.name, id });
185155
- }
185156
- for (const id of Object.keys(stack.jobs ?? {})) {
185157
- manifest.jobs.push({ stack: stack.name, id });
185158
- }
185159
- for (const id of Object.keys(stack.instances ?? {})) {
185160
- manifest.instances.push({ stack: stack.name, id });
185161
- }
185162
- }
185163
- return manifest;
185164
- };
185165
-
185166
- // src/cli/command/test.ts
185167
- var waitForSearch2 = async (port, timeoutMs) => {
185168
- const deadline = Date.now() + timeoutMs;
185169
- while (Date.now() < deadline) {
185170
- try {
185171
- const res = await fetch(`http://localhost:${port}`);
185172
- if (res.ok) {
185173
- return;
185174
- }
185175
- } catch (_4) {}
185176
- await new Promise((resolve5) => setTimeout(resolve5, 500));
185177
- }
185178
- throw new Error("The local OpenSearch server never became ready.");
185179
- };
185180
185288
  var test2 = (program3) => {
185181
185289
  program3.command("test").argument("[stacks...]", "Optionally filter stacks to test").option("-f --filters <string...>", "Optionally filter test files").description("Test your app").action(async (stacks, options) => {
185182
185290
  await layout(`test ${stacks ?? ""}`, async (props) => {
@@ -185185,36 +185293,8 @@ var test2 = (program3) => {
185185
185293
  if (tests.length === 0) {
185186
185294
  return "No tests found.";
185187
185295
  }
185188
- const manifest = createTestManifest(props.appConfig, props.stackConfigs);
185189
- const manifestFile = join58(directories.output, "test", "manifest.json");
185190
- let redis;
185191
- let killSearch;
185192
- manifest.servers = {};
185193
- let passed = false;
185194
- try {
185195
- if (manifest.searches.length > 0) {
185196
- const { download: download2, launch: launch2, VERSION_3_5_0_MIN: VERSION_3_5_0_MIN2 } = await Promise.resolve().then(() => (init_dist2(), exports_dist));
185197
- const port = await findFreePort();
185198
- const path6 = await download2(VERSION_3_5_0_MIN2);
185199
- killSearch = await launch2({
185200
- path: path6,
185201
- port,
185202
- host: "localhost",
185203
- version: VERSION_3_5_0_MIN2,
185204
- debug: false
185205
- });
185206
- await waitForSearch2(port, 60000);
185207
- manifest.servers.search = { domain: `localhost:${port}` };
185208
- }
185209
- if (manifest.caches.length > 0) {
185210
- redis = new RedisServer;
185211
- await redis.start(undefined, undefined, ["--databases", "256"]);
185212
- await redis.ping();
185213
- manifest.servers.redis = { host: "127.0.0.1", port: await redis.getPort() };
185214
- }
185215
- await mkdir12(join58(directories.output, "test"), { recursive: true });
185216
- await writeFile16(manifestFile, JSON.stringify(manifest));
185217
- passed = await runTests(tests, stacks, options?.filters, {
185296
+ const passed = await withTestEnvironment(props.appConfig, props.stackConfigs, ({ manifest, manifestFile }) => {
185297
+ return runTests(tests, stacks, options?.filters, {
185218
185298
  showLogs: true,
185219
185299
  manifest,
185220
185300
  env: {
@@ -185225,10 +185305,7 @@ var test2 = (program3) => {
185225
185305
  AWSLESS_TEST_MANIFEST: manifestFile
185226
185306
  }
185227
185307
  });
185228
- } finally {
185229
- await redis?.kill();
185230
- await killSearch?.();
185231
- }
185308
+ });
185232
185309
  if (!passed) {
185233
185310
  throw new ExpectedError("Tests failed.");
185234
185311
  }