@saws/core 2.0.0-beta.2 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/Host.d.ts +62 -0
  3. package/dist/Host.js +202 -0
  4. package/dist/ServiceDefinition.d.ts +46 -0
  5. package/dist/ServiceDefinition.js +119 -0
  6. package/dist/find-service-definition.d.ts +1 -8
  7. package/dist/find-service-definition.js +0 -6
  8. package/dist/get-saws-config.d.ts +7 -3
  9. package/dist/get-saws-config.js +6 -56
  10. package/dist/host-readiness.d.ts +12 -0
  11. package/dist/host-readiness.js +230 -0
  12. package/dist/index.d.ts +4 -5
  13. package/dist/index.js +4 -4
  14. package/dist/secrets-manager.d.ts +63 -0
  15. package/dist/secrets-manager.js +323 -0
  16. package/dist/tsconfig.tsbuildinfo +1 -0
  17. package/dist/utils/constants.d.ts +4 -0
  18. package/dist/utils/constants.js +5 -0
  19. package/dist/utils/create-directories.d.ts +2 -0
  20. package/dist/utils/create-directories.js +20 -0
  21. package/dist/utils/create-file-if-not-exists.d.ts +1 -0
  22. package/dist/utils/create-file-if-not-exists.js +12 -0
  23. package/dist/utils/create-file-if-note-exists.d.ts +1 -0
  24. package/dist/utils/create-file-if-note-exists.js +11 -0
  25. package/dist/utils/dependency-management.d.ts +16 -0
  26. package/dist/utils/dependency-management.js +111 -0
  27. package/dist/utils/file-exists.d.ts +1 -0
  28. package/dist/utils/file-exists.js +12 -0
  29. package/dist/utils/generate-token.d.ts +1 -0
  30. package/dist/utils/generate-token.js +13 -0
  31. package/dist/utils/get-project-name.d.ts +1 -0
  32. package/dist/utils/get-project-name.js +5 -0
  33. package/dist/utils/get-service-path.js +1 -0
  34. package/dist/utils/list-files.d.ts +1 -0
  35. package/dist/utils/list-files.js +17 -0
  36. package/dist/utils/on-exit.d.ts +1 -0
  37. package/dist/utils/on-exit.js +14 -0
  38. package/dist/utils/parameterized-env-var-name.d.ts +1 -0
  39. package/dist/utils/parameterized-env-var-name.js +1 -0
  40. package/dist/utils/recursively-read-dir.d.ts +1 -0
  41. package/dist/utils/recursively-read-dir.js +15 -0
  42. package/dist/utils/retry-until.d.ts +1 -0
  43. package/dist/utils/retry-until.js +9 -0
  44. package/dist/utils/run-local.d.ts +8 -0
  45. package/dist/utils/run-local.js +86 -0
  46. package/dist/utils/shell-quote.d.ts +1 -0
  47. package/dist/utils/shell-quote.js +3 -0
  48. package/dist/utils/stage-outputs.d.ts +3 -0
  49. package/dist/utils/stage-outputs.js +24 -0
  50. package/dist/utils/uppercase.d.ts +1 -0
  51. package/dist/utils/uppercase.js +4 -0
  52. package/package.json +32 -24
  53. package/dist/context.d.ts +0 -41
  54. package/dist/context.d.ts.map +0 -1
  55. package/dist/context.js +0 -38
  56. package/dist/context.test.d.ts +0 -2
  57. package/dist/context.test.d.ts.map +0 -1
  58. package/dist/context.test.js +0 -13
  59. package/dist/find-service-definition.d.ts.map +0 -1
  60. package/dist/find-service-definition.test.d.ts +0 -2
  61. package/dist/find-service-definition.test.d.ts.map +0 -1
  62. package/dist/find-service-definition.test.js +0 -44
  63. package/dist/get-saws-config.d.ts.map +0 -1
  64. package/dist/index.d.ts.map +0 -1
  65. package/dist/service-commands.d.ts +0 -10
  66. package/dist/service-commands.d.ts.map +0 -1
  67. package/dist/service-commands.js +0 -25
  68. package/dist/service-commands.test.d.ts +0 -2
  69. package/dist/service-commands.test.d.ts.map +0 -1
  70. package/dist/service-commands.test.js +0 -26
  71. package/dist/service-definition.d.ts +0 -36
  72. package/dist/service-definition.d.ts.map +0 -1
  73. package/dist/service-definition.js +0 -104
  74. package/dist/service-types.d.ts +0 -9
  75. package/dist/service-types.d.ts.map +0 -1
  76. /package/dist/{service-types.js → utils/get-service-path.d.ts} +0 -0
@@ -0,0 +1,323 @@
1
+ import { appendFile, chmod, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
2
+ import { createCipheriv, createDecipheriv, randomBytes, scrypt } from "node:crypto";
3
+ import path from "node:path";
4
+ const PASSCODE_ENV_NAME = "SAWS_SECRETS_PASSCODE";
5
+ const GLOBAL_SCOPE = "global";
6
+ const ENCRYPTION_VERSION = 1;
7
+ const KEY_LENGTH = 32;
8
+ const SCRYPT_COST = 16_384;
9
+ const SCRYPT_BLOCK_SIZE = 8;
10
+ const SCRYPT_PARALLELIZATION = 1;
11
+ export class ParameterNotFoundError extends Error {
12
+ constructor(name) {
13
+ super(`Secret not found: ${name}`);
14
+ this.name = "ParameterNotFound";
15
+ }
16
+ }
17
+ export class SecretsDecryptionError extends Error {
18
+ constructor() {
19
+ super(`Unable to decrypt secrets. Check ${PASSCODE_ENV_NAME} in the project-root .env file.`);
20
+ this.name = "SecretsDecryptionError";
21
+ }
22
+ }
23
+ /**
24
+ * A lazy reference to either a stage-aware or global secret.
25
+ *
26
+ * References can safely be created while saws.ts is loaded, before the CLI
27
+ * knows which runtime stage will consume a stage-aware secret.
28
+ */
29
+ export class SecretReference {
30
+ name;
31
+ scope;
32
+ manager;
33
+ constructor(manager, name, scope) {
34
+ if (name.trim().length === 0) {
35
+ throw new Error("Secret reference name cannot be empty");
36
+ }
37
+ this.manager = manager;
38
+ this.name = name;
39
+ this.scope = scope;
40
+ }
41
+ resolve(context) {
42
+ if (this.scope === "stage" && context == null) {
43
+ return this.manager.getFromScope(this.name, this.scope);
44
+ }
45
+ return this.manager.getFromScope(this.name, this.scope, context?.stage);
46
+ }
47
+ /** @internal */
48
+ isManagedBy(manager) {
49
+ return this.manager === manager;
50
+ }
51
+ }
52
+ export class GlobalSecrets {
53
+ manager;
54
+ constructor(manager) {
55
+ this.manager = manager;
56
+ }
57
+ reference(name) {
58
+ return new SecretReference(this.manager, name, GLOBAL_SCOPE);
59
+ }
60
+ async get(name) {
61
+ return this.manager.getFromScope(name, GLOBAL_SCOPE);
62
+ }
63
+ async set(name, value) {
64
+ await this.manager.setInScope(name, value, GLOBAL_SCOPE);
65
+ }
66
+ get secretsFilePath() {
67
+ return this.manager.getSecretsFilePath(GLOBAL_SCOPE);
68
+ }
69
+ }
70
+ export class SecretsManager {
71
+ global;
72
+ rootDir;
73
+ configuredStage;
74
+ configuredPasscode;
75
+ constructor(config = {}) {
76
+ this.configuredStage = config.stage == null ? undefined : requireValidStage(config.stage);
77
+ this.rootDir = config.rootDir ?? process.cwd();
78
+ this.configuredPasscode = config.passcode;
79
+ this.global = new GlobalSecrets(this);
80
+ }
81
+ get stage() {
82
+ return this.resolveStage();
83
+ }
84
+ reference(name) {
85
+ return new SecretReference(this, name, "stage");
86
+ }
87
+ async get(name) {
88
+ return this.getFromScope(name, "stage");
89
+ }
90
+ async set(name, value) {
91
+ await this.setInScope(name, value, "stage");
92
+ }
93
+ get secretsFilePath() {
94
+ return this.getSecretsFilePath("stage");
95
+ }
96
+ /** @internal */
97
+ async getFromScope(name, scope, resolutionStage) {
98
+ const secrets = await this.readSecrets(scope, resolutionStage);
99
+ const value = secrets[name];
100
+ if (value == null)
101
+ throw new ParameterNotFoundError(name);
102
+ return value;
103
+ }
104
+ /** @internal */
105
+ async setInScope(name, value, scope, resolutionStage) {
106
+ const secrets = await this.readSecrets(scope, resolutionStage);
107
+ secrets[name] = value;
108
+ await this.writeSecrets(secrets, scope, resolutionStage);
109
+ }
110
+ /** @internal */
111
+ getSecretsFilePath(scope, resolutionStage) {
112
+ const fileName = scope === GLOBAL_SCOPE ? "global.env" : `${this.resolveStage(resolutionStage)}.env`;
113
+ return path.resolve(this.rootDir, ".saws", "secrets", fileName);
114
+ }
115
+ resolveStage(resolutionStage) {
116
+ const stage = this.configuredStage ?? resolutionStage ?? process.env.STAGE;
117
+ if (stage == null || stage.length === 0) {
118
+ throw new Error("Unable to determine the secrets stage. Run the command with --stage or set STAGE.");
119
+ }
120
+ return requireValidStage(stage);
121
+ }
122
+ async readSecrets(scope, resolutionStage) {
123
+ const secretsFilePath = this.getSecretsFilePath(scope, resolutionStage);
124
+ let contents;
125
+ try {
126
+ contents = await readFile(secretsFilePath, "utf8");
127
+ }
128
+ catch (error) {
129
+ if (error.code !== "ENOENT")
130
+ throw error;
131
+ return {};
132
+ }
133
+ const encrypted = parseEncryptedFile(contents);
134
+ if (encrypted != null) {
135
+ const passcode = await this.getPasscode(false);
136
+ if (passcode == null) {
137
+ throw new Error(`${PASSCODE_ENV_NAME} is required to decrypt ${secretsFilePath}`);
138
+ }
139
+ return decryptSecrets(encrypted, passcode);
140
+ }
141
+ // Migrate files written by older SAWS versions as soon as they are used.
142
+ const secrets = parseEnvFile(contents);
143
+ await this.writeSecrets(secrets, scope, resolutionStage);
144
+ return secrets;
145
+ }
146
+ async writeSecrets(secrets, scope, resolutionStage) {
147
+ const passcode = await this.getPasscode(true);
148
+ if (passcode == null) {
149
+ throw new Error(`Unable to create ${PASSCODE_ENV_NAME}`);
150
+ }
151
+ const secretsFilePath = this.getSecretsFilePath(scope, resolutionStage);
152
+ await mkdir(path.dirname(secretsFilePath), { recursive: true });
153
+ const temporaryPath = `${secretsFilePath}.${randomBytes(8).toString("hex")}.tmp`;
154
+ try {
155
+ await writeFile(temporaryPath, JSON.stringify(await encryptSecrets(secrets, passcode), null, 2).concat("\n"), { mode: 0o600 });
156
+ await rename(temporaryPath, secretsFilePath);
157
+ await chmod(secretsFilePath, 0o600);
158
+ }
159
+ finally {
160
+ await rm(temporaryPath, { force: true });
161
+ }
162
+ }
163
+ async getPasscode(createIfMissing) {
164
+ if (this.configuredPasscode != null) {
165
+ return requireNonemptyPasscode(this.configuredPasscode);
166
+ }
167
+ if (process.env[PASSCODE_ENV_NAME] != null) {
168
+ return requireNonemptyPasscode(process.env[PASSCODE_ENV_NAME]);
169
+ }
170
+ const envFilePath = path.resolve(this.rootDir, ".env");
171
+ try {
172
+ const environment = parseEnvFile(await readFile(envFilePath, "utf8"));
173
+ if (environment[PASSCODE_ENV_NAME] != null) {
174
+ return requireNonemptyPasscode(environment[PASSCODE_ENV_NAME]);
175
+ }
176
+ }
177
+ catch (error) {
178
+ if (error.code !== "ENOENT")
179
+ throw error;
180
+ }
181
+ if (!createIfMissing)
182
+ return undefined;
183
+ const passcode = randomBytes(32).toString("base64url");
184
+ let needsLeadingNewline = false;
185
+ try {
186
+ const contents = await readFile(envFilePath, "utf8");
187
+ needsLeadingNewline = contents.length > 0 && !contents.endsWith("\n");
188
+ }
189
+ catch (error) {
190
+ if (error.code !== "ENOENT")
191
+ throw error;
192
+ }
193
+ await appendFile(envFilePath, `${needsLeadingNewline ? "\n" : ""}${PASSCODE_ENV_NAME}=${passcode}\n`, { mode: 0o600 });
194
+ await chmod(envFilePath, 0o600);
195
+ return passcode;
196
+ }
197
+ }
198
+ function requireValidStage(stage) {
199
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(stage)) {
200
+ throw new Error("Secrets stage must start with a letter or number and contain only letters, numbers, underscores, and hyphens");
201
+ }
202
+ if (stage.toLowerCase() === GLOBAL_SCOPE) {
203
+ throw new Error(`Secrets stage "${GLOBAL_SCOPE}" is reserved for global secrets`);
204
+ }
205
+ return stage;
206
+ }
207
+ function requireNonemptyPasscode(passcode) {
208
+ if (passcode.length === 0) {
209
+ throw new Error(`${PASSCODE_ENV_NAME} cannot be empty`);
210
+ }
211
+ return passcode;
212
+ }
213
+ function parseEncryptedFile(contents) {
214
+ let value;
215
+ try {
216
+ value = JSON.parse(contents);
217
+ }
218
+ catch {
219
+ return undefined;
220
+ }
221
+ if (value == null || typeof value !== "object" || !("version" in value)) {
222
+ return undefined;
223
+ }
224
+ const encrypted = value;
225
+ if (encrypted.version !== ENCRYPTION_VERSION ||
226
+ encrypted.kdf?.name !== "scrypt" ||
227
+ typeof encrypted.kdf.salt !== "string" ||
228
+ encrypted.kdf.cost !== SCRYPT_COST ||
229
+ encrypted.kdf.blockSize !== SCRYPT_BLOCK_SIZE ||
230
+ encrypted.kdf.parallelization !== SCRYPT_PARALLELIZATION ||
231
+ encrypted.cipher?.name !== "aes-256-gcm" ||
232
+ typeof encrypted.cipher.iv !== "string" ||
233
+ typeof encrypted.cipher.authTag !== "string" ||
234
+ typeof encrypted.ciphertext !== "string") {
235
+ throw new Error("Unsupported or invalid encrypted secrets file");
236
+ }
237
+ return encrypted;
238
+ }
239
+ async function encryptSecrets(secrets, passcode) {
240
+ const salt = randomBytes(16);
241
+ const iv = randomBytes(12);
242
+ const key = await deriveKey(passcode, salt);
243
+ const cipher = createCipheriv("aes-256-gcm", key, iv);
244
+ const ciphertext = Buffer.concat([
245
+ cipher.update(stringifyEnvFile(secrets), "utf8"),
246
+ cipher.final(),
247
+ ]);
248
+ return {
249
+ version: ENCRYPTION_VERSION,
250
+ kdf: {
251
+ name: "scrypt",
252
+ salt: salt.toString("base64"),
253
+ cost: SCRYPT_COST,
254
+ blockSize: SCRYPT_BLOCK_SIZE,
255
+ parallelization: SCRYPT_PARALLELIZATION,
256
+ },
257
+ cipher: {
258
+ name: "aes-256-gcm",
259
+ iv: iv.toString("base64"),
260
+ authTag: cipher.getAuthTag().toString("base64"),
261
+ },
262
+ ciphertext: ciphertext.toString("base64"),
263
+ };
264
+ }
265
+ async function decryptSecrets(encrypted, passcode) {
266
+ try {
267
+ const salt = Buffer.from(encrypted.kdf.salt, "base64");
268
+ const key = await deriveKey(passcode, salt);
269
+ const decipher = createDecipheriv("aes-256-gcm", key, Buffer.from(encrypted.cipher.iv, "base64"));
270
+ decipher.setAuthTag(Buffer.from(encrypted.cipher.authTag, "base64"));
271
+ const plaintext = Buffer.concat([
272
+ decipher.update(Buffer.from(encrypted.ciphertext, "base64")),
273
+ decipher.final(),
274
+ ]).toString("utf8");
275
+ return parseEnvFile(plaintext);
276
+ }
277
+ catch {
278
+ throw new SecretsDecryptionError();
279
+ }
280
+ }
281
+ function deriveKey(passcode, salt) {
282
+ return new Promise((resolve, reject) => {
283
+ scrypt(passcode, salt, KEY_LENGTH, {
284
+ N: SCRYPT_COST,
285
+ r: SCRYPT_BLOCK_SIZE,
286
+ p: SCRYPT_PARALLELIZATION,
287
+ }, (error, key) => {
288
+ if (error != null)
289
+ reject(error);
290
+ else
291
+ resolve(key);
292
+ });
293
+ });
294
+ }
295
+ function parseEnvFile(contents) {
296
+ const values = {};
297
+ for (const line of contents.split(/\r?\n/)) {
298
+ const trimmed = line.trim();
299
+ if (trimmed.length === 0 || trimmed.startsWith("#"))
300
+ continue;
301
+ const separatorIndex = trimmed.indexOf("=");
302
+ if (separatorIndex === -1)
303
+ continue;
304
+ const key = trimmed.slice(0, separatorIndex).trim();
305
+ const rawValue = trimmed.slice(separatorIndex + 1).trim();
306
+ values[key] = parseEnvValue(rawValue);
307
+ }
308
+ return values;
309
+ }
310
+ function parseEnvValue(value) {
311
+ if ((value.startsWith('"') && value.endsWith('"')) ||
312
+ (value.startsWith("'") && value.endsWith("'"))) {
313
+ return value.slice(1, -1).replaceAll("\\n", "\n").replaceAll('\\"', '"');
314
+ }
315
+ return value;
316
+ }
317
+ function stringifyEnvFile(values) {
318
+ return Object.entries(values)
319
+ .sort(([left], [right]) => left.localeCompare(right))
320
+ .map(([key, value]) => `${key}=${JSON.stringify(value)}`)
321
+ .join("\n")
322
+ .concat("\n");
323
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../utils/dist/src/stage-outputs.d.ts","../../utils/dist/src/aws-permission.d.ts","../../utils/dist/src/parameterized-env-var-name.d.ts","../src/servicedefinition.ts","../src/get-saws-config.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.17.27/node_modules/@types/node/index.d.ts"],"fileIdsList":[[70,109,112],[70,111,112],[112],[70,112,117,146],[70,112,113,118,124,125,132,143,154],[70,112,113,114,124,132],[70,112],[65,66,67,70,112],[70,112,115,155],[70,112,116,117,125,133],[70,112,117,143,151],[70,112,118,120,124,132],[70,111,112,119],[70,112,120,121],[70,112,124],[70,112,122,124],[70,111,112,124],[70,112,124,125,126,143,154],[70,112,124,125,126,139,143,146],[70,107,112,159],[70,112,120,124,127,132,143,154],[70,112,124,125,127,128,132,143,151,154],[70,112,127,129,143,151,154],[68,69,70,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160],[70,112,124,130],[70,112,131,154,159],[70,112,120,124,132,143],[70,112,133],[70,112,134],[70,111,112,135],[70,109,110,111,112,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160],[70,112,137],[70,112,138],[70,112,124,139,140],[70,112,139,141,155,157],[70,112,124,143,144,146],[70,112,145,146],[70,112,143,144],[70,112,146],[70,112,147],[70,109,112,143],[70,112,124,149,150],[70,112,149,150],[70,112,117,132,143,151],[70,112,152],[70,112,132,153],[70,112,127,138,154],[70,112,117,155],[70,112,143,156],[70,112,131,157],[70,112,158],[70,112,117,124,126,135,143,154,157,159],[70,112,143,160],[70,79,83,112,154],[70,79,112,143,154],[70,74,112],[70,76,79,112,151,154],[70,112,132,151],[70,112,161],[70,74,112,161],[70,76,79,112,132,154],[70,71,72,75,78,112,124,143,154],[70,79,86,112],[70,71,77,112],[70,79,100,101,112],[70,75,79,112,146,154,161],[70,100,112,161],[70,73,74,112,161],[70,79,112],[70,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,112],[70,79,94,112],[70,79,86,87,112],[70,77,79,87,88,112],[70,78,112],[70,71,74,79,112],[70,79,83,87,88,112],[70,83,112],[70,77,79,82,112,154],[70,71,76,79,86,112],[70,112,143],[70,74,79,100,112,159,161],[62,70,112,134],[62,63,70,112],[59,60,61,70,112,143]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"b507173a7718609bb52011f33e6fc61b0f3de62ec38c935b38dcfbb68223dea9","impliedFormat":1},{"version":"02a81c65d86a2ad4528096fa5bfdb06b702b52fb58513e09a4e0fb9cd0de3747","impliedFormat":1},{"version":"49f2c62555d3f5877b6a995aea392f83f4badffc143e93de43d7827d5b4cc05f","impliedFormat":1},{"version":"8aab055fe13e06f3167e28cbebc61c43aefe2670a851bd957b63f8871ed1ec65","signature":"12109b53bf659854e8248feb3e5134ebf8f96a8f5a5dffebb7600a89d05324d2","impliedFormat":1},{"version":"12aa70b30a76c0bce7a30a1e4fa7241de0165bb5c2d1dc579b66484243afbdd2","signature":"243828236d4436f8faf41005da557f6ace5521c90282c0f78f23493edea327b9","impliedFormat":1},{"version":"baeb0e9da898fdb3cde061a4dbcbe9b5d90737220e646101111617a22aab6d9a","signature":"c85b423b254ef24cee6f24b136a4635d6a693b0d397827d8e4080c9fe491edd9","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"809de4a91e5f9ea79963802ef3ea0144533c6f94ca8eee10efa70f5f42d6eecc","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"27d8987fd22d92efe6560cf0ce11767bf089903ffe26047727debfd1f3bf438b","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1}],"root":[[62,64]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"esModuleInterop":true,"inlineSourceMap":true,"jsx":2,"module":100,"outDir":"./","rootDir":"..","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[109,1],[110,1],[111,2],[70,3],[112,4],[113,5],[114,6],[65,7],[68,8],[66,7],[67,7],[115,9],[116,10],[117,11],[118,12],[119,13],[120,14],[121,14],[123,15],[122,16],[124,17],[125,18],[126,19],[108,20],[69,7],[127,21],[128,22],[129,23],[161,24],[130,25],[131,26],[132,27],[133,28],[134,29],[135,30],[136,31],[137,32],[138,33],[139,34],[140,34],[141,35],[142,7],[143,36],[145,37],[144,38],[146,39],[147,40],[148,41],[149,42],[150,43],[151,44],[152,45],[153,46],[154,47],[155,48],[156,49],[157,50],[158,51],[159,52],[160,53],[57,7],[58,7],[10,7],[12,7],[11,7],[2,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[3,7],[21,7],[22,7],[4,7],[23,7],[27,7],[24,7],[25,7],[26,7],[28,7],[29,7],[30,7],[5,7],[31,7],[32,7],[33,7],[34,7],[6,7],[38,7],[35,7],[36,7],[37,7],[39,7],[7,7],[40,7],[45,7],[46,7],[41,7],[42,7],[43,7],[44,7],[8,7],[50,7],[47,7],[48,7],[49,7],[51,7],[9,7],[52,7],[53,7],[54,7],[56,7],[55,7],[1,7],[86,54],[96,55],[85,54],[106,56],[77,57],[76,58],[105,59],[99,60],[104,61],[79,62],[93,63],[78,64],[102,65],[74,66],[73,59],[103,67],[75,68],[80,69],[81,7],[84,69],[71,7],[107,70],[97,71],[88,72],[89,73],[91,74],[87,75],[90,76],[100,59],[82,77],[83,78],[92,79],[72,80],[95,71],[94,69],[98,7],[101,81],[63,82],[64,83],[62,84],[60,7],[61,7],[59,7]],"latestChangedDtsFile":"./src/index.d.ts","version":"5.8.2"}
@@ -0,0 +1,4 @@
1
+ export declare const SAWS_DIR: string;
2
+ export declare const BUILD_DIR: string;
3
+ export declare const DB_PASSWORD_PARAMETER_NAME = "db-password";
4
+ export declare const DEV_USER_PASSWORD_PARAMETER_NAME = "dev-user-password";
@@ -0,0 +1,5 @@
1
+ import * as path from "node:path";
2
+ export const SAWS_DIR = path.resolve("./.saws");
3
+ export const BUILD_DIR = path.resolve(SAWS_DIR, "build");
4
+ export const DB_PASSWORD_PARAMETER_NAME = "db-password";
5
+ export const DEV_USER_PASSWORD_PARAMETER_NAME = "dev-user-password";
@@ -0,0 +1,2 @@
1
+ export declare const createCacheDir: () => Promise<void>;
2
+ export declare const createSawsDir: () => Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { promises as fs, constants } from "node:fs";
2
+ import { BUILD_DIR, SAWS_DIR } from "./constants.js";
3
+ export const createCacheDir = async () => {
4
+ // check if the cache dir exists already or not
5
+ // if not create it
6
+ try {
7
+ await fs.access(BUILD_DIR, constants.F_OK);
8
+ }
9
+ catch (err) {
10
+ await fs.mkdir(BUILD_DIR, { recursive: true });
11
+ }
12
+ };
13
+ export const createSawsDir = async () => {
14
+ try {
15
+ await fs.access(SAWS_DIR, constants.F_OK);
16
+ }
17
+ catch (err) {
18
+ await fs.mkdir(SAWS_DIR, { recursive: true });
19
+ }
20
+ };
@@ -0,0 +1 @@
1
+ export declare function createFileIfNotExists(path: string, contents: string): Promise<false | undefined>;
@@ -0,0 +1,12 @@
1
+ import * as fs from "node:fs/promises";
2
+ export async function createFileIfNotExists(path, contents) {
3
+ try {
4
+ await fs.writeFile(path, contents, { flag: "wx" });
5
+ }
6
+ catch (err) {
7
+ if (typeof err === "object" && err !== null && "code" in err && err.code === "EEXIST") {
8
+ return false;
9
+ }
10
+ throw err;
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+ export declare function createFileIfNotExists(path: string, contents: string): Promise<false | undefined>;
@@ -0,0 +1,11 @@
1
+ import * as fs from "node:fs/promises";
2
+ export async function createFileIfNotExists(path, contents) {
3
+ try {
4
+ await fs.writeFile(path, contents, { flag: "wx" });
5
+ }
6
+ catch (err) {
7
+ if (err === "EEXIST")
8
+ return false;
9
+ throw err;
10
+ }
11
+ }
@@ -0,0 +1,16 @@
1
+ import type { RuntimeLogSink } from "../ServiceDefinition.js";
2
+ export interface InstallDependenciesOptions {
3
+ /**
4
+ * The package or workspace root. Defaults to the current working directory.
5
+ */
6
+ cwd?: string;
7
+ /**
8
+ * A workspace directory, relative to `cwd`.
9
+ */
10
+ workspace?: string;
11
+ development?: boolean;
12
+ logSink?: RuntimeLogSink;
13
+ serviceName?: string;
14
+ }
15
+ export declare function installDependencies(dependencies: string[], options?: InstallDependenciesOptions): Promise<void>;
16
+ export declare function hasDependency(dependency: string, cwd?: string): Promise<boolean>;
@@ -0,0 +1,111 @@
1
+ import { spawn } from "node:child_process";
2
+ import { readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { fileExists } from "./file-exists.js";
5
+ export async function installDependencies(dependencies, options = {}) {
6
+ if (dependencies.length === 0)
7
+ return;
8
+ const rootDirectory = path.resolve(options.cwd ?? process.cwd());
9
+ const installDirectory = options.workspace == null ? rootDirectory : path.resolve(rootDirectory, options.workspace);
10
+ const packageManager = await detectPackageManager(installDirectory);
11
+ const args = installArguments(packageManager, dependencies, options.development ?? false);
12
+ await new Promise((resolve, reject) => {
13
+ const captureOutput = options.logSink != null;
14
+ const serviceName = options.serviceName ?? "system";
15
+ const child = spawn(packageManager, args, {
16
+ cwd: installDirectory,
17
+ env: process.env,
18
+ stdio: captureOutput ? ["ignore", "pipe", "pipe"] : "inherit",
19
+ });
20
+ child.stdout?.on("data", (chunk) => {
21
+ options.logSink?.({
22
+ serviceName,
23
+ stream: "stdout",
24
+ chunk: chunk.toString("utf8"),
25
+ timestamp: new Date(),
26
+ });
27
+ });
28
+ child.stderr?.on("data", (chunk) => {
29
+ options.logSink?.({
30
+ serviceName,
31
+ stream: "stderr",
32
+ chunk: chunk.toString("utf8"),
33
+ timestamp: new Date(),
34
+ });
35
+ });
36
+ child.once("error", (error) => {
37
+ reject(new Error(`Unable to run ${packageManager}: ${error.message}`, { cause: error }));
38
+ });
39
+ child.once("close", (code, signal) => {
40
+ if (code === 0) {
41
+ resolve();
42
+ return;
43
+ }
44
+ const reason = signal == null ? `exit code ${code ?? "unknown"}` : `signal ${signal}`;
45
+ reject(new Error(`${packageManager} failed to install dependencies with ${reason}`));
46
+ });
47
+ });
48
+ }
49
+ export async function hasDependency(dependency, cwd = process.cwd()) {
50
+ try {
51
+ const contents = await readFile(path.resolve(cwd, "package.json"), "utf8");
52
+ const packageJson = JSON.parse(contents);
53
+ return (packageJson.dependencies?.[dependency] != null ||
54
+ packageJson.devDependencies?.[dependency] != null);
55
+ }
56
+ catch (error) {
57
+ if (error.code === "ENOENT")
58
+ return false;
59
+ throw error;
60
+ }
61
+ }
62
+ async function detectPackageManager(cwd) {
63
+ for (let directory = cwd;; directory = path.dirname(directory)) {
64
+ const packageManager = await readPackageManagerField(directory);
65
+ if (packageManager != null)
66
+ return packageManager;
67
+ for (const [lockfile, manager] of LOCKFILES) {
68
+ if (await fileExists(path.join(directory, lockfile)))
69
+ return manager;
70
+ }
71
+ const parent = path.dirname(directory);
72
+ if (parent === directory)
73
+ return "npm";
74
+ }
75
+ }
76
+ async function readPackageManagerField(directory) {
77
+ try {
78
+ const contents = await readFile(path.join(directory, "package.json"), "utf8");
79
+ const packageJson = JSON.parse(contents);
80
+ if (typeof packageJson.packageManager !== "string")
81
+ return undefined;
82
+ const name = packageJson.packageManager.split("@", 1)[0];
83
+ return isPackageManager(name) ? name : undefined;
84
+ }
85
+ catch (error) {
86
+ if (error.code === "ENOENT")
87
+ return undefined;
88
+ throw error;
89
+ }
90
+ }
91
+ function installArguments(packageManager, dependencies, development) {
92
+ switch (packageManager) {
93
+ case "npm":
94
+ return ["install", development ? "--save-dev" : "--save-prod", ...dependencies];
95
+ case "pnpm":
96
+ case "yarn":
97
+ case "bun":
98
+ return ["add", ...(development ? ["--dev"] : []), ...dependencies];
99
+ }
100
+ }
101
+ function isPackageManager(value) {
102
+ return value === "npm" || value === "pnpm" || value === "yarn" || value === "bun";
103
+ }
104
+ const LOCKFILES = [
105
+ ["pnpm-lock.yaml", "pnpm"],
106
+ ["yarn.lock", "yarn"],
107
+ ["bun.lock", "bun"],
108
+ ["bun.lockb", "bun"],
109
+ ["package-lock.json", "npm"],
110
+ ["npm-shrinkwrap.json", "npm"],
111
+ ];
@@ -0,0 +1 @@
1
+ export declare function fileExists(filePath: string): Promise<boolean>;
@@ -0,0 +1,12 @@
1
+ import { access } from "node:fs/promises";
2
+ export async function fileExists(filePath) {
3
+ try {
4
+ await access(filePath);
5
+ return true;
6
+ }
7
+ catch (error) {
8
+ if (error.code === "ENOENT")
9
+ return false;
10
+ throw error;
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+ export declare const generateToken: () => Promise<string>;