@effect-app/cli 1.23.3 → 1.23.5
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/CHANGELOG.md +13 -0
- package/dist/index.js +114 -100
- package/package.json +1 -1
- package/src/index.ts +245 -163
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @effect-app/cli
|
|
2
2
|
|
|
3
|
+
## 1.23.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- de35a0f: add monitors for packagejson
|
|
8
|
+
- 8e1543e: add wrapping of child commands
|
|
9
|
+
|
|
10
|
+
## 1.23.4
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- ca792d7: add some debug prints
|
|
15
|
+
|
|
3
16
|
## 1.23.3
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Args, Command, Options, Prompt } from "@effect/cli";
|
|
5
5
|
import { Command as NodeCommand, FileSystem, Path } from "@effect/platform";
|
|
6
6
|
import { NodeContext, NodeRuntime } from "@effect/platform-node";
|
|
7
|
-
import { Effect, identity, Stream } from "effect";
|
|
7
|
+
import { Effect, identity, Option, Stream } from "effect";
|
|
8
8
|
import { ExtractExportMappingsService } from "./extract.js";
|
|
9
9
|
import { packages } from "./shared.js";
|
|
10
10
|
Effect
|
|
@@ -12,6 +12,7 @@ Effect
|
|
|
12
12
|
const fs = yield* FileSystem.FileSystem;
|
|
13
13
|
const path = yield* Path.Path;
|
|
14
14
|
const extractExportMappings = yield* ExtractExportMappingsService;
|
|
15
|
+
yield* Effect.addFinalizer(() => Effect.logInfo(`CLI has finished executing`));
|
|
15
16
|
/**
|
|
16
17
|
* Executes a shell command using Node.js Command API with inherited stdio streams.
|
|
17
18
|
* The command is run through the system shell (/bin/sh) for proper command parsing.
|
|
@@ -85,7 +86,7 @@ Effect
|
|
|
85
86
|
* @returns An Effect that succeeds when linking is complete
|
|
86
87
|
*/
|
|
87
88
|
const linkPackages = Effect.fnUntraced(function* (effectAppLibsPath) {
|
|
88
|
-
yield* Effect.
|
|
89
|
+
yield* Effect.logInfo("Linking local effect-app packages...");
|
|
89
90
|
const packageJsonPath = "./package.json";
|
|
90
91
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath);
|
|
91
92
|
const pj = JSON.parse(packageJsonContent);
|
|
@@ -100,9 +101,9 @@ Effect
|
|
|
100
101
|
};
|
|
101
102
|
pj.resolutions = resolutions;
|
|
102
103
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2));
|
|
103
|
-
yield* Effect.
|
|
104
|
+
yield* Effect.logInfo("Updated package.json with local file resolutions");
|
|
104
105
|
yield* runNodeCommand("pnpm i");
|
|
105
|
-
yield* Effect.
|
|
106
|
+
yield* Effect.logInfo("Successfully linked local packages");
|
|
106
107
|
});
|
|
107
108
|
/**
|
|
108
109
|
* Unlinks local effect-app packages by removing file resolutions from package.json.
|
|
@@ -112,7 +113,7 @@ Effect
|
|
|
112
113
|
* @returns An Effect that succeeds when unlinking is complete
|
|
113
114
|
*/
|
|
114
115
|
const unlinkPackages = Effect.fnUntraced(function* () {
|
|
115
|
-
yield* Effect.
|
|
116
|
+
yield* Effect.logInfo("Unlinking local effect-app packages...");
|
|
116
117
|
const packageJsonPath = "./package.json";
|
|
117
118
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath);
|
|
118
119
|
const pj = JSON.parse(packageJsonContent);
|
|
@@ -124,9 +125,9 @@ Effect
|
|
|
124
125
|
}, {});
|
|
125
126
|
pj.resolutions = filteredResolutions;
|
|
126
127
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2));
|
|
127
|
-
yield* Effect.
|
|
128
|
+
yield* Effect.logInfo("Removed effect-app file resolutions from package.json");
|
|
128
129
|
yield* runNodeCommand("pnpm i");
|
|
129
|
-
yield* Effect.
|
|
130
|
+
yield* Effect.logInfo("Successfully unlinked local packages");
|
|
130
131
|
})();
|
|
131
132
|
/**
|
|
132
133
|
* Monitors controller files for changes and runs eslint on related controllers.ts/routes.ts files.
|
|
@@ -136,12 +137,9 @@ Effect
|
|
|
136
137
|
* @param debug - Whether to enable debug logging
|
|
137
138
|
* @returns An Effect that sets up controller file monitoring
|
|
138
139
|
*/
|
|
139
|
-
const monitorChildIndexes = Effect.fn("effa-cli.index-multi.monitorChildIndexes")(function* (watchPath
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`);
|
|
143
|
-
}
|
|
144
|
-
const watchStream = fileSystem.watch(watchPath, { recursive: true });
|
|
140
|
+
const monitorChildIndexes = Effect.fn("effa-cli.index-multi.monitorChildIndexes")(function* (watchPath) {
|
|
141
|
+
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`);
|
|
142
|
+
const watchStream = fs.watch(watchPath, { recursive: true });
|
|
145
143
|
yield* watchStream
|
|
146
144
|
.pipe(Stream.runForEach(Effect.fn("effa-cli.monitorChildIndexes.handleEvent")(function* (event) {
|
|
147
145
|
const pathParts = event.path.split("/");
|
|
@@ -156,14 +154,12 @@ Effect
|
|
|
156
154
|
.map((f) => [...pathParts.slice(0, pathParts.length - i), f].join("/"));
|
|
157
155
|
const existingFiles = [];
|
|
158
156
|
for (const file of candidateFiles) {
|
|
159
|
-
const exists = yield*
|
|
157
|
+
const exists = yield* fs.exists(file);
|
|
160
158
|
if (exists)
|
|
161
159
|
existingFiles.push(file);
|
|
162
160
|
}
|
|
163
161
|
if (existingFiles.length > 0) {
|
|
164
|
-
|
|
165
|
-
yield* Effect.logInfo(`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`);
|
|
166
|
-
}
|
|
162
|
+
yield* Effect.logInfo(`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`);
|
|
167
163
|
const eslintArgs = existingFiles.map((f) => `"../${f}"`).join(" ");
|
|
168
164
|
yield* runNodeCommand(`cd api && pnpm eslint --fix ${eslintArgs}`);
|
|
169
165
|
break;
|
|
@@ -171,7 +167,7 @@ Effect
|
|
|
171
167
|
i++;
|
|
172
168
|
}
|
|
173
169
|
})))
|
|
174
|
-
.pipe(Effect.forkScoped);
|
|
170
|
+
.pipe(Effect.andThen(Effect.addFinalizer(() => Effect.logInfo(`Stopped monitoring child indexes in: ${watchPath}`))), Effect.forkScoped);
|
|
175
171
|
});
|
|
176
172
|
/**
|
|
177
173
|
* Monitors a directory for changes and runs eslint on the specified index file.
|
|
@@ -182,22 +178,17 @@ Effect
|
|
|
182
178
|
* @param debug - Whether to enable debug logging
|
|
183
179
|
* @returns An Effect that sets up root index monitoring
|
|
184
180
|
*/
|
|
185
|
-
const monitorRootIndexes = Effect.fn("effa-cli.index-multi.monitorRootIndexes")(function* (watchPath, indexFile
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`);
|
|
189
|
-
}
|
|
190
|
-
const watchStream = fileSystem.watch(watchPath);
|
|
181
|
+
const monitorRootIndexes = Effect.fn("effa-cli.index-multi.monitorRootIndexes")(function* (watchPath, indexFile) {
|
|
182
|
+
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`);
|
|
183
|
+
const watchStream = fs.watch(watchPath);
|
|
191
184
|
yield* watchStream
|
|
192
185
|
.pipe(Stream.runForEach(Effect.fn("effa-cli.index-multi.monitorRootIndexes.handleEvent")(function* (event) {
|
|
193
186
|
if (event.path.endsWith(indexFile))
|
|
194
187
|
return;
|
|
195
|
-
|
|
196
|
-
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`);
|
|
197
|
-
}
|
|
188
|
+
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`);
|
|
198
189
|
yield* runNodeCommand(`pnpm eslint --fix "${indexFile}"`);
|
|
199
190
|
})))
|
|
200
|
-
.pipe(Effect.forkScoped);
|
|
191
|
+
.pipe(Effect.andThen(Effect.addFinalizer(() => Effect.logInfo(`Stopped monitoring root indexes in: ${watchPath} -> ${indexFile}`))), Effect.forkScoped);
|
|
201
192
|
});
|
|
202
193
|
/**
|
|
203
194
|
* Sets up comprehensive index monitoring for a given path.
|
|
@@ -207,22 +198,17 @@ Effect
|
|
|
207
198
|
* @param debug - Whether to enable debug logging
|
|
208
199
|
* @returns An Effect that sets up all index monitoring for the path
|
|
209
200
|
*/
|
|
210
|
-
const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(function* (watchPath
|
|
211
|
-
|
|
212
|
-
if (debug) {
|
|
213
|
-
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`);
|
|
214
|
-
}
|
|
201
|
+
const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(function* (watchPath) {
|
|
202
|
+
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`);
|
|
215
203
|
const indexFile = watchPath + "/index.ts";
|
|
216
|
-
const monitors = [monitorChildIndexes(watchPath
|
|
217
|
-
if (yield*
|
|
218
|
-
monitors.push(monitorRootIndexes(watchPath, indexFile
|
|
204
|
+
const monitors = [monitorChildIndexes(watchPath)];
|
|
205
|
+
if (yield* fs.exists(indexFile)) {
|
|
206
|
+
monitors.push(monitorRootIndexes(watchPath, indexFile));
|
|
219
207
|
}
|
|
220
208
|
else {
|
|
221
209
|
yield* Effect.logInfo(`Index file ${indexFile} does not exist`);
|
|
222
210
|
}
|
|
223
|
-
|
|
224
|
-
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`);
|
|
225
|
-
}
|
|
211
|
+
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`);
|
|
226
212
|
yield* Effect.all(monitors, { concurrency: monitors.length });
|
|
227
213
|
});
|
|
228
214
|
/**
|
|
@@ -231,19 +217,16 @@ Effect
|
|
|
231
217
|
*
|
|
232
218
|
* @returns An Effect that sets up file watching streams
|
|
233
219
|
*/
|
|
234
|
-
const watcher = Effect.fn("watch")(function* (
|
|
235
|
-
yield* Effect.
|
|
220
|
+
const watcher = Effect.fn("watch")(function* () {
|
|
221
|
+
yield* Effect.logInfo("Watch API resources and models for changes");
|
|
236
222
|
const dirs = ["../api/src/resources", "../api/src/models"];
|
|
237
223
|
const viteConfigFile = "./vite.config.ts";
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
if (debug) {
|
|
241
|
-
yield* Effect.logInfo("watcher debug mode is enabled");
|
|
242
|
-
}
|
|
224
|
+
const viteConfigExists = yield* fs.exists(viteConfigFile);
|
|
225
|
+
yield* Effect.logInfo("watcher debug mode is enabled");
|
|
243
226
|
// validate directories and filter out non-existing ones
|
|
244
227
|
const existingDirs = [];
|
|
245
228
|
for (const dir of dirs) {
|
|
246
|
-
const dirExists = yield*
|
|
229
|
+
const dirExists = yield* fs.exists(dir);
|
|
247
230
|
if (dirExists) {
|
|
248
231
|
existingDirs.push(dir);
|
|
249
232
|
}
|
|
@@ -251,40 +234,29 @@ Effect
|
|
|
251
234
|
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`);
|
|
252
235
|
}
|
|
253
236
|
}
|
|
254
|
-
if (existingDirs.length === 0) {
|
|
255
|
-
return yield* Effect.logWarning("No directories to watch - exiting");
|
|
256
|
-
}
|
|
257
237
|
// start watching all existing directories concurrently
|
|
258
238
|
const watchStreams = existingDirs.map((dir) => Effect.gen(function* () {
|
|
259
|
-
|
|
260
|
-
yield* Effect.logInfo(`Starting to watch directory: ${dir}`);
|
|
261
|
-
}
|
|
239
|
+
yield* Effect.logInfo(`Starting to watch directory: ${dir}`);
|
|
262
240
|
const files = [];
|
|
263
|
-
const watchStream =
|
|
241
|
+
const watchStream = fs.watch(dir, { recursive: true });
|
|
264
242
|
yield* watchStream
|
|
265
243
|
.pipe(Stream.runForEach(Effect.fn("effa-cli.watch.handleEvent")(function* (event) {
|
|
266
|
-
|
|
267
|
-
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`);
|
|
268
|
-
}
|
|
244
|
+
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`);
|
|
269
245
|
// touch tsconfig.json on any file change
|
|
270
246
|
yield* touch("./tsconfig.json");
|
|
271
|
-
|
|
272
|
-
yield* Effect.logInfo("Updated tsconfig.json");
|
|
273
|
-
}
|
|
247
|
+
yield* Effect.logInfo("Updated tsconfig.json");
|
|
274
248
|
// touch vite config only on file updates (not creates/deletes)
|
|
275
249
|
if (viteConfigExists
|
|
276
250
|
&& event._tag === "Update"
|
|
277
251
|
&& !files.includes(event.path)) {
|
|
278
252
|
yield* touch(viteConfigFile);
|
|
279
|
-
|
|
280
|
-
yield* Effect.logInfo("Updated vite.config.ts");
|
|
281
|
-
}
|
|
253
|
+
yield* Effect.logInfo("Updated vite.config.ts");
|
|
282
254
|
files.push(event.path);
|
|
283
255
|
}
|
|
284
256
|
})))
|
|
285
|
-
.pipe(Effect.forkScoped);
|
|
257
|
+
.pipe(Effect.andThen(Effect.addFinalizer(() => Effect.logInfo(`Stopped watching directory: ${dir}`))), Effect.forkScoped);
|
|
286
258
|
// also start monitoring indexes in the watched directory
|
|
287
|
-
yield* monitorIndexes(dir
|
|
259
|
+
yield* monitorIndexes(dir);
|
|
288
260
|
}));
|
|
289
261
|
// run all watch streams concurrently
|
|
290
262
|
yield* Effect.all(watchStreams, { concurrency: existingDirs.length });
|
|
@@ -300,11 +272,11 @@ Effect
|
|
|
300
272
|
* @returns An Effect that succeeds when the package.json is updated
|
|
301
273
|
*/
|
|
302
274
|
const packagejsonUpdater = Effect.fn("effa-cli.packagejsonUpdater")(function* (startDir, p, levels = 0) {
|
|
303
|
-
yield* Effect.
|
|
275
|
+
yield* Effect.logInfo(`Generating exports for ${p}`);
|
|
304
276
|
const exportMappings = yield* extractExportMappings(path.resolve(startDir, p));
|
|
305
277
|
// if exportMappings is empty skip export generation
|
|
306
278
|
if (exportMappings === "") {
|
|
307
|
-
yield* Effect.
|
|
279
|
+
yield* Effect.logInfo(`No src directory found for ${p}, skipping export generation`);
|
|
308
280
|
return;
|
|
309
281
|
}
|
|
310
282
|
const sortedExportEntries = JSON.parse(`{ ${exportMappings} }`);
|
|
@@ -335,12 +307,66 @@ Effect
|
|
|
335
307
|
};
|
|
336
308
|
const pkgJson = JSON.parse(yield* fs.readFileString(p + "/package.json", "utf-8"));
|
|
337
309
|
pkgJson.exports = packageExports;
|
|
338
|
-
yield* Effect.
|
|
310
|
+
yield* Effect.logInfo(`Writing updated package.json for ${p}`);
|
|
339
311
|
return yield* fs.writeFileString(p + "/package.json", JSON.stringify(pkgJson, null, 2));
|
|
340
312
|
});
|
|
313
|
+
/**
|
|
314
|
+
* Monitors a directory for TypeScript file changes and automatically updates package.json exports.
|
|
315
|
+
* Generates initial package.json exports, then watches the src directory for changes to regenerate exports.
|
|
316
|
+
*
|
|
317
|
+
* @param watchPath - The directory path containing the package.json and src to monitor
|
|
318
|
+
* @param levels - Optional depth limit for export filtering (0 = no limit)
|
|
319
|
+
* @returns An Effect that sets up package.json monitoring
|
|
320
|
+
*/
|
|
321
|
+
const monitorPackageJson = Effect.fn("effa-cli.monitorPackageJson")(function* (startDir, watchPath, levels = 0) {
|
|
322
|
+
yield* packagejsonUpdater(startDir, watchPath, levels);
|
|
323
|
+
const srcPath = watchPath === "." ? "./src" : `${watchPath}/src`;
|
|
324
|
+
if (!(yield* fs.exists(srcPath))) {
|
|
325
|
+
yield* Effect.logWarning(`Source directory ${srcPath} does not exist - skipping monitoring`);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const watchStream = fs.watch(srcPath, { recursive: true });
|
|
329
|
+
yield* watchStream.pipe(Stream.runForEach(Effect.fn("effa-cli.monitorPackageJson.handleEvent")(function* (_) {
|
|
330
|
+
yield* packagejsonUpdater(startDir, watchPath, levels);
|
|
331
|
+
})), Effect.andThen(Effect.addFinalizer(() => Effect.logInfo(`Stopped monitoring package.json for: ${watchPath}`))), Effect.forkScoped);
|
|
332
|
+
});
|
|
341
333
|
/*
|
|
342
334
|
* CLI
|
|
343
335
|
*/
|
|
336
|
+
const WrapAsOption = Options.text("wrap").pipe(Options.withAlias("w"), Options.optional, Options.withDescription("Wrap child bash command: the lifetime of the CLI command will be tied to the child process"));
|
|
337
|
+
// has prio over WrapAsOption
|
|
338
|
+
const WrapAsArg = Args
|
|
339
|
+
.text({
|
|
340
|
+
name: "wrap"
|
|
341
|
+
})
|
|
342
|
+
.pipe(Args.atLeast(1), Args.optional, Args.withDescription("Wrap child bash command: the lifetime of the CLI command will be tied to the child process"));
|
|
343
|
+
/**
|
|
344
|
+
* Creates a command that automatically includes wrap functionality for executing child bash commands.
|
|
345
|
+
* Combines both option-based (--wrap) and argument-based wrap parameters, giving priority to arguments.
|
|
346
|
+
* If a wrap command is provided, it will be executed **after** the main command handler.
|
|
347
|
+
*
|
|
348
|
+
* @param name - The command name
|
|
349
|
+
* @param config - The command configuration (options, args, etc.)
|
|
350
|
+
* @param handler - The main command handler function
|
|
351
|
+
* @param completionMessage - Optional message to log when the command completes
|
|
352
|
+
* @returns A Command with integrated wrap functionality
|
|
353
|
+
*/
|
|
354
|
+
const makeCommandWithWrap = (name, config, handler, completionMessage) => Command.make(name, { ...config, wo: WrapAsOption, wa: WrapAsArg }, Effect.fn("effa-cli.withWrapHandler")(function* (_) {
|
|
355
|
+
const { wa, wo, ...cfg } = _;
|
|
356
|
+
if (completionMessage) {
|
|
357
|
+
yield* Effect.addFinalizer(() => Effect.logInfo(completionMessage));
|
|
358
|
+
}
|
|
359
|
+
const wrapOption = Option.orElse(wa, () => wo);
|
|
360
|
+
yield* handler(cfg);
|
|
361
|
+
if (Option.isSome(wrapOption)) {
|
|
362
|
+
const val = Array.isArray(wrapOption.value)
|
|
363
|
+
? wrapOption.value.join(" ")
|
|
364
|
+
: wrapOption.value;
|
|
365
|
+
yield* Effect.logInfo(`Spawning child command: ${val}`);
|
|
366
|
+
yield* runNodeCommand(val);
|
|
367
|
+
}
|
|
368
|
+
return;
|
|
369
|
+
}, (_) => Effect.scoped(_)));
|
|
344
370
|
const EffectAppLibsPath = Args
|
|
345
371
|
.directory({
|
|
346
372
|
exists: "yes",
|
|
@@ -359,7 +385,7 @@ Effect
|
|
|
359
385
|
.pipe(Command.withDescription("Remove effect-app file resolutions and restore npm registry packages"));
|
|
360
386
|
const ue = Command
|
|
361
387
|
.make("ue", {}, Effect.fn("effa-cli.ue")(function* ({}) {
|
|
362
|
-
yield* Effect.
|
|
388
|
+
yield* Effect.logInfo("Update effect-app and/or effect packages");
|
|
363
389
|
const prompted = yield* Prompt.select({
|
|
364
390
|
choices: [
|
|
365
391
|
{
|
|
@@ -390,20 +416,16 @@ Effect
|
|
|
390
416
|
}
|
|
391
417
|
}))
|
|
392
418
|
.pipe(Command.withDescription("Update effect-app and/or effect packages"));
|
|
393
|
-
const
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
return yield* watcher(debug);
|
|
397
|
-
}))
|
|
419
|
+
const watch = makeCommandWithWrap("watch", {}, Effect.fn("effa-cli.watch")(function* ({}) {
|
|
420
|
+
return yield* watcher();
|
|
421
|
+
}), "Stopped watching API resources and models")
|
|
398
422
|
.pipe(Command.withDescription("Watch API resources and models for changes and update tsconfig.json and vite.config.ts accordingly"));
|
|
399
|
-
const indexMulti =
|
|
400
|
-
|
|
401
|
-
yield* Effect.log("Starting multi-index monitoring");
|
|
423
|
+
const indexMulti = makeCommandWithWrap("index-multi", {}, Effect.fn("effa-cli.index-multi")(function* ({}) {
|
|
424
|
+
yield* Effect.logInfo("Starting multi-index monitoring");
|
|
402
425
|
const dirs = ["./api/src"];
|
|
403
|
-
const fileSystem = yield* FileSystem.FileSystem;
|
|
404
426
|
const existingDirs = [];
|
|
405
427
|
for (const dir of dirs) {
|
|
406
|
-
const dirExists = yield*
|
|
428
|
+
const dirExists = yield* fs.exists(dir);
|
|
407
429
|
if (dirExists) {
|
|
408
430
|
existingDirs.push(dir);
|
|
409
431
|
}
|
|
@@ -411,22 +433,17 @@ Effect
|
|
|
411
433
|
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`);
|
|
412
434
|
}
|
|
413
435
|
}
|
|
414
|
-
|
|
415
|
-
return yield* Effect.logWarning("No directories to monitor - exiting");
|
|
416
|
-
}
|
|
417
|
-
const monitors = existingDirs.map((dir) => monitorIndexes(dir, debug));
|
|
436
|
+
const monitors = existingDirs.map((dir) => monitorIndexes(dir));
|
|
418
437
|
yield* Effect.all(monitors, { concurrency: monitors.length });
|
|
419
|
-
}))
|
|
438
|
+
}), "Stopped multi-index monitoring")
|
|
420
439
|
.pipe(Command.withDescription("Monitor multiple directories for index and controller file changes"));
|
|
421
|
-
const packagejson =
|
|
422
|
-
.make("packagejson", {}, Effect.fn("effa-cli.packagejson")(function* ({}) {
|
|
440
|
+
const packagejson = makeCommandWithWrap("packagejson", {}, Effect.fn("effa-cli.packagejson")(function* ({}) {
|
|
423
441
|
// https://nodejs.org/api/path.html#pathresolvepaths
|
|
424
442
|
const startDir = path.resolve();
|
|
425
|
-
return yield*
|
|
426
|
-
}))
|
|
443
|
+
return yield* monitorPackageJson(startDir, ".");
|
|
444
|
+
}), "Stopped monitoring root package.json exports")
|
|
427
445
|
.pipe(Command.withDescription("Generate and update root-level package.json exports mappings for TypeScript modules"));
|
|
428
|
-
const packagejsonPackages =
|
|
429
|
-
.make("packagejson-packages", {}, Effect.fn("effa-cli.packagejson-packages")(function* ({}) {
|
|
446
|
+
const packagejsonPackages = makeCommandWithWrap("packagejson-packages", {}, Effect.fn("effa-cli.packagejson-packages")(function* ({}) {
|
|
430
447
|
// https://nodejs.org/api/path.html#pathresolvepaths
|
|
431
448
|
const startDir = path.resolve();
|
|
432
449
|
const packagesDir = path.join(startDir, "packages");
|
|
@@ -449,18 +466,15 @@ Effect
|
|
|
449
466
|
validPackages.push(packagePath);
|
|
450
467
|
}
|
|
451
468
|
}
|
|
452
|
-
|
|
453
|
-
return yield* Effect.logWarning("No valid packages found to update");
|
|
454
|
-
}
|
|
455
|
-
yield* Effect.log(`Found ${validPackages.length} packages to update`);
|
|
469
|
+
yield* Effect.logInfo(`Found ${validPackages.length} packages to update`);
|
|
456
470
|
// update each package sequentially
|
|
457
|
-
yield* Effect.all(validPackages.map(
|
|
471
|
+
yield* Effect.all(validPackages.map(Effect.fnUntraced(function* (packagePath) {
|
|
458
472
|
const relativePackagePath = path.relative(startDir, packagePath);
|
|
459
|
-
yield* Effect.
|
|
460
|
-
return yield*
|
|
473
|
+
yield* Effect.logInfo(`Updating ${relativePackagePath}`);
|
|
474
|
+
return yield* monitorPackageJson(startDir, relativePackagePath);
|
|
461
475
|
})));
|
|
462
|
-
yield* Effect.
|
|
463
|
-
}))
|
|
476
|
+
yield* Effect.logInfo("All packages updated successfully");
|
|
477
|
+
}), "Stopped monitoring package.json exports for all packages")
|
|
464
478
|
.pipe(Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo"));
|
|
465
479
|
// configure CLI
|
|
466
480
|
const cli = Command.run(Command
|
|
@@ -480,4 +494,4 @@ Effect
|
|
|
480
494
|
return yield* cli(process.argv);
|
|
481
495
|
})()
|
|
482
496
|
.pipe(Effect.scoped, Effect.provide(NodeContext.layer), NodeRuntime.runMain);
|
|
483
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFdEMsTUFBTTtLQUNILEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQzdCLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLENBQUMsNEJBQTRCLENBQUE7SUFFakU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVksRUFBRSxFQUFFLENBQ25ELFdBQVc7U0FDUixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7U0FDckIsSUFBSSxDQUNILFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQzdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVB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
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUloRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFjLE1BQU0sUUFBUSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXRDLE1BQU07S0FDSCxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDdkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUM3QixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLDRCQUE0QixDQUFBO0lBRWpFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7SUFFOUU7Ozs7Ozs7T0FPRztJQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVksRUFBRSxFQUFFLENBQ25ELFdBQVc7U0FDUixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUM7U0FDckIsSUFBSSxDQUNILFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQzdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQ3JCLENBQUE7SUFFTDs7Ozs7OztPQU9HO0lBQ0gsc0RBQXNEO0lBQ3RELGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLHVDQUF1QztJQUN2Qyx1Q0FBdUM7SUFDdkMsNERBQTREO0lBQzVELDJCQUEyQjtJQUMzQixRQUFRO0lBRVI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFZO1FBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFFdkIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNyQyxHQUFHLENBQUMsTUFBTSxLQUFLLFVBQVU7WUFDdkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRjs7O09BR0c7SUFDSCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMscUNBQXFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDeEYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDL0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsOEJBQThCLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFDOUQsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLGlDQUFpQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ25FLENBQUM7SUFDSCxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRUo7Ozs7T0FJRztJQUNILE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNsRixNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUMvRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25DLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUM5RCxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsaUNBQWlDLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDbkUsQ0FBQztJQUNILENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBQyxpQkFBeUI7UUFDeEUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1FBRTdELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFBO1FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNwRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFekMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsR0FBRyxFQUFFLENBQUMsV0FBVztZQUNqQixrQ0FBa0MsRUFBRSxPQUFPLEdBQUcsaUJBQWlCLEdBQUcsZ0NBQWdDO1lBQ2xHLFlBQVksRUFBRSxPQUFPLEdBQUcsaUJBQWlCLEdBQUcsc0JBQXNCO1lBQ2xFLG1CQUFtQixFQUFFLE9BQU8sR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUI7WUFDcEUsaUJBQWlCLEVBQUUsT0FBTyxHQUFHLGlCQUFpQixHQUFHLGVBQWU7WUFDaEUsNEJBQTRCLEVBQUUsT0FBTyxHQUFHLGlCQUFpQixHQUFHLDBCQUEwQjtZQUN0RixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLGlCQUFpQixpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUNyRyxDQUFBO1FBRUQsRUFBRSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFFNUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO1FBRXpFLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUvQixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7SUFDN0QsQ0FBQyxDQUFDLENBQUE7SUFFRjs7Ozs7O09BTUc7SUFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNoRCxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLENBQUE7UUFFL0QsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUE7UUFDeEMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUV6QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQXFDLENBQUMsQ0FBQyxNQUFNLENBQ3pGLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQTtZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ1YsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQ0QsRUFBNEIsQ0FDN0IsQ0FBQTtRQUVELEVBQUUsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUE7UUFFcEMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsQ0FBQyxDQUFBO1FBRTlFLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMvQixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFDL0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUVKOzs7Ozs7O09BT0c7SUFDSCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsMENBQTBDLENBQUMsQ0FDL0UsUUFBUSxDQUFDLEVBQUMsU0FBaUI7UUFDekIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1Q0FBdUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUV6RSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBRTVELEtBQUssQ0FBQyxDQUFDLFdBQVc7YUFDZixJQUFJLENBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixNQUFNLENBQUMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSztZQUNuRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN2QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNoRCxNQUFNLFlBQVksR0FBRyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBRXRFLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU07WUFFekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ1QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFBO1lBRTVDLE9BQU8sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7cUJBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBRXpFLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQTtnQkFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDckMsSUFBSSxNQUFNO3dCQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3RDLENBQUM7Z0JBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNuQiwrQkFBK0IsS0FBSyxDQUFDLElBQUksbUJBQW1CLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdkYsQ0FBQTtvQkFFRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO29CQUNsRSxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsK0JBQStCLFVBQVUsRUFBRSxDQUFDLENBQUE7b0JBQ2xFLE1BQUs7Z0JBQ1AsQ0FBQztnQkFDRCxDQUFDLEVBQUUsQ0FBQTtZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUNGO2FBQ0EsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQ1osTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQy9GLEVBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQTtJQUNMLENBQUMsQ0FDRixDQUFBO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FDN0UsUUFBUSxDQUFDLEVBQUMsU0FBaUIsRUFBRSxTQUFpQjtRQUM1QyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHVDQUF1QyxTQUFTLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUV6RixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRXZDLEtBQUssQ0FBQyxDQUFDLFdBQVc7YUFDZixJQUFJLENBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixNQUFNLENBQUMsRUFBRSxDQUFDLHFEQUFxRCxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSztZQUM5RSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFBRSxPQUFNO1lBRTFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLEtBQUssQ0FBQyxJQUFJLGFBQWEsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUVsRixLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLFNBQVMsR0FBRyxDQUFDLENBQUE7UUFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FDRjthQUNBLElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUNaLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUNBQXVDLFNBQVMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxDQUNuRixDQUNGLEVBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQTtJQUNMLENBQUMsQ0FDRixDQUFBO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMscUNBQXFDLENBQUMsQ0FDckUsUUFBUSxDQUFDLEVBQUMsU0FBaUI7UUFDekIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUUzRSxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFBO1FBRXpDLE1BQU0sUUFBUSxHQUFHLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUVqRCxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLFNBQVMsaUJBQWlCLENBQUMsQ0FBQTtRQUNqRSxDQUFDO1FBRUQsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLG1CQUFtQixTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBRWhGLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELENBQUMsQ0FDRixDQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMxQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7UUFFbkUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1FBQzFELE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFBO1FBRXpDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUV6RCxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFdEQsd0RBQXdEO1FBQ3hELE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQTtRQUNqQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdkMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxDQUFBO1lBQ3hFLENBQUM7UUFDSCxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNsQixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBRTVELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtZQUMxQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBRXRELEtBQUssQ0FBQyxDQUFDLFdBQVc7aUJBQ2YsSUFBSSxDQUNILE1BQU0sQ0FBQyxVQUFVLENBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLEtBQUs7Z0JBQ3JELEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO2dCQUV4RSx5Q0FBeUM7Z0JBQ3pDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO2dCQUUvQixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUE7Z0JBRTlDLCtEQUErRDtnQkFDL0QsSUFDRSxnQkFBZ0I7dUJBQ2IsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO3VCQUN2QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUM5QixDQUFDO29CQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtvQkFFNUIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO29CQUUvQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDeEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQ0Y7aUJBQ0EsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQ1osTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLCtCQUErQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQ2hGLEVBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQTtZQUVILHlEQUF5RDtZQUN6RCxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVELHFDQUFxQztRQUNyQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsQ0FBQTtJQUVGOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNqRSxRQUFRLENBQUMsRUFBQyxRQUFnQixFQUFFLENBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUMvQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXBELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFOUUsb0RBQW9EO1FBQ3BELElBQUksY0FBYyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsOEJBQThCLENBQUMsQ0FBQTtZQUNwRixPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDcEMsS0FBSyxjQUFjLElBQUksQ0FJeEIsQ0FBQTtRQUVELE1BQU0scUJBQXFCLEdBQUcsTUFBTTtZQUNsQyxDQUFDLENBQUMsTUFBTTtpQkFDTCxJQUFJLENBQUMsbUJBQW1CLENBQUM7Z0JBQzFCLHFGQUFxRjtpQkFDcEYsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQzdELE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFDN0QsRUFBNkIsQ0FDOUI7WUFDSCxDQUFDLENBQUMsbUJBQW1CLENBQUE7UUFFdkIsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7bUJBQ3RDO29CQUNELEdBQUcsRUFBRTt3QkFDSCxPQUFPLEVBQUUsbUJBQW1CO3dCQUM1QixTQUFTLEVBQUUsaUJBQWlCO3FCQUM3QjtpQkFDRixDQUFDO1lBQ0osR0FBRyxNQUFNO2lCQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztpQkFDM0IsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDZCxHQUFHLElBQUk7Z0JBQ1AsaUVBQWlFO2dCQUNqRSwrREFBK0Q7Z0JBQy9ELDZEQUE2RDtnQkFDN0QsR0FBRyxHQUFHLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUU7YUFDN0YsQ0FBQyxFQUNGLEVBQTZCLENBQzlCO1NBQ0osQ0FBQTtRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDbEYsT0FBTyxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUE7UUFFaEMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUU5RCxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQzlCLENBQUMsR0FBRyxlQUFlLEVBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDakMsQ0FBQTtJQUNILENBQUMsQ0FDRixDQUFBO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNqRSxRQUFRLENBQUMsRUFBQyxRQUFnQixFQUFFLFNBQWlCLEVBQUUsTUFBTSxHQUFHLENBQUM7UUFDdkQsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV0RCxNQUFNLE9BQU8sR0FBRyxTQUFTLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxNQUFNLENBQUE7UUFFaEUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsT0FBTyx1Q0FBdUMsQ0FBQyxDQUFBO1lBQzVGLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUUxRCxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNyQixNQUFNLENBQUMsVUFBVSxDQUNmLE1BQU0sQ0FBQyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDO1lBQzlELEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDeEQsQ0FBQyxDQUFDLENBQ0gsRUFDRCxNQUFNLENBQUMsT0FBTyxDQUNaLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUMvRixFQUNELE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUE7SUFDSCxDQUFDLENBQ0YsQ0FBQTtJQUVEOztPQUVHO0lBRUgsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzVDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ3RCLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLE9BQU8sQ0FBQyxlQUFlLENBQ3JCLDRGQUE0RixDQUM3RixDQUNGLENBQUE7SUFFRCw2QkFBNkI7SUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSTtTQUNuQixJQUFJLENBQUM7UUFDSixJQUFJLEVBQUUsTUFBTTtLQUNiLENBQUM7U0FDRCxJQUFJLENBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxlQUFlLENBQ2xCLDRGQUE0RixDQUM3RixDQUNGLENBQUE7SUFFSDs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixJQUFVLEVBQ1YsTUFBYyxFQUNkLE9BQThGLEVBQzlGLGlCQUEwQixFQU0xQixFQUFFLENBQ0YsT0FBTyxDQUFDLElBQUksQ0FDVixJQUFJLEVBQ0osRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFDOUMsTUFBTSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUM7UUFDL0MsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUc0QixDQUFBO1FBRXZELElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO1FBQ3JFLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUU5QyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBVSxDQUFDLENBQUE7UUFFMUIsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUM1QixDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQTtZQUVwQixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBQ3ZELEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM1QixDQUFDO1FBRUQsT0FBTTtJQUNSLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1QixDQUFBO0lBRUgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJO1NBQzNCLFNBQVMsQ0FBQztRQUNULE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLHNCQUFzQjtLQUM3QixDQUFDO1NBQ0QsSUFBSSxDQUNILElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUM5RCxDQUFBO0lBRUgsTUFBTSxJQUFJLEdBQUcsT0FBTztTQUNqQixJQUFJLENBQ0gsTUFBTSxFQUNOLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsRUFDeEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxFQUFFLGlCQUFpQixFQUFFO1FBQ3hELE9BQU8sS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDL0MsQ0FBQyxDQUFDLENBQ0g7U0FDQSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDLENBQUE7SUFFekYsTUFBTSxNQUFNLEdBQUcsT0FBTztTQUNuQixJQUFJLENBQ0gsUUFBUSxFQUNSLEVBQUUsRUFDRixNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsRUFBRTtRQUN2QyxPQUFPLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQTtJQUM5QixDQUFDLENBQUMsQ0FDSDtTQUNBLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLHNFQUFzRSxDQUFDLENBQUMsQ0FBQTtJQUV4RyxNQUFNLEVBQUUsR0FBRyxPQUFPO1NBQ2YsSUFBSSxDQUNILElBQUksRUFDSixFQUFFLEVBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxFQUFFO1FBQ25DLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUMsQ0FBQTtRQUVqRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxLQUFLLEVBQUUsWUFBWTtvQkFDbkIsV0FBVyxFQUFFLGlDQUFpQztvQkFDOUMsS0FBSyxFQUFFLFlBQVk7aUJBQ3BCO2dCQUNEO29CQUNFLEtBQUssRUFBRSxRQUFRO29CQUNmLFdBQVcsRUFBRSw2QkFBNkI7b0JBQzFDLEtBQUssRUFBRSxRQUFRO2lCQUNoQjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsTUFBTTtvQkFDYixXQUFXLEVBQUUsNENBQTRDO29CQUN6RCxLQUFLLEVBQUUsTUFBTTtpQkFDZDthQUNGO1lBQ0QsT0FBTyxFQUFFLGtCQUFrQjtTQUM1QixDQUFDLENBQUE7UUFFRixRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssWUFBWTtnQkFDZixPQUFPLEtBQUssQ0FBQyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDekMsQ0FBQTtZQUVILEtBQUssUUFBUTtnQkFDWCxPQUFPLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDekMsQ0FBQTtZQUNILEtBQUssTUFBTTtnQkFDVCxPQUFPLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN6QyxDQUFBO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUNIO1NBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsMENBQTBDLENBQUMsQ0FBQyxDQUFBO0lBRTVFLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUMvQixPQUFPLEVBQ1AsRUFBRSxFQUNGLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxFQUFFO1FBQ3RDLE9BQU8sS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDekIsQ0FBQyxDQUFDLEVBQ0YsMkNBQTJDLENBQzVDO1NBQ0UsSUFBSSxDQUNILE9BQU8sQ0FBQyxlQUFlLENBQ3JCLG9HQUFvRyxDQUNyRyxDQUNGLENBQUE7SUFFSCxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FDcEMsYUFBYSxFQUNiLEVBQUUsRUFDRixNQUFNLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsRUFBRTtRQUM1QyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFFeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQixNQUFNLFlBQVksR0FBYSxFQUFFLENBQUE7UUFDakMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsNEJBQTRCLENBQUMsQ0FBQTtZQUN4RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQy9ELEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELENBQUMsQ0FBQyxFQUNGLGdDQUFnQyxDQUNqQztTQUNFLElBQUksQ0FDSCxPQUFPLENBQUMsZUFBZSxDQUNyQixvRUFBb0UsQ0FDckUsQ0FDRixDQUFBO0lBRUgsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQ3JDLGFBQWEsRUFDYixFQUFFLEVBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLEVBQUU7UUFDNUMsb0RBQW9EO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUUvQixPQUFPLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNqRCxDQUFDLENBQUMsRUFDRiw4Q0FBOEMsQ0FDL0M7U0FDRSxJQUFJLENBQ0gsT0FBTyxDQUFDLGVBQWUsQ0FBQyxxRkFBcUYsQ0FBQyxDQUMvRyxDQUFBO0lBRUgsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FDN0Msc0JBQXNCLEVBQ3RCLEVBQUUsRUFDRixNQUFNLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsRUFBRTtRQUNyRCxvREFBb0Q7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRS9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBRW5ELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDcEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV4RCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUE7UUFFbEMsMkRBQTJEO1FBQzNELEtBQUssTUFBTSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7WUFDdkQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUE7WUFDbEYsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBRWpFLE1BQU0sYUFBYSxHQUFHLEtBQUs7bUJBQ3RCLFdBQVcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7bUJBQzVDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUUzQyxJQUFJLGlCQUFpQixJQUFJLFNBQVMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyRCxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLGFBQWEsQ0FBQyxNQUFNLHFCQUFxQixDQUFDLENBQUE7UUFFekUsbUNBQW1DO1FBQ25DLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2YsYUFBYSxDQUFDLEdBQUcsQ0FDZixNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFdBQVc7WUFDckMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNoRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1lBQ3hELE9BQU8sS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUE7UUFDakUsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFBO1FBRUQsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO0lBQzVELENBQUMsQ0FBQyxFQUNGLDBEQUEwRCxDQUMzRDtTQUNFLElBQUksQ0FDSCxPQUFPLENBQUMsZUFBZSxDQUFDLGdGQUFnRixDQUFDLENBQzFHLENBQUE7SUFFSCxnQkFBZ0I7SUFDaEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FDckIsT0FBTztTQUNKLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDWixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUM1QixFQUFFO1FBQ0YsSUFBSTtRQUNKLE1BQU07UUFDTixLQUFLO1FBQ0wsVUFBVTtRQUNWLFdBQVc7UUFDWCxtQkFBbUI7S0FDcEIsQ0FBQyxDQUFDLEVBQ0w7UUFDRSxJQUFJLEVBQUUsNkJBQTZCO1FBQ25DLE9BQU8sRUFBRSxRQUFRO0tBQ2xCLENBQ0YsQ0FBQTtJQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUNqQyxDQUFDLENBQUMsRUFBRTtLQUNILElBQUksQ0FDSCxNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUNqQyxXQUFXLENBQUMsT0FBTyxDQUNwQixDQUFBIn0=
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
import { Args, Command, Options, Prompt } from "@effect/cli"
|
|
5
5
|
import { Command as NodeCommand, FileSystem, Path } from "@effect/platform"
|
|
6
6
|
import { NodeContext, NodeRuntime } from "@effect/platform-node"
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
import { type CommandExecutor } from "@effect/platform/CommandExecutor"
|
|
9
|
+
import { type PlatformError } from "@effect/platform/Error"
|
|
10
|
+
import { Effect, identity, Option, Stream, type Types } from "effect"
|
|
8
11
|
import { ExtractExportMappingsService } from "./extract.js"
|
|
9
12
|
import { packages } from "./shared.js"
|
|
10
13
|
|
|
@@ -14,6 +17,8 @@ Effect
|
|
|
14
17
|
const path = yield* Path.Path
|
|
15
18
|
const extractExportMappings = yield* ExtractExportMappingsService
|
|
16
19
|
|
|
20
|
+
yield* Effect.addFinalizer(() => Effect.logInfo(`CLI has finished executing`))
|
|
21
|
+
|
|
17
22
|
/**
|
|
18
23
|
* Executes a shell command using Node.js Command API with inherited stdio streams.
|
|
19
24
|
* The command is run through the system shell (/bin/sh) for proper command parsing.
|
|
@@ -102,7 +107,7 @@ Effect
|
|
|
102
107
|
* @returns An Effect that succeeds when linking is complete
|
|
103
108
|
*/
|
|
104
109
|
const linkPackages = Effect.fnUntraced(function*(effectAppLibsPath: string) {
|
|
105
|
-
yield* Effect.
|
|
110
|
+
yield* Effect.logInfo("Linking local effect-app packages...")
|
|
106
111
|
|
|
107
112
|
const packageJsonPath = "./package.json"
|
|
108
113
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath)
|
|
@@ -121,11 +126,11 @@ Effect
|
|
|
121
126
|
pj.resolutions = resolutions
|
|
122
127
|
|
|
123
128
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2))
|
|
124
|
-
yield* Effect.
|
|
129
|
+
yield* Effect.logInfo("Updated package.json with local file resolutions")
|
|
125
130
|
|
|
126
131
|
yield* runNodeCommand("pnpm i")
|
|
127
132
|
|
|
128
|
-
yield* Effect.
|
|
133
|
+
yield* Effect.logInfo("Successfully linked local packages")
|
|
129
134
|
})
|
|
130
135
|
|
|
131
136
|
/**
|
|
@@ -136,7 +141,7 @@ Effect
|
|
|
136
141
|
* @returns An Effect that succeeds when unlinking is complete
|
|
137
142
|
*/
|
|
138
143
|
const unlinkPackages = Effect.fnUntraced(function*() {
|
|
139
|
-
yield* Effect.
|
|
144
|
+
yield* Effect.logInfo("Unlinking local effect-app packages...")
|
|
140
145
|
|
|
141
146
|
const packageJsonPath = "./package.json"
|
|
142
147
|
const packageJsonContent = yield* fs.readFileString(packageJsonPath)
|
|
@@ -154,10 +159,10 @@ Effect
|
|
|
154
159
|
pj.resolutions = filteredResolutions
|
|
155
160
|
|
|
156
161
|
yield* fs.writeFileString(packageJsonPath, JSON.stringify(pj, null, 2))
|
|
157
|
-
yield* Effect.
|
|
162
|
+
yield* Effect.logInfo("Removed effect-app file resolutions from package.json")
|
|
158
163
|
|
|
159
164
|
yield* runNodeCommand("pnpm i")
|
|
160
|
-
yield* Effect.
|
|
165
|
+
yield* Effect.logInfo("Successfully unlinked local packages")
|
|
161
166
|
})()
|
|
162
167
|
|
|
163
168
|
/**
|
|
@@ -169,14 +174,10 @@ Effect
|
|
|
169
174
|
* @returns An Effect that sets up controller file monitoring
|
|
170
175
|
*/
|
|
171
176
|
const monitorChildIndexes = Effect.fn("effa-cli.index-multi.monitorChildIndexes")(
|
|
172
|
-
function*(watchPath: string
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (debug) {
|
|
176
|
-
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`)
|
|
177
|
-
}
|
|
177
|
+
function*(watchPath: string) {
|
|
178
|
+
yield* Effect.logInfo(`Starting controller monitoring for: ${watchPath}`)
|
|
178
179
|
|
|
179
|
-
const watchStream =
|
|
180
|
+
const watchStream = fs.watch(watchPath, { recursive: true })
|
|
180
181
|
|
|
181
182
|
yield* watchStream
|
|
182
183
|
.pipe(
|
|
@@ -197,16 +198,14 @@ Effect
|
|
|
197
198
|
|
|
198
199
|
const existingFiles: string[] = []
|
|
199
200
|
for (const file of candidateFiles) {
|
|
200
|
-
const exists = yield*
|
|
201
|
+
const exists = yield* fs.exists(file)
|
|
201
202
|
if (exists) existingFiles.push(file)
|
|
202
203
|
}
|
|
203
204
|
|
|
204
205
|
if (existingFiles.length > 0) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
)
|
|
209
|
-
}
|
|
206
|
+
yield* Effect.logInfo(
|
|
207
|
+
`Controller change detected: ${event.path}, fixing files: ${existingFiles.join(", ")}`
|
|
208
|
+
)
|
|
210
209
|
|
|
211
210
|
const eslintArgs = existingFiles.map((f) => `"../${f}"`).join(" ")
|
|
212
211
|
yield* runNodeCommand(`cd api && pnpm eslint --fix ${eslintArgs}`)
|
|
@@ -218,6 +217,9 @@ Effect
|
|
|
218
217
|
)
|
|
219
218
|
)
|
|
220
219
|
.pipe(
|
|
220
|
+
Effect.andThen(
|
|
221
|
+
Effect.addFinalizer(() => Effect.logInfo(`Stopped monitoring child indexes in: ${watchPath}`))
|
|
222
|
+
),
|
|
221
223
|
Effect.forkScoped
|
|
222
224
|
)
|
|
223
225
|
}
|
|
@@ -233,14 +235,10 @@ Effect
|
|
|
233
235
|
* @returns An Effect that sets up root index monitoring
|
|
234
236
|
*/
|
|
235
237
|
const monitorRootIndexes = Effect.fn("effa-cli.index-multi.monitorRootIndexes")(
|
|
236
|
-
function*(watchPath: string, indexFile: string
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
if (debug) {
|
|
240
|
-
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`)
|
|
241
|
-
}
|
|
238
|
+
function*(watchPath: string, indexFile: string) {
|
|
239
|
+
yield* Effect.logInfo(`Starting root index monitoring for: ${watchPath} -> ${indexFile}`)
|
|
242
240
|
|
|
243
|
-
const watchStream =
|
|
241
|
+
const watchStream = fs.watch(watchPath)
|
|
244
242
|
|
|
245
243
|
yield* watchStream
|
|
246
244
|
.pipe(
|
|
@@ -248,15 +246,18 @@ Effect
|
|
|
248
246
|
Effect.fn("effa-cli.index-multi.monitorRootIndexes.handleEvent")(function*(event) {
|
|
249
247
|
if (event.path.endsWith(indexFile)) return
|
|
250
248
|
|
|
251
|
-
|
|
252
|
-
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`)
|
|
253
|
-
}
|
|
249
|
+
yield* Effect.logInfo(`Root change detected: ${event.path}, fixing: ${indexFile}`)
|
|
254
250
|
|
|
255
251
|
yield* runNodeCommand(`pnpm eslint --fix "${indexFile}"`)
|
|
256
252
|
})
|
|
257
253
|
)
|
|
258
254
|
)
|
|
259
255
|
.pipe(
|
|
256
|
+
Effect.andThen(
|
|
257
|
+
Effect.addFinalizer(() =>
|
|
258
|
+
Effect.logInfo(`Stopped monitoring root indexes in: ${watchPath} -> ${indexFile}`)
|
|
259
|
+
)
|
|
260
|
+
),
|
|
260
261
|
Effect.forkScoped
|
|
261
262
|
)
|
|
262
263
|
}
|
|
@@ -271,26 +272,20 @@ Effect
|
|
|
271
272
|
* @returns An Effect that sets up all index monitoring for the path
|
|
272
273
|
*/
|
|
273
274
|
const monitorIndexes = Effect.fn("effa-cli.index-multi.monitorIndexes")(
|
|
274
|
-
function*(watchPath: string
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
if (debug) {
|
|
278
|
-
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`)
|
|
279
|
-
}
|
|
275
|
+
function*(watchPath: string) {
|
|
276
|
+
yield* Effect.logInfo(`Setting up index monitoring for path: ${watchPath}`)
|
|
280
277
|
|
|
281
278
|
const indexFile = watchPath + "/index.ts"
|
|
282
279
|
|
|
283
|
-
const monitors = [monitorChildIndexes(watchPath
|
|
280
|
+
const monitors = [monitorChildIndexes(watchPath)]
|
|
284
281
|
|
|
285
|
-
if (yield*
|
|
286
|
-
monitors.push(monitorRootIndexes(watchPath, indexFile
|
|
282
|
+
if (yield* fs.exists(indexFile)) {
|
|
283
|
+
monitors.push(monitorRootIndexes(watchPath, indexFile))
|
|
287
284
|
} else {
|
|
288
285
|
yield* Effect.logInfo(`Index file ${indexFile} does not exist`)
|
|
289
286
|
}
|
|
290
287
|
|
|
291
|
-
|
|
292
|
-
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`)
|
|
293
|
-
}
|
|
288
|
+
yield* Effect.logInfo(`Starting ${monitors.length} monitor(s) for ${watchPath}`)
|
|
294
289
|
|
|
295
290
|
yield* Effect.all(monitors, { concurrency: monitors.length })
|
|
296
291
|
}
|
|
@@ -302,23 +297,20 @@ Effect
|
|
|
302
297
|
*
|
|
303
298
|
* @returns An Effect that sets up file watching streams
|
|
304
299
|
*/
|
|
305
|
-
const watcher = Effect.fn("watch")(function*(
|
|
306
|
-
yield* Effect.
|
|
300
|
+
const watcher = Effect.fn("watch")(function*() {
|
|
301
|
+
yield* Effect.logInfo("Watch API resources and models for changes")
|
|
307
302
|
|
|
308
303
|
const dirs = ["../api/src/resources", "../api/src/models"]
|
|
309
304
|
const viteConfigFile = "./vite.config.ts"
|
|
310
|
-
const fileSystem = yield* FileSystem.FileSystem
|
|
311
305
|
|
|
312
|
-
const viteConfigExists = yield*
|
|
306
|
+
const viteConfigExists = yield* fs.exists(viteConfigFile)
|
|
313
307
|
|
|
314
|
-
|
|
315
|
-
yield* Effect.logInfo("watcher debug mode is enabled")
|
|
316
|
-
}
|
|
308
|
+
yield* Effect.logInfo("watcher debug mode is enabled")
|
|
317
309
|
|
|
318
310
|
// validate directories and filter out non-existing ones
|
|
319
311
|
const existingDirs: string[] = []
|
|
320
312
|
for (const dir of dirs) {
|
|
321
|
-
const dirExists = yield*
|
|
313
|
+
const dirExists = yield* fs.exists(dir)
|
|
322
314
|
if (dirExists) {
|
|
323
315
|
existingDirs.push(dir)
|
|
324
316
|
} else {
|
|
@@ -326,33 +318,24 @@ Effect
|
|
|
326
318
|
}
|
|
327
319
|
}
|
|
328
320
|
|
|
329
|
-
if (existingDirs.length === 0) {
|
|
330
|
-
return yield* Effect.logWarning("No directories to watch - exiting")
|
|
331
|
-
}
|
|
332
|
-
|
|
333
321
|
// start watching all existing directories concurrently
|
|
334
322
|
const watchStreams = existingDirs.map((dir) =>
|
|
335
323
|
Effect.gen(function*() {
|
|
336
|
-
|
|
337
|
-
yield* Effect.logInfo(`Starting to watch directory: ${dir}`)
|
|
338
|
-
}
|
|
324
|
+
yield* Effect.logInfo(`Starting to watch directory: ${dir}`)
|
|
339
325
|
|
|
340
326
|
const files: string[] = []
|
|
341
|
-
const watchStream =
|
|
327
|
+
const watchStream = fs.watch(dir, { recursive: true })
|
|
342
328
|
|
|
343
329
|
yield* watchStream
|
|
344
330
|
.pipe(
|
|
345
331
|
Stream.runForEach(
|
|
346
332
|
Effect.fn("effa-cli.watch.handleEvent")(function*(event) {
|
|
347
|
-
|
|
348
|
-
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`)
|
|
349
|
-
}
|
|
333
|
+
yield* Effect.logInfo(`File ${event._tag.toLowerCase()}: ${event.path}`)
|
|
350
334
|
|
|
351
335
|
// touch tsconfig.json on any file change
|
|
352
336
|
yield* touch("./tsconfig.json")
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
337
|
+
|
|
338
|
+
yield* Effect.logInfo("Updated tsconfig.json")
|
|
356
339
|
|
|
357
340
|
// touch vite config only on file updates (not creates/deletes)
|
|
358
341
|
if (
|
|
@@ -361,20 +344,23 @@ Effect
|
|
|
361
344
|
&& !files.includes(event.path)
|
|
362
345
|
) {
|
|
363
346
|
yield* touch(viteConfigFile)
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
347
|
+
|
|
348
|
+
yield* Effect.logInfo("Updated vite.config.ts")
|
|
349
|
+
|
|
367
350
|
files.push(event.path)
|
|
368
351
|
}
|
|
369
352
|
})
|
|
370
353
|
)
|
|
371
354
|
)
|
|
372
355
|
.pipe(
|
|
356
|
+
Effect.andThen(
|
|
357
|
+
Effect.addFinalizer(() => Effect.logInfo(`Stopped watching directory: ${dir}`))
|
|
358
|
+
),
|
|
373
359
|
Effect.forkScoped
|
|
374
360
|
)
|
|
375
361
|
|
|
376
362
|
// also start monitoring indexes in the watched directory
|
|
377
|
-
yield* monitorIndexes(dir
|
|
363
|
+
yield* monitorIndexes(dir)
|
|
378
364
|
})
|
|
379
365
|
)
|
|
380
366
|
|
|
@@ -394,13 +380,13 @@ Effect
|
|
|
394
380
|
*/
|
|
395
381
|
const packagejsonUpdater = Effect.fn("effa-cli.packagejsonUpdater")(
|
|
396
382
|
function*(startDir: string, p: string, levels = 0) {
|
|
397
|
-
yield* Effect.
|
|
383
|
+
yield* Effect.logInfo(`Generating exports for ${p}`)
|
|
398
384
|
|
|
399
385
|
const exportMappings = yield* extractExportMappings(path.resolve(startDir, p))
|
|
400
386
|
|
|
401
387
|
// if exportMappings is empty skip export generation
|
|
402
388
|
if (exportMappings === "") {
|
|
403
|
-
yield* Effect.
|
|
389
|
+
yield* Effect.logInfo(`No src directory found for ${p}, skipping export generation`)
|
|
404
390
|
return
|
|
405
391
|
}
|
|
406
392
|
|
|
@@ -447,7 +433,7 @@ Effect
|
|
|
447
433
|
const pkgJson = JSON.parse(yield* fs.readFileString(p + "/package.json", "utf-8"))
|
|
448
434
|
pkgJson.exports = packageExports
|
|
449
435
|
|
|
450
|
-
yield* Effect.
|
|
436
|
+
yield* Effect.logInfo(`Writing updated package.json for ${p}`)
|
|
451
437
|
|
|
452
438
|
return yield* fs.writeFileString(
|
|
453
439
|
p + "/package.json",
|
|
@@ -456,10 +442,118 @@ Effect
|
|
|
456
442
|
}
|
|
457
443
|
)
|
|
458
444
|
|
|
445
|
+
/**
|
|
446
|
+
* Monitors a directory for TypeScript file changes and automatically updates package.json exports.
|
|
447
|
+
* Generates initial package.json exports, then watches the src directory for changes to regenerate exports.
|
|
448
|
+
*
|
|
449
|
+
* @param watchPath - The directory path containing the package.json and src to monitor
|
|
450
|
+
* @param levels - Optional depth limit for export filtering (0 = no limit)
|
|
451
|
+
* @returns An Effect that sets up package.json monitoring
|
|
452
|
+
*/
|
|
453
|
+
const monitorPackageJson = Effect.fn("effa-cli.monitorPackageJson")(
|
|
454
|
+
function*(startDir: string, watchPath: string, levels = 0) {
|
|
455
|
+
yield* packagejsonUpdater(startDir, watchPath, levels)
|
|
456
|
+
|
|
457
|
+
const srcPath = watchPath === "." ? "./src" : `${watchPath}/src`
|
|
458
|
+
|
|
459
|
+
if (!(yield* fs.exists(srcPath))) {
|
|
460
|
+
yield* Effect.logWarning(`Source directory ${srcPath} does not exist - skipping monitoring`)
|
|
461
|
+
return
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
const watchStream = fs.watch(srcPath, { recursive: true })
|
|
465
|
+
|
|
466
|
+
yield* watchStream.pipe(
|
|
467
|
+
Stream.runForEach(
|
|
468
|
+
Effect.fn("effa-cli.monitorPackageJson.handleEvent")(function*(_) {
|
|
469
|
+
yield* packagejsonUpdater(startDir, watchPath, levels)
|
|
470
|
+
})
|
|
471
|
+
),
|
|
472
|
+
Effect.andThen(
|
|
473
|
+
Effect.addFinalizer(() => Effect.logInfo(`Stopped monitoring package.json for: ${watchPath}`))
|
|
474
|
+
),
|
|
475
|
+
Effect.forkScoped
|
|
476
|
+
)
|
|
477
|
+
}
|
|
478
|
+
)
|
|
479
|
+
|
|
459
480
|
/*
|
|
460
481
|
* CLI
|
|
461
482
|
*/
|
|
462
483
|
|
|
484
|
+
const WrapAsOption = Options.text("wrap").pipe(
|
|
485
|
+
Options.withAlias("w"),
|
|
486
|
+
Options.optional,
|
|
487
|
+
Options.withDescription(
|
|
488
|
+
"Wrap child bash command: the lifetime of the CLI command will be tied to the child process"
|
|
489
|
+
)
|
|
490
|
+
)
|
|
491
|
+
|
|
492
|
+
// has prio over WrapAsOption
|
|
493
|
+
const WrapAsArg = Args
|
|
494
|
+
.text({
|
|
495
|
+
name: "wrap"
|
|
496
|
+
})
|
|
497
|
+
.pipe(
|
|
498
|
+
Args.atLeast(1),
|
|
499
|
+
Args.optional,
|
|
500
|
+
Args.withDescription(
|
|
501
|
+
"Wrap child bash command: the lifetime of the CLI command will be tied to the child process"
|
|
502
|
+
)
|
|
503
|
+
)
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Creates a command that automatically includes wrap functionality for executing child bash commands.
|
|
507
|
+
* Combines both option-based (--wrap) and argument-based wrap parameters, giving priority to arguments.
|
|
508
|
+
* If a wrap command is provided, it will be executed **after** the main command handler.
|
|
509
|
+
*
|
|
510
|
+
* @param name - The command name
|
|
511
|
+
* @param config - The command configuration (options, args, etc.)
|
|
512
|
+
* @param handler - The main command handler function
|
|
513
|
+
* @param completionMessage - Optional message to log when the command completes
|
|
514
|
+
* @returns A Command with integrated wrap functionality
|
|
515
|
+
*/
|
|
516
|
+
const makeCommandWithWrap = <Name extends string, const Config extends Command.Command.Config, R, E>(
|
|
517
|
+
name: Name,
|
|
518
|
+
config: Config,
|
|
519
|
+
handler: (_: Types.Simplify<Command.Command.ParseConfig<Config>>) => Effect.Effect<void, E, R>,
|
|
520
|
+
completionMessage?: string
|
|
521
|
+
): Command.Command<
|
|
522
|
+
Name,
|
|
523
|
+
CommandExecutor | R,
|
|
524
|
+
PlatformError | E,
|
|
525
|
+
Types.Simplify<Command.Command.ParseConfig<Config>>
|
|
526
|
+
> =>
|
|
527
|
+
Command.make(
|
|
528
|
+
name,
|
|
529
|
+
{ ...config, wo: WrapAsOption, wa: WrapAsArg },
|
|
530
|
+
Effect.fn("effa-cli.withWrapHandler")(function*(_) {
|
|
531
|
+
const { wa, wo, ...cfg } = _ as unknown as {
|
|
532
|
+
wo: Option.Option<string>
|
|
533
|
+
wa: Option.Option<[string, ...string[]]>
|
|
534
|
+
} & Types.Simplify<Command.Command.ParseConfig<Config>>
|
|
535
|
+
|
|
536
|
+
if (completionMessage) {
|
|
537
|
+
yield* Effect.addFinalizer(() => Effect.logInfo(completionMessage))
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
const wrapOption = Option.orElse(wa, () => wo)
|
|
541
|
+
|
|
542
|
+
yield* handler(cfg as any)
|
|
543
|
+
|
|
544
|
+
if (Option.isSome(wrapOption)) {
|
|
545
|
+
const val = Array.isArray(wrapOption.value)
|
|
546
|
+
? wrapOption.value.join(" ")
|
|
547
|
+
: wrapOption.value
|
|
548
|
+
|
|
549
|
+
yield* Effect.logInfo(`Spawning child command: ${val}`)
|
|
550
|
+
yield* runNodeCommand(val)
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
return
|
|
554
|
+
}, (_) => Effect.scoped(_))
|
|
555
|
+
)
|
|
556
|
+
|
|
463
557
|
const EffectAppLibsPath = Args
|
|
464
558
|
.directory({
|
|
465
559
|
exists: "yes",
|
|
@@ -495,7 +589,7 @@ Effect
|
|
|
495
589
|
"ue",
|
|
496
590
|
{},
|
|
497
591
|
Effect.fn("effa-cli.ue")(function*({}) {
|
|
498
|
-
yield* Effect.
|
|
592
|
+
yield* Effect.logInfo("Update effect-app and/or effect packages")
|
|
499
593
|
|
|
500
594
|
const prompted = yield* Prompt.select({
|
|
501
595
|
choices: [
|
|
@@ -538,130 +632,118 @@ Effect
|
|
|
538
632
|
)
|
|
539
633
|
.pipe(Command.withDescription("Update effect-app and/or effect packages"))
|
|
540
634
|
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
|
|
635
|
+
const watch = makeCommandWithWrap(
|
|
636
|
+
"watch",
|
|
637
|
+
{},
|
|
638
|
+
Effect.fn("effa-cli.watch")(function*({}) {
|
|
639
|
+
return yield* watcher()
|
|
640
|
+
}),
|
|
641
|
+
"Stopped watching API resources and models"
|
|
544
642
|
)
|
|
545
|
-
|
|
546
|
-
const watch = Command
|
|
547
|
-
.make(
|
|
548
|
-
"watch",
|
|
549
|
-
{ debug: DebugOption },
|
|
550
|
-
Effect.fn("effa-cli.watch")(function*({ debug }) {
|
|
551
|
-
return yield* watcher(debug)
|
|
552
|
-
})
|
|
553
|
-
)
|
|
554
643
|
.pipe(
|
|
555
644
|
Command.withDescription(
|
|
556
645
|
"Watch API resources and models for changes and update tsconfig.json and vite.config.ts accordingly"
|
|
557
646
|
)
|
|
558
647
|
)
|
|
559
648
|
|
|
560
|
-
const indexMulti =
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
Effect.
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
const
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
} else {
|
|
576
|
-
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`)
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
if (existingDirs.length === 0) {
|
|
581
|
-
return yield* Effect.logWarning("No directories to monitor - exiting")
|
|
649
|
+
const indexMulti = makeCommandWithWrap(
|
|
650
|
+
"index-multi",
|
|
651
|
+
{},
|
|
652
|
+
Effect.fn("effa-cli.index-multi")(function*({}) {
|
|
653
|
+
yield* Effect.logInfo("Starting multi-index monitoring")
|
|
654
|
+
|
|
655
|
+
const dirs = ["./api/src"]
|
|
656
|
+
|
|
657
|
+
const existingDirs: string[] = []
|
|
658
|
+
for (const dir of dirs) {
|
|
659
|
+
const dirExists = yield* fs.exists(dir)
|
|
660
|
+
if (dirExists) {
|
|
661
|
+
existingDirs.push(dir)
|
|
662
|
+
} else {
|
|
663
|
+
yield* Effect.logWarning(`Directory ${dir} does not exist - skipping`)
|
|
582
664
|
}
|
|
665
|
+
}
|
|
583
666
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
667
|
+
const monitors = existingDirs.map((dir) => monitorIndexes(dir))
|
|
668
|
+
yield* Effect.all(monitors, { concurrency: monitors.length })
|
|
669
|
+
}),
|
|
670
|
+
"Stopped multi-index monitoring"
|
|
671
|
+
)
|
|
588
672
|
.pipe(
|
|
589
673
|
Command.withDescription(
|
|
590
674
|
"Monitor multiple directories for index and controller file changes"
|
|
591
675
|
)
|
|
592
676
|
)
|
|
593
677
|
|
|
594
|
-
const packagejson =
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
const startDir = path.resolve()
|
|
678
|
+
const packagejson = makeCommandWithWrap(
|
|
679
|
+
"packagejson",
|
|
680
|
+
{},
|
|
681
|
+
Effect.fn("effa-cli.packagejson")(function*({}) {
|
|
682
|
+
// https://nodejs.org/api/path.html#pathresolvepaths
|
|
683
|
+
const startDir = path.resolve()
|
|
601
684
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
685
|
+
return yield* monitorPackageJson(startDir, ".")
|
|
686
|
+
}),
|
|
687
|
+
"Stopped monitoring root package.json exports"
|
|
688
|
+
)
|
|
605
689
|
.pipe(
|
|
606
690
|
Command.withDescription("Generate and update root-level package.json exports mappings for TypeScript modules")
|
|
607
691
|
)
|
|
608
692
|
|
|
609
|
-
const packagejsonPackages =
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
const startDir = path.resolve()
|
|
693
|
+
const packagejsonPackages = makeCommandWithWrap(
|
|
694
|
+
"packagejson-packages",
|
|
695
|
+
{},
|
|
696
|
+
Effect.fn("effa-cli.packagejson-packages")(function*({}) {
|
|
697
|
+
// https://nodejs.org/api/path.html#pathresolvepaths
|
|
698
|
+
const startDir = path.resolve()
|
|
616
699
|
|
|
617
|
-
|
|
700
|
+
const packagesDir = path.join(startDir, "packages")
|
|
618
701
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
// get all package directories
|
|
625
|
-
const packageDirs = yield* fs.readDirectory(packagesDir)
|
|
702
|
+
const packagesExists = yield* fs.exists(packagesDir)
|
|
703
|
+
if (!packagesExists) {
|
|
704
|
+
return yield* Effect.logWarning("No packages directory found")
|
|
705
|
+
}
|
|
626
706
|
|
|
627
|
-
|
|
707
|
+
// get all package directories
|
|
708
|
+
const packageDirs = yield* fs.readDirectory(packagesDir)
|
|
628
709
|
|
|
629
|
-
|
|
630
|
-
for (const packageName of packageDirs) {
|
|
631
|
-
const packagePath = path.join(packagesDir, packageName)
|
|
632
|
-
const packageJsonExists = yield* fs.exists(path.join(packagePath, "package.json"))
|
|
633
|
-
const srcExists = yield* fs.exists(path.join(packagePath, "src"))
|
|
710
|
+
const validPackages: string[] = []
|
|
634
711
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
712
|
+
// filter packages that have package.json and src directory
|
|
713
|
+
for (const packageName of packageDirs) {
|
|
714
|
+
const packagePath = path.join(packagesDir, packageName)
|
|
715
|
+
const packageJsonExists = yield* fs.exists(path.join(packagePath, "package.json"))
|
|
716
|
+
const srcExists = yield* fs.exists(path.join(packagePath, "src"))
|
|
638
717
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
}
|
|
718
|
+
const shouldExclude = false
|
|
719
|
+
|| packageName.endsWith("eslint-codegen-model")
|
|
720
|
+
|| packageName.endsWith("vue-components")
|
|
643
721
|
|
|
644
|
-
if (
|
|
645
|
-
|
|
722
|
+
if (packageJsonExists && srcExists && !shouldExclude) {
|
|
723
|
+
validPackages.push(packagePath)
|
|
646
724
|
}
|
|
725
|
+
}
|
|
647
726
|
|
|
648
|
-
|
|
727
|
+
yield* Effect.logInfo(`Found ${validPackages.length} packages to update`)
|
|
649
728
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
)
|
|
729
|
+
// update each package sequentially
|
|
730
|
+
yield* Effect.all(
|
|
731
|
+
validPackages.map(
|
|
732
|
+
Effect.fnUntraced(function*(packagePath) {
|
|
733
|
+
const relativePackagePath = path.relative(startDir, packagePath)
|
|
734
|
+
yield* Effect.logInfo(`Updating ${relativePackagePath}`)
|
|
735
|
+
return yield* monitorPackageJson(startDir, relativePackagePath)
|
|
736
|
+
})
|
|
659
737
|
)
|
|
738
|
+
)
|
|
660
739
|
|
|
661
|
-
|
|
662
|
-
|
|
740
|
+
yield* Effect.logInfo("All packages updated successfully")
|
|
741
|
+
}),
|
|
742
|
+
"Stopped monitoring package.json exports for all packages"
|
|
743
|
+
)
|
|
744
|
+
.pipe(
|
|
745
|
+
Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo")
|
|
663
746
|
)
|
|
664
|
-
.pipe(Command.withDescription("Generate and update package.json exports mappings for all packages in monorepo"))
|
|
665
747
|
|
|
666
748
|
// configure CLI
|
|
667
749
|
const cli = Command.run(
|